mirror of
https://github.com/github/codeql.git
synced 2026-04-18 05:24:01 +02:00
Merge branch 'main' into goSqlInjection
This commit is contained in:
2
.github/workflows/csharp-qltest.yml
vendored
2
.github/workflows/csharp-qltest.yml
vendored
@@ -67,7 +67,7 @@ jobs:
|
||||
mv "$CODEQL_PATH/csharp/tools/extractor-asp.jar" "${{ github.workspace }}/csharp/extractor-pack/tools"
|
||||
# Safe guard against using the bundled extractor
|
||||
rm -rf "$CODEQL_PATH/csharp"
|
||||
codeql test run --threads=0 --ram 52000 --slice ${{ matrix.slice }} --search-path "${{ github.workspace }}/csharp/extractor-pack" --check-databases --check-undefined-labels --check-repeated-labels --check-redefined-labels --consistency-queries ql/consistency-queries ql/test --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}"
|
||||
codeql test run --threads=0 --ram 50000 --slice ${{ matrix.slice }} --search-path "${{ github.workspace }}/csharp/extractor-pack" --check-databases --check-undefined-labels --check-repeated-labels --check-redefined-labels --consistency-queries ql/consistency-queries ql/test --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}"
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
unit-tests:
|
||||
|
||||
4
.github/workflows/js-ml-tests.yml
vendored
4
.github/workflows/js-ml-tests.yml
vendored
@@ -47,7 +47,7 @@ jobs:
|
||||
run: |
|
||||
codeql query compile \
|
||||
--check-only \
|
||||
--ram 52000 \
|
||||
--ram 50000 \
|
||||
--additional-packs "${{ github.workspace }}" \
|
||||
--threads=0 \
|
||||
--compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" \
|
||||
@@ -58,7 +58,7 @@ jobs:
|
||||
run: |
|
||||
codeql test run \
|
||||
--threads=0 \
|
||||
--ram 52000 \
|
||||
--ram 50000 \
|
||||
--additional-packs "${{ github.workspace }}" \
|
||||
--compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" \
|
||||
-- \
|
||||
|
||||
2
.github/workflows/ruby-qltest.yml
vendored
2
.github/workflows/ruby-qltest.yml
vendored
@@ -62,6 +62,6 @@ jobs:
|
||||
key: ruby-qltest
|
||||
- name: Run QL tests
|
||||
run: |
|
||||
codeql test run --threads=0 --ram 52000 --search-path "${{ github.workspace }}/ruby/extractor-pack" --check-databases --check-undefined-labels --check-unused-labels --check-repeated-labels --check-redefined-labels --check-use-before-definition --consistency-queries ql/consistency-queries ql/test --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}"
|
||||
codeql test run --threads=0 --ram 50000 --search-path "${{ github.workspace }}/ruby/extractor-pack" --check-databases --check-undefined-labels --check-unused-labels --check-repeated-labels --check-redefined-labels --check-use-before-definition --consistency-queries ql/consistency-queries ql/test --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}"
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
|
||||
@@ -520,7 +520,8 @@ module Private {
|
||||
predicate summaryParameterNodeRange(SummarizedCallable c, ParameterPosition pos) {
|
||||
parameterReadState(c, _, pos)
|
||||
or
|
||||
isParameterPostUpdate(_, c, pos)
|
||||
// Same as `isParameterPostUpdate(_, c, pos)`, but can be used in a negative context
|
||||
any(SummaryNodeState state).isOutputState(c, SummaryComponentStack::argument(pos))
|
||||
}
|
||||
|
||||
private predicate callbackOutput(
|
||||
|
||||
@@ -520,7 +520,8 @@ module Private {
|
||||
predicate summaryParameterNodeRange(SummarizedCallable c, ParameterPosition pos) {
|
||||
parameterReadState(c, _, pos)
|
||||
or
|
||||
isParameterPostUpdate(_, c, pos)
|
||||
// Same as `isParameterPostUpdate(_, c, pos)`, but can be used in a negative context
|
||||
any(SummaryNodeState state).isOutputState(c, SummaryComponentStack::argument(pos))
|
||||
}
|
||||
|
||||
private predicate callbackOutput(
|
||||
|
||||
@@ -520,7 +520,8 @@ module Private {
|
||||
predicate summaryParameterNodeRange(SummarizedCallable c, ParameterPosition pos) {
|
||||
parameterReadState(c, _, pos)
|
||||
or
|
||||
isParameterPostUpdate(_, c, pos)
|
||||
// Same as `isParameterPostUpdate(_, c, pos)`, but can be used in a negative context
|
||||
any(SummaryNodeState state).isOutputState(c, SummaryComponentStack::argument(pos))
|
||||
}
|
||||
|
||||
private predicate callbackOutput(
|
||||
|
||||
@@ -561,6 +561,9 @@ module API {
|
||||
/** Gets a node whose type has the given qualified name, not including types from models. */
|
||||
Node getANodeOfTypeRaw(string moduleName, string exportedName) {
|
||||
result = Impl::MkTypeUse(moduleName, exportedName).(Node).getInstance()
|
||||
or
|
||||
exportedName = "" and
|
||||
result = getAModuleImportRaw(moduleName)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ private module MongoDB {
|
||||
override predicate row(string row) {
|
||||
// In Mongo version 2.x, a client and a database handle were the same concept, but in 3.x
|
||||
// they were separated. To handle everything with a single model, we treat them as the same here.
|
||||
row = "mongodb;Db;mongodb;MongoClient;"
|
||||
row = "mongodb.Db;mongodb.MongoClient;"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,11 +42,11 @@ private module MongoDB {
|
||||
/** A call to a MongoDB query method. */
|
||||
private class QueryCall extends DatabaseAccess, API::CallNode {
|
||||
QueryCall() {
|
||||
this = ModelOutput::getATypeNode("mongodb", "Collection").getAMember().getACall() and
|
||||
this = ModelOutput::getATypeNode("mongodb.Collection").getAMember().getACall() and
|
||||
not this.getCalleeName() = ["toString", "valueOf", "getLogger"]
|
||||
or
|
||||
this =
|
||||
ModelOutput::getATypeNode("mongodb", ["Db", "MongoClient"])
|
||||
ModelOutput::getATypeNode(["mongodb.Db", "mongodb.MongoClient"])
|
||||
.getMember(["watch", "aggregate"])
|
||||
.getACall()
|
||||
}
|
||||
@@ -63,7 +63,7 @@ private module MongoDB {
|
||||
|
||||
private class Insertion extends DatabaseAccess, API::CallNode {
|
||||
Insertion() {
|
||||
this = ModelOutput::getATypeNode("mongodb", "Collection").getAMember().getACall() and
|
||||
this = ModelOutput::getATypeNode("mongodb.Collection").getAMember().getACall() and
|
||||
this.getCalleeName().matches("insert%")
|
||||
}
|
||||
|
||||
@@ -105,9 +105,7 @@ private module Mongoose {
|
||||
private class QueryCall extends DatabaseAccess, API::CallNode {
|
||||
QueryCall() {
|
||||
this =
|
||||
ModelOutput::getATypeNode("mongoose", "Query")
|
||||
.getMember(["exec", "then", "catch"])
|
||||
.getACall()
|
||||
ModelOutput::getATypeNode("mongoose.Query").getMember(["exec", "then", "catch"]).getACall()
|
||||
}
|
||||
|
||||
override DataFlow::Node getAQueryArgument() { result = this.getReceiver() }
|
||||
@@ -132,10 +130,10 @@ private module Mongoose {
|
||||
private class QueryWithCallback extends DatabaseAccess, API::CallNode {
|
||||
QueryWithCallback() {
|
||||
this =
|
||||
ModelOutput::getATypeNode("mongoose", ["Document", "Model", "Query"])
|
||||
ModelOutput::getATypeNode(["mongoose.Document", "mongoose.Model", "mongoose.Query"])
|
||||
.getAMember()
|
||||
.getACall() and
|
||||
this.getReturn() = ModelOutput::getATypeNode("mongoose", "Query") and
|
||||
this.getReturn() = ModelOutput::getATypeNode("mongoose.Query") and
|
||||
exists(this.getLastArgument().getABoundFunctionValue(_))
|
||||
}
|
||||
|
||||
@@ -152,7 +150,7 @@ private module Mongoose {
|
||||
|
||||
QueryAwait() {
|
||||
astNode.getOperand().flow() =
|
||||
ModelOutput::getATypeNode("mongoose", "Query").getAValueReachableFromSource()
|
||||
ModelOutput::getATypeNode("mongoose.Query").getAValueReachableFromSource()
|
||||
}
|
||||
|
||||
override DataFlow::Node getAQueryArgument() { result = astNode.getOperand().flow() }
|
||||
@@ -162,7 +160,7 @@ private module Mongoose {
|
||||
|
||||
class Insertion extends DatabaseAccess, API::CallNode {
|
||||
Insertion() {
|
||||
this = ModelOutput::getATypeNode("mongoose", "Model").getAMember().getACall() and
|
||||
this = ModelOutput::getATypeNode("mongoose.Model").getAMember().getACall() and
|
||||
this.getCalleeName().matches("insert%")
|
||||
}
|
||||
|
||||
@@ -180,9 +178,9 @@ private module MarsDB {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"mongoose;Query;marsdb;;Member[Collection].Instance",
|
||||
"mongoose;Model;marsdb;;Member[Collection].Instance",
|
||||
"mongoose;Query;mongoose;Query;Member[sortFunc].ReturnValue",
|
||||
"mongoose.Query;marsdb;Member[Collection].Instance",
|
||||
"mongoose.Model;marsdb;Member[Collection].Instance",
|
||||
"mongoose.Query;mongoose.Query;Member[sortFunc].ReturnValue",
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -357,7 +357,7 @@ private module Sequelize {
|
||||
// Note: the sinks are specified directly in the MaD model
|
||||
class SequelizeSource extends ModelInput::SourceModelCsv {
|
||||
override predicate row(string row) {
|
||||
row = "sequelize;Sequelize;Member[query].ReturnValue.Awaited;database-access-result"
|
||||
row = "sequelize.Sequelize;Member[query].ReturnValue.Awaited;database-access-result"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -365,13 +365,13 @@ private module Sequelize {
|
||||
private module SpannerCsv {
|
||||
class SpannerSinks extends ModelInput::SinkModelCsv {
|
||||
override predicate row(string row) {
|
||||
// package; type; path; kind
|
||||
// type; path; kind
|
||||
row =
|
||||
[
|
||||
"@google-cloud/spanner;~SqlExecutorDirect;Argument[0];sql-injection",
|
||||
"@google-cloud/spanner;~SqlExecutorDirect;Argument[0].Member[sql];sql-injection",
|
||||
"@google-cloud/spanner;Transaction;Member[batchUpdate].Argument[0];sql-injection",
|
||||
"@google-cloud/spanner;Transaction;Member[batchUpdate].Argument[0].ArrayElement.Member[sql];sql-injection",
|
||||
"@google-cloud/spanner.~SqlExecutorDirect;Argument[0];sql-injection",
|
||||
"@google-cloud/spanner.~SqlExecutorDirect;Argument[0].Member[sql];sql-injection",
|
||||
"@google-cloud/spanner.Transaction;Member[batchUpdate].Argument[0];sql-injection",
|
||||
"@google-cloud/spanner.Transaction;Member[batchUpdate].Argument[0].ArrayElement.Member[sql];sql-injection",
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -380,10 +380,10 @@ private module SpannerCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"@google-cloud/spanner;~SpannerObject;Member[executeSql].Argument[0..].Parameter[1];database-access-result",
|
||||
"@google-cloud/spanner;~SpannerObject;Member[executeSql].ReturnValue.Awaited.Member[0];database-access-result",
|
||||
"@google-cloud/spanner;~SpannerObject;Member[run].ReturnValue.Awaited;database-access-result",
|
||||
"@google-cloud/spanner;~SpannerObject;Member[run].Argument[0..].Parameter[1];database-access-result",
|
||||
"@google-cloud/spanner.~SpannerObject;Member[executeSql].Argument[0..].Parameter[1];database-access-result",
|
||||
"@google-cloud/spanner.~SpannerObject;Member[executeSql].ReturnValue.Awaited.Member[0];database-access-result",
|
||||
"@google-cloud/spanner.~SpannerObject;Member[run].ReturnValue.Awaited;database-access-result",
|
||||
"@google-cloud/spanner.~SpannerObject;Member[run].Argument[0..].Parameter[1];database-access-result",
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,23 +5,20 @@
|
||||
*
|
||||
* The CSV specification has the following columns:
|
||||
* - Sources:
|
||||
* `package; type; path; kind`
|
||||
* `type; path; kind`
|
||||
* - Sinks:
|
||||
* `package; type; path; kind`
|
||||
* `type; path; kind`
|
||||
* - Summaries:
|
||||
* `package; type; path; input; output; kind`
|
||||
* `type; path; input; output; kind`
|
||||
* - Types:
|
||||
* `package1; type1; package2; type2; path`
|
||||
* `type1; type2; path`
|
||||
*
|
||||
* The interpretation of a row is similar to API-graphs with a left-to-right
|
||||
* reading.
|
||||
* 1. The `package` column selects a package name, as it would be referenced in the source code,
|
||||
* such as an NPM package, PIP package, or Ruby gem. (See `ModelsAsData.qll` for language-specific details).
|
||||
* It may also be a synthetic package used for a type definition (see type definitions below).
|
||||
* 2. The `type` column selects all instances of a named type originating from that package,
|
||||
* or the empty string if referring to the package itself.
|
||||
* 1. The `type` column selects all instances of a named type. The syntax of this column is language-specific.
|
||||
* The language defines some type names that the analysis knows how to identify without models.
|
||||
* It can also be a synthetic type name defined by a type definition (see type definitions below).
|
||||
* 3. The `path` column is a `.`-separated list of "access path tokens" to resolve, starting at the node selected by `package` and `type`.
|
||||
* 2. The `path` column is a `.`-separated list of "access path tokens" to resolve, starting at the node selected by `type`.
|
||||
*
|
||||
* Every language supports the following tokens:
|
||||
* - Argument[n]: the n-th argument to a call. May be a range of form `x..y` (inclusive) and/or a comma-separated list.
|
||||
@@ -42,10 +39,10 @@
|
||||
*
|
||||
* For the time being, please consult `ApiGraphModelsSpecific.qll` to see which language-specific tokens are currently supported.
|
||||
*
|
||||
* 4. The `input` and `output` columns specify how data enters and leaves the element selected by the
|
||||
* first `(package, type, path)` tuple. Both strings are `.`-separated access paths
|
||||
* 3. The `input` and `output` columns specify how data enters and leaves the element selected by the
|
||||
* first `(type, path)` tuple. Both strings are `.`-separated access paths
|
||||
* of the same syntax as the `path` column.
|
||||
* 5. The `kind` column is a tag that can be referenced from QL to determine to
|
||||
* 4. The `kind` column is a tag that can be referenced from QL to determine to
|
||||
* which classes the interpreted elements should be added. For example, for
|
||||
* sources `"remote"` indicates a default remote flow source, and for summaries
|
||||
* `"taint"` indicates a default additional taint step and `"value"` indicates a
|
||||
@@ -53,17 +50,17 @@
|
||||
*
|
||||
* ### Types
|
||||
*
|
||||
* A type row of form `package1; type1; package2; type2; path` indicates that `package2; type2; path`
|
||||
* should be seen as an instance of the type `package1; type1`.
|
||||
* A type row of form `type1; type2; path` indicates that `type2; path`
|
||||
* should be seen as an instance of the type `type1`.
|
||||
*
|
||||
* A `(package,type)` pair may refer to a static type or a synthetic type name used internally in the model.
|
||||
* A type may refer to a static type or a synthetic type name used internally in the model.
|
||||
* Synthetic type names can be used to reuse intermediate sub-paths, when there are multiple ways to access the same
|
||||
* element.
|
||||
* See `ModelsAsData.qll` for the language-specific interpretation of packages and static type names.
|
||||
* See `ModelsAsData.qll` for the language-specific interpretation of type names.
|
||||
*
|
||||
* By convention, if one wants to avoid clashes with static types from the package, the type name
|
||||
* should be prefixed with a tilde character (`~`). For example, `(foo, ~Bar)` can be used to indicate that
|
||||
* the type is related to the `foo` package but is not intended to match a static type.
|
||||
* By convention, if one wants to avoid clashes with static types, the type name
|
||||
* should be prefixed with a tilde character (`~`). For example, `~Bar` can be used to indicate that
|
||||
* the type is not intended to match a static type.
|
||||
*/
|
||||
|
||||
private import ApiGraphModelsSpecific as Specific
|
||||
@@ -89,9 +86,9 @@ module ModelInput {
|
||||
*
|
||||
* A row of form
|
||||
* ```
|
||||
* package;type;path;kind
|
||||
* type;path;kind
|
||||
* ```
|
||||
* indicates that the value at `(package, type, path)` should be seen as a flow
|
||||
* indicates that the value at `(type, path)` should be seen as a flow
|
||||
* source of the given `kind`.
|
||||
*
|
||||
* The kind `remote` represents a general remote flow source.
|
||||
@@ -110,9 +107,9 @@ module ModelInput {
|
||||
*
|
||||
* A row of form
|
||||
* ```
|
||||
* package;type;path;kind
|
||||
* type;path;kind
|
||||
* ```
|
||||
* indicates that the value at `(package, type, path)` should be seen as a sink
|
||||
* indicates that the value at `(type, path)` should be seen as a sink
|
||||
* of the given `kind`.
|
||||
*/
|
||||
abstract predicate row(string row);
|
||||
@@ -129,9 +126,9 @@ module ModelInput {
|
||||
*
|
||||
* A row of form
|
||||
* ```
|
||||
* package;type;path;input;output;kind
|
||||
* type;path;input;output;kind
|
||||
* ```
|
||||
* indicates that for each call to `(package, type, path)`, the value referred to by `input`
|
||||
* indicates that for each call to `(type, path)`, the value referred to by `input`
|
||||
* can flow to the value referred to by `output`.
|
||||
*
|
||||
* `kind` should be either `value` or `taint`, for value-preserving or taint-preserving steps,
|
||||
@@ -151,9 +148,9 @@ module ModelInput {
|
||||
*
|
||||
* A row of form,
|
||||
* ```
|
||||
* package1;type1;package2;type2;path
|
||||
* type1;type2;path
|
||||
* ```
|
||||
* indicates that `(package2, type2, path)` should be seen as an instance of `(package1, type1)`.
|
||||
* indicates that `(type2, path)` should be seen as an instance of `type1`.
|
||||
*/
|
||||
abstract predicate row(string row);
|
||||
}
|
||||
@@ -163,28 +160,28 @@ module ModelInput {
|
||||
*/
|
||||
class TypeModel extends Unit {
|
||||
/**
|
||||
* Gets a data-flow node that is a source of the type `package;type`.
|
||||
* Gets a data-flow node that is a source of the given `type`.
|
||||
*
|
||||
* This must not depend on API graphs, but ensures that an API node is generated for
|
||||
* the source.
|
||||
*/
|
||||
DataFlow::Node getASource(string package, string type) { none() }
|
||||
DataFlow::Node getASource(string type) { none() }
|
||||
|
||||
/**
|
||||
* Gets a data-flow node that is a sink of the type `package;type`,
|
||||
* Gets a data-flow node that is a sink of the given `type`,
|
||||
* usually because it is an argument passed to a parameter of that type.
|
||||
*
|
||||
* This must not depend on API graphs, but ensures that an API node is generated for
|
||||
* the sink.
|
||||
*/
|
||||
DataFlow::Node getASink(string package, string type) { none() }
|
||||
DataFlow::Node getASink(string type) { none() }
|
||||
|
||||
/**
|
||||
* Gets an API node that is a source or sink of the type `package;type`.
|
||||
* Gets an API node that is a source or sink of the given `type`.
|
||||
*
|
||||
* Unlike `getASource` and `getASink`, this may depend on API graphs.
|
||||
*/
|
||||
API::Node getAnApiNode(string package, string type) { none() }
|
||||
API::Node getAnApiNode(string type) { none() }
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -209,7 +206,7 @@ private import ModelInput
|
||||
/**
|
||||
* An empty class, except in specific tests.
|
||||
*
|
||||
* If this is non-empty, all models are parsed even if the package is not
|
||||
* If this is non-empty, all models are parsed even if the type name is not
|
||||
* considered relevant for the current database.
|
||||
*/
|
||||
abstract class TestAllModels extends Unit { }
|
||||
@@ -232,53 +229,44 @@ private predicate typeModel(string row) { any(TypeModelCsv s).row(inversePad(row
|
||||
private predicate typeVariableModel(string row) { any(TypeVariableModelCsv s).row(inversePad(row)) }
|
||||
|
||||
/** Holds if a source model exists for the given parameters. */
|
||||
predicate sourceModel(string package, string type, string path, string kind) {
|
||||
predicate sourceModel(string type, string path, string kind) {
|
||||
exists(string row |
|
||||
sourceModel(row) and
|
||||
row.splitAt(";", 0) = package and
|
||||
row.splitAt(";", 1) = type and
|
||||
row.splitAt(";", 2) = path and
|
||||
row.splitAt(";", 3) = kind
|
||||
row.splitAt(";", 0) = type and
|
||||
row.splitAt(";", 1) = path and
|
||||
row.splitAt(";", 2) = kind
|
||||
)
|
||||
}
|
||||
|
||||
/** Holds if a sink model exists for the given parameters. */
|
||||
private predicate sinkModel(string package, string type, string path, string kind) {
|
||||
private predicate sinkModel(string type, string path, string kind) {
|
||||
exists(string row |
|
||||
sinkModel(row) and
|
||||
row.splitAt(";", 0) = package and
|
||||
row.splitAt(";", 1) = type and
|
||||
row.splitAt(";", 2) = path and
|
||||
row.splitAt(";", 3) = kind
|
||||
row.splitAt(";", 0) = type and
|
||||
row.splitAt(";", 1) = path and
|
||||
row.splitAt(";", 2) = kind
|
||||
)
|
||||
}
|
||||
|
||||
/** Holds if a summary model `row` exists for the given parameters. */
|
||||
private predicate summaryModel(
|
||||
string package, string type, string path, string input, string output, string kind
|
||||
) {
|
||||
private predicate summaryModel(string type, string path, string input, string output, string kind) {
|
||||
exists(string row |
|
||||
summaryModel(row) and
|
||||
row.splitAt(";", 0) = package and
|
||||
row.splitAt(";", 1) = type and
|
||||
row.splitAt(";", 2) = path and
|
||||
row.splitAt(";", 3) = input and
|
||||
row.splitAt(";", 4) = output and
|
||||
row.splitAt(";", 5) = kind
|
||||
row.splitAt(";", 0) = type and
|
||||
row.splitAt(";", 1) = path and
|
||||
row.splitAt(";", 2) = input and
|
||||
row.splitAt(";", 3) = output and
|
||||
row.splitAt(";", 4) = kind
|
||||
)
|
||||
}
|
||||
|
||||
/** Holds if a type model exists for the given parameters. */
|
||||
private predicate typeModel(
|
||||
string package1, string type1, string package2, string type2, string path
|
||||
) {
|
||||
private predicate typeModel(string type1, string type2, string path) {
|
||||
exists(string row |
|
||||
typeModel(row) and
|
||||
row.splitAt(";", 0) = package1 and
|
||||
row.splitAt(";", 1) = type1 and
|
||||
row.splitAt(";", 2) = package2 and
|
||||
row.splitAt(";", 3) = type2 and
|
||||
row.splitAt(";", 4) = path
|
||||
row.splitAt(";", 0) = type1 and
|
||||
row.splitAt(";", 1) = type2 and
|
||||
row.splitAt(";", 2) = path
|
||||
)
|
||||
}
|
||||
|
||||
@@ -292,61 +280,50 @@ private predicate typeVariableModel(string name, string path) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a package that should be seen as an alias for the given other `package`,
|
||||
* or the `package` itself.
|
||||
* Holds if CSV rows involving `type` might be relevant for the analysis of this database.
|
||||
*/
|
||||
bindingset[package]
|
||||
bindingset[result]
|
||||
string getAPackageAlias(string package) {
|
||||
typeModel(package, "", result, "", "")
|
||||
or
|
||||
result = package
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if CSV rows involving `package` might be relevant for the analysis of this database.
|
||||
*/
|
||||
private predicate isRelevantPackage(string package) {
|
||||
predicate isRelevantType(string type) {
|
||||
(
|
||||
sourceModel(package, _, _, _) or
|
||||
sinkModel(package, _, _, _) or
|
||||
summaryModel(package, _, _, _, _, _) or
|
||||
typeModel(_, _, package, _, _)
|
||||
sourceModel(type, _, _) or
|
||||
sinkModel(type, _, _) or
|
||||
summaryModel(type, _, _, _, _) or
|
||||
typeModel(_, type, _)
|
||||
) and
|
||||
(
|
||||
Specific::isPackageUsed(package)
|
||||
Specific::isTypeUsed(type)
|
||||
or
|
||||
exists(TestAllModels t)
|
||||
)
|
||||
or
|
||||
exists(string other |
|
||||
isRelevantPackage(other) and
|
||||
typeModel(package, _, other, _, _)
|
||||
exists(string other | isRelevantType(other) |
|
||||
typeModel(type, other, _)
|
||||
or
|
||||
Specific::hasImplicitTypeModel(type, other)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `package,type,path` is used in some CSV row.
|
||||
* Holds if `type,path` is used in some CSV row.
|
||||
*/
|
||||
pragma[nomagic]
|
||||
predicate isRelevantFullPath(string package, string type, string path) {
|
||||
isRelevantPackage(package) and
|
||||
predicate isRelevantFullPath(string type, string path) {
|
||||
isRelevantType(type) and
|
||||
(
|
||||
sourceModel(package, type, path, _) or
|
||||
sinkModel(package, type, path, _) or
|
||||
summaryModel(package, type, path, _, _, _) or
|
||||
typeModel(_, _, package, type, path)
|
||||
sourceModel(type, path, _) or
|
||||
sinkModel(type, path, _) or
|
||||
summaryModel(type, path, _, _, _) or
|
||||
typeModel(_, type, path)
|
||||
)
|
||||
}
|
||||
|
||||
/** A string from a CSV row that should be parsed as an access path. */
|
||||
private class AccessPathRange extends AccessPath::Range {
|
||||
AccessPathRange() {
|
||||
isRelevantFullPath(_, _, this)
|
||||
isRelevantFullPath(_, this)
|
||||
or
|
||||
exists(string package | isRelevantPackage(package) |
|
||||
summaryModel(package, _, _, this, _, _) or
|
||||
summaryModel(package, _, _, _, this, _)
|
||||
exists(string type | isRelevantType(type) |
|
||||
summaryModel(type, _, this, _, _) or
|
||||
summaryModel(type, _, _, this, _)
|
||||
)
|
||||
or
|
||||
typeVariableModel(_, this)
|
||||
@@ -400,83 +377,73 @@ private predicate invocationMatchesCallSiteFilter(Specific::InvokeNode invoke, A
|
||||
}
|
||||
|
||||
private class TypeModelUseEntry extends API::EntryPoint {
|
||||
private string package;
|
||||
private string type;
|
||||
|
||||
TypeModelUseEntry() {
|
||||
exists(any(TypeModel tm).getASource(package, type)) and
|
||||
this = "TypeModelUseEntry;" + package + ";" + type
|
||||
exists(any(TypeModel tm).getASource(type)) and
|
||||
this = "TypeModelUseEntry;" + type
|
||||
}
|
||||
|
||||
override DataFlow::LocalSourceNode getASource() {
|
||||
result = any(TypeModel tm).getASource(package, type)
|
||||
}
|
||||
override DataFlow::LocalSourceNode getASource() { result = any(TypeModel tm).getASource(type) }
|
||||
|
||||
API::Node getNodeForType(string package_, string type_) {
|
||||
package = package_ and type = type_ and result = this.getANode()
|
||||
}
|
||||
API::Node getNodeForType(string type_) { type = type_ and result = this.getANode() }
|
||||
}
|
||||
|
||||
private class TypeModelDefEntry extends API::EntryPoint {
|
||||
private string package;
|
||||
private string type;
|
||||
|
||||
TypeModelDefEntry() {
|
||||
exists(any(TypeModel tm).getASink(package, type)) and
|
||||
this = "TypeModelDefEntry;" + package + ";" + type
|
||||
exists(any(TypeModel tm).getASink(type)) and
|
||||
this = "TypeModelDefEntry;" + type
|
||||
}
|
||||
|
||||
override DataFlow::Node getASink() { result = any(TypeModel tm).getASink(package, type) }
|
||||
override DataFlow::Node getASink() { result = any(TypeModel tm).getASink(type) }
|
||||
|
||||
API::Node getNodeForType(string package_, string type_) {
|
||||
package = package_ and type = type_ and result = this.getANode()
|
||||
}
|
||||
API::Node getNodeForType(string type_) { type = type_ and result = this.getANode() }
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an API node identified by the given `(package,type)` pair.
|
||||
* Gets an API node identified by the given `type`.
|
||||
*/
|
||||
pragma[nomagic]
|
||||
private API::Node getNodeFromType(string package, string type) {
|
||||
exists(string package2, string type2, AccessPath path2 |
|
||||
typeModel(package, type, package2, type2, path2) and
|
||||
result = getNodeFromPath(package2, type2, path2)
|
||||
private API::Node getNodeFromType(string type) {
|
||||
exists(string type2, AccessPath path2 |
|
||||
typeModel(type, type2, path2) and
|
||||
result = getNodeFromPath(type2, path2)
|
||||
)
|
||||
or
|
||||
result = any(TypeModelUseEntry e).getNodeForType(package, type)
|
||||
result = any(TypeModelUseEntry e).getNodeForType(type)
|
||||
or
|
||||
result = any(TypeModelDefEntry e).getNodeForType(package, type)
|
||||
result = any(TypeModelDefEntry e).getNodeForType(type)
|
||||
or
|
||||
result = any(TypeModel t).getAnApiNode(package, type)
|
||||
result = any(TypeModel t).getAnApiNode(type)
|
||||
or
|
||||
result = Specific::getExtraNodeFromType(package, type)
|
||||
result = Specific::getExtraNodeFromType(type)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the API node identified by the first `n` tokens of `path` in the given `(package, type, path)` tuple.
|
||||
* Gets the API node identified by the first `n` tokens of `path` in the given `(type, path)` tuple.
|
||||
*/
|
||||
pragma[nomagic]
|
||||
private API::Node getNodeFromPath(string package, string type, AccessPath path, int n) {
|
||||
isRelevantFullPath(package, type, path) and
|
||||
private API::Node getNodeFromPath(string type, AccessPath path, int n) {
|
||||
isRelevantFullPath(type, path) and
|
||||
(
|
||||
n = 0 and
|
||||
result = getNodeFromType(package, type)
|
||||
result = getNodeFromType(type)
|
||||
or
|
||||
result = Specific::getExtraNodeFromPath(package, type, path, n)
|
||||
result = Specific::getExtraNodeFromPath(type, path, n)
|
||||
)
|
||||
or
|
||||
result = getSuccessorFromNode(getNodeFromPath(package, type, path, n - 1), path.getToken(n - 1))
|
||||
result = getSuccessorFromNode(getNodeFromPath(type, path, n - 1), path.getToken(n - 1))
|
||||
or
|
||||
// Similar to the other recursive case, but where the path may have stepped through one or more call-site filters
|
||||
result =
|
||||
getSuccessorFromInvoke(getInvocationFromPath(package, type, path, n - 1), path.getToken(n - 1))
|
||||
result = getSuccessorFromInvoke(getInvocationFromPath(type, path, n - 1), path.getToken(n - 1))
|
||||
or
|
||||
// Apply a subpath
|
||||
result =
|
||||
getNodeFromSubPath(getNodeFromPath(package, type, path, n - 1), getSubPathAt(path, n - 1))
|
||||
result = getNodeFromSubPath(getNodeFromPath(type, path, n - 1), getSubPathAt(path, n - 1))
|
||||
or
|
||||
// Apply a type step
|
||||
typeStep(getNodeFromPath(package, type, path, n), result)
|
||||
typeStep(getNodeFromPath(type, path, n), result)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -496,15 +463,15 @@ private AccessPath getSubPathAt(AccessPath path, int n) {
|
||||
pragma[nomagic]
|
||||
private API::Node getNodeFromSubPath(API::Node base, AccessPath subPath, int n) {
|
||||
exists(AccessPath path, int k |
|
||||
base = [getNodeFromPath(_, _, path, k), getNodeFromSubPath(_, path, k)] and
|
||||
base = [getNodeFromPath(_, path, k), getNodeFromSubPath(_, path, k)] and
|
||||
subPath = getSubPathAt(path, k) and
|
||||
result = base and
|
||||
n = 0
|
||||
)
|
||||
or
|
||||
exists(string package, string type, AccessPath basePath |
|
||||
typeStepModel(package, type, basePath, subPath) and
|
||||
base = getNodeFromPath(package, type, basePath) and
|
||||
exists(string type, AccessPath basePath |
|
||||
typeStepModel(type, basePath, subPath) and
|
||||
base = getNodeFromPath(type, basePath) and
|
||||
result = base and
|
||||
n = 0
|
||||
)
|
||||
@@ -543,42 +510,40 @@ private API::Node getNodeFromSubPath(API::Node base, AccessPath subPath) {
|
||||
result = getNodeFromSubPath(base, subPath, subPath.getNumToken())
|
||||
}
|
||||
|
||||
/** Gets the node identified by the given `(package, type, path)` tuple. */
|
||||
private API::Node getNodeFromPath(string package, string type, AccessPath path) {
|
||||
result = getNodeFromPath(package, type, path, path.getNumToken())
|
||||
/** Gets the node identified by the given `(type, path)` tuple. */
|
||||
private API::Node getNodeFromPath(string type, AccessPath path) {
|
||||
result = getNodeFromPath(type, path, path.getNumToken())
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private predicate typeStepModel(string package, string type, AccessPath basePath, AccessPath output) {
|
||||
summaryModel(package, type, basePath, "", output, "type")
|
||||
private predicate typeStepModel(string type, AccessPath basePath, AccessPath output) {
|
||||
summaryModel(type, basePath, "", output, "type")
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private predicate typeStep(API::Node pred, API::Node succ) {
|
||||
exists(string package, string type, AccessPath basePath, AccessPath output |
|
||||
typeStepModel(package, type, basePath, output) and
|
||||
pred = getNodeFromPath(package, type, basePath) and
|
||||
exists(string type, AccessPath basePath, AccessPath output |
|
||||
typeStepModel(type, basePath, output) and
|
||||
pred = getNodeFromPath(type, basePath) and
|
||||
succ = getNodeFromSubPath(pred, output)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an invocation identified by the given `(package, type, path)` tuple.
|
||||
* Gets an invocation identified by the given `(type, path)` tuple.
|
||||
*
|
||||
* Unlike `getNodeFromPath`, the `path` may end with one or more call-site filters.
|
||||
*/
|
||||
private Specific::InvokeNode getInvocationFromPath(
|
||||
string package, string type, AccessPath path, int n
|
||||
) {
|
||||
result = Specific::getAnInvocationOf(getNodeFromPath(package, type, path, n))
|
||||
private Specific::InvokeNode getInvocationFromPath(string type, AccessPath path, int n) {
|
||||
result = Specific::getAnInvocationOf(getNodeFromPath(type, path, n))
|
||||
or
|
||||
result = getInvocationFromPath(package, type, path, n - 1) and
|
||||
result = getInvocationFromPath(type, path, n - 1) and
|
||||
invocationMatchesCallSiteFilter(result, path.getToken(n - 1))
|
||||
}
|
||||
|
||||
/** Gets an invocation identified by the given `(package, type, path)` tuple. */
|
||||
private Specific::InvokeNode getInvocationFromPath(string package, string type, AccessPath path) {
|
||||
result = getInvocationFromPath(package, type, path, path.getNumToken())
|
||||
/** Gets an invocation identified by the given `(type, path)` tuple. */
|
||||
private Specific::InvokeNode getInvocationFromPath(string type, AccessPath path) {
|
||||
result = getInvocationFromPath(type, path, path.getNumToken())
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -631,9 +596,9 @@ module ModelOutput {
|
||||
*/
|
||||
cached
|
||||
API::Node getASourceNode(string kind) {
|
||||
exists(string package, string type, string path |
|
||||
sourceModel(package, type, path, kind) and
|
||||
result = getNodeFromPath(package, type, path)
|
||||
exists(string type, string path |
|
||||
sourceModel(type, path, kind) and
|
||||
result = getNodeFromPath(type, path)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -642,9 +607,9 @@ module ModelOutput {
|
||||
*/
|
||||
cached
|
||||
API::Node getASinkNode(string kind) {
|
||||
exists(string package, string type, string path |
|
||||
sinkModel(package, type, path, kind) and
|
||||
result = getNodeFromPath(package, type, path)
|
||||
exists(string type, string path |
|
||||
sinkModel(type, path, kind) and
|
||||
result = getNodeFromPath(type, path)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -653,32 +618,31 @@ module ModelOutput {
|
||||
*/
|
||||
cached
|
||||
predicate relevantSummaryModel(
|
||||
string package, string type, string path, string input, string output, string kind
|
||||
string type, string path, string input, string output, string kind
|
||||
) {
|
||||
isRelevantPackage(package) and
|
||||
summaryModel(package, type, path, input, output, kind)
|
||||
isRelevantType(type) and
|
||||
summaryModel(type, path, input, output, kind)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if a `baseNode` is an invocation identified by the `package,type,path` part of a summary row.
|
||||
* Holds if a `baseNode` is an invocation identified by the `type,path` part of a summary row.
|
||||
*/
|
||||
cached
|
||||
predicate resolvedSummaryBase(
|
||||
string package, string type, string path, Specific::InvokeNode baseNode
|
||||
) {
|
||||
summaryModel(package, type, path, _, _, _) and
|
||||
baseNode = getInvocationFromPath(package, type, path)
|
||||
predicate resolvedSummaryBase(string type, string path, Specific::InvokeNode baseNode) {
|
||||
summaryModel(type, path, _, _, _) and
|
||||
baseNode = getInvocationFromPath(type, path)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `node` is seen as an instance of `(package,type)` due to a type definition
|
||||
* Holds if `node` is seen as an instance of `type` due to a type definition
|
||||
* contributed by a CSV model.
|
||||
*/
|
||||
cached
|
||||
API::Node getATypeNode(string package, string type) { result = getNodeFromType(package, type) }
|
||||
API::Node getATypeNode(string type) { result = getNodeFromType(type) }
|
||||
}
|
||||
|
||||
import Cached
|
||||
import Specific::ModelOutputSpecific
|
||||
|
||||
/**
|
||||
* Gets an error message relating to an invalid CSV row in a model.
|
||||
@@ -686,13 +650,13 @@ module ModelOutput {
|
||||
string getAWarning() {
|
||||
// Check number of columns
|
||||
exists(string row, string kind, int expectedArity, int actualArity |
|
||||
any(SourceModelCsv csv).row(row) and kind = "source" and expectedArity = 4
|
||||
any(SourceModelCsv csv).row(row) and kind = "source" and expectedArity = 3
|
||||
or
|
||||
any(SinkModelCsv csv).row(row) and kind = "sink" and expectedArity = 4
|
||||
any(SinkModelCsv csv).row(row) and kind = "sink" and expectedArity = 3
|
||||
or
|
||||
any(SummaryModelCsv csv).row(row) and kind = "summary" and expectedArity = 6
|
||||
any(SummaryModelCsv csv).row(row) and kind = "summary" and expectedArity = 5
|
||||
or
|
||||
any(TypeModelCsv csv).row(row) and kind = "type" and expectedArity = 5
|
||||
any(TypeModelCsv csv).row(row) and kind = "type" and expectedArity = 3
|
||||
or
|
||||
any(TypeVariableModelCsv csv).row(row) and kind = "type-variable" and expectedArity = 2
|
||||
|
|
||||
@@ -705,7 +669,7 @@ module ModelOutput {
|
||||
or
|
||||
// Check names and arguments of access path tokens
|
||||
exists(AccessPath path, AccessPathToken token |
|
||||
(isRelevantFullPath(_, _, path) or typeVariableModel(_, path)) and
|
||||
(isRelevantFullPath(_, path) or typeVariableModel(_, path)) and
|
||||
token = path.getToken(_)
|
||||
|
|
||||
not isValidTokenNameInIdentifyingAccessPath(token.getName()) and
|
||||
|
||||
@@ -31,6 +31,21 @@ import semmle.javascript.frameworks.data.internal.AccessPathSyntax as AccessPath
|
||||
import JS::DataFlow as DataFlow
|
||||
private import AccessPathSyntax
|
||||
|
||||
/**
|
||||
* Holds if `rawType` represents the JavaScript type `qualifiedName` from the given NPM `package`.
|
||||
*
|
||||
* Type names have form `package.type` or just `package` if referring to the package export
|
||||
* object. If `package` contains a `.` character it must be enclosed in single quotes, such as `'package'.type`.
|
||||
*/
|
||||
bindingset[rawType]
|
||||
predicate parseTypeString(string rawType, string package, string qualifiedName) {
|
||||
exists(string regexp |
|
||||
regexp = "('[^']+'|[^.]+)(.*)" and
|
||||
package = rawType.regexpCapture(regexp, 1).regexpReplaceAll("^'|'$", "") and
|
||||
qualifiedName = rawType.regexpCapture(regexp, 2).regexpReplaceAll("^\\.", "")
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if models describing `package` may be relevant for the analysis of this database.
|
||||
*/
|
||||
@@ -42,10 +57,30 @@ predicate isPackageUsed(string package) {
|
||||
any(DataFlow::SourceNode sn).hasUnderlyingType(package, _)
|
||||
}
|
||||
|
||||
bindingset[type]
|
||||
predicate isTypeUsed(string type) {
|
||||
exists(string package |
|
||||
parseTypeString(type, package, _) and
|
||||
isPackageUsed(package)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `type` can be obtained from an instance of `otherType` due to
|
||||
* language semantics modeled by `getExtraNodeFromType`.
|
||||
*/
|
||||
predicate hasImplicitTypeModel(string type, string otherType) { none() }
|
||||
|
||||
pragma[nomagic]
|
||||
private predicate parseRelevantTypeString(string rawType, string package, string qualifiedName) {
|
||||
isRelevantFullPath(rawType, _) and
|
||||
parseTypeString(rawType, package, qualifiedName)
|
||||
}
|
||||
|
||||
/** Holds if `global` is a global variable referenced via a the `global` package in a CSV row. */
|
||||
private predicate isRelevantGlobal(string global) {
|
||||
exists(AccessPath path, AccessPathToken token |
|
||||
isRelevantFullPath("global", "", path) and
|
||||
isRelevantFullPath("global", path) and
|
||||
token = path.getToken(0) and
|
||||
token.getName() = "Member" and
|
||||
global = token.getAnArgument()
|
||||
@@ -74,13 +109,12 @@ private API::Node getGlobalNode(string globalName) {
|
||||
result = any(GlobalApiEntryPoint e | e.getGlobal() = globalName).getANode()
|
||||
}
|
||||
|
||||
/** Gets a JavaScript-specific interpretation of the `(package, type, path)` tuple after resolving the first `n` access path tokens. */
|
||||
bindingset[package, type, path]
|
||||
API::Node getExtraNodeFromPath(string package, string type, AccessPath path, int n) {
|
||||
/** Gets a JavaScript-specific interpretation of the `(type, path)` tuple after resolving the first `n` access path tokens. */
|
||||
bindingset[type, path]
|
||||
API::Node getExtraNodeFromPath(string type, AccessPath path, int n) {
|
||||
// Global variable accesses is via the 'global' package
|
||||
exists(AccessPathToken token |
|
||||
package = getAPackageAlias("global") and
|
||||
type = "" and
|
||||
type = "global" and
|
||||
token = path.getToken(0) and
|
||||
token.getName() = "Member" and
|
||||
result = getGlobalNode(token.getAnArgument()) and
|
||||
@@ -89,12 +123,16 @@ API::Node getExtraNodeFromPath(string package, string type, AccessPath path, int
|
||||
}
|
||||
|
||||
/** Gets a JavaScript-specific interpretation of the `(package, type)` tuple. */
|
||||
API::Node getExtraNodeFromType(string package, string type) {
|
||||
type = "" and
|
||||
result = API::moduleImport(package)
|
||||
or
|
||||
// Access instance of a type based on type annotations
|
||||
result = API::Internal::getANodeOfTypeRaw(getAPackageAlias(package), type)
|
||||
API::Node getExtraNodeFromType(string type) {
|
||||
exists(string package, string qualifiedName |
|
||||
parseRelevantTypeString(type, package, qualifiedName)
|
||||
|
|
||||
qualifiedName = "" and
|
||||
result = API::moduleImport(package)
|
||||
or
|
||||
// Access instance of a type based on type annotations
|
||||
result = API::Internal::getANodeOfTypeRaw(package, qualifiedName)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -184,9 +222,9 @@ predicate invocationMatchesExtraCallSiteFilter(API::InvokeNode invoke, AccessPat
|
||||
*/
|
||||
pragma[nomagic]
|
||||
private predicate relevantInputOutputPath(API::InvokeNode base, AccessPath inputOrOutput) {
|
||||
exists(string package, string type, string input, string output, string path |
|
||||
ModelOutput::relevantSummaryModel(package, type, path, input, output, _) and
|
||||
ModelOutput::resolvedSummaryBase(package, type, path, base) and
|
||||
exists(string type, string input, string output, string path |
|
||||
ModelOutput::relevantSummaryModel(type, path, input, output, _) and
|
||||
ModelOutput::resolvedSummaryBase(type, path, base) and
|
||||
inputOrOutput = [input, output]
|
||||
)
|
||||
}
|
||||
@@ -216,12 +254,9 @@ private API::Node getNodeFromInputOutputPath(API::InvokeNode baseNode, AccessPat
|
||||
* Holds if a CSV summary contributed the step `pred -> succ` of the given `kind`.
|
||||
*/
|
||||
predicate summaryStep(API::Node pred, API::Node succ, string kind) {
|
||||
exists(
|
||||
string package, string type, string path, API::InvokeNode base, AccessPath input,
|
||||
AccessPath output
|
||||
|
|
||||
ModelOutput::relevantSummaryModel(package, type, path, input, output, kind) and
|
||||
ModelOutput::resolvedSummaryBase(package, type, path, base) and
|
||||
exists(string type, string path, API::InvokeNode base, AccessPath input, AccessPath output |
|
||||
ModelOutput::relevantSummaryModel(type, path, input, output, kind) and
|
||||
ModelOutput::resolvedSummaryBase(type, path, base) and
|
||||
pred = getNodeFromInputOutputPath(base, input) and
|
||||
succ = getNodeFromInputOutputPath(base, output)
|
||||
)
|
||||
@@ -270,3 +305,17 @@ predicate isExtraValidTokenArgumentInIdentifyingAccessPath(string name, string a
|
||||
exists(argument.indexOf("=")) and
|
||||
exists(AccessPath::parseIntWithArity(argument.splitAt("=", 0), 10))
|
||||
}
|
||||
|
||||
module ModelOutputSpecific {
|
||||
/**
|
||||
* Gets a node that should be seen as an instance of `package,type` due to a type definition
|
||||
* contributed by a CSV model.
|
||||
*/
|
||||
cached
|
||||
API::Node getATypeNode(string package, string qualifiedName) {
|
||||
exists(string rawType |
|
||||
result = ModelOutput::getATypeNode(rawType) and
|
||||
parseTypeString(rawType, package, qualifiedName)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,81 +6,81 @@ private class Types extends ModelInput::TypeModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"minimongo/IndexedDb;IndexedDbCollection;minimongo/IndexedDb;IndexedDbCollectionStatic;Instance", //
|
||||
"minimongo/IndexedDb;IndexedDbCollection;minimongo/lib/IndexedDb;default;Member[collections].AnyMember", //
|
||||
"minimongo/MemoryDb;Collection;minimongo/MemoryDb;CollectionStatic;Instance", //
|
||||
"minimongo/MemoryDb;Collection;minimongo/lib/MemoryDb;default;Member[collections].AnyMember", //
|
||||
"minimongo/RemoteDb;Collection;minimongo/RemoteDb;CollectionStatic;Instance", //
|
||||
"minimongo/RemoteDb;Collection;minimongo/lib/RemoteDb;default;Member[collections].AnyMember", //
|
||||
"minimongo/ReplicatingDb;Collection;minimongo/ReplicatingDb;CollectionStatic;Instance", //
|
||||
"minimongo/ReplicatingDb;Collection;minimongo/lib/ReplicatingDb;default;Member[collections].AnyMember", //
|
||||
"minimongo/lib/HybridDb;default;minimongo/lib/HybridDb;defaultStatic;Instance", //
|
||||
"minimongo/lib/HybridDb;defaultStatic;minimongo/lib/HybridDb;;Member[default]", //
|
||||
"minimongo/lib/HybridDb;defaultStatic;minimongo;;Member[HybridDb]", //
|
||||
"minimongo/lib/IndexedDb;default;minimongo/lib/IndexedDb;defaultStatic;Instance", //
|
||||
"minimongo/lib/IndexedDb;default;minimongo;;Member[utils].Member[autoselectLocalDb].ReturnValue", //
|
||||
"minimongo/lib/IndexedDb;defaultStatic;minimongo/lib/IndexedDb;;Member[default]", //
|
||||
"minimongo/lib/IndexedDb;defaultStatic;minimongo;;Member[IndexedDb]", //
|
||||
"minimongo/lib/LocalStorageDb;default;minimongo/lib/LocalStorageDb;defaultStatic;Instance", //
|
||||
"minimongo/lib/LocalStorageDb;default;minimongo;;Member[utils].Member[autoselectLocalDb].ReturnValue", //
|
||||
"minimongo/lib/LocalStorageDb;defaultStatic;minimongo/lib/LocalStorageDb;;Member[default]", //
|
||||
"minimongo/lib/LocalStorageDb;defaultStatic;minimongo;;Member[LocalStorageDb]", //
|
||||
"minimongo/lib/MemoryDb;default;minimongo/lib/MemoryDb;defaultStatic;Instance", //
|
||||
"minimongo/lib/MemoryDb;default;minimongo;;Member[utils].Member[autoselectLocalDb].ReturnValue", //
|
||||
"minimongo/lib/MemoryDb;defaultStatic;minimongo/lib/MemoryDb;;Member[default]", //
|
||||
"minimongo/lib/MemoryDb;defaultStatic;minimongo;;Member[MemoryDb]", //
|
||||
"minimongo/lib/RemoteDb;default;minimongo/lib/RemoteDb;defaultStatic;Instance", //
|
||||
"minimongo/lib/RemoteDb;defaultStatic;minimongo/lib/RemoteDb;;Member[default]", //
|
||||
"minimongo/lib/RemoteDb;defaultStatic;minimongo;;Member[RemoteDb]", //
|
||||
"minimongo/lib/ReplicatingDb;default;minimongo/lib/ReplicatingDb;defaultStatic;Instance", //
|
||||
"minimongo/lib/ReplicatingDb;defaultStatic;minimongo/lib/ReplicatingDb;;Member[default]", //
|
||||
"minimongo/lib/ReplicatingDb;defaultStatic;minimongo;;Member[ReplicatingDb]", //
|
||||
"minimongo/lib/WebSQLDb;default;minimongo/lib/WebSQLDb;defaultStatic;Instance", //
|
||||
"minimongo/lib/WebSQLDb;default;minimongo;;Member[utils].Member[autoselectLocalDb].ReturnValue", //
|
||||
"minimongo/lib/WebSQLDb;defaultStatic;minimongo/lib/WebSQLDb;;Member[default]", //
|
||||
"minimongo/lib/WebSQLDb;defaultStatic;minimongo;;Member[WebSQLDb]", //
|
||||
"minimongo;HybridCollection;minimongo/lib/HybridDb;HybridCollection;", //
|
||||
"minimongo;HybridCollection;minimongo/lib/HybridDb;default;Member[collections].AnyMember", //
|
||||
"minimongo;HybridCollection;minimongo;HybridCollectionStatic;Instance", //
|
||||
"minimongo;HybridCollectionStatic;minimongo/lib/HybridDb;;Member[HybridCollection]", //
|
||||
"minimongo;HybridCollectionStatic;minimongo/lib/HybridDb;HybridCollectionStatic;", //
|
||||
"minimongo;HybridCollectionStatic;minimongo;;Member[HybridCollection]", //
|
||||
"minimongo;MinimongoBaseCollection;minimongo/RemoteDb;Collection;", //
|
||||
"minimongo;MinimongoBaseCollection;minimongo/lib/types;MinimongoBaseCollection;", //
|
||||
"minimongo;MinimongoBaseCollection;minimongo;HybridCollection;", //
|
||||
"minimongo;MinimongoBaseCollection;minimongo;MinimongoCollection;", //
|
||||
"minimongo;MinimongoBaseCollection;minimongo;MinimongoDb;AnyMember", //
|
||||
"minimongo;MinimongoBaseCollection;minimongo;MinimongoLocalCollection;", //
|
||||
"minimongo;MinimongoCollection;minimongo/lib/LocalStorageDb;default;Member[collections].AnyMember", //
|
||||
"minimongo;MinimongoCollection;minimongo/lib/WebSQLDb;default;Member[collections].AnyMember", //
|
||||
"minimongo;MinimongoCollection;minimongo/lib/types;MinimongoCollection;", //
|
||||
"minimongo;MinimongoCollection;minimongo;HybridCollection;Member[remoteCol]", //
|
||||
"minimongo;MinimongoCollection;minimongo;MinimongoDb;Member[collections].AnyMember", //
|
||||
"minimongo;MinimongoDb;minimongo/lib/HybridDb;default;", //
|
||||
"minimongo;MinimongoDb;minimongo/lib/HybridDb;default;Member[remoteDb]", //
|
||||
"minimongo;MinimongoDb;minimongo/lib/LocalStorageDb;default;", //
|
||||
"minimongo;MinimongoDb;minimongo/lib/MemoryDb;default;", //
|
||||
"minimongo;MinimongoDb;minimongo/lib/RemoteDb;default;", //
|
||||
"minimongo;MinimongoDb;minimongo/lib/ReplicatingDb;default;Member[masterDb,replicaDb]", //
|
||||
"minimongo;MinimongoDb;minimongo/lib/WebSQLDb;default;", //
|
||||
"minimongo;MinimongoDb;minimongo/lib/types;MinimongoDb;", //
|
||||
"minimongo;MinimongoDb;minimongo;MinimongoDb;Member[remoteDb]", //
|
||||
"minimongo;MinimongoDb;minimongo;MinimongoLocalDb;", //
|
||||
"minimongo;MinimongoLocalCollection;minimongo/IndexedDb;IndexedDbCollection;", //
|
||||
"minimongo;MinimongoLocalCollection;minimongo/MemoryDb;Collection;", //
|
||||
"minimongo;MinimongoLocalCollection;minimongo/ReplicatingDb;Collection;", //
|
||||
"minimongo;MinimongoLocalCollection;minimongo/ReplicatingDb;Collection;Member[masterCol,replicaCol]", //
|
||||
"minimongo;MinimongoLocalCollection;minimongo/lib/types;MinimongoLocalCollection;", //
|
||||
"minimongo;MinimongoLocalCollection;minimongo;HybridCollection;Member[localCol]", //
|
||||
"minimongo;MinimongoLocalCollection;minimongo;MinimongoCollection;", //
|
||||
"minimongo;MinimongoLocalCollection;minimongo;MinimongoLocalDb;Member[addCollection].Argument[2].Argument[0]", //
|
||||
"minimongo;MinimongoLocalCollection;minimongo;MinimongoLocalDb;Member[collections].AnyMember", //
|
||||
"minimongo;MinimongoLocalDb;minimongo/lib/HybridDb;default;Member[localDb]", //
|
||||
"minimongo;MinimongoLocalDb;minimongo/lib/IndexedDb;default;", //
|
||||
"minimongo;MinimongoLocalDb;minimongo/lib/ReplicatingDb;default;", //
|
||||
"minimongo;MinimongoLocalDb;minimongo/lib/types;MinimongoLocalDb;", //
|
||||
"minimongo;MinimongoLocalDb;minimongo;MinimongoDb;Member[localDb]", //
|
||||
"mongodb;Collection;minimongo;MinimongoBaseCollection;", //
|
||||
"minimongo.HybridCollection;minimongo.HybridCollectionStatic;Instance", //
|
||||
"minimongo.HybridCollection;minimongo/lib/HybridDb.HybridCollection;", //
|
||||
"minimongo.HybridCollection;minimongo/lib/HybridDb.default;Member[collections].AnyMember", //
|
||||
"minimongo.HybridCollectionStatic;minimongo/lib/HybridDb.HybridCollectionStatic;", //
|
||||
"minimongo.HybridCollectionStatic;minimongo/lib/HybridDb;Member[HybridCollection]", //
|
||||
"minimongo.HybridCollectionStatic;minimongo;Member[HybridCollection]", //
|
||||
"minimongo.MinimongoBaseCollection;minimongo.HybridCollection;", //
|
||||
"minimongo.MinimongoBaseCollection;minimongo.MinimongoCollection;", //
|
||||
"minimongo.MinimongoBaseCollection;minimongo.MinimongoDb;AnyMember", //
|
||||
"minimongo.MinimongoBaseCollection;minimongo.MinimongoLocalCollection;", //
|
||||
"minimongo.MinimongoBaseCollection;minimongo/RemoteDb.Collection;", //
|
||||
"minimongo.MinimongoBaseCollection;minimongo/lib/types.MinimongoBaseCollection;", //
|
||||
"minimongo.MinimongoCollection;minimongo.HybridCollection;Member[remoteCol]", //
|
||||
"minimongo.MinimongoCollection;minimongo.MinimongoDb;Member[collections].AnyMember", //
|
||||
"minimongo.MinimongoCollection;minimongo/lib/LocalStorageDb.default;Member[collections].AnyMember", //
|
||||
"minimongo.MinimongoCollection;minimongo/lib/WebSQLDb.default;Member[collections].AnyMember", //
|
||||
"minimongo.MinimongoCollection;minimongo/lib/types.MinimongoCollection;", //
|
||||
"minimongo.MinimongoDb;minimongo.MinimongoDb;Member[remoteDb]", //
|
||||
"minimongo.MinimongoDb;minimongo.MinimongoLocalDb;", //
|
||||
"minimongo.MinimongoDb;minimongo/lib/HybridDb.default;", //
|
||||
"minimongo.MinimongoDb;minimongo/lib/HybridDb.default;Member[remoteDb]", //
|
||||
"minimongo.MinimongoDb;minimongo/lib/LocalStorageDb.default;", //
|
||||
"minimongo.MinimongoDb;minimongo/lib/MemoryDb.default;", //
|
||||
"minimongo.MinimongoDb;minimongo/lib/RemoteDb.default;", //
|
||||
"minimongo.MinimongoDb;minimongo/lib/ReplicatingDb.default;Member[masterDb,replicaDb]", //
|
||||
"minimongo.MinimongoDb;minimongo/lib/WebSQLDb.default;", //
|
||||
"minimongo.MinimongoDb;minimongo/lib/types.MinimongoDb;", //
|
||||
"minimongo.MinimongoLocalCollection;minimongo.HybridCollection;Member[localCol]", //
|
||||
"minimongo.MinimongoLocalCollection;minimongo.MinimongoCollection;", //
|
||||
"minimongo.MinimongoLocalCollection;minimongo.MinimongoLocalDb;Member[addCollection].Argument[2].Argument[0]", //
|
||||
"minimongo.MinimongoLocalCollection;minimongo.MinimongoLocalDb;Member[collections].AnyMember", //
|
||||
"minimongo.MinimongoLocalCollection;minimongo/IndexedDb.IndexedDbCollection;", //
|
||||
"minimongo.MinimongoLocalCollection;minimongo/MemoryDb.Collection;", //
|
||||
"minimongo.MinimongoLocalCollection;minimongo/ReplicatingDb.Collection;", //
|
||||
"minimongo.MinimongoLocalCollection;minimongo/ReplicatingDb.Collection;Member[masterCol,replicaCol]", //
|
||||
"minimongo.MinimongoLocalCollection;minimongo/lib/types.MinimongoLocalCollection;", //
|
||||
"minimongo.MinimongoLocalDb;minimongo.MinimongoDb;Member[localDb]", //
|
||||
"minimongo.MinimongoLocalDb;minimongo/lib/HybridDb.default;Member[localDb]", //
|
||||
"minimongo.MinimongoLocalDb;minimongo/lib/IndexedDb.default;", //
|
||||
"minimongo.MinimongoLocalDb;minimongo/lib/ReplicatingDb.default;", //
|
||||
"minimongo.MinimongoLocalDb;minimongo/lib/types.MinimongoLocalDb;", //
|
||||
"minimongo/IndexedDb.IndexedDbCollection;minimongo/IndexedDb.IndexedDbCollectionStatic;Instance", //
|
||||
"minimongo/IndexedDb.IndexedDbCollection;minimongo/lib/IndexedDb.default;Member[collections].AnyMember", //
|
||||
"minimongo/MemoryDb.Collection;minimongo/MemoryDb.CollectionStatic;Instance", //
|
||||
"minimongo/MemoryDb.Collection;minimongo/lib/MemoryDb.default;Member[collections].AnyMember", //
|
||||
"minimongo/RemoteDb.Collection;minimongo/RemoteDb.CollectionStatic;Instance", //
|
||||
"minimongo/RemoteDb.Collection;minimongo/lib/RemoteDb.default;Member[collections].AnyMember", //
|
||||
"minimongo/ReplicatingDb.Collection;minimongo/ReplicatingDb.CollectionStatic;Instance", //
|
||||
"minimongo/ReplicatingDb.Collection;minimongo/lib/ReplicatingDb.default;Member[collections].AnyMember", //
|
||||
"minimongo/lib/HybridDb.default;minimongo/lib/HybridDb.defaultStatic;Instance", //
|
||||
"minimongo/lib/HybridDb.defaultStatic;minimongo/lib/HybridDb;Member[default]", //
|
||||
"minimongo/lib/HybridDb.defaultStatic;minimongo;Member[HybridDb]", //
|
||||
"minimongo/lib/IndexedDb.default;minimongo/lib/IndexedDb.defaultStatic;Instance", //
|
||||
"minimongo/lib/IndexedDb.default;minimongo;Member[utils].Member[autoselectLocalDb].ReturnValue", //
|
||||
"minimongo/lib/IndexedDb.defaultStatic;minimongo/lib/IndexedDb;Member[default]", //
|
||||
"minimongo/lib/IndexedDb.defaultStatic;minimongo;Member[IndexedDb]", //
|
||||
"minimongo/lib/LocalStorageDb.default;minimongo/lib/LocalStorageDb.defaultStatic;Instance", //
|
||||
"minimongo/lib/LocalStorageDb.default;minimongo;Member[utils].Member[autoselectLocalDb].ReturnValue", //
|
||||
"minimongo/lib/LocalStorageDb.defaultStatic;minimongo/lib/LocalStorageDb;Member[default]", //
|
||||
"minimongo/lib/LocalStorageDb.defaultStatic;minimongo;Member[LocalStorageDb]", //
|
||||
"minimongo/lib/MemoryDb.default;minimongo/lib/MemoryDb.defaultStatic;Instance", //
|
||||
"minimongo/lib/MemoryDb.default;minimongo;Member[utils].Member[autoselectLocalDb].ReturnValue", //
|
||||
"minimongo/lib/MemoryDb.defaultStatic;minimongo/lib/MemoryDb;Member[default]", //
|
||||
"minimongo/lib/MemoryDb.defaultStatic;minimongo;Member[MemoryDb]", //
|
||||
"minimongo/lib/RemoteDb.default;minimongo/lib/RemoteDb.defaultStatic;Instance", //
|
||||
"minimongo/lib/RemoteDb.defaultStatic;minimongo/lib/RemoteDb;Member[default]", //
|
||||
"minimongo/lib/RemoteDb.defaultStatic;minimongo;Member[RemoteDb]", //
|
||||
"minimongo/lib/ReplicatingDb.default;minimongo/lib/ReplicatingDb.defaultStatic;Instance", //
|
||||
"minimongo/lib/ReplicatingDb.defaultStatic;minimongo/lib/ReplicatingDb;Member[default]", //
|
||||
"minimongo/lib/ReplicatingDb.defaultStatic;minimongo;Member[ReplicatingDb]", //
|
||||
"minimongo/lib/WebSQLDb.default;minimongo/lib/WebSQLDb.defaultStatic;Instance", //
|
||||
"minimongo/lib/WebSQLDb.default;minimongo;Member[utils].Member[autoselectLocalDb].ReturnValue", //
|
||||
"minimongo/lib/WebSQLDb.defaultStatic;minimongo/lib/WebSQLDb;Member[default]", //
|
||||
"minimongo/lib/WebSQLDb.defaultStatic;minimongo;Member[WebSQLDb]", //
|
||||
"mongodb.Collection;minimongo.MinimongoBaseCollection;", //
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,87 +6,87 @@
|
||||
"language": "javascript",
|
||||
"model": {
|
||||
"typeDefinitions": [
|
||||
"mongodb;Collection;minimongo;MinimongoBaseCollection;",
|
||||
"minimongo;MinimongoBaseCollection;minimongo;MinimongoDb;AnyMember"
|
||||
"mongodb.Collection;minimongo.MinimongoBaseCollection;",
|
||||
"minimongo.MinimongoBaseCollection;minimongo.MinimongoDb;AnyMember"
|
||||
],
|
||||
"sinks": []
|
||||
},
|
||||
"generatedModel": {
|
||||
"//": "Autogenerated section. Manual edits in here will be lost.",
|
||||
"typeDefinitions": [
|
||||
"minimongo/IndexedDb;IndexedDbCollection;minimongo/IndexedDb;IndexedDbCollectionStatic;Instance",
|
||||
"minimongo/IndexedDb;IndexedDbCollection;minimongo/lib/IndexedDb;default;Member[collections].AnyMember",
|
||||
"minimongo/MemoryDb;Collection;minimongo/MemoryDb;CollectionStatic;Instance",
|
||||
"minimongo/MemoryDb;Collection;minimongo/lib/MemoryDb;default;Member[collections].AnyMember",
|
||||
"minimongo/RemoteDb;Collection;minimongo/RemoteDb;CollectionStatic;Instance",
|
||||
"minimongo/RemoteDb;Collection;minimongo/lib/RemoteDb;default;Member[collections].AnyMember",
|
||||
"minimongo/ReplicatingDb;Collection;minimongo/ReplicatingDb;CollectionStatic;Instance",
|
||||
"minimongo/ReplicatingDb;Collection;minimongo/lib/ReplicatingDb;default;Member[collections].AnyMember",
|
||||
"minimongo/lib/HybridDb;default;minimongo/lib/HybridDb;defaultStatic;Instance",
|
||||
"minimongo/lib/HybridDb;defaultStatic;minimongo/lib/HybridDb;;Member[default]",
|
||||
"minimongo/lib/HybridDb;defaultStatic;minimongo;;Member[HybridDb]",
|
||||
"minimongo/lib/IndexedDb;default;minimongo/lib/IndexedDb;defaultStatic;Instance",
|
||||
"minimongo/lib/IndexedDb;default;minimongo;;Member[utils].Member[autoselectLocalDb].ReturnValue",
|
||||
"minimongo/lib/IndexedDb;defaultStatic;minimongo/lib/IndexedDb;;Member[default]",
|
||||
"minimongo/lib/IndexedDb;defaultStatic;minimongo;;Member[IndexedDb]",
|
||||
"minimongo/lib/LocalStorageDb;default;minimongo/lib/LocalStorageDb;defaultStatic;Instance",
|
||||
"minimongo/lib/LocalStorageDb;default;minimongo;;Member[utils].Member[autoselectLocalDb].ReturnValue",
|
||||
"minimongo/lib/LocalStorageDb;defaultStatic;minimongo/lib/LocalStorageDb;;Member[default]",
|
||||
"minimongo/lib/LocalStorageDb;defaultStatic;minimongo;;Member[LocalStorageDb]",
|
||||
"minimongo/lib/MemoryDb;default;minimongo/lib/MemoryDb;defaultStatic;Instance",
|
||||
"minimongo/lib/MemoryDb;default;minimongo;;Member[utils].Member[autoselectLocalDb].ReturnValue",
|
||||
"minimongo/lib/MemoryDb;defaultStatic;minimongo/lib/MemoryDb;;Member[default]",
|
||||
"minimongo/lib/MemoryDb;defaultStatic;minimongo;;Member[MemoryDb]",
|
||||
"minimongo/lib/RemoteDb;default;minimongo/lib/RemoteDb;defaultStatic;Instance",
|
||||
"minimongo/lib/RemoteDb;defaultStatic;minimongo/lib/RemoteDb;;Member[default]",
|
||||
"minimongo/lib/RemoteDb;defaultStatic;minimongo;;Member[RemoteDb]",
|
||||
"minimongo/lib/ReplicatingDb;default;minimongo/lib/ReplicatingDb;defaultStatic;Instance",
|
||||
"minimongo/lib/ReplicatingDb;defaultStatic;minimongo/lib/ReplicatingDb;;Member[default]",
|
||||
"minimongo/lib/ReplicatingDb;defaultStatic;minimongo;;Member[ReplicatingDb]",
|
||||
"minimongo/lib/WebSQLDb;default;minimongo/lib/WebSQLDb;defaultStatic;Instance",
|
||||
"minimongo/lib/WebSQLDb;default;minimongo;;Member[utils].Member[autoselectLocalDb].ReturnValue",
|
||||
"minimongo/lib/WebSQLDb;defaultStatic;minimongo/lib/WebSQLDb;;Member[default]",
|
||||
"minimongo/lib/WebSQLDb;defaultStatic;minimongo;;Member[WebSQLDb]",
|
||||
"minimongo;HybridCollection;minimongo/lib/HybridDb;HybridCollection;",
|
||||
"minimongo;HybridCollection;minimongo/lib/HybridDb;default;Member[collections].AnyMember",
|
||||
"minimongo;HybridCollection;minimongo;HybridCollectionStatic;Instance",
|
||||
"minimongo;HybridCollectionStatic;minimongo/lib/HybridDb;;Member[HybridCollection]",
|
||||
"minimongo;HybridCollectionStatic;minimongo/lib/HybridDb;HybridCollectionStatic;",
|
||||
"minimongo;HybridCollectionStatic;minimongo;;Member[HybridCollection]",
|
||||
"minimongo;MinimongoBaseCollection;minimongo/RemoteDb;Collection;",
|
||||
"minimongo;MinimongoBaseCollection;minimongo/lib/types;MinimongoBaseCollection;",
|
||||
"minimongo;MinimongoBaseCollection;minimongo;HybridCollection;",
|
||||
"minimongo;MinimongoBaseCollection;minimongo;MinimongoCollection;",
|
||||
"minimongo;MinimongoBaseCollection;minimongo;MinimongoLocalCollection;",
|
||||
"minimongo;MinimongoCollection;minimongo/lib/LocalStorageDb;default;Member[collections].AnyMember",
|
||||
"minimongo;MinimongoCollection;minimongo/lib/WebSQLDb;default;Member[collections].AnyMember",
|
||||
"minimongo;MinimongoCollection;minimongo/lib/types;MinimongoCollection;",
|
||||
"minimongo;MinimongoCollection;minimongo;HybridCollection;Member[remoteCol]",
|
||||
"minimongo;MinimongoCollection;minimongo;MinimongoDb;Member[collections].AnyMember",
|
||||
"minimongo;MinimongoDb;minimongo/lib/HybridDb;default;",
|
||||
"minimongo;MinimongoDb;minimongo/lib/HybridDb;default;Member[remoteDb]",
|
||||
"minimongo;MinimongoDb;minimongo/lib/LocalStorageDb;default;",
|
||||
"minimongo;MinimongoDb;minimongo/lib/MemoryDb;default;",
|
||||
"minimongo;MinimongoDb;minimongo/lib/RemoteDb;default;",
|
||||
"minimongo;MinimongoDb;minimongo/lib/ReplicatingDb;default;Member[masterDb,replicaDb]",
|
||||
"minimongo;MinimongoDb;minimongo/lib/WebSQLDb;default;",
|
||||
"minimongo;MinimongoDb;minimongo/lib/types;MinimongoDb;",
|
||||
"minimongo;MinimongoDb;minimongo;MinimongoDb;Member[remoteDb]",
|
||||
"minimongo;MinimongoDb;minimongo;MinimongoLocalDb;",
|
||||
"minimongo;MinimongoLocalCollection;minimongo/IndexedDb;IndexedDbCollection;",
|
||||
"minimongo;MinimongoLocalCollection;minimongo/MemoryDb;Collection;",
|
||||
"minimongo;MinimongoLocalCollection;minimongo/ReplicatingDb;Collection;",
|
||||
"minimongo;MinimongoLocalCollection;minimongo/ReplicatingDb;Collection;Member[masterCol,replicaCol]",
|
||||
"minimongo;MinimongoLocalCollection;minimongo/lib/types;MinimongoLocalCollection;",
|
||||
"minimongo;MinimongoLocalCollection;minimongo;HybridCollection;Member[localCol]",
|
||||
"minimongo;MinimongoLocalCollection;minimongo;MinimongoCollection;",
|
||||
"minimongo;MinimongoLocalCollection;minimongo;MinimongoLocalDb;Member[addCollection].Argument[2].Argument[0]",
|
||||
"minimongo;MinimongoLocalCollection;minimongo;MinimongoLocalDb;Member[collections].AnyMember",
|
||||
"minimongo;MinimongoLocalDb;minimongo/lib/HybridDb;default;Member[localDb]",
|
||||
"minimongo;MinimongoLocalDb;minimongo/lib/IndexedDb;default;",
|
||||
"minimongo;MinimongoLocalDb;minimongo/lib/ReplicatingDb;default;",
|
||||
"minimongo;MinimongoLocalDb;minimongo/lib/types;MinimongoLocalDb;",
|
||||
"minimongo;MinimongoLocalDb;minimongo;MinimongoDb;Member[localDb]"
|
||||
"minimongo.HybridCollection;minimongo.HybridCollectionStatic;Instance",
|
||||
"minimongo.HybridCollection;minimongo/lib/HybridDb.HybridCollection;",
|
||||
"minimongo.HybridCollection;minimongo/lib/HybridDb.default;Member[collections].AnyMember",
|
||||
"minimongo.HybridCollectionStatic;minimongo/lib/HybridDb.HybridCollectionStatic;",
|
||||
"minimongo.HybridCollectionStatic;minimongo/lib/HybridDb;Member[HybridCollection]",
|
||||
"minimongo.HybridCollectionStatic;minimongo;Member[HybridCollection]",
|
||||
"minimongo.MinimongoBaseCollection;minimongo.HybridCollection;",
|
||||
"minimongo.MinimongoBaseCollection;minimongo.MinimongoCollection;",
|
||||
"minimongo.MinimongoBaseCollection;minimongo.MinimongoLocalCollection;",
|
||||
"minimongo.MinimongoBaseCollection;minimongo/RemoteDb.Collection;",
|
||||
"minimongo.MinimongoBaseCollection;minimongo/lib/types.MinimongoBaseCollection;",
|
||||
"minimongo.MinimongoCollection;minimongo.HybridCollection;Member[remoteCol]",
|
||||
"minimongo.MinimongoCollection;minimongo.MinimongoDb;Member[collections].AnyMember",
|
||||
"minimongo.MinimongoCollection;minimongo/lib/LocalStorageDb.default;Member[collections].AnyMember",
|
||||
"minimongo.MinimongoCollection;minimongo/lib/WebSQLDb.default;Member[collections].AnyMember",
|
||||
"minimongo.MinimongoCollection;minimongo/lib/types.MinimongoCollection;",
|
||||
"minimongo.MinimongoDb;minimongo.MinimongoDb;Member[remoteDb]",
|
||||
"minimongo.MinimongoDb;minimongo.MinimongoLocalDb;",
|
||||
"minimongo.MinimongoDb;minimongo/lib/HybridDb.default;",
|
||||
"minimongo.MinimongoDb;minimongo/lib/HybridDb.default;Member[remoteDb]",
|
||||
"minimongo.MinimongoDb;minimongo/lib/LocalStorageDb.default;",
|
||||
"minimongo.MinimongoDb;minimongo/lib/MemoryDb.default;",
|
||||
"minimongo.MinimongoDb;minimongo/lib/RemoteDb.default;",
|
||||
"minimongo.MinimongoDb;minimongo/lib/ReplicatingDb.default;Member[masterDb,replicaDb]",
|
||||
"minimongo.MinimongoDb;minimongo/lib/WebSQLDb.default;",
|
||||
"minimongo.MinimongoDb;minimongo/lib/types.MinimongoDb;",
|
||||
"minimongo.MinimongoLocalCollection;minimongo.HybridCollection;Member[localCol]",
|
||||
"minimongo.MinimongoLocalCollection;minimongo.MinimongoCollection;",
|
||||
"minimongo.MinimongoLocalCollection;minimongo.MinimongoLocalDb;Member[addCollection].Argument[2].Argument[0]",
|
||||
"minimongo.MinimongoLocalCollection;minimongo.MinimongoLocalDb;Member[collections].AnyMember",
|
||||
"minimongo.MinimongoLocalCollection;minimongo/IndexedDb.IndexedDbCollection;",
|
||||
"minimongo.MinimongoLocalCollection;minimongo/MemoryDb.Collection;",
|
||||
"minimongo.MinimongoLocalCollection;minimongo/ReplicatingDb.Collection;",
|
||||
"minimongo.MinimongoLocalCollection;minimongo/ReplicatingDb.Collection;Member[masterCol,replicaCol]",
|
||||
"minimongo.MinimongoLocalCollection;minimongo/lib/types.MinimongoLocalCollection;",
|
||||
"minimongo.MinimongoLocalDb;minimongo.MinimongoDb;Member[localDb]",
|
||||
"minimongo.MinimongoLocalDb;minimongo/lib/HybridDb.default;Member[localDb]",
|
||||
"minimongo.MinimongoLocalDb;minimongo/lib/IndexedDb.default;",
|
||||
"minimongo.MinimongoLocalDb;minimongo/lib/ReplicatingDb.default;",
|
||||
"minimongo.MinimongoLocalDb;minimongo/lib/types.MinimongoLocalDb;",
|
||||
"minimongo/IndexedDb.IndexedDbCollection;minimongo/IndexedDb.IndexedDbCollectionStatic;Instance",
|
||||
"minimongo/IndexedDb.IndexedDbCollection;minimongo/lib/IndexedDb.default;Member[collections].AnyMember",
|
||||
"minimongo/MemoryDb.Collection;minimongo/MemoryDb.CollectionStatic;Instance",
|
||||
"minimongo/MemoryDb.Collection;minimongo/lib/MemoryDb.default;Member[collections].AnyMember",
|
||||
"minimongo/RemoteDb.Collection;minimongo/RemoteDb.CollectionStatic;Instance",
|
||||
"minimongo/RemoteDb.Collection;minimongo/lib/RemoteDb.default;Member[collections].AnyMember",
|
||||
"minimongo/ReplicatingDb.Collection;minimongo/ReplicatingDb.CollectionStatic;Instance",
|
||||
"minimongo/ReplicatingDb.Collection;minimongo/lib/ReplicatingDb.default;Member[collections].AnyMember",
|
||||
"minimongo/lib/HybridDb.default;minimongo/lib/HybridDb.defaultStatic;Instance",
|
||||
"minimongo/lib/HybridDb.defaultStatic;minimongo/lib/HybridDb;Member[default]",
|
||||
"minimongo/lib/HybridDb.defaultStatic;minimongo;Member[HybridDb]",
|
||||
"minimongo/lib/IndexedDb.default;minimongo/lib/IndexedDb.defaultStatic;Instance",
|
||||
"minimongo/lib/IndexedDb.default;minimongo;Member[utils].Member[autoselectLocalDb].ReturnValue",
|
||||
"minimongo/lib/IndexedDb.defaultStatic;minimongo/lib/IndexedDb;Member[default]",
|
||||
"minimongo/lib/IndexedDb.defaultStatic;minimongo;Member[IndexedDb]",
|
||||
"minimongo/lib/LocalStorageDb.default;minimongo/lib/LocalStorageDb.defaultStatic;Instance",
|
||||
"minimongo/lib/LocalStorageDb.default;minimongo;Member[utils].Member[autoselectLocalDb].ReturnValue",
|
||||
"minimongo/lib/LocalStorageDb.defaultStatic;minimongo/lib/LocalStorageDb;Member[default]",
|
||||
"minimongo/lib/LocalStorageDb.defaultStatic;minimongo;Member[LocalStorageDb]",
|
||||
"minimongo/lib/MemoryDb.default;minimongo/lib/MemoryDb.defaultStatic;Instance",
|
||||
"minimongo/lib/MemoryDb.default;minimongo;Member[utils].Member[autoselectLocalDb].ReturnValue",
|
||||
"minimongo/lib/MemoryDb.defaultStatic;minimongo/lib/MemoryDb;Member[default]",
|
||||
"minimongo/lib/MemoryDb.defaultStatic;minimongo;Member[MemoryDb]",
|
||||
"minimongo/lib/RemoteDb.default;minimongo/lib/RemoteDb.defaultStatic;Instance",
|
||||
"minimongo/lib/RemoteDb.defaultStatic;minimongo/lib/RemoteDb;Member[default]",
|
||||
"minimongo/lib/RemoteDb.defaultStatic;minimongo;Member[RemoteDb]",
|
||||
"minimongo/lib/ReplicatingDb.default;minimongo/lib/ReplicatingDb.defaultStatic;Instance",
|
||||
"minimongo/lib/ReplicatingDb.defaultStatic;minimongo/lib/ReplicatingDb;Member[default]",
|
||||
"minimongo/lib/ReplicatingDb.defaultStatic;minimongo;Member[ReplicatingDb]",
|
||||
"minimongo/lib/WebSQLDb.default;minimongo/lib/WebSQLDb.defaultStatic;Instance",
|
||||
"minimongo/lib/WebSQLDb.default;minimongo;Member[utils].Member[autoselectLocalDb].ReturnValue",
|
||||
"minimongo/lib/WebSQLDb.defaultStatic;minimongo/lib/WebSQLDb;Member[default]",
|
||||
"minimongo/lib/WebSQLDb.defaultStatic;minimongo;Member[WebSQLDb]"
|
||||
],
|
||||
"summaries": [],
|
||||
"typeVariables": []
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -6,40 +6,40 @@ private class Types extends ModelInput::TypeModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"mssql;ConnectionPool;mssql/msnodesqlv8;;Member[connect].ReturnValue.Awaited", //
|
||||
"mssql;ConnectionPool;mssql/msnodesqlv8;;Member[pool]", //
|
||||
"mssql;ConnectionPool;mssql;;Member[connect].ReturnValue.Awaited", //
|
||||
"mssql;ConnectionPool;mssql;;Member[pool]", //
|
||||
"mssql;ConnectionPool;mssql;ConnectionPool;Member[connect].WithArity[0].ReturnValue.Awaited", //
|
||||
"mssql;ConnectionPool;mssql;ConnectionPoolStatic;Instance", //
|
||||
"mssql;ConnectionPoolStatic;mssql/msnodesqlv8;;Member[ConnectionPool]", //
|
||||
"mssql;ConnectionPoolStatic;mssql;;Member[ConnectionPool]", //
|
||||
"mssql;PreparedStatement;mssql;PreparedStatement;Member[input,output].ReturnValue", //
|
||||
"mssql;PreparedStatement;mssql;PreparedStatement;Member[prepare].WithArity[0,1,2].ReturnValue", //
|
||||
"mssql;PreparedStatement;mssql;PreparedStatement;Member[unprepare].WithArity[1].ReturnValue", //
|
||||
"mssql;PreparedStatement;mssql;PreparedStatementStatic;Instance", //
|
||||
"mssql;PreparedStatement;mssql;Request;Member[pstatement]", //
|
||||
"mssql;PreparedStatementStatic;mssql/msnodesqlv8;;Member[PreparedStatement]", //
|
||||
"mssql;PreparedStatementStatic;mssql;;Member[PreparedStatement]", //
|
||||
"mssql;Request;mssql;ConnectionPool;Member[request].ReturnValue", //
|
||||
"mssql;Request;mssql;PreparedStatement;Member[execute].WithArity[2].ReturnValue", //
|
||||
"mssql;Request;mssql;Request;Member[input,output,replaceInput].ReturnValue", //
|
||||
"mssql;Request;mssql;Request;Member[replaceOutput].ReturnValue", //
|
||||
"mssql;Request;mssql;RequestStatic;Instance", //
|
||||
"mssql;Request;mssql;Transaction;Member[request].ReturnValue", //
|
||||
"mssql;RequestStatic;mssql/msnodesqlv8;;Member[Request]", //
|
||||
"mssql;RequestStatic;mssql;;Member[Request]", //
|
||||
"mssql;Transaction;mssql;ConnectionPool;Member[transaction].ReturnValue", //
|
||||
"mssql;Transaction;mssql;PreparedStatement;Member[transaction]", //
|
||||
"mssql;Transaction;mssql;Request;Member[transaction]", //
|
||||
"mssql;Transaction;mssql;Transaction;Member[begin].WithArity[0,1,2].ReturnValue", //
|
||||
"mssql;Transaction;mssql;Transaction;Member[begin].WithArity[0,1].ReturnValue.Awaited", //
|
||||
"mssql;Transaction;mssql;TransactionStatic;Instance", //
|
||||
"mssql;TransactionStatic;mssql/msnodesqlv8;;Member[Transaction]", //
|
||||
"mssql;TransactionStatic;mssql;;Member[Transaction]", //
|
||||
"mssql;config;mssql/msnodesqlv8;;Member[connect].Argument[0]", //
|
||||
"mssql;config;mssql;;Member[connect].Argument[0]", //
|
||||
"mssql;config;mssql;ConnectionPoolStatic;WithArity[1,2].Argument[0]", //
|
||||
"mssql.ConnectionPool;mssql.ConnectionPool;Member[connect].WithArity[0].ReturnValue.Awaited", //
|
||||
"mssql.ConnectionPool;mssql.ConnectionPoolStatic;Instance", //
|
||||
"mssql.ConnectionPool;mssql/msnodesqlv8;Member[connect].ReturnValue.Awaited", //
|
||||
"mssql.ConnectionPool;mssql/msnodesqlv8;Member[pool]", //
|
||||
"mssql.ConnectionPool;mssql;Member[connect].ReturnValue.Awaited", //
|
||||
"mssql.ConnectionPool;mssql;Member[pool]", //
|
||||
"mssql.ConnectionPoolStatic;mssql/msnodesqlv8;Member[ConnectionPool]", //
|
||||
"mssql.ConnectionPoolStatic;mssql;Member[ConnectionPool]", //
|
||||
"mssql.PreparedStatement;mssql.PreparedStatement;Member[input,output].ReturnValue", //
|
||||
"mssql.PreparedStatement;mssql.PreparedStatement;Member[prepare].WithArity[0,1,2].ReturnValue", //
|
||||
"mssql.PreparedStatement;mssql.PreparedStatement;Member[unprepare].WithArity[1].ReturnValue", //
|
||||
"mssql.PreparedStatement;mssql.PreparedStatementStatic;Instance", //
|
||||
"mssql.PreparedStatement;mssql.Request;Member[pstatement]", //
|
||||
"mssql.PreparedStatementStatic;mssql/msnodesqlv8;Member[PreparedStatement]", //
|
||||
"mssql.PreparedStatementStatic;mssql;Member[PreparedStatement]", //
|
||||
"mssql.Request;mssql.ConnectionPool;Member[request].ReturnValue", //
|
||||
"mssql.Request;mssql.PreparedStatement;Member[execute].WithArity[2].ReturnValue", //
|
||||
"mssql.Request;mssql.Request;Member[input,output,replaceInput].ReturnValue", //
|
||||
"mssql.Request;mssql.Request;Member[replaceOutput].ReturnValue", //
|
||||
"mssql.Request;mssql.RequestStatic;Instance", //
|
||||
"mssql.Request;mssql.Transaction;Member[request].ReturnValue", //
|
||||
"mssql.RequestStatic;mssql/msnodesqlv8;Member[Request]", //
|
||||
"mssql.RequestStatic;mssql;Member[Request]", //
|
||||
"mssql.Transaction;mssql.ConnectionPool;Member[transaction].ReturnValue", //
|
||||
"mssql.Transaction;mssql.PreparedStatement;Member[transaction]", //
|
||||
"mssql.Transaction;mssql.Request;Member[transaction]", //
|
||||
"mssql.Transaction;mssql.Transaction;Member[begin].WithArity[0,1,2].ReturnValue", //
|
||||
"mssql.Transaction;mssql.Transaction;Member[begin].WithArity[0,1].ReturnValue.Awaited", //
|
||||
"mssql.Transaction;mssql.TransactionStatic;Instance", //
|
||||
"mssql.TransactionStatic;mssql/msnodesqlv8;Member[Transaction]", //
|
||||
"mssql.TransactionStatic;mssql;Member[Transaction]", //
|
||||
"mssql.config;mssql.ConnectionPoolStatic;WithArity[1,2].Argument[0]", //
|
||||
"mssql.config;mssql/msnodesqlv8;Member[connect].Argument[0]", //
|
||||
"mssql.config;mssql;Member[connect].Argument[0]", //
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,55 +10,55 @@
|
||||
"language": "javascript",
|
||||
"usedTypes": {
|
||||
"sources": [
|
||||
"mssql;Request",
|
||||
"mssql;ConnectionPool"
|
||||
"mssql.Request",
|
||||
"mssql.ConnectionPool"
|
||||
],
|
||||
"sinks": [
|
||||
"mssql;config"
|
||||
"mssql.config"
|
||||
]
|
||||
},
|
||||
"model": {
|
||||
"typeDefinitions": [
|
||||
"mssql;Request;mssql;Request;Member[replaceOutput].ReturnValue"
|
||||
"mssql.Request;mssql.Request;Member[replaceOutput].ReturnValue"
|
||||
],
|
||||
"sinks": []
|
||||
},
|
||||
"generatedModel": {
|
||||
"//": "Autogenerated section. Manual edits in here will be lost.",
|
||||
"typeDefinitions": [
|
||||
"mssql;ConnectionPool;mssql/msnodesqlv8;;Member[connect].ReturnValue.Awaited",
|
||||
"mssql;ConnectionPool;mssql/msnodesqlv8;;Member[pool]",
|
||||
"mssql;ConnectionPool;mssql;;Member[connect].ReturnValue.Awaited",
|
||||
"mssql;ConnectionPool;mssql;;Member[pool]",
|
||||
"mssql;ConnectionPool;mssql;ConnectionPool;Member[connect].WithArity[0].ReturnValue.Awaited",
|
||||
"mssql;ConnectionPool;mssql;ConnectionPoolStatic;Instance",
|
||||
"mssql;ConnectionPoolStatic;mssql/msnodesqlv8;;Member[ConnectionPool]",
|
||||
"mssql;ConnectionPoolStatic;mssql;;Member[ConnectionPool]",
|
||||
"mssql;PreparedStatement;mssql;PreparedStatement;Member[input,output].ReturnValue",
|
||||
"mssql;PreparedStatement;mssql;PreparedStatement;Member[prepare].WithArity[0,1,2].ReturnValue",
|
||||
"mssql;PreparedStatement;mssql;PreparedStatement;Member[unprepare].WithArity[1].ReturnValue",
|
||||
"mssql;PreparedStatement;mssql;PreparedStatementStatic;Instance",
|
||||
"mssql;PreparedStatement;mssql;Request;Member[pstatement]",
|
||||
"mssql;PreparedStatementStatic;mssql/msnodesqlv8;;Member[PreparedStatement]",
|
||||
"mssql;PreparedStatementStatic;mssql;;Member[PreparedStatement]",
|
||||
"mssql;Request;mssql;ConnectionPool;Member[request].ReturnValue",
|
||||
"mssql;Request;mssql;PreparedStatement;Member[execute].WithArity[2].ReturnValue",
|
||||
"mssql;Request;mssql;Request;Member[input,output,replaceInput].ReturnValue",
|
||||
"mssql;Request;mssql;RequestStatic;Instance",
|
||||
"mssql;Request;mssql;Transaction;Member[request].ReturnValue",
|
||||
"mssql;RequestStatic;mssql/msnodesqlv8;;Member[Request]",
|
||||
"mssql;RequestStatic;mssql;;Member[Request]",
|
||||
"mssql;Transaction;mssql;ConnectionPool;Member[transaction].ReturnValue",
|
||||
"mssql;Transaction;mssql;PreparedStatement;Member[transaction]",
|
||||
"mssql;Transaction;mssql;Request;Member[transaction]",
|
||||
"mssql;Transaction;mssql;Transaction;Member[begin].WithArity[0,1,2].ReturnValue",
|
||||
"mssql;Transaction;mssql;Transaction;Member[begin].WithArity[0,1].ReturnValue.Awaited",
|
||||
"mssql;Transaction;mssql;TransactionStatic;Instance",
|
||||
"mssql;TransactionStatic;mssql/msnodesqlv8;;Member[Transaction]",
|
||||
"mssql;TransactionStatic;mssql;;Member[Transaction]",
|
||||
"mssql;config;mssql/msnodesqlv8;;Member[connect].Argument[0]",
|
||||
"mssql;config;mssql;;Member[connect].Argument[0]",
|
||||
"mssql;config;mssql;ConnectionPoolStatic;WithArity[1,2].Argument[0]"
|
||||
"mssql.ConnectionPool;mssql.ConnectionPool;Member[connect].WithArity[0].ReturnValue.Awaited",
|
||||
"mssql.ConnectionPool;mssql.ConnectionPoolStatic;Instance",
|
||||
"mssql.ConnectionPool;mssql/msnodesqlv8;Member[connect].ReturnValue.Awaited",
|
||||
"mssql.ConnectionPool;mssql/msnodesqlv8;Member[pool]",
|
||||
"mssql.ConnectionPool;mssql;Member[connect].ReturnValue.Awaited",
|
||||
"mssql.ConnectionPool;mssql;Member[pool]",
|
||||
"mssql.ConnectionPoolStatic;mssql/msnodesqlv8;Member[ConnectionPool]",
|
||||
"mssql.ConnectionPoolStatic;mssql;Member[ConnectionPool]",
|
||||
"mssql.PreparedStatement;mssql.PreparedStatement;Member[input,output].ReturnValue",
|
||||
"mssql.PreparedStatement;mssql.PreparedStatement;Member[prepare].WithArity[0,1,2].ReturnValue",
|
||||
"mssql.PreparedStatement;mssql.PreparedStatement;Member[unprepare].WithArity[1].ReturnValue",
|
||||
"mssql.PreparedStatement;mssql.PreparedStatementStatic;Instance",
|
||||
"mssql.PreparedStatement;mssql.Request;Member[pstatement]",
|
||||
"mssql.PreparedStatementStatic;mssql/msnodesqlv8;Member[PreparedStatement]",
|
||||
"mssql.PreparedStatementStatic;mssql;Member[PreparedStatement]",
|
||||
"mssql.Request;mssql.ConnectionPool;Member[request].ReturnValue",
|
||||
"mssql.Request;mssql.PreparedStatement;Member[execute].WithArity[2].ReturnValue",
|
||||
"mssql.Request;mssql.Request;Member[input,output,replaceInput].ReturnValue",
|
||||
"mssql.Request;mssql.RequestStatic;Instance",
|
||||
"mssql.Request;mssql.Transaction;Member[request].ReturnValue",
|
||||
"mssql.RequestStatic;mssql/msnodesqlv8;Member[Request]",
|
||||
"mssql.RequestStatic;mssql;Member[Request]",
|
||||
"mssql.Transaction;mssql.ConnectionPool;Member[transaction].ReturnValue",
|
||||
"mssql.Transaction;mssql.PreparedStatement;Member[transaction]",
|
||||
"mssql.Transaction;mssql.Request;Member[transaction]",
|
||||
"mssql.Transaction;mssql.Transaction;Member[begin].WithArity[0,1,2].ReturnValue",
|
||||
"mssql.Transaction;mssql.Transaction;Member[begin].WithArity[0,1].ReturnValue.Awaited",
|
||||
"mssql.Transaction;mssql.TransactionStatic;Instance",
|
||||
"mssql.TransactionStatic;mssql/msnodesqlv8;Member[Transaction]",
|
||||
"mssql.TransactionStatic;mssql;Member[Transaction]",
|
||||
"mssql.config;mssql.ConnectionPoolStatic;WithArity[1,2].Argument[0]",
|
||||
"mssql.config;mssql/msnodesqlv8;Member[connect].Argument[0]",
|
||||
"mssql.config;mssql;Member[connect].Argument[0]"
|
||||
],
|
||||
"summaries": [],
|
||||
"typeVariables": []
|
||||
|
||||
@@ -6,63 +6,63 @@ private class Types extends ModelInput::TypeModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"mysql2/promise;Connection;mysql2/promise;;Member[createConnectionPromise].ReturnValue.Awaited", //
|
||||
"mysql2/promise;Connection;mysql2/promise;;Member[createConnection].ReturnValue.Awaited", //
|
||||
"mysql2/promise;Connection;mysql2/promise;PoolConnection;", //
|
||||
"mysql2/promise;Connection;mysql2;;Member[createConnectionPromise].ReturnValue.Awaited", //
|
||||
"mysql2/promise;Connection;mysql2;Connection;Member[promise].ReturnValue", //
|
||||
"mysql2/promise;Pool;mysql2/promise;;Member[createPool].ReturnValue", //
|
||||
"mysql2/promise;Pool;mysql2/promise;Pool;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue", //
|
||||
"mysql2/promise;Pool;mysql2;Pool;Member[promise].ReturnValue", //
|
||||
"mysql2/promise;PoolConnection;mysql2/promise;Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connection,0=release].Argument[1].Argument[0]", //
|
||||
"mysql2/promise;PoolConnection;mysql2/promise;Pool;Member[getConnection].ReturnValue.Awaited", //
|
||||
"mysql2/promise;PoolConnection;mysql2;PoolConnection;Member[promise].ReturnValue", //
|
||||
"mysql2/typings/mysql/lib/Connection;;mysql2/typings/mysql/lib/PoolConnection;;", //
|
||||
"mysql2/typings/mysql/lib/Connection;;mysql2/typings/mysql;Connection;", //
|
||||
"mysql2/typings/mysql/lib/PoolConnection;;mysql2/typings/mysql;PoolConnection;", //
|
||||
"mysql2/typings/mysql;Connection;mysql2;Connection;", //
|
||||
"mysql2/typings/mysql;Connection;mysql2;Pool;", //
|
||||
"mysql2/typings/mysql;PoolConnection;mysql2;PoolConnection;", //
|
||||
"mysql2;Connection;mysql2;;Member[createConnection].ReturnValue", //
|
||||
"mysql2;Connection;mysql2;PoolConnection;", //
|
||||
"mysql2;Connection;mysql2;authPlugins;Argument[0].Member[connection]", //
|
||||
"mysql2;ConnectionOptions;mysql2/promise;;Member[createConnection].Argument[0]", //
|
||||
"mysql2;ConnectionOptions;mysql2/promise;Connection;Member[changeUser].Argument[0]", //
|
||||
"mysql2;ConnectionOptions;mysql2/promise;Connection;Member[config]", //
|
||||
"mysql2;ConnectionOptions;mysql2;;Member[createConnection].Argument[0]", //
|
||||
"mysql2;ConnectionOptions;mysql2;PoolOptions;", //
|
||||
"mysql2;Pool;mysql2;;Member[createPool].ReturnValue", //
|
||||
"mysql2;Pool;mysql2;Pool;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue", //
|
||||
"mysql2;PoolConnection;mysql2;Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connection,0=release].Argument[1].Argument[0]", //
|
||||
"mysql2;PoolConnection;mysql2;Pool;Member[getConnection].Argument[0].Argument[1]", //
|
||||
"mysql2;PoolOptions;mysql2/promise;;Member[createPool].Argument[0]", //
|
||||
"mysql2;PoolOptions;mysql2;;Member[createPool].Argument[0]", //
|
||||
"mysql2;authPlugins;mysql2;ConnectionOptions;Member[authPlugins].AnyMember", //
|
||||
"mysql;Connection;mysql;;Member[createConnection].ReturnValue", //
|
||||
"mysql;Connection;mysql;Pool;Member[on,addListener].WithStringArgument[0=acquire,0=connection,0=release].Argument[1].Argument[0]", //
|
||||
"mysql;Connection;mysql;PoolConnection;", //
|
||||
"mysql;Connection;mysql;Query;Member[RowDataPacket].Argument[2]", //
|
||||
"mysql;ConnectionConfig;mysql;;Member[createConnection].Argument[0]", //
|
||||
"mysql;ConnectionConfig;mysql;Connection;Member[config]", //
|
||||
"mysql;ConnectionConfig;mysql;PoolConfig;", //
|
||||
"mysql;ConnectionOptions;mysql;Connection;Member[changeUser].WithArity[1,2].Argument[0]", //
|
||||
"mysql;ConnectionOptions;mysql;ConnectionConfig;", //
|
||||
"mysql;Pool;mysql;;Member[createPool].ReturnValue", //
|
||||
"mysql;Pool;mysql;PoolCluster;Member[of].ReturnValue", //
|
||||
"mysql;PoolCluster;mysql;;Member[createPoolCluster].ReturnValue", //
|
||||
"mysql;PoolConfig;mysql;;Member[createPool].Argument[0]", //
|
||||
"mysql;PoolConfig;mysql;PoolCluster;Member[add].Argument[1]", //
|
||||
"mysql;PoolConfig;mysql;PoolCluster;Member[add].WithArity[1].Argument[0]", //
|
||||
"mysql;PoolConnection;mysql;Pool;Member[acquireConnection].Argument[0]", //
|
||||
"mysql;PoolConnection;mysql;Pool;Member[acquireConnection].Argument[1].Argument[1]", //
|
||||
"mysql;PoolConnection;mysql;Pool;Member[getConnection].Argument[0].Argument[1]", //
|
||||
"mysql;PoolConnection;mysql;PoolCluster;Member[getConnection].Argument[1,2].Argument[1]", //
|
||||
"mysql;PoolConnection;mysql;PoolCluster;Member[getConnection].WithArity[1].Argument[0].Argument[1]", //
|
||||
"mysql;Query;mysql;Query;Member[on].ReturnValue", //
|
||||
"mysql;Query;mysql;QueryFunction;ReturnValue", //
|
||||
"mysql;Query;mysql;QueryFunction;WithArity[1].Argument[0]", //
|
||||
"mysql;QueryFunction;mysql;Connection;Member[createQuery,query]", //
|
||||
"mysql;QueryFunction;mysql;Pool;Member[query]", //
|
||||
"mysql.Connection;mysql.Pool;Member[on,addListener].WithStringArgument[0=acquire,0=connection,0=release].Argument[1].Argument[0]", //
|
||||
"mysql.Connection;mysql.PoolConnection;", //
|
||||
"mysql.Connection;mysql.Query;Member[RowDataPacket].Argument[2]", //
|
||||
"mysql.Connection;mysql;Member[createConnection].ReturnValue", //
|
||||
"mysql.ConnectionConfig;mysql.Connection;Member[config]", //
|
||||
"mysql.ConnectionConfig;mysql.PoolConfig;", //
|
||||
"mysql.ConnectionConfig;mysql;Member[createConnection].Argument[0]", //
|
||||
"mysql.ConnectionOptions;mysql.Connection;Member[changeUser].WithArity[1,2].Argument[0]", //
|
||||
"mysql.ConnectionOptions;mysql.ConnectionConfig;", //
|
||||
"mysql.Pool;mysql.PoolCluster;Member[of].ReturnValue", //
|
||||
"mysql.Pool;mysql;Member[createPool].ReturnValue", //
|
||||
"mysql.PoolCluster;mysql;Member[createPoolCluster].ReturnValue", //
|
||||
"mysql.PoolConfig;mysql.PoolCluster;Member[add].Argument[1]", //
|
||||
"mysql.PoolConfig;mysql.PoolCluster;Member[add].WithArity[1].Argument[0]", //
|
||||
"mysql.PoolConfig;mysql;Member[createPool].Argument[0]", //
|
||||
"mysql.PoolConnection;mysql.Pool;Member[acquireConnection].Argument[0]", //
|
||||
"mysql.PoolConnection;mysql.Pool;Member[acquireConnection].Argument[1].Argument[1]", //
|
||||
"mysql.PoolConnection;mysql.Pool;Member[getConnection].Argument[0].Argument[1]", //
|
||||
"mysql.PoolConnection;mysql.PoolCluster;Member[getConnection].Argument[1,2].Argument[1]", //
|
||||
"mysql.PoolConnection;mysql.PoolCluster;Member[getConnection].WithArity[1].Argument[0].Argument[1]", //
|
||||
"mysql.Query;mysql.Query;Member[on].ReturnValue", //
|
||||
"mysql.Query;mysql.QueryFunction;ReturnValue", //
|
||||
"mysql.Query;mysql.QueryFunction;WithArity[1].Argument[0]", //
|
||||
"mysql.QueryFunction;mysql.Connection;Member[createQuery,query]", //
|
||||
"mysql.QueryFunction;mysql.Pool;Member[query]", //
|
||||
"mysql2.Connection;mysql2.PoolConnection;", //
|
||||
"mysql2.Connection;mysql2.authPlugins;Argument[0].Member[connection]", //
|
||||
"mysql2.Connection;mysql2;Member[createConnection].ReturnValue", //
|
||||
"mysql2.ConnectionOptions;mysql2.PoolOptions;", //
|
||||
"mysql2.ConnectionOptions;mysql2/promise.Connection;Member[changeUser].Argument[0]", //
|
||||
"mysql2.ConnectionOptions;mysql2/promise.Connection;Member[config]", //
|
||||
"mysql2.ConnectionOptions;mysql2/promise;Member[createConnection].Argument[0]", //
|
||||
"mysql2.ConnectionOptions;mysql2;Member[createConnection].Argument[0]", //
|
||||
"mysql2.Pool;mysql2.Pool;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue", //
|
||||
"mysql2.Pool;mysql2;Member[createPool].ReturnValue", //
|
||||
"mysql2.PoolConnection;mysql2.Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connection,0=release].Argument[1].Argument[0]", //
|
||||
"mysql2.PoolConnection;mysql2.Pool;Member[getConnection].Argument[0].Argument[1]", //
|
||||
"mysql2.PoolOptions;mysql2/promise;Member[createPool].Argument[0]", //
|
||||
"mysql2.PoolOptions;mysql2;Member[createPool].Argument[0]", //
|
||||
"mysql2.authPlugins;mysql2.ConnectionOptions;Member[authPlugins].AnyMember", //
|
||||
"mysql2/promise.Connection;mysql2.Connection;Member[promise].ReturnValue", //
|
||||
"mysql2/promise.Connection;mysql2/promise.PoolConnection;", //
|
||||
"mysql2/promise.Connection;mysql2/promise;Member[createConnectionPromise].ReturnValue.Awaited", //
|
||||
"mysql2/promise.Connection;mysql2/promise;Member[createConnection].ReturnValue.Awaited", //
|
||||
"mysql2/promise.Connection;mysql2;Member[createConnectionPromise].ReturnValue.Awaited", //
|
||||
"mysql2/promise.Pool;mysql2.Pool;Member[promise].ReturnValue", //
|
||||
"mysql2/promise.Pool;mysql2/promise.Pool;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue", //
|
||||
"mysql2/promise.Pool;mysql2/promise;Member[createPool].ReturnValue", //
|
||||
"mysql2/promise.PoolConnection;mysql2.PoolConnection;Member[promise].ReturnValue", //
|
||||
"mysql2/promise.PoolConnection;mysql2/promise.Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connection,0=release].Argument[1].Argument[0]", //
|
||||
"mysql2/promise.PoolConnection;mysql2/promise.Pool;Member[getConnection].ReturnValue.Awaited", //
|
||||
"mysql2/typings/mysql.Connection;mysql2.Connection;", //
|
||||
"mysql2/typings/mysql.Connection;mysql2.Pool;", //
|
||||
"mysql2/typings/mysql.PoolConnection;mysql2.PoolConnection;", //
|
||||
"mysql2/typings/mysql/lib/Connection;mysql2/typings/mysql.Connection;", //
|
||||
"mysql2/typings/mysql/lib/Connection;mysql2/typings/mysql/lib/PoolConnection;", //
|
||||
"mysql2/typings/mysql/lib/PoolConnection;mysql2/typings/mysql.PoolConnection;", //
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -71,9 +71,9 @@ private class Summaries extends ModelInput::SummaryModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"mysql2/promise;Pool;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type", //
|
||||
"mysql2/typings/mysql/lib/Connection;;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type", //
|
||||
"mysql2;Pool;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type", //
|
||||
"mysql2.Pool;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type", //
|
||||
"mysql2/promise.Pool;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type", //
|
||||
"mysql2/typings/mysql/lib/Connection;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type", //
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,89 +11,89 @@
|
||||
"language": "javascript",
|
||||
"usedTypes": {
|
||||
"sources": [
|
||||
"mysql;Pool",
|
||||
"mysql;Connection",
|
||||
"mysql2;Pool",
|
||||
"mysql2;Connection",
|
||||
"mysql2/promise;Pool",
|
||||
"mysql2/promise;Connection"
|
||||
"mysql.Pool",
|
||||
"mysql.Connection",
|
||||
"mysql2.Pool",
|
||||
"mysql2.Connection",
|
||||
"mysql2/promise.Pool",
|
||||
"mysql2/promise.Connection"
|
||||
],
|
||||
"sinks": [
|
||||
"mysql;ConnectionOptions",
|
||||
"mysql2;ConnectionOptions",
|
||||
"mysql2/promise;ConnectionOptions"
|
||||
"mysql.ConnectionOptions",
|
||||
"mysql2.ConnectionOptions",
|
||||
"mysql2/promise.ConnectionOptions"
|
||||
]
|
||||
},
|
||||
"model": {
|
||||
"sinks": [],
|
||||
"typeDefinitions": [
|
||||
"mysql;Connection;mysql;Pool;Member[on,addListener].WithStringArgument[0=acquire,0=connection,0=release].Argument[1].Argument[0]",
|
||||
"mysql2/promise;Connection;mysql2;;Member[createConnectionPromise].ReturnValue.Awaited",
|
||||
"mysql2/promise;Connection;mysql2/promise;;Member[createConnectionPromise].ReturnValue.Awaited"
|
||||
"mysql.Connection;mysql.Pool;Member[on,addListener].WithStringArgument[0=acquire,0=connection,0=release].Argument[1].Argument[0]",
|
||||
"mysql2/promise.Connection;mysql2;Member[createConnectionPromise].ReturnValue.Awaited",
|
||||
"mysql2/promise.Connection;mysql2/promise;Member[createConnectionPromise].ReturnValue.Awaited"
|
||||
]
|
||||
},
|
||||
"generatedModel": {
|
||||
"//": "Autogenerated section. Manual edits in here will be lost.",
|
||||
"typeDefinitions": [
|
||||
"mysql2/promise;Connection;mysql2/promise;;Member[createConnection].ReturnValue.Awaited",
|
||||
"mysql2/promise;Connection;mysql2/promise;PoolConnection;",
|
||||
"mysql2/promise;Connection;mysql2;Connection;Member[promise].ReturnValue",
|
||||
"mysql2/promise;Pool;mysql2/promise;;Member[createPool].ReturnValue",
|
||||
"mysql2/promise;Pool;mysql2/promise;Pool;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue",
|
||||
"mysql2/promise;Pool;mysql2;Pool;Member[promise].ReturnValue",
|
||||
"mysql2/promise;PoolConnection;mysql2/promise;Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connection,0=release].Argument[1].Argument[0]",
|
||||
"mysql2/promise;PoolConnection;mysql2/promise;Pool;Member[getConnection].ReturnValue.Awaited",
|
||||
"mysql2/promise;PoolConnection;mysql2;PoolConnection;Member[promise].ReturnValue",
|
||||
"mysql2/typings/mysql/lib/Connection;;mysql2/typings/mysql/lib/PoolConnection;;",
|
||||
"mysql2/typings/mysql/lib/Connection;;mysql2/typings/mysql;Connection;",
|
||||
"mysql2/typings/mysql/lib/PoolConnection;;mysql2/typings/mysql;PoolConnection;",
|
||||
"mysql2/typings/mysql;Connection;mysql2;Connection;",
|
||||
"mysql2/typings/mysql;Connection;mysql2;Pool;",
|
||||
"mysql2/typings/mysql;PoolConnection;mysql2;PoolConnection;",
|
||||
"mysql2;Connection;mysql2;;Member[createConnection].ReturnValue",
|
||||
"mysql2;Connection;mysql2;PoolConnection;",
|
||||
"mysql2;Connection;mysql2;authPlugins;Argument[0].Member[connection]",
|
||||
"mysql2;ConnectionOptions;mysql2/promise;;Member[createConnection].Argument[0]",
|
||||
"mysql2;ConnectionOptions;mysql2/promise;Connection;Member[changeUser].Argument[0]",
|
||||
"mysql2;ConnectionOptions;mysql2/promise;Connection;Member[config]",
|
||||
"mysql2;ConnectionOptions;mysql2;;Member[createConnection].Argument[0]",
|
||||
"mysql2;ConnectionOptions;mysql2;PoolOptions;",
|
||||
"mysql2;Pool;mysql2;;Member[createPool].ReturnValue",
|
||||
"mysql2;Pool;mysql2;Pool;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue",
|
||||
"mysql2;PoolConnection;mysql2;Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connection,0=release].Argument[1].Argument[0]",
|
||||
"mysql2;PoolConnection;mysql2;Pool;Member[getConnection].Argument[0].Argument[1]",
|
||||
"mysql2;PoolOptions;mysql2/promise;;Member[createPool].Argument[0]",
|
||||
"mysql2;PoolOptions;mysql2;;Member[createPool].Argument[0]",
|
||||
"mysql2;authPlugins;mysql2;ConnectionOptions;Member[authPlugins].AnyMember",
|
||||
"mysql;Connection;mysql;;Member[createConnection].ReturnValue",
|
||||
"mysql;Connection;mysql;PoolConnection;",
|
||||
"mysql;Connection;mysql;Query;Member[RowDataPacket].Argument[2]",
|
||||
"mysql;ConnectionConfig;mysql;;Member[createConnection].Argument[0]",
|
||||
"mysql;ConnectionConfig;mysql;Connection;Member[config]",
|
||||
"mysql;ConnectionConfig;mysql;PoolConfig;",
|
||||
"mysql;ConnectionOptions;mysql;Connection;Member[changeUser].WithArity[1,2].Argument[0]",
|
||||
"mysql;ConnectionOptions;mysql;ConnectionConfig;",
|
||||
"mysql;Pool;mysql;;Member[createPool].ReturnValue",
|
||||
"mysql;Pool;mysql;PoolCluster;Member[of].ReturnValue",
|
||||
"mysql;PoolCluster;mysql;;Member[createPoolCluster].ReturnValue",
|
||||
"mysql;PoolConfig;mysql;;Member[createPool].Argument[0]",
|
||||
"mysql;PoolConfig;mysql;PoolCluster;Member[add].Argument[1]",
|
||||
"mysql;PoolConfig;mysql;PoolCluster;Member[add].WithArity[1].Argument[0]",
|
||||
"mysql;PoolConnection;mysql;Pool;Member[acquireConnection].Argument[0]",
|
||||
"mysql;PoolConnection;mysql;Pool;Member[acquireConnection].Argument[1].Argument[1]",
|
||||
"mysql;PoolConnection;mysql;Pool;Member[getConnection].Argument[0].Argument[1]",
|
||||
"mysql;PoolConnection;mysql;PoolCluster;Member[getConnection].Argument[1,2].Argument[1]",
|
||||
"mysql;PoolConnection;mysql;PoolCluster;Member[getConnection].WithArity[1].Argument[0].Argument[1]",
|
||||
"mysql;Query;mysql;Query;Member[on].ReturnValue",
|
||||
"mysql;Query;mysql;QueryFunction;ReturnValue",
|
||||
"mysql;Query;mysql;QueryFunction;WithArity[1].Argument[0]",
|
||||
"mysql;QueryFunction;mysql;Connection;Member[createQuery,query]",
|
||||
"mysql;QueryFunction;mysql;Pool;Member[query]"
|
||||
"mysql.Connection;mysql.PoolConnection;",
|
||||
"mysql.Connection;mysql.Query;Member[RowDataPacket].Argument[2]",
|
||||
"mysql.Connection;mysql;Member[createConnection].ReturnValue",
|
||||
"mysql.ConnectionConfig;mysql.Connection;Member[config]",
|
||||
"mysql.ConnectionConfig;mysql.PoolConfig;",
|
||||
"mysql.ConnectionConfig;mysql;Member[createConnection].Argument[0]",
|
||||
"mysql.ConnectionOptions;mysql.Connection;Member[changeUser].WithArity[1,2].Argument[0]",
|
||||
"mysql.ConnectionOptions;mysql.ConnectionConfig;",
|
||||
"mysql.Pool;mysql.PoolCluster;Member[of].ReturnValue",
|
||||
"mysql.Pool;mysql;Member[createPool].ReturnValue",
|
||||
"mysql.PoolCluster;mysql;Member[createPoolCluster].ReturnValue",
|
||||
"mysql.PoolConfig;mysql.PoolCluster;Member[add].Argument[1]",
|
||||
"mysql.PoolConfig;mysql.PoolCluster;Member[add].WithArity[1].Argument[0]",
|
||||
"mysql.PoolConfig;mysql;Member[createPool].Argument[0]",
|
||||
"mysql.PoolConnection;mysql.Pool;Member[acquireConnection].Argument[0]",
|
||||
"mysql.PoolConnection;mysql.Pool;Member[acquireConnection].Argument[1].Argument[1]",
|
||||
"mysql.PoolConnection;mysql.Pool;Member[getConnection].Argument[0].Argument[1]",
|
||||
"mysql.PoolConnection;mysql.PoolCluster;Member[getConnection].Argument[1,2].Argument[1]",
|
||||
"mysql.PoolConnection;mysql.PoolCluster;Member[getConnection].WithArity[1].Argument[0].Argument[1]",
|
||||
"mysql.Query;mysql.Query;Member[on].ReturnValue",
|
||||
"mysql.Query;mysql.QueryFunction;ReturnValue",
|
||||
"mysql.Query;mysql.QueryFunction;WithArity[1].Argument[0]",
|
||||
"mysql.QueryFunction;mysql.Connection;Member[createQuery,query]",
|
||||
"mysql.QueryFunction;mysql.Pool;Member[query]",
|
||||
"mysql2.Connection;mysql2.PoolConnection;",
|
||||
"mysql2.Connection;mysql2.authPlugins;Argument[0].Member[connection]",
|
||||
"mysql2.Connection;mysql2;Member[createConnection].ReturnValue",
|
||||
"mysql2.ConnectionOptions;mysql2.PoolOptions;",
|
||||
"mysql2.ConnectionOptions;mysql2/promise.Connection;Member[changeUser].Argument[0]",
|
||||
"mysql2.ConnectionOptions;mysql2/promise.Connection;Member[config]",
|
||||
"mysql2.ConnectionOptions;mysql2/promise;Member[createConnection].Argument[0]",
|
||||
"mysql2.ConnectionOptions;mysql2;Member[createConnection].Argument[0]",
|
||||
"mysql2.Pool;mysql2.Pool;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue",
|
||||
"mysql2.Pool;mysql2;Member[createPool].ReturnValue",
|
||||
"mysql2.PoolConnection;mysql2.Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connection,0=release].Argument[1].Argument[0]",
|
||||
"mysql2.PoolConnection;mysql2.Pool;Member[getConnection].Argument[0].Argument[1]",
|
||||
"mysql2.PoolOptions;mysql2/promise;Member[createPool].Argument[0]",
|
||||
"mysql2.PoolOptions;mysql2;Member[createPool].Argument[0]",
|
||||
"mysql2.authPlugins;mysql2.ConnectionOptions;Member[authPlugins].AnyMember",
|
||||
"mysql2/promise.Connection;mysql2.Connection;Member[promise].ReturnValue",
|
||||
"mysql2/promise.Connection;mysql2/promise.PoolConnection;",
|
||||
"mysql2/promise.Connection;mysql2/promise;Member[createConnection].ReturnValue.Awaited",
|
||||
"mysql2/promise.Pool;mysql2.Pool;Member[promise].ReturnValue",
|
||||
"mysql2/promise.Pool;mysql2/promise.Pool;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue",
|
||||
"mysql2/promise.Pool;mysql2/promise;Member[createPool].ReturnValue",
|
||||
"mysql2/promise.PoolConnection;mysql2.PoolConnection;Member[promise].ReturnValue",
|
||||
"mysql2/promise.PoolConnection;mysql2/promise.Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connection,0=release].Argument[1].Argument[0]",
|
||||
"mysql2/promise.PoolConnection;mysql2/promise.Pool;Member[getConnection].ReturnValue.Awaited",
|
||||
"mysql2/typings/mysql.Connection;mysql2.Connection;",
|
||||
"mysql2/typings/mysql.Connection;mysql2.Pool;",
|
||||
"mysql2/typings/mysql.PoolConnection;mysql2.PoolConnection;",
|
||||
"mysql2/typings/mysql/lib/Connection;mysql2/typings/mysql.Connection;",
|
||||
"mysql2/typings/mysql/lib/Connection;mysql2/typings/mysql/lib/PoolConnection;",
|
||||
"mysql2/typings/mysql/lib/PoolConnection;mysql2/typings/mysql.PoolConnection;"
|
||||
],
|
||||
"summaries": [
|
||||
"mysql2/promise;Pool;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type",
|
||||
"mysql2/typings/mysql/lib/Connection;;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type",
|
||||
"mysql2;Pool;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type"
|
||||
"mysql2.Pool;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type",
|
||||
"mysql2/promise.Pool;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type",
|
||||
"mysql2/typings/mysql/lib/Connection;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type"
|
||||
],
|
||||
"typeVariables": []
|
||||
}
|
||||
|
||||
@@ -6,71 +6,71 @@ private class Types extends ModelInput::TypeModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"events;;pg-cursor;;", //
|
||||
"events;;pg-promise/pg-subset;pg.IClient;", //
|
||||
"events;;pg-promise/pg-subset;pg.IConnection;", //
|
||||
"events;;pg-promise/pg-subset;pg.IPool;", //
|
||||
"events;;pg;ClientBase;", //
|
||||
"events;;pg;Events;", //
|
||||
"events;;pg;Pool;", //
|
||||
"global;NodeJS.EventEmitter;events;;", //
|
||||
"pg-cursor;;pg-cursor;Static;Instance", //
|
||||
"pg-cursor;Static;pg-cursor;;", //
|
||||
"pg-pool;;pg-pool;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue", //
|
||||
"pg-pool;;pg-pool;Static;Instance", //
|
||||
"pg-pool;Static;pg-pool;;", //
|
||||
"pg-promise/pg-subset;pg.IClient;pg-promise/pg-subset;;Member[Client].Instance", //
|
||||
"pg-promise/pg-subset;pg.IClient;pg-promise;;Argument[0].TypeVar[pg-promise.IInitOptions.1]", //
|
||||
"pg-promise/pg-subset;pg.IClient;pg-promise;IMain;Argument[0].TypeVar[pg-promise/pg-subset.pg.IConnectionParameters.0]", //
|
||||
"pg-promise/pg-subset;pg.IClient;pg-promise;IMain;ReturnValue.TypeVar[pg-promise.IDatabase.1]", //
|
||||
"pg-promise/pg-subset;pg.IConnection;pg-promise/pg-subset;pg.IClient;Member[connection]", //
|
||||
"pg-promise/pg-subset;pg.IPool;pg-promise;IDatabase;Member[$pool]", //
|
||||
"pg-promise;IBaseProtocol;pg-promise/typescript/pg-promise;IBaseProtocol;", //
|
||||
"pg-promise;IBaseProtocol;pg-promise;IConnected;", //
|
||||
"pg-promise;IBaseProtocol;pg-promise;IDatabase;", //
|
||||
"pg-promise;IBaseProtocol;pg-promise;ITask;", //
|
||||
"pg-promise;IConnected;pg-promise/typescript/pg-promise;IConnected;", //
|
||||
"pg-promise;IConnected;pg-promise;IDatabase;Member[connect].ReturnValue.Awaited", //
|
||||
"pg-promise;IDatabase;pg-promise/typescript/pg-promise;IDatabase;", //
|
||||
"pg-promise;IDatabase;pg-promise;IInitOptions;Member[extend].Argument[0]", //
|
||||
"pg-promise;IDatabase;pg-promise;IMain;ReturnValue", //
|
||||
"pg-promise;IInitOptions;pg-promise/typescript/pg-promise;IInitOptions;", //
|
||||
"pg-promise;IInitOptions;pg-promise;;Argument[0]", //
|
||||
"pg-promise;IInitOptions;pg-promise;ILibConfig;Member[options]", //
|
||||
"pg-promise;ILibConfig;pg-promise/typescript/pg-promise;ILibConfig;", //
|
||||
"pg-promise;ILibConfig;pg-promise;IDatabase;Member[$config]", //
|
||||
"pg-promise;IMain;pg-promise/typescript/pg-promise;IMain;", //
|
||||
"pg-promise;IMain;pg-promise;;ReturnValue", //
|
||||
"pg-promise;IMain;pg-promise;ILibConfig;Member[pgp]", //
|
||||
"pg-promise;ITask;pg-promise/typescript/pg-promise;ITask;", //
|
||||
"pg-promise;ITask;pg-promise;IBaseProtocol;Member[task,taskIf,tx,txIf].Argument[1].Argument[0]", //
|
||||
"pg-promise;ITask;pg-promise;IBaseProtocol;Member[task,taskIf,tx,txIf].WithArity[1].Argument[0].Argument[0]", //
|
||||
"pg-promise;ITask;pg-promise;IBaseProtocol;Member[taskIf].WithArity[2].Argument[0].Member[cnd].Argument[0]", //
|
||||
"pg-promise;ITask;pg-promise;IBaseProtocol;Member[txIf].WithArity[2].Argument[0].Member[cnd,reusable].Argument[0]", //
|
||||
"pg;Client;pg-pool;Static;Instance.TypeVar[pg-pool..0]", //
|
||||
"pg;Client;pg-promise/pg-subset;pg.IClient;", //
|
||||
"pg;Client;pg;ClientStatic;Instance", //
|
||||
"pg;Client;pg;Events;Member[addListener,on,once,prependListener,prependOnceListener].Argument[1].Argument[1]", //
|
||||
"pg;ClientBase;pg;Client;", //
|
||||
"pg;ClientBase;pg;PoolClient;", //
|
||||
"pg;ClientStatic;pg;;Member[Client]", //
|
||||
"pg;Connection;pg-promise/pg-subset;pg.IConnection;", //
|
||||
"pg;Events;pg;Events;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue", //
|
||||
"pg;Events;pg;EventsStatic;Instance", //
|
||||
"pg;EventsStatic;pg;;Member[Events]", //
|
||||
"pg;Pool;pg-pool;;", //
|
||||
"pg;Pool;pg-promise/pg-subset;pg.IPool;", //
|
||||
"pg;Pool;pg;Pool;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue", //
|
||||
"pg;Pool;pg;PoolStatic;Instance", //
|
||||
"pg;PoolClient;pg-pool;;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connect,0=remove].Argument[1].Argument[0]", //
|
||||
"pg;PoolClient;pg-pool;;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=error].Argument[1].Argument[1]", //
|
||||
"pg;PoolClient;pg-pool;;Member[connect].Argument[0].Argument[1]", //
|
||||
"pg;PoolClient;pg-pool;;Member[connect].WithArity[0].ReturnValue.Awaited", //
|
||||
"pg;PoolClient;pg;Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connect,0=remove].Argument[1].Argument[0]", //
|
||||
"pg;PoolClient;pg;Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=error].Argument[1].Argument[1]", //
|
||||
"pg;PoolClient;pg;Pool;Member[connect].Argument[0].Argument[1]", //
|
||||
"pg;PoolClient;pg;Pool;Member[connect].WithArity[0].ReturnValue.Awaited", //
|
||||
"pg;PoolStatic;pg;;Member[Pool]", //
|
||||
"events;pg-cursor;", //
|
||||
"events;pg-promise/pg-subset.pg.IClient;", //
|
||||
"events;pg-promise/pg-subset.pg.IConnection;", //
|
||||
"events;pg-promise/pg-subset.pg.IPool;", //
|
||||
"events;pg.ClientBase;", //
|
||||
"events;pg.Events;", //
|
||||
"events;pg.Pool;", //
|
||||
"global.NodeJS.EventEmitter;events;", //
|
||||
"pg-cursor.Static;pg-cursor;", //
|
||||
"pg-cursor;pg-cursor.Static;Instance", //
|
||||
"pg-pool.Static;pg-pool;", //
|
||||
"pg-pool;pg-pool.Static;Instance", //
|
||||
"pg-pool;pg-pool;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue", //
|
||||
"pg-promise.IBaseProtocol;pg-promise.IConnected;", //
|
||||
"pg-promise.IBaseProtocol;pg-promise.IDatabase;", //
|
||||
"pg-promise.IBaseProtocol;pg-promise.ITask;", //
|
||||
"pg-promise.IBaseProtocol;pg-promise/typescript/pg-promise.IBaseProtocol;", //
|
||||
"pg-promise.IConnected;pg-promise.IDatabase;Member[connect].ReturnValue.Awaited", //
|
||||
"pg-promise.IConnected;pg-promise/typescript/pg-promise.IConnected;", //
|
||||
"pg-promise.IDatabase;pg-promise.IInitOptions;Member[extend].Argument[0]", //
|
||||
"pg-promise.IDatabase;pg-promise.IMain;ReturnValue", //
|
||||
"pg-promise.IDatabase;pg-promise/typescript/pg-promise.IDatabase;", //
|
||||
"pg-promise.IInitOptions;pg-promise.ILibConfig;Member[options]", //
|
||||
"pg-promise.IInitOptions;pg-promise/typescript/pg-promise.IInitOptions;", //
|
||||
"pg-promise.IInitOptions;pg-promise;Argument[0]", //
|
||||
"pg-promise.ILibConfig;pg-promise.IDatabase;Member[$config]", //
|
||||
"pg-promise.ILibConfig;pg-promise/typescript/pg-promise.ILibConfig;", //
|
||||
"pg-promise.IMain;pg-promise.ILibConfig;Member[pgp]", //
|
||||
"pg-promise.IMain;pg-promise/typescript/pg-promise.IMain;", //
|
||||
"pg-promise.IMain;pg-promise;ReturnValue", //
|
||||
"pg-promise.ITask;pg-promise.IBaseProtocol;Member[task,taskIf,tx,txIf].Argument[1].Argument[0]", //
|
||||
"pg-promise.ITask;pg-promise.IBaseProtocol;Member[task,taskIf,tx,txIf].WithArity[1].Argument[0].Argument[0]", //
|
||||
"pg-promise.ITask;pg-promise.IBaseProtocol;Member[taskIf].WithArity[2].Argument[0].Member[cnd].Argument[0]", //
|
||||
"pg-promise.ITask;pg-promise.IBaseProtocol;Member[txIf].WithArity[2].Argument[0].Member[cnd,reusable].Argument[0]", //
|
||||
"pg-promise.ITask;pg-promise/typescript/pg-promise.ITask;", //
|
||||
"pg-promise/pg-subset.pg.IClient;pg-promise.IMain;Argument[0].TypeVar[pg-promise/pg-subset.pg.IConnectionParameters.0]", //
|
||||
"pg-promise/pg-subset.pg.IClient;pg-promise.IMain;ReturnValue.TypeVar[pg-promise.IDatabase.1]", //
|
||||
"pg-promise/pg-subset.pg.IClient;pg-promise/pg-subset;Member[Client].Instance", //
|
||||
"pg-promise/pg-subset.pg.IClient;pg-promise;Argument[0].TypeVar[pg-promise.IInitOptions.1]", //
|
||||
"pg-promise/pg-subset.pg.IConnection;pg-promise/pg-subset.pg.IClient;Member[connection]", //
|
||||
"pg-promise/pg-subset.pg.IPool;pg-promise.IDatabase;Member[$pool]", //
|
||||
"pg.Client;pg-pool.Static;Instance.TypeVar[pg-pool.0]", //
|
||||
"pg.Client;pg-promise/pg-subset.pg.IClient;", //
|
||||
"pg.Client;pg.ClientStatic;Instance", //
|
||||
"pg.Client;pg.Events;Member[addListener,on,once,prependListener,prependOnceListener].Argument[1].Argument[1]", //
|
||||
"pg.ClientBase;pg.Client;", //
|
||||
"pg.ClientBase;pg.PoolClient;", //
|
||||
"pg.ClientStatic;pg;Member[Client]", //
|
||||
"pg.Connection;pg-promise/pg-subset.pg.IConnection;", //
|
||||
"pg.Events;pg.Events;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue", //
|
||||
"pg.Events;pg.EventsStatic;Instance", //
|
||||
"pg.EventsStatic;pg;Member[Events]", //
|
||||
"pg.Pool;pg-pool;", //
|
||||
"pg.Pool;pg-promise/pg-subset.pg.IPool;", //
|
||||
"pg.Pool;pg.Pool;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue", //
|
||||
"pg.Pool;pg.PoolStatic;Instance", //
|
||||
"pg.PoolClient;pg-pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connect,0=remove].Argument[1].Argument[0]", //
|
||||
"pg.PoolClient;pg-pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=error].Argument[1].Argument[1]", //
|
||||
"pg.PoolClient;pg-pool;Member[connect].Argument[0].Argument[1]", //
|
||||
"pg.PoolClient;pg-pool;Member[connect].WithArity[0].ReturnValue.Awaited", //
|
||||
"pg.PoolClient;pg.Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connect,0=remove].Argument[1].Argument[0]", //
|
||||
"pg.PoolClient;pg.Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=error].Argument[1].Argument[1]", //
|
||||
"pg.PoolClient;pg.Pool;Member[connect].Argument[0].Argument[1]", //
|
||||
"pg.PoolClient;pg.Pool;Member[connect].WithArity[0].ReturnValue.Awaited", //
|
||||
"pg.PoolStatic;pg;Member[Pool]", //
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -79,11 +79,11 @@ private class Summaries extends ModelInput::SummaryModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"global;NodeJS.EventEmitter;;;Member[addListener,off,on,once,prependListener,prependOnceListener,removeAllListeners,removeListener,setMaxListeners].ReturnValue;type", //
|
||||
"pg-pool;;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type", //
|
||||
"pg;ClientBase;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type", //
|
||||
"pg;Events;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type", //
|
||||
"pg;Pool;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type", //
|
||||
"global.NodeJS.EventEmitter;;;Member[addListener,off,on,once,prependListener,prependOnceListener,removeAllListeners,removeListener,setMaxListeners].ReturnValue;type", //
|
||||
"pg-pool;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type", //
|
||||
"pg.ClientBase;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type", //
|
||||
"pg.Events;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type", //
|
||||
"pg.Pool;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type", //
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -92,11 +92,11 @@ private class TypeVariables extends ModelInput::TypeVariableModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"pg-pool..0;Member[Client].TypeVar[pg-pool.ClientLikeCtr.0]", //
|
||||
"pg-pool..0;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connect,0=remove].Argument[1].Argument[0]", //
|
||||
"pg-pool..0;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=error].Argument[1].Argument[1]", //
|
||||
"pg-pool..0;Member[connect].Argument[0].Argument[1]", //
|
||||
"pg-pool..0;Member[connect].WithArity[0].ReturnValue.Awaited", //
|
||||
"pg-pool.0;Member[Client].TypeVar[pg-pool.ClientLikeCtr.0]", //
|
||||
"pg-pool.0;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connect,0=remove].Argument[1].Argument[0]", //
|
||||
"pg-pool.0;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=error].Argument[1].Argument[1]", //
|
||||
"pg-pool.0;Member[connect].Argument[0].Argument[1]", //
|
||||
"pg-pool.0;Member[connect].WithArity[0].ReturnValue.Awaited", //
|
||||
"pg-pool.ClientLikeCtr.0;Instance", //
|
||||
"pg-promise.IConnected.1;Member[client]", //
|
||||
"pg-promise.IConnectionOptions.0;Member[onLost].Argument[1].TypeVar[pg-promise.ILostContext.0]", //
|
||||
|
||||
@@ -18,103 +18,103 @@
|
||||
"language": "javascript",
|
||||
"usedTypes": {
|
||||
"sources": [
|
||||
"pg-cursor;",
|
||||
"pg-pool;",
|
||||
"pg-promise;IBaseProtocol",
|
||||
"pg;Client",
|
||||
"pg;ClientStatic",
|
||||
"pg;Pool",
|
||||
"pg;PoolClient",
|
||||
"pg;PoolStatic"
|
||||
"pg-cursor",
|
||||
"pg-pool",
|
||||
"pg-promise.IBaseProtocol",
|
||||
"pg.Client",
|
||||
"pg.ClientStatic",
|
||||
"pg.Pool",
|
||||
"pg.PoolClient",
|
||||
"pg.PoolStatic"
|
||||
]
|
||||
},
|
||||
"model": {
|
||||
"typeDefinitions": [
|
||||
"pg;Client;pg-promise/pg-subset;pg.IClient;",
|
||||
"pg;Connection;pg-promise/pg-subset;pg.IConnection;",
|
||||
"pg;Pool;pg-promise/pg-subset;pg.IPool;"
|
||||
"pg.Client;pg-promise/pg-subset.pg.IClient;",
|
||||
"pg.Connection;pg-promise/pg-subset.pg.IConnection;",
|
||||
"pg.Pool;pg-promise/pg-subset.pg.IPool;"
|
||||
],
|
||||
"sinks": []
|
||||
},
|
||||
"generatedModel": {
|
||||
"//": "Autogenerated section. Manual edits in here will be lost.",
|
||||
"typeDefinitions": [
|
||||
"events;;pg-cursor;;",
|
||||
"events;;pg-promise/pg-subset;pg.IClient;",
|
||||
"events;;pg-promise/pg-subset;pg.IConnection;",
|
||||
"events;;pg-promise/pg-subset;pg.IPool;",
|
||||
"events;;pg;ClientBase;",
|
||||
"events;;pg;Events;",
|
||||
"events;;pg;Pool;",
|
||||
"global;NodeJS.EventEmitter;events;;",
|
||||
"pg-cursor;;pg-cursor;Static;Instance",
|
||||
"pg-cursor;Static;pg-cursor;;",
|
||||
"pg-pool;;pg-pool;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue",
|
||||
"pg-pool;;pg-pool;Static;Instance",
|
||||
"pg-pool;Static;pg-pool;;",
|
||||
"pg-promise/pg-subset;pg.IClient;pg-promise/pg-subset;;Member[Client].Instance",
|
||||
"pg-promise/pg-subset;pg.IClient;pg-promise;;Argument[0].TypeVar[pg-promise.IInitOptions.1]",
|
||||
"pg-promise/pg-subset;pg.IClient;pg-promise;IMain;Argument[0].TypeVar[pg-promise/pg-subset.pg.IConnectionParameters.0]",
|
||||
"pg-promise/pg-subset;pg.IClient;pg-promise;IMain;ReturnValue.TypeVar[pg-promise.IDatabase.1]",
|
||||
"pg-promise/pg-subset;pg.IConnection;pg-promise/pg-subset;pg.IClient;Member[connection]",
|
||||
"pg-promise/pg-subset;pg.IPool;pg-promise;IDatabase;Member[$pool]",
|
||||
"pg-promise;IBaseProtocol;pg-promise/typescript/pg-promise;IBaseProtocol;",
|
||||
"pg-promise;IBaseProtocol;pg-promise;IConnected;",
|
||||
"pg-promise;IBaseProtocol;pg-promise;IDatabase;",
|
||||
"pg-promise;IBaseProtocol;pg-promise;ITask;",
|
||||
"pg-promise;IConnected;pg-promise/typescript/pg-promise;IConnected;",
|
||||
"pg-promise;IConnected;pg-promise;IDatabase;Member[connect].ReturnValue.Awaited",
|
||||
"pg-promise;IDatabase;pg-promise/typescript/pg-promise;IDatabase;",
|
||||
"pg-promise;IDatabase;pg-promise;IInitOptions;Member[extend].Argument[0]",
|
||||
"pg-promise;IDatabase;pg-promise;IMain;ReturnValue",
|
||||
"pg-promise;IInitOptions;pg-promise/typescript/pg-promise;IInitOptions;",
|
||||
"pg-promise;IInitOptions;pg-promise;;Argument[0]",
|
||||
"pg-promise;IInitOptions;pg-promise;ILibConfig;Member[options]",
|
||||
"pg-promise;ILibConfig;pg-promise/typescript/pg-promise;ILibConfig;",
|
||||
"pg-promise;ILibConfig;pg-promise;IDatabase;Member[$config]",
|
||||
"pg-promise;IMain;pg-promise/typescript/pg-promise;IMain;",
|
||||
"pg-promise;IMain;pg-promise;;ReturnValue",
|
||||
"pg-promise;IMain;pg-promise;ILibConfig;Member[pgp]",
|
||||
"pg-promise;ITask;pg-promise/typescript/pg-promise;ITask;",
|
||||
"pg-promise;ITask;pg-promise;IBaseProtocol;Member[task,taskIf,tx,txIf].Argument[1].Argument[0]",
|
||||
"pg-promise;ITask;pg-promise;IBaseProtocol;Member[task,taskIf,tx,txIf].WithArity[1].Argument[0].Argument[0]",
|
||||
"pg-promise;ITask;pg-promise;IBaseProtocol;Member[taskIf].WithArity[2].Argument[0].Member[cnd].Argument[0]",
|
||||
"pg-promise;ITask;pg-promise;IBaseProtocol;Member[txIf].WithArity[2].Argument[0].Member[cnd,reusable].Argument[0]",
|
||||
"pg;Client;pg-pool;Static;Instance.TypeVar[pg-pool..0]",
|
||||
"pg;Client;pg;ClientStatic;Instance",
|
||||
"pg;Client;pg;Events;Member[addListener,on,once,prependListener,prependOnceListener].Argument[1].Argument[1]",
|
||||
"pg;ClientBase;pg;Client;",
|
||||
"pg;ClientBase;pg;PoolClient;",
|
||||
"pg;ClientStatic;pg;;Member[Client]",
|
||||
"pg;Events;pg;Events;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue",
|
||||
"pg;Events;pg;EventsStatic;Instance",
|
||||
"pg;EventsStatic;pg;;Member[Events]",
|
||||
"pg;Pool;pg-pool;;",
|
||||
"pg;Pool;pg;Pool;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue",
|
||||
"pg;Pool;pg;PoolStatic;Instance",
|
||||
"pg;PoolClient;pg-pool;;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connect,0=remove].Argument[1].Argument[0]",
|
||||
"pg;PoolClient;pg-pool;;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=error].Argument[1].Argument[1]",
|
||||
"pg;PoolClient;pg-pool;;Member[connect].Argument[0].Argument[1]",
|
||||
"pg;PoolClient;pg-pool;;Member[connect].WithArity[0].ReturnValue.Awaited",
|
||||
"pg;PoolClient;pg;Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connect,0=remove].Argument[1].Argument[0]",
|
||||
"pg;PoolClient;pg;Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=error].Argument[1].Argument[1]",
|
||||
"pg;PoolClient;pg;Pool;Member[connect].Argument[0].Argument[1]",
|
||||
"pg;PoolClient;pg;Pool;Member[connect].WithArity[0].ReturnValue.Awaited",
|
||||
"pg;PoolStatic;pg;;Member[Pool]"
|
||||
"events;pg-cursor;",
|
||||
"events;pg-promise/pg-subset.pg.IClient;",
|
||||
"events;pg-promise/pg-subset.pg.IConnection;",
|
||||
"events;pg-promise/pg-subset.pg.IPool;",
|
||||
"events;pg.ClientBase;",
|
||||
"events;pg.Events;",
|
||||
"events;pg.Pool;",
|
||||
"global.NodeJS.EventEmitter;events;",
|
||||
"pg-cursor.Static;pg-cursor;",
|
||||
"pg-cursor;pg-cursor.Static;Instance",
|
||||
"pg-pool.Static;pg-pool;",
|
||||
"pg-pool;pg-pool.Static;Instance",
|
||||
"pg-pool;pg-pool;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue",
|
||||
"pg-promise.IBaseProtocol;pg-promise.IConnected;",
|
||||
"pg-promise.IBaseProtocol;pg-promise.IDatabase;",
|
||||
"pg-promise.IBaseProtocol;pg-promise.ITask;",
|
||||
"pg-promise.IBaseProtocol;pg-promise/typescript/pg-promise.IBaseProtocol;",
|
||||
"pg-promise.IConnected;pg-promise.IDatabase;Member[connect].ReturnValue.Awaited",
|
||||
"pg-promise.IConnected;pg-promise/typescript/pg-promise.IConnected;",
|
||||
"pg-promise.IDatabase;pg-promise.IInitOptions;Member[extend].Argument[0]",
|
||||
"pg-promise.IDatabase;pg-promise.IMain;ReturnValue",
|
||||
"pg-promise.IDatabase;pg-promise/typescript/pg-promise.IDatabase;",
|
||||
"pg-promise.IInitOptions;pg-promise.ILibConfig;Member[options]",
|
||||
"pg-promise.IInitOptions;pg-promise/typescript/pg-promise.IInitOptions;",
|
||||
"pg-promise.IInitOptions;pg-promise;Argument[0]",
|
||||
"pg-promise.ILibConfig;pg-promise.IDatabase;Member[$config]",
|
||||
"pg-promise.ILibConfig;pg-promise/typescript/pg-promise.ILibConfig;",
|
||||
"pg-promise.IMain;pg-promise.ILibConfig;Member[pgp]",
|
||||
"pg-promise.IMain;pg-promise/typescript/pg-promise.IMain;",
|
||||
"pg-promise.IMain;pg-promise;ReturnValue",
|
||||
"pg-promise.ITask;pg-promise.IBaseProtocol;Member[task,taskIf,tx,txIf].Argument[1].Argument[0]",
|
||||
"pg-promise.ITask;pg-promise.IBaseProtocol;Member[task,taskIf,tx,txIf].WithArity[1].Argument[0].Argument[0]",
|
||||
"pg-promise.ITask;pg-promise.IBaseProtocol;Member[taskIf].WithArity[2].Argument[0].Member[cnd].Argument[0]",
|
||||
"pg-promise.ITask;pg-promise.IBaseProtocol;Member[txIf].WithArity[2].Argument[0].Member[cnd,reusable].Argument[0]",
|
||||
"pg-promise.ITask;pg-promise/typescript/pg-promise.ITask;",
|
||||
"pg-promise/pg-subset.pg.IClient;pg-promise.IMain;Argument[0].TypeVar[pg-promise/pg-subset.pg.IConnectionParameters.0]",
|
||||
"pg-promise/pg-subset.pg.IClient;pg-promise.IMain;ReturnValue.TypeVar[pg-promise.IDatabase.1]",
|
||||
"pg-promise/pg-subset.pg.IClient;pg-promise/pg-subset;Member[Client].Instance",
|
||||
"pg-promise/pg-subset.pg.IClient;pg-promise;Argument[0].TypeVar[pg-promise.IInitOptions.1]",
|
||||
"pg-promise/pg-subset.pg.IConnection;pg-promise/pg-subset.pg.IClient;Member[connection]",
|
||||
"pg-promise/pg-subset.pg.IPool;pg-promise.IDatabase;Member[$pool]",
|
||||
"pg.Client;pg-pool.Static;Instance.TypeVar[pg-pool.0]",
|
||||
"pg.Client;pg.ClientStatic;Instance",
|
||||
"pg.Client;pg.Events;Member[addListener,on,once,prependListener,prependOnceListener].Argument[1].Argument[1]",
|
||||
"pg.ClientBase;pg.Client;",
|
||||
"pg.ClientBase;pg.PoolClient;",
|
||||
"pg.ClientStatic;pg;Member[Client]",
|
||||
"pg.Events;pg.Events;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue",
|
||||
"pg.Events;pg.EventsStatic;Instance",
|
||||
"pg.EventsStatic;pg;Member[Events]",
|
||||
"pg.Pool;pg-pool;",
|
||||
"pg.Pool;pg.Pool;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue",
|
||||
"pg.Pool;pg.PoolStatic;Instance",
|
||||
"pg.PoolClient;pg-pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connect,0=remove].Argument[1].Argument[0]",
|
||||
"pg.PoolClient;pg-pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=error].Argument[1].Argument[1]",
|
||||
"pg.PoolClient;pg-pool;Member[connect].Argument[0].Argument[1]",
|
||||
"pg.PoolClient;pg-pool;Member[connect].WithArity[0].ReturnValue.Awaited",
|
||||
"pg.PoolClient;pg.Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connect,0=remove].Argument[1].Argument[0]",
|
||||
"pg.PoolClient;pg.Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=error].Argument[1].Argument[1]",
|
||||
"pg.PoolClient;pg.Pool;Member[connect].Argument[0].Argument[1]",
|
||||
"pg.PoolClient;pg.Pool;Member[connect].WithArity[0].ReturnValue.Awaited",
|
||||
"pg.PoolStatic;pg;Member[Pool]"
|
||||
],
|
||||
"summaries": [
|
||||
"global;NodeJS.EventEmitter;;;Member[addListener,off,on,once,prependListener,prependOnceListener,removeAllListeners,removeListener,setMaxListeners].ReturnValue;type",
|
||||
"pg-pool;;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type",
|
||||
"pg;ClientBase;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type",
|
||||
"pg;Events;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type",
|
||||
"pg;Pool;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type"
|
||||
"global.NodeJS.EventEmitter;;;Member[addListener,off,on,once,prependListener,prependOnceListener,removeAllListeners,removeListener,setMaxListeners].ReturnValue;type",
|
||||
"pg-pool;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type",
|
||||
"pg.ClientBase;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type",
|
||||
"pg.Events;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type",
|
||||
"pg.Pool;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type"
|
||||
],
|
||||
"typeVariables": [
|
||||
"pg-pool..0;Member[Client].TypeVar[pg-pool.ClientLikeCtr.0]",
|
||||
"pg-pool..0;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connect,0=remove].Argument[1].Argument[0]",
|
||||
"pg-pool..0;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=error].Argument[1].Argument[1]",
|
||||
"pg-pool..0;Member[connect].Argument[0].Argument[1]",
|
||||
"pg-pool..0;Member[connect].WithArity[0].ReturnValue.Awaited",
|
||||
"pg-pool.0;Member[Client].TypeVar[pg-pool.ClientLikeCtr.0]",
|
||||
"pg-pool.0;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connect,0=remove].Argument[1].Argument[0]",
|
||||
"pg-pool.0;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=error].Argument[1].Argument[1]",
|
||||
"pg-pool.0;Member[connect].Argument[0].Argument[1]",
|
||||
"pg-pool.0;Member[connect].WithArity[0].ReturnValue.Awaited",
|
||||
"pg-pool.ClientLikeCtr.0;Instance",
|
||||
"pg-promise.IConnected.1;Member[client]",
|
||||
"pg-promise.IConnectionOptions.0;Member[onLost].Argument[1].TypeVar[pg-promise.ILostContext.0]",
|
||||
|
||||
@@ -6,13 +6,13 @@ private class Sinks extends ModelInput::SinkModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"sequelize;;Argument[0..].Member[password];credentials[password]", //
|
||||
"sequelize;;Argument[0..].Member[username];credentials[username]", //
|
||||
"sequelize;;Argument[1];credentials[username]", //
|
||||
"sequelize;;Argument[2];credentials[password]", //
|
||||
"sequelize;Sequelize;Member[query].Argument[0].Member[query];sql-injection", //
|
||||
"sequelize;Sequelize;Member[query].Argument[0];sql-injection", //
|
||||
"sequelize;SequelizeStaticAndInstance;Member[asIs,literal].Argument[0];sql-injection", //
|
||||
"sequelize.Sequelize;Member[query].Argument[0].Member[query];sql-injection", //
|
||||
"sequelize.Sequelize;Member[query].Argument[0];sql-injection", //
|
||||
"sequelize.SequelizeStaticAndInstance;Member[asIs,literal].Argument[0];sql-injection", //
|
||||
"sequelize;Argument[0..].Member[password];credentials[password]", //
|
||||
"sequelize;Argument[0..].Member[username];credentials[username]", //
|
||||
"sequelize;Argument[1];credentials[username]", //
|
||||
"sequelize;Argument[2];credentials[password]", //
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -21,254 +21,254 @@ private class Types extends ModelInput::TypeModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"sequelize-typescript/associations/foreign-key/foreign-key-meta;ForeignKeyMeta;sequelize-typescript/associations/foreign-key/foreign-key-service;;Member[getForeignKeys].ReturnValue.ArrayElement", //
|
||||
"sequelize-typescript/model/model/association/association-create-options;AssociationCreateOptions;sequelize-typescript;Model;Member[$create].Argument[2]", //
|
||||
"sequelize-typescript/model/shared/model-not-initialized-error;ModelNotInitializedErrorStatic;sequelize-typescript/model/shared/model-not-initialized-error;;Member[ModelNotInitializedError]", //
|
||||
"sequelize-typescript;AssociationCountOptions;sequelize-typescript/model/model/association/association-count-options;AssociationCountOptions;", //
|
||||
"sequelize-typescript;AssociationCountOptions;sequelize-typescript;Model;Member[$count].Argument[1]", //
|
||||
"sequelize-typescript;AssociationGetOptions;sequelize-typescript/model/model/association/association-get-options;AssociationGetOptions;", //
|
||||
"sequelize-typescript;AssociationGetOptions;sequelize-typescript;Model;Member[$get].Argument[1]", //
|
||||
"sequelize-typescript;AssociationGetOptions;sequelize-typescript;Model;Member[$has].Argument[2]", //
|
||||
"sequelize-typescript;BaseAssociation;sequelize-typescript/associations/shared/association-service;;Member[addAssociation].Argument[1]", //
|
||||
"sequelize-typescript;BaseAssociation;sequelize-typescript/associations/shared/association-service;;Member[getAssociations,getAssociationsByRelation].ReturnValue.ArrayElement", //
|
||||
"sequelize-typescript;BaseAssociation;sequelize-typescript/associations/shared/association-service;;Member[setAssociations].Argument[1].ArrayElement", //
|
||||
"sequelize-typescript;BaseAssociation;sequelize-typescript/associations/shared/base-association;BaseAssociation;", //
|
||||
"sequelize-typescript;BaseAssociation;sequelize-typescript;;Member[addAssociation].Argument[1]", //
|
||||
"sequelize-typescript;BaseAssociation;sequelize-typescript;;Member[getAssociations,getAssociationsByRelation].ReturnValue.ArrayElement", //
|
||||
"sequelize-typescript;BaseAssociation;sequelize-typescript;;Member[setAssociations].Argument[1].ArrayElement", //
|
||||
"sequelize-typescript;BaseAssociation;sequelize-typescript;BaseAssociationStatic;Instance", //
|
||||
"sequelize-typescript;BaseAssociation;sequelize-typescript;BelongsToAssociation;", //
|
||||
"sequelize-typescript;BaseAssociation;sequelize-typescript;BelongsToManyAssociation;", //
|
||||
"sequelize-typescript;BaseAssociation;sequelize-typescript;HasAssociation;", //
|
||||
"sequelize-typescript;BaseAssociationStatic;sequelize-typescript/associations/shared/base-association;;Member[BaseAssociation]", //
|
||||
"sequelize-typescript;BaseAssociationStatic;sequelize-typescript/associations/shared/base-association;BaseAssociationStatic;", //
|
||||
"sequelize-typescript;BaseAssociationStatic;sequelize-typescript;;Member[BaseAssociation]", //
|
||||
"sequelize-typescript;BelongsToAssociation;sequelize-typescript/associations/belongs-to/belongs-to-association;BelongsToAssociation;", //
|
||||
"sequelize-typescript;BelongsToAssociation;sequelize-typescript;BelongsToAssociationStatic;Instance", //
|
||||
"sequelize-typescript;BelongsToAssociationStatic;sequelize-typescript/associations/belongs-to/belongs-to-association;;Member[BelongsToAssociation]", //
|
||||
"sequelize-typescript;BelongsToAssociationStatic;sequelize-typescript/associations/belongs-to/belongs-to-association;BelongsToAssociationStatic;", //
|
||||
"sequelize-typescript;BelongsToAssociationStatic;sequelize-typescript;;Member[BelongsToAssociation]", //
|
||||
"sequelize-typescript;BelongsToManyAssociation;sequelize-typescript/associations/belongs-to-many/belongs-to-many-association;BelongsToManyAssociation;", //
|
||||
"sequelize-typescript;BelongsToManyAssociation;sequelize-typescript;BelongsToManyAssociationStatic;Instance", //
|
||||
"sequelize-typescript;BelongsToManyAssociationStatic;sequelize-typescript/associations/belongs-to-many/belongs-to-many-association;;Member[BelongsToManyAssociation]", //
|
||||
"sequelize-typescript;BelongsToManyAssociationStatic;sequelize-typescript/associations/belongs-to-many/belongs-to-many-association;BelongsToManyAssociationStatic;", //
|
||||
"sequelize-typescript;BelongsToManyAssociationStatic;sequelize-typescript;;Member[BelongsToManyAssociation]", //
|
||||
"sequelize-typescript;DefaultScopeGetter;sequelize-typescript/scopes/default-scope;;Member[DefaultScope].Argument[0]", //
|
||||
"sequelize-typescript;DefaultScopeGetter;sequelize-typescript/scopes/scope-options;DefaultScopeGetter;", //
|
||||
"sequelize-typescript;DefaultScopeGetter;sequelize-typescript;;Member[DefaultScope].Argument[0]", //
|
||||
"sequelize-typescript;DefaultScopeGetter;sequelize-typescript;ScopeOptionsGetters;Member[getDefaultScope]", //
|
||||
"sequelize-typescript;HasAssociation;sequelize-typescript/associations/has/has-association;HasAssociation;", //
|
||||
"sequelize-typescript;HasAssociation;sequelize-typescript;HasAssociationStatic;Instance", //
|
||||
"sequelize-typescript;HasAssociationStatic;sequelize-typescript/associations/has/has-association;;Member[HasAssociation]", //
|
||||
"sequelize-typescript;HasAssociationStatic;sequelize-typescript/associations/has/has-association;HasAssociationStatic;", //
|
||||
"sequelize-typescript;HasAssociationStatic;sequelize-typescript;;Member[HasAssociation]", //
|
||||
"sequelize-typescript;Model;sequelize-typescript/model/model/model;Model;", //
|
||||
"sequelize-typescript;Model;sequelize-typescript;Model;Member[$add,$has,$remove,$set].Argument[1]", //
|
||||
"sequelize-typescript;Model;sequelize-typescript;Model;Member[$add,$has,$remove,$set].Argument[1].ArrayElement", //
|
||||
"sequelize-typescript;Model;sequelize-typescript;Model;Member[$create,reload].ReturnValue.Awaited", //
|
||||
"sequelize-typescript;Model;sequelize-typescript;ModelStatic~;Instance", //
|
||||
"sequelize-typescript;Model;sequelize-typescript;ModelStatic~;Member[initialize].ReturnValue.TypeVar[sequelize-typescript.ModelStatic.0]", //
|
||||
"sequelize-typescript;Model;sequelize-typescript;ModelType;Instance", //
|
||||
"sequelize-typescript;Model;sequelize-typescript;Sequelize;Member[getRepository].Argument[0].Instance", //
|
||||
"sequelize-typescript;Model;sequelize-typescript;Sequelize;Member[getRepository].ReturnValue.TypeVar[sequelize-typescript.Repository.0]", //
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/belongs-to-many/belongs-to-many;;Member[BelongsToMany].Argument[0,1]", //
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/belongs-to/belongs-to;;Member[BelongsTo].Argument[0]", //
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/foreign-key/foreign-key-meta;ForeignKeyMeta;Member[relatedClassGetter]", //
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/foreign-key/foreign-key-service;;Member[addForeignKey].Argument[1]", //
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/foreign-key/foreign-key;;Member[ForeignKey].Argument[0]", //
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/has/has-many;;Member[HasMany].Argument[0]", //
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/has/has-one;;Member[HasOne].Argument[0]", //
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript/model/shared/model-class-getter;ModelClassGetter;", //
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript;;Member[BelongsTo,ForeignKey,HasMany,HasOne].Argument[0]", //
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript;;Member[BelongsToMany].Argument[0,1]", //
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript;BaseAssociationStatic;Argument[0]", //
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript;BelongsToAssociationStatic;Argument[0]", //
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript;BelongsToManyAssociationStatic;Argument[0]", //
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript;HasAssociationStatic;Argument[0]", //
|
||||
"sequelize-typescript;ModelStatic~;sequelize-typescript/model/model/model;;Member[Model]", //
|
||||
"sequelize-typescript;ModelStatic~;sequelize-typescript/model/model/model;ModelStatic~;", //
|
||||
"sequelize-typescript;ModelStatic~;sequelize-typescript/model/shared/model-not-initialized-error;ModelNotInitializedErrorStatic;Argument[0]", //
|
||||
"sequelize-typescript;ModelStatic~;sequelize-typescript;;Member[Model]", //
|
||||
"sequelize-typescript;ModelType;sequelize-typescript/associations/foreign-key/foreign-key-service;;Member[getForeignKeyOptions].Argument[0,1]", //
|
||||
"sequelize-typescript;ModelType;sequelize-typescript/model/model/model;ModelType;", //
|
||||
"sequelize-typescript;ModelType;sequelize-typescript;BaseAssociation;Member[getAssociatedClass].ReturnValue", //
|
||||
"sequelize-typescript;ModelType;sequelize-typescript;BaseAssociation;Member[getSequelizeOptions].Argument[0]", //
|
||||
"sequelize-typescript;ModelType;sequelize-typescript;BelongsToAssociation;Member[getSequelizeOptions].Argument[0]", //
|
||||
"sequelize-typescript;ModelType;sequelize-typescript;BelongsToManyAssociation;Member[getSequelizeOptions].Argument[0]", //
|
||||
"sequelize-typescript;ModelType;sequelize-typescript;HasAssociation;Member[getSequelizeOptions].Argument[0]", //
|
||||
"sequelize-typescript;ModelType;sequelize-typescript;ModelClassGetter;ReturnValue", //
|
||||
"sequelize-typescript;ModelType;sequelize-typescript;Sequelize;Member[model].Argument[0]", //
|
||||
"sequelize-typescript;ScopeOptionsGetters;sequelize-typescript/scopes/scope-options;ScopeOptionsGetters;", //
|
||||
"sequelize-typescript;ScopeOptionsGetters;sequelize-typescript/scopes/scope-service;;Member[addScopeOptionsGetter,setScopeOptionsGetters].Argument[1]", //
|
||||
"sequelize-typescript;ScopeOptionsGetters;sequelize-typescript/scopes/scope-service;;Member[getScopeOptionsGetters].ReturnValue", //
|
||||
"sequelize-typescript;ScopeOptionsGetters;sequelize-typescript;;Member[addScopeOptionsGetter,setScopeOptionsGetters].Argument[1]", //
|
||||
"sequelize-typescript;ScopeOptionsGetters;sequelize-typescript;;Member[getScopeOptionsGetters].ReturnValue", //
|
||||
"sequelize-typescript;ScopesOptions;sequelize-typescript/scopes/scope-options;ScopesOptions;", //
|
||||
"sequelize-typescript;ScopesOptions;sequelize-typescript/scopes/scope-service;;Member[resolveScope].Argument[2]", //
|
||||
"sequelize-typescript;ScopesOptions;sequelize-typescript;;Member[resolveScope].Argument[2]", //
|
||||
"sequelize-typescript;ScopesOptions;sequelize-typescript;ScopesOptionsGetter;ReturnValue.AnyMember", //
|
||||
"sequelize-typescript;ScopesOptionsGetter;sequelize-typescript/scopes/scope-options;ScopesOptionsGetter;", //
|
||||
"sequelize-typescript;ScopesOptionsGetter;sequelize-typescript/scopes/scopes;;Member[Scopes].Argument[0]", //
|
||||
"sequelize-typescript;ScopesOptionsGetter;sequelize-typescript;;Member[Scopes].Argument[0]", //
|
||||
"sequelize-typescript;ScopesOptionsGetter;sequelize-typescript;ScopeOptionsGetters;Member[getScopes]", //
|
||||
"sequelize-typescript;Sequelize;sequelize-typescript/sequelize/sequelize/sequelize;Sequelize;", //
|
||||
"sequelize-typescript;Sequelize;sequelize-typescript;BaseAssociation;Member[getSequelizeOptions].Argument[1]", //
|
||||
"sequelize-typescript;Sequelize;sequelize-typescript;BelongsToManyAssociation;Member[getSequelizeOptions].Argument[1]", //
|
||||
"sequelize-typescript;Sequelize;sequelize-typescript;SequelizeStatic;Instance", //
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-options;SequelizeOptions;", //
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-service;;Member[prepareArgs].ReturnValue.Member[options]", //
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-service;;Member[prepareOptions].Argument[0]", //
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-service;;Member[prepareOptions].ReturnValue", //
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript;;Member[prepareArgs].ReturnValue.Member[options]", //
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript;;Member[prepareOptions].Argument[0]", //
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript;;Member[prepareOptions].ReturnValue", //
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript;Sequelize;Member[options]", //
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript;SequelizeStatic;Argument[3]", //
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript;SequelizeStatic;WithArity[0].Argument[0]", //
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript;SequelizeStatic;WithArity[1].Argument[0,1]", //
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript;SequelizeStatic;WithArity[2].Argument[1,2]", //
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript;SequelizeStatic;WithArity[3].Argument[2]", //
|
||||
"sequelize-typescript;SequelizeStatic;sequelize-typescript/sequelize/sequelize/sequelize;;Member[Sequelize]", //
|
||||
"sequelize-typescript;SequelizeStatic;sequelize-typescript/sequelize/sequelize/sequelize;SequelizeStatic;", //
|
||||
"sequelize-typescript;SequelizeStatic;sequelize-typescript;;Member[Sequelize]", //
|
||||
"sequelize;AnyFindOptions;sequelize;BelongsToManyAddAssociationMixin;Argument[1]", //
|
||||
"sequelize;AnyFindOptions;sequelize;BelongsToManyAddAssociationsMixin;Argument[1]", //
|
||||
"sequelize;AnyFindOptions;sequelize;BelongsToManySetAssociationsMixin;Argument[1]", //
|
||||
"sequelize;AnyFindOptions;sequelize;DefineOptions;Member[defaultScope]", //
|
||||
"sequelize;AnyFindOptions;sequelize;DefineScopeOptions;AnyMember", //
|
||||
"sequelize;AnyFindOptions;sequelize;HasManySetAssociationsMixin;Argument[1]", //
|
||||
"sequelize;AnyFindOptions;sequelize;Instance;Member[reload].Argument[0]", //
|
||||
"sequelize;AnyFindOptions;sequelize;Model;Member[addScope].Argument[1]", //
|
||||
"sequelize;AssociationOptionsBelongsToMany;sequelize;Associations;Member[belongsToMany].Argument[1]", //
|
||||
"sequelize;Associations;sequelize;Model;", //
|
||||
"sequelize;Associations;sequelize;SequelizeStaticAndInstance.Model;", //
|
||||
"sequelize;BuildOptions;sequelize-typescript;ModelStatic~;Argument[1]", //
|
||||
"sequelize;BuildOptions;sequelize;CreateOptions;", //
|
||||
"sequelize;BuildOptions;sequelize;Model;Member[build,bulkBuild].Argument[1]", //
|
||||
"sequelize;CountOptions;sequelize;Model;Member[count].Argument[0]", //
|
||||
"sequelize;CreateOptions;sequelize-typescript/model/model/association/association-create-options;AssociationCreateOptions;", //
|
||||
"sequelize;CreateOptions;sequelize;BelongsToCreateAssociationMixin;Argument[1]", //
|
||||
"sequelize;CreateOptions;sequelize;BelongsToManyCreateAssociationMixin;Argument[1]", //
|
||||
"sequelize;CreateOptions;sequelize;HasManyCreateAssociationMixin;Argument[1]", //
|
||||
"sequelize;CreateOptions;sequelize;HasOneCreateAssociationMixin;Argument[1]", //
|
||||
"sequelize;CreateOptions;sequelize;Model;Member[create].Argument[1]", //
|
||||
"sequelize;DefineAttributeColumnOptions;sequelize;DefineAttributes;AnyMember", //
|
||||
"sequelize;DefineAttributeColumnOptions;sequelize;QueryInterface;Member[addColumn,changeColumn].Argument[2]", //
|
||||
"sequelize;DefineAttributeColumnReferencesOptions;sequelize;DefineAttributeColumnOptions;Member[references]", //
|
||||
"sequelize;DefineAttributes;sequelize;Hooks;Member[beforeDefine].Argument[1].Argument[0]", //
|
||||
"sequelize;DefineAttributes;sequelize;Hooks;Member[beforeDefine].WithArity[1].Argument[0].Argument[0]", //
|
||||
"sequelize;DefineAttributes;sequelize;QueryInterface;Member[createTable].Argument[1]", //
|
||||
"sequelize;DefineOptions;sequelize;Options;Member[define]", //
|
||||
"sequelize;DefineOptions;sequelize;Sequelize;Member[define].Argument[2]", //
|
||||
"sequelize;DefineScopeOptions;sequelize;DefineOptions;Member[scopes]", //
|
||||
"sequelize;FindCreateFindOptions;sequelize;Model;Member[findCreateFind].Argument[0]", //
|
||||
"sequelize;FindOptions;sequelize-typescript;AssociationCountOptions;", //
|
||||
"sequelize;FindOptions;sequelize-typescript;AssociationGetOptions;", //
|
||||
"sequelize;FindOptions;sequelize-typescript;DefaultScopeGetter;ReturnValue", //
|
||||
"sequelize;FindOptions;sequelize-typescript;Model;Member[reload].Argument[0]", //
|
||||
"sequelize;FindOptions;sequelize-typescript;ScopesOptions;", //
|
||||
"sequelize;FindOptions;sequelize-typescript;ScopesOptions;ReturnValue", //
|
||||
"sequelize;FindOptions;sequelize;AnyFindOptions;", //
|
||||
"sequelize;FindOptions;sequelize;FindCreateFindOptions;", //
|
||||
"sequelize;FindOptions;sequelize;FindOrInitializeOptions;", //
|
||||
"sequelize;FindOptions;sequelize;Model;Member[all,find,findAll,findAndCount,findAndCountAll,findOne].Argument[0]", //
|
||||
"sequelize;FindOptionsOrderArray;sequelize;FindOptions;Member[order]", //
|
||||
"sequelize;FindOptionsOrderArray;sequelize;FindOptions;Member[order].ArrayElement", //
|
||||
"sequelize;FindOrInitializeOptions;sequelize;Model;Member[findOrBuild,findOrCreate,findOrInitialize].Argument[0]", //
|
||||
"sequelize;HasManyGetAssociationsMixinOptions;sequelize;HasManyGetAssociationsMixin;Argument[0]", //
|
||||
"sequelize;HasManyGetAssociationsMixinOptions;sequelize;HasManyHasAssociationMixin;Argument[1]", //
|
||||
"sequelize;HasManyGetAssociationsMixinOptions;sequelize;HasManyHasAssociationsMixin;Argument[1]", //
|
||||
"sequelize;Hooks;sequelize;Hooks;Member[addHook,hook,removeHook].ReturnValue", //
|
||||
"sequelize;Hooks;sequelize;Model;", //
|
||||
"sequelize;Hooks;sequelize;Sequelize;", //
|
||||
"sequelize;Hooks;sequelize;SequelizeStaticAndInstance.Model;", //
|
||||
"sequelize;IncludeAssociation;sequelize;Associations;Member[belongsTo,belongsToMany,hasMany,hasOne].ReturnValue", //
|
||||
"sequelize;IncludeAssociation;sequelize;IncludeOptions;Member[association]", //
|
||||
"sequelize;IncludeOptions;sequelize;BuildOptions;Member[include].ArrayElement", //
|
||||
"sequelize;IncludeOptions;sequelize;CountOptions;Member[include]", //
|
||||
"sequelize;IncludeOptions;sequelize;CountOptions;Member[include].ArrayElement", //
|
||||
"sequelize;IncludeOptions;sequelize;FindOptions;Member[include]", //
|
||||
"sequelize;IncludeOptions;sequelize;FindOptions;Member[include].ArrayElement", //
|
||||
"sequelize;IncludeOptions;sequelize;HasManyGetAssociationsMixinOptions;Member[include]", //
|
||||
"sequelize;IncludeOptions;sequelize;IncludeOptions;Member[include]", //
|
||||
"sequelize;IncludeOptions;sequelize;IncludeOptions;Member[include].ArrayElement", //
|
||||
"sequelize;Instance;sequelize;Instance;Member[decrement,increment,reload,save,update,updateAttributes].ReturnValue.Awaited", //
|
||||
"sequelize;Instance;sequelize;Instance;Member[equalsOneOf].Argument[0].ArrayElement", //
|
||||
"sequelize;Instance;sequelize;Instance;Member[equals].Argument[0]", //
|
||||
"sequelize;Instance;sequelize;Instance;Member[set,setAttributes].ReturnValue", //
|
||||
"sequelize;Instance;sequelize;Model;Member[Instance,build].ReturnValue", //
|
||||
"sequelize;Instance;sequelize;Model;Member[all,bulkCreate,findAll].ReturnValue.Awaited.ArrayElement", //
|
||||
"sequelize;Instance;sequelize;Model;Member[bulkBuild].ReturnValue.ArrayElement", //
|
||||
"sequelize;Instance;sequelize;Model;Member[create,find,findById,findByPk,findByPrimary,findOne].ReturnValue.Awaited", //
|
||||
"sequelize;Instance;sequelize;Model;Member[findAndCount,findAndCountAll].ReturnValue.Awaited.Member[rows].ArrayElement", //
|
||||
"sequelize;Instance;sequelize;QueryInterface;Member[delete,increment,insert,update].Argument[0]", //
|
||||
"sequelize;Instance;sequelize;QueryOptions;Member[instance]", //
|
||||
"sequelize;Instance;sequelize;SequelizeStaticAndInstance;Member[Instance]", //
|
||||
"sequelize;Model;sequelize;AssociationOptionsBelongsToMany;Member[through]", //
|
||||
"sequelize;Model;sequelize;Associations;Member[belongsTo,belongsToMany,hasMany,hasOne].Argument[0]", //
|
||||
"sequelize;Model;sequelize;BuildOptions;Member[include].ArrayElement", //
|
||||
"sequelize;Model;sequelize;CountOptions;Member[include]", //
|
||||
"sequelize;Model;sequelize;CountOptions;Member[include].ArrayElement", //
|
||||
"sequelize;Model;sequelize;DefineAttributeColumnReferencesOptions;Member[model]", //
|
||||
"sequelize;Model;sequelize;FindOptions;Member[include]", //
|
||||
"sequelize;Model;sequelize;FindOptions;Member[include].ArrayElement", //
|
||||
"sequelize;Model;sequelize;FindOptions;Member[lock].Member[of]", //
|
||||
"sequelize;Model;sequelize;FindOptionsOrderArray;ArrayElement", //
|
||||
"sequelize;Model;sequelize;FindOptionsOrderArray;ArrayElement.Member[model]", //
|
||||
"sequelize;Model;sequelize;Hooks;Member[afterDefine].Argument[1].Argument[0]", //
|
||||
"sequelize;Model;sequelize;Hooks;Member[afterDefine].WithArity[1].Argument[0].Argument[0]", //
|
||||
"sequelize;Model;sequelize;IncludeAssociation;Member[source,target]", //
|
||||
"sequelize;Model;sequelize;IncludeOptions;Member[include,model]", //
|
||||
"sequelize;Model;sequelize;IncludeOptions;Member[include].ArrayElement", //
|
||||
"sequelize;Model;sequelize;Instance;Member[Model]", //
|
||||
"sequelize;Model;sequelize;Model;Member[schema,scope,unscoped].ReturnValue", //
|
||||
"sequelize;Model;sequelize;Model;Member[sync].ReturnValue.Awaited", //
|
||||
"sequelize;Model;sequelize;Models;AnyMember", //
|
||||
"sequelize;Model;sequelize;ModelsHashInterface;AnyMember", //
|
||||
"sequelize;Model;sequelize;QueryInterface;Member[bulkDelete,rawSelect,upsert].Argument[3]", //
|
||||
"sequelize;Model;sequelize;QueryInterface;Member[select].Argument[0]", //
|
||||
"sequelize;Model;sequelize;QueryOptions;Member[model]", //
|
||||
"sequelize;Model;sequelize;Sequelize;Member[define,import,model].ReturnValue", //
|
||||
"sequelize;Model;sequelize;Sequelize;Member[import].Argument[1].ReturnValue", //
|
||||
"sequelize;Model;sequelize;SequelizeStaticAndInstance;Member[Model]", //
|
||||
"sequelize;Model;sequelize;ThroughOptions;Member[model]", //
|
||||
"sequelize;Model;sequelize;Utils;Member[mapOptionFieldNames].Argument[1]", //
|
||||
"sequelize;Model;sequelize;Utils;Member[mapValueFieldNames].Argument[2]", //
|
||||
"sequelize;Models;sequelize;Model;Member[associate].Argument[0]", //
|
||||
"sequelize;ModelsHashInterface;sequelize;Sequelize;Member[models]", //
|
||||
"sequelize;Options;sequelize-typescript;SequelizeOptions;", //
|
||||
"sequelize;Options;sequelize;Sequelize;Member[options]", //
|
||||
"sequelize;Options;sequelize;SequelizeStatic;Argument[3]", //
|
||||
"sequelize;Options;sequelize;SequelizeStatic;WithArity[1].Argument[0,1]", //
|
||||
"sequelize;Options;sequelize;SequelizeStatic;WithArity[2].Argument[1,2]", //
|
||||
"sequelize;Options;sequelize;SequelizeStatic;WithArity[3].Argument[2]", //
|
||||
"sequelize;QueryInterface;sequelize;Sequelize;Member[getQueryInterface].ReturnValue", //
|
||||
"sequelize;QueryOptions;sequelize;Options;Member[query]", //
|
||||
"sequelize;QueryOptions;sequelize;QueryInterface;Member[bulkDelete,bulkInsert,createTable,select,setAutocommit,setIsolationLevel].Argument[2]", //
|
||||
"sequelize;QueryOptions;sequelize;QueryInterface;Member[bulkUpdate,delete,insert].Argument[3]", //
|
||||
"sequelize;QueryOptions;sequelize;QueryInterface;Member[commitTransaction,deferConstraints,dropTable,rawSelect,rollbackTransaction,showIndex,startTransaction].Argument[1]", //
|
||||
"sequelize;QueryOptions;sequelize;QueryInterface;Member[createFunction].Argument[5]", //
|
||||
"sequelize;QueryOptions;sequelize;QueryInterface;Member[dropAllEnums,dropAllTables,showAllSchemas,showAllTables].Argument[0]", //
|
||||
"sequelize;QueryOptions;sequelize;QueryInterface;Member[increment,update,upsert].Argument[4]", //
|
||||
"sequelize;QueryOptions;sequelize;Sequelize;Member[authenticate,validate].Argument[0]", //
|
||||
"sequelize;QueryOptions;sequelize;Sequelize;Member[query].Argument[1]", //
|
||||
"sequelize;Sequelize;sequelize-typescript;Sequelize;", //
|
||||
"sequelize;Sequelize;sequelize;Hooks;Member[afterInit].Argument[1].Argument[0]", //
|
||||
"sequelize;Sequelize;sequelize;Hooks;Member[afterInit].WithArity[1].Argument[0].Argument[0]", //
|
||||
"sequelize;Sequelize;sequelize;Instance;Member[sequelize]", //
|
||||
"sequelize;Sequelize;sequelize;QueryInterface;Member[sequelize]", //
|
||||
"sequelize;Sequelize;sequelize;Sequelize;Member[import].Argument[1].Argument[0]", //
|
||||
"sequelize;Sequelize;sequelize;SequelizeStatic;Instance", //
|
||||
"sequelize;Sequelize;sequelize;SequelizeStatic;Member[useCLS].ReturnValue", //
|
||||
"sequelize;SequelizeStatic;sequelize-typescript;Sequelize;", //
|
||||
"sequelize;SequelizeStatic;sequelize;;", //
|
||||
"sequelize;SequelizeStatic;sequelize;Sequelize;Member[Sequelize]", //
|
||||
"sequelize;SequelizeStatic;sequelize;SequelizeStatic;Member[Sequelize,default]", //
|
||||
"sequelize;SequelizeStaticAndInstance.Model;sequelize-typescript;Model;", //
|
||||
"sequelize;SequelizeStaticAndInstance;sequelize;Sequelize;", //
|
||||
"sequelize;SequelizeStaticAndInstance;sequelize;SequelizeStatic;", //
|
||||
"sequelize;ThroughOptions;sequelize;AssociationOptionsBelongsToMany;Member[through]", //
|
||||
"sequelize;Utils;sequelize;SequelizeStaticAndInstance;Member[Utils]", //
|
||||
"sequelize-typescript.AssociationCountOptions;sequelize-typescript.Model;Member[$count].Argument[1]", //
|
||||
"sequelize-typescript.AssociationCountOptions;sequelize-typescript/model/model/association/association-count-options.AssociationCountOptions;", //
|
||||
"sequelize-typescript.AssociationGetOptions;sequelize-typescript.Model;Member[$get].Argument[1]", //
|
||||
"sequelize-typescript.AssociationGetOptions;sequelize-typescript.Model;Member[$has].Argument[2]", //
|
||||
"sequelize-typescript.AssociationGetOptions;sequelize-typescript/model/model/association/association-get-options.AssociationGetOptions;", //
|
||||
"sequelize-typescript.BaseAssociation;sequelize-typescript.BaseAssociationStatic;Instance", //
|
||||
"sequelize-typescript.BaseAssociation;sequelize-typescript.BelongsToAssociation;", //
|
||||
"sequelize-typescript.BaseAssociation;sequelize-typescript.BelongsToManyAssociation;", //
|
||||
"sequelize-typescript.BaseAssociation;sequelize-typescript.HasAssociation;", //
|
||||
"sequelize-typescript.BaseAssociation;sequelize-typescript/associations/shared/association-service;Member[addAssociation].Argument[1]", //
|
||||
"sequelize-typescript.BaseAssociation;sequelize-typescript/associations/shared/association-service;Member[getAssociations,getAssociationsByRelation].ReturnValue.ArrayElement", //
|
||||
"sequelize-typescript.BaseAssociation;sequelize-typescript/associations/shared/association-service;Member[setAssociations].Argument[1].ArrayElement", //
|
||||
"sequelize-typescript.BaseAssociation;sequelize-typescript/associations/shared/base-association.BaseAssociation;", //
|
||||
"sequelize-typescript.BaseAssociation;sequelize-typescript;Member[addAssociation].Argument[1]", //
|
||||
"sequelize-typescript.BaseAssociation;sequelize-typescript;Member[getAssociations,getAssociationsByRelation].ReturnValue.ArrayElement", //
|
||||
"sequelize-typescript.BaseAssociation;sequelize-typescript;Member[setAssociations].Argument[1].ArrayElement", //
|
||||
"sequelize-typescript.BaseAssociationStatic;sequelize-typescript/associations/shared/base-association.BaseAssociationStatic;", //
|
||||
"sequelize-typescript.BaseAssociationStatic;sequelize-typescript/associations/shared/base-association;Member[BaseAssociation]", //
|
||||
"sequelize-typescript.BaseAssociationStatic;sequelize-typescript;Member[BaseAssociation]", //
|
||||
"sequelize-typescript.BelongsToAssociation;sequelize-typescript.BelongsToAssociationStatic;Instance", //
|
||||
"sequelize-typescript.BelongsToAssociation;sequelize-typescript/associations/belongs-to/belongs-to-association.BelongsToAssociation;", //
|
||||
"sequelize-typescript.BelongsToAssociationStatic;sequelize-typescript/associations/belongs-to/belongs-to-association.BelongsToAssociationStatic;", //
|
||||
"sequelize-typescript.BelongsToAssociationStatic;sequelize-typescript/associations/belongs-to/belongs-to-association;Member[BelongsToAssociation]", //
|
||||
"sequelize-typescript.BelongsToAssociationStatic;sequelize-typescript;Member[BelongsToAssociation]", //
|
||||
"sequelize-typescript.BelongsToManyAssociation;sequelize-typescript.BelongsToManyAssociationStatic;Instance", //
|
||||
"sequelize-typescript.BelongsToManyAssociation;sequelize-typescript/associations/belongs-to-many/belongs-to-many-association.BelongsToManyAssociation;", //
|
||||
"sequelize-typescript.BelongsToManyAssociationStatic;sequelize-typescript/associations/belongs-to-many/belongs-to-many-association.BelongsToManyAssociationStatic;", //
|
||||
"sequelize-typescript.BelongsToManyAssociationStatic;sequelize-typescript/associations/belongs-to-many/belongs-to-many-association;Member[BelongsToManyAssociation]", //
|
||||
"sequelize-typescript.BelongsToManyAssociationStatic;sequelize-typescript;Member[BelongsToManyAssociation]", //
|
||||
"sequelize-typescript.DefaultScopeGetter;sequelize-typescript.ScopeOptionsGetters;Member[getDefaultScope]", //
|
||||
"sequelize-typescript.DefaultScopeGetter;sequelize-typescript/scopes/default-scope;Member[DefaultScope].Argument[0]", //
|
||||
"sequelize-typescript.DefaultScopeGetter;sequelize-typescript/scopes/scope-options.DefaultScopeGetter;", //
|
||||
"sequelize-typescript.DefaultScopeGetter;sequelize-typescript;Member[DefaultScope].Argument[0]", //
|
||||
"sequelize-typescript.HasAssociation;sequelize-typescript.HasAssociationStatic;Instance", //
|
||||
"sequelize-typescript.HasAssociation;sequelize-typescript/associations/has/has-association.HasAssociation;", //
|
||||
"sequelize-typescript.HasAssociationStatic;sequelize-typescript/associations/has/has-association.HasAssociationStatic;", //
|
||||
"sequelize-typescript.HasAssociationStatic;sequelize-typescript/associations/has/has-association;Member[HasAssociation]", //
|
||||
"sequelize-typescript.HasAssociationStatic;sequelize-typescript;Member[HasAssociation]", //
|
||||
"sequelize-typescript.Model;sequelize-typescript.Model;Member[$add,$has,$remove,$set].Argument[1]", //
|
||||
"sequelize-typescript.Model;sequelize-typescript.Model;Member[$add,$has,$remove,$set].Argument[1].ArrayElement", //
|
||||
"sequelize-typescript.Model;sequelize-typescript.Model;Member[$create,reload].ReturnValue.Awaited", //
|
||||
"sequelize-typescript.Model;sequelize-typescript.ModelStatic~;Instance", //
|
||||
"sequelize-typescript.Model;sequelize-typescript.ModelStatic~;Member[initialize].ReturnValue.TypeVar[sequelize-typescript.ModelStatic.0]", //
|
||||
"sequelize-typescript.Model;sequelize-typescript.ModelType;Instance", //
|
||||
"sequelize-typescript.Model;sequelize-typescript.Sequelize;Member[getRepository].Argument[0].Instance", //
|
||||
"sequelize-typescript.Model;sequelize-typescript.Sequelize;Member[getRepository].ReturnValue.TypeVar[sequelize-typescript.Repository.0]", //
|
||||
"sequelize-typescript.Model;sequelize-typescript/model/model/model.Model;", //
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript.BaseAssociationStatic;Argument[0]", //
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript.BelongsToAssociationStatic;Argument[0]", //
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript.BelongsToManyAssociationStatic;Argument[0]", //
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript.HasAssociationStatic;Argument[0]", //
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript/associations/belongs-to-many/belongs-to-many;Member[BelongsToMany].Argument[0,1]", //
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript/associations/belongs-to/belongs-to;Member[BelongsTo].Argument[0]", //
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript/associations/foreign-key/foreign-key-meta.ForeignKeyMeta;Member[relatedClassGetter]", //
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript/associations/foreign-key/foreign-key-service;Member[addForeignKey].Argument[1]", //
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript/associations/foreign-key/foreign-key;Member[ForeignKey].Argument[0]", //
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript/associations/has/has-many;Member[HasMany].Argument[0]", //
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript/associations/has/has-one;Member[HasOne].Argument[0]", //
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript/model/shared/model-class-getter.ModelClassGetter;", //
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript;Member[BelongsTo,ForeignKey,HasMany,HasOne].Argument[0]", //
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript;Member[BelongsToMany].Argument[0,1]", //
|
||||
"sequelize-typescript.ModelStatic~;sequelize-typescript/model/model/model.ModelStatic~;", //
|
||||
"sequelize-typescript.ModelStatic~;sequelize-typescript/model/model/model;Member[Model]", //
|
||||
"sequelize-typescript.ModelStatic~;sequelize-typescript/model/shared/model-not-initialized-error.ModelNotInitializedErrorStatic;Argument[0]", //
|
||||
"sequelize-typescript.ModelStatic~;sequelize-typescript;Member[Model]", //
|
||||
"sequelize-typescript.ModelType;sequelize-typescript.BaseAssociation;Member[getAssociatedClass].ReturnValue", //
|
||||
"sequelize-typescript.ModelType;sequelize-typescript.BaseAssociation;Member[getSequelizeOptions].Argument[0]", //
|
||||
"sequelize-typescript.ModelType;sequelize-typescript.BelongsToAssociation;Member[getSequelizeOptions].Argument[0]", //
|
||||
"sequelize-typescript.ModelType;sequelize-typescript.BelongsToManyAssociation;Member[getSequelizeOptions].Argument[0]", //
|
||||
"sequelize-typescript.ModelType;sequelize-typescript.HasAssociation;Member[getSequelizeOptions].Argument[0]", //
|
||||
"sequelize-typescript.ModelType;sequelize-typescript.ModelClassGetter;ReturnValue", //
|
||||
"sequelize-typescript.ModelType;sequelize-typescript.Sequelize;Member[model].Argument[0]", //
|
||||
"sequelize-typescript.ModelType;sequelize-typescript/associations/foreign-key/foreign-key-service;Member[getForeignKeyOptions].Argument[0,1]", //
|
||||
"sequelize-typescript.ModelType;sequelize-typescript/model/model/model.ModelType;", //
|
||||
"sequelize-typescript.ScopeOptionsGetters;sequelize-typescript/scopes/scope-options.ScopeOptionsGetters;", //
|
||||
"sequelize-typescript.ScopeOptionsGetters;sequelize-typescript/scopes/scope-service;Member[addScopeOptionsGetter,setScopeOptionsGetters].Argument[1]", //
|
||||
"sequelize-typescript.ScopeOptionsGetters;sequelize-typescript/scopes/scope-service;Member[getScopeOptionsGetters].ReturnValue", //
|
||||
"sequelize-typescript.ScopeOptionsGetters;sequelize-typescript;Member[addScopeOptionsGetter,setScopeOptionsGetters].Argument[1]", //
|
||||
"sequelize-typescript.ScopeOptionsGetters;sequelize-typescript;Member[getScopeOptionsGetters].ReturnValue", //
|
||||
"sequelize-typescript.ScopesOptions;sequelize-typescript.ScopesOptionsGetter;ReturnValue.AnyMember", //
|
||||
"sequelize-typescript.ScopesOptions;sequelize-typescript/scopes/scope-options.ScopesOptions;", //
|
||||
"sequelize-typescript.ScopesOptions;sequelize-typescript/scopes/scope-service;Member[resolveScope].Argument[2]", //
|
||||
"sequelize-typescript.ScopesOptions;sequelize-typescript;Member[resolveScope].Argument[2]", //
|
||||
"sequelize-typescript.ScopesOptionsGetter;sequelize-typescript.ScopeOptionsGetters;Member[getScopes]", //
|
||||
"sequelize-typescript.ScopesOptionsGetter;sequelize-typescript/scopes/scope-options.ScopesOptionsGetter;", //
|
||||
"sequelize-typescript.ScopesOptionsGetter;sequelize-typescript/scopes/scopes;Member[Scopes].Argument[0]", //
|
||||
"sequelize-typescript.ScopesOptionsGetter;sequelize-typescript;Member[Scopes].Argument[0]", //
|
||||
"sequelize-typescript.Sequelize;sequelize-typescript.BaseAssociation;Member[getSequelizeOptions].Argument[1]", //
|
||||
"sequelize-typescript.Sequelize;sequelize-typescript.BelongsToManyAssociation;Member[getSequelizeOptions].Argument[1]", //
|
||||
"sequelize-typescript.Sequelize;sequelize-typescript.SequelizeStatic;Instance", //
|
||||
"sequelize-typescript.Sequelize;sequelize-typescript/sequelize/sequelize/sequelize.Sequelize;", //
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript.Sequelize;Member[options]", //
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript.SequelizeStatic;Argument[3]", //
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript.SequelizeStatic;WithArity[0].Argument[0]", //
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript.SequelizeStatic;WithArity[1].Argument[0,1]", //
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript.SequelizeStatic;WithArity[2].Argument[1,2]", //
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript.SequelizeStatic;WithArity[3].Argument[2]", //
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-options.SequelizeOptions;", //
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-service;Member[prepareArgs].ReturnValue.Member[options]", //
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-service;Member[prepareOptions].Argument[0]", //
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-service;Member[prepareOptions].ReturnValue", //
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript;Member[prepareArgs].ReturnValue.Member[options]", //
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript;Member[prepareOptions].Argument[0]", //
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript;Member[prepareOptions].ReturnValue", //
|
||||
"sequelize-typescript.SequelizeStatic;sequelize-typescript/sequelize/sequelize/sequelize.SequelizeStatic;", //
|
||||
"sequelize-typescript.SequelizeStatic;sequelize-typescript/sequelize/sequelize/sequelize;Member[Sequelize]", //
|
||||
"sequelize-typescript.SequelizeStatic;sequelize-typescript;Member[Sequelize]", //
|
||||
"sequelize-typescript/associations/foreign-key/foreign-key-meta.ForeignKeyMeta;sequelize-typescript/associations/foreign-key/foreign-key-service;Member[getForeignKeys].ReturnValue.ArrayElement", //
|
||||
"sequelize-typescript/model/model/association/association-create-options.AssociationCreateOptions;sequelize-typescript.Model;Member[$create].Argument[2]", //
|
||||
"sequelize-typescript/model/shared/model-not-initialized-error.ModelNotInitializedErrorStatic;sequelize-typescript/model/shared/model-not-initialized-error;Member[ModelNotInitializedError]", //
|
||||
"sequelize.AnyFindOptions;sequelize.BelongsToManyAddAssociationMixin;Argument[1]", //
|
||||
"sequelize.AnyFindOptions;sequelize.BelongsToManyAddAssociationsMixin;Argument[1]", //
|
||||
"sequelize.AnyFindOptions;sequelize.BelongsToManySetAssociationsMixin;Argument[1]", //
|
||||
"sequelize.AnyFindOptions;sequelize.DefineOptions;Member[defaultScope]", //
|
||||
"sequelize.AnyFindOptions;sequelize.DefineScopeOptions;AnyMember", //
|
||||
"sequelize.AnyFindOptions;sequelize.HasManySetAssociationsMixin;Argument[1]", //
|
||||
"sequelize.AnyFindOptions;sequelize.Instance;Member[reload].Argument[0]", //
|
||||
"sequelize.AnyFindOptions;sequelize.Model;Member[addScope].Argument[1]", //
|
||||
"sequelize.AssociationOptionsBelongsToMany;sequelize.Associations;Member[belongsToMany].Argument[1]", //
|
||||
"sequelize.Associations;sequelize.Model;", //
|
||||
"sequelize.Associations;sequelize.SequelizeStaticAndInstance.Model;", //
|
||||
"sequelize.BuildOptions;sequelize-typescript.ModelStatic~;Argument[1]", //
|
||||
"sequelize.BuildOptions;sequelize.CreateOptions;", //
|
||||
"sequelize.BuildOptions;sequelize.Model;Member[build,bulkBuild].Argument[1]", //
|
||||
"sequelize.CountOptions;sequelize.Model;Member[count].Argument[0]", //
|
||||
"sequelize.CreateOptions;sequelize-typescript/model/model/association/association-create-options.AssociationCreateOptions;", //
|
||||
"sequelize.CreateOptions;sequelize.BelongsToCreateAssociationMixin;Argument[1]", //
|
||||
"sequelize.CreateOptions;sequelize.BelongsToManyCreateAssociationMixin;Argument[1]", //
|
||||
"sequelize.CreateOptions;sequelize.HasManyCreateAssociationMixin;Argument[1]", //
|
||||
"sequelize.CreateOptions;sequelize.HasOneCreateAssociationMixin;Argument[1]", //
|
||||
"sequelize.CreateOptions;sequelize.Model;Member[create].Argument[1]", //
|
||||
"sequelize.DefineAttributeColumnOptions;sequelize.DefineAttributes;AnyMember", //
|
||||
"sequelize.DefineAttributeColumnOptions;sequelize.QueryInterface;Member[addColumn,changeColumn].Argument[2]", //
|
||||
"sequelize.DefineAttributeColumnReferencesOptions;sequelize.DefineAttributeColumnOptions;Member[references]", //
|
||||
"sequelize.DefineAttributes;sequelize.Hooks;Member[beforeDefine].Argument[1].Argument[0]", //
|
||||
"sequelize.DefineAttributes;sequelize.Hooks;Member[beforeDefine].WithArity[1].Argument[0].Argument[0]", //
|
||||
"sequelize.DefineAttributes;sequelize.QueryInterface;Member[createTable].Argument[1]", //
|
||||
"sequelize.DefineOptions;sequelize.Options;Member[define]", //
|
||||
"sequelize.DefineOptions;sequelize.Sequelize;Member[define].Argument[2]", //
|
||||
"sequelize.DefineScopeOptions;sequelize.DefineOptions;Member[scopes]", //
|
||||
"sequelize.FindCreateFindOptions;sequelize.Model;Member[findCreateFind].Argument[0]", //
|
||||
"sequelize.FindOptions;sequelize-typescript.AssociationCountOptions;", //
|
||||
"sequelize.FindOptions;sequelize-typescript.AssociationGetOptions;", //
|
||||
"sequelize.FindOptions;sequelize-typescript.DefaultScopeGetter;ReturnValue", //
|
||||
"sequelize.FindOptions;sequelize-typescript.Model;Member[reload].Argument[0]", //
|
||||
"sequelize.FindOptions;sequelize-typescript.ScopesOptions;", //
|
||||
"sequelize.FindOptions;sequelize-typescript.ScopesOptions;ReturnValue", //
|
||||
"sequelize.FindOptions;sequelize.AnyFindOptions;", //
|
||||
"sequelize.FindOptions;sequelize.FindCreateFindOptions;", //
|
||||
"sequelize.FindOptions;sequelize.FindOrInitializeOptions;", //
|
||||
"sequelize.FindOptions;sequelize.Model;Member[all,find,findAll,findAndCount,findAndCountAll,findOne].Argument[0]", //
|
||||
"sequelize.FindOptionsOrderArray;sequelize.FindOptions;Member[order]", //
|
||||
"sequelize.FindOptionsOrderArray;sequelize.FindOptions;Member[order].ArrayElement", //
|
||||
"sequelize.FindOrInitializeOptions;sequelize.Model;Member[findOrBuild,findOrCreate,findOrInitialize].Argument[0]", //
|
||||
"sequelize.HasManyGetAssociationsMixinOptions;sequelize.HasManyGetAssociationsMixin;Argument[0]", //
|
||||
"sequelize.HasManyGetAssociationsMixinOptions;sequelize.HasManyHasAssociationMixin;Argument[1]", //
|
||||
"sequelize.HasManyGetAssociationsMixinOptions;sequelize.HasManyHasAssociationsMixin;Argument[1]", //
|
||||
"sequelize.Hooks;sequelize.Hooks;Member[addHook,hook,removeHook].ReturnValue", //
|
||||
"sequelize.Hooks;sequelize.Model;", //
|
||||
"sequelize.Hooks;sequelize.Sequelize;", //
|
||||
"sequelize.Hooks;sequelize.SequelizeStaticAndInstance.Model;", //
|
||||
"sequelize.IncludeAssociation;sequelize.Associations;Member[belongsTo,belongsToMany,hasMany,hasOne].ReturnValue", //
|
||||
"sequelize.IncludeAssociation;sequelize.IncludeOptions;Member[association]", //
|
||||
"sequelize.IncludeOptions;sequelize.BuildOptions;Member[include].ArrayElement", //
|
||||
"sequelize.IncludeOptions;sequelize.CountOptions;Member[include]", //
|
||||
"sequelize.IncludeOptions;sequelize.CountOptions;Member[include].ArrayElement", //
|
||||
"sequelize.IncludeOptions;sequelize.FindOptions;Member[include]", //
|
||||
"sequelize.IncludeOptions;sequelize.FindOptions;Member[include].ArrayElement", //
|
||||
"sequelize.IncludeOptions;sequelize.HasManyGetAssociationsMixinOptions;Member[include]", //
|
||||
"sequelize.IncludeOptions;sequelize.IncludeOptions;Member[include]", //
|
||||
"sequelize.IncludeOptions;sequelize.IncludeOptions;Member[include].ArrayElement", //
|
||||
"sequelize.Instance;sequelize.Instance;Member[decrement,increment,reload,save,update,updateAttributes].ReturnValue.Awaited", //
|
||||
"sequelize.Instance;sequelize.Instance;Member[equalsOneOf].Argument[0].ArrayElement", //
|
||||
"sequelize.Instance;sequelize.Instance;Member[equals].Argument[0]", //
|
||||
"sequelize.Instance;sequelize.Instance;Member[set,setAttributes].ReturnValue", //
|
||||
"sequelize.Instance;sequelize.Model;Member[Instance,build].ReturnValue", //
|
||||
"sequelize.Instance;sequelize.Model;Member[all,bulkCreate,findAll].ReturnValue.Awaited.ArrayElement", //
|
||||
"sequelize.Instance;sequelize.Model;Member[bulkBuild].ReturnValue.ArrayElement", //
|
||||
"sequelize.Instance;sequelize.Model;Member[create,find,findById,findByPk,findByPrimary,findOne].ReturnValue.Awaited", //
|
||||
"sequelize.Instance;sequelize.Model;Member[findAndCount,findAndCountAll].ReturnValue.Awaited.Member[rows].ArrayElement", //
|
||||
"sequelize.Instance;sequelize.QueryInterface;Member[delete,increment,insert,update].Argument[0]", //
|
||||
"sequelize.Instance;sequelize.QueryOptions;Member[instance]", //
|
||||
"sequelize.Instance;sequelize.SequelizeStaticAndInstance;Member[Instance]", //
|
||||
"sequelize.Model;sequelize.AssociationOptionsBelongsToMany;Member[through]", //
|
||||
"sequelize.Model;sequelize.Associations;Member[belongsTo,belongsToMany,hasMany,hasOne].Argument[0]", //
|
||||
"sequelize.Model;sequelize.BuildOptions;Member[include].ArrayElement", //
|
||||
"sequelize.Model;sequelize.CountOptions;Member[include]", //
|
||||
"sequelize.Model;sequelize.CountOptions;Member[include].ArrayElement", //
|
||||
"sequelize.Model;sequelize.DefineAttributeColumnReferencesOptions;Member[model]", //
|
||||
"sequelize.Model;sequelize.FindOptions;Member[include]", //
|
||||
"sequelize.Model;sequelize.FindOptions;Member[include].ArrayElement", //
|
||||
"sequelize.Model;sequelize.FindOptions;Member[lock].Member[of]", //
|
||||
"sequelize.Model;sequelize.FindOptionsOrderArray;ArrayElement", //
|
||||
"sequelize.Model;sequelize.FindOptionsOrderArray;ArrayElement.Member[model]", //
|
||||
"sequelize.Model;sequelize.Hooks;Member[afterDefine].Argument[1].Argument[0]", //
|
||||
"sequelize.Model;sequelize.Hooks;Member[afterDefine].WithArity[1].Argument[0].Argument[0]", //
|
||||
"sequelize.Model;sequelize.IncludeAssociation;Member[source,target]", //
|
||||
"sequelize.Model;sequelize.IncludeOptions;Member[include,model]", //
|
||||
"sequelize.Model;sequelize.IncludeOptions;Member[include].ArrayElement", //
|
||||
"sequelize.Model;sequelize.Instance;Member[Model]", //
|
||||
"sequelize.Model;sequelize.Model;Member[schema,scope,unscoped].ReturnValue", //
|
||||
"sequelize.Model;sequelize.Model;Member[sync].ReturnValue.Awaited", //
|
||||
"sequelize.Model;sequelize.Models;AnyMember", //
|
||||
"sequelize.Model;sequelize.ModelsHashInterface;AnyMember", //
|
||||
"sequelize.Model;sequelize.QueryInterface;Member[bulkDelete,rawSelect,upsert].Argument[3]", //
|
||||
"sequelize.Model;sequelize.QueryInterface;Member[select].Argument[0]", //
|
||||
"sequelize.Model;sequelize.QueryOptions;Member[model]", //
|
||||
"sequelize.Model;sequelize.Sequelize;Member[define,import,model].ReturnValue", //
|
||||
"sequelize.Model;sequelize.Sequelize;Member[import].Argument[1].ReturnValue", //
|
||||
"sequelize.Model;sequelize.SequelizeStaticAndInstance;Member[Model]", //
|
||||
"sequelize.Model;sequelize.ThroughOptions;Member[model]", //
|
||||
"sequelize.Model;sequelize.Utils;Member[mapOptionFieldNames].Argument[1]", //
|
||||
"sequelize.Model;sequelize.Utils;Member[mapValueFieldNames].Argument[2]", //
|
||||
"sequelize.Models;sequelize.Model;Member[associate].Argument[0]", //
|
||||
"sequelize.ModelsHashInterface;sequelize.Sequelize;Member[models]", //
|
||||
"sequelize.Options;sequelize-typescript.SequelizeOptions;", //
|
||||
"sequelize.Options;sequelize.Sequelize;Member[options]", //
|
||||
"sequelize.Options;sequelize.SequelizeStatic;Argument[3]", //
|
||||
"sequelize.Options;sequelize.SequelizeStatic;WithArity[1].Argument[0,1]", //
|
||||
"sequelize.Options;sequelize.SequelizeStatic;WithArity[2].Argument[1,2]", //
|
||||
"sequelize.Options;sequelize.SequelizeStatic;WithArity[3].Argument[2]", //
|
||||
"sequelize.QueryInterface;sequelize.Sequelize;Member[getQueryInterface].ReturnValue", //
|
||||
"sequelize.QueryOptions;sequelize.Options;Member[query]", //
|
||||
"sequelize.QueryOptions;sequelize.QueryInterface;Member[bulkDelete,bulkInsert,createTable,select,setAutocommit,setIsolationLevel].Argument[2]", //
|
||||
"sequelize.QueryOptions;sequelize.QueryInterface;Member[bulkUpdate,delete,insert].Argument[3]", //
|
||||
"sequelize.QueryOptions;sequelize.QueryInterface;Member[commitTransaction,deferConstraints,dropTable,rawSelect,rollbackTransaction,showIndex,startTransaction].Argument[1]", //
|
||||
"sequelize.QueryOptions;sequelize.QueryInterface;Member[createFunction].Argument[5]", //
|
||||
"sequelize.QueryOptions;sequelize.QueryInterface;Member[dropAllEnums,dropAllTables,showAllSchemas,showAllTables].Argument[0]", //
|
||||
"sequelize.QueryOptions;sequelize.QueryInterface;Member[increment,update,upsert].Argument[4]", //
|
||||
"sequelize.QueryOptions;sequelize.Sequelize;Member[authenticate,validate].Argument[0]", //
|
||||
"sequelize.QueryOptions;sequelize.Sequelize;Member[query].Argument[1]", //
|
||||
"sequelize.Sequelize;sequelize-typescript.Sequelize;", //
|
||||
"sequelize.Sequelize;sequelize.Hooks;Member[afterInit].Argument[1].Argument[0]", //
|
||||
"sequelize.Sequelize;sequelize.Hooks;Member[afterInit].WithArity[1].Argument[0].Argument[0]", //
|
||||
"sequelize.Sequelize;sequelize.Instance;Member[sequelize]", //
|
||||
"sequelize.Sequelize;sequelize.QueryInterface;Member[sequelize]", //
|
||||
"sequelize.Sequelize;sequelize.Sequelize;Member[import].Argument[1].Argument[0]", //
|
||||
"sequelize.Sequelize;sequelize.SequelizeStatic;Instance", //
|
||||
"sequelize.Sequelize;sequelize.SequelizeStatic;Member[useCLS].ReturnValue", //
|
||||
"sequelize.SequelizeStatic;sequelize-typescript.Sequelize;", //
|
||||
"sequelize.SequelizeStatic;sequelize.Sequelize;Member[Sequelize]", //
|
||||
"sequelize.SequelizeStatic;sequelize.SequelizeStatic;Member[Sequelize,default]", //
|
||||
"sequelize.SequelizeStatic;sequelize;", //
|
||||
"sequelize.SequelizeStaticAndInstance.Model;sequelize-typescript.Model;", //
|
||||
"sequelize.SequelizeStaticAndInstance;sequelize.Sequelize;", //
|
||||
"sequelize.SequelizeStaticAndInstance;sequelize.SequelizeStatic;", //
|
||||
"sequelize.ThroughOptions;sequelize.AssociationOptionsBelongsToMany;Member[through]", //
|
||||
"sequelize.Utils;sequelize.SequelizeStaticAndInstance;Member[Utils]", //
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -277,11 +277,11 @@ private class Summaries extends ModelInput::SummaryModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"sequelize-typescript;Model;;;Member[reload].ReturnValue.Awaited;type", //
|
||||
"sequelize;Instance;;;Member[decrement,increment,reload,save,update,updateAttributes].ReturnValue.Awaited;type", //
|
||||
"sequelize;Instance;;;Member[set,setAttributes].ReturnValue;type", //
|
||||
"sequelize;Model;;;Member[schema,scope,unscoped].ReturnValue;type", //
|
||||
"sequelize;Model;;;Member[sync].ReturnValue.Awaited;type", //
|
||||
"sequelize-typescript.Model;;;Member[reload].ReturnValue.Awaited;type", //
|
||||
"sequelize.Instance;;;Member[decrement,increment,reload,save,update,updateAttributes].ReturnValue.Awaited;type", //
|
||||
"sequelize.Instance;;;Member[set,setAttributes].ReturnValue;type", //
|
||||
"sequelize.Model;;;Member[schema,scope,unscoped].ReturnValue;type", //
|
||||
"sequelize.Model;;;Member[sync].ReturnValue.Awaited;type", //
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,279 +12,279 @@
|
||||
},
|
||||
"language": "javascript",
|
||||
"replaceTypeParameters": [
|
||||
"sequelize;Model;TInstance;sequelize;Instance"
|
||||
"sequelize.Model;TInstance;sequelize.Instance"
|
||||
],
|
||||
"model": {
|
||||
"sinks": [
|
||||
"sequelize;;Argument[0..].Member[password];credentials[password]",
|
||||
"sequelize;;Argument[0..].Member[username];credentials[username]",
|
||||
"sequelize;;Argument[1];credentials[username]",
|
||||
"sequelize;;Argument[2];credentials[password]",
|
||||
"sequelize;Sequelize;Member[query].Argument[0].Member[query];sql-injection",
|
||||
"sequelize;Sequelize;Member[query].Argument[0];sql-injection",
|
||||
"sequelize;SequelizeStaticAndInstance;Member[asIs,literal].Argument[0];sql-injection"
|
||||
"sequelize.Sequelize;Member[query].Argument[0].Member[query];sql-injection",
|
||||
"sequelize.Sequelize;Member[query].Argument[0];sql-injection",
|
||||
"sequelize.SequelizeStaticAndInstance;Member[asIs,literal].Argument[0];sql-injection",
|
||||
"sequelize;Argument[0..].Member[password];credentials[password]",
|
||||
"sequelize;Argument[0..].Member[username];credentials[username]",
|
||||
"sequelize;Argument[1];credentials[username]",
|
||||
"sequelize;Argument[2];credentials[password]"
|
||||
],
|
||||
"typeDefinitions": [
|
||||
"sequelize;Sequelize;sequelize-typescript;Sequelize;"
|
||||
"sequelize.Sequelize;sequelize-typescript.Sequelize;"
|
||||
]
|
||||
},
|
||||
"generatedModel": {
|
||||
"//": "Autogenerated section. Manual edits in here will be lost.",
|
||||
"typeDefinitions": [
|
||||
"sequelize-typescript/associations/foreign-key/foreign-key-meta;ForeignKeyMeta;sequelize-typescript/associations/foreign-key/foreign-key-service;;Member[getForeignKeys].ReturnValue.ArrayElement",
|
||||
"sequelize-typescript/model/model/association/association-create-options;AssociationCreateOptions;sequelize-typescript;Model;Member[$create].Argument[2]",
|
||||
"sequelize-typescript/model/shared/model-not-initialized-error;ModelNotInitializedErrorStatic;sequelize-typescript/model/shared/model-not-initialized-error;;Member[ModelNotInitializedError]",
|
||||
"sequelize-typescript;AssociationCountOptions;sequelize-typescript/model/model/association/association-count-options;AssociationCountOptions;",
|
||||
"sequelize-typescript;AssociationCountOptions;sequelize-typescript;Model;Member[$count].Argument[1]",
|
||||
"sequelize-typescript;AssociationGetOptions;sequelize-typescript/model/model/association/association-get-options;AssociationGetOptions;",
|
||||
"sequelize-typescript;AssociationGetOptions;sequelize-typescript;Model;Member[$get].Argument[1]",
|
||||
"sequelize-typescript;AssociationGetOptions;sequelize-typescript;Model;Member[$has].Argument[2]",
|
||||
"sequelize-typescript;BaseAssociation;sequelize-typescript/associations/shared/association-service;;Member[addAssociation].Argument[1]",
|
||||
"sequelize-typescript;BaseAssociation;sequelize-typescript/associations/shared/association-service;;Member[getAssociations,getAssociationsByRelation].ReturnValue.ArrayElement",
|
||||
"sequelize-typescript;BaseAssociation;sequelize-typescript/associations/shared/association-service;;Member[setAssociations].Argument[1].ArrayElement",
|
||||
"sequelize-typescript;BaseAssociation;sequelize-typescript/associations/shared/base-association;BaseAssociation;",
|
||||
"sequelize-typescript;BaseAssociation;sequelize-typescript;;Member[addAssociation].Argument[1]",
|
||||
"sequelize-typescript;BaseAssociation;sequelize-typescript;;Member[getAssociations,getAssociationsByRelation].ReturnValue.ArrayElement",
|
||||
"sequelize-typescript;BaseAssociation;sequelize-typescript;;Member[setAssociations].Argument[1].ArrayElement",
|
||||
"sequelize-typescript;BaseAssociation;sequelize-typescript;BaseAssociationStatic;Instance",
|
||||
"sequelize-typescript;BaseAssociation;sequelize-typescript;BelongsToAssociation;",
|
||||
"sequelize-typescript;BaseAssociation;sequelize-typescript;BelongsToManyAssociation;",
|
||||
"sequelize-typescript;BaseAssociation;sequelize-typescript;HasAssociation;",
|
||||
"sequelize-typescript;BaseAssociationStatic;sequelize-typescript/associations/shared/base-association;;Member[BaseAssociation]",
|
||||
"sequelize-typescript;BaseAssociationStatic;sequelize-typescript/associations/shared/base-association;BaseAssociationStatic;",
|
||||
"sequelize-typescript;BaseAssociationStatic;sequelize-typescript;;Member[BaseAssociation]",
|
||||
"sequelize-typescript;BelongsToAssociation;sequelize-typescript/associations/belongs-to/belongs-to-association;BelongsToAssociation;",
|
||||
"sequelize-typescript;BelongsToAssociation;sequelize-typescript;BelongsToAssociationStatic;Instance",
|
||||
"sequelize-typescript;BelongsToAssociationStatic;sequelize-typescript/associations/belongs-to/belongs-to-association;;Member[BelongsToAssociation]",
|
||||
"sequelize-typescript;BelongsToAssociationStatic;sequelize-typescript/associations/belongs-to/belongs-to-association;BelongsToAssociationStatic;",
|
||||
"sequelize-typescript;BelongsToAssociationStatic;sequelize-typescript;;Member[BelongsToAssociation]",
|
||||
"sequelize-typescript;BelongsToManyAssociation;sequelize-typescript/associations/belongs-to-many/belongs-to-many-association;BelongsToManyAssociation;",
|
||||
"sequelize-typescript;BelongsToManyAssociation;sequelize-typescript;BelongsToManyAssociationStatic;Instance",
|
||||
"sequelize-typescript;BelongsToManyAssociationStatic;sequelize-typescript/associations/belongs-to-many/belongs-to-many-association;;Member[BelongsToManyAssociation]",
|
||||
"sequelize-typescript;BelongsToManyAssociationStatic;sequelize-typescript/associations/belongs-to-many/belongs-to-many-association;BelongsToManyAssociationStatic;",
|
||||
"sequelize-typescript;BelongsToManyAssociationStatic;sequelize-typescript;;Member[BelongsToManyAssociation]",
|
||||
"sequelize-typescript;DefaultScopeGetter;sequelize-typescript/scopes/default-scope;;Member[DefaultScope].Argument[0]",
|
||||
"sequelize-typescript;DefaultScopeGetter;sequelize-typescript/scopes/scope-options;DefaultScopeGetter;",
|
||||
"sequelize-typescript;DefaultScopeGetter;sequelize-typescript;;Member[DefaultScope].Argument[0]",
|
||||
"sequelize-typescript;DefaultScopeGetter;sequelize-typescript;ScopeOptionsGetters;Member[getDefaultScope]",
|
||||
"sequelize-typescript;HasAssociation;sequelize-typescript/associations/has/has-association;HasAssociation;",
|
||||
"sequelize-typescript;HasAssociation;sequelize-typescript;HasAssociationStatic;Instance",
|
||||
"sequelize-typescript;HasAssociationStatic;sequelize-typescript/associations/has/has-association;;Member[HasAssociation]",
|
||||
"sequelize-typescript;HasAssociationStatic;sequelize-typescript/associations/has/has-association;HasAssociationStatic;",
|
||||
"sequelize-typescript;HasAssociationStatic;sequelize-typescript;;Member[HasAssociation]",
|
||||
"sequelize-typescript;Model;sequelize-typescript/model/model/model;Model;",
|
||||
"sequelize-typescript;Model;sequelize-typescript;Model;Member[$add,$has,$remove,$set].Argument[1]",
|
||||
"sequelize-typescript;Model;sequelize-typescript;Model;Member[$add,$has,$remove,$set].Argument[1].ArrayElement",
|
||||
"sequelize-typescript;Model;sequelize-typescript;Model;Member[$create,reload].ReturnValue.Awaited",
|
||||
"sequelize-typescript;Model;sequelize-typescript;ModelStatic~;Instance",
|
||||
"sequelize-typescript;Model;sequelize-typescript;ModelStatic~;Member[initialize].ReturnValue.TypeVar[sequelize-typescript.ModelStatic.0]",
|
||||
"sequelize-typescript;Model;sequelize-typescript;ModelType;Instance",
|
||||
"sequelize-typescript;Model;sequelize-typescript;Sequelize;Member[getRepository].Argument[0].Instance",
|
||||
"sequelize-typescript;Model;sequelize-typescript;Sequelize;Member[getRepository].ReturnValue.TypeVar[sequelize-typescript.Repository.0]",
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/belongs-to-many/belongs-to-many;;Member[BelongsToMany].Argument[0,1]",
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/belongs-to/belongs-to;;Member[BelongsTo].Argument[0]",
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/foreign-key/foreign-key-meta;ForeignKeyMeta;Member[relatedClassGetter]",
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/foreign-key/foreign-key-service;;Member[addForeignKey].Argument[1]",
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/foreign-key/foreign-key;;Member[ForeignKey].Argument[0]",
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/has/has-many;;Member[HasMany].Argument[0]",
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/has/has-one;;Member[HasOne].Argument[0]",
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript/model/shared/model-class-getter;ModelClassGetter;",
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript;;Member[BelongsTo,ForeignKey,HasMany,HasOne].Argument[0]",
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript;;Member[BelongsToMany].Argument[0,1]",
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript;BaseAssociationStatic;Argument[0]",
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript;BelongsToAssociationStatic;Argument[0]",
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript;BelongsToManyAssociationStatic;Argument[0]",
|
||||
"sequelize-typescript;ModelClassGetter;sequelize-typescript;HasAssociationStatic;Argument[0]",
|
||||
"sequelize-typescript;ModelStatic~;sequelize-typescript/model/model/model;;Member[Model]",
|
||||
"sequelize-typescript;ModelStatic~;sequelize-typescript/model/model/model;ModelStatic~;",
|
||||
"sequelize-typescript;ModelStatic~;sequelize-typescript/model/shared/model-not-initialized-error;ModelNotInitializedErrorStatic;Argument[0]",
|
||||
"sequelize-typescript;ModelStatic~;sequelize-typescript;;Member[Model]",
|
||||
"sequelize-typescript;ModelType;sequelize-typescript/associations/foreign-key/foreign-key-service;;Member[getForeignKeyOptions].Argument[0,1]",
|
||||
"sequelize-typescript;ModelType;sequelize-typescript/model/model/model;ModelType;",
|
||||
"sequelize-typescript;ModelType;sequelize-typescript;BaseAssociation;Member[getAssociatedClass].ReturnValue",
|
||||
"sequelize-typescript;ModelType;sequelize-typescript;BaseAssociation;Member[getSequelizeOptions].Argument[0]",
|
||||
"sequelize-typescript;ModelType;sequelize-typescript;BelongsToAssociation;Member[getSequelizeOptions].Argument[0]",
|
||||
"sequelize-typescript;ModelType;sequelize-typescript;BelongsToManyAssociation;Member[getSequelizeOptions].Argument[0]",
|
||||
"sequelize-typescript;ModelType;sequelize-typescript;HasAssociation;Member[getSequelizeOptions].Argument[0]",
|
||||
"sequelize-typescript;ModelType;sequelize-typescript;ModelClassGetter;ReturnValue",
|
||||
"sequelize-typescript;ModelType;sequelize-typescript;Sequelize;Member[model].Argument[0]",
|
||||
"sequelize-typescript;ScopeOptionsGetters;sequelize-typescript/scopes/scope-options;ScopeOptionsGetters;",
|
||||
"sequelize-typescript;ScopeOptionsGetters;sequelize-typescript/scopes/scope-service;;Member[addScopeOptionsGetter,setScopeOptionsGetters].Argument[1]",
|
||||
"sequelize-typescript;ScopeOptionsGetters;sequelize-typescript/scopes/scope-service;;Member[getScopeOptionsGetters].ReturnValue",
|
||||
"sequelize-typescript;ScopeOptionsGetters;sequelize-typescript;;Member[addScopeOptionsGetter,setScopeOptionsGetters].Argument[1]",
|
||||
"sequelize-typescript;ScopeOptionsGetters;sequelize-typescript;;Member[getScopeOptionsGetters].ReturnValue",
|
||||
"sequelize-typescript;ScopesOptions;sequelize-typescript/scopes/scope-options;ScopesOptions;",
|
||||
"sequelize-typescript;ScopesOptions;sequelize-typescript/scopes/scope-service;;Member[resolveScope].Argument[2]",
|
||||
"sequelize-typescript;ScopesOptions;sequelize-typescript;;Member[resolveScope].Argument[2]",
|
||||
"sequelize-typescript;ScopesOptions;sequelize-typescript;ScopesOptionsGetter;ReturnValue.AnyMember",
|
||||
"sequelize-typescript;ScopesOptionsGetter;sequelize-typescript/scopes/scope-options;ScopesOptionsGetter;",
|
||||
"sequelize-typescript;ScopesOptionsGetter;sequelize-typescript/scopes/scopes;;Member[Scopes].Argument[0]",
|
||||
"sequelize-typescript;ScopesOptionsGetter;sequelize-typescript;;Member[Scopes].Argument[0]",
|
||||
"sequelize-typescript;ScopesOptionsGetter;sequelize-typescript;ScopeOptionsGetters;Member[getScopes]",
|
||||
"sequelize-typescript;Sequelize;sequelize-typescript/sequelize/sequelize/sequelize;Sequelize;",
|
||||
"sequelize-typescript;Sequelize;sequelize-typescript;BaseAssociation;Member[getSequelizeOptions].Argument[1]",
|
||||
"sequelize-typescript;Sequelize;sequelize-typescript;BelongsToManyAssociation;Member[getSequelizeOptions].Argument[1]",
|
||||
"sequelize-typescript;Sequelize;sequelize-typescript;SequelizeStatic;Instance",
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-options;SequelizeOptions;",
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-service;;Member[prepareArgs].ReturnValue.Member[options]",
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-service;;Member[prepareOptions].Argument[0]",
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-service;;Member[prepareOptions].ReturnValue",
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript;;Member[prepareArgs].ReturnValue.Member[options]",
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript;;Member[prepareOptions].Argument[0]",
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript;;Member[prepareOptions].ReturnValue",
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript;Sequelize;Member[options]",
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript;SequelizeStatic;Argument[3]",
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript;SequelizeStatic;WithArity[0].Argument[0]",
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript;SequelizeStatic;WithArity[1].Argument[0,1]",
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript;SequelizeStatic;WithArity[2].Argument[1,2]",
|
||||
"sequelize-typescript;SequelizeOptions;sequelize-typescript;SequelizeStatic;WithArity[3].Argument[2]",
|
||||
"sequelize-typescript;SequelizeStatic;sequelize-typescript/sequelize/sequelize/sequelize;;Member[Sequelize]",
|
||||
"sequelize-typescript;SequelizeStatic;sequelize-typescript/sequelize/sequelize/sequelize;SequelizeStatic;",
|
||||
"sequelize-typescript;SequelizeStatic;sequelize-typescript;;Member[Sequelize]",
|
||||
"sequelize;AnyFindOptions;sequelize;BelongsToManyAddAssociationMixin;Argument[1]",
|
||||
"sequelize;AnyFindOptions;sequelize;BelongsToManyAddAssociationsMixin;Argument[1]",
|
||||
"sequelize;AnyFindOptions;sequelize;BelongsToManySetAssociationsMixin;Argument[1]",
|
||||
"sequelize;AnyFindOptions;sequelize;DefineOptions;Member[defaultScope]",
|
||||
"sequelize;AnyFindOptions;sequelize;DefineScopeOptions;AnyMember",
|
||||
"sequelize;AnyFindOptions;sequelize;HasManySetAssociationsMixin;Argument[1]",
|
||||
"sequelize;AnyFindOptions;sequelize;Instance;Member[reload].Argument[0]",
|
||||
"sequelize;AnyFindOptions;sequelize;Model;Member[addScope].Argument[1]",
|
||||
"sequelize;AssociationOptionsBelongsToMany;sequelize;Associations;Member[belongsToMany].Argument[1]",
|
||||
"sequelize;Associations;sequelize;Model;",
|
||||
"sequelize;Associations;sequelize;SequelizeStaticAndInstance.Model;",
|
||||
"sequelize;BuildOptions;sequelize-typescript;ModelStatic~;Argument[1]",
|
||||
"sequelize;BuildOptions;sequelize;CreateOptions;",
|
||||
"sequelize;BuildOptions;sequelize;Model;Member[build,bulkBuild].Argument[1]",
|
||||
"sequelize;CountOptions;sequelize;Model;Member[count].Argument[0]",
|
||||
"sequelize;CreateOptions;sequelize-typescript/model/model/association/association-create-options;AssociationCreateOptions;",
|
||||
"sequelize;CreateOptions;sequelize;BelongsToCreateAssociationMixin;Argument[1]",
|
||||
"sequelize;CreateOptions;sequelize;BelongsToManyCreateAssociationMixin;Argument[1]",
|
||||
"sequelize;CreateOptions;sequelize;HasManyCreateAssociationMixin;Argument[1]",
|
||||
"sequelize;CreateOptions;sequelize;HasOneCreateAssociationMixin;Argument[1]",
|
||||
"sequelize;CreateOptions;sequelize;Model;Member[create].Argument[1]",
|
||||
"sequelize;DefineAttributeColumnOptions;sequelize;DefineAttributes;AnyMember",
|
||||
"sequelize;DefineAttributeColumnOptions;sequelize;QueryInterface;Member[addColumn,changeColumn].Argument[2]",
|
||||
"sequelize;DefineAttributeColumnReferencesOptions;sequelize;DefineAttributeColumnOptions;Member[references]",
|
||||
"sequelize;DefineAttributes;sequelize;Hooks;Member[beforeDefine].Argument[1].Argument[0]",
|
||||
"sequelize;DefineAttributes;sequelize;Hooks;Member[beforeDefine].WithArity[1].Argument[0].Argument[0]",
|
||||
"sequelize;DefineAttributes;sequelize;QueryInterface;Member[createTable].Argument[1]",
|
||||
"sequelize;DefineOptions;sequelize;Options;Member[define]",
|
||||
"sequelize;DefineOptions;sequelize;Sequelize;Member[define].Argument[2]",
|
||||
"sequelize;DefineScopeOptions;sequelize;DefineOptions;Member[scopes]",
|
||||
"sequelize;FindCreateFindOptions;sequelize;Model;Member[findCreateFind].Argument[0]",
|
||||
"sequelize;FindOptions;sequelize-typescript;AssociationCountOptions;",
|
||||
"sequelize;FindOptions;sequelize-typescript;AssociationGetOptions;",
|
||||
"sequelize;FindOptions;sequelize-typescript;DefaultScopeGetter;ReturnValue",
|
||||
"sequelize;FindOptions;sequelize-typescript;Model;Member[reload].Argument[0]",
|
||||
"sequelize;FindOptions;sequelize-typescript;ScopesOptions;",
|
||||
"sequelize;FindOptions;sequelize-typescript;ScopesOptions;ReturnValue",
|
||||
"sequelize;FindOptions;sequelize;AnyFindOptions;",
|
||||
"sequelize;FindOptions;sequelize;FindCreateFindOptions;",
|
||||
"sequelize;FindOptions;sequelize;FindOrInitializeOptions;",
|
||||
"sequelize;FindOptions;sequelize;Model;Member[all,find,findAll,findAndCount,findAndCountAll,findOne].Argument[0]",
|
||||
"sequelize;FindOptionsOrderArray;sequelize;FindOptions;Member[order]",
|
||||
"sequelize;FindOptionsOrderArray;sequelize;FindOptions;Member[order].ArrayElement",
|
||||
"sequelize;FindOrInitializeOptions;sequelize;Model;Member[findOrBuild,findOrCreate,findOrInitialize].Argument[0]",
|
||||
"sequelize;HasManyGetAssociationsMixinOptions;sequelize;HasManyGetAssociationsMixin;Argument[0]",
|
||||
"sequelize;HasManyGetAssociationsMixinOptions;sequelize;HasManyHasAssociationMixin;Argument[1]",
|
||||
"sequelize;HasManyGetAssociationsMixinOptions;sequelize;HasManyHasAssociationsMixin;Argument[1]",
|
||||
"sequelize;Hooks;sequelize;Hooks;Member[addHook,hook,removeHook].ReturnValue",
|
||||
"sequelize;Hooks;sequelize;Model;",
|
||||
"sequelize;Hooks;sequelize;Sequelize;",
|
||||
"sequelize;Hooks;sequelize;SequelizeStaticAndInstance.Model;",
|
||||
"sequelize;IncludeAssociation;sequelize;Associations;Member[belongsTo,belongsToMany,hasMany,hasOne].ReturnValue",
|
||||
"sequelize;IncludeAssociation;sequelize;IncludeOptions;Member[association]",
|
||||
"sequelize;IncludeOptions;sequelize;BuildOptions;Member[include].ArrayElement",
|
||||
"sequelize;IncludeOptions;sequelize;CountOptions;Member[include]",
|
||||
"sequelize;IncludeOptions;sequelize;CountOptions;Member[include].ArrayElement",
|
||||
"sequelize;IncludeOptions;sequelize;FindOptions;Member[include]",
|
||||
"sequelize;IncludeOptions;sequelize;FindOptions;Member[include].ArrayElement",
|
||||
"sequelize;IncludeOptions;sequelize;HasManyGetAssociationsMixinOptions;Member[include]",
|
||||
"sequelize;IncludeOptions;sequelize;IncludeOptions;Member[include]",
|
||||
"sequelize;IncludeOptions;sequelize;IncludeOptions;Member[include].ArrayElement",
|
||||
"sequelize;Instance;sequelize;Instance;Member[decrement,increment,reload,save,update,updateAttributes].ReturnValue.Awaited",
|
||||
"sequelize;Instance;sequelize;Instance;Member[equalsOneOf].Argument[0].ArrayElement",
|
||||
"sequelize;Instance;sequelize;Instance;Member[equals].Argument[0]",
|
||||
"sequelize;Instance;sequelize;Instance;Member[set,setAttributes].ReturnValue",
|
||||
"sequelize;Instance;sequelize;Model;Member[Instance,build].ReturnValue",
|
||||
"sequelize;Instance;sequelize;Model;Member[all,bulkCreate,findAll].ReturnValue.Awaited.ArrayElement",
|
||||
"sequelize;Instance;sequelize;Model;Member[bulkBuild].ReturnValue.ArrayElement",
|
||||
"sequelize;Instance;sequelize;Model;Member[create,find,findById,findByPk,findByPrimary,findOne].ReturnValue.Awaited",
|
||||
"sequelize;Instance;sequelize;Model;Member[findAndCount,findAndCountAll].ReturnValue.Awaited.Member[rows].ArrayElement",
|
||||
"sequelize;Instance;sequelize;QueryInterface;Member[delete,increment,insert,update].Argument[0]",
|
||||
"sequelize;Instance;sequelize;QueryOptions;Member[instance]",
|
||||
"sequelize;Instance;sequelize;SequelizeStaticAndInstance;Member[Instance]",
|
||||
"sequelize;Model;sequelize;AssociationOptionsBelongsToMany;Member[through]",
|
||||
"sequelize;Model;sequelize;Associations;Member[belongsTo,belongsToMany,hasMany,hasOne].Argument[0]",
|
||||
"sequelize;Model;sequelize;BuildOptions;Member[include].ArrayElement",
|
||||
"sequelize;Model;sequelize;CountOptions;Member[include]",
|
||||
"sequelize;Model;sequelize;CountOptions;Member[include].ArrayElement",
|
||||
"sequelize;Model;sequelize;DefineAttributeColumnReferencesOptions;Member[model]",
|
||||
"sequelize;Model;sequelize;FindOptions;Member[include]",
|
||||
"sequelize;Model;sequelize;FindOptions;Member[include].ArrayElement",
|
||||
"sequelize;Model;sequelize;FindOptions;Member[lock].Member[of]",
|
||||
"sequelize;Model;sequelize;FindOptionsOrderArray;ArrayElement",
|
||||
"sequelize;Model;sequelize;FindOptionsOrderArray;ArrayElement.Member[model]",
|
||||
"sequelize;Model;sequelize;Hooks;Member[afterDefine].Argument[1].Argument[0]",
|
||||
"sequelize;Model;sequelize;Hooks;Member[afterDefine].WithArity[1].Argument[0].Argument[0]",
|
||||
"sequelize;Model;sequelize;IncludeAssociation;Member[source,target]",
|
||||
"sequelize;Model;sequelize;IncludeOptions;Member[include,model]",
|
||||
"sequelize;Model;sequelize;IncludeOptions;Member[include].ArrayElement",
|
||||
"sequelize;Model;sequelize;Instance;Member[Model]",
|
||||
"sequelize;Model;sequelize;Model;Member[schema,scope,unscoped].ReturnValue",
|
||||
"sequelize;Model;sequelize;Model;Member[sync].ReturnValue.Awaited",
|
||||
"sequelize;Model;sequelize;Models;AnyMember",
|
||||
"sequelize;Model;sequelize;ModelsHashInterface;AnyMember",
|
||||
"sequelize;Model;sequelize;QueryInterface;Member[bulkDelete,rawSelect,upsert].Argument[3]",
|
||||
"sequelize;Model;sequelize;QueryInterface;Member[select].Argument[0]",
|
||||
"sequelize;Model;sequelize;QueryOptions;Member[model]",
|
||||
"sequelize;Model;sequelize;Sequelize;Member[define,import,model].ReturnValue",
|
||||
"sequelize;Model;sequelize;Sequelize;Member[import].Argument[1].ReturnValue",
|
||||
"sequelize;Model;sequelize;SequelizeStaticAndInstance;Member[Model]",
|
||||
"sequelize;Model;sequelize;ThroughOptions;Member[model]",
|
||||
"sequelize;Model;sequelize;Utils;Member[mapOptionFieldNames].Argument[1]",
|
||||
"sequelize;Model;sequelize;Utils;Member[mapValueFieldNames].Argument[2]",
|
||||
"sequelize;Models;sequelize;Model;Member[associate].Argument[0]",
|
||||
"sequelize;ModelsHashInterface;sequelize;Sequelize;Member[models]",
|
||||
"sequelize;Options;sequelize-typescript;SequelizeOptions;",
|
||||
"sequelize;Options;sequelize;Sequelize;Member[options]",
|
||||
"sequelize;Options;sequelize;SequelizeStatic;Argument[3]",
|
||||
"sequelize;Options;sequelize;SequelizeStatic;WithArity[1].Argument[0,1]",
|
||||
"sequelize;Options;sequelize;SequelizeStatic;WithArity[2].Argument[1,2]",
|
||||
"sequelize;Options;sequelize;SequelizeStatic;WithArity[3].Argument[2]",
|
||||
"sequelize;QueryInterface;sequelize;Sequelize;Member[getQueryInterface].ReturnValue",
|
||||
"sequelize;QueryOptions;sequelize;Options;Member[query]",
|
||||
"sequelize;QueryOptions;sequelize;QueryInterface;Member[bulkDelete,bulkInsert,createTable,select,setAutocommit,setIsolationLevel].Argument[2]",
|
||||
"sequelize;QueryOptions;sequelize;QueryInterface;Member[bulkUpdate,delete,insert].Argument[3]",
|
||||
"sequelize;QueryOptions;sequelize;QueryInterface;Member[commitTransaction,deferConstraints,dropTable,rawSelect,rollbackTransaction,showIndex,startTransaction].Argument[1]",
|
||||
"sequelize;QueryOptions;sequelize;QueryInterface;Member[createFunction].Argument[5]",
|
||||
"sequelize;QueryOptions;sequelize;QueryInterface;Member[dropAllEnums,dropAllTables,showAllSchemas,showAllTables].Argument[0]",
|
||||
"sequelize;QueryOptions;sequelize;QueryInterface;Member[increment,update,upsert].Argument[4]",
|
||||
"sequelize;QueryOptions;sequelize;Sequelize;Member[authenticate,validate].Argument[0]",
|
||||
"sequelize;QueryOptions;sequelize;Sequelize;Member[query].Argument[1]",
|
||||
"sequelize;Sequelize;sequelize;Hooks;Member[afterInit].Argument[1].Argument[0]",
|
||||
"sequelize;Sequelize;sequelize;Hooks;Member[afterInit].WithArity[1].Argument[0].Argument[0]",
|
||||
"sequelize;Sequelize;sequelize;Instance;Member[sequelize]",
|
||||
"sequelize;Sequelize;sequelize;QueryInterface;Member[sequelize]",
|
||||
"sequelize;Sequelize;sequelize;Sequelize;Member[import].Argument[1].Argument[0]",
|
||||
"sequelize;Sequelize;sequelize;SequelizeStatic;Instance",
|
||||
"sequelize;Sequelize;sequelize;SequelizeStatic;Member[useCLS].ReturnValue",
|
||||
"sequelize;SequelizeStatic;sequelize-typescript;Sequelize;",
|
||||
"sequelize;SequelizeStatic;sequelize;;",
|
||||
"sequelize;SequelizeStatic;sequelize;Sequelize;Member[Sequelize]",
|
||||
"sequelize;SequelizeStatic;sequelize;SequelizeStatic;Member[Sequelize,default]",
|
||||
"sequelize;SequelizeStaticAndInstance.Model;sequelize-typescript;Model;",
|
||||
"sequelize;SequelizeStaticAndInstance;sequelize;Sequelize;",
|
||||
"sequelize;SequelizeStaticAndInstance;sequelize;SequelizeStatic;",
|
||||
"sequelize;ThroughOptions;sequelize;AssociationOptionsBelongsToMany;Member[through]",
|
||||
"sequelize;Utils;sequelize;SequelizeStaticAndInstance;Member[Utils]"
|
||||
"sequelize-typescript.AssociationCountOptions;sequelize-typescript.Model;Member[$count].Argument[1]",
|
||||
"sequelize-typescript.AssociationCountOptions;sequelize-typescript/model/model/association/association-count-options.AssociationCountOptions;",
|
||||
"sequelize-typescript.AssociationGetOptions;sequelize-typescript.Model;Member[$get].Argument[1]",
|
||||
"sequelize-typescript.AssociationGetOptions;sequelize-typescript.Model;Member[$has].Argument[2]",
|
||||
"sequelize-typescript.AssociationGetOptions;sequelize-typescript/model/model/association/association-get-options.AssociationGetOptions;",
|
||||
"sequelize-typescript.BaseAssociation;sequelize-typescript.BaseAssociationStatic;Instance",
|
||||
"sequelize-typescript.BaseAssociation;sequelize-typescript.BelongsToAssociation;",
|
||||
"sequelize-typescript.BaseAssociation;sequelize-typescript.BelongsToManyAssociation;",
|
||||
"sequelize-typescript.BaseAssociation;sequelize-typescript.HasAssociation;",
|
||||
"sequelize-typescript.BaseAssociation;sequelize-typescript/associations/shared/association-service;Member[addAssociation].Argument[1]",
|
||||
"sequelize-typescript.BaseAssociation;sequelize-typescript/associations/shared/association-service;Member[getAssociations,getAssociationsByRelation].ReturnValue.ArrayElement",
|
||||
"sequelize-typescript.BaseAssociation;sequelize-typescript/associations/shared/association-service;Member[setAssociations].Argument[1].ArrayElement",
|
||||
"sequelize-typescript.BaseAssociation;sequelize-typescript/associations/shared/base-association.BaseAssociation;",
|
||||
"sequelize-typescript.BaseAssociation;sequelize-typescript;Member[addAssociation].Argument[1]",
|
||||
"sequelize-typescript.BaseAssociation;sequelize-typescript;Member[getAssociations,getAssociationsByRelation].ReturnValue.ArrayElement",
|
||||
"sequelize-typescript.BaseAssociation;sequelize-typescript;Member[setAssociations].Argument[1].ArrayElement",
|
||||
"sequelize-typescript.BaseAssociationStatic;sequelize-typescript/associations/shared/base-association.BaseAssociationStatic;",
|
||||
"sequelize-typescript.BaseAssociationStatic;sequelize-typescript/associations/shared/base-association;Member[BaseAssociation]",
|
||||
"sequelize-typescript.BaseAssociationStatic;sequelize-typescript;Member[BaseAssociation]",
|
||||
"sequelize-typescript.BelongsToAssociation;sequelize-typescript.BelongsToAssociationStatic;Instance",
|
||||
"sequelize-typescript.BelongsToAssociation;sequelize-typescript/associations/belongs-to/belongs-to-association.BelongsToAssociation;",
|
||||
"sequelize-typescript.BelongsToAssociationStatic;sequelize-typescript/associations/belongs-to/belongs-to-association.BelongsToAssociationStatic;",
|
||||
"sequelize-typescript.BelongsToAssociationStatic;sequelize-typescript/associations/belongs-to/belongs-to-association;Member[BelongsToAssociation]",
|
||||
"sequelize-typescript.BelongsToAssociationStatic;sequelize-typescript;Member[BelongsToAssociation]",
|
||||
"sequelize-typescript.BelongsToManyAssociation;sequelize-typescript.BelongsToManyAssociationStatic;Instance",
|
||||
"sequelize-typescript.BelongsToManyAssociation;sequelize-typescript/associations/belongs-to-many/belongs-to-many-association.BelongsToManyAssociation;",
|
||||
"sequelize-typescript.BelongsToManyAssociationStatic;sequelize-typescript/associations/belongs-to-many/belongs-to-many-association.BelongsToManyAssociationStatic;",
|
||||
"sequelize-typescript.BelongsToManyAssociationStatic;sequelize-typescript/associations/belongs-to-many/belongs-to-many-association;Member[BelongsToManyAssociation]",
|
||||
"sequelize-typescript.BelongsToManyAssociationStatic;sequelize-typescript;Member[BelongsToManyAssociation]",
|
||||
"sequelize-typescript.DefaultScopeGetter;sequelize-typescript.ScopeOptionsGetters;Member[getDefaultScope]",
|
||||
"sequelize-typescript.DefaultScopeGetter;sequelize-typescript/scopes/default-scope;Member[DefaultScope].Argument[0]",
|
||||
"sequelize-typescript.DefaultScopeGetter;sequelize-typescript/scopes/scope-options.DefaultScopeGetter;",
|
||||
"sequelize-typescript.DefaultScopeGetter;sequelize-typescript;Member[DefaultScope].Argument[0]",
|
||||
"sequelize-typescript.HasAssociation;sequelize-typescript.HasAssociationStatic;Instance",
|
||||
"sequelize-typescript.HasAssociation;sequelize-typescript/associations/has/has-association.HasAssociation;",
|
||||
"sequelize-typescript.HasAssociationStatic;sequelize-typescript/associations/has/has-association.HasAssociationStatic;",
|
||||
"sequelize-typescript.HasAssociationStatic;sequelize-typescript/associations/has/has-association;Member[HasAssociation]",
|
||||
"sequelize-typescript.HasAssociationStatic;sequelize-typescript;Member[HasAssociation]",
|
||||
"sequelize-typescript.Model;sequelize-typescript.Model;Member[$add,$has,$remove,$set].Argument[1]",
|
||||
"sequelize-typescript.Model;sequelize-typescript.Model;Member[$add,$has,$remove,$set].Argument[1].ArrayElement",
|
||||
"sequelize-typescript.Model;sequelize-typescript.Model;Member[$create,reload].ReturnValue.Awaited",
|
||||
"sequelize-typescript.Model;sequelize-typescript.ModelStatic~;Instance",
|
||||
"sequelize-typescript.Model;sequelize-typescript.ModelStatic~;Member[initialize].ReturnValue.TypeVar[sequelize-typescript.ModelStatic.0]",
|
||||
"sequelize-typescript.Model;sequelize-typescript.ModelType;Instance",
|
||||
"sequelize-typescript.Model;sequelize-typescript.Sequelize;Member[getRepository].Argument[0].Instance",
|
||||
"sequelize-typescript.Model;sequelize-typescript.Sequelize;Member[getRepository].ReturnValue.TypeVar[sequelize-typescript.Repository.0]",
|
||||
"sequelize-typescript.Model;sequelize-typescript/model/model/model.Model;",
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript.BaseAssociationStatic;Argument[0]",
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript.BelongsToAssociationStatic;Argument[0]",
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript.BelongsToManyAssociationStatic;Argument[0]",
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript.HasAssociationStatic;Argument[0]",
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript/associations/belongs-to-many/belongs-to-many;Member[BelongsToMany].Argument[0,1]",
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript/associations/belongs-to/belongs-to;Member[BelongsTo].Argument[0]",
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript/associations/foreign-key/foreign-key-meta.ForeignKeyMeta;Member[relatedClassGetter]",
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript/associations/foreign-key/foreign-key-service;Member[addForeignKey].Argument[1]",
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript/associations/foreign-key/foreign-key;Member[ForeignKey].Argument[0]",
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript/associations/has/has-many;Member[HasMany].Argument[0]",
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript/associations/has/has-one;Member[HasOne].Argument[0]",
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript/model/shared/model-class-getter.ModelClassGetter;",
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript;Member[BelongsTo,ForeignKey,HasMany,HasOne].Argument[0]",
|
||||
"sequelize-typescript.ModelClassGetter;sequelize-typescript;Member[BelongsToMany].Argument[0,1]",
|
||||
"sequelize-typescript.ModelStatic~;sequelize-typescript/model/model/model.ModelStatic~;",
|
||||
"sequelize-typescript.ModelStatic~;sequelize-typescript/model/model/model;Member[Model]",
|
||||
"sequelize-typescript.ModelStatic~;sequelize-typescript/model/shared/model-not-initialized-error.ModelNotInitializedErrorStatic;Argument[0]",
|
||||
"sequelize-typescript.ModelStatic~;sequelize-typescript;Member[Model]",
|
||||
"sequelize-typescript.ModelType;sequelize-typescript.BaseAssociation;Member[getAssociatedClass].ReturnValue",
|
||||
"sequelize-typescript.ModelType;sequelize-typescript.BaseAssociation;Member[getSequelizeOptions].Argument[0]",
|
||||
"sequelize-typescript.ModelType;sequelize-typescript.BelongsToAssociation;Member[getSequelizeOptions].Argument[0]",
|
||||
"sequelize-typescript.ModelType;sequelize-typescript.BelongsToManyAssociation;Member[getSequelizeOptions].Argument[0]",
|
||||
"sequelize-typescript.ModelType;sequelize-typescript.HasAssociation;Member[getSequelizeOptions].Argument[0]",
|
||||
"sequelize-typescript.ModelType;sequelize-typescript.ModelClassGetter;ReturnValue",
|
||||
"sequelize-typescript.ModelType;sequelize-typescript.Sequelize;Member[model].Argument[0]",
|
||||
"sequelize-typescript.ModelType;sequelize-typescript/associations/foreign-key/foreign-key-service;Member[getForeignKeyOptions].Argument[0,1]",
|
||||
"sequelize-typescript.ModelType;sequelize-typescript/model/model/model.ModelType;",
|
||||
"sequelize-typescript.ScopeOptionsGetters;sequelize-typescript/scopes/scope-options.ScopeOptionsGetters;",
|
||||
"sequelize-typescript.ScopeOptionsGetters;sequelize-typescript/scopes/scope-service;Member[addScopeOptionsGetter,setScopeOptionsGetters].Argument[1]",
|
||||
"sequelize-typescript.ScopeOptionsGetters;sequelize-typescript/scopes/scope-service;Member[getScopeOptionsGetters].ReturnValue",
|
||||
"sequelize-typescript.ScopeOptionsGetters;sequelize-typescript;Member[addScopeOptionsGetter,setScopeOptionsGetters].Argument[1]",
|
||||
"sequelize-typescript.ScopeOptionsGetters;sequelize-typescript;Member[getScopeOptionsGetters].ReturnValue",
|
||||
"sequelize-typescript.ScopesOptions;sequelize-typescript.ScopesOptionsGetter;ReturnValue.AnyMember",
|
||||
"sequelize-typescript.ScopesOptions;sequelize-typescript/scopes/scope-options.ScopesOptions;",
|
||||
"sequelize-typescript.ScopesOptions;sequelize-typescript/scopes/scope-service;Member[resolveScope].Argument[2]",
|
||||
"sequelize-typescript.ScopesOptions;sequelize-typescript;Member[resolveScope].Argument[2]",
|
||||
"sequelize-typescript.ScopesOptionsGetter;sequelize-typescript.ScopeOptionsGetters;Member[getScopes]",
|
||||
"sequelize-typescript.ScopesOptionsGetter;sequelize-typescript/scopes/scope-options.ScopesOptionsGetter;",
|
||||
"sequelize-typescript.ScopesOptionsGetter;sequelize-typescript/scopes/scopes;Member[Scopes].Argument[0]",
|
||||
"sequelize-typescript.ScopesOptionsGetter;sequelize-typescript;Member[Scopes].Argument[0]",
|
||||
"sequelize-typescript.Sequelize;sequelize-typescript.BaseAssociation;Member[getSequelizeOptions].Argument[1]",
|
||||
"sequelize-typescript.Sequelize;sequelize-typescript.BelongsToManyAssociation;Member[getSequelizeOptions].Argument[1]",
|
||||
"sequelize-typescript.Sequelize;sequelize-typescript.SequelizeStatic;Instance",
|
||||
"sequelize-typescript.Sequelize;sequelize-typescript/sequelize/sequelize/sequelize.Sequelize;",
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript.Sequelize;Member[options]",
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript.SequelizeStatic;Argument[3]",
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript.SequelizeStatic;WithArity[0].Argument[0]",
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript.SequelizeStatic;WithArity[1].Argument[0,1]",
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript.SequelizeStatic;WithArity[2].Argument[1,2]",
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript.SequelizeStatic;WithArity[3].Argument[2]",
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-options.SequelizeOptions;",
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-service;Member[prepareArgs].ReturnValue.Member[options]",
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-service;Member[prepareOptions].Argument[0]",
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-service;Member[prepareOptions].ReturnValue",
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript;Member[prepareArgs].ReturnValue.Member[options]",
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript;Member[prepareOptions].Argument[0]",
|
||||
"sequelize-typescript.SequelizeOptions;sequelize-typescript;Member[prepareOptions].ReturnValue",
|
||||
"sequelize-typescript.SequelizeStatic;sequelize-typescript/sequelize/sequelize/sequelize.SequelizeStatic;",
|
||||
"sequelize-typescript.SequelizeStatic;sequelize-typescript/sequelize/sequelize/sequelize;Member[Sequelize]",
|
||||
"sequelize-typescript.SequelizeStatic;sequelize-typescript;Member[Sequelize]",
|
||||
"sequelize-typescript/associations/foreign-key/foreign-key-meta.ForeignKeyMeta;sequelize-typescript/associations/foreign-key/foreign-key-service;Member[getForeignKeys].ReturnValue.ArrayElement",
|
||||
"sequelize-typescript/model/model/association/association-create-options.AssociationCreateOptions;sequelize-typescript.Model;Member[$create].Argument[2]",
|
||||
"sequelize-typescript/model/shared/model-not-initialized-error.ModelNotInitializedErrorStatic;sequelize-typescript/model/shared/model-not-initialized-error;Member[ModelNotInitializedError]",
|
||||
"sequelize.AnyFindOptions;sequelize.BelongsToManyAddAssociationMixin;Argument[1]",
|
||||
"sequelize.AnyFindOptions;sequelize.BelongsToManyAddAssociationsMixin;Argument[1]",
|
||||
"sequelize.AnyFindOptions;sequelize.BelongsToManySetAssociationsMixin;Argument[1]",
|
||||
"sequelize.AnyFindOptions;sequelize.DefineOptions;Member[defaultScope]",
|
||||
"sequelize.AnyFindOptions;sequelize.DefineScopeOptions;AnyMember",
|
||||
"sequelize.AnyFindOptions;sequelize.HasManySetAssociationsMixin;Argument[1]",
|
||||
"sequelize.AnyFindOptions;sequelize.Instance;Member[reload].Argument[0]",
|
||||
"sequelize.AnyFindOptions;sequelize.Model;Member[addScope].Argument[1]",
|
||||
"sequelize.AssociationOptionsBelongsToMany;sequelize.Associations;Member[belongsToMany].Argument[1]",
|
||||
"sequelize.Associations;sequelize.Model;",
|
||||
"sequelize.Associations;sequelize.SequelizeStaticAndInstance.Model;",
|
||||
"sequelize.BuildOptions;sequelize-typescript.ModelStatic~;Argument[1]",
|
||||
"sequelize.BuildOptions;sequelize.CreateOptions;",
|
||||
"sequelize.BuildOptions;sequelize.Model;Member[build,bulkBuild].Argument[1]",
|
||||
"sequelize.CountOptions;sequelize.Model;Member[count].Argument[0]",
|
||||
"sequelize.CreateOptions;sequelize-typescript/model/model/association/association-create-options.AssociationCreateOptions;",
|
||||
"sequelize.CreateOptions;sequelize.BelongsToCreateAssociationMixin;Argument[1]",
|
||||
"sequelize.CreateOptions;sequelize.BelongsToManyCreateAssociationMixin;Argument[1]",
|
||||
"sequelize.CreateOptions;sequelize.HasManyCreateAssociationMixin;Argument[1]",
|
||||
"sequelize.CreateOptions;sequelize.HasOneCreateAssociationMixin;Argument[1]",
|
||||
"sequelize.CreateOptions;sequelize.Model;Member[create].Argument[1]",
|
||||
"sequelize.DefineAttributeColumnOptions;sequelize.DefineAttributes;AnyMember",
|
||||
"sequelize.DefineAttributeColumnOptions;sequelize.QueryInterface;Member[addColumn,changeColumn].Argument[2]",
|
||||
"sequelize.DefineAttributeColumnReferencesOptions;sequelize.DefineAttributeColumnOptions;Member[references]",
|
||||
"sequelize.DefineAttributes;sequelize.Hooks;Member[beforeDefine].Argument[1].Argument[0]",
|
||||
"sequelize.DefineAttributes;sequelize.Hooks;Member[beforeDefine].WithArity[1].Argument[0].Argument[0]",
|
||||
"sequelize.DefineAttributes;sequelize.QueryInterface;Member[createTable].Argument[1]",
|
||||
"sequelize.DefineOptions;sequelize.Options;Member[define]",
|
||||
"sequelize.DefineOptions;sequelize.Sequelize;Member[define].Argument[2]",
|
||||
"sequelize.DefineScopeOptions;sequelize.DefineOptions;Member[scopes]",
|
||||
"sequelize.FindCreateFindOptions;sequelize.Model;Member[findCreateFind].Argument[0]",
|
||||
"sequelize.FindOptions;sequelize-typescript.AssociationCountOptions;",
|
||||
"sequelize.FindOptions;sequelize-typescript.AssociationGetOptions;",
|
||||
"sequelize.FindOptions;sequelize-typescript.DefaultScopeGetter;ReturnValue",
|
||||
"sequelize.FindOptions;sequelize-typescript.Model;Member[reload].Argument[0]",
|
||||
"sequelize.FindOptions;sequelize-typescript.ScopesOptions;",
|
||||
"sequelize.FindOptions;sequelize-typescript.ScopesOptions;ReturnValue",
|
||||
"sequelize.FindOptions;sequelize.AnyFindOptions;",
|
||||
"sequelize.FindOptions;sequelize.FindCreateFindOptions;",
|
||||
"sequelize.FindOptions;sequelize.FindOrInitializeOptions;",
|
||||
"sequelize.FindOptions;sequelize.Model;Member[all,find,findAll,findAndCount,findAndCountAll,findOne].Argument[0]",
|
||||
"sequelize.FindOptionsOrderArray;sequelize.FindOptions;Member[order]",
|
||||
"sequelize.FindOptionsOrderArray;sequelize.FindOptions;Member[order].ArrayElement",
|
||||
"sequelize.FindOrInitializeOptions;sequelize.Model;Member[findOrBuild,findOrCreate,findOrInitialize].Argument[0]",
|
||||
"sequelize.HasManyGetAssociationsMixinOptions;sequelize.HasManyGetAssociationsMixin;Argument[0]",
|
||||
"sequelize.HasManyGetAssociationsMixinOptions;sequelize.HasManyHasAssociationMixin;Argument[1]",
|
||||
"sequelize.HasManyGetAssociationsMixinOptions;sequelize.HasManyHasAssociationsMixin;Argument[1]",
|
||||
"sequelize.Hooks;sequelize.Hooks;Member[addHook,hook,removeHook].ReturnValue",
|
||||
"sequelize.Hooks;sequelize.Model;",
|
||||
"sequelize.Hooks;sequelize.Sequelize;",
|
||||
"sequelize.Hooks;sequelize.SequelizeStaticAndInstance.Model;",
|
||||
"sequelize.IncludeAssociation;sequelize.Associations;Member[belongsTo,belongsToMany,hasMany,hasOne].ReturnValue",
|
||||
"sequelize.IncludeAssociation;sequelize.IncludeOptions;Member[association]",
|
||||
"sequelize.IncludeOptions;sequelize.BuildOptions;Member[include].ArrayElement",
|
||||
"sequelize.IncludeOptions;sequelize.CountOptions;Member[include]",
|
||||
"sequelize.IncludeOptions;sequelize.CountOptions;Member[include].ArrayElement",
|
||||
"sequelize.IncludeOptions;sequelize.FindOptions;Member[include]",
|
||||
"sequelize.IncludeOptions;sequelize.FindOptions;Member[include].ArrayElement",
|
||||
"sequelize.IncludeOptions;sequelize.HasManyGetAssociationsMixinOptions;Member[include]",
|
||||
"sequelize.IncludeOptions;sequelize.IncludeOptions;Member[include]",
|
||||
"sequelize.IncludeOptions;sequelize.IncludeOptions;Member[include].ArrayElement",
|
||||
"sequelize.Instance;sequelize.Instance;Member[decrement,increment,reload,save,update,updateAttributes].ReturnValue.Awaited",
|
||||
"sequelize.Instance;sequelize.Instance;Member[equalsOneOf].Argument[0].ArrayElement",
|
||||
"sequelize.Instance;sequelize.Instance;Member[equals].Argument[0]",
|
||||
"sequelize.Instance;sequelize.Instance;Member[set,setAttributes].ReturnValue",
|
||||
"sequelize.Instance;sequelize.Model;Member[Instance,build].ReturnValue",
|
||||
"sequelize.Instance;sequelize.Model;Member[all,bulkCreate,findAll].ReturnValue.Awaited.ArrayElement",
|
||||
"sequelize.Instance;sequelize.Model;Member[bulkBuild].ReturnValue.ArrayElement",
|
||||
"sequelize.Instance;sequelize.Model;Member[create,find,findById,findByPk,findByPrimary,findOne].ReturnValue.Awaited",
|
||||
"sequelize.Instance;sequelize.Model;Member[findAndCount,findAndCountAll].ReturnValue.Awaited.Member[rows].ArrayElement",
|
||||
"sequelize.Instance;sequelize.QueryInterface;Member[delete,increment,insert,update].Argument[0]",
|
||||
"sequelize.Instance;sequelize.QueryOptions;Member[instance]",
|
||||
"sequelize.Instance;sequelize.SequelizeStaticAndInstance;Member[Instance]",
|
||||
"sequelize.Model;sequelize.AssociationOptionsBelongsToMany;Member[through]",
|
||||
"sequelize.Model;sequelize.Associations;Member[belongsTo,belongsToMany,hasMany,hasOne].Argument[0]",
|
||||
"sequelize.Model;sequelize.BuildOptions;Member[include].ArrayElement",
|
||||
"sequelize.Model;sequelize.CountOptions;Member[include]",
|
||||
"sequelize.Model;sequelize.CountOptions;Member[include].ArrayElement",
|
||||
"sequelize.Model;sequelize.DefineAttributeColumnReferencesOptions;Member[model]",
|
||||
"sequelize.Model;sequelize.FindOptions;Member[include]",
|
||||
"sequelize.Model;sequelize.FindOptions;Member[include].ArrayElement",
|
||||
"sequelize.Model;sequelize.FindOptions;Member[lock].Member[of]",
|
||||
"sequelize.Model;sequelize.FindOptionsOrderArray;ArrayElement",
|
||||
"sequelize.Model;sequelize.FindOptionsOrderArray;ArrayElement.Member[model]",
|
||||
"sequelize.Model;sequelize.Hooks;Member[afterDefine].Argument[1].Argument[0]",
|
||||
"sequelize.Model;sequelize.Hooks;Member[afterDefine].WithArity[1].Argument[0].Argument[0]",
|
||||
"sequelize.Model;sequelize.IncludeAssociation;Member[source,target]",
|
||||
"sequelize.Model;sequelize.IncludeOptions;Member[include,model]",
|
||||
"sequelize.Model;sequelize.IncludeOptions;Member[include].ArrayElement",
|
||||
"sequelize.Model;sequelize.Instance;Member[Model]",
|
||||
"sequelize.Model;sequelize.Model;Member[schema,scope,unscoped].ReturnValue",
|
||||
"sequelize.Model;sequelize.Model;Member[sync].ReturnValue.Awaited",
|
||||
"sequelize.Model;sequelize.Models;AnyMember",
|
||||
"sequelize.Model;sequelize.ModelsHashInterface;AnyMember",
|
||||
"sequelize.Model;sequelize.QueryInterface;Member[bulkDelete,rawSelect,upsert].Argument[3]",
|
||||
"sequelize.Model;sequelize.QueryInterface;Member[select].Argument[0]",
|
||||
"sequelize.Model;sequelize.QueryOptions;Member[model]",
|
||||
"sequelize.Model;sequelize.Sequelize;Member[define,import,model].ReturnValue",
|
||||
"sequelize.Model;sequelize.Sequelize;Member[import].Argument[1].ReturnValue",
|
||||
"sequelize.Model;sequelize.SequelizeStaticAndInstance;Member[Model]",
|
||||
"sequelize.Model;sequelize.ThroughOptions;Member[model]",
|
||||
"sequelize.Model;sequelize.Utils;Member[mapOptionFieldNames].Argument[1]",
|
||||
"sequelize.Model;sequelize.Utils;Member[mapValueFieldNames].Argument[2]",
|
||||
"sequelize.Models;sequelize.Model;Member[associate].Argument[0]",
|
||||
"sequelize.ModelsHashInterface;sequelize.Sequelize;Member[models]",
|
||||
"sequelize.Options;sequelize-typescript.SequelizeOptions;",
|
||||
"sequelize.Options;sequelize.Sequelize;Member[options]",
|
||||
"sequelize.Options;sequelize.SequelizeStatic;Argument[3]",
|
||||
"sequelize.Options;sequelize.SequelizeStatic;WithArity[1].Argument[0,1]",
|
||||
"sequelize.Options;sequelize.SequelizeStatic;WithArity[2].Argument[1,2]",
|
||||
"sequelize.Options;sequelize.SequelizeStatic;WithArity[3].Argument[2]",
|
||||
"sequelize.QueryInterface;sequelize.Sequelize;Member[getQueryInterface].ReturnValue",
|
||||
"sequelize.QueryOptions;sequelize.Options;Member[query]",
|
||||
"sequelize.QueryOptions;sequelize.QueryInterface;Member[bulkDelete,bulkInsert,createTable,select,setAutocommit,setIsolationLevel].Argument[2]",
|
||||
"sequelize.QueryOptions;sequelize.QueryInterface;Member[bulkUpdate,delete,insert].Argument[3]",
|
||||
"sequelize.QueryOptions;sequelize.QueryInterface;Member[commitTransaction,deferConstraints,dropTable,rawSelect,rollbackTransaction,showIndex,startTransaction].Argument[1]",
|
||||
"sequelize.QueryOptions;sequelize.QueryInterface;Member[createFunction].Argument[5]",
|
||||
"sequelize.QueryOptions;sequelize.QueryInterface;Member[dropAllEnums,dropAllTables,showAllSchemas,showAllTables].Argument[0]",
|
||||
"sequelize.QueryOptions;sequelize.QueryInterface;Member[increment,update,upsert].Argument[4]",
|
||||
"sequelize.QueryOptions;sequelize.Sequelize;Member[authenticate,validate].Argument[0]",
|
||||
"sequelize.QueryOptions;sequelize.Sequelize;Member[query].Argument[1]",
|
||||
"sequelize.Sequelize;sequelize.Hooks;Member[afterInit].Argument[1].Argument[0]",
|
||||
"sequelize.Sequelize;sequelize.Hooks;Member[afterInit].WithArity[1].Argument[0].Argument[0]",
|
||||
"sequelize.Sequelize;sequelize.Instance;Member[sequelize]",
|
||||
"sequelize.Sequelize;sequelize.QueryInterface;Member[sequelize]",
|
||||
"sequelize.Sequelize;sequelize.Sequelize;Member[import].Argument[1].Argument[0]",
|
||||
"sequelize.Sequelize;sequelize.SequelizeStatic;Instance",
|
||||
"sequelize.Sequelize;sequelize.SequelizeStatic;Member[useCLS].ReturnValue",
|
||||
"sequelize.SequelizeStatic;sequelize-typescript.Sequelize;",
|
||||
"sequelize.SequelizeStatic;sequelize.Sequelize;Member[Sequelize]",
|
||||
"sequelize.SequelizeStatic;sequelize.SequelizeStatic;Member[Sequelize,default]",
|
||||
"sequelize.SequelizeStatic;sequelize;",
|
||||
"sequelize.SequelizeStaticAndInstance.Model;sequelize-typescript.Model;",
|
||||
"sequelize.SequelizeStaticAndInstance;sequelize.Sequelize;",
|
||||
"sequelize.SequelizeStaticAndInstance;sequelize.SequelizeStatic;",
|
||||
"sequelize.ThroughOptions;sequelize.AssociationOptionsBelongsToMany;Member[through]",
|
||||
"sequelize.Utils;sequelize.SequelizeStaticAndInstance;Member[Utils]"
|
||||
],
|
||||
"summaries": [
|
||||
"sequelize-typescript;Model;;;Member[reload].ReturnValue.Awaited;type",
|
||||
"sequelize;Instance;;;Member[decrement,increment,reload,save,update,updateAttributes].ReturnValue.Awaited;type",
|
||||
"sequelize;Instance;;;Member[set,setAttributes].ReturnValue;type",
|
||||
"sequelize;Model;;;Member[schema,scope,unscoped].ReturnValue;type",
|
||||
"sequelize;Model;;;Member[sync].ReturnValue.Awaited;type"
|
||||
"sequelize-typescript.Model;;;Member[reload].ReturnValue.Awaited;type",
|
||||
"sequelize.Instance;;;Member[decrement,increment,reload,save,update,updateAttributes].ReturnValue.Awaited;type",
|
||||
"sequelize.Instance;;;Member[set,setAttributes].ReturnValue;type",
|
||||
"sequelize.Model;;;Member[schema,scope,unscoped].ReturnValue;type",
|
||||
"sequelize.Model;;;Member[sync].ReturnValue.Awaited;type"
|
||||
],
|
||||
"typeVariables": [
|
||||
"sequelize-typescript.ModelStatic.0;Instance",
|
||||
|
||||
@@ -6,180 +6,180 @@ private class Types extends ModelInput::TypeModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"@google-cloud/spanner/batch-transaction;BatchTransaction;@google-cloud/spanner/batch-transaction;BatchTransactionStatic;Instance", //
|
||||
"@google-cloud/spanner/batch-transaction;BatchTransaction;@google-cloud/spanner/database;CreateBatchTransactionCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]", //
|
||||
"@google-cloud/spanner/batch-transaction;BatchTransaction;@google-cloud/spanner;Database;Member[batchTransaction].ReturnValue", //
|
||||
"@google-cloud/spanner/batch-transaction;BatchTransactionStatic;@google-cloud/spanner/batch-transaction;;Member[BatchTransaction]", //
|
||||
"@google-cloud/spanner/batch-transaction;TransactionIdentifier;@google-cloud/spanner/batch-transaction;BatchTransaction;Member[identifier].ReturnValue", //
|
||||
"@google-cloud/spanner/batch-transaction;TransactionIdentifier;@google-cloud/spanner;Database;Member[batchTransaction].Argument[0]", //
|
||||
"@google-cloud/spanner/database;BatchCreateSessionsCallback;@google-cloud/spanner;Database;Member[batchCreateSessions].Argument[1]", //
|
||||
"@google-cloud/spanner/database;CreateBatchTransactionCallback;@google-cloud/spanner;Database;Member[createBatchTransaction].Argument[1]", //
|
||||
"@google-cloud/spanner/database;CreateBatchTransactionCallback;@google-cloud/spanner;Database;Member[createBatchTransaction].WithArity[1].Argument[0]", //
|
||||
"@google-cloud/spanner/database;CreateSessionCallback;@google-cloud/spanner;Database;Member[createSession].Argument[1]", //
|
||||
"@google-cloud/spanner/database;CreateSessionCallback;@google-cloud/spanner;Database;Member[createSession].WithArity[1].Argument[0]", //
|
||||
"@google-cloud/spanner/database;DatabaseCallback;@google-cloud/spanner;Database;Member[get].Argument[1]", //
|
||||
"@google-cloud/spanner/database;DatabaseCallback;@google-cloud/spanner;Database;Member[get].WithArity[1].Argument[0]", //
|
||||
"@google-cloud/spanner/database;GetSessionsCallback;@google-cloud/spanner;Database;Member[getSessions].Argument[1]", //
|
||||
"@google-cloud/spanner/database;GetSessionsCallback;@google-cloud/spanner;Database;Member[getSessions].WithArity[1].Argument[0]", //
|
||||
"@google-cloud/spanner/database;GetSnapshotCallback;@google-cloud/spanner;Database;Member[getSnapshot].Argument[1]", //
|
||||
"@google-cloud/spanner/database;GetSnapshotCallback;@google-cloud/spanner;Database;Member[getSnapshot].WithArity[1].Argument[0]", //
|
||||
"@google-cloud/spanner/database;GetTransactionCallback;@google-cloud/spanner;Database;Member[getTransaction].Argument[0]", //
|
||||
"@google-cloud/spanner/database;PoolRequestCallback;@google-cloud/spanner;Database;Member[makePooledRequest_].Argument[1]", //
|
||||
"@google-cloud/spanner/database;RestoreDatabaseCallback;@google-cloud/spanner;Database;Member[restore].Argument[1,2]", //
|
||||
"@google-cloud/spanner/database;SessionPoolConstructor;@google-cloud/spanner;DatabaseStatic;Argument[2]", //
|
||||
"@google-cloud/spanner/database;SessionPoolConstructor;@google-cloud/spanner;Instance;Member[database].Argument[1]", //
|
||||
"@google-cloud/spanner/instance;CreateDatabaseCallback;@google-cloud/spanner;Instance;Member[createDatabase].Argument[2]", //
|
||||
"@google-cloud/spanner/instance;CreateDatabaseCallback;@google-cloud/spanner;Instance;Member[createDatabase].WithArity[2].Argument[1]", //
|
||||
"@google-cloud/spanner/instance;CreateDatabaseOptions;@google-cloud/spanner;Instance;Member[createDatabase].WithArity[1,2,3].Argument[1]", //
|
||||
"@google-cloud/spanner/instance;CreateInstanceCallback;@google-cloud/spanner;Spanner;Member[createInstance].Argument[2]", //
|
||||
"@google-cloud/spanner/instance;GetDatabasesCallback;@google-cloud/spanner;Instance;Member[getDatabases].Argument[1]", //
|
||||
"@google-cloud/spanner/instance;GetDatabasesCallback;@google-cloud/spanner;Instance;Member[getDatabases].WithArity[1].Argument[0]", //
|
||||
"@google-cloud/spanner/instance;GetInstanceCallback;@google-cloud/spanner;Instance;Member[get].Argument[1]", //
|
||||
"@google-cloud/spanner/instance;GetInstanceCallback;@google-cloud/spanner;Instance;Member[get].WithArity[1].Argument[0]", //
|
||||
"@google-cloud/spanner/session-pool;GetReadSessionCallback;@google-cloud/spanner/session-pool;SessionPoolInterface;Member[getReadSession].Argument[0]", //
|
||||
"@google-cloud/spanner/session-pool;GetReadSessionCallback;@google-cloud/spanner;SessionPool;Member[getReadSession].Argument[0]", //
|
||||
"@google-cloud/spanner/session-pool;GetWriteSessionCallback;@google-cloud/spanner/session-pool;SessionPoolInterface;Member[getWriteSession].Argument[0]", //
|
||||
"@google-cloud/spanner/session-pool;GetWriteSessionCallback;@google-cloud/spanner;SessionPool;Member[getWriteSession].Argument[0]", //
|
||||
"@google-cloud/spanner/session-pool;SessionPoolInterface;@google-cloud/spanner/database;SessionPoolConstructor;Instance", //
|
||||
"@google-cloud/spanner/session-pool;SessionPoolInterface;@google-cloud/spanner;Database;Member[pool_]", //
|
||||
"@google-cloud/spanner/session-pool;SessionPoolInterface;@google-cloud/spanner;SessionPool;", //
|
||||
"@google-cloud/spanner/table;CreateTableCallback;@google-cloud/spanner;Database;Member[createTable].Argument[2]", //
|
||||
"@google-cloud/spanner/table;CreateTableCallback;@google-cloud/spanner;Database;Member[createTable].WithArity[2].Argument[1]", //
|
||||
"@google-cloud/spanner/table;CreateTableCallback;@google-cloud/spanner;Table;Member[create].Argument[2]", //
|
||||
"@google-cloud/spanner/table;CreateTableCallback;@google-cloud/spanner;Table;Member[create].WithArity[2].Argument[1]", //
|
||||
"@google-cloud/spanner/transaction-runner;AsyncRunTransactionCallback;@google-cloud/spanner/transaction-runner;AsyncTransactionRunnerStatic;Argument[2]", //
|
||||
"@google-cloud/spanner/transaction-runner;AsyncRunTransactionCallback;@google-cloud/spanner;Database;Member[runTransactionAsync].Argument[1]", //
|
||||
"@google-cloud/spanner/transaction-runner;AsyncRunTransactionCallback;@google-cloud/spanner;Database;Member[runTransactionAsync].WithArity[1].Argument[0]", //
|
||||
"@google-cloud/spanner/transaction-runner;AsyncTransactionRunner;@google-cloud/spanner/transaction-runner;AsyncTransactionRunnerStatic;Instance", //
|
||||
"@google-cloud/spanner/transaction-runner;AsyncTransactionRunnerStatic;@google-cloud/spanner/transaction-runner;;Member[AsyncTransactionRunner]", //
|
||||
"@google-cloud/spanner/transaction-runner;RunTransactionCallback;@google-cloud/spanner/transaction-runner;TransactionRunnerStatic;Argument[2]", //
|
||||
"@google-cloud/spanner/transaction-runner;RunTransactionCallback;@google-cloud/spanner;Database;Member[runTransaction].Argument[1]", //
|
||||
"@google-cloud/spanner/transaction-runner;RunTransactionCallback;@google-cloud/spanner;Database;Member[runTransaction].WithArity[1].Argument[0]", //
|
||||
"@google-cloud/spanner/transaction-runner;Runner;@google-cloud/spanner/transaction-runner;AsyncTransactionRunner;", //
|
||||
"@google-cloud/spanner/transaction-runner;Runner;@google-cloud/spanner/transaction-runner;RunnerStatic;Instance", //
|
||||
"@google-cloud/spanner/transaction-runner;Runner;@google-cloud/spanner/transaction-runner;TransactionRunner;", //
|
||||
"@google-cloud/spanner/transaction-runner;RunnerStatic;@google-cloud/spanner/transaction-runner;;Member[Runner]", //
|
||||
"@google-cloud/spanner/transaction-runner;TransactionRunner;@google-cloud/spanner/transaction-runner;TransactionRunnerStatic;Instance", //
|
||||
"@google-cloud/spanner/transaction-runner;TransactionRunnerStatic;@google-cloud/spanner/transaction-runner;;Member[TransactionRunner]", //
|
||||
"@google-cloud/spanner/transaction;Dml;@google-cloud/spanner/transaction;DmlStatic;Instance", //
|
||||
"@google-cloud/spanner/transaction;Dml;@google-cloud/spanner;PartitionedDml;", //
|
||||
"@google-cloud/spanner/transaction;Dml;@google-cloud/spanner;Transaction;", //
|
||||
"@google-cloud/spanner/transaction;DmlStatic;@google-cloud/spanner/transaction;;Member[Dml]", //
|
||||
"@google-cloud/spanner;BackupStatic;@google-cloud/spanner/backup;;Member[Backup]", //
|
||||
"@google-cloud/spanner;BackupStatic;@google-cloud/spanner/backup;BackupStatic;", //
|
||||
"@google-cloud/spanner;BackupStatic;@google-cloud/spanner;;Member[Backup]", //
|
||||
"@google-cloud/spanner;BatchTransaction;@google-cloud/spanner/batch-transaction;BatchTransaction;", //
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner/database;Database;", //
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner/database;DatabaseCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]", //
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner/database;RestoreDatabaseCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]", //
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner/database;SessionPoolConstructor;Argument[0]", //
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner/instance;CreateDatabaseCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]", //
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner/instance;GetDatabasesCallback;TypeVar[@google-cloud/spanner/common.RequestCallback.0]", //
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner;DatabaseStatic;Instance", //
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner;Instance;Member[database].ReturnValue", //
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner;SessionPool;Member[database]", //
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner;SessionPoolStatic;Argument[0]", //
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner;SessionStatic;Argument[0]", //
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner;Table;Member[database]", //
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner;TableStatic;Argument[0]", //
|
||||
"@google-cloud/spanner;DatabaseStatic;@google-cloud/spanner/database;;Member[Database]", //
|
||||
"@google-cloud/spanner;DatabaseStatic;@google-cloud/spanner/database;DatabaseStatic;", //
|
||||
"@google-cloud/spanner;DatabaseStatic;@google-cloud/spanner;;Member[Database]", //
|
||||
"@google-cloud/spanner;GetInstancesCallback;@google-cloud/spanner/build/src;GetInstancesCallback;", //
|
||||
"@google-cloud/spanner;GetInstancesCallback;@google-cloud/spanner;Spanner;Member[getInstances].Argument[1]", //
|
||||
"@google-cloud/spanner;GetInstancesCallback;@google-cloud/spanner;Spanner;Member[getInstances].WithArity[1].Argument[0]", //
|
||||
"@google-cloud/spanner;Instance;@google-cloud/spanner/instance;CreateInstanceCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]", //
|
||||
"@google-cloud/spanner;Instance;@google-cloud/spanner/instance;GetInstanceCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]", //
|
||||
"@google-cloud/spanner;Instance;@google-cloud/spanner/instance;Instance;", //
|
||||
"@google-cloud/spanner;Instance;@google-cloud/spanner;BackupStatic;Argument[0]", //
|
||||
"@google-cloud/spanner;Instance;@google-cloud/spanner;DatabaseStatic;Argument[0]", //
|
||||
"@google-cloud/spanner;Instance;@google-cloud/spanner;GetInstancesCallback;TypeVar[@google-cloud/spanner/common.PagedCallback.0]", //
|
||||
"@google-cloud/spanner;Instance;@google-cloud/spanner;InstanceStatic;Instance", //
|
||||
"@google-cloud/spanner;Instance;@google-cloud/spanner;Spanner;Member[instance].ReturnValue", //
|
||||
"@google-cloud/spanner;InstanceStatic;@google-cloud/spanner/instance;;Member[Instance]", //
|
||||
"@google-cloud/spanner;InstanceStatic;@google-cloud/spanner/instance;InstanceStatic;", //
|
||||
"@google-cloud/spanner;InstanceStatic;@google-cloud/spanner;;Member[Instance]", //
|
||||
"@google-cloud/spanner;PartitionedDml;@google-cloud/spanner/transaction;PartitionedDml;", //
|
||||
"@google-cloud/spanner;PartitionedDml;@google-cloud/spanner;PartitionedDmlStatic;Instance", //
|
||||
"@google-cloud/spanner;PartitionedDml;@google-cloud/spanner;Session;Member[partitionedDml].ReturnValue", //
|
||||
"@google-cloud/spanner;PartitionedDmlStatic;@google-cloud/spanner/transaction;;Member[PartitionedDml]", //
|
||||
"@google-cloud/spanner;PartitionedDmlStatic;@google-cloud/spanner/transaction;PartitionedDmlStatic;", //
|
||||
"@google-cloud/spanner;PartitionedDmlStatic;@google-cloud/spanner;;Member[PartitionedDml]", //
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner/batch-transaction;TransactionIdentifier;Member[session]", //
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner/database;BatchCreateSessionsCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0].ArrayElement", //
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner/database;CreateSessionCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]", //
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner/database;GetSessionsCallback;TypeVar[@google-cloud/spanner/common.RequestCallback.0]", //
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner/database;PoolRequestCallback;TypeVar[@google-cloud/spanner/common.RequestCallback.0]", //
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner/session-pool;GetReadSessionCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]", //
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner/session-pool;GetWriteSessionCallback;Argument[1]", //
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner/session-pool;SessionPoolInterface;Member[release].Argument[0]", //
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner/session;Session;", //
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner/transaction-runner;Runner;Member[session]", //
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner;Database;Member[_runPartitionedUpdate].Argument[0]", //
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner;Database;Member[makePooledRequest_].WithArity[1].ReturnValue.Awaited", //
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner;Database;Member[session].ReturnValue", //
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner;SessionPool;Member[_acquire,_getSession].ReturnValue.Awaited", //
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner;SessionPool;Member[_borrow,_destroy,_isValidSession,_ping,_prepareTransaction,_release,release].Argument[0]", //
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner;SessionPool;Member[_borrowFrom,_borrowNextAvailableSession].ReturnValue", //
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner;SessionPool;Member[_getIdleSessions].ReturnValue.ArrayElement", //
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner;SessionStatic;Instance", //
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner;Snapshot;Member[session]", //
|
||||
"@google-cloud/spanner;SessionPool;@google-cloud/spanner/instance;CreateDatabaseOptions;Member[poolCtor]", //
|
||||
"@google-cloud/spanner;SessionPool;@google-cloud/spanner/session-pool;SessionPool;", //
|
||||
"@google-cloud/spanner;SessionPool;@google-cloud/spanner;SessionPoolStatic;Instance", //
|
||||
"@google-cloud/spanner;SessionPoolStatic;@google-cloud/spanner/session-pool;;Member[SessionPool]", //
|
||||
"@google-cloud/spanner;SessionPoolStatic;@google-cloud/spanner/session-pool;SessionPoolStatic;", //
|
||||
"@google-cloud/spanner;SessionPoolStatic;@google-cloud/spanner;;Member[SessionPool]", //
|
||||
"@google-cloud/spanner;SessionStatic;@google-cloud/spanner/session;;Member[Session]", //
|
||||
"@google-cloud/spanner;SessionStatic;@google-cloud/spanner/session;SessionStatic;", //
|
||||
"@google-cloud/spanner;SessionStatic;@google-cloud/spanner;;Member[Session]", //
|
||||
"@google-cloud/spanner;Snapshot;@google-cloud/spanner/batch-transaction;BatchTransaction;", //
|
||||
"@google-cloud/spanner;Snapshot;@google-cloud/spanner/database;GetSnapshotCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]", //
|
||||
"@google-cloud/spanner;Snapshot;@google-cloud/spanner/transaction;Dml;", //
|
||||
"@google-cloud/spanner;Snapshot;@google-cloud/spanner/transaction;Snapshot;", //
|
||||
"@google-cloud/spanner;Snapshot;@google-cloud/spanner;Session;Member[snapshot].ReturnValue", //
|
||||
"@google-cloud/spanner;Snapshot;@google-cloud/spanner;SnapshotStatic;Instance", //
|
||||
"@google-cloud/spanner;SnapshotStatic;@google-cloud/spanner/transaction;;Member[Snapshot]", //
|
||||
"@google-cloud/spanner;SnapshotStatic;@google-cloud/spanner/transaction;SnapshotStatic;", //
|
||||
"@google-cloud/spanner;SnapshotStatic;@google-cloud/spanner;;Member[Snapshot]", //
|
||||
"@google-cloud/spanner;Spanner;@google-cloud/spanner;InstanceStatic;Argument[0]", //
|
||||
"@google-cloud/spanner;Spanner;@google-cloud/spanner;SpannerStatic;Instance", //
|
||||
"@google-cloud/spanner;SpannerStatic;@google-cloud/spanner;;Member[Spanner]", //
|
||||
"@google-cloud/spanner;Table;@google-cloud/spanner/table;CreateTableCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]", //
|
||||
"@google-cloud/spanner;Table;@google-cloud/spanner/table;Table;", //
|
||||
"@google-cloud/spanner;Table;@google-cloud/spanner;Database;Member[table].ReturnValue", //
|
||||
"@google-cloud/spanner;Table;@google-cloud/spanner;TableStatic;Instance", //
|
||||
"@google-cloud/spanner;TableStatic;@google-cloud/spanner/table;;Member[Table]", //
|
||||
"@google-cloud/spanner;TableStatic;@google-cloud/spanner/table;TableStatic;", //
|
||||
"@google-cloud/spanner;TableStatic;@google-cloud/spanner;;Member[Table]", //
|
||||
"@google-cloud/spanner;Transaction;@google-cloud/spanner/database;GetTransactionCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]", //
|
||||
"@google-cloud/spanner;Transaction;@google-cloud/spanner/session-pool;GetWriteSessionCallback;Argument[2]", //
|
||||
"@google-cloud/spanner;Transaction;@google-cloud/spanner/transaction-runner;AsyncRunTransactionCallback;Argument[0]", //
|
||||
"@google-cloud/spanner;Transaction;@google-cloud/spanner/transaction-runner;RunTransactionCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]", //
|
||||
"@google-cloud/spanner;Transaction;@google-cloud/spanner/transaction-runner;Runner;Member[getTransaction].ReturnValue.Awaited", //
|
||||
"@google-cloud/spanner;Transaction;@google-cloud/spanner/transaction-runner;Runner;Member[transaction]", //
|
||||
"@google-cloud/spanner;Transaction;@google-cloud/spanner/transaction;Transaction;", //
|
||||
"@google-cloud/spanner;Transaction;@google-cloud/spanner;Session;Member[transaction].ReturnValue", //
|
||||
"@google-cloud/spanner;Transaction;@google-cloud/spanner;Session;Member[txn]", //
|
||||
"@google-cloud/spanner;Transaction;@google-cloud/spanner;TransactionStatic;Instance", //
|
||||
"@google-cloud/spanner;TransactionStatic;@google-cloud/spanner/transaction;;Member[Transaction]", //
|
||||
"@google-cloud/spanner;TransactionStatic;@google-cloud/spanner/transaction;TransactionStatic;", //
|
||||
"@google-cloud/spanner;TransactionStatic;@google-cloud/spanner;;Member[Transaction]", //
|
||||
"@google-cloud/spanner;v1.SpannerClient;@google-cloud/spanner/v1/spanner_client;SpannerClient;", //
|
||||
"@google-cloud/spanner;v1.SpannerClient;@google-cloud/spanner;v1.SpannerClientStatic;Instance", //
|
||||
"@google-cloud/spanner;v1.SpannerClientStatic;@google-cloud/spanner/v1/spanner_client;;Member[SpannerClient]", //
|
||||
"@google-cloud/spanner;v1.SpannerClientStatic;@google-cloud/spanner/v1/spanner_client;SpannerClientStatic;", //
|
||||
"@google-cloud/spanner;v1.SpannerClientStatic;@google-cloud/spanner;;Member[v1].Member[SpannerClient]", //
|
||||
"@google-cloud/spanner;~SpannerObject;@google-cloud/spanner;Database;", //
|
||||
"@google-cloud/spanner;~SpannerObject;@google-cloud/spanner;Snapshot;", //
|
||||
"@google-cloud/spanner;~SpannerObject;@google-cloud/spanner;Transaction;", //
|
||||
"@google-cloud/spanner;~SpannerObject;@google-cloud/spanner;v1.SpannerClient;", //
|
||||
"@google-cloud/spanner;~SqlExecutorDirect;@google-cloud/spanner;BatchTransaction;Member[createQueryPartitions]", //
|
||||
"@google-cloud/spanner;~SqlExecutorDirect;@google-cloud/spanner;Database;Member[run,runPartitionedUpdate,runStream]", //
|
||||
"@google-cloud/spanner;~SqlExecutorDirect;@google-cloud/spanner;PartitionedDml;Member[runUpdate]", //
|
||||
"@google-cloud/spanner;~SqlExecutorDirect;@google-cloud/spanner;Snapshot;Member[run,runStream]", //
|
||||
"@google-cloud/spanner;~SqlExecutorDirect;@google-cloud/spanner;Transaction;Member[run,runStream,runUpdate]", //
|
||||
"@google-cloud/spanner;~SqlExecutorDirect;@google-cloud/spanner;v1.SpannerClient;Member[executeSql,executeStreamingSql,partitionQuery]", //
|
||||
"@google-cloud/spanner.BackupStatic;@google-cloud/spanner/backup.BackupStatic;", //
|
||||
"@google-cloud/spanner.BackupStatic;@google-cloud/spanner/backup;Member[Backup]", //
|
||||
"@google-cloud/spanner.BackupStatic;@google-cloud/spanner;Member[Backup]", //
|
||||
"@google-cloud/spanner.BatchTransaction;@google-cloud/spanner/batch-transaction.BatchTransaction;", //
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner.DatabaseStatic;Instance", //
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner.Instance;Member[database].ReturnValue", //
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner.SessionPool;Member[database]", //
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner.SessionPoolStatic;Argument[0]", //
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner.SessionStatic;Argument[0]", //
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner.Table;Member[database]", //
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner.TableStatic;Argument[0]", //
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner/database.Database;", //
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner/database.DatabaseCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]", //
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner/database.RestoreDatabaseCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]", //
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner/database.SessionPoolConstructor;Argument[0]", //
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner/instance.CreateDatabaseCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]", //
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner/instance.GetDatabasesCallback;TypeVar[@google-cloud/spanner/common.RequestCallback.0]", //
|
||||
"@google-cloud/spanner.DatabaseStatic;@google-cloud/spanner/database.DatabaseStatic;", //
|
||||
"@google-cloud/spanner.DatabaseStatic;@google-cloud/spanner/database;Member[Database]", //
|
||||
"@google-cloud/spanner.DatabaseStatic;@google-cloud/spanner;Member[Database]", //
|
||||
"@google-cloud/spanner.GetInstancesCallback;@google-cloud/spanner.Spanner;Member[getInstances].Argument[1]", //
|
||||
"@google-cloud/spanner.GetInstancesCallback;@google-cloud/spanner.Spanner;Member[getInstances].WithArity[1].Argument[0]", //
|
||||
"@google-cloud/spanner.GetInstancesCallback;@google-cloud/spanner/build/src.GetInstancesCallback;", //
|
||||
"@google-cloud/spanner.Instance;@google-cloud/spanner.BackupStatic;Argument[0]", //
|
||||
"@google-cloud/spanner.Instance;@google-cloud/spanner.DatabaseStatic;Argument[0]", //
|
||||
"@google-cloud/spanner.Instance;@google-cloud/spanner.GetInstancesCallback;TypeVar[@google-cloud/spanner/common.PagedCallback.0]", //
|
||||
"@google-cloud/spanner.Instance;@google-cloud/spanner.InstanceStatic;Instance", //
|
||||
"@google-cloud/spanner.Instance;@google-cloud/spanner.Spanner;Member[instance].ReturnValue", //
|
||||
"@google-cloud/spanner.Instance;@google-cloud/spanner/instance.CreateInstanceCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]", //
|
||||
"@google-cloud/spanner.Instance;@google-cloud/spanner/instance.GetInstanceCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]", //
|
||||
"@google-cloud/spanner.Instance;@google-cloud/spanner/instance.Instance;", //
|
||||
"@google-cloud/spanner.InstanceStatic;@google-cloud/spanner/instance.InstanceStatic;", //
|
||||
"@google-cloud/spanner.InstanceStatic;@google-cloud/spanner/instance;Member[Instance]", //
|
||||
"@google-cloud/spanner.InstanceStatic;@google-cloud/spanner;Member[Instance]", //
|
||||
"@google-cloud/spanner.PartitionedDml;@google-cloud/spanner.PartitionedDmlStatic;Instance", //
|
||||
"@google-cloud/spanner.PartitionedDml;@google-cloud/spanner.Session;Member[partitionedDml].ReturnValue", //
|
||||
"@google-cloud/spanner.PartitionedDml;@google-cloud/spanner/transaction.PartitionedDml;", //
|
||||
"@google-cloud/spanner.PartitionedDmlStatic;@google-cloud/spanner/transaction.PartitionedDmlStatic;", //
|
||||
"@google-cloud/spanner.PartitionedDmlStatic;@google-cloud/spanner/transaction;Member[PartitionedDml]", //
|
||||
"@google-cloud/spanner.PartitionedDmlStatic;@google-cloud/spanner;Member[PartitionedDml]", //
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner.Database;Member[_runPartitionedUpdate].Argument[0]", //
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner.Database;Member[makePooledRequest_].WithArity[1].ReturnValue.Awaited", //
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner.Database;Member[session].ReturnValue", //
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner.SessionPool;Member[_acquire,_getSession].ReturnValue.Awaited", //
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner.SessionPool;Member[_borrow,_destroy,_isValidSession,_ping,_prepareTransaction,_release,release].Argument[0]", //
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner.SessionPool;Member[_borrowFrom,_borrowNextAvailableSession].ReturnValue", //
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner.SessionPool;Member[_getIdleSessions].ReturnValue.ArrayElement", //
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner.SessionStatic;Instance", //
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner.Snapshot;Member[session]", //
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner/batch-transaction.TransactionIdentifier;Member[session]", //
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner/database.BatchCreateSessionsCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0].ArrayElement", //
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner/database.CreateSessionCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]", //
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner/database.GetSessionsCallback;TypeVar[@google-cloud/spanner/common.RequestCallback.0]", //
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner/database.PoolRequestCallback;TypeVar[@google-cloud/spanner/common.RequestCallback.0]", //
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner/session-pool.GetReadSessionCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]", //
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner/session-pool.GetWriteSessionCallback;Argument[1]", //
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner/session-pool.SessionPoolInterface;Member[release].Argument[0]", //
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner/session.Session;", //
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner/transaction-runner.Runner;Member[session]", //
|
||||
"@google-cloud/spanner.SessionPool;@google-cloud/spanner.SessionPoolStatic;Instance", //
|
||||
"@google-cloud/spanner.SessionPool;@google-cloud/spanner/instance.CreateDatabaseOptions;Member[poolCtor]", //
|
||||
"@google-cloud/spanner.SessionPool;@google-cloud/spanner/session-pool.SessionPool;", //
|
||||
"@google-cloud/spanner.SessionPoolStatic;@google-cloud/spanner/session-pool.SessionPoolStatic;", //
|
||||
"@google-cloud/spanner.SessionPoolStatic;@google-cloud/spanner/session-pool;Member[SessionPool]", //
|
||||
"@google-cloud/spanner.SessionPoolStatic;@google-cloud/spanner;Member[SessionPool]", //
|
||||
"@google-cloud/spanner.SessionStatic;@google-cloud/spanner/session.SessionStatic;", //
|
||||
"@google-cloud/spanner.SessionStatic;@google-cloud/spanner/session;Member[Session]", //
|
||||
"@google-cloud/spanner.SessionStatic;@google-cloud/spanner;Member[Session]", //
|
||||
"@google-cloud/spanner.Snapshot;@google-cloud/spanner.Session;Member[snapshot].ReturnValue", //
|
||||
"@google-cloud/spanner.Snapshot;@google-cloud/spanner.SnapshotStatic;Instance", //
|
||||
"@google-cloud/spanner.Snapshot;@google-cloud/spanner/batch-transaction.BatchTransaction;", //
|
||||
"@google-cloud/spanner.Snapshot;@google-cloud/spanner/database.GetSnapshotCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]", //
|
||||
"@google-cloud/spanner.Snapshot;@google-cloud/spanner/transaction.Dml;", //
|
||||
"@google-cloud/spanner.Snapshot;@google-cloud/spanner/transaction.Snapshot;", //
|
||||
"@google-cloud/spanner.SnapshotStatic;@google-cloud/spanner/transaction.SnapshotStatic;", //
|
||||
"@google-cloud/spanner.SnapshotStatic;@google-cloud/spanner/transaction;Member[Snapshot]", //
|
||||
"@google-cloud/spanner.SnapshotStatic;@google-cloud/spanner;Member[Snapshot]", //
|
||||
"@google-cloud/spanner.Spanner;@google-cloud/spanner.InstanceStatic;Argument[0]", //
|
||||
"@google-cloud/spanner.Spanner;@google-cloud/spanner.SpannerStatic;Instance", //
|
||||
"@google-cloud/spanner.SpannerStatic;@google-cloud/spanner;Member[Spanner]", //
|
||||
"@google-cloud/spanner.Table;@google-cloud/spanner.Database;Member[table].ReturnValue", //
|
||||
"@google-cloud/spanner.Table;@google-cloud/spanner.TableStatic;Instance", //
|
||||
"@google-cloud/spanner.Table;@google-cloud/spanner/table.CreateTableCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]", //
|
||||
"@google-cloud/spanner.Table;@google-cloud/spanner/table.Table;", //
|
||||
"@google-cloud/spanner.TableStatic;@google-cloud/spanner/table.TableStatic;", //
|
||||
"@google-cloud/spanner.TableStatic;@google-cloud/spanner/table;Member[Table]", //
|
||||
"@google-cloud/spanner.TableStatic;@google-cloud/spanner;Member[Table]", //
|
||||
"@google-cloud/spanner.Transaction;@google-cloud/spanner.Session;Member[transaction].ReturnValue", //
|
||||
"@google-cloud/spanner.Transaction;@google-cloud/spanner.Session;Member[txn]", //
|
||||
"@google-cloud/spanner.Transaction;@google-cloud/spanner.TransactionStatic;Instance", //
|
||||
"@google-cloud/spanner.Transaction;@google-cloud/spanner/database.GetTransactionCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]", //
|
||||
"@google-cloud/spanner.Transaction;@google-cloud/spanner/session-pool.GetWriteSessionCallback;Argument[2]", //
|
||||
"@google-cloud/spanner.Transaction;@google-cloud/spanner/transaction-runner.AsyncRunTransactionCallback;Argument[0]", //
|
||||
"@google-cloud/spanner.Transaction;@google-cloud/spanner/transaction-runner.RunTransactionCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]", //
|
||||
"@google-cloud/spanner.Transaction;@google-cloud/spanner/transaction-runner.Runner;Member[getTransaction].ReturnValue.Awaited", //
|
||||
"@google-cloud/spanner.Transaction;@google-cloud/spanner/transaction-runner.Runner;Member[transaction]", //
|
||||
"@google-cloud/spanner.Transaction;@google-cloud/spanner/transaction.Transaction;", //
|
||||
"@google-cloud/spanner.TransactionStatic;@google-cloud/spanner/transaction.TransactionStatic;", //
|
||||
"@google-cloud/spanner.TransactionStatic;@google-cloud/spanner/transaction;Member[Transaction]", //
|
||||
"@google-cloud/spanner.TransactionStatic;@google-cloud/spanner;Member[Transaction]", //
|
||||
"@google-cloud/spanner.v1.SpannerClient;@google-cloud/spanner.v1.SpannerClientStatic;Instance", //
|
||||
"@google-cloud/spanner.v1.SpannerClient;@google-cloud/spanner/v1/spanner_client.SpannerClient;", //
|
||||
"@google-cloud/spanner.v1.SpannerClientStatic;@google-cloud/spanner/v1/spanner_client.SpannerClientStatic;", //
|
||||
"@google-cloud/spanner.v1.SpannerClientStatic;@google-cloud/spanner/v1/spanner_client;Member[SpannerClient]", //
|
||||
"@google-cloud/spanner.v1.SpannerClientStatic;@google-cloud/spanner;Member[v1].Member[SpannerClient]", //
|
||||
"@google-cloud/spanner.~SpannerObject;@google-cloud/spanner.Database;", //
|
||||
"@google-cloud/spanner.~SpannerObject;@google-cloud/spanner.Snapshot;", //
|
||||
"@google-cloud/spanner.~SpannerObject;@google-cloud/spanner.Transaction;", //
|
||||
"@google-cloud/spanner.~SpannerObject;@google-cloud/spanner.v1.SpannerClient;", //
|
||||
"@google-cloud/spanner.~SqlExecutorDirect;@google-cloud/spanner.BatchTransaction;Member[createQueryPartitions]", //
|
||||
"@google-cloud/spanner.~SqlExecutorDirect;@google-cloud/spanner.Database;Member[run,runPartitionedUpdate,runStream]", //
|
||||
"@google-cloud/spanner.~SqlExecutorDirect;@google-cloud/spanner.PartitionedDml;Member[runUpdate]", //
|
||||
"@google-cloud/spanner.~SqlExecutorDirect;@google-cloud/spanner.Snapshot;Member[run,runStream]", //
|
||||
"@google-cloud/spanner.~SqlExecutorDirect;@google-cloud/spanner.Transaction;Member[run,runStream,runUpdate]", //
|
||||
"@google-cloud/spanner.~SqlExecutorDirect;@google-cloud/spanner.v1.SpannerClient;Member[executeSql,executeStreamingSql,partitionQuery]", //
|
||||
"@google-cloud/spanner/batch-transaction.BatchTransaction;@google-cloud/spanner.Database;Member[batchTransaction].ReturnValue", //
|
||||
"@google-cloud/spanner/batch-transaction.BatchTransaction;@google-cloud/spanner/batch-transaction.BatchTransactionStatic;Instance", //
|
||||
"@google-cloud/spanner/batch-transaction.BatchTransaction;@google-cloud/spanner/database.CreateBatchTransactionCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]", //
|
||||
"@google-cloud/spanner/batch-transaction.BatchTransactionStatic;@google-cloud/spanner/batch-transaction;Member[BatchTransaction]", //
|
||||
"@google-cloud/spanner/batch-transaction.TransactionIdentifier;@google-cloud/spanner.Database;Member[batchTransaction].Argument[0]", //
|
||||
"@google-cloud/spanner/batch-transaction.TransactionIdentifier;@google-cloud/spanner/batch-transaction.BatchTransaction;Member[identifier].ReturnValue", //
|
||||
"@google-cloud/spanner/database.BatchCreateSessionsCallback;@google-cloud/spanner.Database;Member[batchCreateSessions].Argument[1]", //
|
||||
"@google-cloud/spanner/database.CreateBatchTransactionCallback;@google-cloud/spanner.Database;Member[createBatchTransaction].Argument[1]", //
|
||||
"@google-cloud/spanner/database.CreateBatchTransactionCallback;@google-cloud/spanner.Database;Member[createBatchTransaction].WithArity[1].Argument[0]", //
|
||||
"@google-cloud/spanner/database.CreateSessionCallback;@google-cloud/spanner.Database;Member[createSession].Argument[1]", //
|
||||
"@google-cloud/spanner/database.CreateSessionCallback;@google-cloud/spanner.Database;Member[createSession].WithArity[1].Argument[0]", //
|
||||
"@google-cloud/spanner/database.DatabaseCallback;@google-cloud/spanner.Database;Member[get].Argument[1]", //
|
||||
"@google-cloud/spanner/database.DatabaseCallback;@google-cloud/spanner.Database;Member[get].WithArity[1].Argument[0]", //
|
||||
"@google-cloud/spanner/database.GetSessionsCallback;@google-cloud/spanner.Database;Member[getSessions].Argument[1]", //
|
||||
"@google-cloud/spanner/database.GetSessionsCallback;@google-cloud/spanner.Database;Member[getSessions].WithArity[1].Argument[0]", //
|
||||
"@google-cloud/spanner/database.GetSnapshotCallback;@google-cloud/spanner.Database;Member[getSnapshot].Argument[1]", //
|
||||
"@google-cloud/spanner/database.GetSnapshotCallback;@google-cloud/spanner.Database;Member[getSnapshot].WithArity[1].Argument[0]", //
|
||||
"@google-cloud/spanner/database.GetTransactionCallback;@google-cloud/spanner.Database;Member[getTransaction].Argument[0]", //
|
||||
"@google-cloud/spanner/database.PoolRequestCallback;@google-cloud/spanner.Database;Member[makePooledRequest_].Argument[1]", //
|
||||
"@google-cloud/spanner/database.RestoreDatabaseCallback;@google-cloud/spanner.Database;Member[restore].Argument[1,2]", //
|
||||
"@google-cloud/spanner/database.SessionPoolConstructor;@google-cloud/spanner.DatabaseStatic;Argument[2]", //
|
||||
"@google-cloud/spanner/database.SessionPoolConstructor;@google-cloud/spanner.Instance;Member[database].Argument[1]", //
|
||||
"@google-cloud/spanner/instance.CreateDatabaseCallback;@google-cloud/spanner.Instance;Member[createDatabase].Argument[2]", //
|
||||
"@google-cloud/spanner/instance.CreateDatabaseCallback;@google-cloud/spanner.Instance;Member[createDatabase].WithArity[2].Argument[1]", //
|
||||
"@google-cloud/spanner/instance.CreateDatabaseOptions;@google-cloud/spanner.Instance;Member[createDatabase].WithArity[1,2,3].Argument[1]", //
|
||||
"@google-cloud/spanner/instance.CreateInstanceCallback;@google-cloud/spanner.Spanner;Member[createInstance].Argument[2]", //
|
||||
"@google-cloud/spanner/instance.GetDatabasesCallback;@google-cloud/spanner.Instance;Member[getDatabases].Argument[1]", //
|
||||
"@google-cloud/spanner/instance.GetDatabasesCallback;@google-cloud/spanner.Instance;Member[getDatabases].WithArity[1].Argument[0]", //
|
||||
"@google-cloud/spanner/instance.GetInstanceCallback;@google-cloud/spanner.Instance;Member[get].Argument[1]", //
|
||||
"@google-cloud/spanner/instance.GetInstanceCallback;@google-cloud/spanner.Instance;Member[get].WithArity[1].Argument[0]", //
|
||||
"@google-cloud/spanner/session-pool.GetReadSessionCallback;@google-cloud/spanner.SessionPool;Member[getReadSession].Argument[0]", //
|
||||
"@google-cloud/spanner/session-pool.GetReadSessionCallback;@google-cloud/spanner/session-pool.SessionPoolInterface;Member[getReadSession].Argument[0]", //
|
||||
"@google-cloud/spanner/session-pool.GetWriteSessionCallback;@google-cloud/spanner.SessionPool;Member[getWriteSession].Argument[0]", //
|
||||
"@google-cloud/spanner/session-pool.GetWriteSessionCallback;@google-cloud/spanner/session-pool.SessionPoolInterface;Member[getWriteSession].Argument[0]", //
|
||||
"@google-cloud/spanner/session-pool.SessionPoolInterface;@google-cloud/spanner.Database;Member[pool_]", //
|
||||
"@google-cloud/spanner/session-pool.SessionPoolInterface;@google-cloud/spanner.SessionPool;", //
|
||||
"@google-cloud/spanner/session-pool.SessionPoolInterface;@google-cloud/spanner/database.SessionPoolConstructor;Instance", //
|
||||
"@google-cloud/spanner/table.CreateTableCallback;@google-cloud/spanner.Database;Member[createTable].Argument[2]", //
|
||||
"@google-cloud/spanner/table.CreateTableCallback;@google-cloud/spanner.Database;Member[createTable].WithArity[2].Argument[1]", //
|
||||
"@google-cloud/spanner/table.CreateTableCallback;@google-cloud/spanner.Table;Member[create].Argument[2]", //
|
||||
"@google-cloud/spanner/table.CreateTableCallback;@google-cloud/spanner.Table;Member[create].WithArity[2].Argument[1]", //
|
||||
"@google-cloud/spanner/transaction-runner.AsyncRunTransactionCallback;@google-cloud/spanner.Database;Member[runTransactionAsync].Argument[1]", //
|
||||
"@google-cloud/spanner/transaction-runner.AsyncRunTransactionCallback;@google-cloud/spanner.Database;Member[runTransactionAsync].WithArity[1].Argument[0]", //
|
||||
"@google-cloud/spanner/transaction-runner.AsyncRunTransactionCallback;@google-cloud/spanner/transaction-runner.AsyncTransactionRunnerStatic;Argument[2]", //
|
||||
"@google-cloud/spanner/transaction-runner.AsyncTransactionRunner;@google-cloud/spanner/transaction-runner.AsyncTransactionRunnerStatic;Instance", //
|
||||
"@google-cloud/spanner/transaction-runner.AsyncTransactionRunnerStatic;@google-cloud/spanner/transaction-runner;Member[AsyncTransactionRunner]", //
|
||||
"@google-cloud/spanner/transaction-runner.RunTransactionCallback;@google-cloud/spanner.Database;Member[runTransaction].Argument[1]", //
|
||||
"@google-cloud/spanner/transaction-runner.RunTransactionCallback;@google-cloud/spanner.Database;Member[runTransaction].WithArity[1].Argument[0]", //
|
||||
"@google-cloud/spanner/transaction-runner.RunTransactionCallback;@google-cloud/spanner/transaction-runner.TransactionRunnerStatic;Argument[2]", //
|
||||
"@google-cloud/spanner/transaction-runner.Runner;@google-cloud/spanner/transaction-runner.AsyncTransactionRunner;", //
|
||||
"@google-cloud/spanner/transaction-runner.Runner;@google-cloud/spanner/transaction-runner.RunnerStatic;Instance", //
|
||||
"@google-cloud/spanner/transaction-runner.Runner;@google-cloud/spanner/transaction-runner.TransactionRunner;", //
|
||||
"@google-cloud/spanner/transaction-runner.RunnerStatic;@google-cloud/spanner/transaction-runner;Member[Runner]", //
|
||||
"@google-cloud/spanner/transaction-runner.TransactionRunner;@google-cloud/spanner/transaction-runner.TransactionRunnerStatic;Instance", //
|
||||
"@google-cloud/spanner/transaction-runner.TransactionRunnerStatic;@google-cloud/spanner/transaction-runner;Member[TransactionRunner]", //
|
||||
"@google-cloud/spanner/transaction.Dml;@google-cloud/spanner.PartitionedDml;", //
|
||||
"@google-cloud/spanner/transaction.Dml;@google-cloud/spanner.Transaction;", //
|
||||
"@google-cloud/spanner/transaction.Dml;@google-cloud/spanner/transaction.DmlStatic;Instance", //
|
||||
"@google-cloud/spanner/transaction.DmlStatic;@google-cloud/spanner/transaction;Member[Dml]", //
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,186 +56,186 @@
|
||||
"language": "javascript",
|
||||
"model": {
|
||||
"typeDefinitions": [
|
||||
"@google-cloud/spanner;BatchTransaction;@google-cloud/spanner/batch-transaction;BatchTransaction;",
|
||||
"@google-cloud/spanner;~SpannerObject;@google-cloud/spanner;Database;",
|
||||
"@google-cloud/spanner;~SpannerObject;@google-cloud/spanner;Snapshot;",
|
||||
"@google-cloud/spanner;~SpannerObject;@google-cloud/spanner;Transaction;",
|
||||
"@google-cloud/spanner;~SpannerObject;@google-cloud/spanner;v1.SpannerClient;",
|
||||
"@google-cloud/spanner;~SqlExecutorDirect;@google-cloud/spanner;BatchTransaction;Member[createQueryPartitions]",
|
||||
"@google-cloud/spanner;~SqlExecutorDirect;@google-cloud/spanner;Database;Member[run,runPartitionedUpdate,runStream]",
|
||||
"@google-cloud/spanner;~SqlExecutorDirect;@google-cloud/spanner;PartitionedDml;Member[runUpdate]",
|
||||
"@google-cloud/spanner;~SqlExecutorDirect;@google-cloud/spanner;Snapshot;Member[run,runStream]",
|
||||
"@google-cloud/spanner;~SqlExecutorDirect;@google-cloud/spanner;Transaction;Member[run,runStream,runUpdate]",
|
||||
"@google-cloud/spanner;~SqlExecutorDirect;@google-cloud/spanner;v1.SpannerClient;Member[executeSql,executeStreamingSql,partitionQuery]"
|
||||
"@google-cloud/spanner.BatchTransaction;@google-cloud/spanner/batch-transaction.BatchTransaction;",
|
||||
"@google-cloud/spanner.~SpannerObject;@google-cloud/spanner.Database;",
|
||||
"@google-cloud/spanner.~SpannerObject;@google-cloud/spanner.Snapshot;",
|
||||
"@google-cloud/spanner.~SpannerObject;@google-cloud/spanner.Transaction;",
|
||||
"@google-cloud/spanner.~SpannerObject;@google-cloud/spanner.v1.SpannerClient;",
|
||||
"@google-cloud/spanner.~SqlExecutorDirect;@google-cloud/spanner.BatchTransaction;Member[createQueryPartitions]",
|
||||
"@google-cloud/spanner.~SqlExecutorDirect;@google-cloud/spanner.Database;Member[run,runPartitionedUpdate,runStream]",
|
||||
"@google-cloud/spanner.~SqlExecutorDirect;@google-cloud/spanner.PartitionedDml;Member[runUpdate]",
|
||||
"@google-cloud/spanner.~SqlExecutorDirect;@google-cloud/spanner.Snapshot;Member[run,runStream]",
|
||||
"@google-cloud/spanner.~SqlExecutorDirect;@google-cloud/spanner.Transaction;Member[run,runStream,runUpdate]",
|
||||
"@google-cloud/spanner.~SqlExecutorDirect;@google-cloud/spanner.v1.SpannerClient;Member[executeSql,executeStreamingSql,partitionQuery]"
|
||||
],
|
||||
"sinks": []
|
||||
},
|
||||
"generatedModel": {
|
||||
"//": "Autogenerated section. Manual edits in here will be lost.",
|
||||
"typeDefinitions": [
|
||||
"@google-cloud/spanner/batch-transaction;BatchTransaction;@google-cloud/spanner/batch-transaction;BatchTransactionStatic;Instance",
|
||||
"@google-cloud/spanner/batch-transaction;BatchTransaction;@google-cloud/spanner/database;CreateBatchTransactionCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]",
|
||||
"@google-cloud/spanner/batch-transaction;BatchTransaction;@google-cloud/spanner;Database;Member[batchTransaction].ReturnValue",
|
||||
"@google-cloud/spanner/batch-transaction;BatchTransactionStatic;@google-cloud/spanner/batch-transaction;;Member[BatchTransaction]",
|
||||
"@google-cloud/spanner/batch-transaction;TransactionIdentifier;@google-cloud/spanner/batch-transaction;BatchTransaction;Member[identifier].ReturnValue",
|
||||
"@google-cloud/spanner/batch-transaction;TransactionIdentifier;@google-cloud/spanner;Database;Member[batchTransaction].Argument[0]",
|
||||
"@google-cloud/spanner/database;BatchCreateSessionsCallback;@google-cloud/spanner;Database;Member[batchCreateSessions].Argument[1]",
|
||||
"@google-cloud/spanner/database;CreateBatchTransactionCallback;@google-cloud/spanner;Database;Member[createBatchTransaction].Argument[1]",
|
||||
"@google-cloud/spanner/database;CreateBatchTransactionCallback;@google-cloud/spanner;Database;Member[createBatchTransaction].WithArity[1].Argument[0]",
|
||||
"@google-cloud/spanner/database;CreateSessionCallback;@google-cloud/spanner;Database;Member[createSession].Argument[1]",
|
||||
"@google-cloud/spanner/database;CreateSessionCallback;@google-cloud/spanner;Database;Member[createSession].WithArity[1].Argument[0]",
|
||||
"@google-cloud/spanner/database;DatabaseCallback;@google-cloud/spanner;Database;Member[get].Argument[1]",
|
||||
"@google-cloud/spanner/database;DatabaseCallback;@google-cloud/spanner;Database;Member[get].WithArity[1].Argument[0]",
|
||||
"@google-cloud/spanner/database;GetSessionsCallback;@google-cloud/spanner;Database;Member[getSessions].Argument[1]",
|
||||
"@google-cloud/spanner/database;GetSessionsCallback;@google-cloud/spanner;Database;Member[getSessions].WithArity[1].Argument[0]",
|
||||
"@google-cloud/spanner/database;GetSnapshotCallback;@google-cloud/spanner;Database;Member[getSnapshot].Argument[1]",
|
||||
"@google-cloud/spanner/database;GetSnapshotCallback;@google-cloud/spanner;Database;Member[getSnapshot].WithArity[1].Argument[0]",
|
||||
"@google-cloud/spanner/database;GetTransactionCallback;@google-cloud/spanner;Database;Member[getTransaction].Argument[0]",
|
||||
"@google-cloud/spanner/database;PoolRequestCallback;@google-cloud/spanner;Database;Member[makePooledRequest_].Argument[1]",
|
||||
"@google-cloud/spanner/database;RestoreDatabaseCallback;@google-cloud/spanner;Database;Member[restore].Argument[1,2]",
|
||||
"@google-cloud/spanner/database;SessionPoolConstructor;@google-cloud/spanner;DatabaseStatic;Argument[2]",
|
||||
"@google-cloud/spanner/database;SessionPoolConstructor;@google-cloud/spanner;Instance;Member[database].Argument[1]",
|
||||
"@google-cloud/spanner/instance;CreateDatabaseCallback;@google-cloud/spanner;Instance;Member[createDatabase].Argument[2]",
|
||||
"@google-cloud/spanner/instance;CreateDatabaseCallback;@google-cloud/spanner;Instance;Member[createDatabase].WithArity[2].Argument[1]",
|
||||
"@google-cloud/spanner/instance;CreateDatabaseOptions;@google-cloud/spanner;Instance;Member[createDatabase].WithArity[1,2,3].Argument[1]",
|
||||
"@google-cloud/spanner/instance;CreateInstanceCallback;@google-cloud/spanner;Spanner;Member[createInstance].Argument[2]",
|
||||
"@google-cloud/spanner/instance;GetDatabasesCallback;@google-cloud/spanner;Instance;Member[getDatabases].Argument[1]",
|
||||
"@google-cloud/spanner/instance;GetDatabasesCallback;@google-cloud/spanner;Instance;Member[getDatabases].WithArity[1].Argument[0]",
|
||||
"@google-cloud/spanner/instance;GetInstanceCallback;@google-cloud/spanner;Instance;Member[get].Argument[1]",
|
||||
"@google-cloud/spanner/instance;GetInstanceCallback;@google-cloud/spanner;Instance;Member[get].WithArity[1].Argument[0]",
|
||||
"@google-cloud/spanner/session-pool;GetReadSessionCallback;@google-cloud/spanner/session-pool;SessionPoolInterface;Member[getReadSession].Argument[0]",
|
||||
"@google-cloud/spanner/session-pool;GetReadSessionCallback;@google-cloud/spanner;SessionPool;Member[getReadSession].Argument[0]",
|
||||
"@google-cloud/spanner/session-pool;GetWriteSessionCallback;@google-cloud/spanner/session-pool;SessionPoolInterface;Member[getWriteSession].Argument[0]",
|
||||
"@google-cloud/spanner/session-pool;GetWriteSessionCallback;@google-cloud/spanner;SessionPool;Member[getWriteSession].Argument[0]",
|
||||
"@google-cloud/spanner/session-pool;SessionPoolInterface;@google-cloud/spanner/database;SessionPoolConstructor;Instance",
|
||||
"@google-cloud/spanner/session-pool;SessionPoolInterface;@google-cloud/spanner;Database;Member[pool_]",
|
||||
"@google-cloud/spanner/session-pool;SessionPoolInterface;@google-cloud/spanner;SessionPool;",
|
||||
"@google-cloud/spanner/table;CreateTableCallback;@google-cloud/spanner;Database;Member[createTable].Argument[2]",
|
||||
"@google-cloud/spanner/table;CreateTableCallback;@google-cloud/spanner;Database;Member[createTable].WithArity[2].Argument[1]",
|
||||
"@google-cloud/spanner/table;CreateTableCallback;@google-cloud/spanner;Table;Member[create].Argument[2]",
|
||||
"@google-cloud/spanner/table;CreateTableCallback;@google-cloud/spanner;Table;Member[create].WithArity[2].Argument[1]",
|
||||
"@google-cloud/spanner/transaction-runner;AsyncRunTransactionCallback;@google-cloud/spanner/transaction-runner;AsyncTransactionRunnerStatic;Argument[2]",
|
||||
"@google-cloud/spanner/transaction-runner;AsyncRunTransactionCallback;@google-cloud/spanner;Database;Member[runTransactionAsync].Argument[1]",
|
||||
"@google-cloud/spanner/transaction-runner;AsyncRunTransactionCallback;@google-cloud/spanner;Database;Member[runTransactionAsync].WithArity[1].Argument[0]",
|
||||
"@google-cloud/spanner/transaction-runner;AsyncTransactionRunner;@google-cloud/spanner/transaction-runner;AsyncTransactionRunnerStatic;Instance",
|
||||
"@google-cloud/spanner/transaction-runner;AsyncTransactionRunnerStatic;@google-cloud/spanner/transaction-runner;;Member[AsyncTransactionRunner]",
|
||||
"@google-cloud/spanner/transaction-runner;RunTransactionCallback;@google-cloud/spanner/transaction-runner;TransactionRunnerStatic;Argument[2]",
|
||||
"@google-cloud/spanner/transaction-runner;RunTransactionCallback;@google-cloud/spanner;Database;Member[runTransaction].Argument[1]",
|
||||
"@google-cloud/spanner/transaction-runner;RunTransactionCallback;@google-cloud/spanner;Database;Member[runTransaction].WithArity[1].Argument[0]",
|
||||
"@google-cloud/spanner/transaction-runner;Runner;@google-cloud/spanner/transaction-runner;AsyncTransactionRunner;",
|
||||
"@google-cloud/spanner/transaction-runner;Runner;@google-cloud/spanner/transaction-runner;RunnerStatic;Instance",
|
||||
"@google-cloud/spanner/transaction-runner;Runner;@google-cloud/spanner/transaction-runner;TransactionRunner;",
|
||||
"@google-cloud/spanner/transaction-runner;RunnerStatic;@google-cloud/spanner/transaction-runner;;Member[Runner]",
|
||||
"@google-cloud/spanner/transaction-runner;TransactionRunner;@google-cloud/spanner/transaction-runner;TransactionRunnerStatic;Instance",
|
||||
"@google-cloud/spanner/transaction-runner;TransactionRunnerStatic;@google-cloud/spanner/transaction-runner;;Member[TransactionRunner]",
|
||||
"@google-cloud/spanner/transaction;Dml;@google-cloud/spanner/transaction;DmlStatic;Instance",
|
||||
"@google-cloud/spanner/transaction;Dml;@google-cloud/spanner;PartitionedDml;",
|
||||
"@google-cloud/spanner/transaction;Dml;@google-cloud/spanner;Transaction;",
|
||||
"@google-cloud/spanner/transaction;DmlStatic;@google-cloud/spanner/transaction;;Member[Dml]",
|
||||
"@google-cloud/spanner;BackupStatic;@google-cloud/spanner/backup;;Member[Backup]",
|
||||
"@google-cloud/spanner;BackupStatic;@google-cloud/spanner/backup;BackupStatic;",
|
||||
"@google-cloud/spanner;BackupStatic;@google-cloud/spanner;;Member[Backup]",
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner/database;Database;",
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner/database;DatabaseCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]",
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner/database;RestoreDatabaseCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]",
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner/database;SessionPoolConstructor;Argument[0]",
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner/instance;CreateDatabaseCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]",
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner/instance;GetDatabasesCallback;TypeVar[@google-cloud/spanner/common.RequestCallback.0]",
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner;DatabaseStatic;Instance",
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner;Instance;Member[database].ReturnValue",
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner;SessionPool;Member[database]",
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner;SessionPoolStatic;Argument[0]",
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner;SessionStatic;Argument[0]",
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner;Table;Member[database]",
|
||||
"@google-cloud/spanner;Database;@google-cloud/spanner;TableStatic;Argument[0]",
|
||||
"@google-cloud/spanner;DatabaseStatic;@google-cloud/spanner/database;;Member[Database]",
|
||||
"@google-cloud/spanner;DatabaseStatic;@google-cloud/spanner/database;DatabaseStatic;",
|
||||
"@google-cloud/spanner;DatabaseStatic;@google-cloud/spanner;;Member[Database]",
|
||||
"@google-cloud/spanner;GetInstancesCallback;@google-cloud/spanner/build/src;GetInstancesCallback;",
|
||||
"@google-cloud/spanner;GetInstancesCallback;@google-cloud/spanner;Spanner;Member[getInstances].Argument[1]",
|
||||
"@google-cloud/spanner;GetInstancesCallback;@google-cloud/spanner;Spanner;Member[getInstances].WithArity[1].Argument[0]",
|
||||
"@google-cloud/spanner;Instance;@google-cloud/spanner/instance;CreateInstanceCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]",
|
||||
"@google-cloud/spanner;Instance;@google-cloud/spanner/instance;GetInstanceCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]",
|
||||
"@google-cloud/spanner;Instance;@google-cloud/spanner/instance;Instance;",
|
||||
"@google-cloud/spanner;Instance;@google-cloud/spanner;BackupStatic;Argument[0]",
|
||||
"@google-cloud/spanner;Instance;@google-cloud/spanner;DatabaseStatic;Argument[0]",
|
||||
"@google-cloud/spanner;Instance;@google-cloud/spanner;GetInstancesCallback;TypeVar[@google-cloud/spanner/common.PagedCallback.0]",
|
||||
"@google-cloud/spanner;Instance;@google-cloud/spanner;InstanceStatic;Instance",
|
||||
"@google-cloud/spanner;Instance;@google-cloud/spanner;Spanner;Member[instance].ReturnValue",
|
||||
"@google-cloud/spanner;InstanceStatic;@google-cloud/spanner/instance;;Member[Instance]",
|
||||
"@google-cloud/spanner;InstanceStatic;@google-cloud/spanner/instance;InstanceStatic;",
|
||||
"@google-cloud/spanner;InstanceStatic;@google-cloud/spanner;;Member[Instance]",
|
||||
"@google-cloud/spanner;PartitionedDml;@google-cloud/spanner/transaction;PartitionedDml;",
|
||||
"@google-cloud/spanner;PartitionedDml;@google-cloud/spanner;PartitionedDmlStatic;Instance",
|
||||
"@google-cloud/spanner;PartitionedDml;@google-cloud/spanner;Session;Member[partitionedDml].ReturnValue",
|
||||
"@google-cloud/spanner;PartitionedDmlStatic;@google-cloud/spanner/transaction;;Member[PartitionedDml]",
|
||||
"@google-cloud/spanner;PartitionedDmlStatic;@google-cloud/spanner/transaction;PartitionedDmlStatic;",
|
||||
"@google-cloud/spanner;PartitionedDmlStatic;@google-cloud/spanner;;Member[PartitionedDml]",
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner/batch-transaction;TransactionIdentifier;Member[session]",
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner/database;BatchCreateSessionsCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0].ArrayElement",
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner/database;CreateSessionCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]",
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner/database;GetSessionsCallback;TypeVar[@google-cloud/spanner/common.RequestCallback.0]",
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner/database;PoolRequestCallback;TypeVar[@google-cloud/spanner/common.RequestCallback.0]",
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner/session-pool;GetReadSessionCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]",
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner/session-pool;GetWriteSessionCallback;Argument[1]",
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner/session-pool;SessionPoolInterface;Member[release].Argument[0]",
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner/session;Session;",
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner/transaction-runner;Runner;Member[session]",
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner;Database;Member[_runPartitionedUpdate].Argument[0]",
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner;Database;Member[makePooledRequest_].WithArity[1].ReturnValue.Awaited",
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner;Database;Member[session].ReturnValue",
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner;SessionPool;Member[_acquire,_getSession].ReturnValue.Awaited",
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner;SessionPool;Member[_borrow,_destroy,_isValidSession,_ping,_prepareTransaction,_release,release].Argument[0]",
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner;SessionPool;Member[_borrowFrom,_borrowNextAvailableSession].ReturnValue",
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner;SessionPool;Member[_getIdleSessions].ReturnValue.ArrayElement",
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner;SessionStatic;Instance",
|
||||
"@google-cloud/spanner;Session;@google-cloud/spanner;Snapshot;Member[session]",
|
||||
"@google-cloud/spanner;SessionPool;@google-cloud/spanner/instance;CreateDatabaseOptions;Member[poolCtor]",
|
||||
"@google-cloud/spanner;SessionPool;@google-cloud/spanner/session-pool;SessionPool;",
|
||||
"@google-cloud/spanner;SessionPool;@google-cloud/spanner;SessionPoolStatic;Instance",
|
||||
"@google-cloud/spanner;SessionPoolStatic;@google-cloud/spanner/session-pool;;Member[SessionPool]",
|
||||
"@google-cloud/spanner;SessionPoolStatic;@google-cloud/spanner/session-pool;SessionPoolStatic;",
|
||||
"@google-cloud/spanner;SessionPoolStatic;@google-cloud/spanner;;Member[SessionPool]",
|
||||
"@google-cloud/spanner;SessionStatic;@google-cloud/spanner/session;;Member[Session]",
|
||||
"@google-cloud/spanner;SessionStatic;@google-cloud/spanner/session;SessionStatic;",
|
||||
"@google-cloud/spanner;SessionStatic;@google-cloud/spanner;;Member[Session]",
|
||||
"@google-cloud/spanner;Snapshot;@google-cloud/spanner/batch-transaction;BatchTransaction;",
|
||||
"@google-cloud/spanner;Snapshot;@google-cloud/spanner/database;GetSnapshotCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]",
|
||||
"@google-cloud/spanner;Snapshot;@google-cloud/spanner/transaction;Dml;",
|
||||
"@google-cloud/spanner;Snapshot;@google-cloud/spanner/transaction;Snapshot;",
|
||||
"@google-cloud/spanner;Snapshot;@google-cloud/spanner;Session;Member[snapshot].ReturnValue",
|
||||
"@google-cloud/spanner;Snapshot;@google-cloud/spanner;SnapshotStatic;Instance",
|
||||
"@google-cloud/spanner;SnapshotStatic;@google-cloud/spanner/transaction;;Member[Snapshot]",
|
||||
"@google-cloud/spanner;SnapshotStatic;@google-cloud/spanner/transaction;SnapshotStatic;",
|
||||
"@google-cloud/spanner;SnapshotStatic;@google-cloud/spanner;;Member[Snapshot]",
|
||||
"@google-cloud/spanner;Spanner;@google-cloud/spanner;InstanceStatic;Argument[0]",
|
||||
"@google-cloud/spanner;Spanner;@google-cloud/spanner;SpannerStatic;Instance",
|
||||
"@google-cloud/spanner;SpannerStatic;@google-cloud/spanner;;Member[Spanner]",
|
||||
"@google-cloud/spanner;Table;@google-cloud/spanner/table;CreateTableCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]",
|
||||
"@google-cloud/spanner;Table;@google-cloud/spanner/table;Table;",
|
||||
"@google-cloud/spanner;Table;@google-cloud/spanner;Database;Member[table].ReturnValue",
|
||||
"@google-cloud/spanner;Table;@google-cloud/spanner;TableStatic;Instance",
|
||||
"@google-cloud/spanner;TableStatic;@google-cloud/spanner/table;;Member[Table]",
|
||||
"@google-cloud/spanner;TableStatic;@google-cloud/spanner/table;TableStatic;",
|
||||
"@google-cloud/spanner;TableStatic;@google-cloud/spanner;;Member[Table]",
|
||||
"@google-cloud/spanner;Transaction;@google-cloud/spanner/database;GetTransactionCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]",
|
||||
"@google-cloud/spanner;Transaction;@google-cloud/spanner/session-pool;GetWriteSessionCallback;Argument[2]",
|
||||
"@google-cloud/spanner;Transaction;@google-cloud/spanner/transaction-runner;AsyncRunTransactionCallback;Argument[0]",
|
||||
"@google-cloud/spanner;Transaction;@google-cloud/spanner/transaction-runner;RunTransactionCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]",
|
||||
"@google-cloud/spanner;Transaction;@google-cloud/spanner/transaction-runner;Runner;Member[getTransaction].ReturnValue.Awaited",
|
||||
"@google-cloud/spanner;Transaction;@google-cloud/spanner/transaction-runner;Runner;Member[transaction]",
|
||||
"@google-cloud/spanner;Transaction;@google-cloud/spanner/transaction;Transaction;",
|
||||
"@google-cloud/spanner;Transaction;@google-cloud/spanner;Session;Member[transaction].ReturnValue",
|
||||
"@google-cloud/spanner;Transaction;@google-cloud/spanner;Session;Member[txn]",
|
||||
"@google-cloud/spanner;Transaction;@google-cloud/spanner;TransactionStatic;Instance",
|
||||
"@google-cloud/spanner;TransactionStatic;@google-cloud/spanner/transaction;;Member[Transaction]",
|
||||
"@google-cloud/spanner;TransactionStatic;@google-cloud/spanner/transaction;TransactionStatic;",
|
||||
"@google-cloud/spanner;TransactionStatic;@google-cloud/spanner;;Member[Transaction]",
|
||||
"@google-cloud/spanner;v1.SpannerClient;@google-cloud/spanner/v1/spanner_client;SpannerClient;",
|
||||
"@google-cloud/spanner;v1.SpannerClient;@google-cloud/spanner;v1.SpannerClientStatic;Instance",
|
||||
"@google-cloud/spanner;v1.SpannerClientStatic;@google-cloud/spanner/v1/spanner_client;;Member[SpannerClient]",
|
||||
"@google-cloud/spanner;v1.SpannerClientStatic;@google-cloud/spanner/v1/spanner_client;SpannerClientStatic;",
|
||||
"@google-cloud/spanner;v1.SpannerClientStatic;@google-cloud/spanner;;Member[v1].Member[SpannerClient]"
|
||||
"@google-cloud/spanner.BackupStatic;@google-cloud/spanner/backup.BackupStatic;",
|
||||
"@google-cloud/spanner.BackupStatic;@google-cloud/spanner/backup;Member[Backup]",
|
||||
"@google-cloud/spanner.BackupStatic;@google-cloud/spanner;Member[Backup]",
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner.DatabaseStatic;Instance",
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner.Instance;Member[database].ReturnValue",
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner.SessionPool;Member[database]",
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner.SessionPoolStatic;Argument[0]",
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner.SessionStatic;Argument[0]",
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner.Table;Member[database]",
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner.TableStatic;Argument[0]",
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner/database.Database;",
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner/database.DatabaseCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]",
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner/database.RestoreDatabaseCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]",
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner/database.SessionPoolConstructor;Argument[0]",
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner/instance.CreateDatabaseCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]",
|
||||
"@google-cloud/spanner.Database;@google-cloud/spanner/instance.GetDatabasesCallback;TypeVar[@google-cloud/spanner/common.RequestCallback.0]",
|
||||
"@google-cloud/spanner.DatabaseStatic;@google-cloud/spanner/database.DatabaseStatic;",
|
||||
"@google-cloud/spanner.DatabaseStatic;@google-cloud/spanner/database;Member[Database]",
|
||||
"@google-cloud/spanner.DatabaseStatic;@google-cloud/spanner;Member[Database]",
|
||||
"@google-cloud/spanner.GetInstancesCallback;@google-cloud/spanner.Spanner;Member[getInstances].Argument[1]",
|
||||
"@google-cloud/spanner.GetInstancesCallback;@google-cloud/spanner.Spanner;Member[getInstances].WithArity[1].Argument[0]",
|
||||
"@google-cloud/spanner.GetInstancesCallback;@google-cloud/spanner/build/src.GetInstancesCallback;",
|
||||
"@google-cloud/spanner.Instance;@google-cloud/spanner.BackupStatic;Argument[0]",
|
||||
"@google-cloud/spanner.Instance;@google-cloud/spanner.DatabaseStatic;Argument[0]",
|
||||
"@google-cloud/spanner.Instance;@google-cloud/spanner.GetInstancesCallback;TypeVar[@google-cloud/spanner/common.PagedCallback.0]",
|
||||
"@google-cloud/spanner.Instance;@google-cloud/spanner.InstanceStatic;Instance",
|
||||
"@google-cloud/spanner.Instance;@google-cloud/spanner.Spanner;Member[instance].ReturnValue",
|
||||
"@google-cloud/spanner.Instance;@google-cloud/spanner/instance.CreateInstanceCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]",
|
||||
"@google-cloud/spanner.Instance;@google-cloud/spanner/instance.GetInstanceCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]",
|
||||
"@google-cloud/spanner.Instance;@google-cloud/spanner/instance.Instance;",
|
||||
"@google-cloud/spanner.InstanceStatic;@google-cloud/spanner/instance.InstanceStatic;",
|
||||
"@google-cloud/spanner.InstanceStatic;@google-cloud/spanner/instance;Member[Instance]",
|
||||
"@google-cloud/spanner.InstanceStatic;@google-cloud/spanner;Member[Instance]",
|
||||
"@google-cloud/spanner.PartitionedDml;@google-cloud/spanner.PartitionedDmlStatic;Instance",
|
||||
"@google-cloud/spanner.PartitionedDml;@google-cloud/spanner.Session;Member[partitionedDml].ReturnValue",
|
||||
"@google-cloud/spanner.PartitionedDml;@google-cloud/spanner/transaction.PartitionedDml;",
|
||||
"@google-cloud/spanner.PartitionedDmlStatic;@google-cloud/spanner/transaction.PartitionedDmlStatic;",
|
||||
"@google-cloud/spanner.PartitionedDmlStatic;@google-cloud/spanner/transaction;Member[PartitionedDml]",
|
||||
"@google-cloud/spanner.PartitionedDmlStatic;@google-cloud/spanner;Member[PartitionedDml]",
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner.Database;Member[_runPartitionedUpdate].Argument[0]",
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner.Database;Member[makePooledRequest_].WithArity[1].ReturnValue.Awaited",
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner.Database;Member[session].ReturnValue",
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner.SessionPool;Member[_acquire,_getSession].ReturnValue.Awaited",
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner.SessionPool;Member[_borrow,_destroy,_isValidSession,_ping,_prepareTransaction,_release,release].Argument[0]",
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner.SessionPool;Member[_borrowFrom,_borrowNextAvailableSession].ReturnValue",
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner.SessionPool;Member[_getIdleSessions].ReturnValue.ArrayElement",
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner.SessionStatic;Instance",
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner.Snapshot;Member[session]",
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner/batch-transaction.TransactionIdentifier;Member[session]",
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner/database.BatchCreateSessionsCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0].ArrayElement",
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner/database.CreateSessionCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]",
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner/database.GetSessionsCallback;TypeVar[@google-cloud/spanner/common.RequestCallback.0]",
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner/database.PoolRequestCallback;TypeVar[@google-cloud/spanner/common.RequestCallback.0]",
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner/session-pool.GetReadSessionCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]",
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner/session-pool.GetWriteSessionCallback;Argument[1]",
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner/session-pool.SessionPoolInterface;Member[release].Argument[0]",
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner/session.Session;",
|
||||
"@google-cloud/spanner.Session;@google-cloud/spanner/transaction-runner.Runner;Member[session]",
|
||||
"@google-cloud/spanner.SessionPool;@google-cloud/spanner.SessionPoolStatic;Instance",
|
||||
"@google-cloud/spanner.SessionPool;@google-cloud/spanner/instance.CreateDatabaseOptions;Member[poolCtor]",
|
||||
"@google-cloud/spanner.SessionPool;@google-cloud/spanner/session-pool.SessionPool;",
|
||||
"@google-cloud/spanner.SessionPoolStatic;@google-cloud/spanner/session-pool.SessionPoolStatic;",
|
||||
"@google-cloud/spanner.SessionPoolStatic;@google-cloud/spanner/session-pool;Member[SessionPool]",
|
||||
"@google-cloud/spanner.SessionPoolStatic;@google-cloud/spanner;Member[SessionPool]",
|
||||
"@google-cloud/spanner.SessionStatic;@google-cloud/spanner/session.SessionStatic;",
|
||||
"@google-cloud/spanner.SessionStatic;@google-cloud/spanner/session;Member[Session]",
|
||||
"@google-cloud/spanner.SessionStatic;@google-cloud/spanner;Member[Session]",
|
||||
"@google-cloud/spanner.Snapshot;@google-cloud/spanner.Session;Member[snapshot].ReturnValue",
|
||||
"@google-cloud/spanner.Snapshot;@google-cloud/spanner.SnapshotStatic;Instance",
|
||||
"@google-cloud/spanner.Snapshot;@google-cloud/spanner/batch-transaction.BatchTransaction;",
|
||||
"@google-cloud/spanner.Snapshot;@google-cloud/spanner/database.GetSnapshotCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]",
|
||||
"@google-cloud/spanner.Snapshot;@google-cloud/spanner/transaction.Dml;",
|
||||
"@google-cloud/spanner.Snapshot;@google-cloud/spanner/transaction.Snapshot;",
|
||||
"@google-cloud/spanner.SnapshotStatic;@google-cloud/spanner/transaction.SnapshotStatic;",
|
||||
"@google-cloud/spanner.SnapshotStatic;@google-cloud/spanner/transaction;Member[Snapshot]",
|
||||
"@google-cloud/spanner.SnapshotStatic;@google-cloud/spanner;Member[Snapshot]",
|
||||
"@google-cloud/spanner.Spanner;@google-cloud/spanner.InstanceStatic;Argument[0]",
|
||||
"@google-cloud/spanner.Spanner;@google-cloud/spanner.SpannerStatic;Instance",
|
||||
"@google-cloud/spanner.SpannerStatic;@google-cloud/spanner;Member[Spanner]",
|
||||
"@google-cloud/spanner.Table;@google-cloud/spanner.Database;Member[table].ReturnValue",
|
||||
"@google-cloud/spanner.Table;@google-cloud/spanner.TableStatic;Instance",
|
||||
"@google-cloud/spanner.Table;@google-cloud/spanner/table.CreateTableCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]",
|
||||
"@google-cloud/spanner.Table;@google-cloud/spanner/table.Table;",
|
||||
"@google-cloud/spanner.TableStatic;@google-cloud/spanner/table.TableStatic;",
|
||||
"@google-cloud/spanner.TableStatic;@google-cloud/spanner/table;Member[Table]",
|
||||
"@google-cloud/spanner.TableStatic;@google-cloud/spanner;Member[Table]",
|
||||
"@google-cloud/spanner.Transaction;@google-cloud/spanner.Session;Member[transaction].ReturnValue",
|
||||
"@google-cloud/spanner.Transaction;@google-cloud/spanner.Session;Member[txn]",
|
||||
"@google-cloud/spanner.Transaction;@google-cloud/spanner.TransactionStatic;Instance",
|
||||
"@google-cloud/spanner.Transaction;@google-cloud/spanner/database.GetTransactionCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]",
|
||||
"@google-cloud/spanner.Transaction;@google-cloud/spanner/session-pool.GetWriteSessionCallback;Argument[2]",
|
||||
"@google-cloud/spanner.Transaction;@google-cloud/spanner/transaction-runner.AsyncRunTransactionCallback;Argument[0]",
|
||||
"@google-cloud/spanner.Transaction;@google-cloud/spanner/transaction-runner.RunTransactionCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]",
|
||||
"@google-cloud/spanner.Transaction;@google-cloud/spanner/transaction-runner.Runner;Member[getTransaction].ReturnValue.Awaited",
|
||||
"@google-cloud/spanner.Transaction;@google-cloud/spanner/transaction-runner.Runner;Member[transaction]",
|
||||
"@google-cloud/spanner.Transaction;@google-cloud/spanner/transaction.Transaction;",
|
||||
"@google-cloud/spanner.TransactionStatic;@google-cloud/spanner/transaction.TransactionStatic;",
|
||||
"@google-cloud/spanner.TransactionStatic;@google-cloud/spanner/transaction;Member[Transaction]",
|
||||
"@google-cloud/spanner.TransactionStatic;@google-cloud/spanner;Member[Transaction]",
|
||||
"@google-cloud/spanner.v1.SpannerClient;@google-cloud/spanner.v1.SpannerClientStatic;Instance",
|
||||
"@google-cloud/spanner.v1.SpannerClient;@google-cloud/spanner/v1/spanner_client.SpannerClient;",
|
||||
"@google-cloud/spanner.v1.SpannerClientStatic;@google-cloud/spanner/v1/spanner_client.SpannerClientStatic;",
|
||||
"@google-cloud/spanner.v1.SpannerClientStatic;@google-cloud/spanner/v1/spanner_client;Member[SpannerClient]",
|
||||
"@google-cloud/spanner.v1.SpannerClientStatic;@google-cloud/spanner;Member[v1].Member[SpannerClient]",
|
||||
"@google-cloud/spanner/batch-transaction.BatchTransaction;@google-cloud/spanner.Database;Member[batchTransaction].ReturnValue",
|
||||
"@google-cloud/spanner/batch-transaction.BatchTransaction;@google-cloud/spanner/batch-transaction.BatchTransactionStatic;Instance",
|
||||
"@google-cloud/spanner/batch-transaction.BatchTransaction;@google-cloud/spanner/database.CreateBatchTransactionCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]",
|
||||
"@google-cloud/spanner/batch-transaction.BatchTransactionStatic;@google-cloud/spanner/batch-transaction;Member[BatchTransaction]",
|
||||
"@google-cloud/spanner/batch-transaction.TransactionIdentifier;@google-cloud/spanner.Database;Member[batchTransaction].Argument[0]",
|
||||
"@google-cloud/spanner/batch-transaction.TransactionIdentifier;@google-cloud/spanner/batch-transaction.BatchTransaction;Member[identifier].ReturnValue",
|
||||
"@google-cloud/spanner/database.BatchCreateSessionsCallback;@google-cloud/spanner.Database;Member[batchCreateSessions].Argument[1]",
|
||||
"@google-cloud/spanner/database.CreateBatchTransactionCallback;@google-cloud/spanner.Database;Member[createBatchTransaction].Argument[1]",
|
||||
"@google-cloud/spanner/database.CreateBatchTransactionCallback;@google-cloud/spanner.Database;Member[createBatchTransaction].WithArity[1].Argument[0]",
|
||||
"@google-cloud/spanner/database.CreateSessionCallback;@google-cloud/spanner.Database;Member[createSession].Argument[1]",
|
||||
"@google-cloud/spanner/database.CreateSessionCallback;@google-cloud/spanner.Database;Member[createSession].WithArity[1].Argument[0]",
|
||||
"@google-cloud/spanner/database.DatabaseCallback;@google-cloud/spanner.Database;Member[get].Argument[1]",
|
||||
"@google-cloud/spanner/database.DatabaseCallback;@google-cloud/spanner.Database;Member[get].WithArity[1].Argument[0]",
|
||||
"@google-cloud/spanner/database.GetSessionsCallback;@google-cloud/spanner.Database;Member[getSessions].Argument[1]",
|
||||
"@google-cloud/spanner/database.GetSessionsCallback;@google-cloud/spanner.Database;Member[getSessions].WithArity[1].Argument[0]",
|
||||
"@google-cloud/spanner/database.GetSnapshotCallback;@google-cloud/spanner.Database;Member[getSnapshot].Argument[1]",
|
||||
"@google-cloud/spanner/database.GetSnapshotCallback;@google-cloud/spanner.Database;Member[getSnapshot].WithArity[1].Argument[0]",
|
||||
"@google-cloud/spanner/database.GetTransactionCallback;@google-cloud/spanner.Database;Member[getTransaction].Argument[0]",
|
||||
"@google-cloud/spanner/database.PoolRequestCallback;@google-cloud/spanner.Database;Member[makePooledRequest_].Argument[1]",
|
||||
"@google-cloud/spanner/database.RestoreDatabaseCallback;@google-cloud/spanner.Database;Member[restore].Argument[1,2]",
|
||||
"@google-cloud/spanner/database.SessionPoolConstructor;@google-cloud/spanner.DatabaseStatic;Argument[2]",
|
||||
"@google-cloud/spanner/database.SessionPoolConstructor;@google-cloud/spanner.Instance;Member[database].Argument[1]",
|
||||
"@google-cloud/spanner/instance.CreateDatabaseCallback;@google-cloud/spanner.Instance;Member[createDatabase].Argument[2]",
|
||||
"@google-cloud/spanner/instance.CreateDatabaseCallback;@google-cloud/spanner.Instance;Member[createDatabase].WithArity[2].Argument[1]",
|
||||
"@google-cloud/spanner/instance.CreateDatabaseOptions;@google-cloud/spanner.Instance;Member[createDatabase].WithArity[1,2,3].Argument[1]",
|
||||
"@google-cloud/spanner/instance.CreateInstanceCallback;@google-cloud/spanner.Spanner;Member[createInstance].Argument[2]",
|
||||
"@google-cloud/spanner/instance.GetDatabasesCallback;@google-cloud/spanner.Instance;Member[getDatabases].Argument[1]",
|
||||
"@google-cloud/spanner/instance.GetDatabasesCallback;@google-cloud/spanner.Instance;Member[getDatabases].WithArity[1].Argument[0]",
|
||||
"@google-cloud/spanner/instance.GetInstanceCallback;@google-cloud/spanner.Instance;Member[get].Argument[1]",
|
||||
"@google-cloud/spanner/instance.GetInstanceCallback;@google-cloud/spanner.Instance;Member[get].WithArity[1].Argument[0]",
|
||||
"@google-cloud/spanner/session-pool.GetReadSessionCallback;@google-cloud/spanner.SessionPool;Member[getReadSession].Argument[0]",
|
||||
"@google-cloud/spanner/session-pool.GetReadSessionCallback;@google-cloud/spanner/session-pool.SessionPoolInterface;Member[getReadSession].Argument[0]",
|
||||
"@google-cloud/spanner/session-pool.GetWriteSessionCallback;@google-cloud/spanner.SessionPool;Member[getWriteSession].Argument[0]",
|
||||
"@google-cloud/spanner/session-pool.GetWriteSessionCallback;@google-cloud/spanner/session-pool.SessionPoolInterface;Member[getWriteSession].Argument[0]",
|
||||
"@google-cloud/spanner/session-pool.SessionPoolInterface;@google-cloud/spanner.Database;Member[pool_]",
|
||||
"@google-cloud/spanner/session-pool.SessionPoolInterface;@google-cloud/spanner.SessionPool;",
|
||||
"@google-cloud/spanner/session-pool.SessionPoolInterface;@google-cloud/spanner/database.SessionPoolConstructor;Instance",
|
||||
"@google-cloud/spanner/table.CreateTableCallback;@google-cloud/spanner.Database;Member[createTable].Argument[2]",
|
||||
"@google-cloud/spanner/table.CreateTableCallback;@google-cloud/spanner.Database;Member[createTable].WithArity[2].Argument[1]",
|
||||
"@google-cloud/spanner/table.CreateTableCallback;@google-cloud/spanner.Table;Member[create].Argument[2]",
|
||||
"@google-cloud/spanner/table.CreateTableCallback;@google-cloud/spanner.Table;Member[create].WithArity[2].Argument[1]",
|
||||
"@google-cloud/spanner/transaction-runner.AsyncRunTransactionCallback;@google-cloud/spanner.Database;Member[runTransactionAsync].Argument[1]",
|
||||
"@google-cloud/spanner/transaction-runner.AsyncRunTransactionCallback;@google-cloud/spanner.Database;Member[runTransactionAsync].WithArity[1].Argument[0]",
|
||||
"@google-cloud/spanner/transaction-runner.AsyncRunTransactionCallback;@google-cloud/spanner/transaction-runner.AsyncTransactionRunnerStatic;Argument[2]",
|
||||
"@google-cloud/spanner/transaction-runner.AsyncTransactionRunner;@google-cloud/spanner/transaction-runner.AsyncTransactionRunnerStatic;Instance",
|
||||
"@google-cloud/spanner/transaction-runner.AsyncTransactionRunnerStatic;@google-cloud/spanner/transaction-runner;Member[AsyncTransactionRunner]",
|
||||
"@google-cloud/spanner/transaction-runner.RunTransactionCallback;@google-cloud/spanner.Database;Member[runTransaction].Argument[1]",
|
||||
"@google-cloud/spanner/transaction-runner.RunTransactionCallback;@google-cloud/spanner.Database;Member[runTransaction].WithArity[1].Argument[0]",
|
||||
"@google-cloud/spanner/transaction-runner.RunTransactionCallback;@google-cloud/spanner/transaction-runner.TransactionRunnerStatic;Argument[2]",
|
||||
"@google-cloud/spanner/transaction-runner.Runner;@google-cloud/spanner/transaction-runner.AsyncTransactionRunner;",
|
||||
"@google-cloud/spanner/transaction-runner.Runner;@google-cloud/spanner/transaction-runner.RunnerStatic;Instance",
|
||||
"@google-cloud/spanner/transaction-runner.Runner;@google-cloud/spanner/transaction-runner.TransactionRunner;",
|
||||
"@google-cloud/spanner/transaction-runner.RunnerStatic;@google-cloud/spanner/transaction-runner;Member[Runner]",
|
||||
"@google-cloud/spanner/transaction-runner.TransactionRunner;@google-cloud/spanner/transaction-runner.TransactionRunnerStatic;Instance",
|
||||
"@google-cloud/spanner/transaction-runner.TransactionRunnerStatic;@google-cloud/spanner/transaction-runner;Member[TransactionRunner]",
|
||||
"@google-cloud/spanner/transaction.Dml;@google-cloud/spanner.PartitionedDml;",
|
||||
"@google-cloud/spanner/transaction.Dml;@google-cloud/spanner.Transaction;",
|
||||
"@google-cloud/spanner/transaction.Dml;@google-cloud/spanner/transaction.DmlStatic;Instance",
|
||||
"@google-cloud/spanner/transaction.DmlStatic;@google-cloud/spanner/transaction;Member[Dml]"
|
||||
],
|
||||
"summaries": [],
|
||||
"typeVariables": [
|
||||
|
||||
@@ -6,21 +6,21 @@ private class Types extends ModelInput::TypeModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"sqlite3;Database;sqlite3;;Member[cached].Member[Database].ReturnValue", //
|
||||
"sqlite3;Database;sqlite3;Database;Member[addListener,all,each,exec,get,on,once,prependListener,prependOnceListener,run].ReturnValue", //
|
||||
"sqlite3;Database;sqlite3;DatabaseStatic;Instance", //
|
||||
"sqlite3;Database;sqlite3;Statement;Member[finalize].ReturnValue", //
|
||||
"sqlite3;DatabaseStatic;sqlite3;;Member[Database]", //
|
||||
"sqlite3;DatabaseStatic;sqlite3;sqlite3;Member[Database]", //
|
||||
"sqlite3;RunResult;sqlite3;sqlite3;Member[RunResult]", //
|
||||
"sqlite3;Statement;sqlite3;Database;Member[prepare].ReturnValue", //
|
||||
"sqlite3;Statement;sqlite3;RunResult;", //
|
||||
"sqlite3;Statement;sqlite3;Statement;Member[all,bind,each,get,reset,run].ReturnValue", //
|
||||
"sqlite3;Statement;sqlite3;StatementStatic;Instance", //
|
||||
"sqlite3;StatementStatic;sqlite3;;Member[Statement]", //
|
||||
"sqlite3;StatementStatic;sqlite3;sqlite3;Member[Statement]", //
|
||||
"sqlite3;sqlite3;sqlite3;;Member[verbose].ReturnValue", //
|
||||
"sqlite3;sqlite3;sqlite3;sqlite3;Member[verbose].ReturnValue", //
|
||||
"sqlite3.Database;sqlite3.Database;Member[addListener,all,each,exec,get,on,once,prependListener,prependOnceListener,run].ReturnValue", //
|
||||
"sqlite3.Database;sqlite3.DatabaseStatic;Instance", //
|
||||
"sqlite3.Database;sqlite3.Statement;Member[finalize].ReturnValue", //
|
||||
"sqlite3.Database;sqlite3;Member[cached].Member[Database].ReturnValue", //
|
||||
"sqlite3.DatabaseStatic;sqlite3.sqlite3;Member[Database]", //
|
||||
"sqlite3.DatabaseStatic;sqlite3;Member[Database]", //
|
||||
"sqlite3.RunResult;sqlite3.sqlite3;Member[RunResult]", //
|
||||
"sqlite3.Statement;sqlite3.Database;Member[prepare].ReturnValue", //
|
||||
"sqlite3.Statement;sqlite3.RunResult;", //
|
||||
"sqlite3.Statement;sqlite3.Statement;Member[all,bind,each,get,reset,run].ReturnValue", //
|
||||
"sqlite3.Statement;sqlite3.StatementStatic;Instance", //
|
||||
"sqlite3.StatementStatic;sqlite3.sqlite3;Member[Statement]", //
|
||||
"sqlite3.StatementStatic;sqlite3;Member[Statement]", //
|
||||
"sqlite3.sqlite3;sqlite3.sqlite3;Member[verbose].ReturnValue", //
|
||||
"sqlite3.sqlite3;sqlite3;Member[verbose].ReturnValue", //
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -29,9 +29,9 @@ private class Summaries extends ModelInput::SummaryModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"sqlite3;Database;;;Member[addListener,all,each,exec,get,on,once,prependListener,prependOnceListener,run].ReturnValue;type", //
|
||||
"sqlite3;Statement;;;Member[all,bind,each,get,reset,run].ReturnValue;type", //
|
||||
"sqlite3;sqlite3;;;Member[verbose].ReturnValue;type", //
|
||||
"sqlite3.Database;;;Member[addListener,all,each,exec,get,on,once,prependListener,prependOnceListener,run].ReturnValue;type", //
|
||||
"sqlite3.Statement;;;Member[all,bind,each,get,reset,run].ReturnValue;type", //
|
||||
"sqlite3.sqlite3;;;Member[verbose].ReturnValue;type", //
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
"language": "javascript",
|
||||
"usedTypes": {
|
||||
"sources": [
|
||||
"sqlite3;Database"
|
||||
"sqlite3.Database"
|
||||
]
|
||||
},
|
||||
"model": {
|
||||
@@ -17,26 +17,26 @@
|
||||
"generatedModel": {
|
||||
"//": "Autogenerated section. Manual edits in here will be lost.",
|
||||
"typeDefinitions": [
|
||||
"sqlite3;Database;sqlite3;;Member[cached].Member[Database].ReturnValue",
|
||||
"sqlite3;Database;sqlite3;Database;Member[addListener,all,each,exec,get,on,once,prependListener,prependOnceListener,run].ReturnValue",
|
||||
"sqlite3;Database;sqlite3;DatabaseStatic;Instance",
|
||||
"sqlite3;Database;sqlite3;Statement;Member[finalize].ReturnValue",
|
||||
"sqlite3;DatabaseStatic;sqlite3;;Member[Database]",
|
||||
"sqlite3;DatabaseStatic;sqlite3;sqlite3;Member[Database]",
|
||||
"sqlite3;RunResult;sqlite3;sqlite3;Member[RunResult]",
|
||||
"sqlite3;Statement;sqlite3;Database;Member[prepare].ReturnValue",
|
||||
"sqlite3;Statement;sqlite3;RunResult;",
|
||||
"sqlite3;Statement;sqlite3;Statement;Member[all,bind,each,get,reset,run].ReturnValue",
|
||||
"sqlite3;Statement;sqlite3;StatementStatic;Instance",
|
||||
"sqlite3;StatementStatic;sqlite3;;Member[Statement]",
|
||||
"sqlite3;StatementStatic;sqlite3;sqlite3;Member[Statement]",
|
||||
"sqlite3;sqlite3;sqlite3;;Member[verbose].ReturnValue",
|
||||
"sqlite3;sqlite3;sqlite3;sqlite3;Member[verbose].ReturnValue"
|
||||
"sqlite3.Database;sqlite3.Database;Member[addListener,all,each,exec,get,on,once,prependListener,prependOnceListener,run].ReturnValue",
|
||||
"sqlite3.Database;sqlite3.DatabaseStatic;Instance",
|
||||
"sqlite3.Database;sqlite3.Statement;Member[finalize].ReturnValue",
|
||||
"sqlite3.Database;sqlite3;Member[cached].Member[Database].ReturnValue",
|
||||
"sqlite3.DatabaseStatic;sqlite3.sqlite3;Member[Database]",
|
||||
"sqlite3.DatabaseStatic;sqlite3;Member[Database]",
|
||||
"sqlite3.RunResult;sqlite3.sqlite3;Member[RunResult]",
|
||||
"sqlite3.Statement;sqlite3.Database;Member[prepare].ReturnValue",
|
||||
"sqlite3.Statement;sqlite3.RunResult;",
|
||||
"sqlite3.Statement;sqlite3.Statement;Member[all,bind,each,get,reset,run].ReturnValue",
|
||||
"sqlite3.Statement;sqlite3.StatementStatic;Instance",
|
||||
"sqlite3.StatementStatic;sqlite3.sqlite3;Member[Statement]",
|
||||
"sqlite3.StatementStatic;sqlite3;Member[Statement]",
|
||||
"sqlite3.sqlite3;sqlite3.sqlite3;Member[verbose].ReturnValue",
|
||||
"sqlite3.sqlite3;sqlite3;Member[verbose].ReturnValue"
|
||||
],
|
||||
"summaries": [
|
||||
"sqlite3;Database;;;Member[addListener,all,each,exec,get,on,once,prependListener,prependOnceListener,run].ReturnValue;type",
|
||||
"sqlite3;Statement;;;Member[all,bind,each,get,reset,run].ReturnValue;type",
|
||||
"sqlite3;sqlite3;;;Member[verbose].ReturnValue;type"
|
||||
"sqlite3.Database;;;Member[addListener,all,each,exec,get,on,once,prependListener,prependOnceListener,run].ReturnValue;type",
|
||||
"sqlite3.Statement;;;Member[all,bind,each,get,reset,run].ReturnValue;type",
|
||||
"sqlite3.sqlite3;;;Member[verbose].ReturnValue;type"
|
||||
],
|
||||
"typeVariables": []
|
||||
}
|
||||
|
||||
@@ -24,7 +24,12 @@ getANodeOfType
|
||||
| puppeteer | | index.ts:26:8:26:21 | * as puppeteer |
|
||||
| puppeteer | Browser | index.ts:30:22:30:33 | this.browser |
|
||||
getANodeOfTypeRaw
|
||||
| body-parser | | index.ts:4:20:4:41 | require ... arser") |
|
||||
| express | | index.ts:3:17:3:34 | require("express") |
|
||||
| mongodb | | index.ts:1:8:1:19 | * as mongodb |
|
||||
| mongodb | Collection | index.ts:14:3:14:17 | getCollection() |
|
||||
| mongoose | | index.ts:17:8:17:20 | * as mongoose |
|
||||
| mongoose | Model | index.ts:22:3:22:20 | getMongooseModel() |
|
||||
| mongoose | Query | index.ts:23:3:23:20 | getMongooseQuery() |
|
||||
| puppeteer | | index.ts:26:8:26:21 | * as puppeteer |
|
||||
| puppeteer | Browser | index.ts:30:22:30:33 | this.browser |
|
||||
|
||||
@@ -147,3 +147,4 @@ syntaxErrors
|
||||
| Member[foo]Member[bar] |
|
||||
| Member[foo]] |
|
||||
| Member[foo]].Member[bar] |
|
||||
warning
|
||||
|
||||
@@ -4,17 +4,17 @@ import semmle.javascript.frameworks.data.internal.AccessPathSyntax as AccessPath
|
||||
|
||||
class Steps extends ModelInput::SummaryModelCsv {
|
||||
override predicate row(string row) {
|
||||
// package;type;path;input;output;kind
|
||||
// type;path;input;output;kind
|
||||
row =
|
||||
[
|
||||
"testlib;;Member[preserveTaint];Argument[0];ReturnValue;taint",
|
||||
"testlib;;Member[taintIntoCallback];Argument[0];Argument[1..2].Parameter[0];taint",
|
||||
"testlib;;Member[taintIntoCallbackThis];Argument[0];Argument[1..2].Parameter[this];taint",
|
||||
"testlib;;Member[preserveArgZeroAndTwo];Argument[0,2];ReturnValue;taint",
|
||||
"testlib;;Member[preserveAllButFirstArgument];Argument[1..];ReturnValue;taint",
|
||||
"testlib;;Member[preserveAllIfCall].Call;Argument[0..];ReturnValue;taint",
|
||||
"testlib;;Member[getSource].ReturnValue.Member[continue];Argument[this];ReturnValue;taint",
|
||||
"testlib;~HasThisFlow;;;Member[getThis].ReturnValue;type",
|
||||
"testlib;Member[preserveTaint];Argument[0];ReturnValue;taint",
|
||||
"testlib;Member[taintIntoCallback];Argument[0];Argument[1..2].Parameter[0];taint",
|
||||
"testlib;Member[taintIntoCallbackThis];Argument[0];Argument[1..2].Parameter[this];taint",
|
||||
"testlib;Member[preserveArgZeroAndTwo];Argument[0,2];ReturnValue;taint",
|
||||
"testlib;Member[preserveAllButFirstArgument];Argument[1..];ReturnValue;taint",
|
||||
"testlib;Member[preserveAllIfCall].Call;Argument[0..];ReturnValue;taint",
|
||||
"testlib;Member[getSource].ReturnValue.Member[continue];Argument[this];ReturnValue;taint",
|
||||
"testlib.~HasThisFlow;;;Member[getThis].ReturnValue;type",
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -23,37 +23,37 @@ class TypeDefs extends ModelInput::TypeModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"testlib;~HasThisFlow;testlib;;Member[typevar]",
|
||||
"testlib;~HasThisFlow;testlib;~HasThisFlow;Member[left,right,x]",
|
||||
"testlib.~HasThisFlow;testlib;Member[typevar]",
|
||||
"testlib.~HasThisFlow;testlib.~HasThisFlow;Member[left,right,x]",
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
class Sinks extends ModelInput::SinkModelCsv {
|
||||
override predicate row(string row) {
|
||||
// package;type;path;kind
|
||||
// type;path;kind
|
||||
row =
|
||||
[
|
||||
"testlib;;Member[mySink].Argument[0];test-sink",
|
||||
"testlib;;Member[mySinkIfCall].Call.Argument[0];test-sink",
|
||||
"testlib;;Member[mySinkIfNew].NewCall.Argument[0];test-sink",
|
||||
"testlib;;Member[mySinkLast].Argument[N-1];test-sink",
|
||||
"testlib;;Member[mySinkSecondLast].Argument[N-2];test-sink",
|
||||
"testlib;;Member[mySinkTwoLast].Argument[N-1,N-2];test-sink",
|
||||
"testlib;;Member[mySinkTwoLastRange].Argument[N-2..N-1];test-sink",
|
||||
"testlib;;Member[mySinkExceptLast].Argument[0..N-2];test-sink",
|
||||
"testlib;;Member[mySinkIfArityTwo].WithArity[2].Argument[0];test-sink",
|
||||
"testlib;;Member[sink1, sink2, sink3 ].Argument[0];test-sink",
|
||||
"testlib;;Member[ClassDecorator].DecoratedClass.Instance.Member[returnValueIsSink].ReturnValue;test-sink",
|
||||
"testlib;;Member[FieldDecoratorSink].DecoratedMember;test-sink",
|
||||
"testlib;;Member[MethodDecorator].DecoratedMember.ReturnValue;test-sink",
|
||||
"testlib;;Member[MethodDecoratorWithArgs].ReturnValue.DecoratedMember.ReturnValue;test-sink",
|
||||
"testlib;;Member[ParamDecoratorSink].DecoratedParameter;test-sink",
|
||||
"testlib;;AnyMember.Member[memberSink].Argument[0];test-sink",
|
||||
"testlib;;Member[overloadedSink].WithStringArgument[0=danger].Argument[1];test-sink",
|
||||
"testlib;;Member[typevar].TypeVar[ABC].Member[mySink].Argument[0];test-sink",
|
||||
"testlib;;Member[typevar].TypeVar[ABC].TypeVar[ABC].Member[mySink].Argument[1];test-sink",
|
||||
"testlib;;Member[typevar].TypeVar[LeftRight].Member[mySink].Argument[0];test-sink",
|
||||
"testlib;Member[mySink].Argument[0];test-sink",
|
||||
"testlib;Member[mySinkIfCall].Call.Argument[0];test-sink",
|
||||
"testlib;Member[mySinkIfNew].NewCall.Argument[0];test-sink",
|
||||
"testlib;Member[mySinkLast].Argument[N-1];test-sink",
|
||||
"testlib;Member[mySinkSecondLast].Argument[N-2];test-sink",
|
||||
"testlib;Member[mySinkTwoLast].Argument[N-1,N-2];test-sink",
|
||||
"testlib;Member[mySinkTwoLastRange].Argument[N-2..N-1];test-sink",
|
||||
"testlib;Member[mySinkExceptLast].Argument[0..N-2];test-sink",
|
||||
"testlib;Member[mySinkIfArityTwo].WithArity[2].Argument[0];test-sink",
|
||||
"testlib;Member[sink1, sink2, sink3 ].Argument[0];test-sink",
|
||||
"testlib;Member[ClassDecorator].DecoratedClass.Instance.Member[returnValueIsSink].ReturnValue;test-sink",
|
||||
"testlib;Member[FieldDecoratorSink].DecoratedMember;test-sink",
|
||||
"testlib;Member[MethodDecorator].DecoratedMember.ReturnValue;test-sink",
|
||||
"testlib;Member[MethodDecoratorWithArgs].ReturnValue.DecoratedMember.ReturnValue;test-sink",
|
||||
"testlib;Member[ParamDecoratorSink].DecoratedParameter;test-sink",
|
||||
"testlib;AnyMember.Member[memberSink].Argument[0];test-sink",
|
||||
"testlib;Member[overloadedSink].WithStringArgument[0=danger].Argument[1];test-sink",
|
||||
"testlib;Member[typevar].TypeVar[ABC].Member[mySink].Argument[0];test-sink",
|
||||
"testlib;Member[typevar].TypeVar[ABC].TypeVar[ABC].Member[mySink].Argument[1];test-sink",
|
||||
"testlib;Member[typevar].TypeVar[LeftRight].Member[mySink].Argument[0];test-sink",
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -73,12 +73,12 @@ class Sources extends ModelInput::SourceModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"testlib;;Member[getSource].ReturnValue;test-source",
|
||||
"testlib;;Member[ClassDecorator].DecoratedClass.Instance.Member[inputIsSource].Parameter[0];test-source",
|
||||
"testlib;;Member[FieldDecoratorSource].DecoratedMember;test-source",
|
||||
"testlib;;Member[ParamDecoratorSource].DecoratedParameter;test-source",
|
||||
"testlib;;Member[MethodDecorator].DecoratedMember.Parameter[0];test-source",
|
||||
"testlib;;Member[MethodDecoratorWithArgs].ReturnValue.DecoratedMember.Parameter[0];test-source",
|
||||
"testlib;Member[getSource].ReturnValue;test-source",
|
||||
"testlib;Member[ClassDecorator].DecoratedClass.Instance.Member[inputIsSource].Parameter[0];test-source",
|
||||
"testlib;Member[FieldDecoratorSource].DecoratedMember;test-source",
|
||||
"testlib;Member[ParamDecoratorSource].DecoratedParameter;test-source",
|
||||
"testlib;Member[MethodDecorator].DecoratedMember.Parameter[0];test-source",
|
||||
"testlib;Member[MethodDecoratorWithArgs].ReturnValue.DecoratedMember.Parameter[0];test-source",
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -111,15 +111,20 @@ class SyntaxErrorTest extends ModelInput::SinkModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"testlib;;Member[foo],Member[bar];test-sink", "testlib;;Member[foo] Member[bar];test-sink",
|
||||
"testlib;;Member[foo]. Member[bar];test-sink",
|
||||
"testlib;;Member[foo], Member[bar];test-sink",
|
||||
"testlib;;Member[foo]..Member[bar];test-sink",
|
||||
"testlib;;Member[foo] .Member[bar];test-sink", "testlib;;Member[foo]Member[bar];test-sink",
|
||||
"testlib;;Member[foo;test-sink", "testlib;;Member[foo]];test-sink",
|
||||
"testlib;;Member[foo]].Member[bar];test-sink"
|
||||
"testlib;Member[foo],Member[bar];test-sink", //
|
||||
"testlib;Member[foo] Member[bar];test-sink", //
|
||||
"testlib;Member[foo]. Member[bar];test-sink", //
|
||||
"testlib;Member[foo], Member[bar];test-sink", //
|
||||
"testlib;Member[foo]..Member[bar];test-sink", //
|
||||
"testlib;Member[foo] .Member[bar];test-sink", //
|
||||
"testlib;Member[foo]Member[bar];test-sink", //
|
||||
"testlib;Member[foo;test-sink", //
|
||||
"testlib;Member[foo]];test-sink", //
|
||||
"testlib;Member[foo]].Member[bar];test-sink"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
query predicate syntaxErrors(AccessPathSyntax::AccessPath path) { path.hasSyntaxError() }
|
||||
|
||||
query predicate warning = ModelOutput::getAWarning/0;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
| CSV type row should have 5 columns but has 2: test;TooFewColumns |
|
||||
| CSV type row should have 5 columns but has 8: test;TooManyColumns;;;Member[Foo].Instance;too;many;columns |
|
||||
| CSV type row should have 3 columns but has 1: test.TooFewColumns |
|
||||
| CSV type row should have 3 columns but has 6: test.TooManyColumns;;Member[Foo].Instance;too;many;columns |
|
||||
| Invalid argument '0-1' in token 'Argument[0-1]' in access path: Method[foo].Argument[0-1] |
|
||||
| Invalid argument '*' in token 'Argument[*]' in access path: Method[foo].Argument[*] |
|
||||
| Invalid token 'Argument' is missing its arguments, in access path: Method[foo].Argument |
|
||||
|
||||
@@ -6,13 +6,13 @@ private class InvalidTypeModel extends ModelInput::TypeModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"test;TooManyColumns;;;Member[Foo].Instance;too;many;columns", //
|
||||
"test;TooFewColumns", //
|
||||
"test;X;test;Y;Method[foo].Arg[0]", //
|
||||
"test;X;test;Y;Method[foo].Argument[0-1]", //
|
||||
"test;X;test;Y;Method[foo].Argument[*]", //
|
||||
"test;X;test;Y;Method[foo].Argument", //
|
||||
"test;X;test;Y;Method[foo].Member", //
|
||||
"test.TooManyColumns;;Member[Foo].Instance;too;many;columns", //
|
||||
"test.TooFewColumns", //
|
||||
"test.X;test.Y;Method[foo].Arg[0]", //
|
||||
"test.X;test.Y;Method[foo].Argument[0-1]", //
|
||||
"test.X;test.Y;Method[foo].Argument[*]", //
|
||||
"test.X;test.Y;Method[foo].Argument", //
|
||||
"test.X;test.Y;Method[foo].Member", //
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -520,7 +520,8 @@ module Private {
|
||||
predicate summaryParameterNodeRange(SummarizedCallable c, ParameterPosition pos) {
|
||||
parameterReadState(c, _, pos)
|
||||
or
|
||||
isParameterPostUpdate(_, c, pos)
|
||||
// Same as `isParameterPostUpdate(_, c, pos)`, but can be used in a negative context
|
||||
any(SummaryNodeState state).isOutputState(c, SummaryComponentStack::argument(pos))
|
||||
}
|
||||
|
||||
private predicate callbackOutput(
|
||||
|
||||
@@ -13,35 +13,36 @@ private import semmle.python.frameworks.data.ModelsAsData
|
||||
private module Asyncpg {
|
||||
class AsyncpgModel extends ModelInput::TypeModelCsv {
|
||||
override predicate row(string row) {
|
||||
// package1;type1;package2;type2;path
|
||||
// type1;type2;path
|
||||
row =
|
||||
[
|
||||
// a `ConnectionPool` that is created when the result of `asyncpg.create_pool()` is awaited.
|
||||
"asyncpg;ConnectionPool;asyncpg;;Member[create_pool].ReturnValue.Awaited",
|
||||
"asyncpg.ConnectionPool;asyncpg;Member[create_pool].ReturnValue.Awaited",
|
||||
// a `Connection` that is created when
|
||||
// * - the result of `asyncpg.connect()` is awaited.
|
||||
// * - the result of calling `acquire` on a `ConnectionPool` is awaited.
|
||||
"asyncpg;Connection;asyncpg;;Member[connect].ReturnValue.Awaited",
|
||||
"asyncpg;Connection;asyncpg;ConnectionPool;Member[acquire].ReturnValue.Awaited",
|
||||
"asyncpg.Connection;asyncpg;Member[connect].ReturnValue.Awaited",
|
||||
"asyncpg.Connection;asyncpg.ConnectionPool;Member[acquire].ReturnValue.Awaited",
|
||||
// Creating an internal `~Connection` type that contains both `Connection` and `ConnectionPool`.
|
||||
"asyncpg;~Connection;asyncpg;Connection;", "asyncpg;~Connection;asyncpg;ConnectionPool;"
|
||||
"asyncpg.~Connection;asyncpg.Connection;", //
|
||||
"asyncpg.~Connection;asyncpg.ConnectionPool;"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
class AsyncpgSink extends ModelInput::SinkModelCsv {
|
||||
// package;type;path;kind
|
||||
// type;path;kind
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
// `Connection`s and `ConnectionPool`s provide some methods that execute SQL.
|
||||
"asyncpg;~Connection;Member[copy_from_query,execute,fetch,fetchrow,fetchval].Argument[0,query:];sql-injection",
|
||||
"asyncpg;~Connection;Member[executemany].Argument[0,command:];sql-injection",
|
||||
"asyncpg.~Connection;Member[copy_from_query,execute,fetch,fetchrow,fetchval].Argument[0,query:];sql-injection",
|
||||
"asyncpg.~Connection;Member[executemany].Argument[0,command:];sql-injection",
|
||||
// A model of `Connection` and `ConnectionPool`, which provide some methods that access the file system.
|
||||
"asyncpg;~Connection;Member[copy_from_query,copy_from_table].Argument[output:];path-injection",
|
||||
"asyncpg;~Connection;Member[copy_to_table].Argument[source:];path-injection",
|
||||
"asyncpg.~Connection;Member[copy_from_query,copy_from_table].Argument[output:];path-injection",
|
||||
"asyncpg.~Connection;Member[copy_to_table].Argument[source:];path-injection",
|
||||
// the `PreparedStatement` class in `asyncpg`.
|
||||
"asyncpg;Connection;Member[prepare].Argument[0,query:];sql-injection",
|
||||
"asyncpg.Connection;Member[prepare].Argument[0,query:];sql-injection",
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -58,7 +59,7 @@ private module Asyncpg {
|
||||
module Cursor {
|
||||
class CursorConstruction extends SqlConstruction::Range, API::CallNode {
|
||||
CursorConstruction() {
|
||||
this = ModelOutput::getATypeNode("asyncpg", "Connection").getMember("cursor").getACall()
|
||||
this = ModelOutput::getATypeNode("asyncpg.Connection").getMember("cursor").getACall()
|
||||
}
|
||||
|
||||
override DataFlow::Node getSql() { result = this.getParameter(0, "query").asSink() }
|
||||
@@ -76,7 +77,7 @@ private module Asyncpg {
|
||||
or
|
||||
exists(API::CallNode prepareCall |
|
||||
prepareCall =
|
||||
ModelOutput::getATypeNode("asyncpg", "Connection").getMember("prepare").getACall()
|
||||
ModelOutput::getATypeNode("asyncpg.Connection").getMember("prepare").getACall()
|
||||
|
|
||||
sql = prepareCall.getParameter(0, "query").asSink() and
|
||||
this =
|
||||
|
||||
@@ -5,23 +5,20 @@
|
||||
*
|
||||
* The CSV specification has the following columns:
|
||||
* - Sources:
|
||||
* `package; type; path; kind`
|
||||
* `type; path; kind`
|
||||
* - Sinks:
|
||||
* `package; type; path; kind`
|
||||
* `type; path; kind`
|
||||
* - Summaries:
|
||||
* `package; type; path; input; output; kind`
|
||||
* `type; path; input; output; kind`
|
||||
* - Types:
|
||||
* `package1; type1; package2; type2; path`
|
||||
* `type1; type2; path`
|
||||
*
|
||||
* The interpretation of a row is similar to API-graphs with a left-to-right
|
||||
* reading.
|
||||
* 1. The `package` column selects a package name, as it would be referenced in the source code,
|
||||
* such as an NPM package, PIP package, or Ruby gem. (See `ModelsAsData.qll` for language-specific details).
|
||||
* It may also be a synthetic package used for a type definition (see type definitions below).
|
||||
* 2. The `type` column selects all instances of a named type originating from that package,
|
||||
* or the empty string if referring to the package itself.
|
||||
* 1. The `type` column selects all instances of a named type. The syntax of this column is language-specific.
|
||||
* The language defines some type names that the analysis knows how to identify without models.
|
||||
* It can also be a synthetic type name defined by a type definition (see type definitions below).
|
||||
* 3. The `path` column is a `.`-separated list of "access path tokens" to resolve, starting at the node selected by `package` and `type`.
|
||||
* 2. The `path` column is a `.`-separated list of "access path tokens" to resolve, starting at the node selected by `type`.
|
||||
*
|
||||
* Every language supports the following tokens:
|
||||
* - Argument[n]: the n-th argument to a call. May be a range of form `x..y` (inclusive) and/or a comma-separated list.
|
||||
@@ -42,10 +39,10 @@
|
||||
*
|
||||
* For the time being, please consult `ApiGraphModelsSpecific.qll` to see which language-specific tokens are currently supported.
|
||||
*
|
||||
* 4. The `input` and `output` columns specify how data enters and leaves the element selected by the
|
||||
* first `(package, type, path)` tuple. Both strings are `.`-separated access paths
|
||||
* 3. The `input` and `output` columns specify how data enters and leaves the element selected by the
|
||||
* first `(type, path)` tuple. Both strings are `.`-separated access paths
|
||||
* of the same syntax as the `path` column.
|
||||
* 5. The `kind` column is a tag that can be referenced from QL to determine to
|
||||
* 4. The `kind` column is a tag that can be referenced from QL to determine to
|
||||
* which classes the interpreted elements should be added. For example, for
|
||||
* sources `"remote"` indicates a default remote flow source, and for summaries
|
||||
* `"taint"` indicates a default additional taint step and `"value"` indicates a
|
||||
@@ -53,17 +50,17 @@
|
||||
*
|
||||
* ### Types
|
||||
*
|
||||
* A type row of form `package1; type1; package2; type2; path` indicates that `package2; type2; path`
|
||||
* should be seen as an instance of the type `package1; type1`.
|
||||
* A type row of form `type1; type2; path` indicates that `type2; path`
|
||||
* should be seen as an instance of the type `type1`.
|
||||
*
|
||||
* A `(package,type)` pair may refer to a static type or a synthetic type name used internally in the model.
|
||||
* A type may refer to a static type or a synthetic type name used internally in the model.
|
||||
* Synthetic type names can be used to reuse intermediate sub-paths, when there are multiple ways to access the same
|
||||
* element.
|
||||
* See `ModelsAsData.qll` for the language-specific interpretation of packages and static type names.
|
||||
* See `ModelsAsData.qll` for the language-specific interpretation of type names.
|
||||
*
|
||||
* By convention, if one wants to avoid clashes with static types from the package, the type name
|
||||
* should be prefixed with a tilde character (`~`). For example, `(foo, ~Bar)` can be used to indicate that
|
||||
* the type is related to the `foo` package but is not intended to match a static type.
|
||||
* By convention, if one wants to avoid clashes with static types, the type name
|
||||
* should be prefixed with a tilde character (`~`). For example, `~Bar` can be used to indicate that
|
||||
* the type is not intended to match a static type.
|
||||
*/
|
||||
|
||||
private import ApiGraphModelsSpecific as Specific
|
||||
@@ -89,9 +86,9 @@ module ModelInput {
|
||||
*
|
||||
* A row of form
|
||||
* ```
|
||||
* package;type;path;kind
|
||||
* type;path;kind
|
||||
* ```
|
||||
* indicates that the value at `(package, type, path)` should be seen as a flow
|
||||
* indicates that the value at `(type, path)` should be seen as a flow
|
||||
* source of the given `kind`.
|
||||
*
|
||||
* The kind `remote` represents a general remote flow source.
|
||||
@@ -110,9 +107,9 @@ module ModelInput {
|
||||
*
|
||||
* A row of form
|
||||
* ```
|
||||
* package;type;path;kind
|
||||
* type;path;kind
|
||||
* ```
|
||||
* indicates that the value at `(package, type, path)` should be seen as a sink
|
||||
* indicates that the value at `(type, path)` should be seen as a sink
|
||||
* of the given `kind`.
|
||||
*/
|
||||
abstract predicate row(string row);
|
||||
@@ -129,9 +126,9 @@ module ModelInput {
|
||||
*
|
||||
* A row of form
|
||||
* ```
|
||||
* package;type;path;input;output;kind
|
||||
* type;path;input;output;kind
|
||||
* ```
|
||||
* indicates that for each call to `(package, type, path)`, the value referred to by `input`
|
||||
* indicates that for each call to `(type, path)`, the value referred to by `input`
|
||||
* can flow to the value referred to by `output`.
|
||||
*
|
||||
* `kind` should be either `value` or `taint`, for value-preserving or taint-preserving steps,
|
||||
@@ -151,9 +148,9 @@ module ModelInput {
|
||||
*
|
||||
* A row of form,
|
||||
* ```
|
||||
* package1;type1;package2;type2;path
|
||||
* type1;type2;path
|
||||
* ```
|
||||
* indicates that `(package2, type2, path)` should be seen as an instance of `(package1, type1)`.
|
||||
* indicates that `(type2, path)` should be seen as an instance of `type1`.
|
||||
*/
|
||||
abstract predicate row(string row);
|
||||
}
|
||||
@@ -163,28 +160,28 @@ module ModelInput {
|
||||
*/
|
||||
class TypeModel extends Unit {
|
||||
/**
|
||||
* Gets a data-flow node that is a source of the type `package;type`.
|
||||
* Gets a data-flow node that is a source of the given `type`.
|
||||
*
|
||||
* This must not depend on API graphs, but ensures that an API node is generated for
|
||||
* the source.
|
||||
*/
|
||||
DataFlow::Node getASource(string package, string type) { none() }
|
||||
DataFlow::Node getASource(string type) { none() }
|
||||
|
||||
/**
|
||||
* Gets a data-flow node that is a sink of the type `package;type`,
|
||||
* Gets a data-flow node that is a sink of the given `type`,
|
||||
* usually because it is an argument passed to a parameter of that type.
|
||||
*
|
||||
* This must not depend on API graphs, but ensures that an API node is generated for
|
||||
* the sink.
|
||||
*/
|
||||
DataFlow::Node getASink(string package, string type) { none() }
|
||||
DataFlow::Node getASink(string type) { none() }
|
||||
|
||||
/**
|
||||
* Gets an API node that is a source or sink of the type `package;type`.
|
||||
* Gets an API node that is a source or sink of the given `type`.
|
||||
*
|
||||
* Unlike `getASource` and `getASink`, this may depend on API graphs.
|
||||
*/
|
||||
API::Node getAnApiNode(string package, string type) { none() }
|
||||
API::Node getAnApiNode(string type) { none() }
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -209,7 +206,7 @@ private import ModelInput
|
||||
/**
|
||||
* An empty class, except in specific tests.
|
||||
*
|
||||
* If this is non-empty, all models are parsed even if the package is not
|
||||
* If this is non-empty, all models are parsed even if the type name is not
|
||||
* considered relevant for the current database.
|
||||
*/
|
||||
abstract class TestAllModels extends Unit { }
|
||||
@@ -232,53 +229,44 @@ private predicate typeModel(string row) { any(TypeModelCsv s).row(inversePad(row
|
||||
private predicate typeVariableModel(string row) { any(TypeVariableModelCsv s).row(inversePad(row)) }
|
||||
|
||||
/** Holds if a source model exists for the given parameters. */
|
||||
predicate sourceModel(string package, string type, string path, string kind) {
|
||||
predicate sourceModel(string type, string path, string kind) {
|
||||
exists(string row |
|
||||
sourceModel(row) and
|
||||
row.splitAt(";", 0) = package and
|
||||
row.splitAt(";", 1) = type and
|
||||
row.splitAt(";", 2) = path and
|
||||
row.splitAt(";", 3) = kind
|
||||
row.splitAt(";", 0) = type and
|
||||
row.splitAt(";", 1) = path and
|
||||
row.splitAt(";", 2) = kind
|
||||
)
|
||||
}
|
||||
|
||||
/** Holds if a sink model exists for the given parameters. */
|
||||
private predicate sinkModel(string package, string type, string path, string kind) {
|
||||
private predicate sinkModel(string type, string path, string kind) {
|
||||
exists(string row |
|
||||
sinkModel(row) and
|
||||
row.splitAt(";", 0) = package and
|
||||
row.splitAt(";", 1) = type and
|
||||
row.splitAt(";", 2) = path and
|
||||
row.splitAt(";", 3) = kind
|
||||
row.splitAt(";", 0) = type and
|
||||
row.splitAt(";", 1) = path and
|
||||
row.splitAt(";", 2) = kind
|
||||
)
|
||||
}
|
||||
|
||||
/** Holds if a summary model `row` exists for the given parameters. */
|
||||
private predicate summaryModel(
|
||||
string package, string type, string path, string input, string output, string kind
|
||||
) {
|
||||
private predicate summaryModel(string type, string path, string input, string output, string kind) {
|
||||
exists(string row |
|
||||
summaryModel(row) and
|
||||
row.splitAt(";", 0) = package and
|
||||
row.splitAt(";", 1) = type and
|
||||
row.splitAt(";", 2) = path and
|
||||
row.splitAt(";", 3) = input and
|
||||
row.splitAt(";", 4) = output and
|
||||
row.splitAt(";", 5) = kind
|
||||
row.splitAt(";", 0) = type and
|
||||
row.splitAt(";", 1) = path and
|
||||
row.splitAt(";", 2) = input and
|
||||
row.splitAt(";", 3) = output and
|
||||
row.splitAt(";", 4) = kind
|
||||
)
|
||||
}
|
||||
|
||||
/** Holds if a type model exists for the given parameters. */
|
||||
private predicate typeModel(
|
||||
string package1, string type1, string package2, string type2, string path
|
||||
) {
|
||||
private predicate typeModel(string type1, string type2, string path) {
|
||||
exists(string row |
|
||||
typeModel(row) and
|
||||
row.splitAt(";", 0) = package1 and
|
||||
row.splitAt(";", 1) = type1 and
|
||||
row.splitAt(";", 2) = package2 and
|
||||
row.splitAt(";", 3) = type2 and
|
||||
row.splitAt(";", 4) = path
|
||||
row.splitAt(";", 0) = type1 and
|
||||
row.splitAt(";", 1) = type2 and
|
||||
row.splitAt(";", 2) = path
|
||||
)
|
||||
}
|
||||
|
||||
@@ -292,61 +280,50 @@ private predicate typeVariableModel(string name, string path) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a package that should be seen as an alias for the given other `package`,
|
||||
* or the `package` itself.
|
||||
* Holds if CSV rows involving `type` might be relevant for the analysis of this database.
|
||||
*/
|
||||
bindingset[package]
|
||||
bindingset[result]
|
||||
string getAPackageAlias(string package) {
|
||||
typeModel(package, "", result, "", "")
|
||||
or
|
||||
result = package
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if CSV rows involving `package` might be relevant for the analysis of this database.
|
||||
*/
|
||||
private predicate isRelevantPackage(string package) {
|
||||
predicate isRelevantType(string type) {
|
||||
(
|
||||
sourceModel(package, _, _, _) or
|
||||
sinkModel(package, _, _, _) or
|
||||
summaryModel(package, _, _, _, _, _) or
|
||||
typeModel(_, _, package, _, _)
|
||||
sourceModel(type, _, _) or
|
||||
sinkModel(type, _, _) or
|
||||
summaryModel(type, _, _, _, _) or
|
||||
typeModel(_, type, _)
|
||||
) and
|
||||
(
|
||||
Specific::isPackageUsed(package)
|
||||
Specific::isTypeUsed(type)
|
||||
or
|
||||
exists(TestAllModels t)
|
||||
)
|
||||
or
|
||||
exists(string other |
|
||||
isRelevantPackage(other) and
|
||||
typeModel(package, _, other, _, _)
|
||||
exists(string other | isRelevantType(other) |
|
||||
typeModel(type, other, _)
|
||||
or
|
||||
Specific::hasImplicitTypeModel(type, other)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `package,type,path` is used in some CSV row.
|
||||
* Holds if `type,path` is used in some CSV row.
|
||||
*/
|
||||
pragma[nomagic]
|
||||
predicate isRelevantFullPath(string package, string type, string path) {
|
||||
isRelevantPackage(package) and
|
||||
predicate isRelevantFullPath(string type, string path) {
|
||||
isRelevantType(type) and
|
||||
(
|
||||
sourceModel(package, type, path, _) or
|
||||
sinkModel(package, type, path, _) or
|
||||
summaryModel(package, type, path, _, _, _) or
|
||||
typeModel(_, _, package, type, path)
|
||||
sourceModel(type, path, _) or
|
||||
sinkModel(type, path, _) or
|
||||
summaryModel(type, path, _, _, _) or
|
||||
typeModel(_, type, path)
|
||||
)
|
||||
}
|
||||
|
||||
/** A string from a CSV row that should be parsed as an access path. */
|
||||
private class AccessPathRange extends AccessPath::Range {
|
||||
AccessPathRange() {
|
||||
isRelevantFullPath(_, _, this)
|
||||
isRelevantFullPath(_, this)
|
||||
or
|
||||
exists(string package | isRelevantPackage(package) |
|
||||
summaryModel(package, _, _, this, _, _) or
|
||||
summaryModel(package, _, _, _, this, _)
|
||||
exists(string type | isRelevantType(type) |
|
||||
summaryModel(type, _, this, _, _) or
|
||||
summaryModel(type, _, _, this, _)
|
||||
)
|
||||
or
|
||||
typeVariableModel(_, this)
|
||||
@@ -400,83 +377,73 @@ private predicate invocationMatchesCallSiteFilter(Specific::InvokeNode invoke, A
|
||||
}
|
||||
|
||||
private class TypeModelUseEntry extends API::EntryPoint {
|
||||
private string package;
|
||||
private string type;
|
||||
|
||||
TypeModelUseEntry() {
|
||||
exists(any(TypeModel tm).getASource(package, type)) and
|
||||
this = "TypeModelUseEntry;" + package + ";" + type
|
||||
exists(any(TypeModel tm).getASource(type)) and
|
||||
this = "TypeModelUseEntry;" + type
|
||||
}
|
||||
|
||||
override DataFlow::LocalSourceNode getASource() {
|
||||
result = any(TypeModel tm).getASource(package, type)
|
||||
}
|
||||
override DataFlow::LocalSourceNode getASource() { result = any(TypeModel tm).getASource(type) }
|
||||
|
||||
API::Node getNodeForType(string package_, string type_) {
|
||||
package = package_ and type = type_ and result = this.getANode()
|
||||
}
|
||||
API::Node getNodeForType(string type_) { type = type_ and result = this.getANode() }
|
||||
}
|
||||
|
||||
private class TypeModelDefEntry extends API::EntryPoint {
|
||||
private string package;
|
||||
private string type;
|
||||
|
||||
TypeModelDefEntry() {
|
||||
exists(any(TypeModel tm).getASink(package, type)) and
|
||||
this = "TypeModelDefEntry;" + package + ";" + type
|
||||
exists(any(TypeModel tm).getASink(type)) and
|
||||
this = "TypeModelDefEntry;" + type
|
||||
}
|
||||
|
||||
override DataFlow::Node getASink() { result = any(TypeModel tm).getASink(package, type) }
|
||||
override DataFlow::Node getASink() { result = any(TypeModel tm).getASink(type) }
|
||||
|
||||
API::Node getNodeForType(string package_, string type_) {
|
||||
package = package_ and type = type_ and result = this.getANode()
|
||||
}
|
||||
API::Node getNodeForType(string type_) { type = type_ and result = this.getANode() }
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an API node identified by the given `(package,type)` pair.
|
||||
* Gets an API node identified by the given `type`.
|
||||
*/
|
||||
pragma[nomagic]
|
||||
private API::Node getNodeFromType(string package, string type) {
|
||||
exists(string package2, string type2, AccessPath path2 |
|
||||
typeModel(package, type, package2, type2, path2) and
|
||||
result = getNodeFromPath(package2, type2, path2)
|
||||
private API::Node getNodeFromType(string type) {
|
||||
exists(string type2, AccessPath path2 |
|
||||
typeModel(type, type2, path2) and
|
||||
result = getNodeFromPath(type2, path2)
|
||||
)
|
||||
or
|
||||
result = any(TypeModelUseEntry e).getNodeForType(package, type)
|
||||
result = any(TypeModelUseEntry e).getNodeForType(type)
|
||||
or
|
||||
result = any(TypeModelDefEntry e).getNodeForType(package, type)
|
||||
result = any(TypeModelDefEntry e).getNodeForType(type)
|
||||
or
|
||||
result = any(TypeModel t).getAnApiNode(package, type)
|
||||
result = any(TypeModel t).getAnApiNode(type)
|
||||
or
|
||||
result = Specific::getExtraNodeFromType(package, type)
|
||||
result = Specific::getExtraNodeFromType(type)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the API node identified by the first `n` tokens of `path` in the given `(package, type, path)` tuple.
|
||||
* Gets the API node identified by the first `n` tokens of `path` in the given `(type, path)` tuple.
|
||||
*/
|
||||
pragma[nomagic]
|
||||
private API::Node getNodeFromPath(string package, string type, AccessPath path, int n) {
|
||||
isRelevantFullPath(package, type, path) and
|
||||
private API::Node getNodeFromPath(string type, AccessPath path, int n) {
|
||||
isRelevantFullPath(type, path) and
|
||||
(
|
||||
n = 0 and
|
||||
result = getNodeFromType(package, type)
|
||||
result = getNodeFromType(type)
|
||||
or
|
||||
result = Specific::getExtraNodeFromPath(package, type, path, n)
|
||||
result = Specific::getExtraNodeFromPath(type, path, n)
|
||||
)
|
||||
or
|
||||
result = getSuccessorFromNode(getNodeFromPath(package, type, path, n - 1), path.getToken(n - 1))
|
||||
result = getSuccessorFromNode(getNodeFromPath(type, path, n - 1), path.getToken(n - 1))
|
||||
or
|
||||
// Similar to the other recursive case, but where the path may have stepped through one or more call-site filters
|
||||
result =
|
||||
getSuccessorFromInvoke(getInvocationFromPath(package, type, path, n - 1), path.getToken(n - 1))
|
||||
result = getSuccessorFromInvoke(getInvocationFromPath(type, path, n - 1), path.getToken(n - 1))
|
||||
or
|
||||
// Apply a subpath
|
||||
result =
|
||||
getNodeFromSubPath(getNodeFromPath(package, type, path, n - 1), getSubPathAt(path, n - 1))
|
||||
result = getNodeFromSubPath(getNodeFromPath(type, path, n - 1), getSubPathAt(path, n - 1))
|
||||
or
|
||||
// Apply a type step
|
||||
typeStep(getNodeFromPath(package, type, path, n), result)
|
||||
typeStep(getNodeFromPath(type, path, n), result)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -496,15 +463,15 @@ private AccessPath getSubPathAt(AccessPath path, int n) {
|
||||
pragma[nomagic]
|
||||
private API::Node getNodeFromSubPath(API::Node base, AccessPath subPath, int n) {
|
||||
exists(AccessPath path, int k |
|
||||
base = [getNodeFromPath(_, _, path, k), getNodeFromSubPath(_, path, k)] and
|
||||
base = [getNodeFromPath(_, path, k), getNodeFromSubPath(_, path, k)] and
|
||||
subPath = getSubPathAt(path, k) and
|
||||
result = base and
|
||||
n = 0
|
||||
)
|
||||
or
|
||||
exists(string package, string type, AccessPath basePath |
|
||||
typeStepModel(package, type, basePath, subPath) and
|
||||
base = getNodeFromPath(package, type, basePath) and
|
||||
exists(string type, AccessPath basePath |
|
||||
typeStepModel(type, basePath, subPath) and
|
||||
base = getNodeFromPath(type, basePath) and
|
||||
result = base and
|
||||
n = 0
|
||||
)
|
||||
@@ -543,42 +510,40 @@ private API::Node getNodeFromSubPath(API::Node base, AccessPath subPath) {
|
||||
result = getNodeFromSubPath(base, subPath, subPath.getNumToken())
|
||||
}
|
||||
|
||||
/** Gets the node identified by the given `(package, type, path)` tuple. */
|
||||
private API::Node getNodeFromPath(string package, string type, AccessPath path) {
|
||||
result = getNodeFromPath(package, type, path, path.getNumToken())
|
||||
/** Gets the node identified by the given `(type, path)` tuple. */
|
||||
private API::Node getNodeFromPath(string type, AccessPath path) {
|
||||
result = getNodeFromPath(type, path, path.getNumToken())
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private predicate typeStepModel(string package, string type, AccessPath basePath, AccessPath output) {
|
||||
summaryModel(package, type, basePath, "", output, "type")
|
||||
private predicate typeStepModel(string type, AccessPath basePath, AccessPath output) {
|
||||
summaryModel(type, basePath, "", output, "type")
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private predicate typeStep(API::Node pred, API::Node succ) {
|
||||
exists(string package, string type, AccessPath basePath, AccessPath output |
|
||||
typeStepModel(package, type, basePath, output) and
|
||||
pred = getNodeFromPath(package, type, basePath) and
|
||||
exists(string type, AccessPath basePath, AccessPath output |
|
||||
typeStepModel(type, basePath, output) and
|
||||
pred = getNodeFromPath(type, basePath) and
|
||||
succ = getNodeFromSubPath(pred, output)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an invocation identified by the given `(package, type, path)` tuple.
|
||||
* Gets an invocation identified by the given `(type, path)` tuple.
|
||||
*
|
||||
* Unlike `getNodeFromPath`, the `path` may end with one or more call-site filters.
|
||||
*/
|
||||
private Specific::InvokeNode getInvocationFromPath(
|
||||
string package, string type, AccessPath path, int n
|
||||
) {
|
||||
result = Specific::getAnInvocationOf(getNodeFromPath(package, type, path, n))
|
||||
private Specific::InvokeNode getInvocationFromPath(string type, AccessPath path, int n) {
|
||||
result = Specific::getAnInvocationOf(getNodeFromPath(type, path, n))
|
||||
or
|
||||
result = getInvocationFromPath(package, type, path, n - 1) and
|
||||
result = getInvocationFromPath(type, path, n - 1) and
|
||||
invocationMatchesCallSiteFilter(result, path.getToken(n - 1))
|
||||
}
|
||||
|
||||
/** Gets an invocation identified by the given `(package, type, path)` tuple. */
|
||||
private Specific::InvokeNode getInvocationFromPath(string package, string type, AccessPath path) {
|
||||
result = getInvocationFromPath(package, type, path, path.getNumToken())
|
||||
/** Gets an invocation identified by the given `(type, path)` tuple. */
|
||||
private Specific::InvokeNode getInvocationFromPath(string type, AccessPath path) {
|
||||
result = getInvocationFromPath(type, path, path.getNumToken())
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -631,9 +596,9 @@ module ModelOutput {
|
||||
*/
|
||||
cached
|
||||
API::Node getASourceNode(string kind) {
|
||||
exists(string package, string type, string path |
|
||||
sourceModel(package, type, path, kind) and
|
||||
result = getNodeFromPath(package, type, path)
|
||||
exists(string type, string path |
|
||||
sourceModel(type, path, kind) and
|
||||
result = getNodeFromPath(type, path)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -642,9 +607,9 @@ module ModelOutput {
|
||||
*/
|
||||
cached
|
||||
API::Node getASinkNode(string kind) {
|
||||
exists(string package, string type, string path |
|
||||
sinkModel(package, type, path, kind) and
|
||||
result = getNodeFromPath(package, type, path)
|
||||
exists(string type, string path |
|
||||
sinkModel(type, path, kind) and
|
||||
result = getNodeFromPath(type, path)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -653,32 +618,31 @@ module ModelOutput {
|
||||
*/
|
||||
cached
|
||||
predicate relevantSummaryModel(
|
||||
string package, string type, string path, string input, string output, string kind
|
||||
string type, string path, string input, string output, string kind
|
||||
) {
|
||||
isRelevantPackage(package) and
|
||||
summaryModel(package, type, path, input, output, kind)
|
||||
isRelevantType(type) and
|
||||
summaryModel(type, path, input, output, kind)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if a `baseNode` is an invocation identified by the `package,type,path` part of a summary row.
|
||||
* Holds if a `baseNode` is an invocation identified by the `type,path` part of a summary row.
|
||||
*/
|
||||
cached
|
||||
predicate resolvedSummaryBase(
|
||||
string package, string type, string path, Specific::InvokeNode baseNode
|
||||
) {
|
||||
summaryModel(package, type, path, _, _, _) and
|
||||
baseNode = getInvocationFromPath(package, type, path)
|
||||
predicate resolvedSummaryBase(string type, string path, Specific::InvokeNode baseNode) {
|
||||
summaryModel(type, path, _, _, _) and
|
||||
baseNode = getInvocationFromPath(type, path)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `node` is seen as an instance of `(package,type)` due to a type definition
|
||||
* Holds if `node` is seen as an instance of `type` due to a type definition
|
||||
* contributed by a CSV model.
|
||||
*/
|
||||
cached
|
||||
API::Node getATypeNode(string package, string type) { result = getNodeFromType(package, type) }
|
||||
API::Node getATypeNode(string type) { result = getNodeFromType(type) }
|
||||
}
|
||||
|
||||
import Cached
|
||||
import Specific::ModelOutputSpecific
|
||||
|
||||
/**
|
||||
* Gets an error message relating to an invalid CSV row in a model.
|
||||
@@ -686,13 +650,13 @@ module ModelOutput {
|
||||
string getAWarning() {
|
||||
// Check number of columns
|
||||
exists(string row, string kind, int expectedArity, int actualArity |
|
||||
any(SourceModelCsv csv).row(row) and kind = "source" and expectedArity = 4
|
||||
any(SourceModelCsv csv).row(row) and kind = "source" and expectedArity = 3
|
||||
or
|
||||
any(SinkModelCsv csv).row(row) and kind = "sink" and expectedArity = 4
|
||||
any(SinkModelCsv csv).row(row) and kind = "sink" and expectedArity = 3
|
||||
or
|
||||
any(SummaryModelCsv csv).row(row) and kind = "summary" and expectedArity = 6
|
||||
any(SummaryModelCsv csv).row(row) and kind = "summary" and expectedArity = 5
|
||||
or
|
||||
any(TypeModelCsv csv).row(row) and kind = "type" and expectedArity = 5
|
||||
any(TypeModelCsv csv).row(row) and kind = "type" and expectedArity = 3
|
||||
or
|
||||
any(TypeVariableModelCsv csv).row(row) and kind = "type-variable" and expectedArity = 2
|
||||
|
|
||||
@@ -705,7 +669,7 @@ module ModelOutput {
|
||||
or
|
||||
// Check names and arguments of access path tokens
|
||||
exists(AccessPath path, AccessPathToken token |
|
||||
(isRelevantFullPath(_, _, path) or typeVariableModel(_, path)) and
|
||||
(isRelevantFullPath(_, path) or typeVariableModel(_, path)) and
|
||||
token = path.getToken(_)
|
||||
|
|
||||
not isValidTokenNameInIdentifyingAccessPath(token.getName()) and
|
||||
|
||||
@@ -31,19 +31,22 @@ import semmle.python.dataflow.new.DataFlow::DataFlow as DataFlow
|
||||
private import AccessPathSyntax
|
||||
|
||||
/**
|
||||
* Holds if models describing `package` may be relevant for the analysis of this database.
|
||||
* Holds if models describing `type` may be relevant for the analysis of this database.
|
||||
*/
|
||||
predicate isPackageUsed(string package) { API::moduleImportExists(package) }
|
||||
predicate isTypeUsed(string type) { API::moduleImportExists(type) }
|
||||
|
||||
/** Gets a Python-specific interpretation of the `(package, type, path)` tuple after resolving the first `n` access path tokens. */
|
||||
bindingset[package, type, path]
|
||||
API::Node getExtraNodeFromPath(string package, string type, AccessPath path, int n) { none() }
|
||||
/**
|
||||
* Holds if `type` can be obtained from an instance of `otherType` due to
|
||||
* language semantics modeled by `getExtraNodeFromType`.
|
||||
*/
|
||||
predicate hasImplicitTypeModel(string type, string otherType) { none() }
|
||||
|
||||
/** Gets a Python-specific interpretation of the `(package, type)` tuple. */
|
||||
API::Node getExtraNodeFromType(string package, string type) {
|
||||
type = "" and
|
||||
result = API::moduleImport(package)
|
||||
}
|
||||
/** Gets a Python-specific interpretation of the `(type, path)` tuple after resolving the first `n` access path tokens. */
|
||||
bindingset[type, path]
|
||||
API::Node getExtraNodeFromPath(string type, AccessPath path, int n) { none() }
|
||||
|
||||
/** Gets a Python-specific interpretation of the given `type`. */
|
||||
API::Node getExtraNodeFromType(string type) { result = API::moduleImport(type) }
|
||||
|
||||
/**
|
||||
* Gets a Python-specific API graph successor of `node` reachable by resolving `token`.
|
||||
@@ -121,9 +124,9 @@ predicate invocationMatchesExtraCallSiteFilter(API::CallNode invoke, AccessPathT
|
||||
*/
|
||||
pragma[nomagic]
|
||||
private predicate relevantInputOutputPath(API::CallNode base, AccessPath inputOrOutput) {
|
||||
exists(string package, string type, string input, string output, string path |
|
||||
ModelOutput::relevantSummaryModel(package, type, path, input, output, _) and
|
||||
ModelOutput::resolvedSummaryBase(package, type, path, base) and
|
||||
exists(string type, string input, string output, string path |
|
||||
ModelOutput::relevantSummaryModel(type, path, input, output, _) and
|
||||
ModelOutput::resolvedSummaryBase(type, path, base) and
|
||||
inputOrOutput = [input, output]
|
||||
)
|
||||
}
|
||||
@@ -153,12 +156,9 @@ private API::Node getNodeFromInputOutputPath(API::CallNode baseNode, AccessPath
|
||||
* Holds if a CSV summary contributed the step `pred -> succ` of the given `kind`.
|
||||
*/
|
||||
predicate summaryStep(API::Node pred, API::Node succ, string kind) {
|
||||
exists(
|
||||
string package, string type, string path, API::CallNode base, AccessPath input,
|
||||
AccessPath output
|
||||
|
|
||||
ModelOutput::relevantSummaryModel(package, type, path, input, output, kind) and
|
||||
ModelOutput::resolvedSummaryBase(package, type, path, base) and
|
||||
exists(string type, string path, API::CallNode base, AccessPath input, AccessPath output |
|
||||
ModelOutput::relevantSummaryModel(type, path, input, output, kind) and
|
||||
ModelOutput::resolvedSummaryBase(type, path, base) and
|
||||
pred = getNodeFromInputOutputPath(base, input) and
|
||||
succ = getNodeFromInputOutputPath(base, output)
|
||||
)
|
||||
@@ -201,3 +201,5 @@ predicate isExtraValidTokenArgumentInIdentifyingAccessPath(string name, string a
|
||||
argument.regexpMatch("\\w+:") // keyword argument
|
||||
)
|
||||
}
|
||||
|
||||
module ModelOutputSpecific { }
|
||||
|
||||
@@ -7,78 +7,78 @@ private import semmle.python.ApiGraphs
|
||||
|
||||
class Steps extends ModelInput::SummaryModelCsv {
|
||||
override predicate row(string row) {
|
||||
// package;type;path;input;output;kind
|
||||
// type;path;input;output;kind
|
||||
row =
|
||||
[
|
||||
"testlib;;Member[Steps].Member[preserveTaint].Call;Argument[0];ReturnValue;taint",
|
||||
"testlib;;Member[Steps].Member[taintIntoCallback];Argument[0];Argument[1..2].Parameter[0];taint",
|
||||
"testlib;;Member[Steps].Member[preserveArgZeroAndTwo];Argument[0,2];ReturnValue;taint",
|
||||
"testlib;;Member[Steps].Member[preserveAllButFirstArgument].Call;Argument[1..];ReturnValue;taint",
|
||||
"testlib;Member[Steps].Member[preserveTaint].Call;Argument[0];ReturnValue;taint",
|
||||
"testlib;Member[Steps].Member[taintIntoCallback];Argument[0];Argument[1..2].Parameter[0];taint",
|
||||
"testlib;Member[Steps].Member[preserveArgZeroAndTwo];Argument[0,2];ReturnValue;taint",
|
||||
"testlib;Member[Steps].Member[preserveAllButFirstArgument].Call;Argument[1..];ReturnValue;taint",
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
class Types extends ModelInput::TypeModelCsv {
|
||||
override predicate row(string row) {
|
||||
// package1;type1;package2;type2;path
|
||||
// type1;type2;path
|
||||
row =
|
||||
[
|
||||
"testlib;Alias;testlib;;Member[alias].ReturnValue",
|
||||
"testlib;Alias;testlib;Alias;Member[chain].ReturnValue",
|
||||
"testlib.Alias;testlib;Member[alias].ReturnValue",
|
||||
"testlib.Alias;testlib.Alias;Member[chain].ReturnValue",
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
class Sinks extends ModelInput::SinkModelCsv {
|
||||
override predicate row(string row) {
|
||||
// package;type;path;kind
|
||||
// type;path;kind
|
||||
row =
|
||||
[
|
||||
"testlib;;Member[mySink].Argument[0,sinkName:];test-sink",
|
||||
"testlib;Member[mySink].Argument[0,sinkName:];test-sink",
|
||||
// testing argument syntax
|
||||
"testlib;;Member[Args].Member[arg0].Argument[0];test-sink", //
|
||||
"testlib;;Member[Args].Member[arg1to3].Argument[1..3];test-sink", //
|
||||
"testlib;;Member[Args].Member[lastarg].Argument[N-1];test-sink", //
|
||||
"testlib;;Member[Args].Member[nonFist].Argument[1..];test-sink", //
|
||||
"testlib;Member[Args].Member[arg0].Argument[0];test-sink", //
|
||||
"testlib;Member[Args].Member[arg1to3].Argument[1..3];test-sink", //
|
||||
"testlib;Member[Args].Member[lastarg].Argument[N-1];test-sink", //
|
||||
"testlib;Member[Args].Member[nonFist].Argument[1..];test-sink", //
|
||||
// callsite filter.
|
||||
"testlib;;Member[CallFilter].Member[arityOne].WithArity[1].Argument[any];test-sink", //
|
||||
"testlib;;Member[CallFilter].Member[twoOrMore].WithArity[2..].Argument[0..];test-sink", //
|
||||
"testlib;Member[CallFilter].Member[arityOne].WithArity[1].Argument[any];test-sink", //
|
||||
"testlib;Member[CallFilter].Member[twoOrMore].WithArity[2..].Argument[0..];test-sink", //
|
||||
// testing non-positional arguments
|
||||
"testlib;;Member[ArgPos].Instance.Member[self_thing].Argument[self];test-sink", //
|
||||
"testlib;Member[ArgPos].Instance.Member[self_thing].Argument[self];test-sink", //
|
||||
// any argument
|
||||
"testlib;;Member[ArgPos].Member[anyParam].Argument[any];test-sink", //
|
||||
"testlib;;Member[ArgPos].Member[anyNamed].Argument[any-named];test-sink", //
|
||||
"testlib;Member[ArgPos].Member[anyParam].Argument[any];test-sink", //
|
||||
"testlib;Member[ArgPos].Member[anyNamed].Argument[any-named];test-sink", //
|
||||
// testing package syntax
|
||||
"foo1.bar;;Member[baz1].Argument[any];test-sink", //
|
||||
"foo2;;Member[bar].Member[baz2].Argument[any];test-sink", //
|
||||
"foo1.bar;Member[baz1].Argument[any];test-sink", //
|
||||
"foo2;Member[bar].Member[baz2].Argument[any];test-sink", //
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
class Sources extends ModelInput::SourceModelCsv {
|
||||
// package;type;path;kind
|
||||
// type;path;kind
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"testlib;;Member[getSource].ReturnValue;test-source", //
|
||||
"testlib;Alias;;test-source",
|
||||
"testlib;Member[getSource].ReturnValue;test-source", //
|
||||
"testlib.Alias;;test-source",
|
||||
// testing parameter syntax
|
||||
"testlib;;Member[Callbacks].Member[first].Argument[0].Parameter[0];test-source", //
|
||||
"testlib;;Member[Callbacks].Member[param1to3].Argument[0].Parameter[1..3];test-source", //
|
||||
"testlib;;Member[Callbacks].Member[nonFirst].Argument[0].Parameter[1..];test-source", //
|
||||
"testlib;Member[Callbacks].Member[first].Argument[0].Parameter[0];test-source", //
|
||||
"testlib;Member[Callbacks].Member[param1to3].Argument[0].Parameter[1..3];test-source", //
|
||||
"testlib;Member[Callbacks].Member[nonFirst].Argument[0].Parameter[1..];test-source", //
|
||||
// Common tokens.
|
||||
"testlib;;Member[CommonTokens].Member[makePromise].ReturnValue.Awaited;test-source", //
|
||||
"testlib;;Member[CommonTokens].Member[Class].Instance;test-source", //
|
||||
"testlib;;Member[CommonTokens].Member[Super].Subclass.Instance;test-source", //
|
||||
"testlib;Member[CommonTokens].Member[makePromise].ReturnValue.Awaited;test-source", //
|
||||
"testlib;Member[CommonTokens].Member[Class].Instance;test-source", //
|
||||
"testlib;Member[CommonTokens].Member[Super].Subclass.Instance;test-source", //
|
||||
// method
|
||||
"testlib;;Member[CommonTokens].Member[Class].Instance.Method[foo];test-source", //
|
||||
"testlib;Member[CommonTokens].Member[Class].Instance.Method[foo];test-source", //
|
||||
// testing non-positional arguments
|
||||
"testlib;;Member[ArgPos].Member[MyClass].Subclass.Member[foo].Parameter[self];test-source", //
|
||||
"testlib;;Member[ArgPos].Member[MyClass].Subclass.Member[foo].Parameter[named:];test-source", //
|
||||
"testlib;;Member[ArgPos].Member[MyClass].Subclass.Member[secondAndAfter].Parameter[1..];test-source", //
|
||||
"testlib;;Member[ArgPos].Member[MyClass].Subclass.Member[otherSelfTest].Parameter[0];test-source", //
|
||||
"testlib;;Member[ArgPos].Member[MyClass].Subclass.Member[anyParam].Parameter[any];test-source", //
|
||||
"testlib;;Member[ArgPos].Member[MyClass].Subclass.Member[anyNamed].Parameter[any-named];test-source", //
|
||||
"testlib;Member[ArgPos].Member[MyClass].Subclass.Member[foo].Parameter[self];test-source", //
|
||||
"testlib;Member[ArgPos].Member[MyClass].Subclass.Member[foo].Parameter[named:];test-source", //
|
||||
"testlib;Member[ArgPos].Member[MyClass].Subclass.Member[secondAndAfter].Parameter[1..];test-source", //
|
||||
"testlib;Member[ArgPos].Member[MyClass].Subclass.Member[otherSelfTest].Parameter[0];test-source", //
|
||||
"testlib;Member[ArgPos].Member[MyClass].Subclass.Member[anyParam].Parameter[any];test-source", //
|
||||
"testlib;Member[ArgPos].Member[MyClass].Subclass.Member[anyNamed].Parameter[any-named];test-source", //
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -111,13 +111,16 @@ class SyntaxErrorTest extends ModelInput::SinkModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"testlib;;Member[foo],Member[bar];test-sink", "testlib;;Member[foo] Member[bar];test-sink",
|
||||
"testlib;;Member[foo]. Member[bar];test-sink",
|
||||
"testlib;;Member[foo], Member[bar];test-sink",
|
||||
"testlib;;Member[foo]..Member[bar];test-sink",
|
||||
"testlib;;Member[foo] .Member[bar];test-sink", "testlib;;Member[foo]Member[bar];test-sink",
|
||||
"testlib;;Member[foo;test-sink", "testlib;;Member[foo]];test-sink",
|
||||
"testlib;;Member[foo]].Member[bar];test-sink"
|
||||
"testlib;Member[foo],Member[bar];test-sink", //
|
||||
"testlib;Member[foo] Member[bar];test-sink", //
|
||||
"testlib;Member[foo]. Member[bar];test-sink", //
|
||||
"testlib;Member[foo], Member[bar];test-sink", //
|
||||
"testlib;Member[foo]..Member[bar];test-sink", //
|
||||
"testlib;Member[foo] .Member[bar];test-sink", //
|
||||
"testlib;Member[foo]Member[bar];test-sink", //
|
||||
"testlib;Member[foo;test-sink", //
|
||||
"testlib;Member[foo]];test-sink", //
|
||||
"testlib;Member[foo]].Member[bar];test-sink", //
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
| CSV type row should have 5 columns but has 2: test;TooFewColumns |
|
||||
| CSV type row should have 5 columns but has 8: test;TooManyColumns;;;Member[Foo].Instance;too;many;columns |
|
||||
| CSV type row should have 3 columns but has 1: test.TooFewColumns |
|
||||
| CSV type row should have 3 columns but has 6: test.TooManyColumns;;Member[Foo].Instance;too;many;columns |
|
||||
| Invalid argument '0-1' in token 'Argument[0-1]' in access path: Method[foo].Argument[0-1] |
|
||||
| Invalid argument '*' in token 'Argument[*]' in access path: Method[foo].Argument[*] |
|
||||
| Invalid token 'Argument' is missing its arguments, in access path: Method[foo].Argument |
|
||||
|
||||
@@ -7,13 +7,13 @@ private class InvalidTypeModel extends ModelInput::TypeModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"test;TooManyColumns;;;Member[Foo].Instance;too;many;columns", //
|
||||
"test;TooFewColumns", //
|
||||
"test;X;test;Y;Method[foo].Arg[0]", //
|
||||
"test;X;test;Y;Method[foo].Argument[0-1]", //
|
||||
"test;X;test;Y;Method[foo].Argument[*]", //
|
||||
"test;X;test;Y;Method[foo].Argument", //
|
||||
"test;X;test;Y;Method[foo].Member", //
|
||||
"test.TooManyColumns;;Member[Foo].Instance;too;many;columns", //
|
||||
"test.TooFewColumns", //
|
||||
"test.X;test.Y;Method[foo].Arg[0]", //
|
||||
"test.X;test.Y;Method[foo].Argument[0-1]", //
|
||||
"test.X;test.Y;Method[foo].Argument[*]", //
|
||||
"test.X;test.Y;Method[foo].Argument", //
|
||||
"test.X;test.Y;Method[foo].Member", //
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
---
|
||||
category: minorAnalysis
|
||||
---
|
||||
* Data flow through the `ActiveSupport` extensions `Enumerable#index_with`, `Enumerable#pick`, `Enumerable#pluck` and `Enumerable#sole` are now modeled.
|
||||
@@ -183,6 +183,18 @@ module LocalFlow {
|
||||
}
|
||||
|
||||
predicate localFlowStepCommon(Node nodeFrom, Node nodeTo) {
|
||||
exists(DataFlowCallable c | nodeFrom = TSynthHashSplatParameterNode(c) |
|
||||
exists(HashSplatParameter p |
|
||||
p.getCallable() = c.asCallable() and
|
||||
nodeTo = TNormalParameterNode(p)
|
||||
)
|
||||
or
|
||||
exists(ParameterPosition pos |
|
||||
nodeTo = TSummaryParameterNode(c.asLibraryCallable(), pos) and
|
||||
pos.isHashSplat()
|
||||
)
|
||||
)
|
||||
or
|
||||
localSsaFlowStep(nodeFrom, nodeTo)
|
||||
or
|
||||
nodeFrom.asExpr() = nodeTo.asExpr().(CfgNodes::ExprNodes::BlockArgumentCfgNode).getValue()
|
||||
@@ -479,7 +491,7 @@ private module Cached {
|
||||
// external model data. This, unfortunately, does not included any field names used
|
||||
// in models defined in QL code.
|
||||
exists(string input, string output |
|
||||
ModelOutput::relevantSummaryModel(_, _, _, input, output, _)
|
||||
ModelOutput::relevantSummaryModel(_, _, input, output, _)
|
||||
|
|
||||
name = [input, output].regexpFind("(?<=(^|\\.)Field\\[)[^\\]]+(?=\\])", _, _).trim()
|
||||
)
|
||||
@@ -620,7 +632,9 @@ private module ParameterNodes {
|
||||
)
|
||||
or
|
||||
parameter = callable.getAParameter().(HashSplatParameter) and
|
||||
pos.isHashSplat()
|
||||
pos.isHashSplat() and
|
||||
// avoid overlap with `SynthHashSplatParameterNode`
|
||||
not callable.getAParameter() instanceof KeywordParameter
|
||||
or
|
||||
parameter = callable.getParameter(0).(SplatParameter) and
|
||||
pos.isSplatAll()
|
||||
@@ -772,7 +786,16 @@ private module ParameterNodes {
|
||||
override Parameter getParameter() { none() }
|
||||
|
||||
override predicate isParameterOf(DataFlowCallable c, ParameterPosition pos) {
|
||||
sc = c.asLibraryCallable() and pos = pos_
|
||||
sc = c.asLibraryCallable() and
|
||||
pos = pos_ and
|
||||
// avoid overlap with `SynthHashSplatParameterNode`
|
||||
not (
|
||||
pos.isHashSplat() and
|
||||
exists(ParameterPosition keywordPos |
|
||||
FlowSummaryImpl::Private::summaryParameterNodeRange(sc, keywordPos) and
|
||||
keywordPos.isKeyword(_)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
override CfgScope getCfgScope() { none() }
|
||||
@@ -1174,11 +1197,11 @@ predicate clearsContent(Node n, ContentSet c) {
|
||||
// Filter out keyword arguments that are part of the method signature from
|
||||
// the hash-splat parameter
|
||||
exists(
|
||||
DataFlowCallable callable, ParameterPosition hashSplatPos, ParameterNodeImpl keywordParam,
|
||||
DataFlowCallable callable, HashSplatParameter hashSplatParam, ParameterNodeImpl keywordParam,
|
||||
ParameterPosition keywordPos, string name
|
||||
|
|
||||
n.(ParameterNodes::NormalParameterNode).isParameterOf(callable, hashSplatPos) and
|
||||
hashSplatPos.isHashSplat() and
|
||||
n = TNormalParameterNode(hashSplatParam) and
|
||||
callable.asCallable() = hashSplatParam.getCallable() and
|
||||
keywordParam.isParameterOf(callable, keywordPos) and
|
||||
keywordPos.isKeyword(name) and
|
||||
c = getKeywordContent(name)
|
||||
|
||||
@@ -520,7 +520,8 @@ module Private {
|
||||
predicate summaryParameterNodeRange(SummarizedCallable c, ParameterPosition pos) {
|
||||
parameterReadState(c, _, pos)
|
||||
or
|
||||
isParameterPostUpdate(_, c, pos)
|
||||
// Same as `isParameterPostUpdate(_, c, pos)`, but can be used in a negative context
|
||||
any(SummaryNodeState state).isOutputState(c, SummaryComponentStack::argument(pos))
|
||||
}
|
||||
|
||||
private predicate callbackOutput(
|
||||
|
||||
@@ -21,23 +21,21 @@ module ActionDispatch {
|
||||
*/
|
||||
private class MimeTypeTypeSummary extends ModelInput::TypeModelCsv {
|
||||
override predicate row(string row) {
|
||||
// package1;type1;package2;type2;path
|
||||
// type1;type2;path
|
||||
row =
|
||||
[
|
||||
// Mime[type] : Mime::Type (omitted)
|
||||
// Method names with brackets like [] cannot be represented in MaD.
|
||||
// Mime.fetch(type) : Mime::Type
|
||||
"actiondispatch;Mime::Type;;;Member[Mime].Method[fetch].ReturnValue",
|
||||
// Mime::Type.new(str) : Mime::Type
|
||||
"actiondispatch;Mime::Type;;;Member[Mime].Member[Type].Instance",
|
||||
"Mime::Type;Mime!;Method[fetch].ReturnValue",
|
||||
// Mime::Type.lookup(str) : Mime::Type
|
||||
"actiondispatch;Mime::Type;;;Member[Mime].Member[Type].Method[lookup].ReturnValue",
|
||||
"Mime::Type;Mime::Type!;Method[lookup].ReturnValue",
|
||||
// Mime::Type.lookup_by_extension(str) : Mime::Type
|
||||
"actiondispatch;Mime::Type;;;Member[Mime].Member[Type].Method[lookup_by_extension].ReturnValue",
|
||||
"Mime::Type;Mime::Type!;Method[lookup_by_extension].ReturnValue",
|
||||
// Mime::Type.register(str) : Mime::Type
|
||||
"actiondispatch;Mime::Type;;;Member[Mime].Member[Type].Method[register].ReturnValue",
|
||||
"Mime::Type;Mime::Type!;Method[register].ReturnValue",
|
||||
// Mime::Type.register_alias(str) : Mime::Type
|
||||
"actiondispatch;Mime::Type;;;Member[Mime].Member[Type].Method[register_alias].ReturnValue",
|
||||
"Mime::Type;Mime::Type!;Method[register_alias].ReturnValue",
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -48,10 +46,7 @@ module ActionDispatch {
|
||||
*/
|
||||
class MimeTypeMatchRegExpInterpretation extends RE::RegExpInterpretation::Range {
|
||||
MimeTypeMatchRegExpInterpretation() {
|
||||
this =
|
||||
ModelOutput::getATypeNode("actiondispatch", "Mime::Type")
|
||||
.getAMethodCall(["match?", "=~"])
|
||||
.getArgument(0)
|
||||
this = ModelOutput::getATypeNode("Mime::Type").getAMethodCall(["match?", "=~"]).getArgument(0)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -31,8 +31,8 @@ module ActiveStorage {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"activestorage;;Member[ActiveStorage].Member[Filename].Method[new];Argument[0];ReturnValue;taint",
|
||||
"activestorage;;Member[ActiveStorage].Member[Filename].Instance.Method[sanitized];Argument[self];ReturnValue;taint",
|
||||
"ActiveStorage::Filename!;Method[new];Argument[0];ReturnValue;taint",
|
||||
"ActiveStorage::Filename;Method[sanitized];Argument[self];ReturnValue;taint",
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -45,25 +45,23 @@ module ActiveStorage {
|
||||
// package1;type1;package2;type2;path
|
||||
row =
|
||||
[
|
||||
// ActiveStorage::Blob.new : Blob
|
||||
"activestorage;Blob;activestorage;;Member[ActiveStorage].Member[Blob].Instance",
|
||||
// ActiveStorage::Blob.create_and_upload! : Blob
|
||||
"activestorage;Blob;activestorage;;Member[ActiveStorage].Member[Blob].Method[create_and_upload!].ReturnValue",
|
||||
"ActiveStorage::Blob;ActiveStorage::Blob!;Method[create_and_upload!].ReturnValue",
|
||||
// ActiveStorage::Blob.create_before_direct_upload! : Blob
|
||||
"activestorage;Blob;activestorage;;Member[ActiveStorage].Member[Blob].Method[create_before_direct_upload!].ReturnValue",
|
||||
"ActiveStorage::Blob;ActiveStorage::Blob!;Method[create_before_direct_upload!].ReturnValue",
|
||||
// ActiveStorage::Blob.compose(blobs : [Blob]) : Blob
|
||||
"activestorage;Blob;activestorage;;Member[ActiveStorage].Member[Blob].Method[compose].ReturnValue",
|
||||
"ActiveStorage::Blob;ActiveStorage::Blob!;Method[compose].ReturnValue",
|
||||
// gives error: Invalid name 'Element' in access path
|
||||
// "activestorage;Blob;activestorage;;Member[ActiveStorage].Member[Blob].Method[compose].Argument[0].Element[any]",
|
||||
// "ActiveStorage::Blob;ActiveStorage::Blob!;Method[compose].Argument[0].Element[any]",
|
||||
// ActiveStorage::Blob.find_signed(!) : Blob
|
||||
"activestorage;Blob;activestorage;;Member[ActiveStorage].Member[Blob].Method[find_signed,find_signed!].ReturnValue",
|
||||
"ActiveStorage::Blob;ActiveStorage::Blob!;Method[find_signed,find_signed!].ReturnValue",
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
private class BlobInstance extends DataFlow::Node {
|
||||
BlobInstance() {
|
||||
this = ModelOutput::getATypeNode("activestorage", "Blob").getAValueReachableFromSource()
|
||||
this = ModelOutput::getATypeNode("ActiveStorage::Blob").getAValueReachableFromSource()
|
||||
or
|
||||
// ActiveStorage::Attachment#blob : Blob
|
||||
exists(DataFlow::CallNode call |
|
||||
|
||||
@@ -305,7 +305,143 @@ module ActiveSupport {
|
||||
preservesValue = true
|
||||
}
|
||||
}
|
||||
// TODO: index_with, pick, pluck (they require Hash dataflow)
|
||||
|
||||
private class IndexWithSummary extends SimpleSummarizedCallable {
|
||||
IndexWithSummary() { this = "index_with" }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
input = "Argument[self].Element[any]" and
|
||||
output = "Argument[block].Parameter[0]" and
|
||||
preservesValue = true
|
||||
or
|
||||
input = ["Argument[0]", "Argument[block].ReturnValue"] and
|
||||
output = "ReturnValue.Element[?]" and
|
||||
preservesValue = true
|
||||
}
|
||||
}
|
||||
|
||||
private string getKeyArgument(MethodCall mc, int i) {
|
||||
mc.getMethodName() = ["pick", "pluck"] and
|
||||
result = DataFlow::Content::getKnownElementIndex(mc.getArgument(i)).serialize()
|
||||
}
|
||||
|
||||
private class PickSingleSummary extends SummarizedCallable {
|
||||
private MethodCall mc;
|
||||
private string key;
|
||||
|
||||
PickSingleSummary() {
|
||||
key = getKeyArgument(mc, 0) and
|
||||
this = "Enumerable.pick(" + key + ")" and
|
||||
mc.getMethodName() = "pick" and
|
||||
mc.getNumberOfArguments() = 1
|
||||
}
|
||||
|
||||
override MethodCall getACall() { result = mc }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
input = "Argument[self].Element[0].Element[" + key + "]" and
|
||||
output = "ReturnValue" and
|
||||
preservesValue = true
|
||||
}
|
||||
}
|
||||
|
||||
private class PickMultipleSummary extends SummarizedCallable {
|
||||
private MethodCall mc;
|
||||
|
||||
PickMultipleSummary() {
|
||||
mc.getMethodName() = "pick" and
|
||||
mc.getNumberOfArguments() > 1 and
|
||||
exists(int maxKey |
|
||||
maxKey = max(int j | exists(getKeyArgument(mc, j))) and
|
||||
this =
|
||||
"Enumerable.pick(" +
|
||||
concat(int i, string key |
|
||||
key = getKeyArgument(mc, i)
|
||||
or
|
||||
key = "_" and
|
||||
not exists(getKeyArgument(mc, i)) and
|
||||
i in [0 .. maxKey]
|
||||
|
|
||||
key, "," order by i
|
||||
) + ")"
|
||||
)
|
||||
}
|
||||
|
||||
override MethodCall getACall() { result = mc }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
exists(string s, int i |
|
||||
s = getKeyArgument(mc, i) and
|
||||
input = "Argument[self].Element[0].Element[" + s + "]" and
|
||||
output = "ReturnValue.Element[" + i + "]"
|
||||
) and
|
||||
preservesValue = true
|
||||
}
|
||||
}
|
||||
|
||||
private class PluckSingleSummary extends SummarizedCallable {
|
||||
private MethodCall mc;
|
||||
private string key;
|
||||
|
||||
PluckSingleSummary() {
|
||||
key = getKeyArgument(mc, 0) and
|
||||
this = "Enumerable.pluck(" + key + ")" and
|
||||
mc.getMethodName() = "pluck" and
|
||||
mc.getNumberOfArguments() = 1
|
||||
}
|
||||
|
||||
override MethodCall getACall() { result = mc }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
input = "Argument[self].Element[any].Element[" + key + "]" and
|
||||
output = "ReturnValue.Element[any]" and
|
||||
preservesValue = true
|
||||
}
|
||||
}
|
||||
|
||||
private class PluckMultipleSummary extends SummarizedCallable {
|
||||
private MethodCall mc;
|
||||
|
||||
PluckMultipleSummary() {
|
||||
mc.getMethodName() = "pluck" and
|
||||
mc.getNumberOfArguments() > 1 and
|
||||
exists(int maxKey |
|
||||
maxKey = max(int j | exists(getKeyArgument(mc, j))) and
|
||||
this =
|
||||
"Enumerable.pluck(" +
|
||||
concat(int i, string key |
|
||||
key = getKeyArgument(mc, i)
|
||||
or
|
||||
key = "_" and
|
||||
not exists(getKeyArgument(mc, i)) and
|
||||
i in [0 .. maxKey]
|
||||
|
|
||||
key, "," order by i
|
||||
) + ")"
|
||||
)
|
||||
}
|
||||
|
||||
override MethodCall getACall() { result = mc }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
exists(string s, int i |
|
||||
s = getKeyArgument(mc, i) and
|
||||
input = "Argument[self].Element[any].Element[" + s + "]" and
|
||||
output = "ReturnValue.Element[?].Element[" + i + "]"
|
||||
) and
|
||||
preservesValue = true
|
||||
}
|
||||
}
|
||||
|
||||
private class SoleSummary extends SimpleSummarizedCallable {
|
||||
SoleSummary() { this = "sole" }
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
input = "Argument[self].Element[0]" and
|
||||
output = "ReturnValue" and
|
||||
preservesValue = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -348,9 +484,9 @@ module ActiveSupport {
|
||||
*/
|
||||
private class PathnameTypeSummary extends ModelInput::TypeModelCsv {
|
||||
override predicate row(string row) {
|
||||
// package1;type1;package2;type2;path
|
||||
// type1;type2;path
|
||||
// Pathname#existence : Pathname
|
||||
row = ";Pathname;;Pathname;Method[existence].ReturnValue"
|
||||
row = "Pathname;Pathname;Method[existence].ReturnValue"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -358,7 +494,7 @@ module ActiveSupport {
|
||||
private class PathnameTaintSummary extends ModelInput::SummaryModelCsv {
|
||||
override predicate row(string row) {
|
||||
// Pathname#existence
|
||||
row = ";Pathname;Method[existence];Argument[self];ReturnValue;taint"
|
||||
row = "Pathname;Method[existence];Argument[self];ReturnValue;taint"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -376,12 +512,12 @@ module ActiveSupport {
|
||||
row =
|
||||
[
|
||||
// SafeBuffer.new(x) does not sanitize x
|
||||
"activesupport;;Member[ActionView].Member[SafeBuffer].Method[new];Argument[0];ReturnValue;taint",
|
||||
"ActionView::SafeBuffer!;Method[new];Argument[0];ReturnValue;taint",
|
||||
// SafeBuffer#safe_concat(x) does not sanitize x
|
||||
"activesupport;;Member[ActionView].Member[SafeBuffer].Instance.Method[safe_concat];Argument[0];ReturnValue;taint",
|
||||
"activesupport;;Member[ActionView].Member[SafeBuffer].Instance.Method[safe_concat];Argument[0];Argument[self];taint",
|
||||
"ActionView::SafeBuffer;Method[safe_concat];Argument[0];ReturnValue;taint",
|
||||
"ActionView::SafeBuffer;Method[safe_concat];Argument[0];Argument[self];taint",
|
||||
// These methods preserve taint in self
|
||||
"activesupport;;Member[ActionView].Member[SafeBuffer].Instance.Method[concat,insert,prepend,to_s,to_param];Argument[self];ReturnValue;taint",
|
||||
"ActionView::SafeBuffer;Method[concat,insert,prepend,to_s,to_param];Argument[self];ReturnValue;taint",
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -392,8 +528,8 @@ module ActiveSupport {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"activesupport;;Member[ActiveSupport].Member[JSON].Method[encode,dump];Argument[0];ReturnValue;taint",
|
||||
"activesupport;;Member[ActiveSupport].Member[JSON].Method[decode,load];Argument[0];ReturnValue;taint",
|
||||
"ActiveSupport::JSON!;Method[encode,dump];Argument[0];ReturnValue;taint",
|
||||
"ActiveSupport::JSON!;Method[decode,load];Argument[0];ReturnValue;taint",
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,8 +14,8 @@ module Json {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"json;;Member[JSON].Method[parse,parse!,load,restore];Argument[0];ReturnValue;taint",
|
||||
"json;;Member[JSON].Method[generate,fast_generate,pretty_generate,dump,unparse,fast_unparse];Argument[0];ReturnValue;taint",
|
||||
"JSON!;Method[parse,parse!,load,restore];Argument[0];ReturnValue;taint",
|
||||
"JSON!;Method[generate,fast_generate,pretty_generate,dump,unparse,fast_unparse];Argument[0];ReturnValue;taint",
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ module Regexp {
|
||||
/** A flow summary for `Regexp.escape` and its alias, `Regexp.quote`. */
|
||||
class RegexpEscapeSummary extends ModelInput::SummaryModelCsv {
|
||||
override predicate row(string row) {
|
||||
row = ";;Member[Regexp].Method[escape,quote];Argument[0];ReturnValue;taint"
|
||||
row = "Regexp!;Method[escape,quote];Argument[0];ReturnValue;taint"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,26 +33,23 @@ private class RemoteFlowSourceFromCsv extends RemoteFlowSource::Range {
|
||||
}
|
||||
|
||||
private class SummarizedCallableFromModel extends SummarizedCallable {
|
||||
string package;
|
||||
string type;
|
||||
string path;
|
||||
|
||||
SummarizedCallableFromModel() {
|
||||
ModelOutput::relevantSummaryModel(package, type, path, _, _, _) and
|
||||
this = package + ";" + type + ";" + path
|
||||
ModelOutput::relevantSummaryModel(type, path, _, _, _) and
|
||||
this = type + ";" + path
|
||||
}
|
||||
|
||||
override Call getACall() {
|
||||
exists(API::MethodAccessNode base |
|
||||
ModelOutput::resolvedSummaryBase(package, type, path, base) and
|
||||
ModelOutput::resolvedSummaryBase(type, path, base) and
|
||||
result = base.getCallNode().asExpr().getExpr()
|
||||
)
|
||||
}
|
||||
|
||||
override predicate propagatesFlowExt(string input, string output, boolean preservesValue) {
|
||||
exists(string kind |
|
||||
ModelOutput::relevantSummaryModel(package, type, path, input, output, kind)
|
||||
|
|
||||
exists(string kind | ModelOutput::relevantSummaryModel(type, path, input, output, kind) |
|
||||
kind = "value" and
|
||||
preservesValue = true
|
||||
or
|
||||
|
||||
@@ -5,23 +5,20 @@
|
||||
*
|
||||
* The CSV specification has the following columns:
|
||||
* - Sources:
|
||||
* `package; type; path; kind`
|
||||
* `type; path; kind`
|
||||
* - Sinks:
|
||||
* `package; type; path; kind`
|
||||
* `type; path; kind`
|
||||
* - Summaries:
|
||||
* `package; type; path; input; output; kind`
|
||||
* `type; path; input; output; kind`
|
||||
* - Types:
|
||||
* `package1; type1; package2; type2; path`
|
||||
* `type1; type2; path`
|
||||
*
|
||||
* The interpretation of a row is similar to API-graphs with a left-to-right
|
||||
* reading.
|
||||
* 1. The `package` column selects a package name, as it would be referenced in the source code,
|
||||
* such as an NPM package, PIP package, or Ruby gem. (See `ModelsAsData.qll` for language-specific details).
|
||||
* It may also be a synthetic package used for a type definition (see type definitions below).
|
||||
* 2. The `type` column selects all instances of a named type originating from that package,
|
||||
* or the empty string if referring to the package itself.
|
||||
* 1. The `type` column selects all instances of a named type. The syntax of this column is language-specific.
|
||||
* The language defines some type names that the analysis knows how to identify without models.
|
||||
* It can also be a synthetic type name defined by a type definition (see type definitions below).
|
||||
* 3. The `path` column is a `.`-separated list of "access path tokens" to resolve, starting at the node selected by `package` and `type`.
|
||||
* 2. The `path` column is a `.`-separated list of "access path tokens" to resolve, starting at the node selected by `type`.
|
||||
*
|
||||
* Every language supports the following tokens:
|
||||
* - Argument[n]: the n-th argument to a call. May be a range of form `x..y` (inclusive) and/or a comma-separated list.
|
||||
@@ -42,10 +39,10 @@
|
||||
*
|
||||
* For the time being, please consult `ApiGraphModelsSpecific.qll` to see which language-specific tokens are currently supported.
|
||||
*
|
||||
* 4. The `input` and `output` columns specify how data enters and leaves the element selected by the
|
||||
* first `(package, type, path)` tuple. Both strings are `.`-separated access paths
|
||||
* 3. The `input` and `output` columns specify how data enters and leaves the element selected by the
|
||||
* first `(type, path)` tuple. Both strings are `.`-separated access paths
|
||||
* of the same syntax as the `path` column.
|
||||
* 5. The `kind` column is a tag that can be referenced from QL to determine to
|
||||
* 4. The `kind` column is a tag that can be referenced from QL to determine to
|
||||
* which classes the interpreted elements should be added. For example, for
|
||||
* sources `"remote"` indicates a default remote flow source, and for summaries
|
||||
* `"taint"` indicates a default additional taint step and `"value"` indicates a
|
||||
@@ -53,17 +50,17 @@
|
||||
*
|
||||
* ### Types
|
||||
*
|
||||
* A type row of form `package1; type1; package2; type2; path` indicates that `package2; type2; path`
|
||||
* should be seen as an instance of the type `package1; type1`.
|
||||
* A type row of form `type1; type2; path` indicates that `type2; path`
|
||||
* should be seen as an instance of the type `type1`.
|
||||
*
|
||||
* A `(package,type)` pair may refer to a static type or a synthetic type name used internally in the model.
|
||||
* A type may refer to a static type or a synthetic type name used internally in the model.
|
||||
* Synthetic type names can be used to reuse intermediate sub-paths, when there are multiple ways to access the same
|
||||
* element.
|
||||
* See `ModelsAsData.qll` for the language-specific interpretation of packages and static type names.
|
||||
* See `ModelsAsData.qll` for the language-specific interpretation of type names.
|
||||
*
|
||||
* By convention, if one wants to avoid clashes with static types from the package, the type name
|
||||
* should be prefixed with a tilde character (`~`). For example, `(foo, ~Bar)` can be used to indicate that
|
||||
* the type is related to the `foo` package but is not intended to match a static type.
|
||||
* By convention, if one wants to avoid clashes with static types, the type name
|
||||
* should be prefixed with a tilde character (`~`). For example, `~Bar` can be used to indicate that
|
||||
* the type is not intended to match a static type.
|
||||
*/
|
||||
|
||||
private import ApiGraphModelsSpecific as Specific
|
||||
@@ -89,9 +86,9 @@ module ModelInput {
|
||||
*
|
||||
* A row of form
|
||||
* ```
|
||||
* package;type;path;kind
|
||||
* type;path;kind
|
||||
* ```
|
||||
* indicates that the value at `(package, type, path)` should be seen as a flow
|
||||
* indicates that the value at `(type, path)` should be seen as a flow
|
||||
* source of the given `kind`.
|
||||
*
|
||||
* The kind `remote` represents a general remote flow source.
|
||||
@@ -110,9 +107,9 @@ module ModelInput {
|
||||
*
|
||||
* A row of form
|
||||
* ```
|
||||
* package;type;path;kind
|
||||
* type;path;kind
|
||||
* ```
|
||||
* indicates that the value at `(package, type, path)` should be seen as a sink
|
||||
* indicates that the value at `(type, path)` should be seen as a sink
|
||||
* of the given `kind`.
|
||||
*/
|
||||
abstract predicate row(string row);
|
||||
@@ -129,9 +126,9 @@ module ModelInput {
|
||||
*
|
||||
* A row of form
|
||||
* ```
|
||||
* package;type;path;input;output;kind
|
||||
* type;path;input;output;kind
|
||||
* ```
|
||||
* indicates that for each call to `(package, type, path)`, the value referred to by `input`
|
||||
* indicates that for each call to `(type, path)`, the value referred to by `input`
|
||||
* can flow to the value referred to by `output`.
|
||||
*
|
||||
* `kind` should be either `value` or `taint`, for value-preserving or taint-preserving steps,
|
||||
@@ -151,9 +148,9 @@ module ModelInput {
|
||||
*
|
||||
* A row of form,
|
||||
* ```
|
||||
* package1;type1;package2;type2;path
|
||||
* type1;type2;path
|
||||
* ```
|
||||
* indicates that `(package2, type2, path)` should be seen as an instance of `(package1, type1)`.
|
||||
* indicates that `(type2, path)` should be seen as an instance of `type1`.
|
||||
*/
|
||||
abstract predicate row(string row);
|
||||
}
|
||||
@@ -163,28 +160,28 @@ module ModelInput {
|
||||
*/
|
||||
class TypeModel extends Unit {
|
||||
/**
|
||||
* Gets a data-flow node that is a source of the type `package;type`.
|
||||
* Gets a data-flow node that is a source of the given `type`.
|
||||
*
|
||||
* This must not depend on API graphs, but ensures that an API node is generated for
|
||||
* the source.
|
||||
*/
|
||||
DataFlow::Node getASource(string package, string type) { none() }
|
||||
DataFlow::Node getASource(string type) { none() }
|
||||
|
||||
/**
|
||||
* Gets a data-flow node that is a sink of the type `package;type`,
|
||||
* Gets a data-flow node that is a sink of the given `type`,
|
||||
* usually because it is an argument passed to a parameter of that type.
|
||||
*
|
||||
* This must not depend on API graphs, but ensures that an API node is generated for
|
||||
* the sink.
|
||||
*/
|
||||
DataFlow::Node getASink(string package, string type) { none() }
|
||||
DataFlow::Node getASink(string type) { none() }
|
||||
|
||||
/**
|
||||
* Gets an API node that is a source or sink of the type `package;type`.
|
||||
* Gets an API node that is a source or sink of the given `type`.
|
||||
*
|
||||
* Unlike `getASource` and `getASink`, this may depend on API graphs.
|
||||
*/
|
||||
API::Node getAnApiNode(string package, string type) { none() }
|
||||
API::Node getAnApiNode(string type) { none() }
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -209,7 +206,7 @@ private import ModelInput
|
||||
/**
|
||||
* An empty class, except in specific tests.
|
||||
*
|
||||
* If this is non-empty, all models are parsed even if the package is not
|
||||
* If this is non-empty, all models are parsed even if the type name is not
|
||||
* considered relevant for the current database.
|
||||
*/
|
||||
abstract class TestAllModels extends Unit { }
|
||||
@@ -232,53 +229,44 @@ private predicate typeModel(string row) { any(TypeModelCsv s).row(inversePad(row
|
||||
private predicate typeVariableModel(string row) { any(TypeVariableModelCsv s).row(inversePad(row)) }
|
||||
|
||||
/** Holds if a source model exists for the given parameters. */
|
||||
predicate sourceModel(string package, string type, string path, string kind) {
|
||||
predicate sourceModel(string type, string path, string kind) {
|
||||
exists(string row |
|
||||
sourceModel(row) and
|
||||
row.splitAt(";", 0) = package and
|
||||
row.splitAt(";", 1) = type and
|
||||
row.splitAt(";", 2) = path and
|
||||
row.splitAt(";", 3) = kind
|
||||
row.splitAt(";", 0) = type and
|
||||
row.splitAt(";", 1) = path and
|
||||
row.splitAt(";", 2) = kind
|
||||
)
|
||||
}
|
||||
|
||||
/** Holds if a sink model exists for the given parameters. */
|
||||
private predicate sinkModel(string package, string type, string path, string kind) {
|
||||
private predicate sinkModel(string type, string path, string kind) {
|
||||
exists(string row |
|
||||
sinkModel(row) and
|
||||
row.splitAt(";", 0) = package and
|
||||
row.splitAt(";", 1) = type and
|
||||
row.splitAt(";", 2) = path and
|
||||
row.splitAt(";", 3) = kind
|
||||
row.splitAt(";", 0) = type and
|
||||
row.splitAt(";", 1) = path and
|
||||
row.splitAt(";", 2) = kind
|
||||
)
|
||||
}
|
||||
|
||||
/** Holds if a summary model `row` exists for the given parameters. */
|
||||
private predicate summaryModel(
|
||||
string package, string type, string path, string input, string output, string kind
|
||||
) {
|
||||
private predicate summaryModel(string type, string path, string input, string output, string kind) {
|
||||
exists(string row |
|
||||
summaryModel(row) and
|
||||
row.splitAt(";", 0) = package and
|
||||
row.splitAt(";", 1) = type and
|
||||
row.splitAt(";", 2) = path and
|
||||
row.splitAt(";", 3) = input and
|
||||
row.splitAt(";", 4) = output and
|
||||
row.splitAt(";", 5) = kind
|
||||
row.splitAt(";", 0) = type and
|
||||
row.splitAt(";", 1) = path and
|
||||
row.splitAt(";", 2) = input and
|
||||
row.splitAt(";", 3) = output and
|
||||
row.splitAt(";", 4) = kind
|
||||
)
|
||||
}
|
||||
|
||||
/** Holds if a type model exists for the given parameters. */
|
||||
private predicate typeModel(
|
||||
string package1, string type1, string package2, string type2, string path
|
||||
) {
|
||||
private predicate typeModel(string type1, string type2, string path) {
|
||||
exists(string row |
|
||||
typeModel(row) and
|
||||
row.splitAt(";", 0) = package1 and
|
||||
row.splitAt(";", 1) = type1 and
|
||||
row.splitAt(";", 2) = package2 and
|
||||
row.splitAt(";", 3) = type2 and
|
||||
row.splitAt(";", 4) = path
|
||||
row.splitAt(";", 0) = type1 and
|
||||
row.splitAt(";", 1) = type2 and
|
||||
row.splitAt(";", 2) = path
|
||||
)
|
||||
}
|
||||
|
||||
@@ -292,61 +280,50 @@ private predicate typeVariableModel(string name, string path) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a package that should be seen as an alias for the given other `package`,
|
||||
* or the `package` itself.
|
||||
* Holds if CSV rows involving `type` might be relevant for the analysis of this database.
|
||||
*/
|
||||
bindingset[package]
|
||||
bindingset[result]
|
||||
string getAPackageAlias(string package) {
|
||||
typeModel(package, "", result, "", "")
|
||||
or
|
||||
result = package
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if CSV rows involving `package` might be relevant for the analysis of this database.
|
||||
*/
|
||||
private predicate isRelevantPackage(string package) {
|
||||
predicate isRelevantType(string type) {
|
||||
(
|
||||
sourceModel(package, _, _, _) or
|
||||
sinkModel(package, _, _, _) or
|
||||
summaryModel(package, _, _, _, _, _) or
|
||||
typeModel(_, _, package, _, _)
|
||||
sourceModel(type, _, _) or
|
||||
sinkModel(type, _, _) or
|
||||
summaryModel(type, _, _, _, _) or
|
||||
typeModel(_, type, _)
|
||||
) and
|
||||
(
|
||||
Specific::isPackageUsed(package)
|
||||
Specific::isTypeUsed(type)
|
||||
or
|
||||
exists(TestAllModels t)
|
||||
)
|
||||
or
|
||||
exists(string other |
|
||||
isRelevantPackage(other) and
|
||||
typeModel(package, _, other, _, _)
|
||||
exists(string other | isRelevantType(other) |
|
||||
typeModel(type, other, _)
|
||||
or
|
||||
Specific::hasImplicitTypeModel(type, other)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `package,type,path` is used in some CSV row.
|
||||
* Holds if `type,path` is used in some CSV row.
|
||||
*/
|
||||
pragma[nomagic]
|
||||
predicate isRelevantFullPath(string package, string type, string path) {
|
||||
isRelevantPackage(package) and
|
||||
predicate isRelevantFullPath(string type, string path) {
|
||||
isRelevantType(type) and
|
||||
(
|
||||
sourceModel(package, type, path, _) or
|
||||
sinkModel(package, type, path, _) or
|
||||
summaryModel(package, type, path, _, _, _) or
|
||||
typeModel(_, _, package, type, path)
|
||||
sourceModel(type, path, _) or
|
||||
sinkModel(type, path, _) or
|
||||
summaryModel(type, path, _, _, _) or
|
||||
typeModel(_, type, path)
|
||||
)
|
||||
}
|
||||
|
||||
/** A string from a CSV row that should be parsed as an access path. */
|
||||
private class AccessPathRange extends AccessPath::Range {
|
||||
AccessPathRange() {
|
||||
isRelevantFullPath(_, _, this)
|
||||
isRelevantFullPath(_, this)
|
||||
or
|
||||
exists(string package | isRelevantPackage(package) |
|
||||
summaryModel(package, _, _, this, _, _) or
|
||||
summaryModel(package, _, _, _, this, _)
|
||||
exists(string type | isRelevantType(type) |
|
||||
summaryModel(type, _, this, _, _) or
|
||||
summaryModel(type, _, _, this, _)
|
||||
)
|
||||
or
|
||||
typeVariableModel(_, this)
|
||||
@@ -400,83 +377,73 @@ private predicate invocationMatchesCallSiteFilter(Specific::InvokeNode invoke, A
|
||||
}
|
||||
|
||||
private class TypeModelUseEntry extends API::EntryPoint {
|
||||
private string package;
|
||||
private string type;
|
||||
|
||||
TypeModelUseEntry() {
|
||||
exists(any(TypeModel tm).getASource(package, type)) and
|
||||
this = "TypeModelUseEntry;" + package + ";" + type
|
||||
exists(any(TypeModel tm).getASource(type)) and
|
||||
this = "TypeModelUseEntry;" + type
|
||||
}
|
||||
|
||||
override DataFlow::LocalSourceNode getASource() {
|
||||
result = any(TypeModel tm).getASource(package, type)
|
||||
}
|
||||
override DataFlow::LocalSourceNode getASource() { result = any(TypeModel tm).getASource(type) }
|
||||
|
||||
API::Node getNodeForType(string package_, string type_) {
|
||||
package = package_ and type = type_ and result = this.getANode()
|
||||
}
|
||||
API::Node getNodeForType(string type_) { type = type_ and result = this.getANode() }
|
||||
}
|
||||
|
||||
private class TypeModelDefEntry extends API::EntryPoint {
|
||||
private string package;
|
||||
private string type;
|
||||
|
||||
TypeModelDefEntry() {
|
||||
exists(any(TypeModel tm).getASink(package, type)) and
|
||||
this = "TypeModelDefEntry;" + package + ";" + type
|
||||
exists(any(TypeModel tm).getASink(type)) and
|
||||
this = "TypeModelDefEntry;" + type
|
||||
}
|
||||
|
||||
override DataFlow::Node getASink() { result = any(TypeModel tm).getASink(package, type) }
|
||||
override DataFlow::Node getASink() { result = any(TypeModel tm).getASink(type) }
|
||||
|
||||
API::Node getNodeForType(string package_, string type_) {
|
||||
package = package_ and type = type_ and result = this.getANode()
|
||||
}
|
||||
API::Node getNodeForType(string type_) { type = type_ and result = this.getANode() }
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an API node identified by the given `(package,type)` pair.
|
||||
* Gets an API node identified by the given `type`.
|
||||
*/
|
||||
pragma[nomagic]
|
||||
private API::Node getNodeFromType(string package, string type) {
|
||||
exists(string package2, string type2, AccessPath path2 |
|
||||
typeModel(package, type, package2, type2, path2) and
|
||||
result = getNodeFromPath(package2, type2, path2)
|
||||
private API::Node getNodeFromType(string type) {
|
||||
exists(string type2, AccessPath path2 |
|
||||
typeModel(type, type2, path2) and
|
||||
result = getNodeFromPath(type2, path2)
|
||||
)
|
||||
or
|
||||
result = any(TypeModelUseEntry e).getNodeForType(package, type)
|
||||
result = any(TypeModelUseEntry e).getNodeForType(type)
|
||||
or
|
||||
result = any(TypeModelDefEntry e).getNodeForType(package, type)
|
||||
result = any(TypeModelDefEntry e).getNodeForType(type)
|
||||
or
|
||||
result = any(TypeModel t).getAnApiNode(package, type)
|
||||
result = any(TypeModel t).getAnApiNode(type)
|
||||
or
|
||||
result = Specific::getExtraNodeFromType(package, type)
|
||||
result = Specific::getExtraNodeFromType(type)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the API node identified by the first `n` tokens of `path` in the given `(package, type, path)` tuple.
|
||||
* Gets the API node identified by the first `n` tokens of `path` in the given `(type, path)` tuple.
|
||||
*/
|
||||
pragma[nomagic]
|
||||
private API::Node getNodeFromPath(string package, string type, AccessPath path, int n) {
|
||||
isRelevantFullPath(package, type, path) and
|
||||
private API::Node getNodeFromPath(string type, AccessPath path, int n) {
|
||||
isRelevantFullPath(type, path) and
|
||||
(
|
||||
n = 0 and
|
||||
result = getNodeFromType(package, type)
|
||||
result = getNodeFromType(type)
|
||||
or
|
||||
result = Specific::getExtraNodeFromPath(package, type, path, n)
|
||||
result = Specific::getExtraNodeFromPath(type, path, n)
|
||||
)
|
||||
or
|
||||
result = getSuccessorFromNode(getNodeFromPath(package, type, path, n - 1), path.getToken(n - 1))
|
||||
result = getSuccessorFromNode(getNodeFromPath(type, path, n - 1), path.getToken(n - 1))
|
||||
or
|
||||
// Similar to the other recursive case, but where the path may have stepped through one or more call-site filters
|
||||
result =
|
||||
getSuccessorFromInvoke(getInvocationFromPath(package, type, path, n - 1), path.getToken(n - 1))
|
||||
result = getSuccessorFromInvoke(getInvocationFromPath(type, path, n - 1), path.getToken(n - 1))
|
||||
or
|
||||
// Apply a subpath
|
||||
result =
|
||||
getNodeFromSubPath(getNodeFromPath(package, type, path, n - 1), getSubPathAt(path, n - 1))
|
||||
result = getNodeFromSubPath(getNodeFromPath(type, path, n - 1), getSubPathAt(path, n - 1))
|
||||
or
|
||||
// Apply a type step
|
||||
typeStep(getNodeFromPath(package, type, path, n), result)
|
||||
typeStep(getNodeFromPath(type, path, n), result)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -496,15 +463,15 @@ private AccessPath getSubPathAt(AccessPath path, int n) {
|
||||
pragma[nomagic]
|
||||
private API::Node getNodeFromSubPath(API::Node base, AccessPath subPath, int n) {
|
||||
exists(AccessPath path, int k |
|
||||
base = [getNodeFromPath(_, _, path, k), getNodeFromSubPath(_, path, k)] and
|
||||
base = [getNodeFromPath(_, path, k), getNodeFromSubPath(_, path, k)] and
|
||||
subPath = getSubPathAt(path, k) and
|
||||
result = base and
|
||||
n = 0
|
||||
)
|
||||
or
|
||||
exists(string package, string type, AccessPath basePath |
|
||||
typeStepModel(package, type, basePath, subPath) and
|
||||
base = getNodeFromPath(package, type, basePath) and
|
||||
exists(string type, AccessPath basePath |
|
||||
typeStepModel(type, basePath, subPath) and
|
||||
base = getNodeFromPath(type, basePath) and
|
||||
result = base and
|
||||
n = 0
|
||||
)
|
||||
@@ -543,42 +510,40 @@ private API::Node getNodeFromSubPath(API::Node base, AccessPath subPath) {
|
||||
result = getNodeFromSubPath(base, subPath, subPath.getNumToken())
|
||||
}
|
||||
|
||||
/** Gets the node identified by the given `(package, type, path)` tuple. */
|
||||
private API::Node getNodeFromPath(string package, string type, AccessPath path) {
|
||||
result = getNodeFromPath(package, type, path, path.getNumToken())
|
||||
/** Gets the node identified by the given `(type, path)` tuple. */
|
||||
private API::Node getNodeFromPath(string type, AccessPath path) {
|
||||
result = getNodeFromPath(type, path, path.getNumToken())
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private predicate typeStepModel(string package, string type, AccessPath basePath, AccessPath output) {
|
||||
summaryModel(package, type, basePath, "", output, "type")
|
||||
private predicate typeStepModel(string type, AccessPath basePath, AccessPath output) {
|
||||
summaryModel(type, basePath, "", output, "type")
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private predicate typeStep(API::Node pred, API::Node succ) {
|
||||
exists(string package, string type, AccessPath basePath, AccessPath output |
|
||||
typeStepModel(package, type, basePath, output) and
|
||||
pred = getNodeFromPath(package, type, basePath) and
|
||||
exists(string type, AccessPath basePath, AccessPath output |
|
||||
typeStepModel(type, basePath, output) and
|
||||
pred = getNodeFromPath(type, basePath) and
|
||||
succ = getNodeFromSubPath(pred, output)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an invocation identified by the given `(package, type, path)` tuple.
|
||||
* Gets an invocation identified by the given `(type, path)` tuple.
|
||||
*
|
||||
* Unlike `getNodeFromPath`, the `path` may end with one or more call-site filters.
|
||||
*/
|
||||
private Specific::InvokeNode getInvocationFromPath(
|
||||
string package, string type, AccessPath path, int n
|
||||
) {
|
||||
result = Specific::getAnInvocationOf(getNodeFromPath(package, type, path, n))
|
||||
private Specific::InvokeNode getInvocationFromPath(string type, AccessPath path, int n) {
|
||||
result = Specific::getAnInvocationOf(getNodeFromPath(type, path, n))
|
||||
or
|
||||
result = getInvocationFromPath(package, type, path, n - 1) and
|
||||
result = getInvocationFromPath(type, path, n - 1) and
|
||||
invocationMatchesCallSiteFilter(result, path.getToken(n - 1))
|
||||
}
|
||||
|
||||
/** Gets an invocation identified by the given `(package, type, path)` tuple. */
|
||||
private Specific::InvokeNode getInvocationFromPath(string package, string type, AccessPath path) {
|
||||
result = getInvocationFromPath(package, type, path, path.getNumToken())
|
||||
/** Gets an invocation identified by the given `(type, path)` tuple. */
|
||||
private Specific::InvokeNode getInvocationFromPath(string type, AccessPath path) {
|
||||
result = getInvocationFromPath(type, path, path.getNumToken())
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -631,9 +596,9 @@ module ModelOutput {
|
||||
*/
|
||||
cached
|
||||
API::Node getASourceNode(string kind) {
|
||||
exists(string package, string type, string path |
|
||||
sourceModel(package, type, path, kind) and
|
||||
result = getNodeFromPath(package, type, path)
|
||||
exists(string type, string path |
|
||||
sourceModel(type, path, kind) and
|
||||
result = getNodeFromPath(type, path)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -642,9 +607,9 @@ module ModelOutput {
|
||||
*/
|
||||
cached
|
||||
API::Node getASinkNode(string kind) {
|
||||
exists(string package, string type, string path |
|
||||
sinkModel(package, type, path, kind) and
|
||||
result = getNodeFromPath(package, type, path)
|
||||
exists(string type, string path |
|
||||
sinkModel(type, path, kind) and
|
||||
result = getNodeFromPath(type, path)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -653,32 +618,31 @@ module ModelOutput {
|
||||
*/
|
||||
cached
|
||||
predicate relevantSummaryModel(
|
||||
string package, string type, string path, string input, string output, string kind
|
||||
string type, string path, string input, string output, string kind
|
||||
) {
|
||||
isRelevantPackage(package) and
|
||||
summaryModel(package, type, path, input, output, kind)
|
||||
isRelevantType(type) and
|
||||
summaryModel(type, path, input, output, kind)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if a `baseNode` is an invocation identified by the `package,type,path` part of a summary row.
|
||||
* Holds if a `baseNode` is an invocation identified by the `type,path` part of a summary row.
|
||||
*/
|
||||
cached
|
||||
predicate resolvedSummaryBase(
|
||||
string package, string type, string path, Specific::InvokeNode baseNode
|
||||
) {
|
||||
summaryModel(package, type, path, _, _, _) and
|
||||
baseNode = getInvocationFromPath(package, type, path)
|
||||
predicate resolvedSummaryBase(string type, string path, Specific::InvokeNode baseNode) {
|
||||
summaryModel(type, path, _, _, _) and
|
||||
baseNode = getInvocationFromPath(type, path)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `node` is seen as an instance of `(package,type)` due to a type definition
|
||||
* Holds if `node` is seen as an instance of `type` due to a type definition
|
||||
* contributed by a CSV model.
|
||||
*/
|
||||
cached
|
||||
API::Node getATypeNode(string package, string type) { result = getNodeFromType(package, type) }
|
||||
API::Node getATypeNode(string type) { result = getNodeFromType(type) }
|
||||
}
|
||||
|
||||
import Cached
|
||||
import Specific::ModelOutputSpecific
|
||||
|
||||
/**
|
||||
* Gets an error message relating to an invalid CSV row in a model.
|
||||
@@ -686,13 +650,13 @@ module ModelOutput {
|
||||
string getAWarning() {
|
||||
// Check number of columns
|
||||
exists(string row, string kind, int expectedArity, int actualArity |
|
||||
any(SourceModelCsv csv).row(row) and kind = "source" and expectedArity = 4
|
||||
any(SourceModelCsv csv).row(row) and kind = "source" and expectedArity = 3
|
||||
or
|
||||
any(SinkModelCsv csv).row(row) and kind = "sink" and expectedArity = 4
|
||||
any(SinkModelCsv csv).row(row) and kind = "sink" and expectedArity = 3
|
||||
or
|
||||
any(SummaryModelCsv csv).row(row) and kind = "summary" and expectedArity = 6
|
||||
any(SummaryModelCsv csv).row(row) and kind = "summary" and expectedArity = 5
|
||||
or
|
||||
any(TypeModelCsv csv).row(row) and kind = "type" and expectedArity = 5
|
||||
any(TypeModelCsv csv).row(row) and kind = "type" and expectedArity = 3
|
||||
or
|
||||
any(TypeVariableModelCsv csv).row(row) and kind = "type-variable" and expectedArity = 2
|
||||
|
|
||||
@@ -705,7 +669,7 @@ module ModelOutput {
|
||||
or
|
||||
// Check names and arguments of access path tokens
|
||||
exists(AccessPath path, AccessPathToken token |
|
||||
(isRelevantFullPath(_, _, path) or typeVariableModel(_, path)) and
|
||||
(isRelevantFullPath(_, path) or typeVariableModel(_, path)) and
|
||||
token = path.getToken(_)
|
||||
|
|
||||
not isValidTokenNameInIdentifyingAccessPath(token.getName()) and
|
||||
|
||||
@@ -34,30 +34,73 @@ private import codeql.ruby.dataflow.internal.FlowSummaryImplSpecific as FlowSumm
|
||||
private import codeql.ruby.dataflow.internal.FlowSummaryImpl::Public
|
||||
private import codeql.ruby.dataflow.internal.DataFlowDispatch as DataFlowDispatch
|
||||
|
||||
/**
|
||||
* Holds if models describing `package` may be relevant for the analysis of this database.
|
||||
*
|
||||
* In the context of Ruby, this is the name of a Ruby gem.
|
||||
*/
|
||||
bindingset[package]
|
||||
predicate isPackageUsed(string package) {
|
||||
// For now everything is modeled as an access path starting at any top-level, so the package name has no effect.
|
||||
//
|
||||
// We allow an arbitrary package name so that the model can record the name of the package in case it's needed in the future.
|
||||
//
|
||||
// In principle we should consider a package to be "used" if there is a transitive dependency on it, but we can only
|
||||
// reliably see the direct dependencies.
|
||||
//
|
||||
// In practice, packages try to use unique top-level module names, which mitigates the precision loss of not checking
|
||||
// the package name.
|
||||
any()
|
||||
pragma[nomagic]
|
||||
private predicate isUsedTopLevelConstant(string name) {
|
||||
exists(ConstantAccess access |
|
||||
access.getName() = name and
|
||||
not exists(access.getScopeExpr())
|
||||
)
|
||||
}
|
||||
|
||||
/** Gets a Ruby-specific interpretation of the `(package, type, path)` tuple after resolving the first `n` access path tokens. */
|
||||
bindingset[package, type, path]
|
||||
API::Node getExtraNodeFromPath(string package, string type, AccessPath path, int n) {
|
||||
// A row of form `;any;Method[foo]` should match any method named `foo`.
|
||||
exists(package) and
|
||||
bindingset[rawType]
|
||||
predicate isTypeUsed(string rawType) {
|
||||
exists(string consts |
|
||||
parseType(rawType, consts, _) and
|
||||
isUsedTopLevelConstant(consts.splitAt("::", 0))
|
||||
)
|
||||
or
|
||||
rawType = ["", "any"]
|
||||
}
|
||||
|
||||
bindingset[rawType]
|
||||
private predicate parseType(string rawType, string consts, string suffix) {
|
||||
exists(string regexp |
|
||||
regexp = "([^!]+)(!|)" and
|
||||
consts = rawType.regexpCapture(regexp, 1) and
|
||||
suffix = rawType.regexpCapture(regexp, 2)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `type` can be obtained from an instance of `otherType` due to
|
||||
* language semantics modeled by `getExtraNodeFromType`.
|
||||
*/
|
||||
bindingset[otherType]
|
||||
predicate hasImplicitTypeModel(string type, string otherType) {
|
||||
// A::B! can be used to obtain A::B
|
||||
parseType(otherType, type, _)
|
||||
}
|
||||
|
||||
private predicate parseRelevantType(string rawType, string consts, string suffix) {
|
||||
isRelevantType(rawType) and
|
||||
parseType(rawType, consts, suffix)
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private string getConstComponent(string consts, int n) {
|
||||
parseRelevantType(_, consts, _) and
|
||||
result = consts.splitAt("::", n)
|
||||
}
|
||||
|
||||
private int getNumConstComponents(string consts) {
|
||||
result = strictcount(int n | exists(getConstComponent(consts, n)))
|
||||
}
|
||||
|
||||
private DataFlow::ConstRef getConstantFromConstPath(string consts, int n) {
|
||||
n = 1 and
|
||||
result = DataFlow::getConstant(getConstComponent(consts, 0))
|
||||
or
|
||||
result = getConstantFromConstPath(consts, n - 1).getConstant(getConstComponent(consts, n - 1))
|
||||
}
|
||||
|
||||
private DataFlow::ConstRef getConstantFromConstPath(string consts) {
|
||||
result = getConstantFromConstPath(consts, getNumConstComponents(consts))
|
||||
}
|
||||
|
||||
/** Gets a Ruby-specific interpretation of the `(type, path)` tuple after resolving the first `n` access path tokens. */
|
||||
bindingset[type, path]
|
||||
API::Node getExtraNodeFromPath(string type, AccessPath path, int n) {
|
||||
// A row of form `any;Method[foo]` should match any method named `foo`.
|
||||
type = "any" and
|
||||
n = 1 and
|
||||
exists(EntryPointFromAnyType entry |
|
||||
@@ -66,9 +109,27 @@ API::Node getExtraNodeFromPath(string package, string type, AccessPath path, int
|
||||
)
|
||||
}
|
||||
|
||||
/** Gets a Ruby-specific interpretation of the `(package, type)` tuple. */
|
||||
API::Node getExtraNodeFromType(string package, string type) {
|
||||
isRelevantFullPath(package, type, _) and // Allow any package name, see `isPackageUsed`.
|
||||
/** Gets a Ruby-specific interpretation of the given `type`. */
|
||||
API::Node getExtraNodeFromType(string type) {
|
||||
exists(string consts, string suffix, DataFlow::ConstRef constRef |
|
||||
parseRelevantType(type, consts, suffix) and
|
||||
constRef = getConstantFromConstPath(consts)
|
||||
|
|
||||
suffix = "!" and
|
||||
(
|
||||
result.asSource() = constRef
|
||||
or
|
||||
result.asSource() = constRef.getADescendentModule().getAnOwnModuleSelf()
|
||||
)
|
||||
or
|
||||
suffix = "" and
|
||||
(
|
||||
result.asSource() = constRef.getAMethodCall("new")
|
||||
or
|
||||
result.asSource() = constRef.getADescendentModule().getAnInstanceSelf()
|
||||
)
|
||||
)
|
||||
or
|
||||
type = "" and
|
||||
result = API::root()
|
||||
}
|
||||
@@ -78,7 +139,7 @@ API::Node getExtraNodeFromType(string package, string type) {
|
||||
* matching anywhere, and the path begins with `Method[methodName]`.
|
||||
*/
|
||||
private predicate methodMatchedByName(AccessPath path, string methodName) {
|
||||
isRelevantFullPath(_, "any", path) and
|
||||
isRelevantFullPath("any", path) and
|
||||
exists(AccessPathToken token |
|
||||
token = path.getToken(0) and
|
||||
token.getName() = "Method" and
|
||||
@@ -190,3 +251,5 @@ predicate isExtraValidTokenArgumentInIdentifyingAccessPath(string name, string a
|
||||
argument.regexpMatch("\\w+:") // keyword argument
|
||||
)
|
||||
}
|
||||
|
||||
module ModelOutputSpecific { }
|
||||
|
||||
@@ -123,33 +123,31 @@ module Pathname {
|
||||
*/
|
||||
private class PathnameTypeSummary extends ModelInput::TypeModelCsv {
|
||||
override predicate row(string row) {
|
||||
// package1;type1;package2;type2;path
|
||||
// type1;type2;path
|
||||
row =
|
||||
[
|
||||
// Pathname.new : Pathname
|
||||
";Pathname;;;Member[Pathname].Instance",
|
||||
// Pathname#+(path) : Pathname
|
||||
";Pathname;;Pathname;Method[+].ReturnValue",
|
||||
"Pathname;Pathname;Method[+].ReturnValue",
|
||||
// Pathname#/(path) : Pathname
|
||||
";Pathname;;Pathname;Method[/].ReturnValue",
|
||||
"Pathname;Pathname;Method[/].ReturnValue",
|
||||
// Pathname#basename(path) : Pathname
|
||||
";Pathname;;Pathname;Method[basename].ReturnValue",
|
||||
"Pathname;Pathname;Method[basename].ReturnValue",
|
||||
// Pathname#cleanpath(path) : Pathname
|
||||
";Pathname;;Pathname;Method[cleanpath].ReturnValue",
|
||||
"Pathname;Pathname;Method[cleanpath].ReturnValue",
|
||||
// Pathname#expand_path(path) : Pathname
|
||||
";Pathname;;Pathname;Method[expand_path].ReturnValue",
|
||||
"Pathname;Pathname;Method[expand_path].ReturnValue",
|
||||
// Pathname#join(path) : Pathname
|
||||
";Pathname;;Pathname;Method[join].ReturnValue",
|
||||
"Pathname;Pathname;Method[join].ReturnValue",
|
||||
// Pathname#realpath(path) : Pathname
|
||||
";Pathname;;Pathname;Method[realpath].ReturnValue",
|
||||
"Pathname;Pathname;Method[realpath].ReturnValue",
|
||||
// Pathname#relative_path_from(path) : Pathname
|
||||
";Pathname;;Pathname;Method[relative_path_from].ReturnValue",
|
||||
"Pathname;Pathname;Method[relative_path_from].ReturnValue",
|
||||
// Pathname#sub(path) : Pathname
|
||||
";Pathname;;Pathname;Method[sub].ReturnValue",
|
||||
"Pathname;Pathname;Method[sub].ReturnValue",
|
||||
// Pathname#sub_ext(path) : Pathname
|
||||
";Pathname;;Pathname;Method[sub_ext].ReturnValue",
|
||||
"Pathname;Pathname;Method[sub_ext].ReturnValue",
|
||||
// Pathname#to_path(path) : Pathname
|
||||
";Pathname;;Pathname;Method[to_path].ReturnValue",
|
||||
"Pathname;Pathname;Method[to_path].ReturnValue",
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -160,31 +158,31 @@ module Pathname {
|
||||
row =
|
||||
[
|
||||
// Pathname.new(path)
|
||||
";;Member[Pathname].Method[new];Argument[0];ReturnValue;taint",
|
||||
"Pathname!;Method[new];Argument[0];ReturnValue;taint",
|
||||
// Pathname#dirname
|
||||
";Pathname;Method[dirname];Argument[self];ReturnValue;taint",
|
||||
"Pathname;Method[dirname];Argument[self];ReturnValue;taint",
|
||||
// Pathname#each_filename
|
||||
";Pathname;Method[each_filename];Argument[self];Argument[block].Parameter[0];taint",
|
||||
"Pathname;Method[each_filename];Argument[self];Argument[block].Parameter[0];taint",
|
||||
// Pathname#expand_path
|
||||
";Pathname;Method[expand_path];Argument[self];ReturnValue;taint",
|
||||
"Pathname;Method[expand_path];Argument[self];ReturnValue;taint",
|
||||
// Pathname#join
|
||||
";Pathname;Method[join];Argument[self,any];ReturnValue;taint",
|
||||
"Pathname;Method[join];Argument[self,any];ReturnValue;taint",
|
||||
// Pathname#parent
|
||||
";Pathname;Method[parent];Argument[self];ReturnValue;taint",
|
||||
"Pathname;Method[parent];Argument[self];ReturnValue;taint",
|
||||
// Pathname#realpath
|
||||
";Pathname;Method[realpath];Argument[self];ReturnValue;taint",
|
||||
"Pathname;Method[realpath];Argument[self];ReturnValue;taint",
|
||||
// Pathname#relative_path_from
|
||||
";Pathname;Method[relative_path_from];Argument[self];ReturnValue;taint",
|
||||
"Pathname;Method[relative_path_from];Argument[self];ReturnValue;taint",
|
||||
// Pathname#to_path
|
||||
";Pathname;Method[to_path];Argument[self];ReturnValue;taint",
|
||||
"Pathname;Method[to_path];Argument[self];ReturnValue;taint",
|
||||
// Pathname#basename
|
||||
";Pathname;Method[basename];Argument[self];ReturnValue;taint",
|
||||
"Pathname;Method[basename];Argument[self];ReturnValue;taint",
|
||||
// Pathname#cleanpath
|
||||
";Pathname;Method[cleanpath];Argument[self];ReturnValue;taint",
|
||||
"Pathname;Method[cleanpath];Argument[self];ReturnValue;taint",
|
||||
// Pathname#sub
|
||||
";Pathname;Method[sub];Argument[self];ReturnValue;taint",
|
||||
"Pathname;Method[sub];Argument[self];ReturnValue;taint",
|
||||
// Pathname#sub_ext
|
||||
";Pathname;Method[sub_ext];Argument[self];ReturnValue;taint",
|
||||
"Pathname;Method[sub_ext];Argument[self];ReturnValue;taint",
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
| file://:0:0:0:0 | [summary] read: argument position 0.any element in Hash[] | file://:0:0:0:0 | [summary] read: argument position 0.any element.element 1 or unknown in Hash[] |
|
||||
| file://:0:0:0:0 | parameter any of ;Pathname;Method[join] | file://:0:0:0:0 | [summary] to write: return (return) in ;Pathname;Method[join] |
|
||||
| file://:0:0:0:0 | parameter position 0 of & | file://:0:0:0:0 | [summary] read: argument position 0.any element in & |
|
||||
| file://:0:0:0:0 | parameter position 0 of + | file://:0:0:0:0 | [summary] read: argument position 0.any element in + |
|
||||
| file://:0:0:0:0 | parameter position 0 of ;;Member[Pathname].Method[new] | file://:0:0:0:0 | [summary] to write: return (return) in ;;Member[Pathname].Method[new] |
|
||||
| file://:0:0:0:0 | parameter position 0 of ;;Member[Regexp].Method[escape,quote] | file://:0:0:0:0 | [summary] to write: return (return) in ;;Member[Regexp].Method[escape,quote] |
|
||||
| file://:0:0:0:0 | parameter position 0 of ActionController::Parameters#merge | file://:0:0:0:0 | [summary] to write: return (return) in ActionController::Parameters#merge |
|
||||
| file://:0:0:0:0 | parameter position 0 of ActionController::Parameters#merge! | file://:0:0:0:0 | [summary] to write: argument self in ActionController::Parameters#merge! |
|
||||
| file://:0:0:0:0 | parameter position 0 of ActionController::Parameters#merge! | file://:0:0:0:0 | [summary] to write: return (return) in ActionController::Parameters#merge! |
|
||||
@@ -17,31 +14,10 @@
|
||||
| file://:0:0:0:0 | parameter position 0 of Hash[] | file://:0:0:0:0 | [summary] read: argument position 0.any element in Hash[] |
|
||||
| file://:0:0:0:0 | parameter position 0 of String.try_convert | file://:0:0:0:0 | [summary] to write: return (return) in String.try_convert |
|
||||
| file://:0:0:0:0 | parameter position 0 of \| | file://:0:0:0:0 | [summary] read: argument position 0.any element in \| |
|
||||
| file://:0:0:0:0 | parameter position 0 of activestorage;;Member[ActiveStorage].Member[Filename].Method[new] | file://:0:0:0:0 | [summary] to write: return (return) in activestorage;;Member[ActiveStorage].Member[Filename].Method[new] |
|
||||
| file://:0:0:0:0 | parameter position 0 of activesupport;;Member[ActionView].Member[SafeBuffer].Instance.Method[safe_concat] | file://:0:0:0:0 | [summary] to write: argument self in activesupport;;Member[ActionView].Member[SafeBuffer].Instance.Method[safe_concat] |
|
||||
| file://:0:0:0:0 | parameter position 0 of activesupport;;Member[ActionView].Member[SafeBuffer].Instance.Method[safe_concat] | file://:0:0:0:0 | [summary] to write: return (return) in activesupport;;Member[ActionView].Member[SafeBuffer].Instance.Method[safe_concat] |
|
||||
| file://:0:0:0:0 | parameter position 0 of activesupport;;Member[ActionView].Member[SafeBuffer].Method[new] | file://:0:0:0:0 | [summary] to write: return (return) in activesupport;;Member[ActionView].Member[SafeBuffer].Method[new] |
|
||||
| file://:0:0:0:0 | parameter position 0 of activesupport;;Member[ActiveSupport].Member[JSON].Method[decode,load] | file://:0:0:0:0 | [summary] to write: return (return) in activesupport;;Member[ActiveSupport].Member[JSON].Method[decode,load] |
|
||||
| file://:0:0:0:0 | parameter position 0 of activesupport;;Member[ActiveSupport].Member[JSON].Method[encode,dump] | file://:0:0:0:0 | [summary] to write: return (return) in activesupport;;Member[ActiveSupport].Member[JSON].Method[encode,dump] |
|
||||
| file://:0:0:0:0 | parameter position 0 of json;;Member[JSON].Method[generate,fast_generate,pretty_generate,dump,unparse,fast_unparse] | file://:0:0:0:0 | [summary] to write: return (return) in json;;Member[JSON].Method[generate,fast_generate,pretty_generate,dump,unparse,fast_unparse] |
|
||||
| file://:0:0:0:0 | parameter position 0 of json;;Member[JSON].Method[parse,parse!,load,restore] | file://:0:0:0:0 | [summary] to write: return (return) in json;;Member[JSON].Method[parse,parse!,load,restore] |
|
||||
| file://:0:0:0:0 | parameter position 0.. of File.join | file://:0:0:0:0 | [summary] to write: return (return) in File.join |
|
||||
| file://:0:0:0:0 | parameter self of & | file://:0:0:0:0 | [summary] read: argument self.any element in & |
|
||||
| file://:0:0:0:0 | parameter self of * | file://:0:0:0:0 | [summary] read: argument self.any element in * |
|
||||
| file://:0:0:0:0 | parameter self of - | file://:0:0:0:0 | [summary] read: argument self.any element in - |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[basename] | file://:0:0:0:0 | [summary] to write: return (return) in ;Pathname;Method[basename] |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[cleanpath] | file://:0:0:0:0 | [summary] to write: return (return) in ;Pathname;Method[cleanpath] |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[dirname] | file://:0:0:0:0 | [summary] to write: return (return) in ;Pathname;Method[dirname] |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[each_filename] | file://:0:0:0:0 | [summary] to write: argument block.parameter position 0 in ;Pathname;Method[each_filename] |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[existence] | file://:0:0:0:0 | [summary] to write: return (return) in ;Pathname;Method[existence] |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[expand_path] | file://:0:0:0:0 | [summary] to write: return (return) in ;Pathname;Method[expand_path] |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[join] | file://:0:0:0:0 | [summary] to write: return (return) in ;Pathname;Method[join] |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[parent] | file://:0:0:0:0 | [summary] to write: return (return) in ;Pathname;Method[parent] |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[realpath] | file://:0:0:0:0 | [summary] to write: return (return) in ;Pathname;Method[realpath] |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[relative_path_from] | file://:0:0:0:0 | [summary] to write: return (return) in ;Pathname;Method[relative_path_from] |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[sub] | file://:0:0:0:0 | [summary] to write: return (return) in ;Pathname;Method[sub] |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[sub_ext] | file://:0:0:0:0 | [summary] to write: return (return) in ;Pathname;Method[sub_ext] |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[to_path] | file://:0:0:0:0 | [summary] to write: return (return) in ;Pathname;Method[to_path] |
|
||||
| file://:0:0:0:0 | parameter self of ActionController::Parameters#<various> | file://:0:0:0:0 | [summary] to write: return (return) in ActionController::Parameters#<various> |
|
||||
| file://:0:0:0:0 | parameter self of ActionController::Parameters#merge | file://:0:0:0:0 | [summary] to write: return (return) in ActionController::Parameters#merge |
|
||||
| file://:0:0:0:0 | parameter self of ActionController::Parameters#merge! | file://:0:0:0:0 | [summary] to write: argument self in ActionController::Parameters#merge! |
|
||||
@@ -49,8 +25,6 @@
|
||||
| file://:0:0:0:0 | parameter self of ActiveSupportStringTransform | file://:0:0:0:0 | [summary] to write: return (return) in ActiveSupportStringTransform |
|
||||
| file://:0:0:0:0 | parameter self of [] | file://:0:0:0:0 | [summary] to write: return (return) in [] |
|
||||
| file://:0:0:0:0 | parameter self of \| | file://:0:0:0:0 | [summary] read: argument self.any element in \| |
|
||||
| file://:0:0:0:0 | parameter self of activestorage;;Member[ActiveStorage].Member[Filename].Instance.Method[sanitized] | file://:0:0:0:0 | [summary] to write: return (return) in activestorage;;Member[ActiveStorage].Member[Filename].Instance.Method[sanitized] |
|
||||
| file://:0:0:0:0 | parameter self of activesupport;;Member[ActionView].Member[SafeBuffer].Instance.Method[concat,insert,prepend,to_s,to_param] | file://:0:0:0:0 | [summary] to write: return (return) in activesupport;;Member[ActionView].Member[SafeBuffer].Instance.Method[concat,insert,prepend,to_s,to_param] |
|
||||
| file://:0:0:0:0 | parameter self of each(0) | file://:0:0:0:0 | [summary] read: argument self.any element in each(0) |
|
||||
| local_dataflow.rb:1:1:7:3 | self (foo) | local_dataflow.rb:3:8:3:10 | self |
|
||||
| local_dataflow.rb:1:1:7:3 | self in foo | local_dataflow.rb:1:1:7:3 | self (foo) |
|
||||
|
||||
@@ -534,8 +534,8 @@ invalidSpecComponent
|
||||
| summaries.rb:150:39:150:45 | tainted | summaries.rb:1:20:1:36 | call to source : | summaries.rb:150:39:150:45 | tainted | $@ | summaries.rb:1:20:1:36 | call to source : | call to source : |
|
||||
| summaries.rb:150:39:150:45 | tainted | summaries.rb:1:20:1:36 | call to source : | summaries.rb:150:39:150:45 | tainted | $@ | summaries.rb:1:20:1:36 | call to source : | call to source : |
|
||||
warning
|
||||
| CSV type row should have 5 columns but has 2: test;TooFewColumns |
|
||||
| CSV type row should have 5 columns but has 8: test;TooManyColumns;;;Member[Foo].Instance;too;many;columns |
|
||||
| CSV type row should have 3 columns but has 1: TooFewColumns |
|
||||
| CSV type row should have 3 columns but has 6: TooManyColumns;;Member[Foo].Instance;too;many;columns |
|
||||
| Invalid argument '0-1' in token 'Argument[0-1]' in access path: Method[foo].Argument[0-1] |
|
||||
| Invalid argument '*' in token 'Argument[*]' in access path: Method[foo].Argument[*] |
|
||||
| Invalid token 'Argument' is missing its arguments, in access path: Method[foo].Argument |
|
||||
|
||||
@@ -67,32 +67,32 @@ private class StepsFromModel extends ModelInput::SummaryModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
";any;Method[set_value];Argument[0];Argument[self].Field[@value];value",
|
||||
";any;Method[get_value];Argument[self].Field[@value];ReturnValue;value",
|
||||
";;Member[Foo].Method[firstArg];Argument[0];ReturnValue;taint",
|
||||
";;Member[Foo].Method[secondArg];Argument[1];ReturnValue;taint",
|
||||
";;Member[Foo].Method[onlyWithoutBlock].WithoutBlock;Argument[0];ReturnValue;taint",
|
||||
";;Member[Foo].Method[onlyWithBlock].WithBlock;Argument[0];ReturnValue;taint",
|
||||
";;Member[Foo].Method[blockArg].Argument[block].Parameter[0].Method[preserveTaint];Argument[0];ReturnValue;taint",
|
||||
";;Member[Foo].Method[namedArg];Argument[foo:];ReturnValue;taint",
|
||||
";;Member[Foo].Method[anyArg];Argument[any];ReturnValue;taint",
|
||||
";;Member[Foo].Method[anyNamedArg];Argument[any-named];ReturnValue;taint",
|
||||
";;Member[Foo].Method[anyPositionFromOne];Argument[1..];ReturnValue;taint",
|
||||
";;Member[Foo].Method[intoNamedCallback];Argument[0];Argument[foo:].Parameter[0];taint",
|
||||
";;Member[Foo].Method[intoNamedParameter];Argument[0];Argument[0].Parameter[foo:];taint",
|
||||
";;Member[Foo].Method[startInNamedCallback].Argument[foo:].Parameter[0].Method[preserveTaint];Argument[0];ReturnValue;taint",
|
||||
";;Member[Foo].Method[startInNamedParameter].Argument[0].Parameter[foo:].Method[preserveTaint];Argument[0];ReturnValue;taint",
|
||||
";;Member[Foo].Instance.Method[flowToAnyArg];Argument[0];Argument[any];taint",
|
||||
";;Member[Foo].Instance.Method[flowToSelf];Argument[0];Argument[self];taint",
|
||||
";any;Method[matchedByName];Argument[0];ReturnValue;taint",
|
||||
";any;Method[matchedByNameRcv];Argument[self];ReturnValue;taint",
|
||||
";any;Method[withElementOne];Argument[self].WithElement[1];ReturnValue;value",
|
||||
";any;Method[withExactlyElementOne];Argument[self].WithElement[1!];ReturnValue;value",
|
||||
";any;Method[withoutElementOne];Argument[self].WithoutElement[1];Argument[self];value",
|
||||
";any;Method[withoutExactlyElementOne];Argument[self].WithoutElement[1!];Argument[self];value",
|
||||
";any;Method[readElementOne];Argument[self].Element[1];ReturnValue;value",
|
||||
";any;Method[readExactlyElementOne];Argument[self].Element[1!];ReturnValue;value",
|
||||
";any;Method[withoutElementOneAndTwo];Argument[self].WithoutElement[1].WithoutElement[2].WithElement[any];Argument[self];value",
|
||||
"any;Method[set_value];Argument[0];Argument[self].Field[@value];value",
|
||||
"any;Method[get_value];Argument[self].Field[@value];ReturnValue;value",
|
||||
"Foo!;Method[firstArg];Argument[0];ReturnValue;taint",
|
||||
"Foo!;Method[secondArg];Argument[1];ReturnValue;taint",
|
||||
"Foo!;Method[onlyWithoutBlock].WithoutBlock;Argument[0];ReturnValue;taint",
|
||||
"Foo!;Method[onlyWithBlock].WithBlock;Argument[0];ReturnValue;taint",
|
||||
"Foo!;Method[blockArg].Argument[block].Parameter[0].Method[preserveTaint];Argument[0];ReturnValue;taint",
|
||||
"Foo!;Method[namedArg];Argument[foo:];ReturnValue;taint",
|
||||
"Foo!;Method[anyArg];Argument[any];ReturnValue;taint",
|
||||
"Foo!;Method[anyNamedArg];Argument[any-named];ReturnValue;taint",
|
||||
"Foo!;Method[anyPositionFromOne];Argument[1..];ReturnValue;taint",
|
||||
"Foo!;Method[intoNamedCallback];Argument[0];Argument[foo:].Parameter[0];taint",
|
||||
"Foo!;Method[intoNamedParameter];Argument[0];Argument[0].Parameter[foo:];taint",
|
||||
"Foo!;Method[startInNamedCallback].Argument[foo:].Parameter[0].Method[preserveTaint];Argument[0];ReturnValue;taint",
|
||||
"Foo!;Method[startInNamedParameter].Argument[0].Parameter[foo:].Method[preserveTaint];Argument[0];ReturnValue;taint",
|
||||
"Foo;Method[flowToAnyArg];Argument[0];Argument[any];taint",
|
||||
"Foo;Method[flowToSelf];Argument[0];Argument[self];taint",
|
||||
"any;Method[matchedByName];Argument[0];ReturnValue;taint",
|
||||
"any;Method[matchedByNameRcv];Argument[self];ReturnValue;taint",
|
||||
"any;Method[withElementOne];Argument[self].WithElement[1];ReturnValue;value",
|
||||
"any;Method[withExactlyElementOne];Argument[self].WithElement[1!];ReturnValue;value",
|
||||
"any;Method[withoutElementOne];Argument[self].WithoutElement[1];Argument[self];value",
|
||||
"any;Method[withoutExactlyElementOne];Argument[self].WithoutElement[1!];Argument[self];value",
|
||||
"any;Method[readElementOne];Argument[self].Element[1];ReturnValue;value",
|
||||
"any;Method[readExactlyElementOne];Argument[self].Element[1!];ReturnValue;value",
|
||||
"any;Method[withoutElementOneAndTwo];Argument[self].WithoutElement[1].WithoutElement[2].WithElement[any];Argument[self];value",
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -101,23 +101,21 @@ private class TypeFromModel extends ModelInput::TypeModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"test;FooOrBar;;;Member[Foo].Instance", //
|
||||
"test;FooOrBar;;;Member[Bar].Instance", //
|
||||
"test;FooOrBar;test;FooOrBar;Method[next].ReturnValue",
|
||||
"~FooOrBar;Foo;", //
|
||||
"~FooOrBar;Bar;", //
|
||||
"~FooOrBar;~FooOrBar;Method[next].ReturnValue",
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
private class TypeFromCodeQL extends ModelInput::TypeModel {
|
||||
override DataFlow::Node getASource(string package, string type) {
|
||||
package = "test" and
|
||||
type = "FooOrBar" and
|
||||
override DataFlow::Node getASource(string type) {
|
||||
type = "~FooOrBar" and
|
||||
result.getConstantValue().getString() = "magic_string"
|
||||
}
|
||||
|
||||
override API::Node getAnApiNode(string package, string type) {
|
||||
package = "test" and
|
||||
type = "FooOrBar" and
|
||||
override API::Node getAnApiNode(string type) {
|
||||
type = "~FooOrBar" and
|
||||
result = API::getTopLevelMember("Alias").getMember(["Foo", "Bar"])
|
||||
}
|
||||
}
|
||||
@@ -126,13 +124,13 @@ private class InvalidTypeModel extends ModelInput::TypeModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"test;TooManyColumns;;;Member[Foo].Instance;too;many;columns", //
|
||||
"test;TooFewColumns", //
|
||||
"test;X;test;Y;Method[foo].Arg[0]", //
|
||||
"test;X;test;Y;Method[foo].Argument[0-1]", //
|
||||
"test;X;test;Y;Method[foo].Argument[*]", //
|
||||
"test;X;test;Y;Method[foo].Argument", //
|
||||
"test;X;test;Y;Method[foo].Member", //
|
||||
"TooManyColumns;;Member[Foo].Instance;too;many;columns", //
|
||||
"TooFewColumns", //
|
||||
"Foo;Foo;Method[foo].Arg[0]", //
|
||||
"Foo;Foo;Method[foo].Argument[0-1]", //
|
||||
"Foo;Foo;Method[foo].Argument[*]", //
|
||||
"Foo;Foo;Method[foo].Argument", //
|
||||
"Foo;Foo;Method[foo].Member", //
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -141,12 +139,12 @@ private class SinkFromModel extends ModelInput::SinkModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
"test;FooOrBar;Method[method].Argument[0];test-sink", //
|
||||
";;Member[Foo].Method[sinkAnyArg].Argument[any];test-sink", //
|
||||
";;Member[Foo].Method[sinkAnyNamedArg].Argument[any-named];test-sink", //
|
||||
";;Member[Foo].Method[getSinks].ReturnValue.Element[any].Method[mySink].Argument[0];test-sink", //
|
||||
";;Member[Foo].Method[arraySink].Argument[0].Element[any];test-sink", //
|
||||
";;Member[Foo].Method[secondArrayElementIsSink].Argument[0].Element[1];test-sink", //
|
||||
"~FooOrBar;Method[method].Argument[0];test-sink", //
|
||||
"Foo!;Method[sinkAnyArg].Argument[any];test-sink", //
|
||||
"Foo!;Method[sinkAnyNamedArg].Argument[any-named];test-sink", //
|
||||
"Foo!;Method[getSinks].ReturnValue.Element[any].Method[mySink].Argument[0];test-sink", //
|
||||
"Foo!;Method[arraySink].Argument[0].Element[any];test-sink", //
|
||||
"Foo!;Method[secondArrayElementIsSink].Argument[0].Element[1];test-sink", //
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,9 +29,7 @@ query predicate underscore(string input, string output) {
|
||||
]
|
||||
}
|
||||
|
||||
query predicate mimeTypeInstances(API::Node n) {
|
||||
n = ModelOutput::getATypeNode("actiondispatch", "Mime::Type")
|
||||
}
|
||||
query predicate mimeTypeInstances(API::Node n) { n = ModelOutput::getATypeNode("Mime::Type") }
|
||||
|
||||
query predicate mimeTypeMatchRegExpInterpretations(
|
||||
ActionDispatch::MimeTypeMatchRegExpInterpretation s
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
failures
|
||||
| hash_extensions.rb:126:10:126:19 | call to sole | Unexpected result: hasValueFlow=b |
|
||||
edges
|
||||
| active_support.rb:10:9:10:18 | call to source : | active_support.rb:11:10:11:10 | x : |
|
||||
| active_support.rb:11:10:11:10 | x : | active_support.rb:11:10:11:19 | call to at |
|
||||
@@ -302,6 +303,138 @@ edges
|
||||
| hash_extensions.rb:73:10:73:10 | h [element] : | hash_extensions.rb:73:10:73:16 | ...[...] |
|
||||
| hash_extensions.rb:74:10:74:10 | h [element] : | hash_extensions.rb:74:10:74:16 | ...[...] |
|
||||
| hash_extensions.rb:74:10:74:10 | h [element] : | hash_extensions.rb:74:10:74:16 | ...[...] |
|
||||
| hash_extensions.rb:80:15:80:25 | call to source : | hash_extensions.rb:81:9:81:14 | values [element 0] : |
|
||||
| hash_extensions.rb:80:15:80:25 | call to source : | hash_extensions.rb:81:9:81:14 | values [element 0] : |
|
||||
| hash_extensions.rb:80:28:80:38 | call to source : | hash_extensions.rb:81:9:81:14 | values [element 1] : |
|
||||
| hash_extensions.rb:80:28:80:38 | call to source : | hash_extensions.rb:81:9:81:14 | values [element 1] : |
|
||||
| hash_extensions.rb:80:41:80:51 | call to source : | hash_extensions.rb:81:9:81:14 | values [element 2] : |
|
||||
| hash_extensions.rb:80:41:80:51 | call to source : | hash_extensions.rb:81:9:81:14 | values [element 2] : |
|
||||
| hash_extensions.rb:81:9:81:14 | values [element 0] : | hash_extensions.rb:81:31:81:33 | key : |
|
||||
| hash_extensions.rb:81:9:81:14 | values [element 0] : | hash_extensions.rb:81:31:81:33 | key : |
|
||||
| hash_extensions.rb:81:9:81:14 | values [element 1] : | hash_extensions.rb:81:31:81:33 | key : |
|
||||
| hash_extensions.rb:81:9:81:14 | values [element 1] : | hash_extensions.rb:81:31:81:33 | key : |
|
||||
| hash_extensions.rb:81:9:81:14 | values [element 2] : | hash_extensions.rb:81:31:81:33 | key : |
|
||||
| hash_extensions.rb:81:9:81:14 | values [element 2] : | hash_extensions.rb:81:31:81:33 | key : |
|
||||
| hash_extensions.rb:81:9:84:7 | call to index_with [element] : | hash_extensions.rb:86:10:86:10 | h [element] : |
|
||||
| hash_extensions.rb:81:9:84:7 | call to index_with [element] : | hash_extensions.rb:86:10:86:10 | h [element] : |
|
||||
| hash_extensions.rb:81:9:84:7 | call to index_with [element] : | hash_extensions.rb:87:10:87:10 | h [element] : |
|
||||
| hash_extensions.rb:81:9:84:7 | call to index_with [element] : | hash_extensions.rb:87:10:87:10 | h [element] : |
|
||||
| hash_extensions.rb:81:31:81:33 | key : | hash_extensions.rb:82:14:82:16 | key |
|
||||
| hash_extensions.rb:81:31:81:33 | key : | hash_extensions.rb:82:14:82:16 | key |
|
||||
| hash_extensions.rb:83:9:83:19 | call to source : | hash_extensions.rb:81:9:84:7 | call to index_with [element] : |
|
||||
| hash_extensions.rb:83:9:83:19 | call to source : | hash_extensions.rb:81:9:84:7 | call to index_with [element] : |
|
||||
| hash_extensions.rb:86:10:86:10 | h [element] : | hash_extensions.rb:86:10:86:16 | ...[...] |
|
||||
| hash_extensions.rb:86:10:86:10 | h [element] : | hash_extensions.rb:86:10:86:16 | ...[...] |
|
||||
| hash_extensions.rb:87:10:87:10 | h [element] : | hash_extensions.rb:87:10:87:16 | ...[...] |
|
||||
| hash_extensions.rb:87:10:87:10 | h [element] : | hash_extensions.rb:87:10:87:16 | ...[...] |
|
||||
| hash_extensions.rb:89:9:89:38 | call to index_with [element] : | hash_extensions.rb:91:10:91:10 | j [element] : |
|
||||
| hash_extensions.rb:89:9:89:38 | call to index_with [element] : | hash_extensions.rb:91:10:91:10 | j [element] : |
|
||||
| hash_extensions.rb:89:9:89:38 | call to index_with [element] : | hash_extensions.rb:92:10:92:10 | j [element] : |
|
||||
| hash_extensions.rb:89:9:89:38 | call to index_with [element] : | hash_extensions.rb:92:10:92:10 | j [element] : |
|
||||
| hash_extensions.rb:89:27:89:37 | call to source : | hash_extensions.rb:89:9:89:38 | call to index_with [element] : |
|
||||
| hash_extensions.rb:89:27:89:37 | call to source : | hash_extensions.rb:89:9:89:38 | call to index_with [element] : |
|
||||
| hash_extensions.rb:91:10:91:10 | j [element] : | hash_extensions.rb:91:10:91:16 | ...[...] |
|
||||
| hash_extensions.rb:91:10:91:10 | j [element] : | hash_extensions.rb:91:10:91:16 | ...[...] |
|
||||
| hash_extensions.rb:92:10:92:10 | j [element] : | hash_extensions.rb:92:10:92:16 | ...[...] |
|
||||
| hash_extensions.rb:92:10:92:10 | j [element] : | hash_extensions.rb:92:10:92:16 | ...[...] |
|
||||
| hash_extensions.rb:98:21:98:31 | call to source : | hash_extensions.rb:99:10:99:15 | values [element 0, element :id] : |
|
||||
| hash_extensions.rb:98:21:98:31 | call to source : | hash_extensions.rb:99:10:99:15 | values [element 0, element :id] : |
|
||||
| hash_extensions.rb:98:21:98:31 | call to source : | hash_extensions.rb:101:10:101:15 | values [element 0, element :id] : |
|
||||
| hash_extensions.rb:98:21:98:31 | call to source : | hash_extensions.rb:101:10:101:15 | values [element 0, element :id] : |
|
||||
| hash_extensions.rb:98:21:98:31 | call to source : | hash_extensions.rb:104:10:104:15 | values [element 0, element :id] : |
|
||||
| hash_extensions.rb:98:21:98:31 | call to source : | hash_extensions.rb:104:10:104:15 | values [element 0, element :id] : |
|
||||
| hash_extensions.rb:98:40:98:54 | call to source : | hash_extensions.rb:100:10:100:15 | values [element 0, element :name] : |
|
||||
| hash_extensions.rb:98:40:98:54 | call to source : | hash_extensions.rb:100:10:100:15 | values [element 0, element :name] : |
|
||||
| hash_extensions.rb:98:40:98:54 | call to source : | hash_extensions.rb:102:10:102:15 | values [element 0, element :name] : |
|
||||
| hash_extensions.rb:98:40:98:54 | call to source : | hash_extensions.rb:102:10:102:15 | values [element 0, element :name] : |
|
||||
| hash_extensions.rb:98:40:98:54 | call to source : | hash_extensions.rb:103:10:103:15 | values [element 0, element :name] : |
|
||||
| hash_extensions.rb:98:40:98:54 | call to source : | hash_extensions.rb:103:10:103:15 | values [element 0, element :name] : |
|
||||
| hash_extensions.rb:99:10:99:15 | values [element 0, element :id] : | hash_extensions.rb:99:10:99:25 | call to pick |
|
||||
| hash_extensions.rb:99:10:99:15 | values [element 0, element :id] : | hash_extensions.rb:99:10:99:25 | call to pick |
|
||||
| hash_extensions.rb:100:10:100:15 | values [element 0, element :name] : | hash_extensions.rb:100:10:100:27 | call to pick |
|
||||
| hash_extensions.rb:100:10:100:15 | values [element 0, element :name] : | hash_extensions.rb:100:10:100:27 | call to pick |
|
||||
| hash_extensions.rb:101:10:101:15 | values [element 0, element :id] : | hash_extensions.rb:101:10:101:32 | call to pick [element 0] : |
|
||||
| hash_extensions.rb:101:10:101:15 | values [element 0, element :id] : | hash_extensions.rb:101:10:101:32 | call to pick [element 0] : |
|
||||
| hash_extensions.rb:101:10:101:32 | call to pick [element 0] : | hash_extensions.rb:101:10:101:35 | ...[...] |
|
||||
| hash_extensions.rb:101:10:101:32 | call to pick [element 0] : | hash_extensions.rb:101:10:101:35 | ...[...] |
|
||||
| hash_extensions.rb:102:10:102:15 | values [element 0, element :name] : | hash_extensions.rb:102:10:102:32 | call to pick [element 1] : |
|
||||
| hash_extensions.rb:102:10:102:15 | values [element 0, element :name] : | hash_extensions.rb:102:10:102:32 | call to pick [element 1] : |
|
||||
| hash_extensions.rb:102:10:102:32 | call to pick [element 1] : | hash_extensions.rb:102:10:102:35 | ...[...] |
|
||||
| hash_extensions.rb:102:10:102:32 | call to pick [element 1] : | hash_extensions.rb:102:10:102:35 | ...[...] |
|
||||
| hash_extensions.rb:103:10:103:15 | values [element 0, element :name] : | hash_extensions.rb:103:10:103:32 | call to pick [element 0] : |
|
||||
| hash_extensions.rb:103:10:103:15 | values [element 0, element :name] : | hash_extensions.rb:103:10:103:32 | call to pick [element 0] : |
|
||||
| hash_extensions.rb:103:10:103:32 | call to pick [element 0] : | hash_extensions.rb:103:10:103:35 | ...[...] |
|
||||
| hash_extensions.rb:103:10:103:32 | call to pick [element 0] : | hash_extensions.rb:103:10:103:35 | ...[...] |
|
||||
| hash_extensions.rb:104:10:104:15 | values [element 0, element :id] : | hash_extensions.rb:104:10:104:32 | call to pick [element 1] : |
|
||||
| hash_extensions.rb:104:10:104:15 | values [element 0, element :id] : | hash_extensions.rb:104:10:104:32 | call to pick [element 1] : |
|
||||
| hash_extensions.rb:104:10:104:32 | call to pick [element 1] : | hash_extensions.rb:104:10:104:35 | ...[...] |
|
||||
| hash_extensions.rb:104:10:104:32 | call to pick [element 1] : | hash_extensions.rb:104:10:104:35 | ...[...] |
|
||||
| hash_extensions.rb:110:21:110:31 | call to source : | hash_extensions.rb:112:10:112:15 | values [element 0, element :id] : |
|
||||
| hash_extensions.rb:110:21:110:31 | call to source : | hash_extensions.rb:112:10:112:15 | values [element 0, element :id] : |
|
||||
| hash_extensions.rb:110:21:110:31 | call to source : | hash_extensions.rb:115:10:115:15 | values [element 0, element :id] : |
|
||||
| hash_extensions.rb:110:21:110:31 | call to source : | hash_extensions.rb:115:10:115:15 | values [element 0, element :id] : |
|
||||
| hash_extensions.rb:110:40:110:54 | call to source : | hash_extensions.rb:111:10:111:15 | values [element 0, element :name] : |
|
||||
| hash_extensions.rb:110:40:110:54 | call to source : | hash_extensions.rb:111:10:111:15 | values [element 0, element :name] : |
|
||||
| hash_extensions.rb:110:40:110:54 | call to source : | hash_extensions.rb:113:10:113:15 | values [element 0, element :name] : |
|
||||
| hash_extensions.rb:110:40:110:54 | call to source : | hash_extensions.rb:113:10:113:15 | values [element 0, element :name] : |
|
||||
| hash_extensions.rb:110:40:110:54 | call to source : | hash_extensions.rb:114:10:114:15 | values [element 0, element :name] : |
|
||||
| hash_extensions.rb:110:40:110:54 | call to source : | hash_extensions.rb:114:10:114:15 | values [element 0, element :name] : |
|
||||
| hash_extensions.rb:110:65:110:75 | call to source : | hash_extensions.rb:112:10:112:15 | values [element 1, element :id] : |
|
||||
| hash_extensions.rb:110:65:110:75 | call to source : | hash_extensions.rb:112:10:112:15 | values [element 1, element :id] : |
|
||||
| hash_extensions.rb:110:65:110:75 | call to source : | hash_extensions.rb:115:10:115:15 | values [element 1, element :id] : |
|
||||
| hash_extensions.rb:110:65:110:75 | call to source : | hash_extensions.rb:115:10:115:15 | values [element 1, element :id] : |
|
||||
| hash_extensions.rb:110:84:110:99 | call to source : | hash_extensions.rb:111:10:111:15 | values [element 1, element :name] : |
|
||||
| hash_extensions.rb:110:84:110:99 | call to source : | hash_extensions.rb:111:10:111:15 | values [element 1, element :name] : |
|
||||
| hash_extensions.rb:110:84:110:99 | call to source : | hash_extensions.rb:113:10:113:15 | values [element 1, element :name] : |
|
||||
| hash_extensions.rb:110:84:110:99 | call to source : | hash_extensions.rb:113:10:113:15 | values [element 1, element :name] : |
|
||||
| hash_extensions.rb:110:84:110:99 | call to source : | hash_extensions.rb:114:10:114:15 | values [element 1, element :name] : |
|
||||
| hash_extensions.rb:110:84:110:99 | call to source : | hash_extensions.rb:114:10:114:15 | values [element 1, element :name] : |
|
||||
| hash_extensions.rb:111:10:111:15 | values [element 0, element :name] : | hash_extensions.rb:111:10:111:28 | call to pluck [element] : |
|
||||
| hash_extensions.rb:111:10:111:15 | values [element 0, element :name] : | hash_extensions.rb:111:10:111:28 | call to pluck [element] : |
|
||||
| hash_extensions.rb:111:10:111:15 | values [element 1, element :name] : | hash_extensions.rb:111:10:111:28 | call to pluck [element] : |
|
||||
| hash_extensions.rb:111:10:111:15 | values [element 1, element :name] : | hash_extensions.rb:111:10:111:28 | call to pluck [element] : |
|
||||
| hash_extensions.rb:111:10:111:28 | call to pluck [element] : | hash_extensions.rb:111:10:111:31 | ...[...] |
|
||||
| hash_extensions.rb:111:10:111:28 | call to pluck [element] : | hash_extensions.rb:111:10:111:31 | ...[...] |
|
||||
| hash_extensions.rb:112:10:112:15 | values [element 0, element :id] : | hash_extensions.rb:112:10:112:33 | call to pluck [element, element 0] : |
|
||||
| hash_extensions.rb:112:10:112:15 | values [element 0, element :id] : | hash_extensions.rb:112:10:112:33 | call to pluck [element, element 0] : |
|
||||
| hash_extensions.rb:112:10:112:15 | values [element 1, element :id] : | hash_extensions.rb:112:10:112:33 | call to pluck [element, element 0] : |
|
||||
| hash_extensions.rb:112:10:112:15 | values [element 1, element :id] : | hash_extensions.rb:112:10:112:33 | call to pluck [element, element 0] : |
|
||||
| hash_extensions.rb:112:10:112:33 | call to pluck [element, element 0] : | hash_extensions.rb:112:10:112:36 | ...[...] [element 0] : |
|
||||
| hash_extensions.rb:112:10:112:33 | call to pluck [element, element 0] : | hash_extensions.rb:112:10:112:36 | ...[...] [element 0] : |
|
||||
| hash_extensions.rb:112:10:112:36 | ...[...] [element 0] : | hash_extensions.rb:112:10:112:39 | ...[...] |
|
||||
| hash_extensions.rb:112:10:112:36 | ...[...] [element 0] : | hash_extensions.rb:112:10:112:39 | ...[...] |
|
||||
| hash_extensions.rb:113:10:113:15 | values [element 0, element :name] : | hash_extensions.rb:113:10:113:33 | call to pluck [element, element 1] : |
|
||||
| hash_extensions.rb:113:10:113:15 | values [element 0, element :name] : | hash_extensions.rb:113:10:113:33 | call to pluck [element, element 1] : |
|
||||
| hash_extensions.rb:113:10:113:15 | values [element 1, element :name] : | hash_extensions.rb:113:10:113:33 | call to pluck [element, element 1] : |
|
||||
| hash_extensions.rb:113:10:113:15 | values [element 1, element :name] : | hash_extensions.rb:113:10:113:33 | call to pluck [element, element 1] : |
|
||||
| hash_extensions.rb:113:10:113:33 | call to pluck [element, element 1] : | hash_extensions.rb:113:10:113:36 | ...[...] [element 1] : |
|
||||
| hash_extensions.rb:113:10:113:33 | call to pluck [element, element 1] : | hash_extensions.rb:113:10:113:36 | ...[...] [element 1] : |
|
||||
| hash_extensions.rb:113:10:113:36 | ...[...] [element 1] : | hash_extensions.rb:113:10:113:39 | ...[...] |
|
||||
| hash_extensions.rb:113:10:113:36 | ...[...] [element 1] : | hash_extensions.rb:113:10:113:39 | ...[...] |
|
||||
| hash_extensions.rb:114:10:114:15 | values [element 0, element :name] : | hash_extensions.rb:114:10:114:33 | call to pluck [element, element 0] : |
|
||||
| hash_extensions.rb:114:10:114:15 | values [element 0, element :name] : | hash_extensions.rb:114:10:114:33 | call to pluck [element, element 0] : |
|
||||
| hash_extensions.rb:114:10:114:15 | values [element 1, element :name] : | hash_extensions.rb:114:10:114:33 | call to pluck [element, element 0] : |
|
||||
| hash_extensions.rb:114:10:114:15 | values [element 1, element :name] : | hash_extensions.rb:114:10:114:33 | call to pluck [element, element 0] : |
|
||||
| hash_extensions.rb:114:10:114:33 | call to pluck [element, element 0] : | hash_extensions.rb:114:10:114:36 | ...[...] [element 0] : |
|
||||
| hash_extensions.rb:114:10:114:33 | call to pluck [element, element 0] : | hash_extensions.rb:114:10:114:36 | ...[...] [element 0] : |
|
||||
| hash_extensions.rb:114:10:114:36 | ...[...] [element 0] : | hash_extensions.rb:114:10:114:39 | ...[...] |
|
||||
| hash_extensions.rb:114:10:114:36 | ...[...] [element 0] : | hash_extensions.rb:114:10:114:39 | ...[...] |
|
||||
| hash_extensions.rb:115:10:115:15 | values [element 0, element :id] : | hash_extensions.rb:115:10:115:33 | call to pluck [element, element 1] : |
|
||||
| hash_extensions.rb:115:10:115:15 | values [element 0, element :id] : | hash_extensions.rb:115:10:115:33 | call to pluck [element, element 1] : |
|
||||
| hash_extensions.rb:115:10:115:15 | values [element 1, element :id] : | hash_extensions.rb:115:10:115:33 | call to pluck [element, element 1] : |
|
||||
| hash_extensions.rb:115:10:115:15 | values [element 1, element :id] : | hash_extensions.rb:115:10:115:33 | call to pluck [element, element 1] : |
|
||||
| hash_extensions.rb:115:10:115:33 | call to pluck [element, element 1] : | hash_extensions.rb:115:10:115:36 | ...[...] [element 1] : |
|
||||
| hash_extensions.rb:115:10:115:33 | call to pluck [element, element 1] : | hash_extensions.rb:115:10:115:36 | ...[...] [element 1] : |
|
||||
| hash_extensions.rb:115:10:115:36 | ...[...] [element 1] : | hash_extensions.rb:115:10:115:39 | ...[...] |
|
||||
| hash_extensions.rb:115:10:115:36 | ...[...] [element 1] : | hash_extensions.rb:115:10:115:39 | ...[...] |
|
||||
| hash_extensions.rb:122:15:122:25 | call to source : | hash_extensions.rb:125:10:125:15 | single [element 0] : |
|
||||
| hash_extensions.rb:122:15:122:25 | call to source : | hash_extensions.rb:125:10:125:15 | single [element 0] : |
|
||||
| hash_extensions.rb:123:14:123:24 | call to source : | hash_extensions.rb:126:10:126:14 | multi [element 0] : |
|
||||
| hash_extensions.rb:123:14:123:24 | call to source : | hash_extensions.rb:126:10:126:14 | multi [element 0] : |
|
||||
| hash_extensions.rb:125:10:125:15 | single [element 0] : | hash_extensions.rb:125:10:125:20 | call to sole |
|
||||
| hash_extensions.rb:125:10:125:15 | single [element 0] : | hash_extensions.rb:125:10:125:20 | call to sole |
|
||||
| hash_extensions.rb:126:10:126:14 | multi [element 0] : | hash_extensions.rb:126:10:126:19 | call to sole |
|
||||
| hash_extensions.rb:126:10:126:14 | multi [element 0] : | hash_extensions.rb:126:10:126:19 | call to sole |
|
||||
nodes
|
||||
| active_support.rb:10:9:10:18 | call to source : | semmle.label | call to source : |
|
||||
| active_support.rb:11:10:11:10 | x : | semmle.label | x : |
|
||||
@@ -686,6 +819,150 @@ nodes
|
||||
| hash_extensions.rb:74:10:74:10 | h [element] : | semmle.label | h [element] : |
|
||||
| hash_extensions.rb:74:10:74:16 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:74:10:74:16 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:80:15:80:25 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:80:15:80:25 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:80:28:80:38 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:80:28:80:38 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:80:41:80:51 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:80:41:80:51 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:81:9:81:14 | values [element 0] : | semmle.label | values [element 0] : |
|
||||
| hash_extensions.rb:81:9:81:14 | values [element 0] : | semmle.label | values [element 0] : |
|
||||
| hash_extensions.rb:81:9:81:14 | values [element 1] : | semmle.label | values [element 1] : |
|
||||
| hash_extensions.rb:81:9:81:14 | values [element 1] : | semmle.label | values [element 1] : |
|
||||
| hash_extensions.rb:81:9:81:14 | values [element 2] : | semmle.label | values [element 2] : |
|
||||
| hash_extensions.rb:81:9:81:14 | values [element 2] : | semmle.label | values [element 2] : |
|
||||
| hash_extensions.rb:81:9:84:7 | call to index_with [element] : | semmle.label | call to index_with [element] : |
|
||||
| hash_extensions.rb:81:9:84:7 | call to index_with [element] : | semmle.label | call to index_with [element] : |
|
||||
| hash_extensions.rb:81:31:81:33 | key : | semmle.label | key : |
|
||||
| hash_extensions.rb:81:31:81:33 | key : | semmle.label | key : |
|
||||
| hash_extensions.rb:82:14:82:16 | key | semmle.label | key |
|
||||
| hash_extensions.rb:82:14:82:16 | key | semmle.label | key |
|
||||
| hash_extensions.rb:83:9:83:19 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:83:9:83:19 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:86:10:86:10 | h [element] : | semmle.label | h [element] : |
|
||||
| hash_extensions.rb:86:10:86:10 | h [element] : | semmle.label | h [element] : |
|
||||
| hash_extensions.rb:86:10:86:16 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:86:10:86:16 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:87:10:87:10 | h [element] : | semmle.label | h [element] : |
|
||||
| hash_extensions.rb:87:10:87:10 | h [element] : | semmle.label | h [element] : |
|
||||
| hash_extensions.rb:87:10:87:16 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:87:10:87:16 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:89:9:89:38 | call to index_with [element] : | semmle.label | call to index_with [element] : |
|
||||
| hash_extensions.rb:89:9:89:38 | call to index_with [element] : | semmle.label | call to index_with [element] : |
|
||||
| hash_extensions.rb:89:27:89:37 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:89:27:89:37 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:91:10:91:10 | j [element] : | semmle.label | j [element] : |
|
||||
| hash_extensions.rb:91:10:91:10 | j [element] : | semmle.label | j [element] : |
|
||||
| hash_extensions.rb:91:10:91:16 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:91:10:91:16 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:92:10:92:10 | j [element] : | semmle.label | j [element] : |
|
||||
| hash_extensions.rb:92:10:92:10 | j [element] : | semmle.label | j [element] : |
|
||||
| hash_extensions.rb:92:10:92:16 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:92:10:92:16 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:98:21:98:31 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:98:21:98:31 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:98:40:98:54 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:98:40:98:54 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:99:10:99:15 | values [element 0, element :id] : | semmle.label | values [element 0, element :id] : |
|
||||
| hash_extensions.rb:99:10:99:15 | values [element 0, element :id] : | semmle.label | values [element 0, element :id] : |
|
||||
| hash_extensions.rb:99:10:99:25 | call to pick | semmle.label | call to pick |
|
||||
| hash_extensions.rb:99:10:99:25 | call to pick | semmle.label | call to pick |
|
||||
| hash_extensions.rb:100:10:100:15 | values [element 0, element :name] : | semmle.label | values [element 0, element :name] : |
|
||||
| hash_extensions.rb:100:10:100:15 | values [element 0, element :name] : | semmle.label | values [element 0, element :name] : |
|
||||
| hash_extensions.rb:100:10:100:27 | call to pick | semmle.label | call to pick |
|
||||
| hash_extensions.rb:100:10:100:27 | call to pick | semmle.label | call to pick |
|
||||
| hash_extensions.rb:101:10:101:15 | values [element 0, element :id] : | semmle.label | values [element 0, element :id] : |
|
||||
| hash_extensions.rb:101:10:101:15 | values [element 0, element :id] : | semmle.label | values [element 0, element :id] : |
|
||||
| hash_extensions.rb:101:10:101:32 | call to pick [element 0] : | semmle.label | call to pick [element 0] : |
|
||||
| hash_extensions.rb:101:10:101:32 | call to pick [element 0] : | semmle.label | call to pick [element 0] : |
|
||||
| hash_extensions.rb:101:10:101:35 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:101:10:101:35 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:102:10:102:15 | values [element 0, element :name] : | semmle.label | values [element 0, element :name] : |
|
||||
| hash_extensions.rb:102:10:102:15 | values [element 0, element :name] : | semmle.label | values [element 0, element :name] : |
|
||||
| hash_extensions.rb:102:10:102:32 | call to pick [element 1] : | semmle.label | call to pick [element 1] : |
|
||||
| hash_extensions.rb:102:10:102:32 | call to pick [element 1] : | semmle.label | call to pick [element 1] : |
|
||||
| hash_extensions.rb:102:10:102:35 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:102:10:102:35 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:103:10:103:15 | values [element 0, element :name] : | semmle.label | values [element 0, element :name] : |
|
||||
| hash_extensions.rb:103:10:103:15 | values [element 0, element :name] : | semmle.label | values [element 0, element :name] : |
|
||||
| hash_extensions.rb:103:10:103:32 | call to pick [element 0] : | semmle.label | call to pick [element 0] : |
|
||||
| hash_extensions.rb:103:10:103:32 | call to pick [element 0] : | semmle.label | call to pick [element 0] : |
|
||||
| hash_extensions.rb:103:10:103:35 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:103:10:103:35 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:104:10:104:15 | values [element 0, element :id] : | semmle.label | values [element 0, element :id] : |
|
||||
| hash_extensions.rb:104:10:104:15 | values [element 0, element :id] : | semmle.label | values [element 0, element :id] : |
|
||||
| hash_extensions.rb:104:10:104:32 | call to pick [element 1] : | semmle.label | call to pick [element 1] : |
|
||||
| hash_extensions.rb:104:10:104:32 | call to pick [element 1] : | semmle.label | call to pick [element 1] : |
|
||||
| hash_extensions.rb:104:10:104:35 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:104:10:104:35 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:110:21:110:31 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:110:21:110:31 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:110:40:110:54 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:110:40:110:54 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:110:65:110:75 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:110:65:110:75 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:110:84:110:99 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:110:84:110:99 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:111:10:111:15 | values [element 0, element :name] : | semmle.label | values [element 0, element :name] : |
|
||||
| hash_extensions.rb:111:10:111:15 | values [element 0, element :name] : | semmle.label | values [element 0, element :name] : |
|
||||
| hash_extensions.rb:111:10:111:15 | values [element 1, element :name] : | semmle.label | values [element 1, element :name] : |
|
||||
| hash_extensions.rb:111:10:111:15 | values [element 1, element :name] : | semmle.label | values [element 1, element :name] : |
|
||||
| hash_extensions.rb:111:10:111:28 | call to pluck [element] : | semmle.label | call to pluck [element] : |
|
||||
| hash_extensions.rb:111:10:111:28 | call to pluck [element] : | semmle.label | call to pluck [element] : |
|
||||
| hash_extensions.rb:111:10:111:31 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:111:10:111:31 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:112:10:112:15 | values [element 0, element :id] : | semmle.label | values [element 0, element :id] : |
|
||||
| hash_extensions.rb:112:10:112:15 | values [element 0, element :id] : | semmle.label | values [element 0, element :id] : |
|
||||
| hash_extensions.rb:112:10:112:15 | values [element 1, element :id] : | semmle.label | values [element 1, element :id] : |
|
||||
| hash_extensions.rb:112:10:112:15 | values [element 1, element :id] : | semmle.label | values [element 1, element :id] : |
|
||||
| hash_extensions.rb:112:10:112:33 | call to pluck [element, element 0] : | semmle.label | call to pluck [element, element 0] : |
|
||||
| hash_extensions.rb:112:10:112:33 | call to pluck [element, element 0] : | semmle.label | call to pluck [element, element 0] : |
|
||||
| hash_extensions.rb:112:10:112:36 | ...[...] [element 0] : | semmle.label | ...[...] [element 0] : |
|
||||
| hash_extensions.rb:112:10:112:36 | ...[...] [element 0] : | semmle.label | ...[...] [element 0] : |
|
||||
| hash_extensions.rb:112:10:112:39 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:112:10:112:39 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:113:10:113:15 | values [element 0, element :name] : | semmle.label | values [element 0, element :name] : |
|
||||
| hash_extensions.rb:113:10:113:15 | values [element 0, element :name] : | semmle.label | values [element 0, element :name] : |
|
||||
| hash_extensions.rb:113:10:113:15 | values [element 1, element :name] : | semmle.label | values [element 1, element :name] : |
|
||||
| hash_extensions.rb:113:10:113:15 | values [element 1, element :name] : | semmle.label | values [element 1, element :name] : |
|
||||
| hash_extensions.rb:113:10:113:33 | call to pluck [element, element 1] : | semmle.label | call to pluck [element, element 1] : |
|
||||
| hash_extensions.rb:113:10:113:33 | call to pluck [element, element 1] : | semmle.label | call to pluck [element, element 1] : |
|
||||
| hash_extensions.rb:113:10:113:36 | ...[...] [element 1] : | semmle.label | ...[...] [element 1] : |
|
||||
| hash_extensions.rb:113:10:113:36 | ...[...] [element 1] : | semmle.label | ...[...] [element 1] : |
|
||||
| hash_extensions.rb:113:10:113:39 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:113:10:113:39 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:114:10:114:15 | values [element 0, element :name] : | semmle.label | values [element 0, element :name] : |
|
||||
| hash_extensions.rb:114:10:114:15 | values [element 0, element :name] : | semmle.label | values [element 0, element :name] : |
|
||||
| hash_extensions.rb:114:10:114:15 | values [element 1, element :name] : | semmle.label | values [element 1, element :name] : |
|
||||
| hash_extensions.rb:114:10:114:15 | values [element 1, element :name] : | semmle.label | values [element 1, element :name] : |
|
||||
| hash_extensions.rb:114:10:114:33 | call to pluck [element, element 0] : | semmle.label | call to pluck [element, element 0] : |
|
||||
| hash_extensions.rb:114:10:114:33 | call to pluck [element, element 0] : | semmle.label | call to pluck [element, element 0] : |
|
||||
| hash_extensions.rb:114:10:114:36 | ...[...] [element 0] : | semmle.label | ...[...] [element 0] : |
|
||||
| hash_extensions.rb:114:10:114:36 | ...[...] [element 0] : | semmle.label | ...[...] [element 0] : |
|
||||
| hash_extensions.rb:114:10:114:39 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:114:10:114:39 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:115:10:115:15 | values [element 0, element :id] : | semmle.label | values [element 0, element :id] : |
|
||||
| hash_extensions.rb:115:10:115:15 | values [element 0, element :id] : | semmle.label | values [element 0, element :id] : |
|
||||
| hash_extensions.rb:115:10:115:15 | values [element 1, element :id] : | semmle.label | values [element 1, element :id] : |
|
||||
| hash_extensions.rb:115:10:115:15 | values [element 1, element :id] : | semmle.label | values [element 1, element :id] : |
|
||||
| hash_extensions.rb:115:10:115:33 | call to pluck [element, element 1] : | semmle.label | call to pluck [element, element 1] : |
|
||||
| hash_extensions.rb:115:10:115:33 | call to pluck [element, element 1] : | semmle.label | call to pluck [element, element 1] : |
|
||||
| hash_extensions.rb:115:10:115:36 | ...[...] [element 1] : | semmle.label | ...[...] [element 1] : |
|
||||
| hash_extensions.rb:115:10:115:36 | ...[...] [element 1] : | semmle.label | ...[...] [element 1] : |
|
||||
| hash_extensions.rb:115:10:115:39 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:115:10:115:39 | ...[...] | semmle.label | ...[...] |
|
||||
| hash_extensions.rb:122:15:122:25 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:122:15:122:25 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:123:14:123:24 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:123:14:123:24 | call to source : | semmle.label | call to source : |
|
||||
| hash_extensions.rb:125:10:125:15 | single [element 0] : | semmle.label | single [element 0] : |
|
||||
| hash_extensions.rb:125:10:125:15 | single [element 0] : | semmle.label | single [element 0] : |
|
||||
| hash_extensions.rb:125:10:125:20 | call to sole | semmle.label | call to sole |
|
||||
| hash_extensions.rb:125:10:125:20 | call to sole | semmle.label | call to sole |
|
||||
| hash_extensions.rb:126:10:126:14 | multi [element 0] : | semmle.label | multi [element 0] : |
|
||||
| hash_extensions.rb:126:10:126:14 | multi [element 0] : | semmle.label | multi [element 0] : |
|
||||
| hash_extensions.rb:126:10:126:19 | call to sole | semmle.label | call to sole |
|
||||
| hash_extensions.rb:126:10:126:19 | call to sole | semmle.label | call to sole |
|
||||
subpaths
|
||||
#select
|
||||
| active_support.rb:182:10:182:13 | ...[...] | active_support.rb:180:10:180:17 | call to source : | active_support.rb:182:10:182:13 | ...[...] | $@ | active_support.rb:180:10:180:17 | call to source : | call to source : |
|
||||
@@ -723,3 +1000,28 @@ subpaths
|
||||
| hash_extensions.rb:74:10:74:16 | ...[...] | hash_extensions.rb:67:15:67:25 | call to source : | hash_extensions.rb:74:10:74:16 | ...[...] | $@ | hash_extensions.rb:67:15:67:25 | call to source : | call to source : |
|
||||
| hash_extensions.rb:74:10:74:16 | ...[...] | hash_extensions.rb:67:28:67:38 | call to source : | hash_extensions.rb:74:10:74:16 | ...[...] | $@ | hash_extensions.rb:67:28:67:38 | call to source : | call to source : |
|
||||
| hash_extensions.rb:74:10:74:16 | ...[...] | hash_extensions.rb:67:41:67:51 | call to source : | hash_extensions.rb:74:10:74:16 | ...[...] | $@ | hash_extensions.rb:67:41:67:51 | call to source : | call to source : |
|
||||
| hash_extensions.rb:82:14:82:16 | key | hash_extensions.rb:80:15:80:25 | call to source : | hash_extensions.rb:82:14:82:16 | key | $@ | hash_extensions.rb:80:15:80:25 | call to source : | call to source : |
|
||||
| hash_extensions.rb:82:14:82:16 | key | hash_extensions.rb:80:28:80:38 | call to source : | hash_extensions.rb:82:14:82:16 | key | $@ | hash_extensions.rb:80:28:80:38 | call to source : | call to source : |
|
||||
| hash_extensions.rb:82:14:82:16 | key | hash_extensions.rb:80:41:80:51 | call to source : | hash_extensions.rb:82:14:82:16 | key | $@ | hash_extensions.rb:80:41:80:51 | call to source : | call to source : |
|
||||
| hash_extensions.rb:86:10:86:16 | ...[...] | hash_extensions.rb:83:9:83:19 | call to source : | hash_extensions.rb:86:10:86:16 | ...[...] | $@ | hash_extensions.rb:83:9:83:19 | call to source : | call to source : |
|
||||
| hash_extensions.rb:87:10:87:16 | ...[...] | hash_extensions.rb:83:9:83:19 | call to source : | hash_extensions.rb:87:10:87:16 | ...[...] | $@ | hash_extensions.rb:83:9:83:19 | call to source : | call to source : |
|
||||
| hash_extensions.rb:91:10:91:16 | ...[...] | hash_extensions.rb:89:27:89:37 | call to source : | hash_extensions.rb:91:10:91:16 | ...[...] | $@ | hash_extensions.rb:89:27:89:37 | call to source : | call to source : |
|
||||
| hash_extensions.rb:92:10:92:16 | ...[...] | hash_extensions.rb:89:27:89:37 | call to source : | hash_extensions.rb:92:10:92:16 | ...[...] | $@ | hash_extensions.rb:89:27:89:37 | call to source : | call to source : |
|
||||
| hash_extensions.rb:99:10:99:25 | call to pick | hash_extensions.rb:98:21:98:31 | call to source : | hash_extensions.rb:99:10:99:25 | call to pick | $@ | hash_extensions.rb:98:21:98:31 | call to source : | call to source : |
|
||||
| hash_extensions.rb:100:10:100:27 | call to pick | hash_extensions.rb:98:40:98:54 | call to source : | hash_extensions.rb:100:10:100:27 | call to pick | $@ | hash_extensions.rb:98:40:98:54 | call to source : | call to source : |
|
||||
| hash_extensions.rb:101:10:101:35 | ...[...] | hash_extensions.rb:98:21:98:31 | call to source : | hash_extensions.rb:101:10:101:35 | ...[...] | $@ | hash_extensions.rb:98:21:98:31 | call to source : | call to source : |
|
||||
| hash_extensions.rb:102:10:102:35 | ...[...] | hash_extensions.rb:98:40:98:54 | call to source : | hash_extensions.rb:102:10:102:35 | ...[...] | $@ | hash_extensions.rb:98:40:98:54 | call to source : | call to source : |
|
||||
| hash_extensions.rb:103:10:103:35 | ...[...] | hash_extensions.rb:98:40:98:54 | call to source : | hash_extensions.rb:103:10:103:35 | ...[...] | $@ | hash_extensions.rb:98:40:98:54 | call to source : | call to source : |
|
||||
| hash_extensions.rb:104:10:104:35 | ...[...] | hash_extensions.rb:98:21:98:31 | call to source : | hash_extensions.rb:104:10:104:35 | ...[...] | $@ | hash_extensions.rb:98:21:98:31 | call to source : | call to source : |
|
||||
| hash_extensions.rb:111:10:111:31 | ...[...] | hash_extensions.rb:110:40:110:54 | call to source : | hash_extensions.rb:111:10:111:31 | ...[...] | $@ | hash_extensions.rb:110:40:110:54 | call to source : | call to source : |
|
||||
| hash_extensions.rb:111:10:111:31 | ...[...] | hash_extensions.rb:110:84:110:99 | call to source : | hash_extensions.rb:111:10:111:31 | ...[...] | $@ | hash_extensions.rb:110:84:110:99 | call to source : | call to source : |
|
||||
| hash_extensions.rb:112:10:112:39 | ...[...] | hash_extensions.rb:110:21:110:31 | call to source : | hash_extensions.rb:112:10:112:39 | ...[...] | $@ | hash_extensions.rb:110:21:110:31 | call to source : | call to source : |
|
||||
| hash_extensions.rb:112:10:112:39 | ...[...] | hash_extensions.rb:110:65:110:75 | call to source : | hash_extensions.rb:112:10:112:39 | ...[...] | $@ | hash_extensions.rb:110:65:110:75 | call to source : | call to source : |
|
||||
| hash_extensions.rb:113:10:113:39 | ...[...] | hash_extensions.rb:110:40:110:54 | call to source : | hash_extensions.rb:113:10:113:39 | ...[...] | $@ | hash_extensions.rb:110:40:110:54 | call to source : | call to source : |
|
||||
| hash_extensions.rb:113:10:113:39 | ...[...] | hash_extensions.rb:110:84:110:99 | call to source : | hash_extensions.rb:113:10:113:39 | ...[...] | $@ | hash_extensions.rb:110:84:110:99 | call to source : | call to source : |
|
||||
| hash_extensions.rb:114:10:114:39 | ...[...] | hash_extensions.rb:110:40:110:54 | call to source : | hash_extensions.rb:114:10:114:39 | ...[...] | $@ | hash_extensions.rb:110:40:110:54 | call to source : | call to source : |
|
||||
| hash_extensions.rb:114:10:114:39 | ...[...] | hash_extensions.rb:110:84:110:99 | call to source : | hash_extensions.rb:114:10:114:39 | ...[...] | $@ | hash_extensions.rb:110:84:110:99 | call to source : | call to source : |
|
||||
| hash_extensions.rb:115:10:115:39 | ...[...] | hash_extensions.rb:110:21:110:31 | call to source : | hash_extensions.rb:115:10:115:39 | ...[...] | $@ | hash_extensions.rb:110:21:110:31 | call to source : | call to source : |
|
||||
| hash_extensions.rb:115:10:115:39 | ...[...] | hash_extensions.rb:110:65:110:75 | call to source : | hash_extensions.rb:115:10:115:39 | ...[...] | $@ | hash_extensions.rb:110:65:110:75 | call to source : | call to source : |
|
||||
| hash_extensions.rb:125:10:125:20 | call to sole | hash_extensions.rb:122:15:122:25 | call to source : | hash_extensions.rb:125:10:125:20 | call to sole | $@ | hash_extensions.rb:122:15:122:25 | call to source : | call to source : |
|
||||
| hash_extensions.rb:126:10:126:19 | call to sole | hash_extensions.rb:123:14:123:24 | call to source : | hash_extensions.rb:126:10:126:19 | call to sole | $@ | hash_extensions.rb:123:14:123:24 | call to source : | call to source : |
|
||||
|
||||
@@ -75,3 +75,55 @@ def m_index_by
|
||||
end
|
||||
|
||||
m_index_by()
|
||||
|
||||
def m_index_with
|
||||
values = [source("a"), source("b"), source("c")]
|
||||
h = values.index_with do |key|
|
||||
sink key # $ hasValueFlow=a $ hasValueFlow=b $ hasValueFlow=c
|
||||
source("x")
|
||||
end
|
||||
|
||||
sink h[:foo] # $ hasValueFlow=x
|
||||
sink h[:bar] # $ hasValueFlow=x
|
||||
|
||||
j = values.index_with(source("y"))
|
||||
|
||||
sink j[:foo] # $ hasValueFlow=y
|
||||
sink j[:bar] # $ hasValueFlow=y
|
||||
end
|
||||
|
||||
m_index_with()
|
||||
|
||||
def m_pick
|
||||
values = [{ id: source("1"), name: source("David") }, { id: source("2"), name: source("Rafael") }]
|
||||
sink(values.pick(:id)) # $ hasValueFlow=1
|
||||
sink(values.pick(:name)) # $ hasValueFlow=David
|
||||
sink(values.pick(:id, :name)[0]) # $ hasValueFlow=1
|
||||
sink(values.pick(:id, :name)[1]) # $ hasValueFlow=David
|
||||
sink(values.pick(:name, :id)[0]) # $ hasValueFlow=David
|
||||
sink(values.pick(:name, :id)[1]) # $ hasValueFlow=1
|
||||
end
|
||||
|
||||
m_pick()
|
||||
|
||||
def m_pluck(i)
|
||||
values = [{ id: source("1"), name: source("David") }, { id: source("2"), name: source("Rafael") }]
|
||||
sink(values.pluck(:name)[i]) # $ hasValueFlow=David $ hasValueFlow=Rafael
|
||||
sink(values.pluck(:id, :name)[i][0]) # $ hasValueFlow=1 $ hasValueFlow=2
|
||||
sink(values.pluck(:id, :name)[i][1]) # $ hasValueFlow=David $ hasValueFlow=Rafael
|
||||
sink(values.pluck(:name, :id)[i][0]) # $ hasValueFlow=David $ hasValueFlow=Rafael
|
||||
sink(values.pluck(:name, :id)[i][1]) # $ hasValueFlow=1 $ hasValueFlow=2
|
||||
end
|
||||
|
||||
m_pluck(0)
|
||||
|
||||
def m_sole
|
||||
empty = []
|
||||
single = [source("a")]
|
||||
multi = [source("b"), source("c")]
|
||||
sink(empty.sole)
|
||||
sink(single.sole) # $ hasValueFlow=a
|
||||
sink(multi.sole) # TODO: model that 'sole' does not return if the receiver has multiple elements
|
||||
end
|
||||
|
||||
m_sole()
|
||||
|
||||
@@ -59,12 +59,12 @@ pathnameInstances
|
||||
| Pathname.rb:42:1:42:3 | p01 |
|
||||
| file://:0:0:0:0 | parameter position 0 of + |
|
||||
| file://:0:0:0:0 | parameter self of + |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[cleanpath] |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[expand_path] |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[realpath] |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[relative_path_from] |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[sub_ext] |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[to_path] |
|
||||
| file://:0:0:0:0 | parameter self of Pathname;Method[cleanpath] |
|
||||
| file://:0:0:0:0 | parameter self of Pathname;Method[expand_path] |
|
||||
| file://:0:0:0:0 | parameter self of Pathname;Method[realpath] |
|
||||
| file://:0:0:0:0 | parameter self of Pathname;Method[relative_path_from] |
|
||||
| file://:0:0:0:0 | parameter self of Pathname;Method[sub_ext] |
|
||||
| file://:0:0:0:0 | parameter self of Pathname;Method[to_path] |
|
||||
| file://:0:0:0:0 | parameter self of sub |
|
||||
| file://:0:0:0:0 | parameter self of to_s |
|
||||
fileSystemAccesses
|
||||
@@ -135,12 +135,12 @@ fileNameSources
|
||||
| Pathname.rb:42:1:42:3 | p01 |
|
||||
| file://:0:0:0:0 | parameter position 0 of + |
|
||||
| file://:0:0:0:0 | parameter self of + |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[cleanpath] |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[expand_path] |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[realpath] |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[relative_path_from] |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[sub_ext] |
|
||||
| file://:0:0:0:0 | parameter self of ;Pathname;Method[to_path] |
|
||||
| file://:0:0:0:0 | parameter self of Pathname;Method[cleanpath] |
|
||||
| file://:0:0:0:0 | parameter self of Pathname;Method[expand_path] |
|
||||
| file://:0:0:0:0 | parameter self of Pathname;Method[realpath] |
|
||||
| file://:0:0:0:0 | parameter self of Pathname;Method[relative_path_from] |
|
||||
| file://:0:0:0:0 | parameter self of Pathname;Method[sub_ext] |
|
||||
| file://:0:0:0:0 | parameter self of Pathname;Method[to_path] |
|
||||
| file://:0:0:0:0 | parameter self of sub |
|
||||
| file://:0:0:0:0 | parameter self of to_s |
|
||||
fileSystemReadAccesses
|
||||
|
||||
@@ -28,7 +28,7 @@ runs:
|
||||
env:
|
||||
SEMMLE_DEBUG_TRACER: 10000
|
||||
- name: Upload test logs
|
||||
if: ${{ !cancelled() }}
|
||||
if: ${{ always() }}
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: swift-integration-tests-logs-${{ runner.os }}
|
||||
|
||||
@@ -19,7 +19,7 @@ runs:
|
||||
run: |
|
||||
codeql test run \
|
||||
--threads=0 \
|
||||
--ram 52000 \
|
||||
--ram 50000 \
|
||||
--search-path "${{ github.workspace }}/swift/extractor-pack" \
|
||||
--check-databases \
|
||||
--check-unused-labels \
|
||||
|
||||
@@ -520,7 +520,8 @@ module Private {
|
||||
predicate summaryParameterNodeRange(SummarizedCallable c, ParameterPosition pos) {
|
||||
parameterReadState(c, _, pos)
|
||||
or
|
||||
isParameterPostUpdate(_, c, pos)
|
||||
// Same as `isParameterPostUpdate(_, c, pos)`, but can be used in a negative context
|
||||
any(SummaryNodeState state).isOutputState(c, SummaryComponentStack::argument(pos))
|
||||
}
|
||||
|
||||
private predicate callbackOutput(
|
||||
|
||||
Reference in New Issue
Block a user