-
Notifications
You must be signed in to change notification settings - Fork 217
Description
Hello there, I would love to make this happen but has little knowledge on how to.
Basically is to implement with Korma the Google Query Language: https://cloud.google.com/datastore/docs/reference/gql_reference
The grammar is
<query> :=
SELECT ( "*"
| <property-name>+,
| DISTINCT <property-name>+,
| DISTINCT ON "(" <property-name>+, ")" "*"
| DISTINCT ON "(" <property-name>+, ")" <property-name>+, )
[ FROM <kind> ]
[ WHERE <compound-condition> ]
[ ORDER BY ( <property-name> [ ASC | DESC ] )+, ]
[ LIMIT ( <result-position> |
FIRST "(" <result-position> ,
<result-position> ")" ) ]
[ OFFSET <result-position> [ "+" <result-position> ] ]
<compound-condition> := <condition>+AND
<condition> :=
<property-name> IS NULL
| <property-name> <forward-comparator> <value>
| <value> <backward-comparator> <property-name>
<forward-comparator> :=
<either-comparator>
| CONTAINS
| HAS ANCESTOR
<backward-comparator> :=
<either-comparator>
| IN
| HAS DESCENDANT
<either-comparator> :=
=
| <
| <=
| >
| >=
<result-position> := <binding-site> | <integer-literal>
<value> :=
<binding-site>
| <synthetic-literal>
| <string-literal>
| <integer-literal>
| <double-literal>
| <boolean-literal>
| <null-literal>
<synthetic-literal> :=
KEY "("
[ "PROJECT" "(" <string-literal> ")" "," ]
[ "NAMESPACE" "(" <string-literal> ")" "," ]
<key-path-element>+, ")"
| BLOB "(" <string-literal> ")"
| DATETIME "(" <string-literal> ")"
<key-path-element> :=
<kind> "," ( <integer-literal> | <string-literal> )
<kind> := <name>
<property-name> := <name>+.
Also there are some other differences like
MySQL Differences
MySQL supports only LIMIT/OFFSET counts. Datastore GQL also supports LIMIT/OFFSET cursors.
Datastore GQL supports an OFFSET without a LIMIT, MySQL does not.
MySQL supports an offset count via keyword LIMIT, Datastore GQL does not.
A MySQL literal string can contain a raw newline. A Datastore GQL literal string cannot.
A MySQL literal string can -escape any character. A Datastore GQL literal string can only -escape a specified list of characters.
A MySQL name can begin with a digit. A Datastore GQL name cannot.
A Datastore GQL name can contain null characters. A MySQL name cannot.
A quoted Datastore GQL name can contain -escaped characters. A quoted MySQL name interprets a \ as an ordinary character.
MySQL has different operators, keywords, and predefined names than Datastore GQL.
I little of guidance of any helping soul will be pretty appreciated.