A SQL parser and executer for Cosmos DB
npm install @zeit/cosmosdb-queryA SQL parser and executer for Cosmos DB.
``js
const { default: query } = require("@zeit/cosmosdb-query");
const items = [
{ id: "foo" },
{ id: "bar" }
];
const { result } = query("SELECT * FROM c WHERE c.id = @id")
.exec(items, {
parameters: [{ name: "@id", value: "foo" }]
});
console.log(result); // [ { id: "foo" } ]
`
- sql <string>
- Returns: <Query>
`js`
const q = query("SELECT * FROM c")
- items <Object[]> | <null>options
- <Object>parameters
- <Object[]> The parameters to pass to queryudf
- <Object>maxItemCount
- <number> The number of items to return at a timecontinuation
- <Object> Continuation tokencompositeIndexes
- <Object[][]> Optional composite index definitions for validating multiple ORDER BY properties. By default, no definition is required and this value is used only for validation.result
- Returns: <Object>
- <Object[]> Result documentscontinuation
- <Object> Continuation token for subsequent calls
Executes a query for items.
`jsSELECT VALUE udf.REGEX_MATCH("foobar", ".*bar")
query().exec([], {`
udf: {
REGEX_MATCH(input, pattern) {
return input.match(pattern) !== null
}
}
});
When the maxItemCount and/or continuation options are used,_rid
all itesms have to contain the field with unique values.
`jsSELECT * FROM c
const items = [
{ _rid: "a", value: 1 },
{ _rid: "b", value: 2 },
{ _rid: "c", value: 3 }
];
const q = query();
const { result, continuation } = q.exec(items, { maxItemCount: 2 });
console.log(result); // [ { _rid: "a", value: 1 }, { _rid: "b", value: 2 } ]
const { result: result2 } = q.exec(items, { maxItemCount: 2, continuation });
console.log(result2); // [ { _rid: "c", value: 3 } ]
`
- keys <string[]>
- Returns: <boolean>
Determines whether query may contain partition keys.
`js`
const q = query("SELECT * FROM c WHERE c.id = 1");
if (!q.containsPartitionKeys(["/key"])) {
throw new Error("query doesn't contain partition keys");
}
- <Object>
The AST object of query.
`js
const { default: query, SyntaxError } = require("@zeit/cosmosdb-query");
try {
query("INVALID SELECT").exec(items);
} catch (err) {
if (err instanceof SyntaxError) {
console.error(err);
}
throw err;
}
`
All queries are supported except spatial functions ST_ISVALID and ST_ISVALIDDETAILED.
The spatial functions ST_INTERSECTS, ST_WITHIN, and ST_DISTANCE` are supported; use parameters to pass in GeoJSON as strings. Items in collections that are GeoJSON are expected to be of type string.