From e6f47a3d385dc43af1883787d9b229525a652de4 Mon Sep 17 00:00:00 2001 From: Kristen Newbury Date: Fri, 15 Aug 2025 13:18:38 -0400 Subject: [PATCH 1/7] Begin dataflow lib upgrade generic portions --- .../frameworks/cap/CAPCqlInjectionQuery.qll | 12 +- .../cap/src/cqlinjection/CqlInjection.ql | 9 +- .../sensitive-exposure/SensitiveExposure.ql | 19 +- .../cqlinjection/cqlinjection.expected | 2306 +++++++---------- 4 files changed, 929 insertions(+), 1417 deletions(-) diff --git a/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/CAPCqlInjectionQuery.qll b/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/CAPCqlInjectionQuery.qll index da34798ee..b8e3c4fd7 100644 --- a/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/CAPCqlInjectionQuery.qll +++ b/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/CAPCqlInjectionQuery.qll @@ -166,16 +166,14 @@ class CqlClauseParserCallWithStringConcat instanceof CqlClauseParserCall { * instead (notice the lack of parentheses around the template literal), then the `where` call * becomes a parser call of the template literal following it and thus acts as a sanitizer. */ -class CqlInjectionConfiguration extends TaintTracking::Configuration { - CqlInjectionConfiguration() { this = "CQL injection from untrusted data" } +module CqlInjectionConfiguration implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node node) { node instanceof RemoteFlowSource } - override predicate isSource(DataFlow::Node node) { node instanceof RemoteFlowSource } + predicate isSink(DataFlow::Node node) { node instanceof CqlInjectionSink } - override predicate isSink(DataFlow::Node node) { node instanceof CqlInjectionSink } + predicate isBarrier(DataFlow::Node node) { node instanceof SqlInjection::Sanitizer } - override predicate isSanitizer(DataFlow::Node node) { node instanceof SqlInjection::Sanitizer } - - override predicate isAdditionalTaintStep(DataFlow::Node start, DataFlow::Node end) { + predicate isAdditionalFlowStep(DataFlow::Node start, DataFlow::Node end) { /* * 1. Given a call to a CQL parser, jump from the argument to the parser call itself. */ diff --git a/javascript/frameworks/cap/src/cqlinjection/CqlInjection.ql b/javascript/frameworks/cap/src/cqlinjection/CqlInjection.ql index 708451ab5..d2642f8b2 100644 --- a/javascript/frameworks/cap/src/cqlinjection/CqlInjection.ql +++ b/javascript/frameworks/cap/src/cqlinjection/CqlInjection.ql @@ -11,11 +11,14 @@ */ import javascript -import DataFlow::PathGraph import advanced_security.javascript.frameworks.cap.CAPCqlInjectionQuery -from CqlInjectionConfiguration sql, DataFlow::PathNode source, DataFlow::PathNode sink -where sql.hasFlowPath(source, sink) +module CqlInjectionConfigurationFlow = TaintTracking::Global; + +import CqlInjectionConfigurationFlow::PathGraph + +from CqlInjectionConfigurationFlow::PathNode source, CqlInjectionConfigurationFlow::PathNode sink +where CqlInjectionConfigurationFlow::flowPath(source, sink) select sink.getNode().(CqlInjectionSink).getQuery(), source, sink, "This CQL query contains a string concatenation with a $@.", source.getNode(), "user-provided value" diff --git a/javascript/frameworks/cap/src/sensitive-exposure/SensitiveExposure.ql b/javascript/frameworks/cap/src/sensitive-exposure/SensitiveExposure.ql index 7b9c04c61..5601f103b 100644 --- a/javascript/frameworks/cap/src/sensitive-exposure/SensitiveExposure.ql +++ b/javascript/frameworks/cap/src/sensitive-exposure/SensitiveExposure.ql @@ -14,7 +14,6 @@ import javascript import advanced_security.javascript.frameworks.cap.CDS import advanced_security.javascript.frameworks.cap.CAPLogInjectionQuery -import DataFlow::PathGraph EntityReferenceFromEntities entityAccesses(string entityNamespace) { entityNamespace = result.getEntitiesCallNamespace() @@ -40,18 +39,18 @@ class SensitiveExposureFieldSource instanceof PropRead { string toString() { result = super.toString() } } -class SensitiveLogExposureConfig extends TaintTracking::Configuration { - SensitiveLogExposureConfig() { this = "SensitiveLogExposure" } +module SensitiveLogExposureConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof SensitiveExposureFieldSource } - override predicate isSource(DataFlow::Node source) { - source instanceof SensitiveExposureFieldSource - } - - override predicate isSink(DataFlow::Node sink) { sink instanceof CdsLogSink } + predicate isSink(DataFlow::Node sink) { sink instanceof CdsLogSink } } -from SensitiveLogExposureConfig config, DataFlow::PathNode source, DataFlow::PathNode sink -where config.hasFlowPath(source, sink) +module SensitiveLogExposureConfigFlow = TaintTracking::Global; + +import SensitiveLogExposureConfigFlow::PathGraph + +from SensitiveLogExposureConfigFlow::PathNode source, SensitiveLogExposureConfigFlow::PathNode sink +where SensitiveLogExposureConfigFlow::flowPath(source, sink) select sink, source, sink, "Log entry depends on the $@ field which is annotated as potentially sensitive.", source.getNode().(SensitiveExposureFieldSource).getCdsField(), diff --git a/javascript/frameworks/cap/test/queries/cqlinjection/cqlinjection.expected b/javascript/frameworks/cap/test/queries/cqlinjection/cqlinjection.expected index b70e84db2..c57d5a83b 100644 --- a/javascript/frameworks/cap/test/queries/cqlinjection/cqlinjection.expected +++ b/javascript/frameworks/cap/test/queries/cqlinjection/cqlinjection.expected @@ -1,1401 +1,913 @@ -WARNING: module 'PathGraph' has been deprecated and may be removed in future (CqlInjection.ql:14,8-27) -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: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: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) | -| srv/service1.js:14:48:14:57 | "ID=" + id | -| 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: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: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) | -| srv/service1.js:20:48:20:57 | `ID=` + id | -| 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: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: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}`) | -| srv/service1.js:26:48:26:57 | `ID=${id}` | -| 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: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: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: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: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: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: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: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: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 | -| srv/service1.js:73:49:73:54 | amount | -| 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: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: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 | -| srv/service1.js:78:49:78:54 | amount | -| 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: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: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 | -| srv/service1.js:83:49:83:54 | amount | -| 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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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) | -| srv/service1.js:187:13:187:87 | UPDATE. ... " + id) | -| srv/service1.js:187:47:187:67 | "col1 = ... " + id | -| 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: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: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) | -| srv/service1.js:193:13:193:87 | UPDATE. ... ` + id) | -| srv/service1.js:193:47:193:67 | "col1 = ... " + id | -| 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: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: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}`) | -| srv/service1.js:199:13:199:88 | UPDATE. ... ${id}`) | -| srv/service1.js:199:47:199:67 | "col1 = ... " + id | -| 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: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: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: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: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: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: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: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: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: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: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) | -| srv/service1.js:253:55:253:64 | "ID=" + id | -| 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: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: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: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: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 | -| srv/service1.js:269:57:269:62 | amount | -| 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: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: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: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: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) | -| srv/service1.js:291:55:291:64 | "ID=" + id | -| 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: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: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: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: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 | -| srv/service1.js:310:61:310:66 | amount | -| 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: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: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: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: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) | -| srv/service1.js:335:28:335:73 | "SELECT ... =" + id | -| 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: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: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) | -| srv/service1.js:342:28:342:73 | `SELECT ... =` + id | -| 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: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: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}`) | -| srv/service1.js:349:28:349:74 | `SELECT ... ${id}` | -| 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: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: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) | -| srv/service1.js:363:35:363:73 | "SELECT ... =" + id | -| 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: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: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) | -| srv/service1.js:369:35:369:73 | `SELECT ... =` + id | -| 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: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: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}`) | -| srv/service1.js:375:35:375:74 | `SELECT ... ${id}` | -| 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: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: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) | -| srv/service1.js:388:25:388:63 | "SELECT ... =" + id | -| 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: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: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) | -| srv/service1.js:394:25:394:63 | `SELECT ... =` + id | -| 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: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: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}`) | -| srv/service1.js:400:25:400:64 | `SELECT ... ${id}` | -| 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: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: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: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: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: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: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: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: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) | -| srv/service1.js:436:55:436:64 | "ID=" + id | -| 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: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: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: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: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 | -| srv/service1.js:462:57:462:62 | amount | -| 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: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: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: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: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) | -| srv/service1.js:493:55:493:64 | "ID=" + id | -| 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: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: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: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: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 | -| srv/service1.js:516:57:516:62 | amount | -| 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: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: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: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: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) | -| srv/service1.js:544:48:544:57 | "ID=" + id | -| 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: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: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: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: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 | -| srv/service1.js:567:50:567:55 | amount | -| 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: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: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: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: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) | -| srv/service1.js:595:48:595:57 | "ID=" + id | -| 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: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: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: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: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 | -| srv/service1.js:618:50:618:55 | amount | -| 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: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: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: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: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) | -| srv/service1.js:646:48:646:57 | "ID=" + id | -| 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: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: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) | -| srv/service1.js:652:48:652:57 | `ID=` + id | -| 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: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: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}`) | -| srv/service1.js:658:48:658:57 | `ID=${id}` | -| 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: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: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: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: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: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: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: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: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 | -| srv/service1.js:705:52:705:57 | amount | -| 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: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: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 | -| srv/service1.js:710:52:710:57 | amount | -| 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: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: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 | -| srv/service1.js:715:52:715:57 | amount | -| 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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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) | -| srv/service1.js:187:47:187:67 | "col1 = ... " + id | srv/service1.js:187:13:187:87 | UPDATE. ... " + id) | -| 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: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: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) | -| srv/service1.js:193:47:193:67 | "col1 = ... " + id | srv/service1.js:193:13:193:87 | UPDATE. ... ` + id) | -| 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: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: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}`) | -| srv/service1.js:199:47:199:67 | "col1 = ... " + id | srv/service1.js:199:13:199:88 | UPDATE. ... ${id}`) | -| 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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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}` | +| srv/service1.js:13:13:13:18 | { id } | srv/service1.js:13:13:13:29 | id | provenance | | +| srv/service1.js:13:13:13:29 | id | srv/service1.js:14:56:14:57 | id | provenance | | +| srv/service1.js:13:22:13:29 | req.data | srv/service1.js:13:13:13:18 | { id } | provenance | | +| srv/service1.js:14:13:14:58 | query | srv/service1.js:15:15:15:19 | query | provenance | | +| srv/service1.js:14:21:14:58 | SELECT. ... " + id) | srv/service1.js:14:13:14:58 | query | provenance | | +| srv/service1.js:14:48:14:57 | "ID=" + id | srv/service1.js:14:21:14:58 | SELECT. ... " + id) | provenance | Config | +| srv/service1.js:14:56:14:57 | id | srv/service1.js:14:48:14:57 | "ID=" + id | provenance | | +| srv/service1.js:19:13:19:18 | { id } | srv/service1.js:19:13:19:29 | id | provenance | | +| srv/service1.js:19:13:19:29 | id | srv/service1.js:20:56:20:57 | id | provenance | | +| srv/service1.js:19:22:19:29 | req.data | srv/service1.js:19:13:19:18 | { id } | provenance | | +| srv/service1.js:20:13:20:58 | query | srv/service1.js:21:15:21:19 | query | provenance | | +| srv/service1.js:20:21:20:58 | SELECT. ... ` + id) | srv/service1.js:20:13:20:58 | query | provenance | | +| srv/service1.js:20:48:20:57 | `ID=` + id | srv/service1.js:20:21:20:58 | SELECT. ... ` + id) | provenance | Config | +| srv/service1.js:20:56:20:57 | id | srv/service1.js:20:48:20:57 | `ID=` + id | provenance | | +| srv/service1.js:25:13:25:18 | { id } | srv/service1.js:25:13:25:29 | id | provenance | | +| srv/service1.js:25:13:25:29 | id | srv/service1.js:26:54:26:55 | id | provenance | | +| srv/service1.js:25:22:25:29 | req.data | srv/service1.js:25:13:25:18 | { id } | provenance | | +| srv/service1.js:26:13:26:58 | query | srv/service1.js:27:15:27:19 | query | provenance | | +| srv/service1.js:26:21:26:58 | SELECT. ... ${id}`) | srv/service1.js:26:13:26:58 | query | provenance | | +| srv/service1.js:26:48:26:57 | `ID=${id}` | srv/service1.js:26:21:26:58 | SELECT. ... ${id}`) | provenance | Config | +| srv/service1.js:26:54:26:55 | id | srv/service1.js:26:48:26:57 | `ID=${id}` | provenance | | +| srv/service1.js:37:13:37:18 | { id } | srv/service1.js:37:13:37:29 | id | provenance | | +| srv/service1.js:37:13:37:29 | id | srv/service1.js:38:42:38:43 | id | provenance | | +| srv/service1.js:37:22:37:29 | req.data | srv/service1.js:37:13:37:18 | { id } | provenance | | +| srv/service1.js:38:42:38:43 | id | srv/service1.js:38:33:38:43 | "ID =" + id | provenance | | +| srv/service1.js:42:13:42:18 | { id } | srv/service1.js:42:13:42:29 | id | provenance | | +| srv/service1.js:42:13:42:29 | id | srv/service1.js:43:42:43:43 | id | provenance | | +| srv/service1.js:42:22:42:29 | req.data | srv/service1.js:42:13:42:18 | { id } | provenance | | +| srv/service1.js:43:42:43:43 | id | srv/service1.js:43:33:43:43 | `ID =` + id | provenance | | +| srv/service1.js:47:13:47:18 | { id } | srv/service1.js:47:13:47:29 | id | provenance | | +| srv/service1.js:47:13:47:29 | id | srv/service1.js:48:39:48:40 | id | provenance | | +| srv/service1.js:47:22:47:29 | req.data | srv/service1.js:47:13:47:18 | { id } | provenance | | +| srv/service1.js:48:39:48:40 | id | srv/service1.js:48:33:48:42 | `ID=${id}` | provenance | | +| srv/service1.js:72:13:72:26 | { id, amount } | srv/service1.js:72:13:72:37 | amount | provenance | | +| srv/service1.js:72:13:72:26 | { id, amount } | srv/service1.js:72:13:72:37 | id | provenance | | +| srv/service1.js:72:13:72:37 | amount | srv/service1.js:73:49:73:54 | amount | provenance | | +| srv/service1.js:72:13:72:37 | id | srv/service1.js:73:75:73:76 | id | provenance | | +| srv/service1.js:72:30:72:37 | req.data | srv/service1.js:72:13:72:26 | { id, amount } | provenance | | +| srv/service1.js:73:49:73:54 | amount | srv/service1.js:73:33:73:54 | "col1 = ... amount | provenance | | +| srv/service1.js:73:75:73:76 | id | srv/service1.js:73:63:73:76 | "col1 = " + id | provenance | | +| srv/service1.js:77:13:77:26 | { id, amount } | srv/service1.js:77:13:77:37 | amount | provenance | | +| srv/service1.js:77:13:77:26 | { id, amount } | srv/service1.js:77:13:77:37 | id | provenance | | +| srv/service1.js:77:13:77:37 | amount | srv/service1.js:78:49:78:54 | amount | provenance | | +| srv/service1.js:77:13:77:37 | id | srv/service1.js:78:75:78:76 | id | provenance | | +| srv/service1.js:77:30:77:37 | req.data | srv/service1.js:77:13:77:26 | { id, amount } | provenance | | +| srv/service1.js:78:49:78:54 | amount | srv/service1.js:78:33:78:54 | "col1 = ... amount | provenance | | +| srv/service1.js:78:75:78:76 | id | srv/service1.js:78:63:78:76 | `col1 = ` + id | provenance | | +| srv/service1.js:82:13:82:26 | { id, amount } | srv/service1.js:82:13:82:37 | amount | provenance | | +| srv/service1.js:82:13:82:26 | { id, amount } | srv/service1.js:82:13:82:37 | id | provenance | | +| srv/service1.js:82:13:82:37 | amount | srv/service1.js:83:49:83:54 | amount | provenance | | +| srv/service1.js:82:13:82:37 | id | srv/service1.js:83:73:83:74 | id | provenance | | +| srv/service1.js:82:30:82:37 | req.data | srv/service1.js:82:13:82:26 | { id, amount } | provenance | | +| srv/service1.js:83:49:83:54 | amount | srv/service1.js:83:33:83:54 | "col1 = ... amount | provenance | | +| srv/service1.js:83:73:83:74 | id | srv/service1.js:83:63:83:76 | `col1 = ${id}` | provenance | | +| srv/service1.js:87:13:87:26 | { id, amount } | srv/service1.js:87:13:87:37 | amount | provenance | | +| srv/service1.js:87:13:87:37 | amount | srv/service1.js:88:49:88:54 | amount | provenance | | +| srv/service1.js:87:30:87:37 | req.data | srv/service1.js:87:13:87:26 | { id, amount } | provenance | | +| srv/service1.js:88:49:88:54 | amount | srv/service1.js:88:33:88:54 | "col1 = ... amount | provenance | | +| srv/service1.js:122:13:122:18 | { id } | srv/service1.js:122:13:122:29 | id | provenance | | +| srv/service1.js:122:13:122:29 | id | srv/service1.js:123:44:123:45 | id | provenance | | +| srv/service1.js:122:22:122:29 | req.data | srv/service1.js:122:13:122:18 | { id } | provenance | | +| srv/service1.js:123:44:123:45 | id | srv/service1.js:123:35:123:45 | "ID =" + id | provenance | | +| srv/service1.js:127:13:127:18 | { id } | srv/service1.js:127:13:127:29 | id | provenance | | +| srv/service1.js:127:13:127:29 | id | srv/service1.js:128:44:128:45 | id | provenance | | +| srv/service1.js:127:22:127:29 | req.data | srv/service1.js:127:13:127:18 | { id } | provenance | | +| srv/service1.js:128:44:128:45 | id | srv/service1.js:128:35:128:45 | `ID =` + id | provenance | | +| srv/service1.js:132:13:132:18 | { id } | srv/service1.js:132:13:132:29 | id | provenance | | +| srv/service1.js:132:13:132:29 | id | srv/service1.js:133:43:133:44 | id | provenance | | +| srv/service1.js:132:22:132:29 | req.data | srv/service1.js:132:13:132:18 | { id } | provenance | | +| srv/service1.js:133:43:133:44 | id | srv/service1.js:133:35:133:46 | `ID = ${id}` | provenance | | +| srv/service1.js:143:13:143:18 | { id } | srv/service1.js:143:13:143:29 | id | provenance | | +| srv/service1.js:143:13:143:29 | id | srv/service1.js:145:55:145:56 | id | provenance | | +| srv/service1.js:143:22:143:29 | req.data | srv/service1.js:143:13:143:18 | { id } | provenance | | +| srv/service1.js:145:13:145:57 | SELECT. ... " + id) | srv/service1.js:145:7:145:57 | await S ... " + id) | provenance | | +| srv/service1.js:145:47:145:56 | "ID=" + id | srv/service1.js:145:13:145:57 | SELECT. ... " + id) | provenance | Config | +| srv/service1.js:145:55:145:56 | id | srv/service1.js:145:47:145:56 | "ID=" + id | provenance | | +| srv/service1.js:149:13:149:18 | { id } | srv/service1.js:149:13:149:29 | id | provenance | | +| srv/service1.js:149:13:149:29 | id | srv/service1.js:151:55:151:56 | id | provenance | | +| srv/service1.js:149:22:149:29 | req.data | srv/service1.js:149:13:149:18 | { id } | provenance | | +| srv/service1.js:151:13:151:57 | SELECT. ... ` + id) | srv/service1.js:151:7:151:57 | await S ... ` + id) | provenance | | +| srv/service1.js:151:47:151:56 | `ID=` + id | srv/service1.js:151:13:151:57 | SELECT. ... ` + id) | provenance | Config | +| srv/service1.js:151:55:151:56 | id | srv/service1.js:151:47:151:56 | `ID=` + id | provenance | | +| srv/service1.js:155:13:155:18 | { id } | srv/service1.js:155:13:155:29 | id | provenance | | +| srv/service1.js:155:13:155:29 | id | srv/service1.js:157:53:157:54 | id | provenance | | +| srv/service1.js:155:22:155:29 | req.data | srv/service1.js:155:13:155:18 | { id } | provenance | | +| srv/service1.js:157:13:157:57 | SELECT. ... ${id}`) | srv/service1.js:157:7:157:57 | await S ... ${id}`) | provenance | | +| srv/service1.js:157:47:157:56 | `ID=${id}` | srv/service1.js:157:13:157:57 | SELECT. ... ${id}`) | provenance | Config | +| srv/service1.js:157:53:157:54 | id | srv/service1.js:157:47:157:56 | `ID=${id}` | provenance | | +| srv/service1.js:185:13:185:18 | { id } | srv/service1.js:185:13:185:29 | id | provenance | | +| srv/service1.js:185:13:185:29 | id | srv/service1.js:187:66:187:67 | id | provenance | | +| srv/service1.js:185:13:185:29 | id | srv/service1.js:187:85:187:86 | id | provenance | | +| srv/service1.js:185:22:185:29 | req.data | srv/service1.js:185:13:185:18 | { id } | provenance | | +| srv/service1.js:187:13:187:87 | UPDATE. ... " + id) | srv/service1.js:187:7:187:87 | await U ... " + id) | provenance | | +| srv/service1.js:187:47:187:67 | "col1 = ... " + id | srv/service1.js:187:13:187:87 | UPDATE. ... " + id) | provenance | Config | +| srv/service1.js:187:66:187:67 | id | srv/service1.js:187:47:187:67 | "col1 = ... " + id | provenance | | +| srv/service1.js:187:76:187:86 | "ID =" + id | srv/service1.js:187:13:187:87 | UPDATE. ... " + id) | provenance | Config | +| srv/service1.js:187:85:187:86 | id | srv/service1.js:187:76:187:86 | "ID =" + id | provenance | | +| srv/service1.js:191:13:191:18 | { id } | srv/service1.js:191:13:191:29 | id | provenance | | +| srv/service1.js:191:13:191:29 | id | srv/service1.js:193:66:193:67 | id | provenance | | +| srv/service1.js:191:13:191:29 | id | srv/service1.js:193:85:193:86 | id | provenance | | +| srv/service1.js:191:22:191:29 | req.data | srv/service1.js:191:13:191:18 | { id } | provenance | | +| srv/service1.js:193:13:193:87 | UPDATE. ... ` + id) | srv/service1.js:193:7:193:87 | await U ... ` + id) | provenance | | +| srv/service1.js:193:47:193:67 | "col1 = ... " + id | srv/service1.js:193:13:193:87 | UPDATE. ... ` + id) | provenance | Config | +| srv/service1.js:193:66:193:67 | id | srv/service1.js:193:47:193:67 | "col1 = ... " + id | provenance | | +| srv/service1.js:193:76:193:86 | `ID =` + id | srv/service1.js:193:13:193:87 | UPDATE. ... ` + id) | provenance | Config | +| srv/service1.js:193:85:193:86 | id | srv/service1.js:193:76:193:86 | `ID =` + id | provenance | | +| srv/service1.js:197:13:197:18 | { id } | srv/service1.js:197:13:197:29 | id | provenance | | +| srv/service1.js:197:13:197:29 | id | srv/service1.js:199:66:199:67 | id | provenance | | +| srv/service1.js:197:13:197:29 | id | srv/service1.js:199:84:199:85 | id | provenance | | +| srv/service1.js:197:22:197:29 | req.data | srv/service1.js:197:13:197:18 | { id } | provenance | | +| srv/service1.js:199:13:199:88 | UPDATE. ... ${id}`) | srv/service1.js:199:7:199:88 | await U ... ${id}`) | provenance | | +| srv/service1.js:199:47:199:67 | "col1 = ... " + id | srv/service1.js:199:13:199:88 | UPDATE. ... ${id}`) | provenance | Config | +| srv/service1.js:199:66:199:67 | id | srv/service1.js:199:47:199:67 | "col1 = ... " + id | provenance | | +| srv/service1.js:199:76:199:87 | `ID = ${id}` | srv/service1.js:199:13:199:88 | UPDATE. ... ${id}`) | provenance | Config | +| srv/service1.js:199:84:199:85 | id | srv/service1.js:199:76:199:87 | `ID = ${id}` | provenance | | +| srv/service1.js:203:13:203:18 | { id } | srv/service1.js:203:13:203:29 | id | provenance | | +| srv/service1.js:203:13:203:29 | id | srv/service1.js:205:66:205:67 | id | provenance | | +| srv/service1.js:203:22:203:29 | req.data | srv/service1.js:203:13:203:18 | { id } | provenance | | +| srv/service1.js:205:13:205:86 | UPDATE. ... ${id}` | srv/service1.js:205:7:205:86 | await U ... ${id}` | provenance | | +| srv/service1.js:205:47:205:67 | "col1 = ... " + id | srv/service1.js:205:13:205:86 | UPDATE. ... ${id}` | provenance | Config | +| srv/service1.js:205:66:205:67 | id | srv/service1.js:205:47:205:67 | "col1 = ... " + id | provenance | | +| srv/service1.js:227:13:227:18 | { id } | srv/service1.js:227:13:227:29 | id | provenance | | +| srv/service1.js:227:13:227:29 | id | srv/service1.js:229:56:229:57 | id | provenance | | +| srv/service1.js:227:22:227:29 | req.data | srv/service1.js:227:13:227:18 | { id } | provenance | | +| srv/service1.js:229:13:229:58 | DELETE. ... " + id) | srv/service1.js:229:7:229:58 | await D ... " + id) | provenance | | +| srv/service1.js:229:47:229:57 | "ID =" + id | srv/service1.js:229:13:229:58 | DELETE. ... " + id) | provenance | Config | +| srv/service1.js:229:56:229:57 | id | srv/service1.js:229:47:229:57 | "ID =" + id | provenance | | +| srv/service1.js:233:13:233:18 | { id } | srv/service1.js:233:13:233:29 | id | provenance | | +| srv/service1.js:233:13:233:29 | id | srv/service1.js:235:56:235:57 | id | provenance | | +| srv/service1.js:233:22:233:29 | req.data | srv/service1.js:233:13:233:18 | { id } | provenance | | +| srv/service1.js:235:13:235:58 | DELETE. ... ` + id) | srv/service1.js:235:7:235:58 | await D ... ` + id) | provenance | | +| srv/service1.js:235:47:235:57 | `ID =` + id | srv/service1.js:235:13:235:58 | DELETE. ... ` + id) | provenance | Config | +| srv/service1.js:235:56:235:57 | id | srv/service1.js:235:47:235:57 | `ID =` + id | provenance | | +| srv/service1.js:239:13:239:18 | { id } | srv/service1.js:239:13:239:29 | id | provenance | | +| srv/service1.js:239:13:239:29 | id | srv/service1.js:241:55:241:56 | id | provenance | | +| srv/service1.js:239:22:239:29 | req.data | srv/service1.js:239:13:239:18 | { id } | provenance | | +| srv/service1.js:241:13:241:59 | DELETE. ... ${id}`) | srv/service1.js:241:7:241:59 | await D ... ${id}`) | provenance | | +| srv/service1.js:241:47:241:58 | `ID = ${id}` | srv/service1.js:241:13:241:59 | DELETE. ... ${id}`) | provenance | Config | +| srv/service1.js:241:55:241:56 | id | srv/service1.js:241:47:241:58 | `ID = ${id}` | provenance | | +| srv/service1.js:252:13:252:18 | { id } | srv/service1.js:252:13:252:29 | id | provenance | | +| srv/service1.js:252:13:252:29 | id | srv/service1.js:253:63:253:64 | id | provenance | | +| srv/service1.js:252:22:252:29 | req.data | srv/service1.js:252:13:252:18 | { id } | provenance | | +| srv/service1.js:253:13:253:65 | query | srv/service1.js:254:16:254:20 | query | provenance | | +| srv/service1.js:253:21:253:65 | SELECT. ... " + id) | srv/service1.js:253:13:253:65 | query | provenance | | +| srv/service1.js:253:55:253:64 | "ID=" + id | srv/service1.js:253:21:253:65 | SELECT. ... " + id) | provenance | Config | +| srv/service1.js:253:63:253:64 | id | srv/service1.js:253:55:253:64 | "ID=" + id | provenance | | +| srv/service1.js:258:13:258:18 | { id } | srv/service1.js:258:13:258:29 | id | provenance | | +| srv/service1.js:258:13:258:29 | id | srv/service1.js:259:50:259:51 | id | provenance | | +| srv/service1.js:258:22:258:29 | req.data | srv/service1.js:258:13:258:18 | { id } | provenance | | +| srv/service1.js:259:50:259:51 | id | srv/service1.js:259:41:259:51 | "ID =" + id | provenance | | +| srv/service1.js:268:13:268:26 | { id, amount } | srv/service1.js:268:13:268:37 | amount | provenance | | +| srv/service1.js:268:13:268:26 | { id, amount } | srv/service1.js:268:13:268:37 | id | provenance | | +| srv/service1.js:268:13:268:37 | amount | srv/service1.js:269:57:269:62 | amount | provenance | | +| srv/service1.js:268:13:268:37 | id | srv/service1.js:269:83:269:84 | id | provenance | | +| srv/service1.js:268:30:268:37 | req.data | srv/service1.js:268:13:268:26 | { id, amount } | provenance | | +| srv/service1.js:269:57:269:62 | amount | srv/service1.js:269:41:269:62 | "col1 = ... amount | provenance | | +| srv/service1.js:269:83:269:84 | id | srv/service1.js:269:71:269:84 | "col1 = " + id | provenance | | +| srv/service1.js:283:13:283:18 | { id } | srv/service1.js:283:13:283:29 | id | provenance | | +| srv/service1.js:283:13:283:29 | id | srv/service1.js:284:52:284:53 | id | provenance | | +| srv/service1.js:283:22:283:29 | req.data | srv/service1.js:283:13:283:18 | { id } | provenance | | +| srv/service1.js:284:52:284:53 | id | srv/service1.js:284:43:284:53 | "ID =" + id | provenance | | +| srv/service1.js:289:13:289:18 | { id } | srv/service1.js:289:13:289:29 | id | provenance | | +| srv/service1.js:289:13:289:29 | id | srv/service1.js:291:63:291:64 | id | provenance | | +| srv/service1.js:289:22:289:29 | req.data | srv/service1.js:289:13:289:18 | { id } | provenance | | +| srv/service1.js:291:13:291:65 | query | srv/service1.js:292:20:292:24 | query | provenance | | +| srv/service1.js:291:21:291:65 | SELECT. ... " + id) | srv/service1.js:291:13:291:65 | query | provenance | | +| srv/service1.js:291:55:291:64 | "ID=" + id | srv/service1.js:291:21:291:65 | SELECT. ... " + id) | provenance | Config | +| srv/service1.js:291:63:291:64 | id | srv/service1.js:291:55:291:64 | "ID=" + id | provenance | | +| srv/service1.js:296:13:296:18 | { id } | srv/service1.js:296:13:296:29 | id | provenance | | +| srv/service1.js:296:13:296:29 | id | srv/service1.js:298:54:298:55 | id | provenance | | +| srv/service1.js:296:22:296:29 | req.data | srv/service1.js:296:13:296:18 | { id } | provenance | | +| srv/service1.js:298:54:298:55 | id | srv/service1.js:298:45:298:55 | "ID =" + id | provenance | | +| srv/service1.js:308:13:308:26 | { id, amount } | srv/service1.js:308:13:308:37 | amount | provenance | | +| srv/service1.js:308:13:308:26 | { id, amount } | srv/service1.js:308:13:308:37 | id | provenance | | +| srv/service1.js:308:13:308:37 | amount | srv/service1.js:310:61:310:66 | amount | provenance | | +| srv/service1.js:308:13:308:37 | id | srv/service1.js:310:87:310:88 | id | provenance | | +| srv/service1.js:308:30:308:37 | req.data | srv/service1.js:308:13:308:26 | { id, amount } | provenance | | +| srv/service1.js:310:61:310:66 | amount | srv/service1.js:310:45:310:66 | "col1 = ... amount | provenance | | +| srv/service1.js:310:87:310:88 | id | srv/service1.js:310:75:310:88 | "col1 = " + id | provenance | | +| srv/service1.js:326:13:326:18 | { id } | srv/service1.js:326:13:326:29 | id | provenance | | +| srv/service1.js:326:13:326:29 | id | srv/service1.js:328:56:328:57 | id | provenance | | +| srv/service1.js:326:22:326:29 | req.data | srv/service1.js:326:13:326:18 | { id } | provenance | | +| srv/service1.js:328:56:328:57 | id | srv/service1.js:328:47:328:57 | "ID =" + id | provenance | | +| srv/service1.js:333:13:333:18 | { id } | srv/service1.js:333:13:333:29 | id | provenance | | +| srv/service1.js:333:13:333:29 | id | srv/service1.js:335:72:335:73 | id | provenance | | +| srv/service1.js:333:22:333:29 | req.data | srv/service1.js:333:13:333:18 | { id } | provenance | | +| srv/service1.js:335:13:335:74 | query | srv/service1.js:336:20:336:24 | query | provenance | | +| srv/service1.js:335:21:335:74 | cds.ql( ... " + id) | srv/service1.js:335:13:335:74 | query | provenance | | +| srv/service1.js:335:28:335:73 | "SELECT ... =" + id | srv/service1.js:335:21:335:74 | cds.ql( ... " + id) | provenance | Config | +| srv/service1.js:335:72:335:73 | id | srv/service1.js:335:28:335:73 | "SELECT ... =" + id | provenance | | +| srv/service1.js:340:13:340:18 | { id } | srv/service1.js:340:13:340:29 | id | provenance | | +| srv/service1.js:340:13:340:29 | id | srv/service1.js:342:72:342:73 | id | provenance | | +| srv/service1.js:340:22:340:29 | req.data | srv/service1.js:340:13:340:18 | { id } | provenance | | +| srv/service1.js:342:13:342:74 | query | srv/service1.js:343:20:343:24 | query | provenance | | +| srv/service1.js:342:21:342:74 | cds.ql( ... ` + id) | srv/service1.js:342:13:342:74 | query | provenance | | +| srv/service1.js:342:28:342:73 | `SELECT ... =` + id | srv/service1.js:342:21:342:74 | cds.ql( ... ` + id) | provenance | Config | +| srv/service1.js:342:72:342:73 | id | srv/service1.js:342:28:342:73 | `SELECT ... =` + id | provenance | | +| srv/service1.js:347:13:347:18 | { id } | srv/service1.js:347:13:347:29 | id | provenance | | +| srv/service1.js:347:13:347:29 | id | srv/service1.js:349:71:349:72 | id | provenance | | +| srv/service1.js:347:22:347:29 | req.data | srv/service1.js:347:13:347:18 | { id } | provenance | | +| srv/service1.js:349:13:349:75 | query | srv/service1.js:350:20:350:24 | query | provenance | | +| srv/service1.js:349:21:349:75 | cds.ql( ... ${id}`) | srv/service1.js:349:13:349:75 | query | provenance | | +| srv/service1.js:349:28:349:74 | `SELECT ... ${id}` | srv/service1.js:349:21:349:75 | cds.ql( ... ${id}`) | provenance | Config | +| srv/service1.js:349:71:349:72 | id | srv/service1.js:349:28:349:74 | `SELECT ... ${id}` | provenance | | +| srv/service1.js:362:13:362:18 | { id } | srv/service1.js:362:13:362:29 | id | provenance | | +| srv/service1.js:362:13:362:29 | id | srv/service1.js:363:72:363:73 | id | provenance | | +| srv/service1.js:362:22:362:29 | req.data | srv/service1.js:362:13:362:18 | { id } | provenance | | +| srv/service1.js:363:13:363:74 | query | srv/service1.js:364:15:364:19 | query | provenance | | +| srv/service1.js:363:21:363:74 | cds.par ... " + id) | srv/service1.js:363:13:363:74 | query | provenance | | +| srv/service1.js:363:35:363:73 | "SELECT ... =" + id | srv/service1.js:363:21:363:74 | cds.par ... " + id) | provenance | Config | +| srv/service1.js:363:72:363:73 | id | srv/service1.js:363:35:363:73 | "SELECT ... =" + id | provenance | | +| srv/service1.js:368:13:368:18 | { id } | srv/service1.js:368:13:368:29 | id | provenance | | +| srv/service1.js:368:13:368:29 | id | srv/service1.js:369:72:369:73 | id | provenance | | +| srv/service1.js:368:22:368:29 | req.data | srv/service1.js:368:13:368:18 | { id } | provenance | | +| srv/service1.js:369:13:369:74 | query | srv/service1.js:370:15:370:19 | query | provenance | | +| srv/service1.js:369:21:369:74 | cds.par ... ` + id) | srv/service1.js:369:13:369:74 | query | provenance | | +| srv/service1.js:369:35:369:73 | `SELECT ... =` + id | srv/service1.js:369:21:369:74 | cds.par ... ` + id) | provenance | Config | +| srv/service1.js:369:72:369:73 | id | srv/service1.js:369:35:369:73 | `SELECT ... =` + id | provenance | | +| srv/service1.js:374:13:374:18 | { id } | srv/service1.js:374:13:374:29 | id | provenance | | +| srv/service1.js:374:13:374:29 | id | srv/service1.js:375:71:375:72 | id | provenance | | +| srv/service1.js:374:22:374:29 | req.data | srv/service1.js:374:13:374:18 | { id } | provenance | | +| srv/service1.js:375:13:375:75 | query | srv/service1.js:376:15:376:19 | query | provenance | | +| srv/service1.js:375:21:375:75 | cds.par ... ${id}`) | srv/service1.js:375:13:375:75 | query | provenance | | +| srv/service1.js:375:35:375:74 | `SELECT ... ${id}` | srv/service1.js:375:21:375:75 | cds.par ... ${id}`) | provenance | Config | +| srv/service1.js:375:71:375:72 | id | srv/service1.js:375:35:375:74 | `SELECT ... ${id}` | provenance | | +| srv/service1.js:387:13:387:18 | { id } | srv/service1.js:387:13:387:29 | id | provenance | | +| srv/service1.js:387:13:387:29 | id | srv/service1.js:388:62:388:63 | id | provenance | | +| srv/service1.js:387:22:387:29 | req.data | srv/service1.js:387:13:387:18 | { id } | provenance | | +| srv/service1.js:388:13:388:64 | query | srv/service1.js:389:15:389:19 | query | provenance | | +| srv/service1.js:388:21:388:64 | CQL("SE ... " + id) | srv/service1.js:388:13:388:64 | query | provenance | | +| srv/service1.js:388:25:388:63 | "SELECT ... =" + id | srv/service1.js:388:21:388:64 | CQL("SE ... " + id) | provenance | Config | +| srv/service1.js:388:62:388:63 | id | srv/service1.js:388:25:388:63 | "SELECT ... =" + id | provenance | | +| srv/service1.js:393:13:393:18 | { id } | srv/service1.js:393:13:393:29 | id | provenance | | +| srv/service1.js:393:13:393:29 | id | srv/service1.js:394:62:394:63 | id | provenance | | +| srv/service1.js:393:22:393:29 | req.data | srv/service1.js:393:13:393:18 | { id } | provenance | | +| srv/service1.js:394:13:394:64 | query | srv/service1.js:395:15:395:19 | query | provenance | | +| srv/service1.js:394:21:394:64 | CQL(`SE ... ` + id) | srv/service1.js:394:13:394:64 | query | provenance | | +| srv/service1.js:394:25:394:63 | `SELECT ... =` + id | srv/service1.js:394:21:394:64 | CQL(`SE ... ` + id) | provenance | Config | +| srv/service1.js:394:62:394:63 | id | srv/service1.js:394:25:394:63 | `SELECT ... =` + id | provenance | | +| srv/service1.js:399:13:399:18 | { id } | srv/service1.js:399:13:399:29 | id | provenance | | +| srv/service1.js:399:13:399:29 | id | srv/service1.js:400:61:400:62 | id | provenance | | +| srv/service1.js:399:22:399:29 | req.data | srv/service1.js:399:13:399:18 | { id } | provenance | | +| srv/service1.js:400:13:400:65 | query | srv/service1.js:401:15:401:19 | query | provenance | | +| srv/service1.js:400:21:400:65 | CQL(`SE ... ${id}`) | srv/service1.js:400:13:400:65 | query | provenance | | +| srv/service1.js:400:25:400:64 | `SELECT ... ${id}` | srv/service1.js:400:21:400:65 | CQL(`SE ... ${id}`) | provenance | Config | +| srv/service1.js:400:61:400:62 | id | srv/service1.js:400:25:400:64 | `SELECT ... ${id}` | provenance | | +| srv/service1.js:412:13:412:18 | { id } | srv/service1.js:412:13:412:29 | id | provenance | | +| srv/service1.js:412:13:412:29 | id | srv/service1.js:414:58:414:59 | id | provenance | | +| srv/service1.js:412:22:412:29 | req.data | srv/service1.js:412:13:412:18 | { id } | provenance | | +| srv/service1.js:414:13:414:59 | query | srv/service1.js:415:20:415:24 | query | provenance | | +| srv/service1.js:414:58:414:59 | id | srv/service1.js:414:13:414:59 | query | provenance | | +| srv/service1.js:419:13:419:18 | { id } | srv/service1.js:419:13:419:29 | id | provenance | | +| srv/service1.js:419:13:419:29 | id | srv/service1.js:421:58:421:59 | id | provenance | | +| srv/service1.js:419:22:419:29 | req.data | srv/service1.js:419:13:419:18 | { id } | provenance | | +| srv/service1.js:421:13:421:59 | query | srv/service1.js:422:20:422:24 | query | provenance | | +| srv/service1.js:421:58:421:59 | id | srv/service1.js:421:13:421:59 | query | provenance | | +| srv/service1.js:426:13:426:18 | { id } | srv/service1.js:426:13:426:29 | id | provenance | | +| srv/service1.js:426:13:426:29 | id | srv/service1.js:428:57:428:58 | id | provenance | | +| srv/service1.js:426:22:426:29 | req.data | srv/service1.js:426:13:426:18 | { id } | provenance | | +| srv/service1.js:428:13:428:60 | query | srv/service1.js:429:20:429:24 | query | provenance | | +| srv/service1.js:428:57:428:58 | id | srv/service1.js:428:13:428:60 | query | provenance | | +| srv/service1.js:434:13:434:18 | { id } | srv/service1.js:434:13:434:29 | id | provenance | | +| srv/service1.js:434:13:434:29 | id | srv/service1.js:436:63:436:64 | id | provenance | | +| srv/service1.js:434:22:434:29 | req.data | srv/service1.js:434:13:434:18 | { id } | provenance | | +| srv/service1.js:436:13:436:65 | query | srv/service1.js:438:16:438:20 | query | provenance | | +| srv/service1.js:436:21:436:65 | SELECT. ... " + id) | srv/service1.js:436:13:436:65 | query | provenance | | +| srv/service1.js:436:55:436:64 | "ID=" + id | srv/service1.js:436:21:436:65 | SELECT. ... " + id) | provenance | Config | +| srv/service1.js:436:63:436:64 | id | srv/service1.js:436:55:436:64 | "ID=" + id | provenance | | +| srv/service1.js:443:13:443:18 | { id } | srv/service1.js:443:13:443:29 | id | provenance | | +| srv/service1.js:443:13:443:29 | id | srv/service1.js:446:50:446:51 | id | provenance | | +| srv/service1.js:443:22:443:29 | req.data | srv/service1.js:443:13:443:18 | { id } | provenance | | +| srv/service1.js:446:50:446:51 | id | srv/service1.js:446:41:446:51 | "ID =" + id | provenance | | +| srv/service1.js:459:13:459:26 | { id, amount } | srv/service1.js:459:13:459:37 | amount | provenance | | +| srv/service1.js:459:13:459:26 | { id, amount } | srv/service1.js:459:13:459:37 | id | provenance | | +| srv/service1.js:459:13:459:37 | amount | srv/service1.js:462:57:462:62 | amount | provenance | | +| srv/service1.js:459:13:459:37 | id | srv/service1.js:462:83:462:84 | id | provenance | | +| srv/service1.js:459:30:459:37 | req.data | srv/service1.js:459:13:459:26 | { id, amount } | provenance | | +| srv/service1.js:462:57:462:62 | amount | srv/service1.js:462:41:462:62 | "col1 = ... amount | provenance | | +| srv/service1.js:462:83:462:84 | id | srv/service1.js:462:71:462:84 | "col1 = " + id | provenance | | +| srv/service1.js:483:13:483:18 | { id } | srv/service1.js:483:13:483:29 | id | provenance | | +| srv/service1.js:483:13:483:29 | id | srv/service1.js:486:52:486:53 | id | provenance | | +| srv/service1.js:483:22:483:29 | req.data | srv/service1.js:483:13:483:18 | { id } | provenance | | +| srv/service1.js:486:52:486:53 | id | srv/service1.js:486:43:486:53 | "ID =" + id | provenance | | +| srv/service1.js:492:13:492:18 | { id } | srv/service1.js:492:13:492:29 | id | provenance | | +| srv/service1.js:492:13:492:29 | id | srv/service1.js:493:63:493:64 | id | provenance | | +| srv/service1.js:492:22:492:29 | req.data | srv/service1.js:492:13:492:18 | { id } | provenance | | +| srv/service1.js:493:13:493:65 | query | srv/service1.js:495:16:495:20 | query | provenance | | +| srv/service1.js:493:21:493:65 | SELECT. ... " + id) | srv/service1.js:493:13:493:65 | query | provenance | | +| srv/service1.js:493:55:493:64 | "ID=" + id | srv/service1.js:493:21:493:65 | SELECT. ... " + id) | provenance | Config | +| srv/service1.js:493:63:493:64 | id | srv/service1.js:493:55:493:64 | "ID=" + id | provenance | | +| srv/service1.js:500:13:500:18 | { id } | srv/service1.js:500:13:500:29 | id | provenance | | +| srv/service1.js:500:13:500:29 | id | srv/service1.js:502:50:502:51 | id | provenance | | +| srv/service1.js:500:22:500:29 | req.data | srv/service1.js:500:13:500:18 | { id } | provenance | | +| srv/service1.js:502:50:502:51 | id | srv/service1.js:502:41:502:51 | "ID =" + id | provenance | | +| srv/service1.js:514:13:514:26 | { id, amount } | srv/service1.js:514:13:514:37 | amount | provenance | | +| srv/service1.js:514:13:514:26 | { id, amount } | srv/service1.js:514:13:514:37 | id | provenance | | +| srv/service1.js:514:13:514:37 | amount | srv/service1.js:516:57:516:62 | amount | provenance | | +| srv/service1.js:514:13:514:37 | id | srv/service1.js:516:83:516:84 | id | provenance | | +| srv/service1.js:514:30:514:37 | req.data | srv/service1.js:514:13:514:26 | { id, amount } | provenance | | +| srv/service1.js:516:57:516:62 | amount | srv/service1.js:516:41:516:62 | "col1 = ... amount | provenance | | +| srv/service1.js:516:83:516:84 | id | srv/service1.js:516:71:516:84 | "col1 = " + id | provenance | | +| srv/service1.js:535:13:535:18 | { id } | srv/service1.js:535:13:535:29 | id | provenance | | +| srv/service1.js:535:13:535:29 | id | srv/service1.js:537:52:537:53 | id | provenance | | +| srv/service1.js:535:22:535:29 | req.data | srv/service1.js:535:13:535:18 | { id } | provenance | | +| srv/service1.js:537:52:537:53 | id | srv/service1.js:537:43:537:53 | "ID =" + id | provenance | | +| srv/service1.js:543:13:543:18 | { id } | srv/service1.js:543:13:543:29 | id | provenance | | +| srv/service1.js:543:13:543:29 | id | srv/service1.js:544:56:544:57 | id | provenance | | +| srv/service1.js:543:22:543:29 | req.data | srv/service1.js:543:13:543:18 | { id } | provenance | | +| srv/service1.js:544:13:544:58 | query | srv/service1.js:546:16:546:20 | query | provenance | | +| srv/service1.js:544:21:544:58 | SELECT. ... " + id) | srv/service1.js:544:13:544:58 | query | provenance | | +| srv/service1.js:544:48:544:57 | "ID=" + id | srv/service1.js:544:21:544:58 | SELECT. ... " + id) | provenance | Config | +| srv/service1.js:544:56:544:57 | id | srv/service1.js:544:48:544:57 | "ID=" + id | provenance | | +| srv/service1.js:551:13:551:18 | { id } | srv/service1.js:551:13:551:29 | id | provenance | | +| srv/service1.js:551:13:551:29 | id | srv/service1.js:553:43:553:44 | id | provenance | | +| srv/service1.js:551:22:551:29 | req.data | srv/service1.js:551:13:551:18 | { id } | provenance | | +| srv/service1.js:553:43:553:44 | id | srv/service1.js:553:34:553:44 | "ID =" + id | provenance | | +| srv/service1.js:565:13:565:26 | { id, amount } | srv/service1.js:565:13:565:37 | amount | provenance | | +| srv/service1.js:565:13:565:26 | { id, amount } | srv/service1.js:565:13:565:37 | id | provenance | | +| srv/service1.js:565:13:565:37 | amount | srv/service1.js:567:50:567:55 | amount | provenance | | +| srv/service1.js:565:13:565:37 | id | srv/service1.js:567:76:567:77 | id | provenance | | +| srv/service1.js:565:30:565:37 | req.data | srv/service1.js:565:13:565:26 | { id, amount } | provenance | | +| srv/service1.js:567:50:567:55 | amount | srv/service1.js:567:34:567:55 | "col1 = ... amount | provenance | | +| srv/service1.js:567:76:567:77 | id | srv/service1.js:567:64:567:77 | "col1 = " + id | provenance | | +| srv/service1.js:586:13:586:18 | { id } | srv/service1.js:586:13:586:29 | id | provenance | | +| srv/service1.js:586:13:586:29 | id | srv/service1.js:588:45:588:46 | id | provenance | | +| srv/service1.js:586:22:586:29 | req.data | srv/service1.js:586:13:586:18 | { id } | provenance | | +| srv/service1.js:588:45:588:46 | id | srv/service1.js:588:36:588:46 | "ID =" + id | provenance | | +| srv/service1.js:594:13:594:18 | { id } | srv/service1.js:594:13:594:29 | id | provenance | | +| srv/service1.js:594:13:594:29 | id | srv/service1.js:595:56:595:57 | id | provenance | | +| srv/service1.js:594:22:594:29 | req.data | srv/service1.js:594:13:594:18 | { id } | provenance | | +| srv/service1.js:595:13:595:58 | query | srv/service1.js:597:16:597:20 | query | provenance | | +| srv/service1.js:595:21:595:58 | SELECT. ... " + id) | srv/service1.js:595:13:595:58 | query | provenance | | +| srv/service1.js:595:48:595:57 | "ID=" + id | srv/service1.js:595:21:595:58 | SELECT. ... " + id) | provenance | Config | +| srv/service1.js:595:56:595:57 | id | srv/service1.js:595:48:595:57 | "ID=" + id | provenance | | +| srv/service1.js:602:13:602:18 | { id } | srv/service1.js:602:13:602:29 | id | provenance | | +| srv/service1.js:602:13:602:29 | id | srv/service1.js:604:43:604:44 | id | provenance | | +| srv/service1.js:602:22:602:29 | req.data | srv/service1.js:602:13:602:18 | { id } | provenance | | +| srv/service1.js:604:43:604:44 | id | srv/service1.js:604:34:604:44 | "ID =" + id | provenance | | +| srv/service1.js:616:13:616:26 | { id, amount } | srv/service1.js:616:13:616:37 | amount | provenance | | +| srv/service1.js:616:13:616:26 | { id, amount } | srv/service1.js:616:13:616:37 | id | provenance | | +| srv/service1.js:616:13:616:37 | amount | srv/service1.js:618:50:618:55 | amount | provenance | | +| srv/service1.js:616:13:616:37 | id | srv/service1.js:618:76:618:77 | id | provenance | | +| srv/service1.js:616:30:616:37 | req.data | srv/service1.js:616:13:616:26 | { id, amount } | provenance | | +| srv/service1.js:618:50:618:55 | amount | srv/service1.js:618:34:618:55 | "col1 = ... amount | provenance | | +| srv/service1.js:618:76:618:77 | id | srv/service1.js:618:64:618:77 | "col1 = " + id | provenance | | +| srv/service1.js:637:13:637:18 | { id } | srv/service1.js:637:13:637:29 | id | provenance | | +| srv/service1.js:637:13:637:29 | id | srv/service1.js:639:45:639:46 | id | provenance | | +| srv/service1.js:637:22:637:29 | req.data | srv/service1.js:637:13:637:18 | { id } | provenance | | +| srv/service1.js:639:45:639:46 | id | srv/service1.js:639:36:639:46 | "ID =" + id | provenance | | +| srv/service1.js:645:13:645:18 | { id } | srv/service1.js:645:13:645:29 | id | provenance | | +| srv/service1.js:645:13:645:29 | id | srv/service1.js:646:56:646:57 | id | provenance | | +| srv/service1.js:645:22:645:29 | req.data | srv/service1.js:645:13:645:18 | { id } | provenance | | +| srv/service1.js:646:13:646:58 | query | srv/service1.js:647:18:647:22 | query | provenance | | +| srv/service1.js:646:21:646:58 | SELECT. ... " + id) | srv/service1.js:646:13:646:58 | query | provenance | | +| srv/service1.js:646:48:646:57 | "ID=" + id | srv/service1.js:646:21:646:58 | SELECT. ... " + id) | provenance | Config | +| srv/service1.js:646:56:646:57 | id | srv/service1.js:646:48:646:57 | "ID=" + id | provenance | | +| srv/service1.js:651:13:651:18 | { id } | srv/service1.js:651:13:651:29 | id | provenance | | +| srv/service1.js:651:13:651:29 | id | srv/service1.js:652:56:652:57 | id | provenance | | +| srv/service1.js:651:22:651:29 | req.data | srv/service1.js:651:13:651:18 | { id } | provenance | | +| srv/service1.js:652:13:652:58 | query | srv/service1.js:653:18:653:22 | query | provenance | | +| srv/service1.js:652:21:652:58 | SELECT. ... ` + id) | srv/service1.js:652:13:652:58 | query | provenance | | +| srv/service1.js:652:48:652:57 | `ID=` + id | srv/service1.js:652:21:652:58 | SELECT. ... ` + id) | provenance | Config | +| srv/service1.js:652:56:652:57 | id | srv/service1.js:652:48:652:57 | `ID=` + id | provenance | | +| srv/service1.js:657:13:657:18 | { id } | srv/service1.js:657:13:657:29 | id | provenance | | +| srv/service1.js:657:13:657:29 | id | srv/service1.js:658:54:658:55 | id | provenance | | +| srv/service1.js:657:22:657:29 | req.data | srv/service1.js:657:13:657:18 | { id } | provenance | | +| srv/service1.js:658:13:658:58 | query | srv/service1.js:659:18:659:22 | query | provenance | | +| srv/service1.js:658:21:658:58 | SELECT. ... ${id}`) | srv/service1.js:658:13:658:58 | query | provenance | | +| srv/service1.js:658:48:658:57 | `ID=${id}` | srv/service1.js:658:21:658:58 | SELECT. ... ${id}`) | provenance | Config | +| srv/service1.js:658:54:658:55 | id | srv/service1.js:658:48:658:57 | `ID=${id}` | provenance | | +| srv/service1.js:669:13:669:18 | { id } | srv/service1.js:669:13:669:29 | id | provenance | | +| srv/service1.js:669:13:669:29 | id | srv/service1.js:670:45:670:46 | id | provenance | | +| srv/service1.js:669:22:669:29 | req.data | srv/service1.js:669:13:669:18 | { id } | provenance | | +| srv/service1.js:670:45:670:46 | id | srv/service1.js:670:36:670:46 | "ID =" + id | provenance | | +| srv/service1.js:674:13:674:18 | { id } | srv/service1.js:674:13:674:29 | id | provenance | | +| srv/service1.js:674:13:674:29 | id | srv/service1.js:675:45:675:46 | id | provenance | | +| srv/service1.js:674:22:674:29 | req.data | srv/service1.js:674:13:674:18 | { id } | provenance | | +| srv/service1.js:675:45:675:46 | id | srv/service1.js:675:36:675:46 | `ID =` + id | provenance | | +| srv/service1.js:679:13:679:18 | { id } | srv/service1.js:679:13:679:29 | id | provenance | | +| srv/service1.js:679:13:679:29 | id | srv/service1.js:680:42:680:43 | id | provenance | | +| srv/service1.js:679:22:679:29 | req.data | srv/service1.js:679:13:679:18 | { id } | provenance | | +| srv/service1.js:680:42:680:43 | id | srv/service1.js:680:36:680:45 | `ID=${id}` | provenance | | +| srv/service1.js:704:13:704:26 | { id, amount } | srv/service1.js:704:13:704:37 | amount | provenance | | +| srv/service1.js:704:13:704:26 | { id, amount } | srv/service1.js:704:13:704:37 | id | provenance | | +| srv/service1.js:704:13:704:37 | amount | srv/service1.js:705:52:705:57 | amount | provenance | | +| srv/service1.js:704:13:704:37 | id | srv/service1.js:705:78:705:79 | id | provenance | | +| srv/service1.js:704:30:704:37 | req.data | srv/service1.js:704:13:704:26 | { id, amount } | provenance | | +| srv/service1.js:705:52:705:57 | amount | srv/service1.js:705:36:705:57 | "col1 = ... amount | provenance | | +| srv/service1.js:705:78:705:79 | id | srv/service1.js:705:66:705:79 | "col1 = " + id | provenance | | +| srv/service1.js:709:13:709:26 | { id, amount } | srv/service1.js:709:13:709:37 | amount | provenance | | +| srv/service1.js:709:13:709:26 | { id, amount } | srv/service1.js:709:13:709:37 | id | provenance | | +| srv/service1.js:709:13:709:37 | amount | srv/service1.js:710:52:710:57 | amount | provenance | | +| srv/service1.js:709:13:709:37 | id | srv/service1.js:710:77:710:78 | id | provenance | | +| srv/service1.js:709:30:709:37 | req.data | srv/service1.js:709:13:709:26 | { id, amount } | provenance | | +| srv/service1.js:710:52:710:57 | amount | srv/service1.js:710:36:710:57 | "col1 = ... amount | provenance | | +| srv/service1.js:710:77:710:78 | id | srv/service1.js:710:66:710:78 | `col1 =` + id | provenance | | +| srv/service1.js:714:13:714:26 | { id, amount } | srv/service1.js:714:13:714:37 | amount | provenance | | +| srv/service1.js:714:13:714:26 | { id, amount } | srv/service1.js:714:13:714:37 | id | provenance | | +| srv/service1.js:714:13:714:37 | amount | srv/service1.js:715:52:715:57 | amount | provenance | | +| srv/service1.js:714:13:714:37 | id | srv/service1.js:715:76:715:77 | id | provenance | | +| srv/service1.js:714:30:714:37 | req.data | srv/service1.js:714:13:714:26 | { id, amount } | provenance | | +| srv/service1.js:715:52:715:57 | amount | srv/service1.js:715:36:715:57 | "col1 = ... amount | provenance | | +| srv/service1.js:715:76:715:77 | id | srv/service1.js:715:66:715:79 | `col1 = ${id}` | provenance | | +| srv/service1.js:719:13:719:26 | { id, amount } | srv/service1.js:719:13:719:37 | amount | provenance | | +| srv/service1.js:719:13:719:37 | amount | srv/service1.js:720:52:720:57 | amount | provenance | | +| srv/service1.js:719:30:719:37 | req.data | srv/service1.js:719:13:719:26 | { id, amount } | provenance | | +| srv/service1.js:720:52:720:57 | amount | srv/service1.js:720:36:720:57 | "col1 = ... amount | provenance | | +| srv/service1.js:754:13:754:18 | { id } | srv/service1.js:754:13:754:29 | id | provenance | | +| srv/service1.js:754:13:754:29 | id | srv/service1.js:755:47:755:48 | id | provenance | | +| srv/service1.js:754:22:754:29 | req.data | srv/service1.js:754:13:754:18 | { id } | provenance | | +| srv/service1.js:755:47:755:48 | id | srv/service1.js:755:38:755:48 | "ID =" + id | provenance | | +| srv/service1.js:759:13:759:18 | { id } | srv/service1.js:759:13:759:29 | id | provenance | | +| srv/service1.js:759:13:759:29 | id | srv/service1.js:760:47:760:48 | id | provenance | | +| srv/service1.js:759:22:759:29 | req.data | srv/service1.js:759:13:759:18 | { id } | provenance | | +| srv/service1.js:760:47:760:48 | id | srv/service1.js:760:38:760:48 | `ID =` + id | provenance | | +| srv/service1.js:764:13:764:18 | { id } | srv/service1.js:764:13:764:29 | id | provenance | | +| srv/service1.js:764:13:764:29 | id | srv/service1.js:765:46:765:47 | id | provenance | | +| srv/service1.js:764:22:764:29 | req.data | srv/service1.js:764:13:764:18 | { id } | provenance | | +| srv/service1.js:765:46:765:47 | id | srv/service1.js:765:38:765:49 | `ID = ${id}` | provenance | | +nodes +| srv/service1.js:13:13:13:18 | { id } | semmle.label | { id } | +| srv/service1.js:13:13:13:29 | id | semmle.label | id | +| srv/service1.js:13:22:13:29 | req.data | semmle.label | req.data | +| srv/service1.js:14:13:14:58 | query | semmle.label | query | +| srv/service1.js:14:21:14:58 | SELECT. ... " + id) | semmle.label | SELECT. ... " + id) | +| srv/service1.js:14:48:14:57 | "ID=" + id | semmle.label | "ID=" + id | +| srv/service1.js:14:56:14:57 | id | semmle.label | id | +| srv/service1.js:15:15:15:19 | query | semmle.label | query | +| srv/service1.js:19:13:19:18 | { id } | semmle.label | { id } | +| srv/service1.js:19:13:19:29 | id | semmle.label | id | +| srv/service1.js:19:22:19:29 | req.data | semmle.label | req.data | +| srv/service1.js:20:13:20:58 | query | semmle.label | query | +| srv/service1.js:20:21:20:58 | SELECT. ... ` + id) | semmle.label | SELECT. ... ` + id) | +| srv/service1.js:20:48:20:57 | `ID=` + id | semmle.label | `ID=` + id | +| srv/service1.js:20:56:20:57 | id | semmle.label | id | +| srv/service1.js:21:15:21:19 | query | semmle.label | query | +| srv/service1.js:25:13:25:18 | { id } | semmle.label | { id } | +| srv/service1.js:25:13:25:29 | id | semmle.label | id | +| srv/service1.js:25:22:25:29 | req.data | semmle.label | req.data | +| srv/service1.js:26:13:26:58 | query | semmle.label | query | +| srv/service1.js:26:21:26:58 | SELECT. ... ${id}`) | semmle.label | SELECT. ... ${id}`) | +| srv/service1.js:26:48:26:57 | `ID=${id}` | semmle.label | `ID=${id}` | +| srv/service1.js:26:54:26:55 | id | semmle.label | id | +| srv/service1.js:27:15:27:19 | query | semmle.label | query | +| srv/service1.js:37:13:37:18 | { id } | semmle.label | { id } | +| srv/service1.js:37:13:37:29 | id | semmle.label | id | +| srv/service1.js:37:22:37:29 | req.data | semmle.label | req.data | +| srv/service1.js:38:33:38:43 | "ID =" + id | semmle.label | "ID =" + id | +| srv/service1.js:38:42:38:43 | id | semmle.label | id | +| srv/service1.js:42:13:42:18 | { id } | semmle.label | { id } | +| srv/service1.js:42:13:42:29 | id | semmle.label | id | +| srv/service1.js:42:22:42:29 | req.data | semmle.label | req.data | +| srv/service1.js:43:33:43:43 | `ID =` + id | semmle.label | `ID =` + id | +| srv/service1.js:43:42:43:43 | id | semmle.label | id | +| srv/service1.js:47:13:47:18 | { id } | semmle.label | { id } | +| srv/service1.js:47:13:47:29 | id | semmle.label | id | +| srv/service1.js:47:22:47:29 | req.data | semmle.label | req.data | +| srv/service1.js:48:33:48:42 | `ID=${id}` | semmle.label | `ID=${id}` | +| srv/service1.js:48:39:48:40 | id | semmle.label | id | +| srv/service1.js:72:13:72:26 | { id, amount } | semmle.label | { id, amount } | +| srv/service1.js:72:13:72:37 | amount | semmle.label | amount | +| srv/service1.js:72:13:72:37 | id | semmle.label | id | +| srv/service1.js:72:30:72:37 | req.data | semmle.label | req.data | +| srv/service1.js:73:33:73:54 | "col1 = ... amount | semmle.label | "col1 = ... amount | +| srv/service1.js:73:49:73:54 | amount | semmle.label | amount | +| srv/service1.js:73:63:73:76 | "col1 = " + id | semmle.label | "col1 = " + id | +| srv/service1.js:73:75:73:76 | id | semmle.label | id | +| srv/service1.js:77:13:77:26 | { id, amount } | semmle.label | { id, amount } | +| srv/service1.js:77:13:77:37 | amount | semmle.label | amount | +| srv/service1.js:77:13:77:37 | id | semmle.label | id | +| srv/service1.js:77:30:77:37 | req.data | semmle.label | req.data | +| srv/service1.js:78:33:78:54 | "col1 = ... amount | semmle.label | "col1 = ... amount | +| srv/service1.js:78:49:78:54 | amount | semmle.label | amount | +| srv/service1.js:78:63:78:76 | `col1 = ` + id | semmle.label | `col1 = ` + id | +| srv/service1.js:78:75:78:76 | id | semmle.label | id | +| srv/service1.js:82:13:82:26 | { id, amount } | semmle.label | { id, amount } | +| srv/service1.js:82:13:82:37 | amount | semmle.label | amount | +| srv/service1.js:82:13:82:37 | id | semmle.label | id | +| srv/service1.js:82:30:82:37 | req.data | semmle.label | req.data | +| srv/service1.js:83:33:83:54 | "col1 = ... amount | semmle.label | "col1 = ... amount | +| srv/service1.js:83:49:83:54 | amount | semmle.label | amount | +| srv/service1.js:83:63:83:76 | `col1 = ${id}` | semmle.label | `col1 = ${id}` | +| srv/service1.js:83:73:83:74 | id | semmle.label | id | +| srv/service1.js:87:13:87:26 | { id, amount } | semmle.label | { id, amount } | +| srv/service1.js:87:13:87:37 | amount | semmle.label | amount | +| srv/service1.js:87:30:87:37 | req.data | semmle.label | req.data | +| srv/service1.js:88:33:88:54 | "col1 = ... amount | semmle.label | "col1 = ... amount | +| srv/service1.js:88:49:88:54 | amount | semmle.label | amount | +| srv/service1.js:122:13:122:18 | { id } | semmle.label | { id } | +| srv/service1.js:122:13:122:29 | id | semmle.label | id | +| srv/service1.js:122:22:122:29 | req.data | semmle.label | req.data | +| srv/service1.js:123:35:123:45 | "ID =" + id | semmle.label | "ID =" + id | +| srv/service1.js:123:44:123:45 | id | semmle.label | id | +| srv/service1.js:127:13:127:18 | { id } | semmle.label | { id } | +| srv/service1.js:127:13:127:29 | id | semmle.label | id | +| srv/service1.js:127:22:127:29 | req.data | semmle.label | req.data | +| srv/service1.js:128:35:128:45 | `ID =` + id | semmle.label | `ID =` + id | +| srv/service1.js:128:44:128:45 | id | semmle.label | id | +| srv/service1.js:132:13:132:18 | { id } | semmle.label | { id } | +| srv/service1.js:132:13:132:29 | id | semmle.label | id | +| srv/service1.js:132:22:132:29 | req.data | semmle.label | req.data | +| srv/service1.js:133:35:133:46 | `ID = ${id}` | semmle.label | `ID = ${id}` | +| srv/service1.js:133:43:133:44 | id | semmle.label | id | +| srv/service1.js:143:13:143:18 | { id } | semmle.label | { id } | +| srv/service1.js:143:13:143:29 | id | semmle.label | id | +| srv/service1.js:143:22:143:29 | req.data | semmle.label | req.data | +| srv/service1.js:145:7:145:57 | await S ... " + id) | semmle.label | await S ... " + id) | +| srv/service1.js:145:13:145:57 | SELECT. ... " + id) | semmle.label | SELECT. ... " + id) | +| srv/service1.js:145:47:145:56 | "ID=" + id | semmle.label | "ID=" + id | +| srv/service1.js:145:55:145:56 | id | semmle.label | id | +| srv/service1.js:149:13:149:18 | { id } | semmle.label | { id } | +| srv/service1.js:149:13:149:29 | id | semmle.label | id | +| srv/service1.js:149:22:149:29 | req.data | semmle.label | req.data | +| srv/service1.js:151:7:151:57 | await S ... ` + id) | semmle.label | await S ... ` + id) | +| srv/service1.js:151:13:151:57 | SELECT. ... ` + id) | semmle.label | SELECT. ... ` + id) | +| srv/service1.js:151:47:151:56 | `ID=` + id | semmle.label | `ID=` + id | +| srv/service1.js:151:55:151:56 | id | semmle.label | id | +| srv/service1.js:155:13:155:18 | { id } | semmle.label | { id } | +| srv/service1.js:155:13:155:29 | id | semmle.label | id | +| srv/service1.js:155:22:155:29 | req.data | semmle.label | req.data | +| srv/service1.js:157:7:157:57 | await S ... ${id}`) | semmle.label | await S ... ${id}`) | +| srv/service1.js:157:13:157:57 | SELECT. ... ${id}`) | semmle.label | SELECT. ... ${id}`) | +| srv/service1.js:157:47:157:56 | `ID=${id}` | semmle.label | `ID=${id}` | +| srv/service1.js:157:53:157:54 | id | semmle.label | id | +| srv/service1.js:185:13:185:18 | { id } | semmle.label | { id } | +| srv/service1.js:185:13:185:29 | id | semmle.label | id | +| srv/service1.js:185:22:185:29 | req.data | semmle.label | req.data | +| srv/service1.js:187:7:187:87 | await U ... " + id) | semmle.label | await U ... " + id) | +| srv/service1.js:187:13:187:87 | UPDATE. ... " + id) | semmle.label | UPDATE. ... " + id) | +| srv/service1.js:187:47:187:67 | "col1 = ... " + id | semmle.label | "col1 = ... " + id | +| srv/service1.js:187:66:187:67 | id | semmle.label | id | +| srv/service1.js:187:76:187:86 | "ID =" + id | semmle.label | "ID =" + id | +| srv/service1.js:187:85:187:86 | id | semmle.label | id | +| srv/service1.js:191:13:191:18 | { id } | semmle.label | { id } | +| srv/service1.js:191:13:191:29 | id | semmle.label | id | +| srv/service1.js:191:22:191:29 | req.data | semmle.label | req.data | +| srv/service1.js:193:7:193:87 | await U ... ` + id) | semmle.label | await U ... ` + id) | +| srv/service1.js:193:13:193:87 | UPDATE. ... ` + id) | semmle.label | UPDATE. ... ` + id) | +| srv/service1.js:193:47:193:67 | "col1 = ... " + id | semmle.label | "col1 = ... " + id | +| srv/service1.js:193:66:193:67 | id | semmle.label | id | +| srv/service1.js:193:76:193:86 | `ID =` + id | semmle.label | `ID =` + id | +| srv/service1.js:193:85:193:86 | id | semmle.label | id | +| srv/service1.js:197:13:197:18 | { id } | semmle.label | { id } | +| srv/service1.js:197:13:197:29 | id | semmle.label | id | +| srv/service1.js:197:22:197:29 | req.data | semmle.label | req.data | +| srv/service1.js:199:7:199:88 | await U ... ${id}`) | semmle.label | await U ... ${id}`) | +| srv/service1.js:199:13:199:88 | UPDATE. ... ${id}`) | semmle.label | UPDATE. ... ${id}`) | +| srv/service1.js:199:47:199:67 | "col1 = ... " + id | semmle.label | "col1 = ... " + id | +| srv/service1.js:199:66:199:67 | id | semmle.label | id | +| srv/service1.js:199:76:199:87 | `ID = ${id}` | semmle.label | `ID = ${id}` | +| srv/service1.js:199:84:199:85 | id | semmle.label | id | +| srv/service1.js:203:13:203:18 | { id } | semmle.label | { id } | +| srv/service1.js:203:13:203:29 | id | semmle.label | id | +| srv/service1.js:203:22:203:29 | req.data | semmle.label | req.data | +| srv/service1.js:205:7:205:86 | await U ... ${id}` | semmle.label | await U ... ${id}` | +| srv/service1.js:205:13:205:86 | UPDATE. ... ${id}` | semmle.label | UPDATE. ... ${id}` | +| srv/service1.js:205:47:205:67 | "col1 = ... " + id | semmle.label | "col1 = ... " + id | +| srv/service1.js:205:66:205:67 | id | semmle.label | id | +| srv/service1.js:227:13:227:18 | { id } | semmle.label | { id } | +| srv/service1.js:227:13:227:29 | id | semmle.label | id | +| srv/service1.js:227:22:227:29 | req.data | semmle.label | req.data | +| srv/service1.js:229:7:229:58 | await D ... " + id) | semmle.label | await D ... " + id) | +| srv/service1.js:229:13:229:58 | DELETE. ... " + id) | semmle.label | DELETE. ... " + id) | +| srv/service1.js:229:47:229:57 | "ID =" + id | semmle.label | "ID =" + id | +| srv/service1.js:229:56:229:57 | id | semmle.label | id | +| srv/service1.js:233:13:233:18 | { id } | semmle.label | { id } | +| srv/service1.js:233:13:233:29 | id | semmle.label | id | +| srv/service1.js:233:22:233:29 | req.data | semmle.label | req.data | +| srv/service1.js:235:7:235:58 | await D ... ` + id) | semmle.label | await D ... ` + id) | +| srv/service1.js:235:13:235:58 | DELETE. ... ` + id) | semmle.label | DELETE. ... ` + id) | +| srv/service1.js:235:47:235:57 | `ID =` + id | semmle.label | `ID =` + id | +| srv/service1.js:235:56:235:57 | id | semmle.label | id | +| srv/service1.js:239:13:239:18 | { id } | semmle.label | { id } | +| srv/service1.js:239:13:239:29 | id | semmle.label | id | +| srv/service1.js:239:22:239:29 | req.data | semmle.label | req.data | +| srv/service1.js:241:7:241:59 | await D ... ${id}`) | semmle.label | await D ... ${id}`) | +| srv/service1.js:241:13:241:59 | DELETE. ... ${id}`) | semmle.label | DELETE. ... ${id}`) | +| srv/service1.js:241:47:241:58 | `ID = ${id}` | semmle.label | `ID = ${id}` | +| srv/service1.js:241:55:241:56 | id | semmle.label | id | +| srv/service1.js:252:13:252:18 | { id } | semmle.label | { id } | +| srv/service1.js:252:13:252:29 | id | semmle.label | id | +| srv/service1.js:252:22:252:29 | req.data | semmle.label | req.data | +| srv/service1.js:253:13:253:65 | query | semmle.label | query | +| srv/service1.js:253:21:253:65 | SELECT. ... " + id) | semmle.label | SELECT. ... " + id) | +| srv/service1.js:253:55:253:64 | "ID=" + id | semmle.label | "ID=" + id | +| srv/service1.js:253:63:253:64 | id | semmle.label | id | +| srv/service1.js:254:16:254:20 | query | semmle.label | query | +| srv/service1.js:258:13:258:18 | { id } | semmle.label | { id } | +| srv/service1.js:258:13:258:29 | id | semmle.label | id | +| srv/service1.js:258:22:258:29 | req.data | semmle.label | req.data | +| srv/service1.js:259:41:259:51 | "ID =" + id | semmle.label | "ID =" + id | +| srv/service1.js:259:50:259:51 | id | semmle.label | id | +| srv/service1.js:268:13:268:26 | { id, amount } | semmle.label | { id, amount } | +| srv/service1.js:268:13:268:37 | amount | semmle.label | amount | +| srv/service1.js:268:13:268:37 | id | semmle.label | id | +| srv/service1.js:268:30:268:37 | req.data | semmle.label | req.data | +| srv/service1.js:269:41:269:62 | "col1 = ... amount | semmle.label | "col1 = ... amount | +| srv/service1.js:269:57:269:62 | amount | semmle.label | amount | +| srv/service1.js:269:71:269:84 | "col1 = " + id | semmle.label | "col1 = " + id | +| srv/service1.js:269:83:269:84 | id | semmle.label | id | +| srv/service1.js:283:13:283:18 | { id } | semmle.label | { id } | +| srv/service1.js:283:13:283:29 | id | semmle.label | id | +| srv/service1.js:283:22:283:29 | req.data | semmle.label | req.data | +| srv/service1.js:284:43:284:53 | "ID =" + id | semmle.label | "ID =" + id | +| srv/service1.js:284:52:284:53 | id | semmle.label | id | +| srv/service1.js:289:13:289:18 | { id } | semmle.label | { id } | +| srv/service1.js:289:13:289:29 | id | semmle.label | id | +| srv/service1.js:289:22:289:29 | req.data | semmle.label | req.data | +| srv/service1.js:291:13:291:65 | query | semmle.label | query | +| srv/service1.js:291:21:291:65 | SELECT. ... " + id) | semmle.label | SELECT. ... " + id) | +| srv/service1.js:291:55:291:64 | "ID=" + id | semmle.label | "ID=" + id | +| srv/service1.js:291:63:291:64 | id | semmle.label | id | +| srv/service1.js:292:20:292:24 | query | semmle.label | query | +| srv/service1.js:296:13:296:18 | { id } | semmle.label | { id } | +| srv/service1.js:296:13:296:29 | id | semmle.label | id | +| srv/service1.js:296:22:296:29 | req.data | semmle.label | req.data | +| srv/service1.js:298:45:298:55 | "ID =" + id | semmle.label | "ID =" + id | +| srv/service1.js:298:54:298:55 | id | semmle.label | id | +| srv/service1.js:308:13:308:26 | { id, amount } | semmle.label | { id, amount } | +| srv/service1.js:308:13:308:37 | amount | semmle.label | amount | +| srv/service1.js:308:13:308:37 | id | semmle.label | id | +| srv/service1.js:308:30:308:37 | req.data | semmle.label | req.data | +| srv/service1.js:310:45:310:66 | "col1 = ... amount | semmle.label | "col1 = ... amount | +| srv/service1.js:310:61:310:66 | amount | semmle.label | amount | +| srv/service1.js:310:75:310:88 | "col1 = " + id | semmle.label | "col1 = " + id | +| srv/service1.js:310:87:310:88 | id | semmle.label | id | +| srv/service1.js:326:13:326:18 | { id } | semmle.label | { id } | +| srv/service1.js:326:13:326:29 | id | semmle.label | id | +| srv/service1.js:326:22:326:29 | req.data | semmle.label | req.data | +| srv/service1.js:328:47:328:57 | "ID =" + id | semmle.label | "ID =" + id | +| srv/service1.js:328:56:328:57 | id | semmle.label | id | +| srv/service1.js:333:13:333:18 | { id } | semmle.label | { id } | +| srv/service1.js:333:13:333:29 | id | semmle.label | id | +| srv/service1.js:333:22:333:29 | req.data | semmle.label | req.data | +| srv/service1.js:335:13:335:74 | query | semmle.label | query | +| srv/service1.js:335:21:335:74 | cds.ql( ... " + id) | semmle.label | cds.ql( ... " + id) | +| srv/service1.js:335:28:335:73 | "SELECT ... =" + id | semmle.label | "SELECT ... =" + id | +| srv/service1.js:335:72:335:73 | id | semmle.label | id | +| srv/service1.js:336:20:336:24 | query | semmle.label | query | +| srv/service1.js:340:13:340:18 | { id } | semmle.label | { id } | +| srv/service1.js:340:13:340:29 | id | semmle.label | id | +| srv/service1.js:340:22:340:29 | req.data | semmle.label | req.data | +| srv/service1.js:342:13:342:74 | query | semmle.label | query | +| srv/service1.js:342:21:342:74 | cds.ql( ... ` + id) | semmle.label | cds.ql( ... ` + id) | +| srv/service1.js:342:28:342:73 | `SELECT ... =` + id | semmle.label | `SELECT ... =` + id | +| srv/service1.js:342:72:342:73 | id | semmle.label | id | +| srv/service1.js:343:20:343:24 | query | semmle.label | query | +| srv/service1.js:347:13:347:18 | { id } | semmle.label | { id } | +| srv/service1.js:347:13:347:29 | id | semmle.label | id | +| srv/service1.js:347:22:347:29 | req.data | semmle.label | req.data | +| srv/service1.js:349:13:349:75 | query | semmle.label | query | +| srv/service1.js:349:21:349:75 | cds.ql( ... ${id}`) | semmle.label | cds.ql( ... ${id}`) | +| srv/service1.js:349:28:349:74 | `SELECT ... ${id}` | semmle.label | `SELECT ... ${id}` | +| srv/service1.js:349:71:349:72 | id | semmle.label | id | +| srv/service1.js:350:20:350:24 | query | semmle.label | query | +| srv/service1.js:362:13:362:18 | { id } | semmle.label | { id } | +| srv/service1.js:362:13:362:29 | id | semmle.label | id | +| srv/service1.js:362:22:362:29 | req.data | semmle.label | req.data | +| srv/service1.js:363:13:363:74 | query | semmle.label | query | +| srv/service1.js:363:21:363:74 | cds.par ... " + id) | semmle.label | cds.par ... " + id) | +| srv/service1.js:363:35:363:73 | "SELECT ... =" + id | semmle.label | "SELECT ... =" + id | +| srv/service1.js:363:72:363:73 | id | semmle.label | id | +| srv/service1.js:364:15:364:19 | query | semmle.label | query | +| srv/service1.js:368:13:368:18 | { id } | semmle.label | { id } | +| srv/service1.js:368:13:368:29 | id | semmle.label | id | +| srv/service1.js:368:22:368:29 | req.data | semmle.label | req.data | +| srv/service1.js:369:13:369:74 | query | semmle.label | query | +| srv/service1.js:369:21:369:74 | cds.par ... ` + id) | semmle.label | cds.par ... ` + id) | +| srv/service1.js:369:35:369:73 | `SELECT ... =` + id | semmle.label | `SELECT ... =` + id | +| srv/service1.js:369:72:369:73 | id | semmle.label | id | +| srv/service1.js:370:15:370:19 | query | semmle.label | query | +| srv/service1.js:374:13:374:18 | { id } | semmle.label | { id } | +| srv/service1.js:374:13:374:29 | id | semmle.label | id | +| srv/service1.js:374:22:374:29 | req.data | semmle.label | req.data | +| srv/service1.js:375:13:375:75 | query | semmle.label | query | +| srv/service1.js:375:21:375:75 | cds.par ... ${id}`) | semmle.label | cds.par ... ${id}`) | +| srv/service1.js:375:35:375:74 | `SELECT ... ${id}` | semmle.label | `SELECT ... ${id}` | +| srv/service1.js:375:71:375:72 | id | semmle.label | id | +| srv/service1.js:376:15:376:19 | query | semmle.label | query | +| srv/service1.js:387:13:387:18 | { id } | semmle.label | { id } | +| srv/service1.js:387:13:387:29 | id | semmle.label | id | +| srv/service1.js:387:22:387:29 | req.data | semmle.label | req.data | +| srv/service1.js:388:13:388:64 | query | semmle.label | query | +| srv/service1.js:388:21:388:64 | CQL("SE ... " + id) | semmle.label | CQL("SE ... " + id) | +| srv/service1.js:388:25:388:63 | "SELECT ... =" + id | semmle.label | "SELECT ... =" + id | +| srv/service1.js:388:62:388:63 | id | semmle.label | id | +| srv/service1.js:389:15:389:19 | query | semmle.label | query | +| srv/service1.js:393:13:393:18 | { id } | semmle.label | { id } | +| srv/service1.js:393:13:393:29 | id | semmle.label | id | +| srv/service1.js:393:22:393:29 | req.data | semmle.label | req.data | +| srv/service1.js:394:13:394:64 | query | semmle.label | query | +| srv/service1.js:394:21:394:64 | CQL(`SE ... ` + id) | semmle.label | CQL(`SE ... ` + id) | +| srv/service1.js:394:25:394:63 | `SELECT ... =` + id | semmle.label | `SELECT ... =` + id | +| srv/service1.js:394:62:394:63 | id | semmle.label | id | +| srv/service1.js:395:15:395:19 | query | semmle.label | query | +| srv/service1.js:399:13:399:18 | { id } | semmle.label | { id } | +| srv/service1.js:399:13:399:29 | id | semmle.label | id | +| srv/service1.js:399:22:399:29 | req.data | semmle.label | req.data | +| srv/service1.js:400:13:400:65 | query | semmle.label | query | +| srv/service1.js:400:21:400:65 | CQL(`SE ... ${id}`) | semmle.label | CQL(`SE ... ${id}`) | +| srv/service1.js:400:25:400:64 | `SELECT ... ${id}` | semmle.label | `SELECT ... ${id}` | +| srv/service1.js:400:61:400:62 | id | semmle.label | id | +| srv/service1.js:401:15:401:19 | query | semmle.label | query | +| srv/service1.js:412:13:412:18 | { id } | semmle.label | { id } | +| srv/service1.js:412:13:412:29 | id | semmle.label | id | +| srv/service1.js:412:22:412:29 | req.data | semmle.label | req.data | +| srv/service1.js:414:13:414:59 | query | semmle.label | query | +| srv/service1.js:414:58:414:59 | id | semmle.label | id | +| srv/service1.js:415:20:415:24 | query | semmle.label | query | +| srv/service1.js:419:13:419:18 | { id } | semmle.label | { id } | +| srv/service1.js:419:13:419:29 | id | semmle.label | id | +| srv/service1.js:419:22:419:29 | req.data | semmle.label | req.data | +| srv/service1.js:421:13:421:59 | query | semmle.label | query | +| srv/service1.js:421:58:421:59 | id | semmle.label | id | +| srv/service1.js:422:20:422:24 | query | semmle.label | query | +| srv/service1.js:426:13:426:18 | { id } | semmle.label | { id } | +| srv/service1.js:426:13:426:29 | id | semmle.label | id | +| srv/service1.js:426:22:426:29 | req.data | semmle.label | req.data | +| srv/service1.js:428:13:428:60 | query | semmle.label | query | +| srv/service1.js:428:57:428:58 | id | semmle.label | id | +| srv/service1.js:429:20:429:24 | query | semmle.label | query | +| srv/service1.js:434:13:434:18 | { id } | semmle.label | { id } | +| srv/service1.js:434:13:434:29 | id | semmle.label | id | +| srv/service1.js:434:22:434:29 | req.data | semmle.label | req.data | +| srv/service1.js:436:13:436:65 | query | semmle.label | query | +| srv/service1.js:436:21:436:65 | SELECT. ... " + id) | semmle.label | SELECT. ... " + id) | +| srv/service1.js:436:55:436:64 | "ID=" + id | semmle.label | "ID=" + id | +| srv/service1.js:436:63:436:64 | id | semmle.label | id | +| srv/service1.js:438:16:438:20 | query | semmle.label | query | +| srv/service1.js:443:13:443:18 | { id } | semmle.label | { id } | +| srv/service1.js:443:13:443:29 | id | semmle.label | id | +| srv/service1.js:443:22:443:29 | req.data | semmle.label | req.data | +| srv/service1.js:446:41:446:51 | "ID =" + id | semmle.label | "ID =" + id | +| srv/service1.js:446:50:446:51 | id | semmle.label | id | +| srv/service1.js:459:13:459:26 | { id, amount } | semmle.label | { id, amount } | +| srv/service1.js:459:13:459:37 | amount | semmle.label | amount | +| srv/service1.js:459:13:459:37 | id | semmle.label | id | +| srv/service1.js:459:30:459:37 | req.data | semmle.label | req.data | +| srv/service1.js:462:41:462:62 | "col1 = ... amount | semmle.label | "col1 = ... amount | +| srv/service1.js:462:57:462:62 | amount | semmle.label | amount | +| srv/service1.js:462:71:462:84 | "col1 = " + id | semmle.label | "col1 = " + id | +| srv/service1.js:462:83:462:84 | id | semmle.label | id | +| srv/service1.js:483:13:483:18 | { id } | semmle.label | { id } | +| srv/service1.js:483:13:483:29 | id | semmle.label | id | +| srv/service1.js:483:22:483:29 | req.data | semmle.label | req.data | +| srv/service1.js:486:43:486:53 | "ID =" + id | semmle.label | "ID =" + id | +| srv/service1.js:486:52:486:53 | id | semmle.label | id | +| srv/service1.js:492:13:492:18 | { id } | semmle.label | { id } | +| srv/service1.js:492:13:492:29 | id | semmle.label | id | +| srv/service1.js:492:22:492:29 | req.data | semmle.label | req.data | +| srv/service1.js:493:13:493:65 | query | semmle.label | query | +| srv/service1.js:493:21:493:65 | SELECT. ... " + id) | semmle.label | SELECT. ... " + id) | +| srv/service1.js:493:55:493:64 | "ID=" + id | semmle.label | "ID=" + id | +| srv/service1.js:493:63:493:64 | id | semmle.label | id | +| srv/service1.js:495:16:495:20 | query | semmle.label | query | +| srv/service1.js:500:13:500:18 | { id } | semmle.label | { id } | +| srv/service1.js:500:13:500:29 | id | semmle.label | id | +| srv/service1.js:500:22:500:29 | req.data | semmle.label | req.data | +| srv/service1.js:502:41:502:51 | "ID =" + id | semmle.label | "ID =" + id | +| srv/service1.js:502:50:502:51 | id | semmle.label | id | +| srv/service1.js:514:13:514:26 | { id, amount } | semmle.label | { id, amount } | +| srv/service1.js:514:13:514:37 | amount | semmle.label | amount | +| srv/service1.js:514:13:514:37 | id | semmle.label | id | +| srv/service1.js:514:30:514:37 | req.data | semmle.label | req.data | +| srv/service1.js:516:41:516:62 | "col1 = ... amount | semmle.label | "col1 = ... amount | +| srv/service1.js:516:57:516:62 | amount | semmle.label | amount | +| srv/service1.js:516:71:516:84 | "col1 = " + id | semmle.label | "col1 = " + id | +| srv/service1.js:516:83:516:84 | id | semmle.label | id | +| srv/service1.js:535:13:535:18 | { id } | semmle.label | { id } | +| srv/service1.js:535:13:535:29 | id | semmle.label | id | +| srv/service1.js:535:22:535:29 | req.data | semmle.label | req.data | +| srv/service1.js:537:43:537:53 | "ID =" + id | semmle.label | "ID =" + id | +| srv/service1.js:537:52:537:53 | id | semmle.label | id | +| srv/service1.js:543:13:543:18 | { id } | semmle.label | { id } | +| srv/service1.js:543:13:543:29 | id | semmle.label | id | +| srv/service1.js:543:22:543:29 | req.data | semmle.label | req.data | +| srv/service1.js:544:13:544:58 | query | semmle.label | query | +| srv/service1.js:544:21:544:58 | SELECT. ... " + id) | semmle.label | SELECT. ... " + id) | +| srv/service1.js:544:48:544:57 | "ID=" + id | semmle.label | "ID=" + id | +| srv/service1.js:544:56:544:57 | id | semmle.label | id | +| srv/service1.js:546:16:546:20 | query | semmle.label | query | +| srv/service1.js:551:13:551:18 | { id } | semmle.label | { id } | +| srv/service1.js:551:13:551:29 | id | semmle.label | id | +| srv/service1.js:551:22:551:29 | req.data | semmle.label | req.data | +| srv/service1.js:553:34:553:44 | "ID =" + id | semmle.label | "ID =" + id | +| srv/service1.js:553:43:553:44 | id | semmle.label | id | +| srv/service1.js:565:13:565:26 | { id, amount } | semmle.label | { id, amount } | +| srv/service1.js:565:13:565:37 | amount | semmle.label | amount | +| srv/service1.js:565:13:565:37 | id | semmle.label | id | +| srv/service1.js:565:30:565:37 | req.data | semmle.label | req.data | +| srv/service1.js:567:34:567:55 | "col1 = ... amount | semmle.label | "col1 = ... amount | +| srv/service1.js:567:50:567:55 | amount | semmle.label | amount | +| srv/service1.js:567:64:567:77 | "col1 = " + id | semmle.label | "col1 = " + id | +| srv/service1.js:567:76:567:77 | id | semmle.label | id | +| srv/service1.js:586:13:586:18 | { id } | semmle.label | { id } | +| srv/service1.js:586:13:586:29 | id | semmle.label | id | +| srv/service1.js:586:22:586:29 | req.data | semmle.label | req.data | +| srv/service1.js:588:36:588:46 | "ID =" + id | semmle.label | "ID =" + id | +| srv/service1.js:588:45:588:46 | id | semmle.label | id | +| srv/service1.js:594:13:594:18 | { id } | semmle.label | { id } | +| srv/service1.js:594:13:594:29 | id | semmle.label | id | +| srv/service1.js:594:22:594:29 | req.data | semmle.label | req.data | +| srv/service1.js:595:13:595:58 | query | semmle.label | query | +| srv/service1.js:595:21:595:58 | SELECT. ... " + id) | semmle.label | SELECT. ... " + id) | +| srv/service1.js:595:48:595:57 | "ID=" + id | semmle.label | "ID=" + id | +| srv/service1.js:595:56:595:57 | id | semmle.label | id | +| srv/service1.js:597:16:597:20 | query | semmle.label | query | +| srv/service1.js:602:13:602:18 | { id } | semmle.label | { id } | +| srv/service1.js:602:13:602:29 | id | semmle.label | id | +| srv/service1.js:602:22:602:29 | req.data | semmle.label | req.data | +| srv/service1.js:604:34:604:44 | "ID =" + id | semmle.label | "ID =" + id | +| srv/service1.js:604:43:604:44 | id | semmle.label | id | +| srv/service1.js:616:13:616:26 | { id, amount } | semmle.label | { id, amount } | +| srv/service1.js:616:13:616:37 | amount | semmle.label | amount | +| srv/service1.js:616:13:616:37 | id | semmle.label | id | +| srv/service1.js:616:30:616:37 | req.data | semmle.label | req.data | +| srv/service1.js:618:34:618:55 | "col1 = ... amount | semmle.label | "col1 = ... amount | +| srv/service1.js:618:50:618:55 | amount | semmle.label | amount | +| srv/service1.js:618:64:618:77 | "col1 = " + id | semmle.label | "col1 = " + id | +| srv/service1.js:618:76:618:77 | id | semmle.label | id | +| srv/service1.js:637:13:637:18 | { id } | semmle.label | { id } | +| srv/service1.js:637:13:637:29 | id | semmle.label | id | +| srv/service1.js:637:22:637:29 | req.data | semmle.label | req.data | +| srv/service1.js:639:36:639:46 | "ID =" + id | semmle.label | "ID =" + id | +| srv/service1.js:639:45:639:46 | id | semmle.label | id | +| srv/service1.js:645:13:645:18 | { id } | semmle.label | { id } | +| srv/service1.js:645:13:645:29 | id | semmle.label | id | +| srv/service1.js:645:22:645:29 | req.data | semmle.label | req.data | +| srv/service1.js:646:13:646:58 | query | semmle.label | query | +| srv/service1.js:646:21:646:58 | SELECT. ... " + id) | semmle.label | SELECT. ... " + id) | +| srv/service1.js:646:48:646:57 | "ID=" + id | semmle.label | "ID=" + id | +| srv/service1.js:646:56:646:57 | id | semmle.label | id | +| srv/service1.js:647:18:647:22 | query | semmle.label | query | +| srv/service1.js:651:13:651:18 | { id } | semmle.label | { id } | +| srv/service1.js:651:13:651:29 | id | semmle.label | id | +| srv/service1.js:651:22:651:29 | req.data | semmle.label | req.data | +| srv/service1.js:652:13:652:58 | query | semmle.label | query | +| srv/service1.js:652:21:652:58 | SELECT. ... ` + id) | semmle.label | SELECT. ... ` + id) | +| srv/service1.js:652:48:652:57 | `ID=` + id | semmle.label | `ID=` + id | +| srv/service1.js:652:56:652:57 | id | semmle.label | id | +| srv/service1.js:653:18:653:22 | query | semmle.label | query | +| srv/service1.js:657:13:657:18 | { id } | semmle.label | { id } | +| srv/service1.js:657:13:657:29 | id | semmle.label | id | +| srv/service1.js:657:22:657:29 | req.data | semmle.label | req.data | +| srv/service1.js:658:13:658:58 | query | semmle.label | query | +| srv/service1.js:658:21:658:58 | SELECT. ... ${id}`) | semmle.label | SELECT. ... ${id}`) | +| srv/service1.js:658:48:658:57 | `ID=${id}` | semmle.label | `ID=${id}` | +| srv/service1.js:658:54:658:55 | id | semmle.label | id | +| srv/service1.js:659:18:659:22 | query | semmle.label | query | +| srv/service1.js:669:13:669:18 | { id } | semmle.label | { id } | +| srv/service1.js:669:13:669:29 | id | semmle.label | id | +| srv/service1.js:669:22:669:29 | req.data | semmle.label | req.data | +| srv/service1.js:670:36:670:46 | "ID =" + id | semmle.label | "ID =" + id | +| srv/service1.js:670:45:670:46 | id | semmle.label | id | +| srv/service1.js:674:13:674:18 | { id } | semmle.label | { id } | +| srv/service1.js:674:13:674:29 | id | semmle.label | id | +| srv/service1.js:674:22:674:29 | req.data | semmle.label | req.data | +| srv/service1.js:675:36:675:46 | `ID =` + id | semmle.label | `ID =` + id | +| srv/service1.js:675:45:675:46 | id | semmle.label | id | +| srv/service1.js:679:13:679:18 | { id } | semmle.label | { id } | +| srv/service1.js:679:13:679:29 | id | semmle.label | id | +| srv/service1.js:679:22:679:29 | req.data | semmle.label | req.data | +| srv/service1.js:680:36:680:45 | `ID=${id}` | semmle.label | `ID=${id}` | +| srv/service1.js:680:42:680:43 | id | semmle.label | id | +| srv/service1.js:704:13:704:26 | { id, amount } | semmle.label | { id, amount } | +| srv/service1.js:704:13:704:37 | amount | semmle.label | amount | +| srv/service1.js:704:13:704:37 | id | semmle.label | id | +| srv/service1.js:704:30:704:37 | req.data | semmle.label | req.data | +| srv/service1.js:705:36:705:57 | "col1 = ... amount | semmle.label | "col1 = ... amount | +| srv/service1.js:705:52:705:57 | amount | semmle.label | amount | +| srv/service1.js:705:66:705:79 | "col1 = " + id | semmle.label | "col1 = " + id | +| srv/service1.js:705:78:705:79 | id | semmle.label | id | +| srv/service1.js:709:13:709:26 | { id, amount } | semmle.label | { id, amount } | +| srv/service1.js:709:13:709:37 | amount | semmle.label | amount | +| srv/service1.js:709:13:709:37 | id | semmle.label | id | +| srv/service1.js:709:30:709:37 | req.data | semmle.label | req.data | +| srv/service1.js:710:36:710:57 | "col1 = ... amount | semmle.label | "col1 = ... amount | +| srv/service1.js:710:52:710:57 | amount | semmle.label | amount | +| srv/service1.js:710:66:710:78 | `col1 =` + id | semmle.label | `col1 =` + id | +| srv/service1.js:710:77:710:78 | id | semmle.label | id | +| srv/service1.js:714:13:714:26 | { id, amount } | semmle.label | { id, amount } | +| srv/service1.js:714:13:714:37 | amount | semmle.label | amount | +| srv/service1.js:714:13:714:37 | id | semmle.label | id | +| srv/service1.js:714:30:714:37 | req.data | semmle.label | req.data | +| srv/service1.js:715:36:715:57 | "col1 = ... amount | semmle.label | "col1 = ... amount | +| srv/service1.js:715:52:715:57 | amount | semmle.label | amount | +| srv/service1.js:715:66:715:79 | `col1 = ${id}` | semmle.label | `col1 = ${id}` | +| srv/service1.js:715:76:715:77 | id | semmle.label | id | +| srv/service1.js:719:13:719:26 | { id, amount } | semmle.label | { id, amount } | +| srv/service1.js:719:13:719:37 | amount | semmle.label | amount | +| srv/service1.js:719:30:719:37 | req.data | semmle.label | req.data | +| srv/service1.js:720:36:720:57 | "col1 = ... amount | semmle.label | "col1 = ... amount | +| srv/service1.js:720:52:720:57 | amount | semmle.label | amount | +| srv/service1.js:754:13:754:18 | { id } | semmle.label | { id } | +| srv/service1.js:754:13:754:29 | id | semmle.label | id | +| srv/service1.js:754:22:754:29 | req.data | semmle.label | req.data | +| srv/service1.js:755:38:755:48 | "ID =" + id | semmle.label | "ID =" + id | +| srv/service1.js:755:47:755:48 | id | semmle.label | id | +| srv/service1.js:759:13:759:18 | { id } | semmle.label | { id } | +| srv/service1.js:759:13:759:29 | id | semmle.label | id | +| srv/service1.js:759:22:759:29 | req.data | semmle.label | req.data | +| srv/service1.js:760:38:760:48 | `ID =` + id | semmle.label | `ID =` + id | +| srv/service1.js:760:47:760:48 | id | semmle.label | id | +| srv/service1.js:764:13:764:18 | { id } | semmle.label | { id } | +| srv/service1.js:764:13:764:29 | id | semmle.label | id | +| srv/service1.js:764:22:764:29 | req.data | semmle.label | req.data | +| srv/service1.js:765:38:765:49 | `ID = ${id}` | semmle.label | `ID = ${id}` | +| srv/service1.js:765:46:765:47 | id | semmle.label | id | +subpaths #select | 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 | From d855b00276b5b02f3aad2e722fe45d078debeb7a Mon Sep 17 00:00:00 2001 From: Kristen Newbury Date: Fri, 15 Aug 2025 16:20:26 -0400 Subject: [PATCH 2/7] Add missing sensitive-exposure.expected from prev commit --- .../sensitive-exposure/sensitive-exposure.expected | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/javascript/frameworks/cap/test/queries/sensitive-exposure/sensitive-exposure.expected b/javascript/frameworks/cap/test/queries/sensitive-exposure/sensitive-exposure.expected index 9cb3ddafe..861771455 100644 --- a/javascript/frameworks/cap/test/queries/sensitive-exposure/sensitive-exposure.expected +++ b/javascript/frameworks/cap/test/queries/sensitive-exposure/sensitive-exposure.expected @@ -1,12 +1,6 @@ -WARNING: module 'PathGraph' has been deprecated and may be removed in future (SensitiveExposure.ql:17,8-27) -WARNING: type 'Configuration' has been deprecated and may be removed in future (SensitiveExposure.ql:43,42-70) -WARNING: type 'PathNode' has been deprecated and may be removed in future (SensitiveExposure.ql:53,41-59) -WARNING: type 'PathNode' has been deprecated and may be removed in future (SensitiveExposure.ql:53,68-86) -nodes -| sensitive-exposure.js:9:32:9:42 | Sample.name | -| sensitive-exposure.js:9:32:9:42 | Sample.name | -| sensitive-exposure.js:9:32:9:42 | Sample.name | edges -| sensitive-exposure.js:9:32:9:42 | Sample.name | sensitive-exposure.js:9:32:9:42 | Sample.name | +nodes +| sensitive-exposure.js:9:32:9:42 | Sample.name | semmle.label | Sample.name | +subpaths #select -| sensitive-exposure.js:9:32:9:42 | Sample.name | sensitive-exposure.js:9:32:9:42 | Sample.name | sensitive-exposure.js:9:32:9:42 | Sample.name | Log entry depends on the $@ field which is annotated as potentially sensitive. | sensitive-exposure.cds:4:5:4:8 | {\\n ... } | name | +| sensitive-exposure.js:9:32:9:42 | Sample.name | sensitive-exposure.js:9:32:9:42 | Sample.name | sensitive-exposure.js:9:32:9:42 | Sample.name | Log entry depends on the $@ field which is annotated as potentially sensitive. | javascript/frameworks/cap/test/queries/sensitive-exposure/sensitive-exposure.cds:4:5:4:8 | {\\n ... } | name | From dad02753b8656eaaf01778e4a709c98095fb2384 Mon Sep 17 00:00:00 2001 From: Kristen Newbury Date: Fri, 15 Aug 2025 18:28:05 -0400 Subject: [PATCH 3/7] Update dataflow library in LogInjection.ql --- .../frameworks/cap/CAPLogInjectionQuery.qll | 10 ++--- .../cap/src/loginjection/LogInjection.ql | 10 +++-- ...njection-not-depending-on-request.expected | 6 +-- .../log-injection-type-sanitized.expected | 6 +-- ...ction-with-complete-protocol-none.expected | 6 +-- ...ction-with-service1-protocol-none.expected | 20 +--------- ...ction-with-service2-protocol-none.expected | 36 +---------------- ...g-injection-without-protocol-none.expected | 39 +------------------ 8 files changed, 24 insertions(+), 109 deletions(-) diff --git a/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/CAPLogInjectionQuery.qll b/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/CAPLogInjectionQuery.qll index f207e4435..c42372ca0 100644 --- a/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/CAPLogInjectionQuery.qll +++ b/javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/CAPLogInjectionQuery.qll @@ -43,19 +43,19 @@ class CdsLogSink extends DataFlow::Node { } } -class CAPLogInjectionConfiguration extends LogInjectionConfiguration { - override predicate isSource(DataFlow::Node start) { - super.isSource(start) +module CAPLogInjectionConfiguration implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node start) { + LogInjectionConfig::isSource(start) or start instanceof RemoteFlowSource } - override predicate isBarrier(DataFlow::Node node) { + predicate isBarrier(DataFlow::Node node) { exists(HandlerParameterData handlerParameterData | node = handlerParameterData and not handlerParameterData.getType() = ["cds.String", "cds.LargeString"] ) } - override predicate isSink(DataFlow::Node end) { end instanceof CdsLogSink } + predicate isSink(DataFlow::Node end) { end instanceof CdsLogSink } } diff --git a/javascript/frameworks/cap/src/loginjection/LogInjection.ql b/javascript/frameworks/cap/src/loginjection/LogInjection.ql index d657e769f..f94ac711f 100644 --- a/javascript/frameworks/cap/src/loginjection/LogInjection.ql +++ b/javascript/frameworks/cap/src/loginjection/LogInjection.ql @@ -11,11 +11,15 @@ */ import javascript -import DataFlow::PathGraph import advanced_security.javascript.frameworks.cap.dataflow.DataFlow import advanced_security.javascript.frameworks.cap.CAPLogInjectionQuery -from CAPLogInjectionConfiguration config, DataFlow::PathNode source, DataFlow::PathNode sink -where config.hasFlowPath(source, sink) +module CAPLogInjectionConfigurationFlow = TaintTracking::Global; + +import CAPLogInjectionConfigurationFlow::PathGraph + +from + CAPLogInjectionConfigurationFlow::PathNode source, CAPLogInjectionConfigurationFlow::PathNode sink +where CAPLogInjectionConfigurationFlow::flowPath(source, sink) select sink.getNode(), source, sink, "Log entry depends on a $@.", source.getNode(), "user-provided value" diff --git a/javascript/frameworks/cap/test/queries/loginjection/log-injection-not-depending-on-request/log-injection-not-depending-on-request.expected b/javascript/frameworks/cap/test/queries/loginjection/log-injection-not-depending-on-request/log-injection-not-depending-on-request.expected index 72a7d7b51..e217064d1 100644 --- a/javascript/frameworks/cap/test/queries/loginjection/log-injection-not-depending-on-request/log-injection-not-depending-on-request.expected +++ b/javascript/frameworks/cap/test/queries/loginjection/log-injection-not-depending-on-request/log-injection-not-depending-on-request.expected @@ -1,6 +1,4 @@ -WARNING: module 'PathGraph' has been deprecated and may be removed in future (LogInjection.ql:14,8-27) -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 edges +nodes +subpaths #select diff --git a/javascript/frameworks/cap/test/queries/loginjection/log-injection-type-sanitized/log-injection-type-sanitized.expected b/javascript/frameworks/cap/test/queries/loginjection/log-injection-type-sanitized/log-injection-type-sanitized.expected index 72a7d7b51..e217064d1 100644 --- a/javascript/frameworks/cap/test/queries/loginjection/log-injection-type-sanitized/log-injection-type-sanitized.expected +++ b/javascript/frameworks/cap/test/queries/loginjection/log-injection-type-sanitized/log-injection-type-sanitized.expected @@ -1,6 +1,4 @@ -WARNING: module 'PathGraph' has been deprecated and may be removed in future (LogInjection.ql:14,8-27) -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 edges +nodes +subpaths #select diff --git a/javascript/frameworks/cap/test/queries/loginjection/log-injection-with-complete-protocol-none/log-injection-with-complete-protocol-none.expected b/javascript/frameworks/cap/test/queries/loginjection/log-injection-with-complete-protocol-none/log-injection-with-complete-protocol-none.expected index 72a7d7b51..e217064d1 100644 --- a/javascript/frameworks/cap/test/queries/loginjection/log-injection-with-complete-protocol-none/log-injection-with-complete-protocol-none.expected +++ b/javascript/frameworks/cap/test/queries/loginjection/log-injection-with-complete-protocol-none/log-injection-with-complete-protocol-none.expected @@ -1,6 +1,4 @@ -WARNING: module 'PathGraph' has been deprecated and may be removed in future (LogInjection.ql:14,8-27) -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 edges +nodes +subpaths #select 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 873e22d22..e217064d1 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 @@ -1,20 +1,4 @@ -WARNING: module 'PathGraph' has been deprecated and may be removed in future (LogInjection.ql:14,8-27) -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: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: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: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: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 } | +nodes +subpaths #select -| 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 48a59b3d5..e217064d1 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 @@ -1,36 +1,4 @@ -WARNING: module 'PathGraph' has been deprecated and may be removed in future (LogInjection.ql:14,8-27) -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: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: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: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:9:32:9:44 | messageToPass | -| srv/service2.js:9:32:9:44 | messageToPass | edges -| 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: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: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 } | +nodes +subpaths #select -| 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 0a2995286..e217064d1 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 @@ -1,39 +1,4 @@ -WARNING: module 'PathGraph' has been deprecated and may be removed in future (LogInjection.ql:14,8-27) -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: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: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: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: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: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: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 } | +nodes +subpaths #select -| 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 | From 8af5d58a4c3de1f2ae2ff1ce3c407e34647942ce Mon Sep 17 00:00:00 2001 From: Kristen Newbury Date: Fri, 15 Aug 2025 19:37:50 -0400 Subject: [PATCH 4/7] Upgrade XSJSUrlRedirect dataflow library --- .../frameworks/xsjs/XSJSUrlRedirectQuery.qll | 8 ++++---- .../src/XSJSUrlRedirect/XSJSUrlRedirect.ql | 9 ++++++--- .../XSJSUrlRedirect/XSJSUrlRedirect.expected | 20 +++++++------------ 3 files changed, 17 insertions(+), 20 deletions(-) diff --git a/javascript/frameworks/xsjs/lib/advanced_security/javascript/frameworks/xsjs/XSJSUrlRedirectQuery.qll b/javascript/frameworks/xsjs/lib/advanced_security/javascript/frameworks/xsjs/XSJSUrlRedirectQuery.qll index 83bdadff7..41783b482 100644 --- a/javascript/frameworks/xsjs/lib/advanced_security/javascript/frameworks/xsjs/XSJSUrlRedirectQuery.qll +++ b/javascript/frameworks/xsjs/lib/advanced_security/javascript/frameworks/xsjs/XSJSUrlRedirectQuery.qll @@ -2,14 +2,14 @@ import javascript import advanced_security.javascript.frameworks.xsjs.AsyncXSJS import semmle.javascript.security.dataflow.ServerSideUrlRedirectQuery as UrlRedirect -class Configuration extends UrlRedirect::Configuration { - override predicate isSource(DataFlow::Node start) { - super.isSource(start) +module Configuration implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node start) { + UrlRedirect::ServerSideUrlRedirectConfig::isSource(start) or start instanceof RemoteFlowSource } - override predicate isSink(DataFlow::Node end) { + predicate isSink(DataFlow::Node end) { exists(XSJSRequestOrResponseHeaders headers | end = headers.getHeaderSetCall("location").getArgument(1) ) diff --git a/javascript/frameworks/xsjs/src/XSJSUrlRedirect/XSJSUrlRedirect.ql b/javascript/frameworks/xsjs/src/XSJSUrlRedirect/XSJSUrlRedirect.ql index cccd24462..43fa9fd6b 100644 --- a/javascript/frameworks/xsjs/src/XSJSUrlRedirect/XSJSUrlRedirect.ql +++ b/javascript/frameworks/xsjs/src/XSJSUrlRedirect/XSJSUrlRedirect.ql @@ -12,8 +12,11 @@ import javascript import advanced_security.javascript.frameworks.xsjs.XSJSUrlRedirectQuery -import DataFlow::PathGraph -from Configuration config, DataFlow::PathNode source, DataFlow::PathNode sink -where config.hasFlowPath(source, sink) +module ConfigurationFlow = TaintTracking::Global; + +import ConfigurationFlow::PathGraph + +from ConfigurationFlow::PathNode source, ConfigurationFlow::PathNode sink +where ConfigurationFlow::flowPath(source, sink) select sink, source, sink, "$@ depends on a $@.", sink, "This URL", source, "user-provided value" diff --git a/javascript/frameworks/xsjs/test/queries/XSJSUrlRedirect/XSJSUrlRedirect.expected b/javascript/frameworks/xsjs/test/queries/XSJSUrlRedirect/XSJSUrlRedirect.expected index 66673f61b..dd42601e5 100644 --- a/javascript/frameworks/xsjs/test/queries/XSJSUrlRedirect/XSJSUrlRedirect.expected +++ b/javascript/frameworks/xsjs/test/queries/XSJSUrlRedirect/XSJSUrlRedirect.expected @@ -1,16 +1,10 @@ -WARNING: module 'PathGraph' has been deprecated and may be removed in future (XSJSUrlRedirect.ql:15,8-27) -WARNING: type 'PathNode' has been deprecated and may be removed in future (XSJSUrlRedirect.ql:17,28-46) -WARNING: type 'PathNode' has been deprecated and may be removed in future (XSJSUrlRedirect.ql:17,55-73) -nodes -| XSJSUrlRedirect.xsjs:7:7:7:65 | someParameterValue | -| XSJSUrlRedirect.xsjs:7:28:7:65 | request ... meter") | -| XSJSUrlRedirect.xsjs:7:28:7:65 | request ... meter") | -| XSJSUrlRedirect.xsjs:9:38:9:55 | someParameterValue | -| XSJSUrlRedirect.xsjs:9:38:9:55 | someParameterValue | edges -| XSJSUrlRedirect.xsjs:7:7:7:65 | someParameterValue | XSJSUrlRedirect.xsjs:9:38:9:55 | someParameterValue | -| XSJSUrlRedirect.xsjs:7:7:7:65 | someParameterValue | XSJSUrlRedirect.xsjs:9:38:9:55 | someParameterValue | -| XSJSUrlRedirect.xsjs:7:28:7:65 | request ... meter") | XSJSUrlRedirect.xsjs:7:7:7:65 | someParameterValue | -| XSJSUrlRedirect.xsjs:7:28:7:65 | request ... meter") | XSJSUrlRedirect.xsjs:7:7:7:65 | someParameterValue | +| XSJSUrlRedirect.xsjs:7:7:7:65 | someParameterValue | XSJSUrlRedirect.xsjs:9:38:9:55 | someParameterValue | provenance | | +| XSJSUrlRedirect.xsjs:7:28:7:65 | request ... meter") | XSJSUrlRedirect.xsjs:7:7:7:65 | someParameterValue | provenance | | +nodes +| XSJSUrlRedirect.xsjs:7:7:7:65 | someParameterValue | semmle.label | someParameterValue | +| XSJSUrlRedirect.xsjs:7:28:7:65 | request ... meter") | semmle.label | request ... meter") | +| XSJSUrlRedirect.xsjs:9:38:9:55 | someParameterValue | semmle.label | someParameterValue | +subpaths #select | XSJSUrlRedirect.xsjs:9:38:9:55 | someParameterValue | XSJSUrlRedirect.xsjs:7:28:7:65 | request ... meter") | XSJSUrlRedirect.xsjs:9:38:9:55 | someParameterValue | $@ depends on a $@. | XSJSUrlRedirect.xsjs:9:38:9:55 | someParameterValue | This URL | XSJSUrlRedirect.xsjs:7:28:7:65 | request ... meter") | user-provided value | From d0bd3153d70829e2282c8a71a0a357824a247d49 Mon Sep 17 00:00:00 2001 From: Kristen Newbury Date: Mon, 18 Aug 2025 12:58:14 -0400 Subject: [PATCH 5/7] Fix expected files for accidental misuse test framework --- ...ction-with-service1-protocol-none.expected | 8 +++++++ ...ction-with-service2-protocol-none.expected | 20 ++++++++++++++++ ...g-injection-without-protocol-none.expected | 23 +++++++++++++++++++ .../sensitive-exposure.expected | 2 +- 4 files changed, 52 insertions(+), 1 deletion(-) 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 e217064d1..7301469ba 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 @@ -1,4 +1,12 @@ edges +| srv/service2.js:7:15:7:31 | { messageToPass } | srv/service2.js:7:15:7:42 | messageToPass | provenance | | +| srv/service2.js:7:15:7:42 | messageToPass | srv/service2.js:9:32:9:44 | messageToPass | provenance | | +| srv/service2.js:7:35:7:42 | msg.data | srv/service2.js:7:15:7:31 | { messageToPass } | provenance | | nodes +| srv/service2.js:7:15:7:31 | { messageToPass } | semmle.label | { messageToPass } | +| srv/service2.js:7:15:7:42 | messageToPass | semmle.label | messageToPass | +| srv/service2.js:7:35:7:42 | msg.data | semmle.label | msg.data | +| srv/service2.js:9:32:9:44 | messageToPass | semmle.label | messageToPass | subpaths #select +| 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 e217064d1..2073dba67 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 @@ -1,4 +1,24 @@ edges +| srv/service1.js:7:19:7:35 | { messageToPass } | srv/service1.js:7:19:7:46 | messageToPass | provenance | | +| srv/service1.js:7:19:7:46 | messageToPass | srv/service1.js:9:38:9:50 | messageToPass | provenance | | +| srv/service1.js:7:39:7:46 | req.data | srv/service1.js:7:19:7:35 | { messageToPass } | provenance | | +| srv/service1.js:9:36:9:52 | { messageToPass } | srv/service2.js:6:29:6:31 | msg | provenance | | +| srv/service1.js:9:38:9:50 | messageToPass | srv/service1.js:9:36:9:52 | { messageToPass } | provenance | | +| srv/service2.js:6:29:6:31 | msg | srv/service2.js:7:35:7:37 | msg | provenance | | +| srv/service2.js:7:15:7:31 | { messageToPass } | srv/service2.js:7:15:7:42 | messageToPass | provenance | | +| srv/service2.js:7:15:7:42 | messageToPass | srv/service2.js:9:32:9:44 | messageToPass | provenance | | +| srv/service2.js:7:35:7:37 | msg | srv/service2.js:7:15:7:31 | { messageToPass } | provenance | | nodes +| srv/service1.js:7:19:7:35 | { messageToPass } | semmle.label | { messageToPass } | +| srv/service1.js:7:19:7:46 | messageToPass | semmle.label | messageToPass | +| srv/service1.js:7:39:7:46 | req.data | semmle.label | req.data | +| srv/service1.js:9:36:9:52 | { messageToPass } | semmle.label | { messageToPass } | +| srv/service1.js:9:38:9:50 | messageToPass | semmle.label | messageToPass | +| srv/service2.js:6:29:6:31 | msg | semmle.label | msg | +| srv/service2.js:7:15:7:31 | { messageToPass } | semmle.label | { messageToPass } | +| srv/service2.js:7:15:7:42 | messageToPass | semmle.label | messageToPass | +| srv/service2.js:7:35:7:37 | msg | semmle.label | msg | +| srv/service2.js:9:32:9:44 | messageToPass | semmle.label | messageToPass | subpaths #select +| 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 e217064d1..b243fb64b 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 @@ -1,4 +1,27 @@ edges +| srv/service1.js:7:19:7:35 | { messageToPass } | srv/service1.js:7:19:7:46 | messageToPass | provenance | | +| srv/service1.js:7:19:7:46 | messageToPass | srv/service1.js:9:38:9:50 | messageToPass | provenance | | +| srv/service1.js:7:39:7:46 | req.data | srv/service1.js:7:19:7:35 | { messageToPass } | provenance | | +| srv/service1.js:9:36:9:52 | { messageToPass } | srv/service2.js:6:29:6:31 | msg | provenance | | +| srv/service1.js:9:38:9:50 | messageToPass | srv/service1.js:9:36:9:52 | { messageToPass } | provenance | | +| srv/service2.js:6:29:6:31 | msg | srv/service2.js:7:35:7:37 | msg | provenance | | +| srv/service2.js:7:15:7:31 | { messageToPass } | srv/service2.js:7:15:7:42 | messageToPass | provenance | | +| srv/service2.js:7:15:7:42 | messageToPass | srv/service2.js:9:32:9:44 | messageToPass | provenance | | +| srv/service2.js:7:35:7:37 | msg | srv/service2.js:7:15:7:31 | { messageToPass } | provenance | | +| srv/service2.js:7:35:7:42 | msg.data | srv/service2.js:7:15:7:31 | { messageToPass } | provenance | | nodes +| srv/service1.js:7:19:7:35 | { messageToPass } | semmle.label | { messageToPass } | +| srv/service1.js:7:19:7:46 | messageToPass | semmle.label | messageToPass | +| srv/service1.js:7:39:7:46 | req.data | semmle.label | req.data | +| srv/service1.js:9:36:9:52 | { messageToPass } | semmle.label | { messageToPass } | +| srv/service1.js:9:38:9:50 | messageToPass | semmle.label | messageToPass | +| srv/service2.js:6:29:6:31 | msg | semmle.label | msg | +| srv/service2.js:7:15:7:31 | { messageToPass } | semmle.label | { messageToPass } | +| srv/service2.js:7:15:7:42 | messageToPass | semmle.label | messageToPass | +| srv/service2.js:7:35:7:37 | msg | semmle.label | msg | +| srv/service2.js:7:35:7:42 | msg.data | semmle.label | msg.data | +| srv/service2.js:9:32:9:44 | messageToPass | semmle.label | messageToPass | subpaths #select +| 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 | diff --git a/javascript/frameworks/cap/test/queries/sensitive-exposure/sensitive-exposure.expected b/javascript/frameworks/cap/test/queries/sensitive-exposure/sensitive-exposure.expected index 861771455..18517fc50 100644 --- a/javascript/frameworks/cap/test/queries/sensitive-exposure/sensitive-exposure.expected +++ b/javascript/frameworks/cap/test/queries/sensitive-exposure/sensitive-exposure.expected @@ -3,4 +3,4 @@ nodes | sensitive-exposure.js:9:32:9:42 | Sample.name | semmle.label | Sample.name | subpaths #select -| sensitive-exposure.js:9:32:9:42 | Sample.name | sensitive-exposure.js:9:32:9:42 | Sample.name | sensitive-exposure.js:9:32:9:42 | Sample.name | Log entry depends on the $@ field which is annotated as potentially sensitive. | javascript/frameworks/cap/test/queries/sensitive-exposure/sensitive-exposure.cds:4:5:4:8 | {\\n ... } | name | +| sensitive-exposure.js:9:32:9:42 | Sample.name | sensitive-exposure.js:9:32:9:42 | Sample.name | sensitive-exposure.js:9:32:9:42 | Sample.name | Log entry depends on the $@ field which is annotated as potentially sensitive. | sensitive-exposure.cds:4:5:4:8 | {\\n ... } | name | From c25f324c77ceb85115714a550a8dd99f31eb707e Mon Sep 17 00:00:00 2001 From: Kristen Newbury Date: Mon, 18 Aug 2025 13:37:19 -0400 Subject: [PATCH 6/7] Upgrade dataflow library XSJSSqlInjection --- .../frameworks/xsjs/XSJSSqlInjectionQuery.qll | 14 +++-- .../src/XSJSSqlInjection/XSJSSqlInjection.ql | 9 ++-- .../XSJSSqlInjection.expected | 52 ++++++++----------- 3 files changed, 37 insertions(+), 38 deletions(-) diff --git a/javascript/frameworks/xsjs/lib/advanced_security/javascript/frameworks/xsjs/XSJSSqlInjectionQuery.qll b/javascript/frameworks/xsjs/lib/advanced_security/javascript/frameworks/xsjs/XSJSSqlInjectionQuery.qll index 6e2b1fc25..441bdfa65 100644 --- a/javascript/frameworks/xsjs/lib/advanced_security/javascript/frameworks/xsjs/XSJSSqlInjectionQuery.qll +++ b/javascript/frameworks/xsjs/lib/advanced_security/javascript/frameworks/xsjs/XSJSSqlInjectionQuery.qll @@ -12,14 +12,20 @@ class XSJSDBConnectionPrepareStatementArgument extends DataFlow::ValueNode { predicate isConcatenated() { this.getAPredecessor+() instanceof StringOps::ConcatenationNode } } -class Configuration extends SqlInjection::Configuration { - override predicate isSource(DataFlow::Node start) { - super.isSource(start) +module Configuration implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node start) { + SqlInjection::SqlInjectionConfig::isSource(start) or start instanceof RemoteFlowSource } - override predicate isSink(DataFlow::Node end) { + predicate isSink(DataFlow::Node end) { end.(XSJSDBConnectionPrepareStatementArgument).isConcatenated() } + + predicate isBarrier(DataFlow::Node node) { SqlInjection::SqlInjectionConfig::isBarrier(node) } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + SqlInjection::SqlInjectionConfig::isAdditionalFlowStep(node1, node2) + } } diff --git a/javascript/frameworks/xsjs/src/XSJSSqlInjection/XSJSSqlInjection.ql b/javascript/frameworks/xsjs/src/XSJSSqlInjection/XSJSSqlInjection.ql index c58edb237..cfd1370fc 100644 --- a/javascript/frameworks/xsjs/src/XSJSSqlInjection/XSJSSqlInjection.ql +++ b/javascript/frameworks/xsjs/src/XSJSSqlInjection/XSJSSqlInjection.ql @@ -12,8 +12,11 @@ import javascript import advanced_security.javascript.frameworks.xsjs.XSJSSqlInjectionQuery -import DataFlow::PathGraph -from Configuration config, DataFlow::PathNode source, DataFlow::PathNode sink -where config.hasFlowPath(source, sink) +module ConfigurationFlow = TaintTracking::Global; + +import ConfigurationFlow::PathGraph + +from ConfigurationFlow::PathNode source, ConfigurationFlow::PathNode sink +where ConfigurationFlow::flowPath(source, sink) select sink, source, sink, "This query depends on a $@.", source, "user-provided value" diff --git a/javascript/frameworks/xsjs/test/queries/XSJSSqlInjection/XSJSSqlInjection.expected b/javascript/frameworks/xsjs/test/queries/XSJSSqlInjection/XSJSSqlInjection.expected index a5329f010..3d3f49f4d 100644 --- a/javascript/frameworks/xsjs/test/queries/XSJSSqlInjection/XSJSSqlInjection.expected +++ b/javascript/frameworks/xsjs/test/queries/XSJSSqlInjection/XSJSSqlInjection.expected @@ -1,35 +1,25 @@ -WARNING: module 'PathGraph' has been deprecated and may be removed in future (XSJSSqlInjection.ql:15,8-27) -WARNING: type 'PathNode' has been deprecated and may be removed in future (XSJSSqlInjection.ql:17,28-46) -WARNING: type 'PathNode' has been deprecated and may be removed in future (XSJSSqlInjection.ql:17,55-73) -nodes -| XSJSSqlInjection.xsjs:8:7:8:79 | someParameterValue1 | -| XSJSSqlInjection.xsjs:8:29:8:79 | JSON.pa ... ter1")) | -| XSJSSqlInjection.xsjs:8:40:8:78 | request ... eter1") | -| XSJSSqlInjection.xsjs:8:40:8:78 | request ... eter1") | -| XSJSSqlInjection.xsjs:9:7:9:79 | someParameterValue2 | -| XSJSSqlInjection.xsjs:9:29:9:79 | JSON.pa ... ter2")) | -| XSJSSqlInjection.xsjs:9:40:9:78 | request ... eter2") | -| XSJSSqlInjection.xsjs:9:40:9:78 | request ... eter2") | -| XSJSSqlInjection.xsjs:10:7:10:106 | query | -| XSJSSqlInjection.xsjs:10:15:10:106 | "INSERT ... 2 + ")" | -| XSJSSqlInjection.xsjs:10:32:10:50 | someParameterValue1 | -| XSJSSqlInjection.xsjs:10:82:10:100 | someParameterValue2 | -| XSJSSqlInjection.xsjs:13:57:13:61 | query | -| XSJSSqlInjection.xsjs:13:57:13:61 | query | edges -| XSJSSqlInjection.xsjs:8:7:8:79 | someParameterValue1 | XSJSSqlInjection.xsjs:10:32:10:50 | someParameterValue1 | -| XSJSSqlInjection.xsjs:8:29:8:79 | JSON.pa ... ter1")) | XSJSSqlInjection.xsjs:8:7:8:79 | someParameterValue1 | -| XSJSSqlInjection.xsjs:8:40:8:78 | request ... eter1") | XSJSSqlInjection.xsjs:8:29:8:79 | JSON.pa ... ter1")) | -| XSJSSqlInjection.xsjs:8:40:8:78 | request ... eter1") | XSJSSqlInjection.xsjs:8:29:8:79 | JSON.pa ... ter1")) | -| XSJSSqlInjection.xsjs:9:7:9:79 | someParameterValue2 | XSJSSqlInjection.xsjs:10:82:10:100 | someParameterValue2 | -| XSJSSqlInjection.xsjs:9:29:9:79 | JSON.pa ... ter2")) | XSJSSqlInjection.xsjs:9:7:9:79 | someParameterValue2 | -| XSJSSqlInjection.xsjs:9:40:9:78 | request ... eter2") | XSJSSqlInjection.xsjs:9:29:9:79 | JSON.pa ... ter2")) | -| XSJSSqlInjection.xsjs:9:40:9:78 | request ... eter2") | XSJSSqlInjection.xsjs:9:29:9:79 | JSON.pa ... ter2")) | -| XSJSSqlInjection.xsjs:10:7:10:106 | query | XSJSSqlInjection.xsjs:13:57:13:61 | query | -| XSJSSqlInjection.xsjs:10:7:10:106 | query | XSJSSqlInjection.xsjs:13:57:13:61 | query | -| XSJSSqlInjection.xsjs:10:15:10:106 | "INSERT ... 2 + ")" | XSJSSqlInjection.xsjs:10:7:10:106 | query | -| XSJSSqlInjection.xsjs:10:32:10:50 | someParameterValue1 | XSJSSqlInjection.xsjs:10:15:10:106 | "INSERT ... 2 + ")" | -| XSJSSqlInjection.xsjs:10:82:10:100 | someParameterValue2 | XSJSSqlInjection.xsjs:10:15:10:106 | "INSERT ... 2 + ")" | +| XSJSSqlInjection.xsjs:8:7:8:79 | someParameterValue1 | XSJSSqlInjection.xsjs:10:32:10:50 | someParameterValue1 | provenance | | +| XSJSSqlInjection.xsjs:8:29:8:79 | JSON.pa ... ter1")) | XSJSSqlInjection.xsjs:8:7:8:79 | someParameterValue1 | provenance | | +| XSJSSqlInjection.xsjs:8:40:8:78 | request ... eter1") | XSJSSqlInjection.xsjs:8:29:8:79 | JSON.pa ... ter1")) | provenance | | +| XSJSSqlInjection.xsjs:9:7:9:79 | someParameterValue2 | XSJSSqlInjection.xsjs:10:82:10:100 | someParameterValue2 | provenance | | +| XSJSSqlInjection.xsjs:9:29:9:79 | JSON.pa ... ter2")) | XSJSSqlInjection.xsjs:9:7:9:79 | someParameterValue2 | provenance | | +| XSJSSqlInjection.xsjs:9:40:9:78 | request ... eter2") | XSJSSqlInjection.xsjs:9:29:9:79 | JSON.pa ... ter2")) | provenance | | +| XSJSSqlInjection.xsjs:10:7:10:106 | query | XSJSSqlInjection.xsjs:13:57:13:61 | query | provenance | | +| XSJSSqlInjection.xsjs:10:32:10:50 | someParameterValue1 | XSJSSqlInjection.xsjs:10:7:10:106 | query | provenance | | +| XSJSSqlInjection.xsjs:10:82:10:100 | someParameterValue2 | XSJSSqlInjection.xsjs:10:7:10:106 | query | provenance | | +nodes +| XSJSSqlInjection.xsjs:8:7:8:79 | someParameterValue1 | semmle.label | someParameterValue1 | +| XSJSSqlInjection.xsjs:8:29:8:79 | JSON.pa ... ter1")) | semmle.label | JSON.pa ... ter1")) | +| XSJSSqlInjection.xsjs:8:40:8:78 | request ... eter1") | semmle.label | request ... eter1") | +| XSJSSqlInjection.xsjs:9:7:9:79 | someParameterValue2 | semmle.label | someParameterValue2 | +| XSJSSqlInjection.xsjs:9:29:9:79 | JSON.pa ... ter2")) | semmle.label | JSON.pa ... ter2")) | +| XSJSSqlInjection.xsjs:9:40:9:78 | request ... eter2") | semmle.label | request ... eter2") | +| XSJSSqlInjection.xsjs:10:7:10:106 | query | semmle.label | query | +| XSJSSqlInjection.xsjs:10:32:10:50 | someParameterValue1 | semmle.label | someParameterValue1 | +| XSJSSqlInjection.xsjs:10:82:10:100 | someParameterValue2 | semmle.label | someParameterValue2 | +| XSJSSqlInjection.xsjs:13:57:13:61 | query | semmle.label | query | +subpaths #select | XSJSSqlInjection.xsjs:13:57:13:61 | query | XSJSSqlInjection.xsjs:8:40:8:78 | request ... eter1") | XSJSSqlInjection.xsjs:13:57:13:61 | query | This query depends on a $@. | XSJSSqlInjection.xsjs:8:40:8:78 | request ... eter1") | user-provided value | | XSJSSqlInjection.xsjs:13:57:13:61 | query | XSJSSqlInjection.xsjs:9:40:9:78 | request ... eter2") | XSJSSqlInjection.xsjs:13:57:13:61 | query | This query depends on a $@. | XSJSSqlInjection.xsjs:9:40:9:78 | request ... eter2") | user-provided value | From c6fa3dad2502bb3c77725104f4820ce3ccc6f161 Mon Sep 17 00:00:00 2001 From: Kristen Newbury Date: Mon, 18 Aug 2025 15:47:38 -0400 Subject: [PATCH 7/7] Upgrade dataflow library XSJSReflectedXss --- .../frameworks/xsjs/XSJSReflectedXssQuery.qll | 12 ++++--- .../src/XSJSReflectedXss/XSJSReflectedXss.ql | 9 ++++-- .../XSJSReflectedXss.expected | 31 ++++++++++--------- 3 files changed, 30 insertions(+), 22 deletions(-) diff --git a/javascript/frameworks/xsjs/lib/advanced_security/javascript/frameworks/xsjs/XSJSReflectedXssQuery.qll b/javascript/frameworks/xsjs/lib/advanced_security/javascript/frameworks/xsjs/XSJSReflectedXssQuery.qll index 1ebfea821..e149630a9 100644 --- a/javascript/frameworks/xsjs/lib/advanced_security/javascript/frameworks/xsjs/XSJSReflectedXssQuery.qll +++ b/javascript/frameworks/xsjs/lib/advanced_security/javascript/frameworks/xsjs/XSJSReflectedXssQuery.qll @@ -13,13 +13,13 @@ class XSJSResponseSetBodyCall extends MethodCallNode { XSJSResponse getParentXSJSResponse() { result = response } } -class Configuration extends ReflectedXssQuery::Configuration { - override predicate isSource(DataFlow::Node start) { - super.isSource(start) or +module Configuration implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node start) { + ReflectedXssQuery::ReflectedXssConfig::isSource(start) or start instanceof RemoteFlowSource } - override predicate isSink(DataFlow::Node end) { + predicate isSink(DataFlow::Node end) { exists(XSJSResponseSetBodyCall setBody, XSJSResponse thisOrAnotherXSJSResponse | thisOrAnotherXSJSResponse = setBody.getParentXSJSResponse() or thisOrAnotherXSJSResponse = setBody.getParentXSJSResponse().getAPredOrSuccResponse() @@ -31,4 +31,8 @@ class Configuration extends ReflectedXssQuery::Configuration { ) ) } + + predicate isBarrier(DataFlow::Node node) { + ReflectedXssQuery::ReflectedXssConfig::isBarrier(node) + } } diff --git a/javascript/frameworks/xsjs/src/XSJSReflectedXss/XSJSReflectedXss.ql b/javascript/frameworks/xsjs/src/XSJSReflectedXss/XSJSReflectedXss.ql index d409abc10..b0849a5bf 100644 --- a/javascript/frameworks/xsjs/src/XSJSReflectedXss/XSJSReflectedXss.ql +++ b/javascript/frameworks/xsjs/src/XSJSReflectedXss/XSJSReflectedXss.ql @@ -12,8 +12,11 @@ import javascript import advanced_security.javascript.frameworks.xsjs.XSJSReflectedXssQuery -import DataFlow::PathGraph -from Configuration config, DataFlow::PathNode source, DataFlow::PathNode sink -where config.hasFlowPath(source, sink) +module ConfigurationFlow = TaintTracking::Global; + +import ConfigurationFlow::PathGraph + +from ConfigurationFlow::PathNode source, ConfigurationFlow::PathNode sink +where ConfigurationFlow::flowPath(source, sink) select sink, source, sink, "Reflected XSS vulnerability due to $@.", source, "user-provided value" diff --git a/javascript/frameworks/xsjs/test/queries/XSJSReflectedXss/XSJSReflectedXss.expected b/javascript/frameworks/xsjs/test/queries/XSJSReflectedXss/XSJSReflectedXss.expected index e4135b83f..cfb1ba861 100644 --- a/javascript/frameworks/xsjs/test/queries/XSJSReflectedXss/XSJSReflectedXss.expected +++ b/javascript/frameworks/xsjs/test/queries/XSJSReflectedXss/XSJSReflectedXss.expected @@ -1,18 +1,19 @@ -WARNING: module 'PathGraph' has been deprecated and may be removed in future (XSJSReflectedXss.ql:15,8-27) -WARNING: type 'PathNode' has been deprecated and may be removed in future (XSJSReflectedXss.ql:17,28-46) -WARNING: type 'PathNode' has been deprecated and may be removed in future (XSJSReflectedXss.ql:17,55-73) -nodes -| XSJSReflectedXss.xsjs:11:7:11:67 | someParameterValue1 | -| XSJSReflectedXss.xsjs:11:29:11:67 | request ... eter1") | -| XSJSReflectedXss.xsjs:11:29:11:67 | request ... eter1") | -| XSJSReflectedXss.xsjs:13:22:13:65 | request ... Value1) | -| XSJSReflectedXss.xsjs:13:22:13:65 | request ... Value1) | -| XSJSReflectedXss.xsjs:13:46:13:64 | someParameterValue1 | edges -| XSJSReflectedXss.xsjs:11:7:11:67 | someParameterValue1 | XSJSReflectedXss.xsjs:13:46:13:64 | someParameterValue1 | -| XSJSReflectedXss.xsjs:11:29:11:67 | request ... eter1") | XSJSReflectedXss.xsjs:11:7:11:67 | someParameterValue1 | -| XSJSReflectedXss.xsjs:11:29:11:67 | request ... eter1") | XSJSReflectedXss.xsjs:11:7:11:67 | someParameterValue1 | -| XSJSReflectedXss.xsjs:13:46:13:64 | someParameterValue1 | XSJSReflectedXss.xsjs:13:22:13:65 | request ... Value1) | -| XSJSReflectedXss.xsjs:13:46:13:64 | someParameterValue1 | XSJSReflectedXss.xsjs:13:22:13:65 | request ... Value1) | +| XSJSReflectedXss.xsjs:3:34:3:50 | requestParameters | XSJSReflectedXss.xsjs:4:20:4:36 | requestParameters | provenance | | +| XSJSReflectedXss.xsjs:4:20:4:36 | requestParameters | XSJSReflectedXss.xsjs:4:10:4:47 | "
" ...
" | provenance | | +| XSJSReflectedXss.xsjs:11:7:11:67 | someParameterValue1 | XSJSReflectedXss.xsjs:13:46:13:64 | someParameterValue1 | provenance | | +| XSJSReflectedXss.xsjs:11:29:11:67 | request ... eter1") | XSJSReflectedXss.xsjs:11:7:11:67 | someParameterValue1 | provenance | | +| XSJSReflectedXss.xsjs:13:46:13:64 | someParameterValue1 | XSJSReflectedXss.xsjs:3:34:3:50 | requestParameters | provenance | | +| XSJSReflectedXss.xsjs:13:46:13:64 | someParameterValue1 | XSJSReflectedXss.xsjs:13:22:13:65 | request ... Value1) | provenance | | +nodes +| XSJSReflectedXss.xsjs:3:34:3:50 | requestParameters | semmle.label | requestParameters | +| XSJSReflectedXss.xsjs:4:10:4:47 | "
" ...
" | semmle.label | "
" ...
" | +| XSJSReflectedXss.xsjs:4:20:4:36 | requestParameters | semmle.label | requestParameters | +| XSJSReflectedXss.xsjs:11:7:11:67 | someParameterValue1 | semmle.label | someParameterValue1 | +| XSJSReflectedXss.xsjs:11:29:11:67 | request ... eter1") | semmle.label | request ... eter1") | +| XSJSReflectedXss.xsjs:13:22:13:65 | request ... Value1) | semmle.label | request ... Value1) | +| XSJSReflectedXss.xsjs:13:46:13:64 | someParameterValue1 | semmle.label | someParameterValue1 | +subpaths +| XSJSReflectedXss.xsjs:13:46:13:64 | someParameterValue1 | XSJSReflectedXss.xsjs:3:34:3:50 | requestParameters | XSJSReflectedXss.xsjs:4:10:4:47 | "
" ...
" | XSJSReflectedXss.xsjs:13:22:13:65 | request ... Value1) | #select | XSJSReflectedXss.xsjs:13:22:13:65 | request ... Value1) | XSJSReflectedXss.xsjs:11:29:11:67 | request ... eter1") | XSJSReflectedXss.xsjs:13:22:13:65 | request ... Value1) | Reflected XSS vulnerability due to $@. | XSJSReflectedXss.xsjs:11:29:11:67 | request ... eter1") | user-provided value |