Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/drylikov/cosmosdb-query
A SQL parser and executer for Cosmos DB.
https://github.com/drylikov/cosmosdb-query
Last synced: 8 days ago
JSON representation
A SQL parser and executer for Cosmos DB.
- Host: GitHub
- URL: https://github.com/drylikov/cosmosdb-query
- Owner: drylikov
- License: mit
- Created: 2024-06-15T21:05:45.000Z (5 months ago)
- Default Branch: drylikov
- Last Pushed: 2024-06-15T21:08:23.000Z (5 months ago)
- Last Synced: 2024-06-15T22:23:18.181Z (5 months ago)
- Language: TypeScript
- Size: 79.1 KB
- Stars: 1
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Cosmosdb-Query
A 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" } ]
```### query(sql)
- `sql` <string>
- Returns: <Query>```js
const q = query("SELECT * FROM c")
```## Class: Query
### q.exec(items[, options])
- `items` <Object[]> | <null>
- `options` <Object>
- `parameters` <Object[]> The parameters to pass to query
- `udf` <Object>
- `maxItemCount` <number> The number of items to return at a time
- `continuation` <Object> Continuation token
- `compositeIndexes `<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.
- Returns: <Object>
- `result` <Object[]> Result documents
- `continuation` <Object> Continuation token for subsequent callsExecutes a query for `items`.
```js
query(`SELECT VALUE udf.REGEX_MATCH("foobar", ".*bar")`).exec([], {
udf: {
REGEX_MATCH(input, pattern) {
return input.match(pattern) !== null
}
}
});
```When the `maxItemCount` and/or `continuation` options are used,
all itesms have to contain the `_rid` field with unique values.```js
const items = [
{ _rid: "a", value: 1 },
{ _rid: "b", value: 2 },
{ _rid: "c", value: 3 }
];
const q = query(`SELECT * FROM c`);
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 } ]
```### q.containsPartitionKeys(keys)
- `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");
}
```### q.ast
- <Object>
The AST object of query.
## Class: SyntaxError
```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;
}
```## Supported queries
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.