From 81fa0511a4859ff022739af3ea36e7327e6acda5 Mon Sep 17 00:00:00 2001 From: Jeongsoo Lee Date: Tue, 29 Jul 2025 14:53:08 -0400 Subject: [PATCH 01/13] Refine docstring of `HandlerParameterOfExposedService` --- .../frameworks/cap/RemoteFlowSources.qll | 37 +++++++++++-------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll b/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll index 7f41a850..9f9b70a2 100644 --- a/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll +++ b/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll @@ -2,29 +2,34 @@ import javascript import advanced_security.javascript.frameworks.cap.CDS /** - * Either of: - * a parameter of a handler registered for an (exposed) service on an event. e.g. - * ```javascript - * this.on("SomeEvent", "SomeEntity", (req) => { ... }); - * this.before("SomeEvent", "SomeEntity", (req, next) => { ... }); - * SomeService.on("SomeEvent", "SomeEntity", (msg) => { ... }); - * SomeService.after("SomeEvent", "SomeEntity", (msg) => { ... }); + * The request parameter of a handler belonging to a service that is exposed to + * a protocol. e.g. All parameters named `req` is captured in the below example. + * ``` javascript + * // srv/service1.js + * module.exports = class Service1 extends cds.ApplicationService { + * this.on("SomeEvent", "SomeEntity", (req) => { ... }); + * this.before("SomeEvent", "SomeEntity", (req, next) => { ... }); + * } * ``` - * OR - * a handler parameter that is not connected to a service - * possibly due to cds compilation failure - * or non explicit service references in source. e.g. - * ```javascript - * cds.serve('./test-service').with((srv) => { - * srv.after('READ', req => req.target.data) //req - * }) + * ``` cds + * // srv/service1.cds + * service Service1 @(path: '/service-1') { ... } * ``` + * + * NOTE: CDS extraction can fail for various reasons, and if so the detection + * logic falls back on overapproximating on the parameters and assume they are + * exposed. */ class HandlerParameterOfExposedService extends RemoteFlowSource, HandlerParameter { HandlerParameterOfExposedService() { + /* 1. The CDS definition is there and we can determine it is exposed. */ this.getHandler().getHandlerRegistration().getService().getDefinition().isExposed() or - /* no precise service definition is known */ + /* + * 2. (Fallback) The CDS definition is not there, so no precise service definition + * is known. + */ + not exists(this.getHandler().getHandlerRegistration().getService().getDefinition()) } From 7958a8000d8fa5f4da8ae595daa4f48d362554d1 Mon Sep 17 00:00:00 2001 From: Jeongsoo Lee Date: Tue, 29 Jul 2025 15:09:28 -0400 Subject: [PATCH 02/13] Make `HandlerParameter` `extend` ParameterNode --- .../javascript/frameworks/cap/CDS.qll | 20 ++++++++++++++----- .../frameworks/cap/RemoteFlowSources.qll | 2 +- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/CDS.qll b/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/CDS.qll index d704a691..d8ab27b1 100644 --- a/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/CDS.qll +++ b/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/CDS.qll @@ -346,16 +346,26 @@ class HandlerRegistration extends MethodCallNode { } /** - * A parameter of a handler + * The first parameter of a handler, representing the request object received either directly + * from a user, or from another service that may be internal (defined in the same application) + * or external (defined in another application, or even served from a different server). + * e.g. + * ``` javascript + * module.exports = class Service1 extends cds.ApplicationService { + * this.on("SomeEvent", "SomeEntity", (req) => { ... }); + * this.before("SomeEvent", "SomeEntity", (req, next) => { ... }); + * this.after("SomeEvent", "SomeEntity", (req, next) => { ... }); + * } + * ``` + * All parameters named `req` above are captured. Also see `HandlerParameterOfExposedService` + * for a subset of this class that is only about handlers exposed to some protocol. */ -class HandlerParameter instanceof ParameterNode { +class HandlerParameter extends ParameterNode { Handler handler; HandlerParameter() { this = handler.getParameter(0) } Handler getHandler() { result = handler } - - string toString() { result = super.toString() } } /** @@ -832,7 +842,7 @@ class HandlerParameterData instanceof PropRead { string dataName; HandlerParameterData() { - this = handlerParameter.(SourceNode).getAPropertyRead("data").getAPropertyRead(dataName) + this = handlerParameter.getAPropertyRead("data").getAPropertyRead(dataName) } /** diff --git a/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll b/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll index 9f9b70a2..21170ffa 100644 --- a/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll +++ b/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll @@ -20,7 +20,7 @@ import advanced_security.javascript.frameworks.cap.CDS * logic falls back on overapproximating on the parameters and assume they are * exposed. */ -class HandlerParameterOfExposedService extends RemoteFlowSource, HandlerParameter { +class HandlerParameterOfExposedService extends HandlerParameter { HandlerParameterOfExposedService() { /* 1. The CDS definition is there and we can determine it is exposed. */ this.getHandler().getHandlerRegistration().getService().getDefinition().isExposed() From 1f027ff5a4bdbbd2178f816e7a341707d2eaef91 Mon Sep 17 00:00:00 2001 From: Jeongsoo Lee Date: Tue, 29 Jul 2025 15:26:02 -0400 Subject: [PATCH 03/13] Add class `PayloadPropertyReadOfHandlerParameterOfExposedService` --- .../frameworks/cap/RemoteFlowSources.qll | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll b/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll index 21170ffa..7da987a5 100644 --- a/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll +++ b/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll @@ -32,8 +32,24 @@ class HandlerParameterOfExposedService extends HandlerParameter { not exists(this.getHandler().getHandlerRegistration().getService().getDefinition()) } +} + +/** + * Reads of property belonging to a request parameter that is exposed to a protocol. + */ +class PayloadPropertyReadOfHandlerParameterOfExposedService extends RemoteFlowSource instanceof PropRead +{ + HandlerParameterOfExposedService handlerParameterOfExposedService; + + PayloadPropertyReadOfHandlerParameterOfExposedService() { + this = handlerParameterOfExposedService.getAPropertyRead() + } + + HandlerParameterOfExposedService getHandlerParameter() { + result = handlerParameterOfExposedService + } - override string toString() { result = HandlerParameter.super.toString() } + Handler getHandler() { result = handlerParameterOfExposedService.getHandler() } override string getSourceType() { result = "Parameter of an event handler belonging to an exposed service" From 7ae665c6963da5897b5d88b71a107d7bd5768ec1 Mon Sep 17 00:00:00 2001 From: Jeongsoo Lee Date: Tue, 29 Jul 2025 15:53:16 -0400 Subject: [PATCH 04/13] Finish first draft of class --- .../frameworks/cap/RemoteFlowSources.qll | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll b/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll index 7da987a5..7eba2e17 100644 --- a/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll +++ b/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll @@ -36,13 +36,23 @@ class HandlerParameterOfExposedService extends HandlerParameter { /** * Reads of property belonging to a request parameter that is exposed to a protocol. + * It currently models the following access paths: + * - `req.data` (from `cds.Event.data`) + * - `req.params` (from `cds.Request.params`) + * - `req.headers` (from `cds.Event.headers`) + * - `req.http.req` (from `cds.EventContext.http.req`) + * - `req.id` (from `cds.EventContext.id`) */ -class PayloadPropertyReadOfHandlerParameterOfExposedService extends RemoteFlowSource instanceof PropRead +class UserProvidedPropertyReadOfHandlerParameterOfExposedService extends RemoteFlowSource instanceof PropRead { HandlerParameterOfExposedService handlerParameterOfExposedService; - PayloadPropertyReadOfHandlerParameterOfExposedService() { - this = handlerParameterOfExposedService.getAPropertyRead() + UserProvidedPropertyReadOfHandlerParameterOfExposedService() { + /* 1. `req.(data|params|headers|id)` */ + this = handlerParameterOfExposedService.getAPropertyRead(["data", "params", "headers", "id"]) + or + /* 2. `req.http.req` */ + this = handlerParameterOfExposedService.getAPropertyRead("http").getAPropertyRead("req") } HandlerParameterOfExposedService getHandlerParameter() { @@ -52,6 +62,7 @@ class PayloadPropertyReadOfHandlerParameterOfExposedService extends RemoteFlowSo Handler getHandler() { result = handlerParameterOfExposedService.getHandler() } override string getSourceType() { - result = "Parameter of an event handler belonging to an exposed service" + result = + "Tainted property read of the request parameter of an event handler belonging to an exposed service" } } From 0b18c37822677bb4ca78412336c8c88e23185a76 Mon Sep 17 00:00:00 2001 From: Jeongsoo Lee Date: Tue, 29 Jul 2025 15:59:31 -0400 Subject: [PATCH 05/13] Minor comment formatting --- .../cds/remoteflowsources/srv/service3nocds.js | 12 ++++++------ .../cds/remoteflowsources/srv/service4withcds.js | 10 +++++----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service3nocds.js b/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service3nocds.js index e44cb18d..a4a341fe 100644 --- a/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service3nocds.js +++ b/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service3nocds.js @@ -1,20 +1,20 @@ -//this service unit test is a replica of requesthandler.js +// This service unit test is a replica of requesthandler.js const cds = require("@sap/cds"); class BooksService extends cds.ApplicationService { init() { const { Books, Authors } = this.entities - this.on('READ', [Books, Authors], req => req.target.data) //req - this.on('UPDATE', Books, req => { //req + this.on('READ', [Books, Authors], req => req.target.data) // req + this.on('UPDATE', Books, req => { // req let [ID] = req.params return Object.assign(Books.data[ID], req.data) }) - this.after('READ', req => req.target.data) //req - this.before('*', req => req.target.data) //req + this.after('READ', req => req.target.data) // req + this.before('*', req => req.target.data) // req return super.init() } } module.exports = BooksService cds.serve('./test-service').with((srv) => { - srv.before('READ', 'Books', (req) => req.reply([])) //req + srv.before('READ', 'Books', (req) => req.reply([])) // req }) \ No newline at end of file diff --git a/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service4withcds.js b/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service4withcds.js index acb705f0..ac5b64a8 100644 --- a/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service4withcds.js +++ b/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service4withcds.js @@ -2,8 +2,8 @@ const cds = require("@sap/cds"); class TestService extends cds.ApplicationService { init() { - this.before('READ', 'Test', (req) => req.reply([])) //req - this.after('READ', this.entities, req => req.target.data) //req + this.before('READ', 'Test', (req) => req.reply([])) // req + this.after('READ', this.entities, req => req.target.data) // req return super.init() } } @@ -11,7 +11,7 @@ module.exports = TestService cds.serve('./test-service').with((srv) => { const { Test, Service4 } = this.entities - srv.before('READ', 'Test', (req) => req.reply([])) //req - srv.on('READ', [Test, Service4], req => req.target.data) //req - srv.after('READ', req => req.target.data) //req + srv.before('READ', 'Test', (req) => req.reply([])) // req + srv.on('READ', [Test, Service4], req => req.target.data) // req + srv.after('READ', req => req.target.data) // req }) \ No newline at end of file From bb57c2218825224ab29cd88ee449552ee51d1da0 Mon Sep 17 00:00:00 2001 From: Jeongsoo Lee Date: Tue, 29 Jul 2025 16:03:17 -0400 Subject: [PATCH 06/13] Change indent level to 2 --- .../remoteflowsources/srv/service3nocds.js | 24 +++++++++---------- .../remoteflowsources/srv/service4withcds.js | 18 +++++++------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service3nocds.js b/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service3nocds.js index a4a341fe..5c420bbf 100644 --- a/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service3nocds.js +++ b/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service3nocds.js @@ -1,20 +1,20 @@ // This service unit test is a replica of requesthandler.js const cds = require("@sap/cds"); class BooksService extends cds.ApplicationService { - init() { - const { Books, Authors } = this.entities - this.on('READ', [Books, Authors], req => req.target.data) // req - this.on('UPDATE', Books, req => { // req - let [ID] = req.params - return Object.assign(Books.data[ID], req.data) - }) - this.after('READ', req => req.target.data) // req - this.before('*', req => req.target.data) // req - return super.init() - } + init() { + const { Books, Authors } = this.entities + this.on('READ', [Books, Authors], req => req.target.data) // req + this.on('UPDATE', Books, req => { // req + let [ID] = req.params + return Object.assign(Books.data[ID], req.data) + }) + this.after('READ', req => req.target.data) // req + this.before('*', req => req.target.data) // req + return super.init() + } } module.exports = BooksService cds.serve('./test-service').with((srv) => { - srv.before('READ', 'Books', (req) => req.reply([])) // req + srv.before('READ', 'Books', (req) => req.reply([])) // req }) \ No newline at end of file diff --git a/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service4withcds.js b/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service4withcds.js index ac5b64a8..6026f635 100644 --- a/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service4withcds.js +++ b/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service4withcds.js @@ -1,17 +1,17 @@ const cds = require("@sap/cds"); class TestService extends cds.ApplicationService { - init() { - this.before('READ', 'Test', (req) => req.reply([])) // req - this.after('READ', this.entities, req => req.target.data) // req - return super.init() - } + init() { + this.before('READ', 'Test', (req) => req.reply([])) // req + this.after('READ', this.entities, req => req.target.data) // req + return super.init() + } } module.exports = TestService cds.serve('./test-service').with((srv) => { - const { Test, Service4 } = this.entities - srv.before('READ', 'Test', (req) => req.reply([])) // req - srv.on('READ', [Test, Service4], req => req.target.data) // req - srv.after('READ', req => req.target.data) // req + const { Test, Service4 } = this.entities + srv.before('READ', 'Test', (req) => req.reply([])) // req + srv.on('READ', [Test, Service4], req => req.target.data) // req + srv.after('READ', req => req.target.data) // req }) \ No newline at end of file From de09d59e394943d2cdea3f36df14b162d0ccc949 Mon Sep 17 00:00:00 2001 From: Jeongsoo Lee Date: Tue, 29 Jul 2025 18:10:22 -0400 Subject: [PATCH 07/13] Refine more on `req.http.req` --- .../frameworks/cap/RemoteFlowSources.qll | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll b/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll index 7eba2e17..db4b1988 100644 --- a/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll +++ b/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll @@ -40,8 +40,14 @@ class HandlerParameterOfExposedService extends HandlerParameter { * - `req.data` (from `cds.Event.data`) * - `req.params` (from `cds.Request.params`) * - `req.headers` (from `cds.Event.headers`) - * - `req.http.req` (from `cds.EventContext.http.req`) + * - `req.http.req.*` (from `cds.EventContext.http.req`) * - `req.id` (from `cds.EventContext.id`) + * + * Note that `req.http.req` has type `require("@express").Request`, so their uses are + * completely identical. Subsequently, the models for this access path follow Express' + * API descriptions (as far as 3.x). Also see `Express::RequestInputAccess`, + * `Express::RequestHeaderAccess`, and `Express::RequestBodyAccess` of the standard + * library. */ class UserProvidedPropertyReadOfHandlerParameterOfExposedService extends RemoteFlowSource instanceof PropRead { @@ -51,8 +57,17 @@ class UserProvidedPropertyReadOfHandlerParameterOfExposedService extends RemoteF /* 1. `req.(data|params|headers|id)` */ this = handlerParameterOfExposedService.getAPropertyRead(["data", "params", "headers", "id"]) or - /* 2. `req.http.req` */ - this = handlerParameterOfExposedService.getAPropertyRead("http").getAPropertyRead("req") + /* 2. APIs stemming from `req.http.req`: Defined by Express.js */ + exists(PropRead reqHttpReq | + reqHttpReq = handlerParameterOfExposedService.getAPropertyRead("http").getAPropertyRead("req") + | + this = reqHttpReq.getAPropertyRead(["originalUrl", "hostname"]) or + this = + reqHttpReq + .getAPropertyRead(["query", "body", "params", "headers", "cookies"]) + .getAPropertyRead() or + this = reqHttpReq.getAMemberCall(["get", "is", "header", "param"]) + ) } HandlerParameterOfExposedService getHandlerParameter() { From 748b12c8ad93311331b51d8060d91e2aaa278d4c Mon Sep 17 00:00:00 2001 From: Jeongsoo Lee Date: Tue, 29 Jul 2025 19:18:25 -0400 Subject: [PATCH 08/13] Remove redundant files and add cases - `service3nocds.js` had a service that was named differently. Clarified the gist of the file using tags. - `service4.js` was identical to `service3nocds.js`, except for the `cds.serve` call. This is better suited for `server.js`. - Since `HandlerParameterOfExposedService` is no longer a `RemoteFlowSource`, we place another query for testing it only. - The case categorization is as follows: - `service1`: Exposed service with reads from properties and method calls, some of which are tainted and not tainted. - `service2`: Service that both receives data from service1 and service4 but does not propagate it further. - `service3`: Service without a CDS declaration, simulating extraction failure. Should be recognized as exposed, from overapproximation. Consists of identical property reads / method calls as those of `service1`. - `service4`: Service that is explicitly declared as internal only. Consists of identical property reads / method calls as those of `service1`, but is not a taint source from being unexposed. --- .../cds/remoteflowsources/ExposedServices.ql | 5 ++ .../models/cds/remoteflowsources/server.js | 4 ++ .../cds/remoteflowsources/srv/service1.js | 60 +++++++++++++++- .../cds/remoteflowsources/srv/service2.cds | 4 -- .../cds/remoteflowsources/srv/service2.js | 4 +- .../cds/remoteflowsources/srv/service3.js | 71 +++++++++++++++++++ .../remoteflowsources/srv/service3nocds.js | 20 ------ .../cds/remoteflowsources/srv/service4.cds | 3 +- .../cds/remoteflowsources/srv/service4.js | 45 ++++++++++++ .../remoteflowsources/srv/service4withcds.js | 17 ----- 10 files changed, 186 insertions(+), 47 deletions(-) create mode 100644 javascript/frameworks/cap/test/models/cds/remoteflowsources/ExposedServices.ql create mode 100644 javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service3.js delete mode 100644 javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service3nocds.js create mode 100644 javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service4.js delete mode 100644 javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service4withcds.js diff --git a/javascript/frameworks/cap/test/models/cds/remoteflowsources/ExposedServices.ql b/javascript/frameworks/cap/test/models/cds/remoteflowsources/ExposedServices.ql new file mode 100644 index 00000000..6c16f676 --- /dev/null +++ b/javascript/frameworks/cap/test/models/cds/remoteflowsources/ExposedServices.ql @@ -0,0 +1,5 @@ +import javascript +import advanced_security.javascript.frameworks.cap.RemoteFlowSources + +from HandlerParameterOfExposedService handlerParameterOfExposedService +select handlerParameterOfExposedService \ No newline at end of file diff --git a/javascript/frameworks/cap/test/models/cds/remoteflowsources/server.js b/javascript/frameworks/cap/test/models/cds/remoteflowsources/server.js index b4f60916..c723dae1 100644 --- a/javascript/frameworks/cap/test/models/cds/remoteflowsources/server.js +++ b/javascript/frameworks/cap/test/models/cds/remoteflowsources/server.js @@ -2,3 +2,7 @@ const cds = require("@sap/cds"); const app = require("express")(); cds.serve("all").in(app); + +cds.serve('./some-service').with((srv) => { + srv.before('READ', 'Books', (req) => req.reply([])) // SAFE: Exposed service (fallback), but not a taint source +}) \ No newline at end of file diff --git a/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service1.js b/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service1.js index cbd15e66..05ad0d76 100644 --- a/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service1.js +++ b/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service1.js @@ -4,7 +4,65 @@ const cds = require("@sap/cds"); module.exports = class Service1 extends cds.ApplicationService { init() { this.on("send1", async (req) => { - const { messageToPass } = req.data; + const { messageToPass } = req.data; // UNSAFE: Taint source, Exposed service + const Service2 = await cds.connect.to("service-2"); + Service2.send("send2", { messageToPass }); + }); + + this.on("send2", async (req) => { + const [ messageToPass ] = req.params; // UNSAFE: Taint source, Exposed service + const Service2 = await cds.connect.to("service-2"); + Service2.send("send2", { messageToPass }); + }); + + this.on("send3", async (req) => { + const messageToPass = req.headers["user-agent"]; // UNSAFE: Taint source, Exposed service + const Service2 = await cds.connect.to("service-2"); + Service2.send("send2", { messageToPass }); + }); + + this.on("send4", async (req) => { + const messageToPass1 = req.http.req.query.someProp; // UNSAFE: Taint source, Exposed service + const messageToPass2 = req.http.req.body.someProp; // UNSAFE: Taint source, Exposed service + const messageToPass3 = req.http.req.params.someProp; // UNSAFE: Taint source, Exposed service + const messageToPass4 = req.http.req.headers.someProp; // UNSAFE: Taint source, Exposed service + const messageToPass5 = req.http.req.cookies.someProp; // UNSAFE: Taint source, Exposed service + const messageToPass6 = req.http.req.originalUrl; // UNSAFE: Taint source, Exposed service + const messageToPass7 = req.http.req.hostname; // UNSAFE: Taint source, Exposed service + const messageToPass8 = req.http.req.get("someProp"); // UNSAFE: Taint source, Exposed service + const messageToPass9 = req.http.req.is("someProp"); // UNSAFE: Taint source, Exposed service + const messageToPass10 = req.http.req.header("someProp"); // UNSAFE: Taint source, Exposed service + const messageToPass11 = req.http.req.param("someProp"); // UNSAFE: Taint source, Exposed service + const Service2 = await cds.connect.to("service-2"); // UNSAFE: Taint source, Exposed service + Service2.send("send2", { messageToPass1 }); + }); + + this.on("send5", async (req) => { + const messageToPass = req.id; // UNSAFE: Taint source, Exposed service + const Service2 = await cds.connect.to("service-2"); + Service2.send("send2", { messageToPass }); + }); + + this.on("send6", async (req) => { + const messageToPass = req.locale; // SAFE: Not a taint source, Exposed service + const Service2 = await cds.connect.to("service-2"); + Service2.send("send2", { messageToPass }); + }); + + this.on("send7", async (req) => { + const messageToPass = req.tenant; // SAFE: Not a taint source, Exposed service + const Service2 = await cds.connect.to("service-2"); + Service2.send("send2", { messageToPass }); + }); + + this.on("send8", async (req) => { + const messageToPass = req.timestamp; // SAFE: Not a taint source, Exposed service + const Service2 = await cds.connect.to("service-2"); + Service2.send("send2", { messageToPass }); + }); + + this.on("send9", async (req) => { + const messageToPass = req.user; // SAFE: Not a taint source, Exposed service const Service2 = await cds.connect.to("service-2"); Service2.send("send2", { messageToPass }); }); diff --git a/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service2.cds b/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service2.cds index 26a56b56..56868c07 100644 --- a/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service2.cds +++ b/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service2.cds @@ -1,12 +1,8 @@ using { advanced_security.log_injection.sample_entities as db_schema } from '../db/schema'; -/* Uncomment the line below to make the service hidden */ -// @protocol: 'none' service Service2 @(path: '/service-2') { - /* Entity to send READ/GET about. */ entity Service2Entity as projection on db_schema.Entity2 excluding { Attribute4 } - /* API to talk to Service2. */ action send2 ( messageToPass: String ) returns String; diff --git a/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service2.js b/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service2.js index 703d8f3d..42641a7d 100644 --- a/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service2.js +++ b/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service2.js @@ -1,10 +1,8 @@ const cds = require("@sap/cds"); module.exports = cds.service.impl(function () { - /* Log upon receiving an "send2" event. */ this.on("send2", async (msg) => { - const { messageToPass } = msg.data; - /* Do something with the received data; customize below to individual needs. */ + const { messageToPass } = msg.data; // UNSAFE: Taint source, Exposed service const doSomething = console.log; doSomething(messageToPass); }); diff --git a/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service3.js b/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service3.js new file mode 100644 index 00000000..45a4afe1 --- /dev/null +++ b/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service3.js @@ -0,0 +1,71 @@ +// This service unit test is a replica of requesthandler.js +const cds = require("@sap/cds"); +class Service3 extends cds.ApplicationService { + init() { + this.on("send1", async (req) => { + const { messageToPass } = req.data; // UNSAFE: Taint source, Exposed service (fallback) + const Service2 = await cds.connect.to("service-2"); + Service2.send("send2", { messageToPass }); + }); + + this.on("send2", async (req) => { + const [ messageToPass ] = req.params; // UNSAFE: Taint source, Exposed service (fallback) + const Service2 = await cds.connect.to("service-2"); + Service2.send("send2", { messageToPass }); + }); + + this.on("send3", async (req) => { + const messageToPass = req.headers["user-agent"]; // UNSAFE: Taint source, Exposed service (fallback) + const Service2 = await cds.connect.to("service-2"); + Service2.send("send2", { messageToPass }); + }); + + this.on("send4", async (req) => { + const messageToPass1 = req.http.req.query.someProp; // UNSAFE: Taint source, Exposed service (fallback) + const messageToPass2 = req.http.req.body.someProp; // UNSAFE: Taint source, Exposed service (fallback) + const messageToPass3 = req.http.req.params.someProp; // UNSAFE: Taint source, Exposed service (fallback) + const messageToPass4 = req.http.req.headers.someProp; // UNSAFE: Taint source, Exposed service (fallback) + const messageToPass5 = req.http.req.cookies.someProp; // UNSAFE: Taint source, Exposed service (fallback) + const messageToPass6 = req.http.req.originalUrl; // UNSAFE: Taint source, Exposed service (fallback) + const messageToPass7 = req.http.req.hostname; // UNSAFE: Taint source, Exposed service (fallback) + const messageToPass8 = req.http.req.get("someProp"); // UNSAFE: Taint source, Exposed service (fallback) + const messageToPass9 = req.http.req.is("someProp"); // UNSAFE: Taint source, Exposed service (fallback) + const messageToPass10 = req.http.req.header("someProp"); // UNSAFE: Taint source, Exposed service (fallback) + const messageToPass11 = req.http.req.param("someProp"); // UNSAFE: Taint source, Exposed service (fallback) + const Service2 = await cds.connect.to("service-2"); // UNSAFE: Taint source, Exposed service (fallback) + Service2.send("send2", { messageToPass1 }); + }); + + this.on("send5", async (req) => { + const messageToPass = req.id; // UNSAFE: Taint source, Exposed service (fallback) + const Service2 = await cds.connect.to("service-2"); + Service2.send("send2", { messageToPass }); + }); + + this.on("send6", async (req) => { + const messageToPass = req.locale; // SAFE: Not a taint source, Exposed service (fallback) + const Service2 = await cds.connect.to("service-2"); + Service2.send("send2", { messageToPass }); + }); + + this.on("send7", async (req) => { + const messageToPass = req.tenant; // SAFE: Not a taint source, Exposed service (fallback) + const Service2 = await cds.connect.to("service-2"); + Service2.send("send2", { messageToPass }); + }); + + this.on("send8", async (req) => { + const messageToPass = req.timestamp; // SAFE: Not a taint source, Exposed service (fallback) + const Service2 = await cds.connect.to("service-2"); + Service2.send("send2", { messageToPass }); + }); + + this.on("send9", async (req) => { + const messageToPass = req.user; // SAFE: Not a taint source, Exposed service (fallback) + const Service2 = await cds.connect.to("service-2"); + Service2.send("send2", { messageToPass }); + }); + + return super.init() + } +} diff --git a/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service3nocds.js b/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service3nocds.js deleted file mode 100644 index 5c420bbf..00000000 --- a/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service3nocds.js +++ /dev/null @@ -1,20 +0,0 @@ -// This service unit test is a replica of requesthandler.js -const cds = require("@sap/cds"); -class BooksService extends cds.ApplicationService { - init() { - const { Books, Authors } = this.entities - this.on('READ', [Books, Authors], req => req.target.data) // req - this.on('UPDATE', Books, req => { // req - let [ID] = req.params - return Object.assign(Books.data[ID], req.data) - }) - this.after('READ', req => req.target.data) // req - this.before('*', req => req.target.data) // req - return super.init() - } -} -module.exports = BooksService - -cds.serve('./test-service').with((srv) => { - srv.before('READ', 'Books', (req) => req.reply([])) // req -}) \ No newline at end of file diff --git a/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service4.cds b/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service4.cds index e4637587..8e5282cb 100644 --- a/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service4.cds +++ b/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service4.cds @@ -1,10 +1,9 @@ using { advanced_security.log_injection.sample_entities as db_schema } from '../db/schema'; +@protocol: 'none' // NOTE: This service is internal use only. service Service4 @(path: '/service-4') { - /* Entity to send READ/GET about. */ entity Service4Entity as projection on db_schema.Entity4 excluding { Attribute4 } - /* API to talk to other services. */ action send4 ( messageToPass: String ) returns String; diff --git a/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service4.js b/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service4.js new file mode 100644 index 00000000..f9e0f726 --- /dev/null +++ b/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service4.js @@ -0,0 +1,45 @@ +const cds = require("@sap/cds"); + +module.exports = class Service5 extends cds.ApplicationService { + init() { + this.on("send1", async (req) => { + const { messageToPass } = req.data; // SAFE: Unexposed service, not a taint source + const Service2 = await cds.connect.to("service-2"); + Service2.send("send2", { messageToPass }); + }); + + this.on("send2", async (req) => { + const [ messageToPass ] = req.params; // SAFE: Unexposed service, not a taint source + const Service2 = await cds.connect.to("service-2"); + Service2.send("send2", { messageToPass }); + }); + + this.on("send3", async (req) => { + const messageToPass = req.headers["user-agent"]; // SAFE: Unexposed service, not a taint source + const Service2 = await cds.connect.to("service-2"); + Service2.send("send2", { messageToPass }); + }); + + this.on("send4", async (req) => { + const messageToPass1 = req.http.req.query.someProp; // SAFE: Unexposed service, not a taint source + const messageToPass2 = req.http.req.body.someProp; // SAFE: Unexposed service, not a taint source + const messageToPass3 = req.http.req.params.someProp; // SAFE: Unexposed service, not a taint source + const messageToPass4 = req.http.req.headers.someProp; // SAFE: Unexposed service, not a taint source + const messageToPass5 = req.http.req.cookies.someProp; // SAFE: Unexposed service, not a taint source + const messageToPass6 = req.http.req.originalUrl; // SAFE: Unexposed service, not a taint source + const messageToPass7 = req.http.req.hostname; // SAFE: Unexposed service, not a taint source + const messageToPass8 = req.http.req.get("someProp"); // SAFE: Unexposed service, not a taint source + const messageToPass9 = req.http.req.is("someProp"); // SAFE: Unexposed service, not a taint source + const messageToPass10 = req.http.req.header("someProp"); // SAFE: Unexposed service, not a taint source + const messageToPass11 = req.http.req.param("someProp"); // SAFE: Unexposed service, not a taint source + const Service2 = await cds.connect.to("service-2"); // SAFE: Unexposed service, not a taint source + Service2.send("send2", { messageToPass1 }); + }); + + this.on("send5", async (req) => { + const messageToPass = req.id; // SAFE: Unexposed service, not a taint source + const Service2 = await cds.connect.to("service-2"); + Service2.send("send2", { messageToPass }); + }); + } +}; diff --git a/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service4withcds.js b/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service4withcds.js deleted file mode 100644 index 6026f635..00000000 --- a/javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service4withcds.js +++ /dev/null @@ -1,17 +0,0 @@ -const cds = require("@sap/cds"); - -class TestService extends cds.ApplicationService { - init() { - this.before('READ', 'Test', (req) => req.reply([])) // req - this.after('READ', this.entities, req => req.target.data) // req - return super.init() - } -} -module.exports = TestService - -cds.serve('./test-service').with((srv) => { - const { Test, Service4 } = this.entities - srv.before('READ', 'Test', (req) => req.reply([])) // req - srv.on('READ', [Test, Service4], req => req.target.data) // req - srv.after('READ', req => req.target.data) // req -}) \ No newline at end of file From 52d49e7d6dfcc52c577f40a7c1ea5f31a994bcf7 Mon Sep 17 00:00:00 2001 From: Jeongsoo Lee Date: Thu, 31 Jul 2025 18:58:26 -0400 Subject: [PATCH 09/13] Edit docstring and remove `instanceof PropRead` constraint --- .../javascript/frameworks/cap/RemoteFlowSources.qll | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll b/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll index db4b1988..d4fee4a5 100644 --- a/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll +++ b/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll @@ -45,12 +45,11 @@ class HandlerParameterOfExposedService extends HandlerParameter { * * Note that `req.http.req` has type `require("@express").Request`, so their uses are * completely identical. Subsequently, the models for this access path follow Express' - * API descriptions (as far as 3.x). Also see `Express::RequestInputAccess`, + * API descriptions (as far back as 3.x). Also see `Express::RequestInputAccess`, * `Express::RequestHeaderAccess`, and `Express::RequestBodyAccess` of the standard * library. */ -class UserProvidedPropertyReadOfHandlerParameterOfExposedService extends RemoteFlowSource instanceof PropRead -{ +class UserProvidedPropertyReadOfHandlerParameterOfExposedService extends RemoteFlowSource { HandlerParameterOfExposedService handlerParameterOfExposedService; UserProvidedPropertyReadOfHandlerParameterOfExposedService() { From 3c0272aac63395222508dd1aafcfff7ccdce0939 Mon Sep 17 00:00:00 2001 From: Jeongsoo Lee Date: Mon, 4 Aug 2025 12:01:56 -0400 Subject: [PATCH 10/13] Update expected results of CQL Injection query The locations changed a little from altering the definition of `RemoteFlowSource` to the property reads of the parameter, not the parameter itself. --- .../cqlinjection/cqlinjection.expected | 744 ++++++------------ 1 file changed, 228 insertions(+), 516 deletions(-) diff --git a/javascript/frameworks/cap/test/queries/cqlinjection/cqlinjection.expected b/javascript/frameworks/cap/test/queries/cqlinjection/cqlinjection.expected index 2053762e..b70e84db 100644 --- a/javascript/frameworks/cap/test/queries/cqlinjection/cqlinjection.expected +++ b/javascript/frameworks/cap/test/queries/cqlinjection/cqlinjection.expected @@ -2,12 +2,10 @@ WARNING: module 'PathGraph' has been deprecated and may be removed in future (Cq WARNING: type 'PathNode' has been deprecated and may be removed in future (CqlInjection.ql:17,37-55) WARNING: type 'PathNode' has been deprecated and may be removed in future (CqlInjection.ql:17,64-82) nodes -| srv/service1.js:12:33:12:35 | req | -| srv/service1.js:12:33:12:35 | req | | srv/service1.js:13:13:13:18 | { id } | | srv/service1.js:13:13:13:29 | id | | srv/service1.js:13:15:13:16 | id | -| srv/service1.js:13:22:13:24 | req | +| srv/service1.js:13:22:13:29 | req.data | | srv/service1.js:13:22:13:29 | req.data | | srv/service1.js:14:13:14:58 | query | | srv/service1.js:14:21:14:58 | SELECT. ... " + id) | @@ -15,12 +13,10 @@ nodes | srv/service1.js:14:56:14:57 | id | | srv/service1.js:15:15:15:19 | query | | srv/service1.js:15:15:15:19 | query | -| srv/service1.js:18:33:18:35 | req | -| srv/service1.js:18:33:18:35 | req | | srv/service1.js:19:13:19:18 | { id } | | srv/service1.js:19:13:19:29 | id | | srv/service1.js:19:15:19:16 | id | -| srv/service1.js:19:22:19:24 | req | +| srv/service1.js:19:22:19:29 | req.data | | srv/service1.js:19:22:19:29 | req.data | | srv/service1.js:20:13:20:58 | query | | srv/service1.js:20:21:20:58 | SELECT. ... ` + id) | @@ -28,12 +24,10 @@ nodes | srv/service1.js:20:56:20:57 | id | | srv/service1.js:21:15:21:19 | query | | srv/service1.js:21:15:21:19 | query | -| srv/service1.js:24:33:24:35 | req | -| srv/service1.js:24:33:24:35 | req | | srv/service1.js:25:13:25:18 | { id } | | srv/service1.js:25:13:25:29 | id | | srv/service1.js:25:15:25:16 | id | -| srv/service1.js:25:22:25:24 | req | +| srv/service1.js:25:22:25:29 | req.data | | srv/service1.js:25:22:25:29 | req.data | | srv/service1.js:26:13:26:58 | query | | srv/service1.js:26:21:26:58 | SELECT. ... ${id}`) | @@ -41,44 +35,36 @@ nodes | srv/service1.js:26:54:26:55 | id | | srv/service1.js:27:15:27:19 | query | | srv/service1.js:27:15:27:19 | query | -| srv/service1.js:36:33:36:35 | req | -| srv/service1.js:36:33:36:35 | req | | srv/service1.js:37:13:37:18 | { id } | | srv/service1.js:37:13:37:29 | id | | srv/service1.js:37:15:37:16 | id | -| srv/service1.js:37:22:37:24 | req | +| srv/service1.js:37:22:37:29 | req.data | | srv/service1.js:37:22:37:29 | req.data | | srv/service1.js:38:33:38:43 | "ID =" + id | | srv/service1.js:38:33:38:43 | "ID =" + id | | srv/service1.js:38:42:38:43 | id | -| srv/service1.js:41:33:41:35 | req | -| srv/service1.js:41:33:41:35 | req | | srv/service1.js:42:13:42:18 | { id } | | srv/service1.js:42:13:42:29 | id | | srv/service1.js:42:15:42:16 | id | -| srv/service1.js:42:22:42:24 | req | +| srv/service1.js:42:22:42:29 | req.data | | srv/service1.js:42:22:42:29 | req.data | | srv/service1.js:43:33:43:43 | `ID =` + id | | srv/service1.js:43:33:43:43 | `ID =` + id | | srv/service1.js:43:42:43:43 | id | -| srv/service1.js:46:33:46:35 | req | -| srv/service1.js:46:33:46:35 | req | | srv/service1.js:47:13:47:18 | { id } | | srv/service1.js:47:13:47:29 | id | | srv/service1.js:47:15:47:16 | id | -| srv/service1.js:47:22:47:24 | req | +| srv/service1.js:47:22:47:29 | req.data | | srv/service1.js:47:22:47:29 | req.data | | srv/service1.js:48:33:48:42 | `ID=${id}` | | srv/service1.js:48:33:48:42 | `ID=${id}` | | srv/service1.js:48:39:48:40 | id | -| srv/service1.js:71:33:71:35 | req | -| srv/service1.js:71:33:71:35 | req | | srv/service1.js:72:13:72:26 | { id, amount } | | srv/service1.js:72:13:72:37 | amount | | srv/service1.js:72:13:72:37 | id | | srv/service1.js:72:15:72:16 | id | | srv/service1.js:72:19:72:24 | amount | -| srv/service1.js:72:30:72:32 | req | +| srv/service1.js:72:30:72:37 | req.data | | srv/service1.js:72:30:72:37 | req.data | | srv/service1.js:73:33:73:54 | "col1 = ... amount | | srv/service1.js:73:33:73:54 | "col1 = ... amount | @@ -86,14 +72,12 @@ nodes | srv/service1.js:73:63:73:76 | "col1 = " + id | | srv/service1.js:73:63:73:76 | "col1 = " + id | | srv/service1.js:73:75:73:76 | id | -| srv/service1.js:76:33:76:35 | req | -| srv/service1.js:76:33:76:35 | req | | srv/service1.js:77:13:77:26 | { id, amount } | | srv/service1.js:77:13:77:37 | amount | | srv/service1.js:77:13:77:37 | id | | srv/service1.js:77:15:77:16 | id | | srv/service1.js:77:19:77:24 | amount | -| srv/service1.js:77:30:77:32 | req | +| srv/service1.js:77:30:77:37 | req.data | | srv/service1.js:77:30:77:37 | req.data | | srv/service1.js:78:33:78:54 | "col1 = ... amount | | srv/service1.js:78:33:78:54 | "col1 = ... amount | @@ -101,14 +85,12 @@ nodes | srv/service1.js:78:63:78:76 | `col1 = ` + id | | srv/service1.js:78:63:78:76 | `col1 = ` + id | | srv/service1.js:78:75:78:76 | id | -| srv/service1.js:81:33:81:35 | req | -| srv/service1.js:81:33:81:35 | req | | srv/service1.js:82:13:82:26 | { id, amount } | | srv/service1.js:82:13:82:37 | amount | | srv/service1.js:82:13:82:37 | id | | srv/service1.js:82:15:82:16 | id | | srv/service1.js:82:19:82:24 | amount | -| srv/service1.js:82:30:82:32 | req | +| srv/service1.js:82:30:82:37 | req.data | | srv/service1.js:82:30:82:37 | req.data | | srv/service1.js:83:33:83:54 | "col1 = ... amount | | srv/service1.js:83:33:83:54 | "col1 = ... amount | @@ -116,88 +98,72 @@ nodes | srv/service1.js:83:63:83:76 | `col1 = ${id}` | | srv/service1.js:83:63:83:76 | `col1 = ${id}` | | srv/service1.js:83:73:83:74 | id | -| srv/service1.js:86:33:86:35 | req | -| srv/service1.js:86:33:86:35 | req | | srv/service1.js:87:13:87:26 | { id, amount } | | srv/service1.js:87:13:87:37 | amount | | srv/service1.js:87:19:87:24 | amount | -| srv/service1.js:87:30:87:32 | req | +| srv/service1.js:87:30:87:37 | req.data | | srv/service1.js:87:30:87:37 | req.data | | srv/service1.js:88:33:88:54 | "col1 = ... amount | | srv/service1.js:88:33:88:54 | "col1 = ... amount | | srv/service1.js:88:49:88:54 | amount | -| srv/service1.js:121:33:121:35 | req | -| srv/service1.js:121:33:121:35 | req | | srv/service1.js:122:13:122:18 | { id } | | srv/service1.js:122:13:122:29 | id | | srv/service1.js:122:15:122:16 | id | -| srv/service1.js:122:22:122:24 | req | +| srv/service1.js:122:22:122:29 | req.data | | srv/service1.js:122:22:122:29 | req.data | | srv/service1.js:123:35:123:45 | "ID =" + id | | srv/service1.js:123:35:123:45 | "ID =" + id | | srv/service1.js:123:44:123:45 | id | -| srv/service1.js:126:33:126:35 | req | -| srv/service1.js:126:33:126:35 | req | | srv/service1.js:127:13:127:18 | { id } | | srv/service1.js:127:13:127:29 | id | | srv/service1.js:127:15:127:16 | id | -| srv/service1.js:127:22:127:24 | req | +| srv/service1.js:127:22:127:29 | req.data | | srv/service1.js:127:22:127:29 | req.data | | srv/service1.js:128:35:128:45 | `ID =` + id | | srv/service1.js:128:35:128:45 | `ID =` + id | | srv/service1.js:128:44:128:45 | id | -| srv/service1.js:131:33:131:35 | req | -| srv/service1.js:131:33:131:35 | req | | srv/service1.js:132:13:132:18 | { id } | | srv/service1.js:132:13:132:29 | id | | srv/service1.js:132:15:132:16 | id | -| srv/service1.js:132:22:132:24 | req | +| srv/service1.js:132:22:132:29 | req.data | | srv/service1.js:132:22:132:29 | req.data | | srv/service1.js:133:35:133:46 | `ID = ${id}` | | srv/service1.js:133:35:133:46 | `ID = ${id}` | | srv/service1.js:133:43:133:44 | id | -| srv/service1.js:142:33:142:35 | req | -| srv/service1.js:142:33:142:35 | req | | srv/service1.js:143:13:143:18 | { id } | | srv/service1.js:143:13:143:29 | id | | srv/service1.js:143:15:143:16 | id | -| srv/service1.js:143:22:143:24 | req | +| srv/service1.js:143:22:143:29 | req.data | | srv/service1.js:143:22:143:29 | req.data | | srv/service1.js:145:7:145:57 | await S ... " + id) | | srv/service1.js:145:7:145:57 | await S ... " + id) | | srv/service1.js:145:13:145:57 | SELECT. ... " + id) | | srv/service1.js:145:47:145:56 | "ID=" + id | | srv/service1.js:145:55:145:56 | id | -| srv/service1.js:148:33:148:35 | req | -| srv/service1.js:148:33:148:35 | req | | srv/service1.js:149:13:149:18 | { id } | | srv/service1.js:149:13:149:29 | id | | srv/service1.js:149:15:149:16 | id | -| srv/service1.js:149:22:149:24 | req | +| srv/service1.js:149:22:149:29 | req.data | | srv/service1.js:149:22:149:29 | req.data | | srv/service1.js:151:7:151:57 | await S ... ` + id) | | srv/service1.js:151:7:151:57 | await S ... ` + id) | | srv/service1.js:151:13:151:57 | SELECT. ... ` + id) | | srv/service1.js:151:47:151:56 | `ID=` + id | | srv/service1.js:151:55:151:56 | id | -| srv/service1.js:154:33:154:35 | req | -| srv/service1.js:154:33:154:35 | req | | srv/service1.js:155:13:155:18 | { id } | | srv/service1.js:155:13:155:29 | id | | srv/service1.js:155:15:155:16 | id | -| srv/service1.js:155:22:155:24 | req | +| srv/service1.js:155:22:155:29 | req.data | | srv/service1.js:155:22:155:29 | req.data | | srv/service1.js:157:7:157:57 | await S ... ${id}`) | | srv/service1.js:157:7:157:57 | await S ... ${id}`) | | srv/service1.js:157:13:157:57 | SELECT. ... ${id}`) | | srv/service1.js:157:47:157:56 | `ID=${id}` | | srv/service1.js:157:53:157:54 | id | -| srv/service1.js:184:33:184:35 | req | -| srv/service1.js:184:33:184:35 | req | | srv/service1.js:185:13:185:18 | { id } | | srv/service1.js:185:13:185:29 | id | | srv/service1.js:185:15:185:16 | id | -| srv/service1.js:185:22:185:24 | req | +| srv/service1.js:185:22:185:29 | req.data | | srv/service1.js:185:22:185:29 | req.data | | srv/service1.js:187:7:187:87 | await U ... " + id) | | srv/service1.js:187:7:187:87 | await U ... " + id) | @@ -206,12 +172,10 @@ nodes | srv/service1.js:187:66:187:67 | id | | srv/service1.js:187:76:187:86 | "ID =" + id | | srv/service1.js:187:85:187:86 | id | -| srv/service1.js:190:33:190:35 | req | -| srv/service1.js:190:33:190:35 | req | | srv/service1.js:191:13:191:18 | { id } | | srv/service1.js:191:13:191:29 | id | | srv/service1.js:191:15:191:16 | id | -| srv/service1.js:191:22:191:24 | req | +| srv/service1.js:191:22:191:29 | req.data | | srv/service1.js:191:22:191:29 | req.data | | srv/service1.js:193:7:193:87 | await U ... ` + id) | | srv/service1.js:193:7:193:87 | await U ... ` + id) | @@ -220,12 +184,10 @@ nodes | srv/service1.js:193:66:193:67 | id | | srv/service1.js:193:76:193:86 | `ID =` + id | | srv/service1.js:193:85:193:86 | id | -| srv/service1.js:196:33:196:35 | req | -| srv/service1.js:196:33:196:35 | req | | srv/service1.js:197:13:197:18 | { id } | | srv/service1.js:197:13:197:29 | id | | srv/service1.js:197:15:197:16 | id | -| srv/service1.js:197:22:197:24 | req | +| srv/service1.js:197:22:197:29 | req.data | | srv/service1.js:197:22:197:29 | req.data | | srv/service1.js:199:7:199:88 | await U ... ${id}`) | | srv/service1.js:199:7:199:88 | await U ... ${id}`) | @@ -234,60 +196,50 @@ nodes | srv/service1.js:199:66:199:67 | id | | srv/service1.js:199:76:199:87 | `ID = ${id}` | | srv/service1.js:199:84:199:85 | id | -| srv/service1.js:202:33:202:35 | req | -| srv/service1.js:202:33:202:35 | req | | srv/service1.js:203:13:203:18 | { id } | | srv/service1.js:203:13:203:29 | id | | srv/service1.js:203:15:203:16 | id | -| srv/service1.js:203:22:203:24 | req | +| srv/service1.js:203:22:203:29 | req.data | | srv/service1.js:203:22:203:29 | req.data | | srv/service1.js:205:7:205:86 | await U ... ${id}` | | srv/service1.js:205:7:205:86 | await U ... ${id}` | | srv/service1.js:205:13:205:86 | UPDATE. ... ${id}` | | srv/service1.js:205:47:205:67 | "col1 = ... " + id | | srv/service1.js:205:66:205:67 | id | -| srv/service1.js:226:33:226:35 | req | -| srv/service1.js:226:33:226:35 | req | | srv/service1.js:227:13:227:18 | { id } | | srv/service1.js:227:13:227:29 | id | | srv/service1.js:227:15:227:16 | id | -| srv/service1.js:227:22:227:24 | req | +| srv/service1.js:227:22:227:29 | req.data | | srv/service1.js:227:22:227:29 | req.data | | srv/service1.js:229:7:229:58 | await D ... " + id) | | srv/service1.js:229:7:229:58 | await D ... " + id) | | srv/service1.js:229:13:229:58 | DELETE. ... " + id) | | srv/service1.js:229:47:229:57 | "ID =" + id | | srv/service1.js:229:56:229:57 | id | -| srv/service1.js:232:33:232:35 | req | -| srv/service1.js:232:33:232:35 | req | | srv/service1.js:233:13:233:18 | { id } | | srv/service1.js:233:13:233:29 | id | | srv/service1.js:233:15:233:16 | id | -| srv/service1.js:233:22:233:24 | req | +| srv/service1.js:233:22:233:29 | req.data | | srv/service1.js:233:22:233:29 | req.data | | srv/service1.js:235:7:235:58 | await D ... ` + id) | | srv/service1.js:235:7:235:58 | await D ... ` + id) | | srv/service1.js:235:13:235:58 | DELETE. ... ` + id) | | srv/service1.js:235:47:235:57 | `ID =` + id | | srv/service1.js:235:56:235:57 | id | -| srv/service1.js:238:33:238:35 | req | -| srv/service1.js:238:33:238:35 | req | | srv/service1.js:239:13:239:18 | { id } | | srv/service1.js:239:13:239:29 | id | | srv/service1.js:239:15:239:16 | id | -| srv/service1.js:239:22:239:24 | req | +| srv/service1.js:239:22:239:29 | req.data | | srv/service1.js:239:22:239:29 | req.data | | srv/service1.js:241:7:241:59 | await D ... ${id}`) | | srv/service1.js:241:7:241:59 | await D ... ${id}`) | | srv/service1.js:241:13:241:59 | DELETE. ... ${id}`) | | srv/service1.js:241:47:241:58 | `ID = ${id}` | | srv/service1.js:241:55:241:56 | id | -| srv/service1.js:251:30:251:32 | req | -| srv/service1.js:251:30:251:32 | req | | srv/service1.js:252:13:252:18 | { id } | | srv/service1.js:252:13:252:29 | id | | srv/service1.js:252:15:252:16 | id | -| srv/service1.js:252:22:252:24 | req | +| srv/service1.js:252:22:252:29 | req.data | | srv/service1.js:252:22:252:29 | req.data | | srv/service1.js:253:13:253:65 | query | | srv/service1.js:253:21:253:65 | SELECT. ... " + id) | @@ -295,24 +247,20 @@ nodes | srv/service1.js:253:63:253:64 | id | | srv/service1.js:254:16:254:20 | query | | srv/service1.js:254:16:254:20 | query | -| srv/service1.js:257:30:257:32 | req | -| srv/service1.js:257:30:257:32 | req | | srv/service1.js:258:13:258:18 | { id } | | srv/service1.js:258:13:258:29 | id | | srv/service1.js:258:15:258:16 | id | -| srv/service1.js:258:22:258:24 | req | +| srv/service1.js:258:22:258:29 | req.data | | srv/service1.js:258:22:258:29 | req.data | | srv/service1.js:259:41:259:51 | "ID =" + id | | srv/service1.js:259:41:259:51 | "ID =" + id | | srv/service1.js:259:50:259:51 | id | -| srv/service1.js:267:30:267:32 | req | -| srv/service1.js:267:30:267:32 | req | | srv/service1.js:268:13:268:26 | { id, amount } | | srv/service1.js:268:13:268:37 | amount | | srv/service1.js:268:13:268:37 | id | | srv/service1.js:268:15:268:16 | id | | srv/service1.js:268:19:268:24 | amount | -| srv/service1.js:268:30:268:32 | req | +| srv/service1.js:268:30:268:37 | req.data | | srv/service1.js:268:30:268:37 | req.data | | srv/service1.js:269:41:269:62 | "col1 = ... amount | | srv/service1.js:269:41:269:62 | "col1 = ... amount | @@ -320,22 +268,18 @@ nodes | srv/service1.js:269:71:269:84 | "col1 = " + id | | srv/service1.js:269:71:269:84 | "col1 = " + id | | srv/service1.js:269:83:269:84 | id | -| srv/service1.js:282:30:282:32 | req | -| srv/service1.js:282:30:282:32 | req | | srv/service1.js:283:13:283:18 | { id } | | srv/service1.js:283:13:283:29 | id | | srv/service1.js:283:15:283:16 | id | -| srv/service1.js:283:22:283:24 | req | +| srv/service1.js:283:22:283:29 | req.data | | srv/service1.js:283:22:283:29 | req.data | | srv/service1.js:284:43:284:53 | "ID =" + id | | srv/service1.js:284:43:284:53 | "ID =" + id | | srv/service1.js:284:52:284:53 | id | -| srv/service1.js:288:30:288:32 | req | -| srv/service1.js:288:30:288:32 | req | | srv/service1.js:289:13:289:18 | { id } | | srv/service1.js:289:13:289:29 | id | | srv/service1.js:289:15:289:16 | id | -| srv/service1.js:289:22:289:24 | req | +| srv/service1.js:289:22:289:29 | req.data | | srv/service1.js:289:22:289:29 | req.data | | srv/service1.js:291:13:291:65 | query | | srv/service1.js:291:21:291:65 | SELECT. ... " + id) | @@ -343,24 +287,20 @@ nodes | srv/service1.js:291:63:291:64 | id | | srv/service1.js:292:20:292:24 | query | | srv/service1.js:292:20:292:24 | query | -| srv/service1.js:295:30:295:32 | req | -| srv/service1.js:295:30:295:32 | req | | srv/service1.js:296:13:296:18 | { id } | | srv/service1.js:296:13:296:29 | id | | srv/service1.js:296:15:296:16 | id | -| srv/service1.js:296:22:296:24 | req | +| srv/service1.js:296:22:296:29 | req.data | | srv/service1.js:296:22:296:29 | req.data | | srv/service1.js:298:45:298:55 | "ID =" + id | | srv/service1.js:298:45:298:55 | "ID =" + id | | srv/service1.js:298:54:298:55 | id | -| srv/service1.js:307:30:307:32 | req | -| srv/service1.js:307:30:307:32 | req | | srv/service1.js:308:13:308:26 | { id, amount } | | srv/service1.js:308:13:308:37 | amount | | srv/service1.js:308:13:308:37 | id | | srv/service1.js:308:15:308:16 | id | | srv/service1.js:308:19:308:24 | amount | -| srv/service1.js:308:30:308:32 | req | +| srv/service1.js:308:30:308:37 | req.data | | srv/service1.js:308:30:308:37 | req.data | | srv/service1.js:310:45:310:66 | "col1 = ... amount | | srv/service1.js:310:45:310:66 | "col1 = ... amount | @@ -368,22 +308,18 @@ nodes | srv/service1.js:310:75:310:88 | "col1 = " + id | | srv/service1.js:310:75:310:88 | "col1 = " + id | | srv/service1.js:310:87:310:88 | id | -| srv/service1.js:325:30:325:32 | req | -| srv/service1.js:325:30:325:32 | req | | srv/service1.js:326:13:326:18 | { id } | | srv/service1.js:326:13:326:29 | id | | srv/service1.js:326:15:326:16 | id | -| srv/service1.js:326:22:326:24 | req | +| srv/service1.js:326:22:326:29 | req.data | | srv/service1.js:326:22:326:29 | req.data | | srv/service1.js:328:47:328:57 | "ID =" + id | | srv/service1.js:328:47:328:57 | "ID =" + id | | srv/service1.js:328:56:328:57 | id | -| srv/service1.js:332:30:332:32 | req | -| srv/service1.js:332:30:332:32 | req | | srv/service1.js:333:13:333:18 | { id } | | srv/service1.js:333:13:333:29 | id | | srv/service1.js:333:15:333:16 | id | -| srv/service1.js:333:22:333:24 | req | +| srv/service1.js:333:22:333:29 | req.data | | srv/service1.js:333:22:333:29 | req.data | | srv/service1.js:335:13:335:74 | query | | srv/service1.js:335:21:335:74 | cds.ql( ... " + id) | @@ -391,12 +327,10 @@ nodes | srv/service1.js:335:72:335:73 | id | | srv/service1.js:336:20:336:24 | query | | srv/service1.js:336:20:336:24 | query | -| srv/service1.js:339:30:339:32 | req | -| srv/service1.js:339:30:339:32 | req | | srv/service1.js:340:13:340:18 | { id } | | srv/service1.js:340:13:340:29 | id | | srv/service1.js:340:15:340:16 | id | -| srv/service1.js:340:22:340:24 | req | +| srv/service1.js:340:22:340:29 | req.data | | srv/service1.js:340:22:340:29 | req.data | | srv/service1.js:342:13:342:74 | query | | srv/service1.js:342:21:342:74 | cds.ql( ... ` + id) | @@ -404,12 +338,10 @@ nodes | srv/service1.js:342:72:342:73 | id | | srv/service1.js:343:20:343:24 | query | | srv/service1.js:343:20:343:24 | query | -| srv/service1.js:346:30:346:32 | req | -| srv/service1.js:346:30:346:32 | req | | srv/service1.js:347:13:347:18 | { id } | | srv/service1.js:347:13:347:29 | id | | srv/service1.js:347:15:347:16 | id | -| srv/service1.js:347:22:347:24 | req | +| srv/service1.js:347:22:347:29 | req.data | | srv/service1.js:347:22:347:29 | req.data | | srv/service1.js:349:13:349:75 | query | | srv/service1.js:349:21:349:75 | cds.ql( ... ${id}`) | @@ -417,12 +349,10 @@ nodes | srv/service1.js:349:71:349:72 | id | | srv/service1.js:350:20:350:24 | query | | srv/service1.js:350:20:350:24 | query | -| srv/service1.js:361:30:361:32 | req | -| srv/service1.js:361:30:361:32 | req | | srv/service1.js:362:13:362:18 | { id } | | srv/service1.js:362:13:362:29 | id | | srv/service1.js:362:15:362:16 | id | -| srv/service1.js:362:22:362:24 | req | +| srv/service1.js:362:22:362:29 | req.data | | srv/service1.js:362:22:362:29 | req.data | | srv/service1.js:363:13:363:74 | query | | srv/service1.js:363:21:363:74 | cds.par ... " + id) | @@ -430,12 +360,10 @@ nodes | srv/service1.js:363:72:363:73 | id | | srv/service1.js:364:15:364:19 | query | | srv/service1.js:364:15:364:19 | query | -| srv/service1.js:367:30:367:32 | req | -| srv/service1.js:367:30:367:32 | req | | srv/service1.js:368:13:368:18 | { id } | | srv/service1.js:368:13:368:29 | id | | srv/service1.js:368:15:368:16 | id | -| srv/service1.js:368:22:368:24 | req | +| srv/service1.js:368:22:368:29 | req.data | | srv/service1.js:368:22:368:29 | req.data | | srv/service1.js:369:13:369:74 | query | | srv/service1.js:369:21:369:74 | cds.par ... ` + id) | @@ -443,12 +371,10 @@ nodes | srv/service1.js:369:72:369:73 | id | | srv/service1.js:370:15:370:19 | query | | srv/service1.js:370:15:370:19 | query | -| srv/service1.js:373:30:373:32 | req | -| srv/service1.js:373:30:373:32 | req | | srv/service1.js:374:13:374:18 | { id } | | srv/service1.js:374:13:374:29 | id | | srv/service1.js:374:15:374:16 | id | -| srv/service1.js:374:22:374:24 | req | +| srv/service1.js:374:22:374:29 | req.data | | srv/service1.js:374:22:374:29 | req.data | | srv/service1.js:375:13:375:75 | query | | srv/service1.js:375:21:375:75 | cds.par ... ${id}`) | @@ -456,12 +382,10 @@ nodes | srv/service1.js:375:71:375:72 | id | | srv/service1.js:376:15:376:19 | query | | srv/service1.js:376:15:376:19 | query | -| srv/service1.js:386:30:386:32 | req | -| srv/service1.js:386:30:386:32 | req | | srv/service1.js:387:13:387:18 | { id } | | srv/service1.js:387:13:387:29 | id | | srv/service1.js:387:15:387:16 | id | -| srv/service1.js:387:22:387:24 | req | +| srv/service1.js:387:22:387:29 | req.data | | srv/service1.js:387:22:387:29 | req.data | | srv/service1.js:388:13:388:64 | query | | srv/service1.js:388:21:388:64 | CQL("SE ... " + id) | @@ -469,12 +393,10 @@ nodes | srv/service1.js:388:62:388:63 | id | | srv/service1.js:389:15:389:19 | query | | srv/service1.js:389:15:389:19 | query | -| srv/service1.js:392:30:392:32 | req | -| srv/service1.js:392:30:392:32 | req | | srv/service1.js:393:13:393:18 | { id } | | srv/service1.js:393:13:393:29 | id | | srv/service1.js:393:15:393:16 | id | -| srv/service1.js:393:22:393:24 | req | +| srv/service1.js:393:22:393:29 | req.data | | srv/service1.js:393:22:393:29 | req.data | | srv/service1.js:394:13:394:64 | query | | srv/service1.js:394:21:394:64 | CQL(`SE ... ` + id) | @@ -482,12 +404,10 @@ nodes | srv/service1.js:394:62:394:63 | id | | srv/service1.js:395:15:395:19 | query | | srv/service1.js:395:15:395:19 | query | -| srv/service1.js:398:30:398:32 | req | -| srv/service1.js:398:30:398:32 | req | | srv/service1.js:399:13:399:18 | { id } | | srv/service1.js:399:13:399:29 | id | | srv/service1.js:399:15:399:16 | id | -| srv/service1.js:399:22:399:24 | req | +| srv/service1.js:399:22:399:29 | req.data | | srv/service1.js:399:22:399:29 | req.data | | srv/service1.js:400:13:400:65 | query | | srv/service1.js:400:21:400:65 | CQL(`SE ... ${id}`) | @@ -495,48 +415,40 @@ nodes | srv/service1.js:400:61:400:62 | id | | srv/service1.js:401:15:401:19 | query | | srv/service1.js:401:15:401:19 | query | -| srv/service1.js:411:30:411:32 | req | -| srv/service1.js:411:30:411:32 | req | | srv/service1.js:412:13:412:18 | { id } | | srv/service1.js:412:13:412:29 | id | | srv/service1.js:412:15:412:16 | id | -| srv/service1.js:412:22:412:24 | req | +| srv/service1.js:412:22:412:29 | req.data | | srv/service1.js:412:22:412:29 | req.data | | srv/service1.js:414:13:414:59 | query | | srv/service1.js:414:21:414:59 | "SELECT ... =" + id | | srv/service1.js:414:58:414:59 | id | | srv/service1.js:415:20:415:24 | query | | srv/service1.js:415:20:415:24 | query | -| srv/service1.js:418:30:418:32 | req | -| srv/service1.js:418:30:418:32 | req | | srv/service1.js:419:13:419:18 | { id } | | srv/service1.js:419:13:419:29 | id | | srv/service1.js:419:15:419:16 | id | -| srv/service1.js:419:22:419:24 | req | +| srv/service1.js:419:22:419:29 | req.data | | srv/service1.js:419:22:419:29 | req.data | | srv/service1.js:421:13:421:59 | query | | srv/service1.js:421:21:421:59 | `SELECT ... =` + id | | srv/service1.js:421:58:421:59 | id | | srv/service1.js:422:20:422:24 | query | | srv/service1.js:422:20:422:24 | query | -| srv/service1.js:425:30:425:32 | req | -| srv/service1.js:425:30:425:32 | req | | srv/service1.js:426:13:426:18 | { id } | | srv/service1.js:426:13:426:29 | id | | srv/service1.js:426:15:426:16 | id | -| srv/service1.js:426:22:426:24 | req | +| srv/service1.js:426:22:426:29 | req.data | | srv/service1.js:426:22:426:29 | req.data | | srv/service1.js:428:13:428:60 | query | | srv/service1.js:428:21:428:60 | `SELECT ... ${id}` | | srv/service1.js:428:57:428:58 | id | | srv/service1.js:429:20:429:24 | query | | srv/service1.js:429:20:429:24 | query | -| srv/service1.js:433:30:433:32 | req | -| srv/service1.js:433:30:433:32 | req | | srv/service1.js:434:13:434:18 | { id } | | srv/service1.js:434:13:434:29 | id | | srv/service1.js:434:15:434:16 | id | -| srv/service1.js:434:22:434:24 | req | +| srv/service1.js:434:22:434:29 | req.data | | srv/service1.js:434:22:434:29 | req.data | | srv/service1.js:436:13:436:65 | query | | srv/service1.js:436:21:436:65 | SELECT. ... " + id) | @@ -544,24 +456,20 @@ nodes | srv/service1.js:436:63:436:64 | id | | srv/service1.js:438:16:438:20 | query | | srv/service1.js:438:16:438:20 | query | -| srv/service1.js:442:30:442:32 | req | -| srv/service1.js:442:30:442:32 | req | | srv/service1.js:443:13:443:18 | { id } | | srv/service1.js:443:13:443:29 | id | | srv/service1.js:443:15:443:16 | id | -| srv/service1.js:443:22:443:24 | req | +| srv/service1.js:443:22:443:29 | req.data | | srv/service1.js:443:22:443:29 | req.data | | srv/service1.js:446:41:446:51 | "ID =" + id | | srv/service1.js:446:41:446:51 | "ID =" + id | | srv/service1.js:446:50:446:51 | id | -| srv/service1.js:458:30:458:32 | req | -| srv/service1.js:458:30:458:32 | req | | srv/service1.js:459:13:459:26 | { id, amount } | | srv/service1.js:459:13:459:37 | amount | | srv/service1.js:459:13:459:37 | id | | srv/service1.js:459:15:459:16 | id | | srv/service1.js:459:19:459:24 | amount | -| srv/service1.js:459:30:459:32 | req | +| srv/service1.js:459:30:459:37 | req.data | | srv/service1.js:459:30:459:37 | req.data | | srv/service1.js:462:41:462:62 | "col1 = ... amount | | srv/service1.js:462:41:462:62 | "col1 = ... amount | @@ -569,22 +477,18 @@ nodes | srv/service1.js:462:71:462:84 | "col1 = " + id | | srv/service1.js:462:71:462:84 | "col1 = " + id | | srv/service1.js:462:83:462:84 | id | -| srv/service1.js:482:30:482:32 | req | -| srv/service1.js:482:30:482:32 | req | | srv/service1.js:483:13:483:18 | { id } | | srv/service1.js:483:13:483:29 | id | | srv/service1.js:483:15:483:16 | id | -| srv/service1.js:483:22:483:24 | req | +| srv/service1.js:483:22:483:29 | req.data | | srv/service1.js:483:22:483:29 | req.data | | srv/service1.js:486:43:486:53 | "ID =" + id | | srv/service1.js:486:43:486:53 | "ID =" + id | | srv/service1.js:486:52:486:53 | id | -| srv/service1.js:491:31:491:33 | req | -| srv/service1.js:491:31:491:33 | req | | srv/service1.js:492:13:492:18 | { id } | | srv/service1.js:492:13:492:29 | id | | srv/service1.js:492:15:492:16 | id | -| srv/service1.js:492:22:492:24 | req | +| srv/service1.js:492:22:492:29 | req.data | | srv/service1.js:492:22:492:29 | req.data | | srv/service1.js:493:13:493:65 | query | | srv/service1.js:493:21:493:65 | SELECT. ... " + id) | @@ -592,24 +496,20 @@ nodes | srv/service1.js:493:63:493:64 | id | | srv/service1.js:495:16:495:20 | query | | srv/service1.js:495:16:495:20 | query | -| srv/service1.js:499:31:499:33 | req | -| srv/service1.js:499:31:499:33 | req | | srv/service1.js:500:13:500:18 | { id } | | srv/service1.js:500:13:500:29 | id | | srv/service1.js:500:15:500:16 | id | -| srv/service1.js:500:22:500:24 | req | +| srv/service1.js:500:22:500:29 | req.data | | srv/service1.js:500:22:500:29 | req.data | | srv/service1.js:502:41:502:51 | "ID =" + id | | srv/service1.js:502:41:502:51 | "ID =" + id | | srv/service1.js:502:50:502:51 | id | -| srv/service1.js:513:31:513:33 | req | -| srv/service1.js:513:31:513:33 | req | | srv/service1.js:514:13:514:26 | { id, amount } | | srv/service1.js:514:13:514:37 | amount | | srv/service1.js:514:13:514:37 | id | | srv/service1.js:514:15:514:16 | id | | srv/service1.js:514:19:514:24 | amount | -| srv/service1.js:514:30:514:32 | req | +| srv/service1.js:514:30:514:37 | req.data | | srv/service1.js:514:30:514:37 | req.data | | srv/service1.js:516:41:516:62 | "col1 = ... amount | | srv/service1.js:516:41:516:62 | "col1 = ... amount | @@ -617,22 +517,18 @@ nodes | srv/service1.js:516:71:516:84 | "col1 = " + id | | srv/service1.js:516:71:516:84 | "col1 = " + id | | srv/service1.js:516:83:516:84 | id | -| srv/service1.js:534:31:534:33 | req | -| srv/service1.js:534:31:534:33 | req | | srv/service1.js:535:13:535:18 | { id } | | srv/service1.js:535:13:535:29 | id | | srv/service1.js:535:15:535:16 | id | -| srv/service1.js:535:22:535:24 | req | +| srv/service1.js:535:22:535:29 | req.data | | srv/service1.js:535:22:535:29 | req.data | | srv/service1.js:537:43:537:53 | "ID =" + id | | srv/service1.js:537:43:537:53 | "ID =" + id | | srv/service1.js:537:52:537:53 | id | -| srv/service1.js:542:31:542:33 | req | -| srv/service1.js:542:31:542:33 | req | | srv/service1.js:543:13:543:18 | { id } | | srv/service1.js:543:13:543:29 | id | | srv/service1.js:543:15:543:16 | id | -| srv/service1.js:543:22:543:24 | req | +| srv/service1.js:543:22:543:29 | req.data | | srv/service1.js:543:22:543:29 | req.data | | srv/service1.js:544:13:544:58 | query | | srv/service1.js:544:21:544:58 | SELECT. ... " + id) | @@ -640,24 +536,20 @@ nodes | srv/service1.js:544:56:544:57 | id | | srv/service1.js:546:16:546:20 | query | | srv/service1.js:546:16:546:20 | query | -| srv/service1.js:550:31:550:33 | req | -| srv/service1.js:550:31:550:33 | req | | srv/service1.js:551:13:551:18 | { id } | | srv/service1.js:551:13:551:29 | id | | srv/service1.js:551:15:551:16 | id | -| srv/service1.js:551:22:551:24 | req | +| srv/service1.js:551:22:551:29 | req.data | | srv/service1.js:551:22:551:29 | req.data | | srv/service1.js:553:34:553:44 | "ID =" + id | | srv/service1.js:553:34:553:44 | "ID =" + id | | srv/service1.js:553:43:553:44 | id | -| srv/service1.js:564:31:564:33 | req | -| srv/service1.js:564:31:564:33 | req | | srv/service1.js:565:13:565:26 | { id, amount } | | srv/service1.js:565:13:565:37 | amount | | srv/service1.js:565:13:565:37 | id | | srv/service1.js:565:15:565:16 | id | | srv/service1.js:565:19:565:24 | amount | -| srv/service1.js:565:30:565:32 | req | +| srv/service1.js:565:30:565:37 | req.data | | srv/service1.js:565:30:565:37 | req.data | | srv/service1.js:567:34:567:55 | "col1 = ... amount | | srv/service1.js:567:34:567:55 | "col1 = ... amount | @@ -665,22 +557,18 @@ nodes | srv/service1.js:567:64:567:77 | "col1 = " + id | | srv/service1.js:567:64:567:77 | "col1 = " + id | | srv/service1.js:567:76:567:77 | id | -| srv/service1.js:585:31:585:33 | req | -| srv/service1.js:585:31:585:33 | req | | srv/service1.js:586:13:586:18 | { id } | | srv/service1.js:586:13:586:29 | id | | srv/service1.js:586:15:586:16 | id | -| srv/service1.js:586:22:586:24 | req | +| srv/service1.js:586:22:586:29 | req.data | | srv/service1.js:586:22:586:29 | req.data | | srv/service1.js:588:36:588:46 | "ID =" + id | | srv/service1.js:588:36:588:46 | "ID =" + id | | srv/service1.js:588:45:588:46 | id | -| srv/service1.js:593:31:593:33 | req | -| srv/service1.js:593:31:593:33 | req | | srv/service1.js:594:13:594:18 | { id } | | srv/service1.js:594:13:594:29 | id | | srv/service1.js:594:15:594:16 | id | -| srv/service1.js:594:22:594:24 | req | +| srv/service1.js:594:22:594:29 | req.data | | srv/service1.js:594:22:594:29 | req.data | | srv/service1.js:595:13:595:58 | query | | srv/service1.js:595:21:595:58 | SELECT. ... " + id) | @@ -688,24 +576,20 @@ nodes | srv/service1.js:595:56:595:57 | id | | srv/service1.js:597:16:597:20 | query | | srv/service1.js:597:16:597:20 | query | -| srv/service1.js:601:31:601:33 | req | -| srv/service1.js:601:31:601:33 | req | | srv/service1.js:602:13:602:18 | { id } | | srv/service1.js:602:13:602:29 | id | | srv/service1.js:602:15:602:16 | id | -| srv/service1.js:602:22:602:24 | req | +| srv/service1.js:602:22:602:29 | req.data | | srv/service1.js:602:22:602:29 | req.data | | srv/service1.js:604:34:604:44 | "ID =" + id | | srv/service1.js:604:34:604:44 | "ID =" + id | | srv/service1.js:604:43:604:44 | id | -| srv/service1.js:615:31:615:33 | req | -| srv/service1.js:615:31:615:33 | req | | srv/service1.js:616:13:616:26 | { id, amount } | | srv/service1.js:616:13:616:37 | amount | | srv/service1.js:616:13:616:37 | id | | srv/service1.js:616:15:616:16 | id | | srv/service1.js:616:19:616:24 | amount | -| srv/service1.js:616:30:616:32 | req | +| srv/service1.js:616:30:616:37 | req.data | | srv/service1.js:616:30:616:37 | req.data | | srv/service1.js:618:34:618:55 | "col1 = ... amount | | srv/service1.js:618:34:618:55 | "col1 = ... amount | @@ -713,22 +597,18 @@ nodes | srv/service1.js:618:64:618:77 | "col1 = " + id | | srv/service1.js:618:64:618:77 | "col1 = " + id | | srv/service1.js:618:76:618:77 | id | -| srv/service1.js:636:31:636:33 | req | -| srv/service1.js:636:31:636:33 | req | | srv/service1.js:637:13:637:18 | { id } | | srv/service1.js:637:13:637:29 | id | | srv/service1.js:637:15:637:16 | id | -| srv/service1.js:637:22:637:24 | req | +| srv/service1.js:637:22:637:29 | req.data | | srv/service1.js:637:22:637:29 | req.data | | srv/service1.js:639:36:639:46 | "ID =" + id | | srv/service1.js:639:36:639:46 | "ID =" + id | | srv/service1.js:639:45:639:46 | id | -| srv/service1.js:644:34:644:36 | req | -| srv/service1.js:644:34:644:36 | req | | srv/service1.js:645:13:645:18 | { id } | | srv/service1.js:645:13:645:29 | id | | srv/service1.js:645:15:645:16 | id | -| srv/service1.js:645:22:645:24 | req | +| srv/service1.js:645:22:645:29 | req.data | | srv/service1.js:645:22:645:29 | req.data | | srv/service1.js:646:13:646:58 | query | | srv/service1.js:646:21:646:58 | SELECT. ... " + id) | @@ -736,12 +616,10 @@ nodes | srv/service1.js:646:56:646:57 | id | | srv/service1.js:647:18:647:22 | query | | srv/service1.js:647:18:647:22 | query | -| srv/service1.js:650:34:650:36 | req | -| srv/service1.js:650:34:650:36 | req | | srv/service1.js:651:13:651:18 | { id } | | srv/service1.js:651:13:651:29 | id | | srv/service1.js:651:15:651:16 | id | -| srv/service1.js:651:22:651:24 | req | +| srv/service1.js:651:22:651:29 | req.data | | srv/service1.js:651:22:651:29 | req.data | | srv/service1.js:652:13:652:58 | query | | srv/service1.js:652:21:652:58 | SELECT. ... ` + id) | @@ -749,12 +627,10 @@ nodes | srv/service1.js:652:56:652:57 | id | | srv/service1.js:653:18:653:22 | query | | srv/service1.js:653:18:653:22 | query | -| srv/service1.js:656:34:656:36 | req | -| srv/service1.js:656:34:656:36 | req | | srv/service1.js:657:13:657:18 | { id } | | srv/service1.js:657:13:657:29 | id | | srv/service1.js:657:15:657:16 | id | -| srv/service1.js:657:22:657:24 | req | +| srv/service1.js:657:22:657:29 | req.data | | srv/service1.js:657:22:657:29 | req.data | | srv/service1.js:658:13:658:58 | query | | srv/service1.js:658:21:658:58 | SELECT. ... ${id}`) | @@ -762,44 +638,36 @@ nodes | srv/service1.js:658:54:658:55 | id | | srv/service1.js:659:18:659:22 | query | | srv/service1.js:659:18:659:22 | query | -| srv/service1.js:668:34:668:36 | req | -| srv/service1.js:668:34:668:36 | req | | srv/service1.js:669:13:669:18 | { id } | | srv/service1.js:669:13:669:29 | id | | srv/service1.js:669:15:669:16 | id | -| srv/service1.js:669:22:669:24 | req | +| srv/service1.js:669:22:669:29 | req.data | | srv/service1.js:669:22:669:29 | req.data | | srv/service1.js:670:36:670:46 | "ID =" + id | | srv/service1.js:670:36:670:46 | "ID =" + id | | srv/service1.js:670:45:670:46 | id | -| srv/service1.js:673:34:673:36 | req | -| srv/service1.js:673:34:673:36 | req | | srv/service1.js:674:13:674:18 | { id } | | srv/service1.js:674:13:674:29 | id | | srv/service1.js:674:15:674:16 | id | -| srv/service1.js:674:22:674:24 | req | +| srv/service1.js:674:22:674:29 | req.data | | srv/service1.js:674:22:674:29 | req.data | | srv/service1.js:675:36:675:46 | `ID =` + id | | srv/service1.js:675:36:675:46 | `ID =` + id | | srv/service1.js:675:45:675:46 | id | -| srv/service1.js:678:34:678:36 | req | -| srv/service1.js:678:34:678:36 | req | | srv/service1.js:679:13:679:18 | { id } | | srv/service1.js:679:13:679:29 | id | | srv/service1.js:679:15:679:16 | id | -| srv/service1.js:679:22:679:24 | req | +| srv/service1.js:679:22:679:29 | req.data | | srv/service1.js:679:22:679:29 | req.data | | srv/service1.js:680:36:680:45 | `ID=${id}` | | srv/service1.js:680:36:680:45 | `ID=${id}` | | srv/service1.js:680:42:680:43 | id | -| srv/service1.js:703:34:703:36 | req | -| srv/service1.js:703:34:703:36 | req | | srv/service1.js:704:13:704:26 | { id, amount } | | srv/service1.js:704:13:704:37 | amount | | srv/service1.js:704:13:704:37 | id | | srv/service1.js:704:15:704:16 | id | | srv/service1.js:704:19:704:24 | amount | -| srv/service1.js:704:30:704:32 | req | +| srv/service1.js:704:30:704:37 | req.data | | srv/service1.js:704:30:704:37 | req.data | | srv/service1.js:705:36:705:57 | "col1 = ... amount | | srv/service1.js:705:36:705:57 | "col1 = ... amount | @@ -807,14 +675,12 @@ nodes | srv/service1.js:705:66:705:79 | "col1 = " + id | | srv/service1.js:705:66:705:79 | "col1 = " + id | | srv/service1.js:705:78:705:79 | id | -| srv/service1.js:708:34:708:36 | req | -| srv/service1.js:708:34:708:36 | req | | srv/service1.js:709:13:709:26 | { id, amount } | | srv/service1.js:709:13:709:37 | amount | | srv/service1.js:709:13:709:37 | id | | srv/service1.js:709:15:709:16 | id | | srv/service1.js:709:19:709:24 | amount | -| srv/service1.js:709:30:709:32 | req | +| srv/service1.js:709:30:709:37 | req.data | | srv/service1.js:709:30:709:37 | req.data | | srv/service1.js:710:36:710:57 | "col1 = ... amount | | srv/service1.js:710:36:710:57 | "col1 = ... amount | @@ -822,14 +688,12 @@ nodes | srv/service1.js:710:66:710:78 | `col1 =` + id | | srv/service1.js:710:66:710:78 | `col1 =` + id | | srv/service1.js:710:77:710:78 | id | -| srv/service1.js:713:34:713:36 | req | -| srv/service1.js:713:34:713:36 | req | | srv/service1.js:714:13:714:26 | { id, amount } | | srv/service1.js:714:13:714:37 | amount | | srv/service1.js:714:13:714:37 | id | | srv/service1.js:714:15:714:16 | id | | srv/service1.js:714:19:714:24 | amount | -| srv/service1.js:714:30:714:32 | req | +| srv/service1.js:714:30:714:37 | req.data | | srv/service1.js:714:30:714:37 | req.data | | srv/service1.js:715:36:715:57 | "col1 = ... amount | | srv/service1.js:715:36:715:57 | "col1 = ... amount | @@ -837,228 +701,186 @@ nodes | srv/service1.js:715:66:715:79 | `col1 = ${id}` | | srv/service1.js:715:66:715:79 | `col1 = ${id}` | | srv/service1.js:715:76:715:77 | id | -| srv/service1.js:718:34:718:36 | req | -| srv/service1.js:718:34:718:36 | req | | srv/service1.js:719:13:719:26 | { id, amount } | | srv/service1.js:719:13:719:37 | amount | | srv/service1.js:719:19:719:24 | amount | -| srv/service1.js:719:30:719:32 | req | +| srv/service1.js:719:30:719:37 | req.data | | srv/service1.js:719:30:719:37 | req.data | | srv/service1.js:720:36:720:57 | "col1 = ... amount | | srv/service1.js:720:36:720:57 | "col1 = ... amount | | srv/service1.js:720:52:720:57 | amount | -| srv/service1.js:753:34:753:36 | req | -| srv/service1.js:753:34:753:36 | req | | srv/service1.js:754:13:754:18 | { id } | | srv/service1.js:754:13:754:29 | id | | srv/service1.js:754:15:754:16 | id | -| srv/service1.js:754:22:754:24 | req | +| srv/service1.js:754:22:754:29 | req.data | | srv/service1.js:754:22:754:29 | req.data | | srv/service1.js:755:38:755:48 | "ID =" + id | | srv/service1.js:755:38:755:48 | "ID =" + id | | srv/service1.js:755:47:755:48 | id | -| srv/service1.js:758:34:758:36 | req | -| srv/service1.js:758:34:758:36 | req | | srv/service1.js:759:13:759:18 | { id } | | srv/service1.js:759:13:759:29 | id | | srv/service1.js:759:15:759:16 | id | -| srv/service1.js:759:22:759:24 | req | +| srv/service1.js:759:22:759:29 | req.data | | srv/service1.js:759:22:759:29 | req.data | | srv/service1.js:760:38:760:48 | `ID =` + id | | srv/service1.js:760:38:760:48 | `ID =` + id | | srv/service1.js:760:47:760:48 | id | -| srv/service1.js:763:34:763:36 | req | -| srv/service1.js:763:34:763:36 | req | | srv/service1.js:764:13:764:18 | { id } | | srv/service1.js:764:13:764:29 | id | | srv/service1.js:764:15:764:16 | id | -| srv/service1.js:764:22:764:24 | req | +| srv/service1.js:764:22:764:29 | req.data | | srv/service1.js:764:22:764:29 | req.data | | srv/service1.js:765:38:765:49 | `ID = ${id}` | | srv/service1.js:765:38:765:49 | `ID = ${id}` | | srv/service1.js:765:46:765:47 | id | edges -| srv/service1.js:12:33:12:35 | req | srv/service1.js:13:22:13:24 | req | -| srv/service1.js:12:33:12:35 | req | srv/service1.js:13:22:13:24 | req | | srv/service1.js:13:13:13:18 | { id } | srv/service1.js:13:15:13:16 | id | | srv/service1.js:13:13:13:29 | id | srv/service1.js:14:56:14:57 | id | | srv/service1.js:13:15:13:16 | id | srv/service1.js:13:13:13:29 | id | -| srv/service1.js:13:22:13:24 | req | srv/service1.js:13:22:13:29 | req.data | +| srv/service1.js:13:22:13:29 | req.data | srv/service1.js:13:13:13:18 | { id } | | srv/service1.js:13:22:13:29 | req.data | srv/service1.js:13:13:13:18 | { id } | | srv/service1.js:14:13:14:58 | query | srv/service1.js:15:15:15:19 | query | | srv/service1.js:14:13:14:58 | query | srv/service1.js:15:15:15:19 | query | | srv/service1.js:14:21:14:58 | SELECT. ... " + id) | srv/service1.js:14:13:14:58 | query | | srv/service1.js:14:48:14:57 | "ID=" + id | srv/service1.js:14:21:14:58 | SELECT. ... " + id) | | srv/service1.js:14:56:14:57 | id | srv/service1.js:14:48:14:57 | "ID=" + id | -| srv/service1.js:18:33:18:35 | req | srv/service1.js:19:22:19:24 | req | -| srv/service1.js:18:33:18:35 | req | srv/service1.js:19:22:19:24 | req | | srv/service1.js:19:13:19:18 | { id } | srv/service1.js:19:15:19:16 | id | | srv/service1.js:19:13:19:29 | id | srv/service1.js:20:56:20:57 | id | | srv/service1.js:19:15:19:16 | id | srv/service1.js:19:13:19:29 | id | -| srv/service1.js:19:22:19:24 | req | srv/service1.js:19:22:19:29 | req.data | +| srv/service1.js:19:22:19:29 | req.data | srv/service1.js:19:13:19:18 | { id } | | srv/service1.js:19:22:19:29 | req.data | srv/service1.js:19:13:19:18 | { id } | | srv/service1.js:20:13:20:58 | query | srv/service1.js:21:15:21:19 | query | | srv/service1.js:20:13:20:58 | query | srv/service1.js:21:15:21:19 | query | | srv/service1.js:20:21:20:58 | SELECT. ... ` + id) | srv/service1.js:20:13:20:58 | query | | srv/service1.js:20:48:20:57 | `ID=` + id | srv/service1.js:20:21:20:58 | SELECT. ... ` + id) | | srv/service1.js:20:56:20:57 | id | srv/service1.js:20:48:20:57 | `ID=` + id | -| srv/service1.js:24:33:24:35 | req | srv/service1.js:25:22:25:24 | req | -| srv/service1.js:24:33:24:35 | req | srv/service1.js:25:22:25:24 | req | | srv/service1.js:25:13:25:18 | { id } | srv/service1.js:25:15:25:16 | id | | srv/service1.js:25:13:25:29 | id | srv/service1.js:26:54:26:55 | id | | srv/service1.js:25:15:25:16 | id | srv/service1.js:25:13:25:29 | id | -| srv/service1.js:25:22:25:24 | req | srv/service1.js:25:22:25:29 | req.data | +| srv/service1.js:25:22:25:29 | req.data | srv/service1.js:25:13:25:18 | { id } | | srv/service1.js:25:22:25:29 | req.data | srv/service1.js:25:13:25:18 | { id } | | srv/service1.js:26:13:26:58 | query | srv/service1.js:27:15:27:19 | query | | srv/service1.js:26:13:26:58 | query | srv/service1.js:27:15:27:19 | query | | srv/service1.js:26:21:26:58 | SELECT. ... ${id}`) | srv/service1.js:26:13:26:58 | query | | srv/service1.js:26:48:26:57 | `ID=${id}` | srv/service1.js:26:21:26:58 | SELECT. ... ${id}`) | | srv/service1.js:26:54:26:55 | id | srv/service1.js:26:48:26:57 | `ID=${id}` | -| srv/service1.js:36:33:36:35 | req | srv/service1.js:37:22:37:24 | req | -| srv/service1.js:36:33:36:35 | req | srv/service1.js:37:22:37:24 | req | | srv/service1.js:37:13:37:18 | { id } | srv/service1.js:37:15:37:16 | id | | srv/service1.js:37:13:37:29 | id | srv/service1.js:38:42:38:43 | id | | srv/service1.js:37:15:37:16 | id | srv/service1.js:37:13:37:29 | id | -| srv/service1.js:37:22:37:24 | req | srv/service1.js:37:22:37:29 | req.data | +| srv/service1.js:37:22:37:29 | req.data | srv/service1.js:37:13:37:18 | { id } | | srv/service1.js:37:22:37:29 | req.data | srv/service1.js:37:13:37:18 | { id } | | srv/service1.js:38:42:38:43 | id | srv/service1.js:38:33:38:43 | "ID =" + id | | srv/service1.js:38:42:38:43 | id | srv/service1.js:38:33:38:43 | "ID =" + id | -| srv/service1.js:41:33:41:35 | req | srv/service1.js:42:22:42:24 | req | -| srv/service1.js:41:33:41:35 | req | srv/service1.js:42:22:42:24 | req | | srv/service1.js:42:13:42:18 | { id } | srv/service1.js:42:15:42:16 | id | | srv/service1.js:42:13:42:29 | id | srv/service1.js:43:42:43:43 | id | | srv/service1.js:42:15:42:16 | id | srv/service1.js:42:13:42:29 | id | -| srv/service1.js:42:22:42:24 | req | srv/service1.js:42:22:42:29 | req.data | +| srv/service1.js:42:22:42:29 | req.data | srv/service1.js:42:13:42:18 | { id } | | srv/service1.js:42:22:42:29 | req.data | srv/service1.js:42:13:42:18 | { id } | | srv/service1.js:43:42:43:43 | id | srv/service1.js:43:33:43:43 | `ID =` + id | | srv/service1.js:43:42:43:43 | id | srv/service1.js:43:33:43:43 | `ID =` + id | -| srv/service1.js:46:33:46:35 | req | srv/service1.js:47:22:47:24 | req | -| srv/service1.js:46:33:46:35 | req | srv/service1.js:47:22:47:24 | req | | srv/service1.js:47:13:47:18 | { id } | srv/service1.js:47:15:47:16 | id | | srv/service1.js:47:13:47:29 | id | srv/service1.js:48:39:48:40 | id | | srv/service1.js:47:15:47:16 | id | srv/service1.js:47:13:47:29 | id | -| srv/service1.js:47:22:47:24 | req | srv/service1.js:47:22:47:29 | req.data | +| srv/service1.js:47:22:47:29 | req.data | srv/service1.js:47:13:47:18 | { id } | | srv/service1.js:47:22:47:29 | req.data | srv/service1.js:47:13:47:18 | { id } | | srv/service1.js:48:39:48:40 | id | srv/service1.js:48:33:48:42 | `ID=${id}` | | srv/service1.js:48:39:48:40 | id | srv/service1.js:48:33:48:42 | `ID=${id}` | -| srv/service1.js:71:33:71:35 | req | srv/service1.js:72:30:72:32 | req | -| srv/service1.js:71:33:71:35 | req | srv/service1.js:72:30:72:32 | req | | srv/service1.js:72:13:72:26 | { id, amount } | srv/service1.js:72:15:72:16 | id | | srv/service1.js:72:13:72:26 | { id, amount } | srv/service1.js:72:19:72:24 | amount | | srv/service1.js:72:13:72:37 | amount | srv/service1.js:73:49:73:54 | amount | | srv/service1.js:72:13:72:37 | id | srv/service1.js:73:75:73:76 | id | | srv/service1.js:72:15:72:16 | id | srv/service1.js:72:13:72:37 | id | | srv/service1.js:72:19:72:24 | amount | srv/service1.js:72:13:72:37 | amount | -| srv/service1.js:72:30:72:32 | req | srv/service1.js:72:30:72:37 | req.data | +| srv/service1.js:72:30:72:37 | req.data | srv/service1.js:72:13:72:26 | { id, amount } | | srv/service1.js:72:30:72:37 | req.data | srv/service1.js:72:13:72:26 | { id, amount } | | srv/service1.js:73:49:73:54 | amount | srv/service1.js:73:33:73:54 | "col1 = ... amount | | srv/service1.js:73:49:73:54 | amount | srv/service1.js:73:33:73:54 | "col1 = ... amount | | srv/service1.js:73:75:73:76 | id | srv/service1.js:73:63:73:76 | "col1 = " + id | | srv/service1.js:73:75:73:76 | id | srv/service1.js:73:63:73:76 | "col1 = " + id | -| srv/service1.js:76:33:76:35 | req | srv/service1.js:77:30:77:32 | req | -| srv/service1.js:76:33:76:35 | req | srv/service1.js:77:30:77:32 | req | | srv/service1.js:77:13:77:26 | { id, amount } | srv/service1.js:77:15:77:16 | id | | srv/service1.js:77:13:77:26 | { id, amount } | srv/service1.js:77:19:77:24 | amount | | srv/service1.js:77:13:77:37 | amount | srv/service1.js:78:49:78:54 | amount | | srv/service1.js:77:13:77:37 | id | srv/service1.js:78:75:78:76 | id | | srv/service1.js:77:15:77:16 | id | srv/service1.js:77:13:77:37 | id | | srv/service1.js:77:19:77:24 | amount | srv/service1.js:77:13:77:37 | amount | -| srv/service1.js:77:30:77:32 | req | srv/service1.js:77:30:77:37 | req.data | +| srv/service1.js:77:30:77:37 | req.data | srv/service1.js:77:13:77:26 | { id, amount } | | srv/service1.js:77:30:77:37 | req.data | srv/service1.js:77:13:77:26 | { id, amount } | | srv/service1.js:78:49:78:54 | amount | srv/service1.js:78:33:78:54 | "col1 = ... amount | | srv/service1.js:78:49:78:54 | amount | srv/service1.js:78:33:78:54 | "col1 = ... amount | | srv/service1.js:78:75:78:76 | id | srv/service1.js:78:63:78:76 | `col1 = ` + id | | srv/service1.js:78:75:78:76 | id | srv/service1.js:78:63:78:76 | `col1 = ` + id | -| srv/service1.js:81:33:81:35 | req | srv/service1.js:82:30:82:32 | req | -| srv/service1.js:81:33:81:35 | req | srv/service1.js:82:30:82:32 | req | | srv/service1.js:82:13:82:26 | { id, amount } | srv/service1.js:82:15:82:16 | id | | srv/service1.js:82:13:82:26 | { id, amount } | srv/service1.js:82:19:82:24 | amount | | srv/service1.js:82:13:82:37 | amount | srv/service1.js:83:49:83:54 | amount | | srv/service1.js:82:13:82:37 | id | srv/service1.js:83:73:83:74 | id | | srv/service1.js:82:15:82:16 | id | srv/service1.js:82:13:82:37 | id | | srv/service1.js:82:19:82:24 | amount | srv/service1.js:82:13:82:37 | amount | -| srv/service1.js:82:30:82:32 | req | srv/service1.js:82:30:82:37 | req.data | +| srv/service1.js:82:30:82:37 | req.data | srv/service1.js:82:13:82:26 | { id, amount } | | srv/service1.js:82:30:82:37 | req.data | srv/service1.js:82:13:82:26 | { id, amount } | | srv/service1.js:83:49:83:54 | amount | srv/service1.js:83:33:83:54 | "col1 = ... amount | | srv/service1.js:83:49:83:54 | amount | srv/service1.js:83:33:83:54 | "col1 = ... amount | | srv/service1.js:83:73:83:74 | id | srv/service1.js:83:63:83:76 | `col1 = ${id}` | | srv/service1.js:83:73:83:74 | id | srv/service1.js:83:63:83:76 | `col1 = ${id}` | -| srv/service1.js:86:33:86:35 | req | srv/service1.js:87:30:87:32 | req | -| srv/service1.js:86:33:86:35 | req | srv/service1.js:87:30:87:32 | req | | srv/service1.js:87:13:87:26 | { id, amount } | srv/service1.js:87:19:87:24 | amount | | srv/service1.js:87:13:87:37 | amount | srv/service1.js:88:49:88:54 | amount | | srv/service1.js:87:19:87:24 | amount | srv/service1.js:87:13:87:37 | amount | -| srv/service1.js:87:30:87:32 | req | srv/service1.js:87:30:87:37 | req.data | +| srv/service1.js:87:30:87:37 | req.data | srv/service1.js:87:13:87:26 | { id, amount } | | srv/service1.js:87:30:87:37 | req.data | srv/service1.js:87:13:87:26 | { id, amount } | | srv/service1.js:88:49:88:54 | amount | srv/service1.js:88:33:88:54 | "col1 = ... amount | | srv/service1.js:88:49:88:54 | amount | srv/service1.js:88:33:88:54 | "col1 = ... amount | -| srv/service1.js:121:33:121:35 | req | srv/service1.js:122:22:122:24 | req | -| srv/service1.js:121:33:121:35 | req | srv/service1.js:122:22:122:24 | req | | srv/service1.js:122:13:122:18 | { id } | srv/service1.js:122:15:122:16 | id | | srv/service1.js:122:13:122:29 | id | srv/service1.js:123:44:123:45 | id | | srv/service1.js:122:15:122:16 | id | srv/service1.js:122:13:122:29 | id | -| srv/service1.js:122:22:122:24 | req | srv/service1.js:122:22:122:29 | req.data | +| srv/service1.js:122:22:122:29 | req.data | srv/service1.js:122:13:122:18 | { id } | | srv/service1.js:122:22:122:29 | req.data | srv/service1.js:122:13:122:18 | { id } | | srv/service1.js:123:44:123:45 | id | srv/service1.js:123:35:123:45 | "ID =" + id | | srv/service1.js:123:44:123:45 | id | srv/service1.js:123:35:123:45 | "ID =" + id | -| srv/service1.js:126:33:126:35 | req | srv/service1.js:127:22:127:24 | req | -| srv/service1.js:126:33:126:35 | req | srv/service1.js:127:22:127:24 | req | | srv/service1.js:127:13:127:18 | { id } | srv/service1.js:127:15:127:16 | id | | srv/service1.js:127:13:127:29 | id | srv/service1.js:128:44:128:45 | id | | srv/service1.js:127:15:127:16 | id | srv/service1.js:127:13:127:29 | id | -| srv/service1.js:127:22:127:24 | req | srv/service1.js:127:22:127:29 | req.data | +| srv/service1.js:127:22:127:29 | req.data | srv/service1.js:127:13:127:18 | { id } | | srv/service1.js:127:22:127:29 | req.data | srv/service1.js:127:13:127:18 | { id } | | srv/service1.js:128:44:128:45 | id | srv/service1.js:128:35:128:45 | `ID =` + id | | srv/service1.js:128:44:128:45 | id | srv/service1.js:128:35:128:45 | `ID =` + id | -| srv/service1.js:131:33:131:35 | req | srv/service1.js:132:22:132:24 | req | -| srv/service1.js:131:33:131:35 | req | srv/service1.js:132:22:132:24 | req | | srv/service1.js:132:13:132:18 | { id } | srv/service1.js:132:15:132:16 | id | | srv/service1.js:132:13:132:29 | id | srv/service1.js:133:43:133:44 | id | | srv/service1.js:132:15:132:16 | id | srv/service1.js:132:13:132:29 | id | -| srv/service1.js:132:22:132:24 | req | srv/service1.js:132:22:132:29 | req.data | +| srv/service1.js:132:22:132:29 | req.data | srv/service1.js:132:13:132:18 | { id } | | srv/service1.js:132:22:132:29 | req.data | srv/service1.js:132:13:132:18 | { id } | | srv/service1.js:133:43:133:44 | id | srv/service1.js:133:35:133:46 | `ID = ${id}` | | srv/service1.js:133:43:133:44 | id | srv/service1.js:133:35:133:46 | `ID = ${id}` | -| srv/service1.js:142:33:142:35 | req | srv/service1.js:143:22:143:24 | req | -| srv/service1.js:142:33:142:35 | req | srv/service1.js:143:22:143:24 | req | | srv/service1.js:143:13:143:18 | { id } | srv/service1.js:143:15:143:16 | id | | srv/service1.js:143:13:143:29 | id | srv/service1.js:145:55:145:56 | id | | srv/service1.js:143:15:143:16 | id | srv/service1.js:143:13:143:29 | id | -| srv/service1.js:143:22:143:24 | req | srv/service1.js:143:22:143:29 | req.data | +| srv/service1.js:143:22:143:29 | req.data | srv/service1.js:143:13:143:18 | { id } | | srv/service1.js:143:22:143:29 | req.data | srv/service1.js:143:13:143:18 | { id } | | srv/service1.js:145:13:145:57 | SELECT. ... " + id) | srv/service1.js:145:7:145:57 | await S ... " + id) | | srv/service1.js:145:13:145:57 | SELECT. ... " + id) | srv/service1.js:145:7:145:57 | await S ... " + id) | | srv/service1.js:145:47:145:56 | "ID=" + id | srv/service1.js:145:13:145:57 | SELECT. ... " + id) | | srv/service1.js:145:55:145:56 | id | srv/service1.js:145:47:145:56 | "ID=" + id | -| srv/service1.js:148:33:148:35 | req | srv/service1.js:149:22:149:24 | req | -| srv/service1.js:148:33:148:35 | req | srv/service1.js:149:22:149:24 | req | | srv/service1.js:149:13:149:18 | { id } | srv/service1.js:149:15:149:16 | id | | srv/service1.js:149:13:149:29 | id | srv/service1.js:151:55:151:56 | id | | srv/service1.js:149:15:149:16 | id | srv/service1.js:149:13:149:29 | id | -| srv/service1.js:149:22:149:24 | req | srv/service1.js:149:22:149:29 | req.data | +| srv/service1.js:149:22:149:29 | req.data | srv/service1.js:149:13:149:18 | { id } | | srv/service1.js:149:22:149:29 | req.data | srv/service1.js:149:13:149:18 | { id } | | srv/service1.js:151:13:151:57 | SELECT. ... ` + id) | srv/service1.js:151:7:151:57 | await S ... ` + id) | | srv/service1.js:151:13:151:57 | SELECT. ... ` + id) | srv/service1.js:151:7:151:57 | await S ... ` + id) | | srv/service1.js:151:47:151:56 | `ID=` + id | srv/service1.js:151:13:151:57 | SELECT. ... ` + id) | | srv/service1.js:151:55:151:56 | id | srv/service1.js:151:47:151:56 | `ID=` + id | -| srv/service1.js:154:33:154:35 | req | srv/service1.js:155:22:155:24 | req | -| srv/service1.js:154:33:154:35 | req | srv/service1.js:155:22:155:24 | req | | srv/service1.js:155:13:155:18 | { id } | srv/service1.js:155:15:155:16 | id | | srv/service1.js:155:13:155:29 | id | srv/service1.js:157:53:157:54 | id | | srv/service1.js:155:15:155:16 | id | srv/service1.js:155:13:155:29 | id | -| srv/service1.js:155:22:155:24 | req | srv/service1.js:155:22:155:29 | req.data | +| srv/service1.js:155:22:155:29 | req.data | srv/service1.js:155:13:155:18 | { id } | | srv/service1.js:155:22:155:29 | req.data | srv/service1.js:155:13:155:18 | { id } | | srv/service1.js:157:13:157:57 | SELECT. ... ${id}`) | srv/service1.js:157:7:157:57 | await S ... ${id}`) | | srv/service1.js:157:13:157:57 | SELECT. ... ${id}`) | srv/service1.js:157:7:157:57 | await S ... ${id}`) | | srv/service1.js:157:47:157:56 | `ID=${id}` | srv/service1.js:157:13:157:57 | SELECT. ... ${id}`) | | srv/service1.js:157:53:157:54 | id | srv/service1.js:157:47:157:56 | `ID=${id}` | -| srv/service1.js:184:33:184:35 | req | srv/service1.js:185:22:185:24 | req | -| srv/service1.js:184:33:184:35 | req | srv/service1.js:185:22:185:24 | req | | srv/service1.js:185:13:185:18 | { id } | srv/service1.js:185:15:185:16 | id | | srv/service1.js:185:13:185:29 | id | srv/service1.js:187:66:187:67 | id | | srv/service1.js:185:13:185:29 | id | srv/service1.js:187:85:187:86 | id | | srv/service1.js:185:15:185:16 | id | srv/service1.js:185:13:185:29 | id | -| srv/service1.js:185:22:185:24 | req | srv/service1.js:185:22:185:29 | req.data | +| srv/service1.js:185:22:185:29 | req.data | srv/service1.js:185:13:185:18 | { id } | | srv/service1.js:185:22:185:29 | req.data | srv/service1.js:185:13:185:18 | { id } | | srv/service1.js:187:13:187:87 | UPDATE. ... " + id) | srv/service1.js:187:7:187:87 | await U ... " + id) | | srv/service1.js:187:13:187:87 | UPDATE. ... " + id) | srv/service1.js:187:7:187:87 | await U ... " + id) | @@ -1066,13 +888,11 @@ edges | srv/service1.js:187:66:187:67 | id | srv/service1.js:187:47:187:67 | "col1 = ... " + id | | srv/service1.js:187:76:187:86 | "ID =" + id | srv/service1.js:187:13:187:87 | UPDATE. ... " + id) | | srv/service1.js:187:85:187:86 | id | srv/service1.js:187:76:187:86 | "ID =" + id | -| srv/service1.js:190:33:190:35 | req | srv/service1.js:191:22:191:24 | req | -| srv/service1.js:190:33:190:35 | req | srv/service1.js:191:22:191:24 | req | | srv/service1.js:191:13:191:18 | { id } | srv/service1.js:191:15:191:16 | id | | srv/service1.js:191:13:191:29 | id | srv/service1.js:193:66:193:67 | id | | srv/service1.js:191:13:191:29 | id | srv/service1.js:193:85:193:86 | id | | srv/service1.js:191:15:191:16 | id | srv/service1.js:191:13:191:29 | id | -| srv/service1.js:191:22:191:24 | req | srv/service1.js:191:22:191:29 | req.data | +| srv/service1.js:191:22:191:29 | req.data | srv/service1.js:191:13:191:18 | { id } | | srv/service1.js:191:22:191:29 | req.data | srv/service1.js:191:13:191:18 | { id } | | srv/service1.js:193:13:193:87 | UPDATE. ... ` + id) | srv/service1.js:193:7:193:87 | await U ... ` + id) | | srv/service1.js:193:13:193:87 | UPDATE. ... ` + id) | srv/service1.js:193:7:193:87 | await U ... ` + id) | @@ -1080,13 +900,11 @@ edges | srv/service1.js:193:66:193:67 | id | srv/service1.js:193:47:193:67 | "col1 = ... " + id | | srv/service1.js:193:76:193:86 | `ID =` + id | srv/service1.js:193:13:193:87 | UPDATE. ... ` + id) | | srv/service1.js:193:85:193:86 | id | srv/service1.js:193:76:193:86 | `ID =` + id | -| srv/service1.js:196:33:196:35 | req | srv/service1.js:197:22:197:24 | req | -| srv/service1.js:196:33:196:35 | req | srv/service1.js:197:22:197:24 | req | | srv/service1.js:197:13:197:18 | { id } | srv/service1.js:197:15:197:16 | id | | srv/service1.js:197:13:197:29 | id | srv/service1.js:199:66:199:67 | id | | srv/service1.js:197:13:197:29 | id | srv/service1.js:199:84:199:85 | id | | srv/service1.js:197:15:197:16 | id | srv/service1.js:197:13:197:29 | id | -| srv/service1.js:197:22:197:24 | req | srv/service1.js:197:22:197:29 | req.data | +| srv/service1.js:197:22:197:29 | req.data | srv/service1.js:197:13:197:18 | { id } | | srv/service1.js:197:22:197:29 | req.data | srv/service1.js:197:13:197:18 | { id } | | srv/service1.js:199:13:199:88 | UPDATE. ... ${id}`) | srv/service1.js:199:7:199:88 | await U ... ${id}`) | | srv/service1.js:199:13:199:88 | UPDATE. ... ${id}`) | srv/service1.js:199:7:199:88 | await U ... ${id}`) | @@ -1094,678 +912,572 @@ edges | srv/service1.js:199:66:199:67 | id | srv/service1.js:199:47:199:67 | "col1 = ... " + id | | srv/service1.js:199:76:199:87 | `ID = ${id}` | srv/service1.js:199:13:199:88 | UPDATE. ... ${id}`) | | srv/service1.js:199:84:199:85 | id | srv/service1.js:199:76:199:87 | `ID = ${id}` | -| srv/service1.js:202:33:202:35 | req | srv/service1.js:203:22:203:24 | req | -| srv/service1.js:202:33:202:35 | req | srv/service1.js:203:22:203:24 | req | | srv/service1.js:203:13:203:18 | { id } | srv/service1.js:203:15:203:16 | id | | srv/service1.js:203:13:203:29 | id | srv/service1.js:205:66:205:67 | id | | srv/service1.js:203:15:203:16 | id | srv/service1.js:203:13:203:29 | id | -| srv/service1.js:203:22:203:24 | req | srv/service1.js:203:22:203:29 | req.data | +| srv/service1.js:203:22:203:29 | req.data | srv/service1.js:203:13:203:18 | { id } | | srv/service1.js:203:22:203:29 | req.data | srv/service1.js:203:13:203:18 | { id } | | srv/service1.js:205:13:205:86 | UPDATE. ... ${id}` | srv/service1.js:205:7:205:86 | await U ... ${id}` | | srv/service1.js:205:13:205:86 | UPDATE. ... ${id}` | srv/service1.js:205:7:205:86 | await U ... ${id}` | | srv/service1.js:205:47:205:67 | "col1 = ... " + id | srv/service1.js:205:13:205:86 | UPDATE. ... ${id}` | | srv/service1.js:205:66:205:67 | id | srv/service1.js:205:47:205:67 | "col1 = ... " + id | -| srv/service1.js:226:33:226:35 | req | srv/service1.js:227:22:227:24 | req | -| srv/service1.js:226:33:226:35 | req | srv/service1.js:227:22:227:24 | req | | srv/service1.js:227:13:227:18 | { id } | srv/service1.js:227:15:227:16 | id | | srv/service1.js:227:13:227:29 | id | srv/service1.js:229:56:229:57 | id | | srv/service1.js:227:15:227:16 | id | srv/service1.js:227:13:227:29 | id | -| srv/service1.js:227:22:227:24 | req | srv/service1.js:227:22:227:29 | req.data | +| srv/service1.js:227:22:227:29 | req.data | srv/service1.js:227:13:227:18 | { id } | | srv/service1.js:227:22:227:29 | req.data | srv/service1.js:227:13:227:18 | { id } | | srv/service1.js:229:13:229:58 | DELETE. ... " + id) | srv/service1.js:229:7:229:58 | await D ... " + id) | | srv/service1.js:229:13:229:58 | DELETE. ... " + id) | srv/service1.js:229:7:229:58 | await D ... " + id) | | srv/service1.js:229:47:229:57 | "ID =" + id | srv/service1.js:229:13:229:58 | DELETE. ... " + id) | | srv/service1.js:229:56:229:57 | id | srv/service1.js:229:47:229:57 | "ID =" + id | -| srv/service1.js:232:33:232:35 | req | srv/service1.js:233:22:233:24 | req | -| srv/service1.js:232:33:232:35 | req | srv/service1.js:233:22:233:24 | req | | srv/service1.js:233:13:233:18 | { id } | srv/service1.js:233:15:233:16 | id | | srv/service1.js:233:13:233:29 | id | srv/service1.js:235:56:235:57 | id | | srv/service1.js:233:15:233:16 | id | srv/service1.js:233:13:233:29 | id | -| srv/service1.js:233:22:233:24 | req | srv/service1.js:233:22:233:29 | req.data | +| srv/service1.js:233:22:233:29 | req.data | srv/service1.js:233:13:233:18 | { id } | | srv/service1.js:233:22:233:29 | req.data | srv/service1.js:233:13:233:18 | { id } | | srv/service1.js:235:13:235:58 | DELETE. ... ` + id) | srv/service1.js:235:7:235:58 | await D ... ` + id) | | srv/service1.js:235:13:235:58 | DELETE. ... ` + id) | srv/service1.js:235:7:235:58 | await D ... ` + id) | | srv/service1.js:235:47:235:57 | `ID =` + id | srv/service1.js:235:13:235:58 | DELETE. ... ` + id) | | srv/service1.js:235:56:235:57 | id | srv/service1.js:235:47:235:57 | `ID =` + id | -| srv/service1.js:238:33:238:35 | req | srv/service1.js:239:22:239:24 | req | -| srv/service1.js:238:33:238:35 | req | srv/service1.js:239:22:239:24 | req | | srv/service1.js:239:13:239:18 | { id } | srv/service1.js:239:15:239:16 | id | | srv/service1.js:239:13:239:29 | id | srv/service1.js:241:55:241:56 | id | | srv/service1.js:239:15:239:16 | id | srv/service1.js:239:13:239:29 | id | -| srv/service1.js:239:22:239:24 | req | srv/service1.js:239:22:239:29 | req.data | +| srv/service1.js:239:22:239:29 | req.data | srv/service1.js:239:13:239:18 | { id } | | srv/service1.js:239:22:239:29 | req.data | srv/service1.js:239:13:239:18 | { id } | | srv/service1.js:241:13:241:59 | DELETE. ... ${id}`) | srv/service1.js:241:7:241:59 | await D ... ${id}`) | | srv/service1.js:241:13:241:59 | DELETE. ... ${id}`) | srv/service1.js:241:7:241:59 | await D ... ${id}`) | | srv/service1.js:241:47:241:58 | `ID = ${id}` | srv/service1.js:241:13:241:59 | DELETE. ... ${id}`) | | srv/service1.js:241:55:241:56 | id | srv/service1.js:241:47:241:58 | `ID = ${id}` | -| srv/service1.js:251:30:251:32 | req | srv/service1.js:252:22:252:24 | req | -| srv/service1.js:251:30:251:32 | req | srv/service1.js:252:22:252:24 | req | | srv/service1.js:252:13:252:18 | { id } | srv/service1.js:252:15:252:16 | id | | srv/service1.js:252:13:252:29 | id | srv/service1.js:253:63:253:64 | id | | srv/service1.js:252:15:252:16 | id | srv/service1.js:252:13:252:29 | id | -| srv/service1.js:252:22:252:24 | req | srv/service1.js:252:22:252:29 | req.data | +| srv/service1.js:252:22:252:29 | req.data | srv/service1.js:252:13:252:18 | { id } | | srv/service1.js:252:22:252:29 | req.data | srv/service1.js:252:13:252:18 | { id } | | srv/service1.js:253:13:253:65 | query | srv/service1.js:254:16:254:20 | query | | srv/service1.js:253:13:253:65 | query | srv/service1.js:254:16:254:20 | query | | srv/service1.js:253:21:253:65 | SELECT. ... " + id) | srv/service1.js:253:13:253:65 | query | | srv/service1.js:253:55:253:64 | "ID=" + id | srv/service1.js:253:21:253:65 | SELECT. ... " + id) | | srv/service1.js:253:63:253:64 | id | srv/service1.js:253:55:253:64 | "ID=" + id | -| srv/service1.js:257:30:257:32 | req | srv/service1.js:258:22:258:24 | req | -| srv/service1.js:257:30:257:32 | req | srv/service1.js:258:22:258:24 | req | | srv/service1.js:258:13:258:18 | { id } | srv/service1.js:258:15:258:16 | id | | srv/service1.js:258:13:258:29 | id | srv/service1.js:259:50:259:51 | id | | srv/service1.js:258:15:258:16 | id | srv/service1.js:258:13:258:29 | id | -| srv/service1.js:258:22:258:24 | req | srv/service1.js:258:22:258:29 | req.data | +| srv/service1.js:258:22:258:29 | req.data | srv/service1.js:258:13:258:18 | { id } | | srv/service1.js:258:22:258:29 | req.data | srv/service1.js:258:13:258:18 | { id } | | srv/service1.js:259:50:259:51 | id | srv/service1.js:259:41:259:51 | "ID =" + id | | srv/service1.js:259:50:259:51 | id | srv/service1.js:259:41:259:51 | "ID =" + id | -| srv/service1.js:267:30:267:32 | req | srv/service1.js:268:30:268:32 | req | -| srv/service1.js:267:30:267:32 | req | srv/service1.js:268:30:268:32 | req | | srv/service1.js:268:13:268:26 | { id, amount } | srv/service1.js:268:15:268:16 | id | | srv/service1.js:268:13:268:26 | { id, amount } | srv/service1.js:268:19:268:24 | amount | | srv/service1.js:268:13:268:37 | amount | srv/service1.js:269:57:269:62 | amount | | srv/service1.js:268:13:268:37 | id | srv/service1.js:269:83:269:84 | id | | srv/service1.js:268:15:268:16 | id | srv/service1.js:268:13:268:37 | id | | srv/service1.js:268:19:268:24 | amount | srv/service1.js:268:13:268:37 | amount | -| srv/service1.js:268:30:268:32 | req | srv/service1.js:268:30:268:37 | req.data | +| srv/service1.js:268:30:268:37 | req.data | srv/service1.js:268:13:268:26 | { id, amount } | | srv/service1.js:268:30:268:37 | req.data | srv/service1.js:268:13:268:26 | { id, amount } | | srv/service1.js:269:57:269:62 | amount | srv/service1.js:269:41:269:62 | "col1 = ... amount | | srv/service1.js:269:57:269:62 | amount | srv/service1.js:269:41:269:62 | "col1 = ... amount | | srv/service1.js:269:83:269:84 | id | srv/service1.js:269:71:269:84 | "col1 = " + id | | srv/service1.js:269:83:269:84 | id | srv/service1.js:269:71:269:84 | "col1 = " + id | -| srv/service1.js:282:30:282:32 | req | srv/service1.js:283:22:283:24 | req | -| srv/service1.js:282:30:282:32 | req | srv/service1.js:283:22:283:24 | req | | srv/service1.js:283:13:283:18 | { id } | srv/service1.js:283:15:283:16 | id | | srv/service1.js:283:13:283:29 | id | srv/service1.js:284:52:284:53 | id | | srv/service1.js:283:15:283:16 | id | srv/service1.js:283:13:283:29 | id | -| srv/service1.js:283:22:283:24 | req | srv/service1.js:283:22:283:29 | req.data | +| srv/service1.js:283:22:283:29 | req.data | srv/service1.js:283:13:283:18 | { id } | | srv/service1.js:283:22:283:29 | req.data | srv/service1.js:283:13:283:18 | { id } | | srv/service1.js:284:52:284:53 | id | srv/service1.js:284:43:284:53 | "ID =" + id | | srv/service1.js:284:52:284:53 | id | srv/service1.js:284:43:284:53 | "ID =" + id | -| srv/service1.js:288:30:288:32 | req | srv/service1.js:289:22:289:24 | req | -| srv/service1.js:288:30:288:32 | req | srv/service1.js:289:22:289:24 | req | | srv/service1.js:289:13:289:18 | { id } | srv/service1.js:289:15:289:16 | id | | srv/service1.js:289:13:289:29 | id | srv/service1.js:291:63:291:64 | id | | srv/service1.js:289:15:289:16 | id | srv/service1.js:289:13:289:29 | id | -| srv/service1.js:289:22:289:24 | req | srv/service1.js:289:22:289:29 | req.data | +| srv/service1.js:289:22:289:29 | req.data | srv/service1.js:289:13:289:18 | { id } | | srv/service1.js:289:22:289:29 | req.data | srv/service1.js:289:13:289:18 | { id } | | srv/service1.js:291:13:291:65 | query | srv/service1.js:292:20:292:24 | query | | srv/service1.js:291:13:291:65 | query | srv/service1.js:292:20:292:24 | query | | srv/service1.js:291:21:291:65 | SELECT. ... " + id) | srv/service1.js:291:13:291:65 | query | | srv/service1.js:291:55:291:64 | "ID=" + id | srv/service1.js:291:21:291:65 | SELECT. ... " + id) | | srv/service1.js:291:63:291:64 | id | srv/service1.js:291:55:291:64 | "ID=" + id | -| srv/service1.js:295:30:295:32 | req | srv/service1.js:296:22:296:24 | req | -| srv/service1.js:295:30:295:32 | req | srv/service1.js:296:22:296:24 | req | | srv/service1.js:296:13:296:18 | { id } | srv/service1.js:296:15:296:16 | id | | srv/service1.js:296:13:296:29 | id | srv/service1.js:298:54:298:55 | id | | srv/service1.js:296:15:296:16 | id | srv/service1.js:296:13:296:29 | id | -| srv/service1.js:296:22:296:24 | req | srv/service1.js:296:22:296:29 | req.data | +| srv/service1.js:296:22:296:29 | req.data | srv/service1.js:296:13:296:18 | { id } | | srv/service1.js:296:22:296:29 | req.data | srv/service1.js:296:13:296:18 | { id } | | srv/service1.js:298:54:298:55 | id | srv/service1.js:298:45:298:55 | "ID =" + id | | srv/service1.js:298:54:298:55 | id | srv/service1.js:298:45:298:55 | "ID =" + id | -| srv/service1.js:307:30:307:32 | req | srv/service1.js:308:30:308:32 | req | -| srv/service1.js:307:30:307:32 | req | srv/service1.js:308:30:308:32 | req | | srv/service1.js:308:13:308:26 | { id, amount } | srv/service1.js:308:15:308:16 | id | | srv/service1.js:308:13:308:26 | { id, amount } | srv/service1.js:308:19:308:24 | amount | | srv/service1.js:308:13:308:37 | amount | srv/service1.js:310:61:310:66 | amount | | srv/service1.js:308:13:308:37 | id | srv/service1.js:310:87:310:88 | id | | srv/service1.js:308:15:308:16 | id | srv/service1.js:308:13:308:37 | id | | srv/service1.js:308:19:308:24 | amount | srv/service1.js:308:13:308:37 | amount | -| srv/service1.js:308:30:308:32 | req | srv/service1.js:308:30:308:37 | req.data | +| srv/service1.js:308:30:308:37 | req.data | srv/service1.js:308:13:308:26 | { id, amount } | | srv/service1.js:308:30:308:37 | req.data | srv/service1.js:308:13:308:26 | { id, amount } | | srv/service1.js:310:61:310:66 | amount | srv/service1.js:310:45:310:66 | "col1 = ... amount | | srv/service1.js:310:61:310:66 | amount | srv/service1.js:310:45:310:66 | "col1 = ... amount | | srv/service1.js:310:87:310:88 | id | srv/service1.js:310:75:310:88 | "col1 = " + id | | srv/service1.js:310:87:310:88 | id | srv/service1.js:310:75:310:88 | "col1 = " + id | -| srv/service1.js:325:30:325:32 | req | srv/service1.js:326:22:326:24 | req | -| srv/service1.js:325:30:325:32 | req | srv/service1.js:326:22:326:24 | req | | srv/service1.js:326:13:326:18 | { id } | srv/service1.js:326:15:326:16 | id | | srv/service1.js:326:13:326:29 | id | srv/service1.js:328:56:328:57 | id | | srv/service1.js:326:15:326:16 | id | srv/service1.js:326:13:326:29 | id | -| srv/service1.js:326:22:326:24 | req | srv/service1.js:326:22:326:29 | req.data | +| srv/service1.js:326:22:326:29 | req.data | srv/service1.js:326:13:326:18 | { id } | | srv/service1.js:326:22:326:29 | req.data | srv/service1.js:326:13:326:18 | { id } | | srv/service1.js:328:56:328:57 | id | srv/service1.js:328:47:328:57 | "ID =" + id | | srv/service1.js:328:56:328:57 | id | srv/service1.js:328:47:328:57 | "ID =" + id | -| srv/service1.js:332:30:332:32 | req | srv/service1.js:333:22:333:24 | req | -| srv/service1.js:332:30:332:32 | req | srv/service1.js:333:22:333:24 | req | | srv/service1.js:333:13:333:18 | { id } | srv/service1.js:333:15:333:16 | id | | srv/service1.js:333:13:333:29 | id | srv/service1.js:335:72:335:73 | id | | srv/service1.js:333:15:333:16 | id | srv/service1.js:333:13:333:29 | id | -| srv/service1.js:333:22:333:24 | req | srv/service1.js:333:22:333:29 | req.data | +| srv/service1.js:333:22:333:29 | req.data | srv/service1.js:333:13:333:18 | { id } | | srv/service1.js:333:22:333:29 | req.data | srv/service1.js:333:13:333:18 | { id } | | srv/service1.js:335:13:335:74 | query | srv/service1.js:336:20:336:24 | query | | srv/service1.js:335:13:335:74 | query | srv/service1.js:336:20:336:24 | query | | srv/service1.js:335:21:335:74 | cds.ql( ... " + id) | srv/service1.js:335:13:335:74 | query | | srv/service1.js:335:28:335:73 | "SELECT ... =" + id | srv/service1.js:335:21:335:74 | cds.ql( ... " + id) | | srv/service1.js:335:72:335:73 | id | srv/service1.js:335:28:335:73 | "SELECT ... =" + id | -| srv/service1.js:339:30:339:32 | req | srv/service1.js:340:22:340:24 | req | -| srv/service1.js:339:30:339:32 | req | srv/service1.js:340:22:340:24 | req | | srv/service1.js:340:13:340:18 | { id } | srv/service1.js:340:15:340:16 | id | | srv/service1.js:340:13:340:29 | id | srv/service1.js:342:72:342:73 | id | | srv/service1.js:340:15:340:16 | id | srv/service1.js:340:13:340:29 | id | -| srv/service1.js:340:22:340:24 | req | srv/service1.js:340:22:340:29 | req.data | +| srv/service1.js:340:22:340:29 | req.data | srv/service1.js:340:13:340:18 | { id } | | srv/service1.js:340:22:340:29 | req.data | srv/service1.js:340:13:340:18 | { id } | | srv/service1.js:342:13:342:74 | query | srv/service1.js:343:20:343:24 | query | | srv/service1.js:342:13:342:74 | query | srv/service1.js:343:20:343:24 | query | | srv/service1.js:342:21:342:74 | cds.ql( ... ` + id) | srv/service1.js:342:13:342:74 | query | | srv/service1.js:342:28:342:73 | `SELECT ... =` + id | srv/service1.js:342:21:342:74 | cds.ql( ... ` + id) | | srv/service1.js:342:72:342:73 | id | srv/service1.js:342:28:342:73 | `SELECT ... =` + id | -| srv/service1.js:346:30:346:32 | req | srv/service1.js:347:22:347:24 | req | -| srv/service1.js:346:30:346:32 | req | srv/service1.js:347:22:347:24 | req | | srv/service1.js:347:13:347:18 | { id } | srv/service1.js:347:15:347:16 | id | | srv/service1.js:347:13:347:29 | id | srv/service1.js:349:71:349:72 | id | | srv/service1.js:347:15:347:16 | id | srv/service1.js:347:13:347:29 | id | -| srv/service1.js:347:22:347:24 | req | srv/service1.js:347:22:347:29 | req.data | +| srv/service1.js:347:22:347:29 | req.data | srv/service1.js:347:13:347:18 | { id } | | srv/service1.js:347:22:347:29 | req.data | srv/service1.js:347:13:347:18 | { id } | | srv/service1.js:349:13:349:75 | query | srv/service1.js:350:20:350:24 | query | | srv/service1.js:349:13:349:75 | query | srv/service1.js:350:20:350:24 | query | | srv/service1.js:349:21:349:75 | cds.ql( ... ${id}`) | srv/service1.js:349:13:349:75 | query | | srv/service1.js:349:28:349:74 | `SELECT ... ${id}` | srv/service1.js:349:21:349:75 | cds.ql( ... ${id}`) | | srv/service1.js:349:71:349:72 | id | srv/service1.js:349:28:349:74 | `SELECT ... ${id}` | -| srv/service1.js:361:30:361:32 | req | srv/service1.js:362:22:362:24 | req | -| srv/service1.js:361:30:361:32 | req | srv/service1.js:362:22:362:24 | req | | srv/service1.js:362:13:362:18 | { id } | srv/service1.js:362:15:362:16 | id | | srv/service1.js:362:13:362:29 | id | srv/service1.js:363:72:363:73 | id | | srv/service1.js:362:15:362:16 | id | srv/service1.js:362:13:362:29 | id | -| srv/service1.js:362:22:362:24 | req | srv/service1.js:362:22:362:29 | req.data | +| srv/service1.js:362:22:362:29 | req.data | srv/service1.js:362:13:362:18 | { id } | | srv/service1.js:362:22:362:29 | req.data | srv/service1.js:362:13:362:18 | { id } | | srv/service1.js:363:13:363:74 | query | srv/service1.js:364:15:364:19 | query | | srv/service1.js:363:13:363:74 | query | srv/service1.js:364:15:364:19 | query | | srv/service1.js:363:21:363:74 | cds.par ... " + id) | srv/service1.js:363:13:363:74 | query | | srv/service1.js:363:35:363:73 | "SELECT ... =" + id | srv/service1.js:363:21:363:74 | cds.par ... " + id) | | srv/service1.js:363:72:363:73 | id | srv/service1.js:363:35:363:73 | "SELECT ... =" + id | -| srv/service1.js:367:30:367:32 | req | srv/service1.js:368:22:368:24 | req | -| srv/service1.js:367:30:367:32 | req | srv/service1.js:368:22:368:24 | req | | srv/service1.js:368:13:368:18 | { id } | srv/service1.js:368:15:368:16 | id | | srv/service1.js:368:13:368:29 | id | srv/service1.js:369:72:369:73 | id | | srv/service1.js:368:15:368:16 | id | srv/service1.js:368:13:368:29 | id | -| srv/service1.js:368:22:368:24 | req | srv/service1.js:368:22:368:29 | req.data | +| srv/service1.js:368:22:368:29 | req.data | srv/service1.js:368:13:368:18 | { id } | | srv/service1.js:368:22:368:29 | req.data | srv/service1.js:368:13:368:18 | { id } | | srv/service1.js:369:13:369:74 | query | srv/service1.js:370:15:370:19 | query | | srv/service1.js:369:13:369:74 | query | srv/service1.js:370:15:370:19 | query | | srv/service1.js:369:21:369:74 | cds.par ... ` + id) | srv/service1.js:369:13:369:74 | query | | srv/service1.js:369:35:369:73 | `SELECT ... =` + id | srv/service1.js:369:21:369:74 | cds.par ... ` + id) | | srv/service1.js:369:72:369:73 | id | srv/service1.js:369:35:369:73 | `SELECT ... =` + id | -| srv/service1.js:373:30:373:32 | req | srv/service1.js:374:22:374:24 | req | -| srv/service1.js:373:30:373:32 | req | srv/service1.js:374:22:374:24 | req | | srv/service1.js:374:13:374:18 | { id } | srv/service1.js:374:15:374:16 | id | | srv/service1.js:374:13:374:29 | id | srv/service1.js:375:71:375:72 | id | | srv/service1.js:374:15:374:16 | id | srv/service1.js:374:13:374:29 | id | -| srv/service1.js:374:22:374:24 | req | srv/service1.js:374:22:374:29 | req.data | +| srv/service1.js:374:22:374:29 | req.data | srv/service1.js:374:13:374:18 | { id } | | srv/service1.js:374:22:374:29 | req.data | srv/service1.js:374:13:374:18 | { id } | | srv/service1.js:375:13:375:75 | query | srv/service1.js:376:15:376:19 | query | | srv/service1.js:375:13:375:75 | query | srv/service1.js:376:15:376:19 | query | | srv/service1.js:375:21:375:75 | cds.par ... ${id}`) | srv/service1.js:375:13:375:75 | query | | srv/service1.js:375:35:375:74 | `SELECT ... ${id}` | srv/service1.js:375:21:375:75 | cds.par ... ${id}`) | | srv/service1.js:375:71:375:72 | id | srv/service1.js:375:35:375:74 | `SELECT ... ${id}` | -| srv/service1.js:386:30:386:32 | req | srv/service1.js:387:22:387:24 | req | -| srv/service1.js:386:30:386:32 | req | srv/service1.js:387:22:387:24 | req | | srv/service1.js:387:13:387:18 | { id } | srv/service1.js:387:15:387:16 | id | | srv/service1.js:387:13:387:29 | id | srv/service1.js:388:62:388:63 | id | | srv/service1.js:387:15:387:16 | id | srv/service1.js:387:13:387:29 | id | -| srv/service1.js:387:22:387:24 | req | srv/service1.js:387:22:387:29 | req.data | +| srv/service1.js:387:22:387:29 | req.data | srv/service1.js:387:13:387:18 | { id } | | srv/service1.js:387:22:387:29 | req.data | srv/service1.js:387:13:387:18 | { id } | | srv/service1.js:388:13:388:64 | query | srv/service1.js:389:15:389:19 | query | | srv/service1.js:388:13:388:64 | query | srv/service1.js:389:15:389:19 | query | | srv/service1.js:388:21:388:64 | CQL("SE ... " + id) | srv/service1.js:388:13:388:64 | query | | srv/service1.js:388:25:388:63 | "SELECT ... =" + id | srv/service1.js:388:21:388:64 | CQL("SE ... " + id) | | srv/service1.js:388:62:388:63 | id | srv/service1.js:388:25:388:63 | "SELECT ... =" + id | -| srv/service1.js:392:30:392:32 | req | srv/service1.js:393:22:393:24 | req | -| srv/service1.js:392:30:392:32 | req | srv/service1.js:393:22:393:24 | req | | srv/service1.js:393:13:393:18 | { id } | srv/service1.js:393:15:393:16 | id | | srv/service1.js:393:13:393:29 | id | srv/service1.js:394:62:394:63 | id | | srv/service1.js:393:15:393:16 | id | srv/service1.js:393:13:393:29 | id | -| srv/service1.js:393:22:393:24 | req | srv/service1.js:393:22:393:29 | req.data | +| srv/service1.js:393:22:393:29 | req.data | srv/service1.js:393:13:393:18 | { id } | | srv/service1.js:393:22:393:29 | req.data | srv/service1.js:393:13:393:18 | { id } | | srv/service1.js:394:13:394:64 | query | srv/service1.js:395:15:395:19 | query | | srv/service1.js:394:13:394:64 | query | srv/service1.js:395:15:395:19 | query | | srv/service1.js:394:21:394:64 | CQL(`SE ... ` + id) | srv/service1.js:394:13:394:64 | query | | srv/service1.js:394:25:394:63 | `SELECT ... =` + id | srv/service1.js:394:21:394:64 | CQL(`SE ... ` + id) | | srv/service1.js:394:62:394:63 | id | srv/service1.js:394:25:394:63 | `SELECT ... =` + id | -| srv/service1.js:398:30:398:32 | req | srv/service1.js:399:22:399:24 | req | -| srv/service1.js:398:30:398:32 | req | srv/service1.js:399:22:399:24 | req | | srv/service1.js:399:13:399:18 | { id } | srv/service1.js:399:15:399:16 | id | | srv/service1.js:399:13:399:29 | id | srv/service1.js:400:61:400:62 | id | | srv/service1.js:399:15:399:16 | id | srv/service1.js:399:13:399:29 | id | -| srv/service1.js:399:22:399:24 | req | srv/service1.js:399:22:399:29 | req.data | +| srv/service1.js:399:22:399:29 | req.data | srv/service1.js:399:13:399:18 | { id } | | srv/service1.js:399:22:399:29 | req.data | srv/service1.js:399:13:399:18 | { id } | | srv/service1.js:400:13:400:65 | query | srv/service1.js:401:15:401:19 | query | | srv/service1.js:400:13:400:65 | query | srv/service1.js:401:15:401:19 | query | | srv/service1.js:400:21:400:65 | CQL(`SE ... ${id}`) | srv/service1.js:400:13:400:65 | query | | srv/service1.js:400:25:400:64 | `SELECT ... ${id}` | srv/service1.js:400:21:400:65 | CQL(`SE ... ${id}`) | | srv/service1.js:400:61:400:62 | id | srv/service1.js:400:25:400:64 | `SELECT ... ${id}` | -| srv/service1.js:411:30:411:32 | req | srv/service1.js:412:22:412:24 | req | -| srv/service1.js:411:30:411:32 | req | srv/service1.js:412:22:412:24 | req | | srv/service1.js:412:13:412:18 | { id } | srv/service1.js:412:15:412:16 | id | | srv/service1.js:412:13:412:29 | id | srv/service1.js:414:58:414:59 | id | | srv/service1.js:412:15:412:16 | id | srv/service1.js:412:13:412:29 | id | -| srv/service1.js:412:22:412:24 | req | srv/service1.js:412:22:412:29 | req.data | +| srv/service1.js:412:22:412:29 | req.data | srv/service1.js:412:13:412:18 | { id } | | srv/service1.js:412:22:412:29 | req.data | srv/service1.js:412:13:412:18 | { id } | | srv/service1.js:414:13:414:59 | query | srv/service1.js:415:20:415:24 | query | | srv/service1.js:414:13:414:59 | query | srv/service1.js:415:20:415:24 | query | | srv/service1.js:414:21:414:59 | "SELECT ... =" + id | srv/service1.js:414:13:414:59 | query | | srv/service1.js:414:58:414:59 | id | srv/service1.js:414:21:414:59 | "SELECT ... =" + id | -| srv/service1.js:418:30:418:32 | req | srv/service1.js:419:22:419:24 | req | -| srv/service1.js:418:30:418:32 | req | srv/service1.js:419:22:419:24 | req | | srv/service1.js:419:13:419:18 | { id } | srv/service1.js:419:15:419:16 | id | | srv/service1.js:419:13:419:29 | id | srv/service1.js:421:58:421:59 | id | | srv/service1.js:419:15:419:16 | id | srv/service1.js:419:13:419:29 | id | -| srv/service1.js:419:22:419:24 | req | srv/service1.js:419:22:419:29 | req.data | +| srv/service1.js:419:22:419:29 | req.data | srv/service1.js:419:13:419:18 | { id } | | srv/service1.js:419:22:419:29 | req.data | srv/service1.js:419:13:419:18 | { id } | | srv/service1.js:421:13:421:59 | query | srv/service1.js:422:20:422:24 | query | | srv/service1.js:421:13:421:59 | query | srv/service1.js:422:20:422:24 | query | | srv/service1.js:421:21:421:59 | `SELECT ... =` + id | srv/service1.js:421:13:421:59 | query | | srv/service1.js:421:58:421:59 | id | srv/service1.js:421:21:421:59 | `SELECT ... =` + id | -| srv/service1.js:425:30:425:32 | req | srv/service1.js:426:22:426:24 | req | -| srv/service1.js:425:30:425:32 | req | srv/service1.js:426:22:426:24 | req | | srv/service1.js:426:13:426:18 | { id } | srv/service1.js:426:15:426:16 | id | | srv/service1.js:426:13:426:29 | id | srv/service1.js:428:57:428:58 | id | | srv/service1.js:426:15:426:16 | id | srv/service1.js:426:13:426:29 | id | -| srv/service1.js:426:22:426:24 | req | srv/service1.js:426:22:426:29 | req.data | +| srv/service1.js:426:22:426:29 | req.data | srv/service1.js:426:13:426:18 | { id } | | srv/service1.js:426:22:426:29 | req.data | srv/service1.js:426:13:426:18 | { id } | | srv/service1.js:428:13:428:60 | query | srv/service1.js:429:20:429:24 | query | | srv/service1.js:428:13:428:60 | query | srv/service1.js:429:20:429:24 | query | | srv/service1.js:428:21:428:60 | `SELECT ... ${id}` | srv/service1.js:428:13:428:60 | query | | srv/service1.js:428:57:428:58 | id | srv/service1.js:428:21:428:60 | `SELECT ... ${id}` | -| srv/service1.js:433:30:433:32 | req | srv/service1.js:434:22:434:24 | req | -| srv/service1.js:433:30:433:32 | req | srv/service1.js:434:22:434:24 | req | | srv/service1.js:434:13:434:18 | { id } | srv/service1.js:434:15:434:16 | id | | srv/service1.js:434:13:434:29 | id | srv/service1.js:436:63:436:64 | id | | srv/service1.js:434:15:434:16 | id | srv/service1.js:434:13:434:29 | id | -| srv/service1.js:434:22:434:24 | req | srv/service1.js:434:22:434:29 | req.data | +| srv/service1.js:434:22:434:29 | req.data | srv/service1.js:434:13:434:18 | { id } | | srv/service1.js:434:22:434:29 | req.data | srv/service1.js:434:13:434:18 | { id } | | srv/service1.js:436:13:436:65 | query | srv/service1.js:438:16:438:20 | query | | srv/service1.js:436:13:436:65 | query | srv/service1.js:438:16:438:20 | query | | srv/service1.js:436:21:436:65 | SELECT. ... " + id) | srv/service1.js:436:13:436:65 | query | | srv/service1.js:436:55:436:64 | "ID=" + id | srv/service1.js:436:21:436:65 | SELECT. ... " + id) | | srv/service1.js:436:63:436:64 | id | srv/service1.js:436:55:436:64 | "ID=" + id | -| srv/service1.js:442:30:442:32 | req | srv/service1.js:443:22:443:24 | req | -| srv/service1.js:442:30:442:32 | req | srv/service1.js:443:22:443:24 | req | | srv/service1.js:443:13:443:18 | { id } | srv/service1.js:443:15:443:16 | id | | srv/service1.js:443:13:443:29 | id | srv/service1.js:446:50:446:51 | id | | srv/service1.js:443:15:443:16 | id | srv/service1.js:443:13:443:29 | id | -| srv/service1.js:443:22:443:24 | req | srv/service1.js:443:22:443:29 | req.data | +| srv/service1.js:443:22:443:29 | req.data | srv/service1.js:443:13:443:18 | { id } | | srv/service1.js:443:22:443:29 | req.data | srv/service1.js:443:13:443:18 | { id } | | srv/service1.js:446:50:446:51 | id | srv/service1.js:446:41:446:51 | "ID =" + id | | srv/service1.js:446:50:446:51 | id | srv/service1.js:446:41:446:51 | "ID =" + id | -| srv/service1.js:458:30:458:32 | req | srv/service1.js:459:30:459:32 | req | -| srv/service1.js:458:30:458:32 | req | srv/service1.js:459:30:459:32 | req | | srv/service1.js:459:13:459:26 | { id, amount } | srv/service1.js:459:15:459:16 | id | | srv/service1.js:459:13:459:26 | { id, amount } | srv/service1.js:459:19:459:24 | amount | | srv/service1.js:459:13:459:37 | amount | srv/service1.js:462:57:462:62 | amount | | srv/service1.js:459:13:459:37 | id | srv/service1.js:462:83:462:84 | id | | srv/service1.js:459:15:459:16 | id | srv/service1.js:459:13:459:37 | id | | srv/service1.js:459:19:459:24 | amount | srv/service1.js:459:13:459:37 | amount | -| srv/service1.js:459:30:459:32 | req | srv/service1.js:459:30:459:37 | req.data | +| srv/service1.js:459:30:459:37 | req.data | srv/service1.js:459:13:459:26 | { id, amount } | | srv/service1.js:459:30:459:37 | req.data | srv/service1.js:459:13:459:26 | { id, amount } | | srv/service1.js:462:57:462:62 | amount | srv/service1.js:462:41:462:62 | "col1 = ... amount | | srv/service1.js:462:57:462:62 | amount | srv/service1.js:462:41:462:62 | "col1 = ... amount | | srv/service1.js:462:83:462:84 | id | srv/service1.js:462:71:462:84 | "col1 = " + id | | srv/service1.js:462:83:462:84 | id | srv/service1.js:462:71:462:84 | "col1 = " + id | -| srv/service1.js:482:30:482:32 | req | srv/service1.js:483:22:483:24 | req | -| srv/service1.js:482:30:482:32 | req | srv/service1.js:483:22:483:24 | req | | srv/service1.js:483:13:483:18 | { id } | srv/service1.js:483:15:483:16 | id | | srv/service1.js:483:13:483:29 | id | srv/service1.js:486:52:486:53 | id | | srv/service1.js:483:15:483:16 | id | srv/service1.js:483:13:483:29 | id | -| srv/service1.js:483:22:483:24 | req | srv/service1.js:483:22:483:29 | req.data | +| srv/service1.js:483:22:483:29 | req.data | srv/service1.js:483:13:483:18 | { id } | | srv/service1.js:483:22:483:29 | req.data | srv/service1.js:483:13:483:18 | { id } | | srv/service1.js:486:52:486:53 | id | srv/service1.js:486:43:486:53 | "ID =" + id | | srv/service1.js:486:52:486:53 | id | srv/service1.js:486:43:486:53 | "ID =" + id | -| srv/service1.js:491:31:491:33 | req | srv/service1.js:492:22:492:24 | req | -| srv/service1.js:491:31:491:33 | req | srv/service1.js:492:22:492:24 | req | | srv/service1.js:492:13:492:18 | { id } | srv/service1.js:492:15:492:16 | id | | srv/service1.js:492:13:492:29 | id | srv/service1.js:493:63:493:64 | id | | srv/service1.js:492:15:492:16 | id | srv/service1.js:492:13:492:29 | id | -| srv/service1.js:492:22:492:24 | req | srv/service1.js:492:22:492:29 | req.data | +| srv/service1.js:492:22:492:29 | req.data | srv/service1.js:492:13:492:18 | { id } | | srv/service1.js:492:22:492:29 | req.data | srv/service1.js:492:13:492:18 | { id } | | srv/service1.js:493:13:493:65 | query | srv/service1.js:495:16:495:20 | query | | srv/service1.js:493:13:493:65 | query | srv/service1.js:495:16:495:20 | query | | srv/service1.js:493:21:493:65 | SELECT. ... " + id) | srv/service1.js:493:13:493:65 | query | | srv/service1.js:493:55:493:64 | "ID=" + id | srv/service1.js:493:21:493:65 | SELECT. ... " + id) | | srv/service1.js:493:63:493:64 | id | srv/service1.js:493:55:493:64 | "ID=" + id | -| srv/service1.js:499:31:499:33 | req | srv/service1.js:500:22:500:24 | req | -| srv/service1.js:499:31:499:33 | req | srv/service1.js:500:22:500:24 | req | | srv/service1.js:500:13:500:18 | { id } | srv/service1.js:500:15:500:16 | id | | srv/service1.js:500:13:500:29 | id | srv/service1.js:502:50:502:51 | id | | srv/service1.js:500:15:500:16 | id | srv/service1.js:500:13:500:29 | id | -| srv/service1.js:500:22:500:24 | req | srv/service1.js:500:22:500:29 | req.data | +| srv/service1.js:500:22:500:29 | req.data | srv/service1.js:500:13:500:18 | { id } | | srv/service1.js:500:22:500:29 | req.data | srv/service1.js:500:13:500:18 | { id } | | srv/service1.js:502:50:502:51 | id | srv/service1.js:502:41:502:51 | "ID =" + id | | srv/service1.js:502:50:502:51 | id | srv/service1.js:502:41:502:51 | "ID =" + id | -| srv/service1.js:513:31:513:33 | req | srv/service1.js:514:30:514:32 | req | -| srv/service1.js:513:31:513:33 | req | srv/service1.js:514:30:514:32 | req | | srv/service1.js:514:13:514:26 | { id, amount } | srv/service1.js:514:15:514:16 | id | | srv/service1.js:514:13:514:26 | { id, amount } | srv/service1.js:514:19:514:24 | amount | | srv/service1.js:514:13:514:37 | amount | srv/service1.js:516:57:516:62 | amount | | srv/service1.js:514:13:514:37 | id | srv/service1.js:516:83:516:84 | id | | srv/service1.js:514:15:514:16 | id | srv/service1.js:514:13:514:37 | id | | srv/service1.js:514:19:514:24 | amount | srv/service1.js:514:13:514:37 | amount | -| srv/service1.js:514:30:514:32 | req | srv/service1.js:514:30:514:37 | req.data | +| srv/service1.js:514:30:514:37 | req.data | srv/service1.js:514:13:514:26 | { id, amount } | | srv/service1.js:514:30:514:37 | req.data | srv/service1.js:514:13:514:26 | { id, amount } | | srv/service1.js:516:57:516:62 | amount | srv/service1.js:516:41:516:62 | "col1 = ... amount | | srv/service1.js:516:57:516:62 | amount | srv/service1.js:516:41:516:62 | "col1 = ... amount | | srv/service1.js:516:83:516:84 | id | srv/service1.js:516:71:516:84 | "col1 = " + id | | srv/service1.js:516:83:516:84 | id | srv/service1.js:516:71:516:84 | "col1 = " + id | -| srv/service1.js:534:31:534:33 | req | srv/service1.js:535:22:535:24 | req | -| srv/service1.js:534:31:534:33 | req | srv/service1.js:535:22:535:24 | req | | srv/service1.js:535:13:535:18 | { id } | srv/service1.js:535:15:535:16 | id | | srv/service1.js:535:13:535:29 | id | srv/service1.js:537:52:537:53 | id | | srv/service1.js:535:15:535:16 | id | srv/service1.js:535:13:535:29 | id | -| srv/service1.js:535:22:535:24 | req | srv/service1.js:535:22:535:29 | req.data | +| srv/service1.js:535:22:535:29 | req.data | srv/service1.js:535:13:535:18 | { id } | | srv/service1.js:535:22:535:29 | req.data | srv/service1.js:535:13:535:18 | { id } | | srv/service1.js:537:52:537:53 | id | srv/service1.js:537:43:537:53 | "ID =" + id | | srv/service1.js:537:52:537:53 | id | srv/service1.js:537:43:537:53 | "ID =" + id | -| srv/service1.js:542:31:542:33 | req | srv/service1.js:543:22:543:24 | req | -| srv/service1.js:542:31:542:33 | req | srv/service1.js:543:22:543:24 | req | | srv/service1.js:543:13:543:18 | { id } | srv/service1.js:543:15:543:16 | id | | srv/service1.js:543:13:543:29 | id | srv/service1.js:544:56:544:57 | id | | srv/service1.js:543:15:543:16 | id | srv/service1.js:543:13:543:29 | id | -| srv/service1.js:543:22:543:24 | req | srv/service1.js:543:22:543:29 | req.data | +| srv/service1.js:543:22:543:29 | req.data | srv/service1.js:543:13:543:18 | { id } | | srv/service1.js:543:22:543:29 | req.data | srv/service1.js:543:13:543:18 | { id } | | srv/service1.js:544:13:544:58 | query | srv/service1.js:546:16:546:20 | query | | srv/service1.js:544:13:544:58 | query | srv/service1.js:546:16:546:20 | query | | srv/service1.js:544:21:544:58 | SELECT. ... " + id) | srv/service1.js:544:13:544:58 | query | | srv/service1.js:544:48:544:57 | "ID=" + id | srv/service1.js:544:21:544:58 | SELECT. ... " + id) | | srv/service1.js:544:56:544:57 | id | srv/service1.js:544:48:544:57 | "ID=" + id | -| srv/service1.js:550:31:550:33 | req | srv/service1.js:551:22:551:24 | req | -| srv/service1.js:550:31:550:33 | req | srv/service1.js:551:22:551:24 | req | | srv/service1.js:551:13:551:18 | { id } | srv/service1.js:551:15:551:16 | id | | srv/service1.js:551:13:551:29 | id | srv/service1.js:553:43:553:44 | id | | srv/service1.js:551:15:551:16 | id | srv/service1.js:551:13:551:29 | id | -| srv/service1.js:551:22:551:24 | req | srv/service1.js:551:22:551:29 | req.data | +| srv/service1.js:551:22:551:29 | req.data | srv/service1.js:551:13:551:18 | { id } | | srv/service1.js:551:22:551:29 | req.data | srv/service1.js:551:13:551:18 | { id } | | srv/service1.js:553:43:553:44 | id | srv/service1.js:553:34:553:44 | "ID =" + id | | srv/service1.js:553:43:553:44 | id | srv/service1.js:553:34:553:44 | "ID =" + id | -| srv/service1.js:564:31:564:33 | req | srv/service1.js:565:30:565:32 | req | -| srv/service1.js:564:31:564:33 | req | srv/service1.js:565:30:565:32 | req | | srv/service1.js:565:13:565:26 | { id, amount } | srv/service1.js:565:15:565:16 | id | | srv/service1.js:565:13:565:26 | { id, amount } | srv/service1.js:565:19:565:24 | amount | | srv/service1.js:565:13:565:37 | amount | srv/service1.js:567:50:567:55 | amount | | srv/service1.js:565:13:565:37 | id | srv/service1.js:567:76:567:77 | id | | srv/service1.js:565:15:565:16 | id | srv/service1.js:565:13:565:37 | id | | srv/service1.js:565:19:565:24 | amount | srv/service1.js:565:13:565:37 | amount | -| srv/service1.js:565:30:565:32 | req | srv/service1.js:565:30:565:37 | req.data | +| srv/service1.js:565:30:565:37 | req.data | srv/service1.js:565:13:565:26 | { id, amount } | | srv/service1.js:565:30:565:37 | req.data | srv/service1.js:565:13:565:26 | { id, amount } | | srv/service1.js:567:50:567:55 | amount | srv/service1.js:567:34:567:55 | "col1 = ... amount | | srv/service1.js:567:50:567:55 | amount | srv/service1.js:567:34:567:55 | "col1 = ... amount | | srv/service1.js:567:76:567:77 | id | srv/service1.js:567:64:567:77 | "col1 = " + id | | srv/service1.js:567:76:567:77 | id | srv/service1.js:567:64:567:77 | "col1 = " + id | -| srv/service1.js:585:31:585:33 | req | srv/service1.js:586:22:586:24 | req | -| srv/service1.js:585:31:585:33 | req | srv/service1.js:586:22:586:24 | req | | srv/service1.js:586:13:586:18 | { id } | srv/service1.js:586:15:586:16 | id | | srv/service1.js:586:13:586:29 | id | srv/service1.js:588:45:588:46 | id | | srv/service1.js:586:15:586:16 | id | srv/service1.js:586:13:586:29 | id | -| srv/service1.js:586:22:586:24 | req | srv/service1.js:586:22:586:29 | req.data | +| srv/service1.js:586:22:586:29 | req.data | srv/service1.js:586:13:586:18 | { id } | | srv/service1.js:586:22:586:29 | req.data | srv/service1.js:586:13:586:18 | { id } | | srv/service1.js:588:45:588:46 | id | srv/service1.js:588:36:588:46 | "ID =" + id | | srv/service1.js:588:45:588:46 | id | srv/service1.js:588:36:588:46 | "ID =" + id | -| srv/service1.js:593:31:593:33 | req | srv/service1.js:594:22:594:24 | req | -| srv/service1.js:593:31:593:33 | req | srv/service1.js:594:22:594:24 | req | | srv/service1.js:594:13:594:18 | { id } | srv/service1.js:594:15:594:16 | id | | srv/service1.js:594:13:594:29 | id | srv/service1.js:595:56:595:57 | id | | srv/service1.js:594:15:594:16 | id | srv/service1.js:594:13:594:29 | id | -| srv/service1.js:594:22:594:24 | req | srv/service1.js:594:22:594:29 | req.data | +| srv/service1.js:594:22:594:29 | req.data | srv/service1.js:594:13:594:18 | { id } | | srv/service1.js:594:22:594:29 | req.data | srv/service1.js:594:13:594:18 | { id } | | srv/service1.js:595:13:595:58 | query | srv/service1.js:597:16:597:20 | query | | srv/service1.js:595:13:595:58 | query | srv/service1.js:597:16:597:20 | query | | srv/service1.js:595:21:595:58 | SELECT. ... " + id) | srv/service1.js:595:13:595:58 | query | | srv/service1.js:595:48:595:57 | "ID=" + id | srv/service1.js:595:21:595:58 | SELECT. ... " + id) | | srv/service1.js:595:56:595:57 | id | srv/service1.js:595:48:595:57 | "ID=" + id | -| srv/service1.js:601:31:601:33 | req | srv/service1.js:602:22:602:24 | req | -| srv/service1.js:601:31:601:33 | req | srv/service1.js:602:22:602:24 | req | | srv/service1.js:602:13:602:18 | { id } | srv/service1.js:602:15:602:16 | id | | srv/service1.js:602:13:602:29 | id | srv/service1.js:604:43:604:44 | id | | srv/service1.js:602:15:602:16 | id | srv/service1.js:602:13:602:29 | id | -| srv/service1.js:602:22:602:24 | req | srv/service1.js:602:22:602:29 | req.data | +| srv/service1.js:602:22:602:29 | req.data | srv/service1.js:602:13:602:18 | { id } | | srv/service1.js:602:22:602:29 | req.data | srv/service1.js:602:13:602:18 | { id } | | srv/service1.js:604:43:604:44 | id | srv/service1.js:604:34:604:44 | "ID =" + id | | srv/service1.js:604:43:604:44 | id | srv/service1.js:604:34:604:44 | "ID =" + id | -| srv/service1.js:615:31:615:33 | req | srv/service1.js:616:30:616:32 | req | -| srv/service1.js:615:31:615:33 | req | srv/service1.js:616:30:616:32 | req | | srv/service1.js:616:13:616:26 | { id, amount } | srv/service1.js:616:15:616:16 | id | | srv/service1.js:616:13:616:26 | { id, amount } | srv/service1.js:616:19:616:24 | amount | | srv/service1.js:616:13:616:37 | amount | srv/service1.js:618:50:618:55 | amount | | srv/service1.js:616:13:616:37 | id | srv/service1.js:618:76:618:77 | id | | srv/service1.js:616:15:616:16 | id | srv/service1.js:616:13:616:37 | id | | srv/service1.js:616:19:616:24 | amount | srv/service1.js:616:13:616:37 | amount | -| srv/service1.js:616:30:616:32 | req | srv/service1.js:616:30:616:37 | req.data | +| srv/service1.js:616:30:616:37 | req.data | srv/service1.js:616:13:616:26 | { id, amount } | | srv/service1.js:616:30:616:37 | req.data | srv/service1.js:616:13:616:26 | { id, amount } | | srv/service1.js:618:50:618:55 | amount | srv/service1.js:618:34:618:55 | "col1 = ... amount | | srv/service1.js:618:50:618:55 | amount | srv/service1.js:618:34:618:55 | "col1 = ... amount | | srv/service1.js:618:76:618:77 | id | srv/service1.js:618:64:618:77 | "col1 = " + id | | srv/service1.js:618:76:618:77 | id | srv/service1.js:618:64:618:77 | "col1 = " + id | -| srv/service1.js:636:31:636:33 | req | srv/service1.js:637:22:637:24 | req | -| srv/service1.js:636:31:636:33 | req | srv/service1.js:637:22:637:24 | req | | srv/service1.js:637:13:637:18 | { id } | srv/service1.js:637:15:637:16 | id | | srv/service1.js:637:13:637:29 | id | srv/service1.js:639:45:639:46 | id | | srv/service1.js:637:15:637:16 | id | srv/service1.js:637:13:637:29 | id | -| srv/service1.js:637:22:637:24 | req | srv/service1.js:637:22:637:29 | req.data | +| srv/service1.js:637:22:637:29 | req.data | srv/service1.js:637:13:637:18 | { id } | | srv/service1.js:637:22:637:29 | req.data | srv/service1.js:637:13:637:18 | { id } | | srv/service1.js:639:45:639:46 | id | srv/service1.js:639:36:639:46 | "ID =" + id | | srv/service1.js:639:45:639:46 | id | srv/service1.js:639:36:639:46 | "ID =" + id | -| srv/service1.js:644:34:644:36 | req | srv/service1.js:645:22:645:24 | req | -| srv/service1.js:644:34:644:36 | req | srv/service1.js:645:22:645:24 | req | | srv/service1.js:645:13:645:18 | { id } | srv/service1.js:645:15:645:16 | id | | srv/service1.js:645:13:645:29 | id | srv/service1.js:646:56:646:57 | id | | srv/service1.js:645:15:645:16 | id | srv/service1.js:645:13:645:29 | id | -| srv/service1.js:645:22:645:24 | req | srv/service1.js:645:22:645:29 | req.data | +| srv/service1.js:645:22:645:29 | req.data | srv/service1.js:645:13:645:18 | { id } | | srv/service1.js:645:22:645:29 | req.data | srv/service1.js:645:13:645:18 | { id } | | srv/service1.js:646:13:646:58 | query | srv/service1.js:647:18:647:22 | query | | srv/service1.js:646:13:646:58 | query | srv/service1.js:647:18:647:22 | query | | srv/service1.js:646:21:646:58 | SELECT. ... " + id) | srv/service1.js:646:13:646:58 | query | | srv/service1.js:646:48:646:57 | "ID=" + id | srv/service1.js:646:21:646:58 | SELECT. ... " + id) | | srv/service1.js:646:56:646:57 | id | srv/service1.js:646:48:646:57 | "ID=" + id | -| srv/service1.js:650:34:650:36 | req | srv/service1.js:651:22:651:24 | req | -| srv/service1.js:650:34:650:36 | req | srv/service1.js:651:22:651:24 | req | | srv/service1.js:651:13:651:18 | { id } | srv/service1.js:651:15:651:16 | id | | srv/service1.js:651:13:651:29 | id | srv/service1.js:652:56:652:57 | id | | srv/service1.js:651:15:651:16 | id | srv/service1.js:651:13:651:29 | id | -| srv/service1.js:651:22:651:24 | req | srv/service1.js:651:22:651:29 | req.data | +| srv/service1.js:651:22:651:29 | req.data | srv/service1.js:651:13:651:18 | { id } | | srv/service1.js:651:22:651:29 | req.data | srv/service1.js:651:13:651:18 | { id } | | srv/service1.js:652:13:652:58 | query | srv/service1.js:653:18:653:22 | query | | srv/service1.js:652:13:652:58 | query | srv/service1.js:653:18:653:22 | query | | srv/service1.js:652:21:652:58 | SELECT. ... ` + id) | srv/service1.js:652:13:652:58 | query | | srv/service1.js:652:48:652:57 | `ID=` + id | srv/service1.js:652:21:652:58 | SELECT. ... ` + id) | | srv/service1.js:652:56:652:57 | id | srv/service1.js:652:48:652:57 | `ID=` + id | -| srv/service1.js:656:34:656:36 | req | srv/service1.js:657:22:657:24 | req | -| srv/service1.js:656:34:656:36 | req | srv/service1.js:657:22:657:24 | req | | srv/service1.js:657:13:657:18 | { id } | srv/service1.js:657:15:657:16 | id | | srv/service1.js:657:13:657:29 | id | srv/service1.js:658:54:658:55 | id | | srv/service1.js:657:15:657:16 | id | srv/service1.js:657:13:657:29 | id | -| srv/service1.js:657:22:657:24 | req | srv/service1.js:657:22:657:29 | req.data | +| srv/service1.js:657:22:657:29 | req.data | srv/service1.js:657:13:657:18 | { id } | | srv/service1.js:657:22:657:29 | req.data | srv/service1.js:657:13:657:18 | { id } | | srv/service1.js:658:13:658:58 | query | srv/service1.js:659:18:659:22 | query | | srv/service1.js:658:13:658:58 | query | srv/service1.js:659:18:659:22 | query | | srv/service1.js:658:21:658:58 | SELECT. ... ${id}`) | srv/service1.js:658:13:658:58 | query | | srv/service1.js:658:48:658:57 | `ID=${id}` | srv/service1.js:658:21:658:58 | SELECT. ... ${id}`) | | srv/service1.js:658:54:658:55 | id | srv/service1.js:658:48:658:57 | `ID=${id}` | -| srv/service1.js:668:34:668:36 | req | srv/service1.js:669:22:669:24 | req | -| srv/service1.js:668:34:668:36 | req | srv/service1.js:669:22:669:24 | req | | srv/service1.js:669:13:669:18 | { id } | srv/service1.js:669:15:669:16 | id | | srv/service1.js:669:13:669:29 | id | srv/service1.js:670:45:670:46 | id | | srv/service1.js:669:15:669:16 | id | srv/service1.js:669:13:669:29 | id | -| srv/service1.js:669:22:669:24 | req | srv/service1.js:669:22:669:29 | req.data | +| srv/service1.js:669:22:669:29 | req.data | srv/service1.js:669:13:669:18 | { id } | | srv/service1.js:669:22:669:29 | req.data | srv/service1.js:669:13:669:18 | { id } | | srv/service1.js:670:45:670:46 | id | srv/service1.js:670:36:670:46 | "ID =" + id | | srv/service1.js:670:45:670:46 | id | srv/service1.js:670:36:670:46 | "ID =" + id | -| srv/service1.js:673:34:673:36 | req | srv/service1.js:674:22:674:24 | req | -| srv/service1.js:673:34:673:36 | req | srv/service1.js:674:22:674:24 | req | | srv/service1.js:674:13:674:18 | { id } | srv/service1.js:674:15:674:16 | id | | srv/service1.js:674:13:674:29 | id | srv/service1.js:675:45:675:46 | id | | srv/service1.js:674:15:674:16 | id | srv/service1.js:674:13:674:29 | id | -| srv/service1.js:674:22:674:24 | req | srv/service1.js:674:22:674:29 | req.data | +| srv/service1.js:674:22:674:29 | req.data | srv/service1.js:674:13:674:18 | { id } | | srv/service1.js:674:22:674:29 | req.data | srv/service1.js:674:13:674:18 | { id } | | srv/service1.js:675:45:675:46 | id | srv/service1.js:675:36:675:46 | `ID =` + id | | srv/service1.js:675:45:675:46 | id | srv/service1.js:675:36:675:46 | `ID =` + id | -| srv/service1.js:678:34:678:36 | req | srv/service1.js:679:22:679:24 | req | -| srv/service1.js:678:34:678:36 | req | srv/service1.js:679:22:679:24 | req | | srv/service1.js:679:13:679:18 | { id } | srv/service1.js:679:15:679:16 | id | | srv/service1.js:679:13:679:29 | id | srv/service1.js:680:42:680:43 | id | | srv/service1.js:679:15:679:16 | id | srv/service1.js:679:13:679:29 | id | -| srv/service1.js:679:22:679:24 | req | srv/service1.js:679:22:679:29 | req.data | +| srv/service1.js:679:22:679:29 | req.data | srv/service1.js:679:13:679:18 | { id } | | srv/service1.js:679:22:679:29 | req.data | srv/service1.js:679:13:679:18 | { id } | | srv/service1.js:680:42:680:43 | id | srv/service1.js:680:36:680:45 | `ID=${id}` | | srv/service1.js:680:42:680:43 | id | srv/service1.js:680:36:680:45 | `ID=${id}` | -| srv/service1.js:703:34:703:36 | req | srv/service1.js:704:30:704:32 | req | -| srv/service1.js:703:34:703:36 | req | srv/service1.js:704:30:704:32 | req | | srv/service1.js:704:13:704:26 | { id, amount } | srv/service1.js:704:15:704:16 | id | | srv/service1.js:704:13:704:26 | { id, amount } | srv/service1.js:704:19:704:24 | amount | | srv/service1.js:704:13:704:37 | amount | srv/service1.js:705:52:705:57 | amount | | srv/service1.js:704:13:704:37 | id | srv/service1.js:705:78:705:79 | id | | srv/service1.js:704:15:704:16 | id | srv/service1.js:704:13:704:37 | id | | srv/service1.js:704:19:704:24 | amount | srv/service1.js:704:13:704:37 | amount | -| srv/service1.js:704:30:704:32 | req | srv/service1.js:704:30:704:37 | req.data | +| srv/service1.js:704:30:704:37 | req.data | srv/service1.js:704:13:704:26 | { id, amount } | | srv/service1.js:704:30:704:37 | req.data | srv/service1.js:704:13:704:26 | { id, amount } | | srv/service1.js:705:52:705:57 | amount | srv/service1.js:705:36:705:57 | "col1 = ... amount | | srv/service1.js:705:52:705:57 | amount | srv/service1.js:705:36:705:57 | "col1 = ... amount | | srv/service1.js:705:78:705:79 | id | srv/service1.js:705:66:705:79 | "col1 = " + id | | srv/service1.js:705:78:705:79 | id | srv/service1.js:705:66:705:79 | "col1 = " + id | -| srv/service1.js:708:34:708:36 | req | srv/service1.js:709:30:709:32 | req | -| srv/service1.js:708:34:708:36 | req | srv/service1.js:709:30:709:32 | req | | srv/service1.js:709:13:709:26 | { id, amount } | srv/service1.js:709:15:709:16 | id | | srv/service1.js:709:13:709:26 | { id, amount } | srv/service1.js:709:19:709:24 | amount | | srv/service1.js:709:13:709:37 | amount | srv/service1.js:710:52:710:57 | amount | | srv/service1.js:709:13:709:37 | id | srv/service1.js:710:77:710:78 | id | | srv/service1.js:709:15:709:16 | id | srv/service1.js:709:13:709:37 | id | | srv/service1.js:709:19:709:24 | amount | srv/service1.js:709:13:709:37 | amount | -| srv/service1.js:709:30:709:32 | req | srv/service1.js:709:30:709:37 | req.data | +| srv/service1.js:709:30:709:37 | req.data | srv/service1.js:709:13:709:26 | { id, amount } | | srv/service1.js:709:30:709:37 | req.data | srv/service1.js:709:13:709:26 | { id, amount } | | srv/service1.js:710:52:710:57 | amount | srv/service1.js:710:36:710:57 | "col1 = ... amount | | srv/service1.js:710:52:710:57 | amount | srv/service1.js:710:36:710:57 | "col1 = ... amount | | srv/service1.js:710:77:710:78 | id | srv/service1.js:710:66:710:78 | `col1 =` + id | | srv/service1.js:710:77:710:78 | id | srv/service1.js:710:66:710:78 | `col1 =` + id | -| srv/service1.js:713:34:713:36 | req | srv/service1.js:714:30:714:32 | req | -| srv/service1.js:713:34:713:36 | req | srv/service1.js:714:30:714:32 | req | | srv/service1.js:714:13:714:26 | { id, amount } | srv/service1.js:714:15:714:16 | id | | srv/service1.js:714:13:714:26 | { id, amount } | srv/service1.js:714:19:714:24 | amount | | srv/service1.js:714:13:714:37 | amount | srv/service1.js:715:52:715:57 | amount | | srv/service1.js:714:13:714:37 | id | srv/service1.js:715:76:715:77 | id | | srv/service1.js:714:15:714:16 | id | srv/service1.js:714:13:714:37 | id | | srv/service1.js:714:19:714:24 | amount | srv/service1.js:714:13:714:37 | amount | -| srv/service1.js:714:30:714:32 | req | srv/service1.js:714:30:714:37 | req.data | +| srv/service1.js:714:30:714:37 | req.data | srv/service1.js:714:13:714:26 | { id, amount } | | srv/service1.js:714:30:714:37 | req.data | srv/service1.js:714:13:714:26 | { id, amount } | | srv/service1.js:715:52:715:57 | amount | srv/service1.js:715:36:715:57 | "col1 = ... amount | | srv/service1.js:715:52:715:57 | amount | srv/service1.js:715:36:715:57 | "col1 = ... amount | | srv/service1.js:715:76:715:77 | id | srv/service1.js:715:66:715:79 | `col1 = ${id}` | | srv/service1.js:715:76:715:77 | id | srv/service1.js:715:66:715:79 | `col1 = ${id}` | -| srv/service1.js:718:34:718:36 | req | srv/service1.js:719:30:719:32 | req | -| srv/service1.js:718:34:718:36 | req | srv/service1.js:719:30:719:32 | req | | srv/service1.js:719:13:719:26 | { id, amount } | srv/service1.js:719:19:719:24 | amount | | srv/service1.js:719:13:719:37 | amount | srv/service1.js:720:52:720:57 | amount | | srv/service1.js:719:19:719:24 | amount | srv/service1.js:719:13:719:37 | amount | -| srv/service1.js:719:30:719:32 | req | srv/service1.js:719:30:719:37 | req.data | +| srv/service1.js:719:30:719:37 | req.data | srv/service1.js:719:13:719:26 | { id, amount } | | srv/service1.js:719:30:719:37 | req.data | srv/service1.js:719:13:719:26 | { id, amount } | | srv/service1.js:720:52:720:57 | amount | srv/service1.js:720:36:720:57 | "col1 = ... amount | | srv/service1.js:720:52:720:57 | amount | srv/service1.js:720:36:720:57 | "col1 = ... amount | -| srv/service1.js:753:34:753:36 | req | srv/service1.js:754:22:754:24 | req | -| srv/service1.js:753:34:753:36 | req | srv/service1.js:754:22:754:24 | req | | srv/service1.js:754:13:754:18 | { id } | srv/service1.js:754:15:754:16 | id | | srv/service1.js:754:13:754:29 | id | srv/service1.js:755:47:755:48 | id | | srv/service1.js:754:15:754:16 | id | srv/service1.js:754:13:754:29 | id | -| srv/service1.js:754:22:754:24 | req | srv/service1.js:754:22:754:29 | req.data | +| srv/service1.js:754:22:754:29 | req.data | srv/service1.js:754:13:754:18 | { id } | | srv/service1.js:754:22:754:29 | req.data | srv/service1.js:754:13:754:18 | { id } | | srv/service1.js:755:47:755:48 | id | srv/service1.js:755:38:755:48 | "ID =" + id | | srv/service1.js:755:47:755:48 | id | srv/service1.js:755:38:755:48 | "ID =" + id | -| srv/service1.js:758:34:758:36 | req | srv/service1.js:759:22:759:24 | req | -| srv/service1.js:758:34:758:36 | req | srv/service1.js:759:22:759:24 | req | | srv/service1.js:759:13:759:18 | { id } | srv/service1.js:759:15:759:16 | id | | srv/service1.js:759:13:759:29 | id | srv/service1.js:760:47:760:48 | id | | srv/service1.js:759:15:759:16 | id | srv/service1.js:759:13:759:29 | id | -| srv/service1.js:759:22:759:24 | req | srv/service1.js:759:22:759:29 | req.data | +| srv/service1.js:759:22:759:29 | req.data | srv/service1.js:759:13:759:18 | { id } | | srv/service1.js:759:22:759:29 | req.data | srv/service1.js:759:13:759:18 | { id } | | srv/service1.js:760:47:760:48 | id | srv/service1.js:760:38:760:48 | `ID =` + id | | srv/service1.js:760:47:760:48 | id | srv/service1.js:760:38:760:48 | `ID =` + id | -| srv/service1.js:763:34:763:36 | req | srv/service1.js:764:22:764:24 | req | -| srv/service1.js:763:34:763:36 | req | srv/service1.js:764:22:764:24 | req | | srv/service1.js:764:13:764:18 | { id } | srv/service1.js:764:15:764:16 | id | | srv/service1.js:764:13:764:29 | id | srv/service1.js:765:46:765:47 | id | | srv/service1.js:764:15:764:16 | id | srv/service1.js:764:13:764:29 | id | -| srv/service1.js:764:22:764:24 | req | srv/service1.js:764:22:764:29 | req.data | +| srv/service1.js:764:22:764:29 | req.data | srv/service1.js:764:13:764:18 | { id } | | srv/service1.js:764:22:764:29 | req.data | srv/service1.js:764:13:764:18 | { id } | | srv/service1.js:765:46:765:47 | id | srv/service1.js:765:38:765:49 | `ID = ${id}` | | srv/service1.js:765:46:765:47 | id | srv/service1.js:765:38:765:49 | `ID = ${id}` | #select -| srv/service1.js:15:15:15:19 | query | srv/service1.js:12:33:12:35 | req | srv/service1.js:15:15:15:19 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:12:33:12:35 | req | user-provided value | -| srv/service1.js:21:15:21:19 | query | srv/service1.js:18:33:18:35 | req | srv/service1.js:21:15:21:19 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:18:33:18:35 | req | user-provided value | -| srv/service1.js:27:15:27:19 | query | srv/service1.js:24:33:24:35 | req | srv/service1.js:27:15:27:19 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:24:33:24:35 | req | user-provided value | -| srv/service1.js:38:7:38:44 | cds.rea ... " + id) | srv/service1.js:36:33:36:35 | req | srv/service1.js:38:33:38:43 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:36:33:36:35 | req | user-provided value | -| srv/service1.js:43:7:43:44 | cds.rea ... ` + id) | srv/service1.js:41:33:41:35 | req | srv/service1.js:43:33:43:43 | `ID =` + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:41:33:41:35 | req | user-provided value | -| srv/service1.js:48:7:48:43 | cds.rea ... ${id}`) | srv/service1.js:46:33:46:35 | req | srv/service1.js:48:33:48:42 | `ID=${id}` | This CQL query contains a string concatenation with a $@. | srv/service1.js:46:33:46:35 | req | user-provided value | -| srv/service1.js:73:7:73:77 | cds.upd ... " + id) | srv/service1.js:71:33:71:35 | req | srv/service1.js:73:33:73:54 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:71:33:71:35 | req | user-provided value | -| srv/service1.js:73:7:73:77 | cds.upd ... " + id) | srv/service1.js:71:33:71:35 | req | srv/service1.js:73:63:73:76 | "col1 = " + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:71:33:71:35 | req | user-provided value | -| srv/service1.js:78:7:78:77 | cds.upd ... ` + id) | srv/service1.js:76:33:76:35 | req | srv/service1.js:78:33:78:54 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:76:33:76:35 | req | user-provided value | -| srv/service1.js:78:7:78:77 | cds.upd ... ` + id) | srv/service1.js:76:33:76:35 | req | srv/service1.js:78:63:78:76 | `col1 = ` + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:76:33:76:35 | req | user-provided value | -| srv/service1.js:83:7:83:77 | cds.upd ... ${id}`) | srv/service1.js:81:33:81:35 | req | srv/service1.js:83:33:83:54 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:81:33:81:35 | req | user-provided value | -| srv/service1.js:83:7:83:77 | cds.upd ... ${id}`) | srv/service1.js:81:33:81:35 | req | srv/service1.js:83:63:83:76 | `col1 = ${id}` | This CQL query contains a string concatenation with a $@. | srv/service1.js:81:33:81:35 | req | user-provided value | -| srv/service1.js:88:7:88:75 | cds.upd ... ${id}` | srv/service1.js:86:33:86:35 | req | srv/service1.js:88:33:88:54 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:86:33:86:35 | req | user-provided value | -| srv/service1.js:123:7:123:46 | cds.del ... " + id) | srv/service1.js:121:33:121:35 | req | srv/service1.js:123:35:123:45 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:121:33:121:35 | req | user-provided value | -| srv/service1.js:128:7:128:46 | cds.del ... ` + id) | srv/service1.js:126:33:126:35 | req | srv/service1.js:128:35:128:45 | `ID =` + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:126:33:126:35 | req | user-provided value | -| srv/service1.js:133:7:133:47 | cds.del ... ${id}`) | srv/service1.js:131:33:131:35 | req | srv/service1.js:133:35:133:46 | `ID = ${id}` | This CQL query contains a string concatenation with a $@. | srv/service1.js:131:33:131:35 | req | user-provided value | -| srv/service1.js:145:13:145:57 | SELECT. ... " + id) | srv/service1.js:142:33:142:35 | req | srv/service1.js:145:7:145:57 | await S ... " + id) | This CQL query contains a string concatenation with a $@. | srv/service1.js:142:33:142:35 | req | user-provided value | -| srv/service1.js:151:13:151:57 | SELECT. ... ` + id) | srv/service1.js:148:33:148:35 | req | srv/service1.js:151:7:151:57 | await S ... ` + id) | This CQL query contains a string concatenation with a $@. | srv/service1.js:148:33:148:35 | req | user-provided value | -| srv/service1.js:157:13:157:57 | SELECT. ... ${id}`) | srv/service1.js:154:33:154:35 | req | srv/service1.js:157:7:157:57 | await S ... ${id}`) | This CQL query contains a string concatenation with a $@. | srv/service1.js:154:33:154:35 | req | user-provided value | -| srv/service1.js:187:13:187:87 | UPDATE. ... " + id) | srv/service1.js:184:33:184:35 | req | srv/service1.js:187:7:187:87 | await U ... " + id) | This CQL query contains a string concatenation with a $@. | srv/service1.js:184:33:184:35 | req | user-provided value | -| srv/service1.js:193:13:193:87 | UPDATE. ... ` + id) | srv/service1.js:190:33:190:35 | req | srv/service1.js:193:7:193:87 | await U ... ` + id) | This CQL query contains a string concatenation with a $@. | srv/service1.js:190:33:190:35 | req | user-provided value | -| srv/service1.js:199:13:199:88 | UPDATE. ... ${id}`) | srv/service1.js:196:33:196:35 | req | srv/service1.js:199:7:199:88 | await U ... ${id}`) | This CQL query contains a string concatenation with a $@. | srv/service1.js:196:33:196:35 | req | user-provided value | -| srv/service1.js:205:13:205:86 | UPDATE. ... ${id}` | srv/service1.js:202:33:202:35 | req | srv/service1.js:205:7:205:86 | await U ... ${id}` | This CQL query contains a string concatenation with a $@. | srv/service1.js:202:33:202:35 | req | user-provided value | -| srv/service1.js:229:13:229:58 | DELETE. ... " + id) | srv/service1.js:226:33:226:35 | req | srv/service1.js:229:7:229:58 | await D ... " + id) | This CQL query contains a string concatenation with a $@. | srv/service1.js:226:33:226:35 | req | user-provided value | -| srv/service1.js:235:13:235:58 | DELETE. ... ` + id) | srv/service1.js:232:33:232:35 | req | srv/service1.js:235:7:235:58 | await D ... ` + id) | This CQL query contains a string concatenation with a $@. | srv/service1.js:232:33:232:35 | req | user-provided value | -| srv/service1.js:241:13:241:59 | DELETE. ... ${id}`) | srv/service1.js:238:33:238:35 | req | srv/service1.js:241:7:241:59 | await D ... ${id}`) | This CQL query contains a string concatenation with a $@. | srv/service1.js:238:33:238:35 | req | user-provided value | -| srv/service1.js:254:16:254:20 | query | srv/service1.js:251:30:251:32 | req | srv/service1.js:254:16:254:20 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:251:30:251:32 | req | user-provided value | -| srv/service1.js:259:7:259:52 | this.re ... " + id) | srv/service1.js:257:30:257:32 | req | srv/service1.js:259:41:259:51 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:257:30:257:32 | req | user-provided value | -| srv/service1.js:269:7:269:85 | this.up ... " + id) | srv/service1.js:267:30:267:32 | req | srv/service1.js:269:41:269:62 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:267:30:267:32 | req | user-provided value | -| srv/service1.js:269:7:269:85 | this.up ... " + id) | srv/service1.js:267:30:267:32 | req | srv/service1.js:269:71:269:84 | "col1 = " + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:267:30:267:32 | req | user-provided value | -| srv/service1.js:284:7:284:54 | this.de ... " + id) | srv/service1.js:282:30:282:32 | req | srv/service1.js:284:43:284:53 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:282:30:282:32 | req | user-provided value | -| srv/service1.js:292:20:292:24 | query | srv/service1.js:288:30:288:32 | req | srv/service1.js:292:20:292:24 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:288:30:288:32 | req | user-provided value | -| srv/service1.js:298:7:298:56 | Service ... " + id) | srv/service1.js:295:30:295:32 | req | srv/service1.js:298:45:298:55 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:295:30:295:32 | req | user-provided value | -| srv/service1.js:310:7:310:89 | Service ... " + id) | srv/service1.js:307:30:307:32 | req | srv/service1.js:310:45:310:66 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:307:30:307:32 | req | user-provided value | -| srv/service1.js:310:7:310:89 | Service ... " + id) | srv/service1.js:307:30:307:32 | req | srv/service1.js:310:75:310:88 | "col1 = " + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:307:30:307:32 | req | user-provided value | -| srv/service1.js:328:7:328:58 | Service ... " + id) | srv/service1.js:325:30:325:32 | req | srv/service1.js:328:47:328:57 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:325:30:325:32 | req | user-provided value | -| srv/service1.js:336:20:336:24 | query | srv/service1.js:332:30:332:32 | req | srv/service1.js:336:20:336:24 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:332:30:332:32 | req | user-provided value | -| srv/service1.js:343:20:343:24 | query | srv/service1.js:339:30:339:32 | req | srv/service1.js:343:20:343:24 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:339:30:339:32 | req | user-provided value | -| srv/service1.js:350:20:350:24 | query | srv/service1.js:346:30:346:32 | req | srv/service1.js:350:20:350:24 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:346:30:346:32 | req | user-provided value | -| srv/service1.js:364:15:364:19 | query | srv/service1.js:361:30:361:32 | req | srv/service1.js:364:15:364:19 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:361:30:361:32 | req | user-provided value | -| srv/service1.js:370:15:370:19 | query | srv/service1.js:367:30:367:32 | req | srv/service1.js:370:15:370:19 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:367:30:367:32 | req | user-provided value | -| srv/service1.js:376:15:376:19 | query | srv/service1.js:373:30:373:32 | req | srv/service1.js:376:15:376:19 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:373:30:373:32 | req | user-provided value | -| srv/service1.js:389:15:389:19 | query | srv/service1.js:386:30:386:32 | req | srv/service1.js:389:15:389:19 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:386:30:386:32 | req | user-provided value | -| srv/service1.js:395:15:395:19 | query | srv/service1.js:392:30:392:32 | req | srv/service1.js:395:15:395:19 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:392:30:392:32 | req | user-provided value | -| srv/service1.js:401:15:401:19 | query | srv/service1.js:398:30:398:32 | req | srv/service1.js:401:15:401:19 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:398:30:398:32 | req | user-provided value | -| srv/service1.js:415:20:415:24 | query | srv/service1.js:411:30:411:32 | req | srv/service1.js:415:20:415:24 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:411:30:411:32 | req | user-provided value | -| srv/service1.js:422:20:422:24 | query | srv/service1.js:418:30:418:32 | req | srv/service1.js:422:20:422:24 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:418:30:418:32 | req | user-provided value | -| srv/service1.js:429:20:429:24 | query | srv/service1.js:425:30:425:32 | req | srv/service1.js:429:20:429:24 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:425:30:425:32 | req | user-provided value | -| srv/service1.js:438:16:438:20 | query | srv/service1.js:433:30:433:32 | req | srv/service1.js:438:16:438:20 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:433:30:433:32 | req | user-provided value | -| srv/service1.js:446:9:446:52 | tx.read ... " + id) | srv/service1.js:442:30:442:32 | req | srv/service1.js:446:41:446:51 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:442:30:442:32 | req | user-provided value | -| srv/service1.js:462:9:462:85 | tx.upda ... " + id) | srv/service1.js:458:30:458:32 | req | srv/service1.js:462:41:462:62 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:458:30:458:32 | req | user-provided value | -| srv/service1.js:462:9:462:85 | tx.upda ... " + id) | srv/service1.js:458:30:458:32 | req | srv/service1.js:462:71:462:84 | "col1 = " + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:458:30:458:32 | req | user-provided value | -| srv/service1.js:486:9:486:54 | tx.dele ... " + id) | srv/service1.js:482:30:482:32 | req | srv/service1.js:486:43:486:53 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:482:30:482:32 | req | user-provided value | -| srv/service1.js:495:16:495:20 | query | srv/service1.js:491:31:491:33 | req | srv/service1.js:495:16:495:20 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:491:31:491:33 | req | user-provided value | -| srv/service1.js:502:9:502:52 | tx.read ... " + id) | srv/service1.js:499:31:499:33 | req | srv/service1.js:502:41:502:51 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:499:31:499:33 | req | user-provided value | -| srv/service1.js:516:9:516:85 | tx.upda ... " + id) | srv/service1.js:513:31:513:33 | req | srv/service1.js:516:41:516:62 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:513:31:513:33 | req | user-provided value | -| srv/service1.js:516:9:516:85 | tx.upda ... " + id) | srv/service1.js:513:31:513:33 | req | srv/service1.js:516:71:516:84 | "col1 = " + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:513:31:513:33 | req | user-provided value | -| srv/service1.js:537:9:537:54 | tx.dele ... " + id) | srv/service1.js:534:31:534:33 | req | srv/service1.js:537:43:537:53 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:534:31:534:33 | req | user-provided value | -| srv/service1.js:546:16:546:20 | query | srv/service1.js:542:31:542:33 | req | srv/service1.js:546:16:546:20 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:542:31:542:33 | req | user-provided value | -| srv/service1.js:553:9:553:45 | tx.read ... " + id) | srv/service1.js:550:31:550:33 | req | srv/service1.js:553:34:553:44 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:550:31:550:33 | req | user-provided value | -| srv/service1.js:567:9:567:78 | tx.upda ... " + id) | srv/service1.js:564:31:564:33 | req | srv/service1.js:567:34:567:55 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:564:31:564:33 | req | user-provided value | -| srv/service1.js:567:9:567:78 | tx.upda ... " + id) | srv/service1.js:564:31:564:33 | req | srv/service1.js:567:64:567:77 | "col1 = " + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:564:31:564:33 | req | user-provided value | -| srv/service1.js:588:9:588:47 | tx.dele ... " + id) | srv/service1.js:585:31:585:33 | req | srv/service1.js:588:36:588:46 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:585:31:585:33 | req | user-provided value | -| srv/service1.js:597:16:597:20 | query | srv/service1.js:593:31:593:33 | req | srv/service1.js:597:16:597:20 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:593:31:593:33 | req | user-provided value | -| srv/service1.js:604:9:604:45 | tx.read ... " + id) | srv/service1.js:601:31:601:33 | req | srv/service1.js:604:34:604:44 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:601:31:601:33 | req | user-provided value | -| srv/service1.js:618:9:618:78 | tx.upda ... " + id) | srv/service1.js:615:31:615:33 | req | srv/service1.js:618:34:618:55 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:615:31:615:33 | req | user-provided value | -| srv/service1.js:618:9:618:78 | tx.upda ... " + id) | srv/service1.js:615:31:615:33 | req | srv/service1.js:618:64:618:77 | "col1 = " + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:615:31:615:33 | req | user-provided value | -| srv/service1.js:639:9:639:47 | tx.dele ... " + id) | srv/service1.js:636:31:636:33 | req | srv/service1.js:639:36:639:46 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:636:31:636:33 | req | user-provided value | -| srv/service1.js:647:18:647:22 | query | srv/service1.js:644:34:644:36 | req | srv/service1.js:647:18:647:22 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:644:34:644:36 | req | user-provided value | -| srv/service1.js:653:18:653:22 | query | srv/service1.js:650:34:650:36 | req | srv/service1.js:653:18:653:22 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:650:34:650:36 | req | user-provided value | -| srv/service1.js:659:18:659:22 | query | srv/service1.js:656:34:656:36 | req | srv/service1.js:659:18:659:22 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:656:34:656:36 | req | user-provided value | -| srv/service1.js:670:7:670:47 | cds.db. ... " + id) | srv/service1.js:668:34:668:36 | req | srv/service1.js:670:36:670:46 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:668:34:668:36 | req | user-provided value | -| srv/service1.js:675:7:675:47 | cds.db. ... ` + id) | srv/service1.js:673:34:673:36 | req | srv/service1.js:675:36:675:46 | `ID =` + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:673:34:673:36 | req | user-provided value | -| srv/service1.js:680:7:680:46 | cds.db. ... ${id}`) | srv/service1.js:678:34:678:36 | req | srv/service1.js:680:36:680:45 | `ID=${id}` | This CQL query contains a string concatenation with a $@. | srv/service1.js:678:34:678:36 | req | user-provided value | -| srv/service1.js:705:7:705:80 | cds.db. ... " + id) | srv/service1.js:703:34:703:36 | req | srv/service1.js:705:36:705:57 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:703:34:703:36 | req | user-provided value | -| srv/service1.js:705:7:705:80 | cds.db. ... " + id) | srv/service1.js:703:34:703:36 | req | srv/service1.js:705:66:705:79 | "col1 = " + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:703:34:703:36 | req | user-provided value | -| srv/service1.js:710:7:710:79 | cds.db. ... ` + id) | srv/service1.js:708:34:708:36 | req | srv/service1.js:710:36:710:57 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:708:34:708:36 | req | user-provided value | -| srv/service1.js:710:7:710:79 | cds.db. ... ` + id) | srv/service1.js:708:34:708:36 | req | srv/service1.js:710:66:710:78 | `col1 =` + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:708:34:708:36 | req | user-provided value | -| srv/service1.js:715:7:715:80 | cds.db. ... ${id}`) | srv/service1.js:713:34:713:36 | req | srv/service1.js:715:36:715:57 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:713:34:713:36 | req | user-provided value | -| srv/service1.js:715:7:715:80 | cds.db. ... ${id}`) | srv/service1.js:713:34:713:36 | req | srv/service1.js:715:66:715:79 | `col1 = ${id}` | This CQL query contains a string concatenation with a $@. | srv/service1.js:713:34:713:36 | req | user-provided value | -| srv/service1.js:720:7:720:78 | cds.db. ... ${id}` | srv/service1.js:718:34:718:36 | req | srv/service1.js:720:36:720:57 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:718:34:718:36 | req | user-provided value | -| srv/service1.js:755:7:755:49 | cds.db. ... " + id) | srv/service1.js:753:34:753:36 | req | srv/service1.js:755:38:755:48 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:753:34:753:36 | req | user-provided value | -| srv/service1.js:760:7:760:49 | cds.db. ... ` + id) | srv/service1.js:758:34:758:36 | req | srv/service1.js:760:38:760:48 | `ID =` + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:758:34:758:36 | req | user-provided value | -| srv/service1.js:765:7:765:50 | cds.db. ... ${id}`) | srv/service1.js:763:34:763:36 | req | srv/service1.js:765:38:765:49 | `ID = ${id}` | This CQL query contains a string concatenation with a $@. | srv/service1.js:763:34:763:36 | req | user-provided value | +| srv/service1.js:15:15:15:19 | query | srv/service1.js:13:22:13:29 | req.data | srv/service1.js:15:15:15:19 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:13:22:13:29 | req.data | user-provided value | +| srv/service1.js:21:15:21:19 | query | srv/service1.js:19:22:19:29 | req.data | srv/service1.js:21:15:21:19 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:19:22:19:29 | req.data | user-provided value | +| srv/service1.js:27:15:27:19 | query | srv/service1.js:25:22:25:29 | req.data | srv/service1.js:27:15:27:19 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:25:22:25:29 | req.data | user-provided value | +| srv/service1.js:38:7:38:44 | cds.rea ... " + id) | srv/service1.js:37:22:37:29 | req.data | srv/service1.js:38:33:38:43 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:37:22:37:29 | req.data | user-provided value | +| srv/service1.js:43:7:43:44 | cds.rea ... ` + id) | srv/service1.js:42:22:42:29 | req.data | srv/service1.js:43:33:43:43 | `ID =` + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:42:22:42:29 | req.data | user-provided value | +| srv/service1.js:48:7:48:43 | cds.rea ... ${id}`) | srv/service1.js:47:22:47:29 | req.data | srv/service1.js:48:33:48:42 | `ID=${id}` | This CQL query contains a string concatenation with a $@. | srv/service1.js:47:22:47:29 | req.data | user-provided value | +| srv/service1.js:73:7:73:77 | cds.upd ... " + id) | srv/service1.js:72:30:72:37 | req.data | srv/service1.js:73:33:73:54 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:72:30:72:37 | req.data | user-provided value | +| srv/service1.js:73:7:73:77 | cds.upd ... " + id) | srv/service1.js:72:30:72:37 | req.data | srv/service1.js:73:63:73:76 | "col1 = " + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:72:30:72:37 | req.data | user-provided value | +| srv/service1.js:78:7:78:77 | cds.upd ... ` + id) | srv/service1.js:77:30:77:37 | req.data | srv/service1.js:78:33:78:54 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:77:30:77:37 | req.data | user-provided value | +| srv/service1.js:78:7:78:77 | cds.upd ... ` + id) | srv/service1.js:77:30:77:37 | req.data | srv/service1.js:78:63:78:76 | `col1 = ` + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:77:30:77:37 | req.data | user-provided value | +| srv/service1.js:83:7:83:77 | cds.upd ... ${id}`) | srv/service1.js:82:30:82:37 | req.data | srv/service1.js:83:33:83:54 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:82:30:82:37 | req.data | user-provided value | +| srv/service1.js:83:7:83:77 | cds.upd ... ${id}`) | srv/service1.js:82:30:82:37 | req.data | srv/service1.js:83:63:83:76 | `col1 = ${id}` | This CQL query contains a string concatenation with a $@. | srv/service1.js:82:30:82:37 | req.data | user-provided value | +| srv/service1.js:88:7:88:75 | cds.upd ... ${id}` | srv/service1.js:87:30:87:37 | req.data | srv/service1.js:88:33:88:54 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:87:30:87:37 | req.data | user-provided value | +| srv/service1.js:123:7:123:46 | cds.del ... " + id) | srv/service1.js:122:22:122:29 | req.data | srv/service1.js:123:35:123:45 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:122:22:122:29 | req.data | user-provided value | +| srv/service1.js:128:7:128:46 | cds.del ... ` + id) | srv/service1.js:127:22:127:29 | req.data | srv/service1.js:128:35:128:45 | `ID =` + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:127:22:127:29 | req.data | user-provided value | +| srv/service1.js:133:7:133:47 | cds.del ... ${id}`) | srv/service1.js:132:22:132:29 | req.data | srv/service1.js:133:35:133:46 | `ID = ${id}` | This CQL query contains a string concatenation with a $@. | srv/service1.js:132:22:132:29 | req.data | user-provided value | +| srv/service1.js:145:13:145:57 | SELECT. ... " + id) | srv/service1.js:143:22:143:29 | req.data | srv/service1.js:145:7:145:57 | await S ... " + id) | This CQL query contains a string concatenation with a $@. | srv/service1.js:143:22:143:29 | req.data | user-provided value | +| srv/service1.js:151:13:151:57 | SELECT. ... ` + id) | srv/service1.js:149:22:149:29 | req.data | srv/service1.js:151:7:151:57 | await S ... ` + id) | This CQL query contains a string concatenation with a $@. | srv/service1.js:149:22:149:29 | req.data | user-provided value | +| srv/service1.js:157:13:157:57 | SELECT. ... ${id}`) | srv/service1.js:155:22:155:29 | req.data | srv/service1.js:157:7:157:57 | await S ... ${id}`) | This CQL query contains a string concatenation with a $@. | srv/service1.js:155:22:155:29 | req.data | user-provided value | +| srv/service1.js:187:13:187:87 | UPDATE. ... " + id) | srv/service1.js:185:22:185:29 | req.data | srv/service1.js:187:7:187:87 | await U ... " + id) | This CQL query contains a string concatenation with a $@. | srv/service1.js:185:22:185:29 | req.data | user-provided value | +| srv/service1.js:193:13:193:87 | UPDATE. ... ` + id) | srv/service1.js:191:22:191:29 | req.data | srv/service1.js:193:7:193:87 | await U ... ` + id) | This CQL query contains a string concatenation with a $@. | srv/service1.js:191:22:191:29 | req.data | user-provided value | +| srv/service1.js:199:13:199:88 | UPDATE. ... ${id}`) | srv/service1.js:197:22:197:29 | req.data | srv/service1.js:199:7:199:88 | await U ... ${id}`) | This CQL query contains a string concatenation with a $@. | srv/service1.js:197:22:197:29 | req.data | user-provided value | +| srv/service1.js:205:13:205:86 | UPDATE. ... ${id}` | srv/service1.js:203:22:203:29 | req.data | srv/service1.js:205:7:205:86 | await U ... ${id}` | This CQL query contains a string concatenation with a $@. | srv/service1.js:203:22:203:29 | req.data | user-provided value | +| srv/service1.js:229:13:229:58 | DELETE. ... " + id) | srv/service1.js:227:22:227:29 | req.data | srv/service1.js:229:7:229:58 | await D ... " + id) | This CQL query contains a string concatenation with a $@. | srv/service1.js:227:22:227:29 | req.data | user-provided value | +| srv/service1.js:235:13:235:58 | DELETE. ... ` + id) | srv/service1.js:233:22:233:29 | req.data | srv/service1.js:235:7:235:58 | await D ... ` + id) | This CQL query contains a string concatenation with a $@. | srv/service1.js:233:22:233:29 | req.data | user-provided value | +| srv/service1.js:241:13:241:59 | DELETE. ... ${id}`) | srv/service1.js:239:22:239:29 | req.data | srv/service1.js:241:7:241:59 | await D ... ${id}`) | This CQL query contains a string concatenation with a $@. | srv/service1.js:239:22:239:29 | req.data | user-provided value | +| srv/service1.js:254:16:254:20 | query | srv/service1.js:252:22:252:29 | req.data | srv/service1.js:254:16:254:20 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:252:22:252:29 | req.data | user-provided value | +| srv/service1.js:259:7:259:52 | this.re ... " + id) | srv/service1.js:258:22:258:29 | req.data | srv/service1.js:259:41:259:51 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:258:22:258:29 | req.data | user-provided value | +| srv/service1.js:269:7:269:85 | this.up ... " + id) | srv/service1.js:268:30:268:37 | req.data | srv/service1.js:269:41:269:62 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:268:30:268:37 | req.data | user-provided value | +| srv/service1.js:269:7:269:85 | this.up ... " + id) | srv/service1.js:268:30:268:37 | req.data | srv/service1.js:269:71:269:84 | "col1 = " + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:268:30:268:37 | req.data | user-provided value | +| srv/service1.js:284:7:284:54 | this.de ... " + id) | srv/service1.js:283:22:283:29 | req.data | srv/service1.js:284:43:284:53 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:283:22:283:29 | req.data | user-provided value | +| srv/service1.js:292:20:292:24 | query | srv/service1.js:289:22:289:29 | req.data | srv/service1.js:292:20:292:24 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:289:22:289:29 | req.data | user-provided value | +| srv/service1.js:298:7:298:56 | Service ... " + id) | srv/service1.js:296:22:296:29 | req.data | srv/service1.js:298:45:298:55 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:296:22:296:29 | req.data | user-provided value | +| srv/service1.js:310:7:310:89 | Service ... " + id) | srv/service1.js:308:30:308:37 | req.data | srv/service1.js:310:45:310:66 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:308:30:308:37 | req.data | user-provided value | +| srv/service1.js:310:7:310:89 | Service ... " + id) | srv/service1.js:308:30:308:37 | req.data | srv/service1.js:310:75:310:88 | "col1 = " + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:308:30:308:37 | req.data | user-provided value | +| srv/service1.js:328:7:328:58 | Service ... " + id) | srv/service1.js:326:22:326:29 | req.data | srv/service1.js:328:47:328:57 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:326:22:326:29 | req.data | user-provided value | +| srv/service1.js:336:20:336:24 | query | srv/service1.js:333:22:333:29 | req.data | srv/service1.js:336:20:336:24 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:333:22:333:29 | req.data | user-provided value | +| srv/service1.js:343:20:343:24 | query | srv/service1.js:340:22:340:29 | req.data | srv/service1.js:343:20:343:24 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:340:22:340:29 | req.data | user-provided value | +| srv/service1.js:350:20:350:24 | query | srv/service1.js:347:22:347:29 | req.data | srv/service1.js:350:20:350:24 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:347:22:347:29 | req.data | user-provided value | +| srv/service1.js:364:15:364:19 | query | srv/service1.js:362:22:362:29 | req.data | srv/service1.js:364:15:364:19 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:362:22:362:29 | req.data | user-provided value | +| srv/service1.js:370:15:370:19 | query | srv/service1.js:368:22:368:29 | req.data | srv/service1.js:370:15:370:19 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:368:22:368:29 | req.data | user-provided value | +| srv/service1.js:376:15:376:19 | query | srv/service1.js:374:22:374:29 | req.data | srv/service1.js:376:15:376:19 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:374:22:374:29 | req.data | user-provided value | +| srv/service1.js:389:15:389:19 | query | srv/service1.js:387:22:387:29 | req.data | srv/service1.js:389:15:389:19 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:387:22:387:29 | req.data | user-provided value | +| srv/service1.js:395:15:395:19 | query | srv/service1.js:393:22:393:29 | req.data | srv/service1.js:395:15:395:19 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:393:22:393:29 | req.data | user-provided value | +| srv/service1.js:401:15:401:19 | query | srv/service1.js:399:22:399:29 | req.data | srv/service1.js:401:15:401:19 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:399:22:399:29 | req.data | user-provided value | +| srv/service1.js:415:20:415:24 | query | srv/service1.js:412:22:412:29 | req.data | srv/service1.js:415:20:415:24 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:412:22:412:29 | req.data | user-provided value | +| srv/service1.js:422:20:422:24 | query | srv/service1.js:419:22:419:29 | req.data | srv/service1.js:422:20:422:24 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:419:22:419:29 | req.data | user-provided value | +| srv/service1.js:429:20:429:24 | query | srv/service1.js:426:22:426:29 | req.data | srv/service1.js:429:20:429:24 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:426:22:426:29 | req.data | user-provided value | +| srv/service1.js:438:16:438:20 | query | srv/service1.js:434:22:434:29 | req.data | srv/service1.js:438:16:438:20 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:434:22:434:29 | req.data | user-provided value | +| srv/service1.js:446:9:446:52 | tx.read ... " + id) | srv/service1.js:443:22:443:29 | req.data | srv/service1.js:446:41:446:51 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:443:22:443:29 | req.data | user-provided value | +| srv/service1.js:462:9:462:85 | tx.upda ... " + id) | srv/service1.js:459:30:459:37 | req.data | srv/service1.js:462:41:462:62 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:459:30:459:37 | req.data | user-provided value | +| srv/service1.js:462:9:462:85 | tx.upda ... " + id) | srv/service1.js:459:30:459:37 | req.data | srv/service1.js:462:71:462:84 | "col1 = " + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:459:30:459:37 | req.data | user-provided value | +| srv/service1.js:486:9:486:54 | tx.dele ... " + id) | srv/service1.js:483:22:483:29 | req.data | srv/service1.js:486:43:486:53 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:483:22:483:29 | req.data | user-provided value | +| srv/service1.js:495:16:495:20 | query | srv/service1.js:492:22:492:29 | req.data | srv/service1.js:495:16:495:20 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:492:22:492:29 | req.data | user-provided value | +| srv/service1.js:502:9:502:52 | tx.read ... " + id) | srv/service1.js:500:22:500:29 | req.data | srv/service1.js:502:41:502:51 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:500:22:500:29 | req.data | user-provided value | +| srv/service1.js:516:9:516:85 | tx.upda ... " + id) | srv/service1.js:514:30:514:37 | req.data | srv/service1.js:516:41:516:62 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:514:30:514:37 | req.data | user-provided value | +| srv/service1.js:516:9:516:85 | tx.upda ... " + id) | srv/service1.js:514:30:514:37 | req.data | srv/service1.js:516:71:516:84 | "col1 = " + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:514:30:514:37 | req.data | user-provided value | +| srv/service1.js:537:9:537:54 | tx.dele ... " + id) | srv/service1.js:535:22:535:29 | req.data | srv/service1.js:537:43:537:53 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:535:22:535:29 | req.data | user-provided value | +| srv/service1.js:546:16:546:20 | query | srv/service1.js:543:22:543:29 | req.data | srv/service1.js:546:16:546:20 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:543:22:543:29 | req.data | user-provided value | +| srv/service1.js:553:9:553:45 | tx.read ... " + id) | srv/service1.js:551:22:551:29 | req.data | srv/service1.js:553:34:553:44 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:551:22:551:29 | req.data | user-provided value | +| srv/service1.js:567:9:567:78 | tx.upda ... " + id) | srv/service1.js:565:30:565:37 | req.data | srv/service1.js:567:34:567:55 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:565:30:565:37 | req.data | user-provided value | +| srv/service1.js:567:9:567:78 | tx.upda ... " + id) | srv/service1.js:565:30:565:37 | req.data | srv/service1.js:567:64:567:77 | "col1 = " + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:565:30:565:37 | req.data | user-provided value | +| srv/service1.js:588:9:588:47 | tx.dele ... " + id) | srv/service1.js:586:22:586:29 | req.data | srv/service1.js:588:36:588:46 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:586:22:586:29 | req.data | user-provided value | +| srv/service1.js:597:16:597:20 | query | srv/service1.js:594:22:594:29 | req.data | srv/service1.js:597:16:597:20 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:594:22:594:29 | req.data | user-provided value | +| srv/service1.js:604:9:604:45 | tx.read ... " + id) | srv/service1.js:602:22:602:29 | req.data | srv/service1.js:604:34:604:44 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:602:22:602:29 | req.data | user-provided value | +| srv/service1.js:618:9:618:78 | tx.upda ... " + id) | srv/service1.js:616:30:616:37 | req.data | srv/service1.js:618:34:618:55 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:616:30:616:37 | req.data | user-provided value | +| srv/service1.js:618:9:618:78 | tx.upda ... " + id) | srv/service1.js:616:30:616:37 | req.data | srv/service1.js:618:64:618:77 | "col1 = " + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:616:30:616:37 | req.data | user-provided value | +| srv/service1.js:639:9:639:47 | tx.dele ... " + id) | srv/service1.js:637:22:637:29 | req.data | srv/service1.js:639:36:639:46 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:637:22:637:29 | req.data | user-provided value | +| srv/service1.js:647:18:647:22 | query | srv/service1.js:645:22:645:29 | req.data | srv/service1.js:647:18:647:22 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:645:22:645:29 | req.data | user-provided value | +| srv/service1.js:653:18:653:22 | query | srv/service1.js:651:22:651:29 | req.data | srv/service1.js:653:18:653:22 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:651:22:651:29 | req.data | user-provided value | +| srv/service1.js:659:18:659:22 | query | srv/service1.js:657:22:657:29 | req.data | srv/service1.js:659:18:659:22 | query | This CQL query contains a string concatenation with a $@. | srv/service1.js:657:22:657:29 | req.data | user-provided value | +| srv/service1.js:670:7:670:47 | cds.db. ... " + id) | srv/service1.js:669:22:669:29 | req.data | srv/service1.js:670:36:670:46 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:669:22:669:29 | req.data | user-provided value | +| srv/service1.js:675:7:675:47 | cds.db. ... ` + id) | srv/service1.js:674:22:674:29 | req.data | srv/service1.js:675:36:675:46 | `ID =` + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:674:22:674:29 | req.data | user-provided value | +| srv/service1.js:680:7:680:46 | cds.db. ... ${id}`) | srv/service1.js:679:22:679:29 | req.data | srv/service1.js:680:36:680:45 | `ID=${id}` | This CQL query contains a string concatenation with a $@. | srv/service1.js:679:22:679:29 | req.data | user-provided value | +| srv/service1.js:705:7:705:80 | cds.db. ... " + id) | srv/service1.js:704:30:704:37 | req.data | srv/service1.js:705:36:705:57 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:704:30:704:37 | req.data | user-provided value | +| srv/service1.js:705:7:705:80 | cds.db. ... " + id) | srv/service1.js:704:30:704:37 | req.data | srv/service1.js:705:66:705:79 | "col1 = " + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:704:30:704:37 | req.data | user-provided value | +| srv/service1.js:710:7:710:79 | cds.db. ... ` + id) | srv/service1.js:709:30:709:37 | req.data | srv/service1.js:710:36:710:57 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:709:30:709:37 | req.data | user-provided value | +| srv/service1.js:710:7:710:79 | cds.db. ... ` + id) | srv/service1.js:709:30:709:37 | req.data | srv/service1.js:710:66:710:78 | `col1 =` + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:709:30:709:37 | req.data | user-provided value | +| srv/service1.js:715:7:715:80 | cds.db. ... ${id}`) | srv/service1.js:714:30:714:37 | req.data | srv/service1.js:715:36:715:57 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:714:30:714:37 | req.data | user-provided value | +| srv/service1.js:715:7:715:80 | cds.db. ... ${id}`) | srv/service1.js:714:30:714:37 | req.data | srv/service1.js:715:66:715:79 | `col1 = ${id}` | This CQL query contains a string concatenation with a $@. | srv/service1.js:714:30:714:37 | req.data | user-provided value | +| srv/service1.js:720:7:720:78 | cds.db. ... ${id}` | srv/service1.js:719:30:719:37 | req.data | srv/service1.js:720:36:720:57 | "col1 = ... amount | This CQL query contains a string concatenation with a $@. | srv/service1.js:719:30:719:37 | req.data | user-provided value | +| srv/service1.js:755:7:755:49 | cds.db. ... " + id) | srv/service1.js:754:22:754:29 | req.data | srv/service1.js:755:38:755:48 | "ID =" + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:754:22:754:29 | req.data | user-provided value | +| srv/service1.js:760:7:760:49 | cds.db. ... ` + id) | srv/service1.js:759:22:759:29 | req.data | srv/service1.js:760:38:760:48 | `ID =` + id | This CQL query contains a string concatenation with a $@. | srv/service1.js:759:22:759:29 | req.data | user-provided value | +| srv/service1.js:765:7:765:50 | cds.db. ... ${id}`) | srv/service1.js:764:22:764:29 | req.data | srv/service1.js:765:38:765:49 | `ID = ${id}` | This CQL query contains a string concatenation with a $@. | srv/service1.js:764:22:764:29 | req.data | user-provided value | From 62f8815f4ec88257958302b3b588c6ff365b8f63 Mon Sep 17 00:00:00 2001 From: Jeongsoo Lee Date: Mon, 4 Aug 2025 12:15:03 -0400 Subject: [PATCH 11/13] Update expected results of model test `remoteflowsource` --- .../remoteflowsource.expected | 43 +++++++++++++------ 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/javascript/frameworks/cap/test/models/cds/remoteflowsources/remoteflowsource.expected b/javascript/frameworks/cap/test/models/cds/remoteflowsources/remoteflowsource.expected index dcc8f9d6..a3c84483 100644 --- a/javascript/frameworks/cap/test/models/cds/remoteflowsources/remoteflowsource.expected +++ b/javascript/frameworks/cap/test/models/cds/remoteflowsources/remoteflowsource.expected @@ -1,12 +1,31 @@ -| srv/service1.js:6:29:6:31 | req | -| srv/service2.js:5:27:5:29 | msg | -| srv/service3nocds.js:6:43:6:45 | req | -| srv/service3nocds.js:7:34:7:36 | req | -| srv/service3nocds.js:11:28:11:30 | req | -| srv/service3nocds.js:12:26:12:28 | req | -| srv/service3nocds.js:19:34:19:36 | req | -| srv/service4withcds.js:5:38:5:40 | req | -| srv/service4withcds.js:6:43:6:45 | req | -| srv/service4withcds.js:14:33:14:35 | req | -| srv/service4withcds.js:15:38:15:40 | req | -| srv/service4withcds.js:16:23:16:25 | req | +| srv/service1.js:7:33:7:40 | req.data | +| srv/service1.js:13:33:13:42 | req.params | +| srv/service1.js:19:29:19:39 | req.headers | +| srv/service1.js:25:30:25:56 | req.htt ... omeProp | +| srv/service1.js:26:30:26:55 | req.htt ... omeProp | +| srv/service1.js:27:30:27:57 | req.htt ... omeProp | +| srv/service1.js:28:30:28:58 | req.htt ... omeProp | +| srv/service1.js:29:30:29:58 | req.htt ... omeProp | +| srv/service1.js:30:30:30:53 | req.htt ... inalUrl | +| srv/service1.js:31:30:31:50 | req.htt ... ostname | +| srv/service1.js:32:30:32:57 | req.htt ... eProp") | +| srv/service1.js:33:30:33:56 | req.htt ... eProp") | +| srv/service1.js:34:31:34:61 | req.htt ... eProp") | +| srv/service1.js:35:31:35:60 | req.htt ... eProp") | +| srv/service1.js:41:29:41:34 | req.id | +| srv/service2.js:5:31:5:38 | msg.data | +| srv/service3.js:6:33:6:40 | req.data | +| srv/service3.js:12:33:12:42 | req.params | +| srv/service3.js:18:29:18:39 | req.headers | +| srv/service3.js:24:30:24:56 | req.htt ... omeProp | +| srv/service3.js:25:30:25:55 | req.htt ... omeProp | +| srv/service3.js:26:30:26:57 | req.htt ... omeProp | +| srv/service3.js:27:30:27:58 | req.htt ... omeProp | +| srv/service3.js:28:30:28:58 | req.htt ... omeProp | +| srv/service3.js:29:30:29:53 | req.htt ... inalUrl | +| srv/service3.js:30:30:30:50 | req.htt ... ostname | +| srv/service3.js:31:30:31:57 | req.htt ... eProp") | +| srv/service3.js:32:30:32:56 | req.htt ... eProp") | +| srv/service3.js:33:31:33:61 | req.htt ... eProp") | +| srv/service3.js:34:31:34:60 | req.htt ... eProp") | +| srv/service3.js:40:29:40:34 | req.id | From 71ada992c395e111724446310646dcc5d06ddd50 Mon Sep 17 00:00:00 2001 From: Jeongsoo Lee Date: Mon, 4 Aug 2025 12:24:57 -0400 Subject: [PATCH 12/13] Update server.js and check in expected results of `ExposedServices` - `server.js` had a reference to a service that doesn't exist. Made it point to Service1 instead. - Create expected results of `ExposedServices`, a complementary test to `RemoteFlowSource`. --- .../ExposedServices.expected | 20 +++++++++++++++++++ .../models/cds/remoteflowsources/server.js | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 javascript/frameworks/cap/test/models/cds/remoteflowsources/ExposedServices.expected diff --git a/javascript/frameworks/cap/test/models/cds/remoteflowsources/ExposedServices.expected b/javascript/frameworks/cap/test/models/cds/remoteflowsources/ExposedServices.expected new file mode 100644 index 00000000..5007cbc1 --- /dev/null +++ b/javascript/frameworks/cap/test/models/cds/remoteflowsources/ExposedServices.expected @@ -0,0 +1,20 @@ +| server.js:7:32:7:34 | req | +| srv/service1.js:6:29:6:31 | req | +| srv/service1.js:12:29:12:31 | req | +| srv/service1.js:18:29:18:31 | req | +| srv/service1.js:24:29:24:31 | req | +| srv/service1.js:40:29:40:31 | req | +| srv/service1.js:46:29:46:31 | req | +| srv/service1.js:52:29:52:31 | req | +| srv/service1.js:58:29:58:31 | req | +| srv/service1.js:64:29:64:31 | req | +| srv/service2.js:4:27:4:29 | msg | +| srv/service3.js:5:29:5:31 | req | +| srv/service3.js:11:29:11:31 | req | +| srv/service3.js:17:29:17:31 | req | +| srv/service3.js:23:29:23:31 | req | +| srv/service3.js:39:29:39:31 | req | +| srv/service3.js:45:29:45:31 | req | +| srv/service3.js:51:29:51:31 | req | +| srv/service3.js:57:29:57:31 | req | +| srv/service3.js:63:29:63:31 | req | diff --git a/javascript/frameworks/cap/test/models/cds/remoteflowsources/server.js b/javascript/frameworks/cap/test/models/cds/remoteflowsources/server.js index c723dae1..6832dbb1 100644 --- a/javascript/frameworks/cap/test/models/cds/remoteflowsources/server.js +++ b/javascript/frameworks/cap/test/models/cds/remoteflowsources/server.js @@ -3,6 +3,6 @@ const app = require("express")(); cds.serve("all").in(app); -cds.serve('./some-service').with((srv) => { +cds.serve('Service1').with((srv) => { srv.before('READ', 'Books', (req) => req.reply([])) // SAFE: Exposed service (fallback), but not a taint source }) \ No newline at end of file From f1bc052fe1452be6a5232e080923c4479a4fa99f Mon Sep 17 00:00:00 2001 From: Jeongsoo Lee Date: Mon, 4 Aug 2025 13:41:11 -0400 Subject: [PATCH 13/13] Update expected results of impacted queries The results from query predicates changed a little from altering the definition of `RemoteFlowSource` to the property reads of the parameter, not the parameter itself. --- ...njection-with-service1-protocol-none.expected | 10 +++------- ...njection-with-service2-protocol-none.expected | 10 +++------- .../log-injection-without-protocol-none.expected | 16 ++++++---------- 3 files changed, 12 insertions(+), 24 deletions(-) diff --git a/javascript/frameworks/cap/test/queries/loginjection/log-injection-with-service1-protocol-none/log-injection-with-service1-protocol-none.expected b/javascript/frameworks/cap/test/queries/loginjection/log-injection-with-service1-protocol-none/log-injection-with-service1-protocol-none.expected index 1be03ae2..873e22d2 100644 --- a/javascript/frameworks/cap/test/queries/loginjection/log-injection-with-service1-protocol-none/log-injection-with-service1-protocol-none.expected +++ b/javascript/frameworks/cap/test/queries/loginjection/log-injection-with-service1-protocol-none/log-injection-with-service1-protocol-none.expected @@ -2,23 +2,19 @@ WARNING: module 'PathGraph' has been deprecated and may be removed in future (Lo WARNING: type 'PathNode' has been deprecated and may be removed in future (LogInjection.ql:18,43-61) WARNING: type 'PathNode' has been deprecated and may be removed in future (LogInjection.ql:18,70-88) nodes -| srv/service2.js:6:29:6:31 | msg | -| srv/service2.js:6:29:6:31 | msg | | srv/service2.js:7:15:7:31 | { messageToPass } | | srv/service2.js:7:15:7:42 | messageToPass | | srv/service2.js:7:17:7:29 | messageToPass | -| srv/service2.js:7:35:7:37 | msg | +| srv/service2.js:7:35:7:42 | msg.data | | srv/service2.js:7:35:7:42 | msg.data | | srv/service2.js:9:32:9:44 | messageToPass | | srv/service2.js:9:32:9:44 | messageToPass | edges -| srv/service2.js:6:29:6:31 | msg | srv/service2.js:7:35:7:37 | msg | -| srv/service2.js:6:29:6:31 | msg | srv/service2.js:7:35:7:37 | msg | | srv/service2.js:7:15:7:31 | { messageToPass } | srv/service2.js:7:17:7:29 | messageToPass | | srv/service2.js:7:15:7:42 | messageToPass | srv/service2.js:9:32:9:44 | messageToPass | | srv/service2.js:7:15:7:42 | messageToPass | srv/service2.js:9:32:9:44 | messageToPass | | srv/service2.js:7:17:7:29 | messageToPass | srv/service2.js:7:15:7:42 | messageToPass | -| srv/service2.js:7:35:7:37 | msg | srv/service2.js:7:35:7:42 | msg.data | +| srv/service2.js:7:35:7:42 | msg.data | srv/service2.js:7:15:7:31 | { messageToPass } | | srv/service2.js:7:35:7:42 | msg.data | srv/service2.js:7:15:7:31 | { messageToPass } | #select -| srv/service2.js:9:32:9:44 | messageToPass | srv/service2.js:6:29:6:31 | msg | srv/service2.js:9:32:9:44 | messageToPass | Log entry depends on a $@. | srv/service2.js:6:29:6:31 | msg | user-provided value | +| srv/service2.js:9:32:9:44 | messageToPass | srv/service2.js:7:35:7:42 | msg.data | srv/service2.js:9:32:9:44 | messageToPass | Log entry depends on a $@. | srv/service2.js:7:35:7:42 | msg.data | user-provided value | diff --git a/javascript/frameworks/cap/test/queries/loginjection/log-injection-with-service2-protocol-none/log-injection-with-service2-protocol-none.expected b/javascript/frameworks/cap/test/queries/loginjection/log-injection-with-service2-protocol-none/log-injection-with-service2-protocol-none.expected index aafdc325..48a59b3d 100644 --- a/javascript/frameworks/cap/test/queries/loginjection/log-injection-with-service2-protocol-none/log-injection-with-service2-protocol-none.expected +++ b/javascript/frameworks/cap/test/queries/loginjection/log-injection-with-service2-protocol-none/log-injection-with-service2-protocol-none.expected @@ -2,12 +2,10 @@ WARNING: module 'PathGraph' has been deprecated and may be removed in future (Lo WARNING: type 'PathNode' has been deprecated and may be removed in future (LogInjection.ql:18,43-61) WARNING: type 'PathNode' has been deprecated and may be removed in future (LogInjection.ql:18,70-88) nodes -| srv/service1.js:6:33:6:35 | req | -| srv/service1.js:6:33:6:35 | req | | srv/service1.js:7:19:7:35 | { messageToPass } | | srv/service1.js:7:19:7:46 | messageToPass | | srv/service1.js:7:21:7:33 | messageToPass | -| srv/service1.js:7:39:7:41 | req | +| srv/service1.js:7:39:7:46 | req.data | | srv/service1.js:7:39:7:46 | req.data | | srv/service1.js:9:36:9:52 | { messageToPass } | | srv/service1.js:9:38:9:50 | messageToPass | @@ -20,12 +18,10 @@ nodes | srv/service2.js:9:32:9:44 | messageToPass | | srv/service2.js:9:32:9:44 | messageToPass | edges -| srv/service1.js:6:33:6:35 | req | srv/service1.js:7:39:7:41 | req | -| srv/service1.js:6:33:6:35 | req | srv/service1.js:7:39:7:41 | req | | srv/service1.js:7:19:7:35 | { messageToPass } | srv/service1.js:7:21:7:33 | messageToPass | | srv/service1.js:7:19:7:46 | messageToPass | srv/service1.js:9:38:9:50 | messageToPass | | srv/service1.js:7:21:7:33 | messageToPass | srv/service1.js:7:19:7:46 | messageToPass | -| srv/service1.js:7:39:7:41 | req | srv/service1.js:7:39:7:46 | req.data | +| srv/service1.js:7:39:7:46 | req.data | srv/service1.js:7:19:7:35 | { messageToPass } | | srv/service1.js:7:39:7:46 | req.data | srv/service1.js:7:19:7:35 | { messageToPass } | | srv/service1.js:9:36:9:52 | { messageToPass } | srv/service2.js:6:29:6:31 | msg | | srv/service1.js:9:38:9:50 | messageToPass | srv/service1.js:9:36:9:52 | { messageToPass } | @@ -37,4 +33,4 @@ edges | srv/service2.js:7:35:7:37 | msg | srv/service2.js:7:35:7:42 | msg.data | | srv/service2.js:7:35:7:42 | msg.data | srv/service2.js:7:15:7:31 | { messageToPass } | #select -| srv/service2.js:9:32:9:44 | messageToPass | srv/service1.js:6:33:6:35 | req | srv/service2.js:9:32:9:44 | messageToPass | Log entry depends on a $@. | srv/service1.js:6:33:6:35 | req | user-provided value | +| srv/service2.js:9:32:9:44 | messageToPass | srv/service1.js:7:39:7:46 | req.data | srv/service2.js:9:32:9:44 | messageToPass | Log entry depends on a $@. | srv/service1.js:7:39:7:46 | req.data | user-provided value | diff --git a/javascript/frameworks/cap/test/queries/loginjection/log-injection-without-protocol-none/log-injection-without-protocol-none.expected b/javascript/frameworks/cap/test/queries/loginjection/log-injection-without-protocol-none/log-injection-without-protocol-none.expected index 2ae4613b..0a299528 100644 --- a/javascript/frameworks/cap/test/queries/loginjection/log-injection-without-protocol-none/log-injection-without-protocol-none.expected +++ b/javascript/frameworks/cap/test/queries/loginjection/log-injection-without-protocol-none/log-injection-without-protocol-none.expected @@ -2,42 +2,38 @@ WARNING: module 'PathGraph' has been deprecated and may be removed in future (Lo WARNING: type 'PathNode' has been deprecated and may be removed in future (LogInjection.ql:18,43-61) WARNING: type 'PathNode' has been deprecated and may be removed in future (LogInjection.ql:18,70-88) nodes -| srv/service1.js:6:33:6:35 | req | -| srv/service1.js:6:33:6:35 | req | | srv/service1.js:7:19:7:35 | { messageToPass } | | srv/service1.js:7:19:7:46 | messageToPass | | srv/service1.js:7:21:7:33 | messageToPass | -| srv/service1.js:7:39:7:41 | req | +| srv/service1.js:7:39:7:46 | req.data | | srv/service1.js:7:39:7:46 | req.data | | srv/service1.js:9:36:9:52 | { messageToPass } | | srv/service1.js:9:38:9:50 | messageToPass | | srv/service2.js:6:29:6:31 | msg | -| srv/service2.js:6:29:6:31 | msg | | srv/service2.js:7:15:7:31 | { messageToPass } | | srv/service2.js:7:15:7:42 | messageToPass | | srv/service2.js:7:17:7:29 | messageToPass | | srv/service2.js:7:35:7:37 | msg | | srv/service2.js:7:35:7:42 | msg.data | +| srv/service2.js:7:35:7:42 | msg.data | | srv/service2.js:9:32:9:44 | messageToPass | | srv/service2.js:9:32:9:44 | messageToPass | edges -| srv/service1.js:6:33:6:35 | req | srv/service1.js:7:39:7:41 | req | -| srv/service1.js:6:33:6:35 | req | srv/service1.js:7:39:7:41 | req | | srv/service1.js:7:19:7:35 | { messageToPass } | srv/service1.js:7:21:7:33 | messageToPass | | srv/service1.js:7:19:7:46 | messageToPass | srv/service1.js:9:38:9:50 | messageToPass | | srv/service1.js:7:21:7:33 | messageToPass | srv/service1.js:7:19:7:46 | messageToPass | -| srv/service1.js:7:39:7:41 | req | srv/service1.js:7:39:7:46 | req.data | +| srv/service1.js:7:39:7:46 | req.data | srv/service1.js:7:19:7:35 | { messageToPass } | | srv/service1.js:7:39:7:46 | req.data | srv/service1.js:7:19:7:35 | { messageToPass } | | srv/service1.js:9:36:9:52 | { messageToPass } | srv/service2.js:6:29:6:31 | msg | | srv/service1.js:9:38:9:50 | messageToPass | srv/service1.js:9:36:9:52 | { messageToPass } | | srv/service2.js:6:29:6:31 | msg | srv/service2.js:7:35:7:37 | msg | -| srv/service2.js:6:29:6:31 | msg | srv/service2.js:7:35:7:37 | msg | | srv/service2.js:7:15:7:31 | { messageToPass } | srv/service2.js:7:17:7:29 | messageToPass | | srv/service2.js:7:15:7:42 | messageToPass | srv/service2.js:9:32:9:44 | messageToPass | | srv/service2.js:7:15:7:42 | messageToPass | srv/service2.js:9:32:9:44 | messageToPass | | srv/service2.js:7:17:7:29 | messageToPass | srv/service2.js:7:15:7:42 | messageToPass | | srv/service2.js:7:35:7:37 | msg | srv/service2.js:7:35:7:42 | msg.data | | srv/service2.js:7:35:7:42 | msg.data | srv/service2.js:7:15:7:31 | { messageToPass } | +| srv/service2.js:7:35:7:42 | msg.data | srv/service2.js:7:15:7:31 | { messageToPass } | #select -| srv/service2.js:9:32:9:44 | messageToPass | srv/service1.js:6:33:6:35 | req | srv/service2.js:9:32:9:44 | messageToPass | Log entry depends on a $@. | srv/service1.js:6:33:6:35 | req | user-provided value | -| srv/service2.js:9:32:9:44 | messageToPass | srv/service2.js:6:29:6:31 | msg | srv/service2.js:9:32:9:44 | messageToPass | Log entry depends on a $@. | srv/service2.js:6:29:6:31 | msg | user-provided value | +| srv/service2.js:9:32:9:44 | messageToPass | srv/service1.js:7:39:7:46 | req.data | srv/service2.js:9:32:9:44 | messageToPass | Log entry depends on a $@. | srv/service1.js:7:39:7:46 | req.data | user-provided value | +| srv/service2.js:9:32:9:44 | messageToPass | srv/service2.js:7:35:7:42 | msg.data | srv/service2.js:9:32:9:44 | messageToPass | Log entry depends on a $@. | srv/service2.js:7:35:7:42 | msg.data | user-provided value |