Skip to content

Commit 63aaf24

Browse files
author
Stephan Brandauer
committed
base implementation of Sequelize model on models-as-data
1 parent 09a28c4 commit 63aaf24

File tree

1 file changed

+10
-29
lines changed
  • javascript/ql/lib/semmle/javascript/frameworks

1 file changed

+10
-29
lines changed

javascript/ql/lib/semmle/javascript/frameworks/SQL.qll

Lines changed: 10 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -435,16 +435,15 @@ private module MsSql {
435435
API::Node pool() { result = mssqlClass("ConnectionPool") }
436436

437437
/** A tagged template evaluated as a query. */
438-
private class QueryTemplateExpr extends DatabaseAccess, DataFlow::ValueNode {
438+
private class QueryTemplateExpr extends DatabaseAccess, DataFlow::ValueNode, DataFlow::SourceNode {
439439
override TaggedTemplateExpr astNode;
440440

441441
QueryTemplateExpr() {
442442
mssql().getMember("query").getAUse() = DataFlow::valueNode(astNode.getTag())
443443
}
444444

445445
override DataFlow::Node getAResult() {
446-
PromiseFlow::loadStep(this.(DataFlow::SourceNode).getALocalUse(), result,
447-
Promises::valueProp())
446+
PromiseFlow::loadStep(this.getALocalUse(), result, Promises::valueProp())
448447
}
449448

450449
override DataFlow::Node getAQueryArgument() {
@@ -524,31 +523,6 @@ private module Sequelize {
524523
}
525524
}
526525

527-
/** Gets an import of the `sequelize` module or one that re-exports it. */
528-
API::Node sequelize() { result = API::moduleImport(["sequelize", "sequelize-typescript"]) }
529-
530-
/** Gets an expression that creates an instance of the `Sequelize` class. */
531-
API::Node instance() {
532-
result = [sequelize(), sequelize().getMember("Sequelize")].getInstance()
533-
or
534-
result = API::Node::ofType(["sequelize", "sequelize-typescript"], ["Sequelize", "default"])
535-
}
536-
537-
/** A call to `Sequelize.query`. */
538-
private class QueryCall extends DatabaseAccess, DataFlow::MethodCallNode {
539-
QueryCall() { this = instance().getMember("query").getACall() }
540-
541-
override DataFlow::Node getAResult() {
542-
PromiseFlow::loadStep(this.getALocalUse(), result, Promises::valueProp())
543-
}
544-
545-
override DataFlow::Node getAQueryArgument() {
546-
result = this.getArgument(0)
547-
or
548-
result = this.getOptionArgument(0, "query")
549-
}
550-
}
551-
552526
class SequelizeSink extends ModelInput::SinkModelCsv {
553527
override predicate row(string row) {
554528
row =
@@ -563,6 +537,12 @@ private module Sequelize {
563537
]
564538
}
565539
}
540+
541+
class SequelizeSource extends ModelInput::SourceModelCsv {
542+
override predicate row(string row) {
543+
row = "sequelize;Sequelize;Member[query].ReturnValue.Awaited;database-access-result"
544+
}
545+
}
566546
}
567547

568548
private module SpannerCsv {
@@ -615,7 +595,8 @@ private module SpannerCsv {
615595

616596
override predicate row(string row) {
617597
row =
618-
"@google-cloud/spanner;" + spannerClass() + ";" + resultPath() + ";database-access-result"
598+
"@google-cloud/spanner;" + this.spannerClass() + ";" + this.resultPath() +
599+
";database-access-result"
619600
}
620601
}
621602
}

0 commit comments

Comments
 (0)