@graphenedata/cli 0.0.11 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin.js ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+
3
+ import {fileURLToPath} from 'url'
4
+ import {dirname, join} from 'path'
5
+ import {existsSync} from 'fs'
6
+
7
+ const __dirname = dirname(fileURLToPath(import.meta.url))
8
+ const devCli = join(__dirname, 'cli.ts')
9
+
10
+ // If Graphene has been npm-linked in, we can run cli.ts directly to avoid the build step
11
+ if (existsSync(devCli)) {
12
+ await import('./cli.ts')
13
+ } else {
14
+ await import('./dist/cli/cli.js')
15
+ }
package/dist/cli/cli.js CHANGED
@@ -720,7 +720,7 @@ function makeTable(name, type) {
720
720
  return { name, type, fields: [], connection: config.dialect, dialect: config.dialect, tableName: name, tablePath, metadata: {} };
721
721
  }
722
722
  function addColumnField(table2, node) {
723
- let name = txt(node.getChild("Identifier"));
723
+ let name = txt(node.getChild("ColumnName"));
724
724
  if (node.getChild("PrimaryKey")) {
725
725
  if (table2.primaryKey) diag(node, `Table ${table2.name} has multiple primary keys`);
726
726
  table2.primaryKey = name;
@@ -1077,6 +1077,8 @@ function analyzeTimeExpression(op, left2, right2, node) {
1077
1077
  function ensureSameType(left2, leftNode, right2, rightNode) {
1078
1078
  if (left2.type === "error" || right2.type === "error") return;
1079
1079
  if (left2.node === "parameter" || right2.node === "parameter") return;
1080
+ if (left2.type === "date" || left2.type === "timestamp") checkTypes(right2, [left2.type], rightNode);
1081
+ if (right2.type === "date" || right2.type === "timestamp") checkTypes(left2, [right2.type], leftNode);
1080
1082
  if (left2.type !== right2.type) diag(rightNode, `Expected ${left2.type}, got ${right2.type}`);
1081
1083
  }
1082
1084
  function checkTypes(expr, expected, node) {
@@ -1084,6 +1086,14 @@ function checkTypes(expr, expected, node) {
1084
1086
  if (expr.node === "parameter") return;
1085
1087
  if (expected.includes(expr.type)) return;
1086
1088
  if (expected.includes("generic")) return;
1089
+ let dt = expected.find((t) => t == "date") || expected.find((t) => t == "timestamp");
1090
+ if (expr.node == "stringLiteral" && dt) {
1091
+ let parsed = parseTemporalLiteral(expr.literal, dt);
1092
+ if (!parsed) return diag(node, `Could not parse ${dt} literal: "${expr.literal}"`, void 0);
1093
+ let typeDef = { type: parsed.type, timeframe: parsed.timeframe };
1094
+ Object.assign(expr, { node: "timeLiteral", literal: parsed?.literal, type: parsed?.type, typeDef });
1095
+ return;
1096
+ }
1087
1097
  diag(node, `Expected types: ${expected.join(", ")}`);
1088
1098
  }
1089
1099
  function lookupField(expr, scope) {
@@ -1250,35 +1260,35 @@ var init_parser_terms = __esm({
1250
1260
  date = 10;
1251
1261
  timestamp = 12;
1252
1262
  interval = 14;
1253
- primary_key = 17;
1254
- join = 21;
1255
- as = 27;
1256
- on = 30;
1257
- or = 39;
1258
- and = 43;
1259
- like = 52;
1260
- not = 54;
1261
- _in = 64;
1262
- from = 69;
1263
- inner = 75;
1264
- left = 77;
1265
- right = 79;
1266
- full = 81;
1267
- cross = 83;
1268
- select = 86;
1269
- where = 93;
1270
- group = 96;
1271
- by = 98;
1272
- order = 104;
1273
- asc = 108;
1274
- desc = 110;
1275
- limit = 113;
1276
- offset = 115;
1277
- is = 118;
1278
- _null = 120;
1279
- exists = 138;
1280
- _true = 142;
1281
- _false = 144;
1263
+ primary_key = 18;
1264
+ join = 22;
1265
+ as = 28;
1266
+ on = 31;
1267
+ or = 40;
1268
+ and = 44;
1269
+ like = 53;
1270
+ not = 55;
1271
+ _in = 65;
1272
+ from = 70;
1273
+ inner = 76;
1274
+ left = 78;
1275
+ right = 80;
1276
+ full = 82;
1277
+ cross = 84;
1278
+ select = 87;
1279
+ where = 94;
1280
+ group = 97;
1281
+ by = 99;
1282
+ order = 105;
1283
+ asc = 109;
1284
+ desc = 111;
1285
+ limit = 114;
1286
+ offset = 116;
1287
+ is = 119;
1288
+ _null = 121;
1289
+ exists = 139;
1290
+ _true = 143;
1291
+ _false = 145;
1282
1292
  }
1283
1293
  });
1284
1294
 
@@ -1337,24 +1347,24 @@ var init_parser = __esm({
1337
1347
  "../lang/parser.js"() {
1338
1348
  "use strict";
1339
1349
  init_tokens();
1340
- spec_Identifier = { __proto__: null, table: 10, date: 20, timestamp: 24, interval: 28, primary_key: 34, join: 42, one: 46, many: 50, as: 54, on: 60, or: 78, and: 86, like: 104, not: 108, in: 128, from: 138, inner: 150, left: 154, right: 158, full: 162, cross: 166, select: 172, distinct: 176, where: 186, group: 192, by: 196, having: 202, order: 208, asc: 216, desc: 220, limit: 226, offset: 230, is: 236, null: 240, case: 250, when: 256, then: 260, else: 266, end: 270, exists: 276, true: 284, false: 288, count: 298, extract: 304, cast: 312, extend: 338 };
1350
+ spec_Identifier = { __proto__: null, table: 10, date: 20, timestamp: 24, interval: 28, primary_key: 36, join: 44, one: 48, many: 52, as: 56, on: 62, or: 80, and: 88, like: 106, not: 110, in: 130, from: 140, inner: 152, left: 156, right: 160, full: 164, cross: 168, select: 174, distinct: 178, where: 188, group: 194, by: 198, having: 204, order: 210, asc: 218, desc: 222, limit: 228, offset: 232, is: 238, null: 242, case: 252, when: 258, then: 262, else: 268, end: 272, exists: 278, true: 286, false: 290, count: 300, extract: 306, cast: 314, extend: 340 };
1341
1351
  parser = LRParser.deserialize({
1342
1352
  version: 14,
1343
- states: "JfQYQPOOOOQO'#C_'#C_OOQO'#Dr'#DrOwQPO'#DqOOQO'#ET'#ETO#aQPO'#ESOOQO'#E['#E[OOQO'#E_'#E_O#hQPO'#E^OOQO'#Ed'#EdOOQO'#Eg'#EgO#hQPO'#EfOOQO'#Ep'#EpO#mQPO'#EoOOQO'#GQ'#GQO$ZQPO'#DpO$hQPO'#C^OOQO'#Fz'#FzO$hQPO'#FyO$mQPO'#F|QYQPOOQ%bQPO'#F|O%gQPO'#EZO%gQPO'#EcO)^QPO'#CbO)hQPO'#CbO)mQPO'#DtO#rQPO'#DvO*zQPO'#DuOOQO'#Gb'#GbO,mQPO,5:]O-aQPO'#CbO.sQPO'#CbOOQO'#Ce'#CeOOQO'#Cg'#CgOOQO'#Ci'#CiO0]QPO'#EXOOQO'#Dc'#DcO1VQPO'#DvOOQO'#EV'#EVOOQO'#EY'#EYOOQO'#EX'#EXO1pQPO,5:nO!PQPO,5:nOOQO'#Ew'#EwOOQO'#Ez'#EzOOQO'#E|'#E|O2eQPO'#E{OOQO'#FZ'#FZO2lQPO'#FYOOQO'#F_'#F_OOQO'#Fa'#FaOOQO'#F^'#F^OOQO'#Fc'#FcOOQO'#Gf'#GfOOQO'#Ff'#FfO2qQPO'#FeOOQO'#Ge'#GeOOQO'#Fi'#FiOOQO'#Fm'#FmO2vQPO'#FoO3OQPO'#FqO3TQPO'#FrOOQO'#Gd'#GdOOQO'#Gg'#GgOOQO'#G`'#G`O%gQPO'#EyO3YQPO'#FhO3_QPO'#FlOOQO'#Ea'#EaO!PQPO,5:xO3dQPO,5;QO3lQPO,5;ZOOQO-E:O-E:OO4aQPO,58xO4iQPO,5<eOOQO,5<h,5<hOOQO-E9z-E9zO4nQPO,5:uO5bQPO,5:}OOQO,5<i,5<iO6UQPO,58|OOQO-E9{-E9{OOQO'#Cv'#CvOOQO'#Cx'#CxOOQO,5:`,5:`O:PQPO,5:`O:UQPO,5:bOOQO,5:a,5:aO:PQPO,5:aOOQO'#Cp'#CpOOQO'#Dx'#DxOOQO'#Dz'#DzOOQO'#D|'#D|OOQO'#EO'#EOOOQO'#EQ'#EQOwQPO'#DwO:ZQPO'#DwOOQO'#GR'#GRO:`QPO1G/wO;SQPO,5<OOOQO,5:t,5:tOOQO'#DS'#DSO;ZQPO,59pOOQO'#DW'#DWOOQO'#Da'#DaOOQO'#DY'#DYO;iQPO,5:WOOQO'#De'#DeOOQO'#Dh'#DhOOQO'#Dm'#DmO;qQPO,5:WOOQO'#Eu'#EuO;vQPO,5;`O%gQPO,59qO%gQPO,59qO%gQPO,59qO%gQPO,59qO%gQPO,59qOOQO,5:s,5:sO:PQPO,5:sO<OQPO,5<`O<VQPO1G0YO<yQPO1G0YO<yQPO1G0YO=nQPO,5;gOOQO'#FP'#FPOOQO'#GU'#GUO=uQPO,5;gO%gQPO'#FOO#rQPO,5;tO>QQPO,5<POOQO,5<Z,5<ZO>_QPO,5<ZOOQO,5<],5<]OOQO,5<^,5<^O>dQPO,5;eOBUQPO,5<SO%gQPO,5<WOB^QPO1G0dOCRQPO'#EiOC|QPO1G0lOOQO'#Er'#ErODqQPO1G0uODvQPO1G.dOFTQPO1G2OOFYQPO1G2PPGgQPO'#F}OOQO1G/z1G/zOOQO1G/|1G/|OOQO1G/{1G/{OGlQPO,5:cOwQPO,5:cOOQO-E:P-E:POHsQPO1G1jOOQO1G1j1G1jOOQO'#DQ'#DQOOQO1G/[1G/[OOQO,59t,59tOH}QPO1G/rO1VQPO1G/rOOQO1G0z1G0zO;yQPO1G0zOLqQPO1G/]OLxQPO1G/]O!!kQPO1G/]O!!uQPO1G/]O!#PQPO1G/]OOQO1G0_1G0_OOQO1G1z1G1zOOQO,5<n,5<nO!&qQPO7+%tOOQO-E:Q-E:QO!'eQPO7+%tO=uQPO1G1ROOQO-E:S-E:SOOQO'#FU'#FUOOQO'#FW'#FWOOQO1G1R1G1RO={QPO1G1RO%gQPO'#FTO!(YQPO,5;jO!(aQPO1G1`O!(fQPO1G1kOOQO1G1k1G1kO!(mQPO1G1kO%gQPO1G1kOOQO'#Fp'#FpOOQO1G1u1G1uOOQO'#Fk'#FkO!(rQPO1G1nO.{QPO1G1rO!(wQPO7+&OO!)kQPO7+&OOOQO'#Ek'#EkOOQO'#Em'#EmOOQO,5;T,5;TO!+QQPO7+&WO!+[QPO7+&WOOQO7+&a7+&aO!,|QPO'#CbO!-^QPO'#CoO$hQPO'#CnO!.pQPO'#C}OOQO'#G_'#G_OOQO'#G^'#G^O!.zQPO'#GOO!0_QPO7+$OO!0fQPO'#C}O#rQPO7+'jO!+cQPO'#CbOOQO'#Gi'#GiO!0kQPO'#GVO!2OQPO7+'kOOQO'#Cy'#CyO%gQPO1G/}O!2VQPO1G/}O!3^QPO7+'UO!3fQPO7+'UOOQO7+'U7+'UO1VQPO7+%^O!3mQPO'#DoO!3wQPO7+%^OOQO7+&f7+&fP!PQPO'#GSO!3|QPO<<I`OOQO7+&m7+&mO={QPO7+&mO!4pQPO,5;oOOQO'#FR'#FRO%gQPO1G1UOOQO7+&z7+&zOOQO7+'V7+'VO!4wQPO7+'VO%gQPO7+'YO;ZQPO7+'^O!5OQPO<<IjOOQO,5<o,5<oO!5rQPO<<IrOOQO-E:R-E:ROOQO'#Cd'#CdO!6jQPO,58}OOQO'#Cr'#CrOOQO'#Ct'#CtOOQO,59Z,59ZO!8QQPO,59YO;ZQPO,59jO;iQPO,5<aO!8YQPO,5<aO;vQPO,5<bO%gQPO,59mO%gQPO,59mO%gQPO,59mO%gQPO,59mO%gQPO,59mO:PQPO,59iOOQO,5<j,5<jOOQO-E9|-E9|OOQO<<Gj<<GjO%gQPO,59iO!8_QPO<<KUOOQO,5<q,5<qOOQO-E:T-E:TOOQO<<KV<<KVO!8dQPO7+%iO%gQPO7+%iOOQO-E9}-E9}O!9jQPO<<JpOOQO<<Jp<<JpO!9qQPO,5<kO!9{QPO<<HxO!:QQPO,5:ZO!:YQPO,5:ZOOQO<<Hx<<HxOOQO<<JX<<JXO!:aQPO7+&pOOQO<<Jq<<JqO!:nQPO<<JtO!:uQPO<<JxP3dQPO'#GTOOQO'#Cl'#ClOOQO'#Ck'#CkOOQO1G.i1G.iO$hQPO1G.tO:PQPO1G.tOOQO1G/U1G/UO!:zQPO1G1{O1VQPO1G1{OOQO1G1|1G1|O;yQPO1G1|O!<^QPO1G/XO!<eQPO1G/XO!=vQPO1G/XO!>QQPO1G/XO!>[QPO1G/XOOQO1G/T1G/TO!?lQPO1G/TOOQOAN@pAN@pO!@xQPO<<ITP%gQPO'#GPOOQOAN@[AN@[OOQOAN>dAN>dO!BOQPO1G/uOOQOAN@`AN@`OOQOAN@dAN@dO!BVQPO'#C{OOQO7+$`7+$`O!8TQPO7+$`O1VQPO7+'gO!B[QPO7+'gOOQO7+'h7+'hO$hQPO,59gO$hQPO<<GzO!BaQPO<<KROOQO<<KR<<KROOQO1G/R1G/ROOQOAN=fAN=fOOQOAN@mAN@m",
1344
- stateData: "!Bm~O$|OS$}OS~OTPO!gQO!xSO#PUO#SVO#XXO#[YO#e[O$oaO~OShO%PkO~OSoOYqO[rO^sO!WuO!Y}O!Z}O!]xO#^!WO#l|O#q!OO$O!QO$P!WO$S!SO$U!TO$Z!XO$^![O$b!]O$g!aO%PvO~O!zwO~P!PO#U!gO~O#^!jO~O!gQO!xSO#PUO#SVO#XXO#[YO#e[O~O$z!dX%[!dX%V!dX~P#rOShO~O%[!nOT$pX!g$pX!x$pX#P$pX#S$pX#X$pX#[$pX#e$pX$o$pX$z$pX~O%[!nO~OSoOYqO[rO^sO!WuO!Y}O!Z}O#^!WO#l|O#q!OO$O!QO$P!WO$S!SO$U!TO$Z!XO$^![O$b!]O$g!aO%PvO~O%O!rOSUXeUXkUX!gUX!mUX!oUX!qUX!sUX!uUX!xUX#PUX#SUX#XUX#[UX#eUX$zUX%[UX%VUXpUXYUX[UX^UX!WUX!YUX!ZUX#^UX#lUX#qUX$OUX$PUX$SUX$UUX$ZUX$^UX$bUX$gUX%TUX~O%PUXnUX~P&tOS!sO~OS!vOk!uOe!hX!g!hX!m!hX!o!hX!q!hX!s!hX!u!hX!x!hX#P!hX#S!hX#X!hX#[!hX#e!hX$z!hX%[!hX%V!hXn!hX~OS!vOk!uOe!iX!g!iX!m!iX!o!iX!q!iX!s!iX!u!iX!x!iX#P!iX#S!iX#X!iX#[!iX#e!iX$z!iX%[!iX%V!iXn!iX~Oe!|O!m!}O!o#OO!q#PO!s#QO!u#RO~O!g!ea!x!ea#P!ea#S!ea#X!ea#[!ea#e!ea$z!ea%[!ea%V!ea~P,XO%P#WOsUXwUX{UX}UX!OUX!PUX!QUX!RUX!SUX!UUX!]UX!^UX!_UX!bUX#jUX#tUX#vUX#{UX#yUX~P&tOS!sO!]#XO~Ok!uOp#^Os#ZOw#YO{#[O}#^O!O#^O!P#^O!Q#^O!R#^O!S#^O!U#]O!WuO!Y#`O!Z#`O!]#aO!^#aO!_#aO!b#bO#j#dO~OS!vO!g!{X!x!{X#P!{X#S!{X#X!{X#[!{X#e!{X$z!{X%T!{X%[!{X%V!{X~P.{O!gQO!xSO#PUO#SVO#XXO#[YO#e[O~P%gO%T#nO!g!va!x!va#P!va#S!va#X!va#[!va#e!va$z!va%[!va%V!va~O#t#rO~P%gO%P#vO~O%P#wO~O#^#yO$P#xO~O$P#zO~O$P#{O~O%P#}O~O%P$OO~OS$QO#^$QO~O#g$SO!g#ca!x#ca#P#ca#S#ca#X#ca#[#ca#e#ca$z#ca%[#ca%V#ca~Ok!uO%P$UO~O%P$WO~O!g!}a!x!}a#P!}a#S!}a#X!}a#[!}a#e!}a$z!}a%[!}a%V!}a~P/OO!g#Va!x#Va#P#Va#S#Va#X#Va#[#Va#e#Va$z#Va%[#Va%V#Va~P/OO%O!rOSUaeUakUa!gUa!mUa!oUa!qUa!sUa!uUa!xUa#PUa#SUa#XUa#[Ua#eUa$zUa%[UapUasUawUa{Ua}Ua!OUa!PUa!QUa!RUa!SUa!UUa!WUa!YUa!ZUa!]Ua!^Ua!_Ua!bUa#jUa%TUa%PUa%VUa#tUanUa#vUa#{Ua#yUaYUa[Ua^Ua#^Ua#lUa#qUa$OUa$PUa$SUa$UUa$ZUa$^Ua$bUa$gUa~OS!vO~O%V$ZO~Oe!|O~O!g!ei!x!ei#P!ei#S!ei#X!ei#[!ei#e!ei$z!ei%[!ei%V!ei~P,XO%V$aO~P%gOS$bOYqO[rO^sO~O!U#]O!b#bO~O%P$fO~O!WuO#l|O~O%V$oO~P/OO!g!vi!x!vi#P!vi#S!vi#X!vi#[!vi#e!vi$z!vi%[!vi%V!vi~P!PO%T$qO!g!vi!x!vi#P!vi#S!vi#X!vi#[!vi#e!vi$z!vi%[!vi%V!vi~O#t#rO~P/OO#t#rO#y$vO#{$wO~O!]%PO!zwO%V%OO~P%gOS%RO~Os#ZOS#mak#map#maw#ma{#ma}#ma!O#ma!P#ma!Q#ma!R#ma!S#ma!U#ma!W#ma!Y#ma!Z#ma!]#ma!^#ma!_#ma!b#ma!g#ma!x#ma#P#ma#S#ma#X#ma#[#ma#e#ma#j#ma$z#ma%T#ma%[#ma%V#ma#t#ma#v#ma#{#mae#ma!m#ma!o#ma!q#ma!s#ma!u#ma#y#maY#ma[#ma^#ma#^#ma#l#ma#q#ma$O#ma$P#ma$S#ma$U#ma$Z#ma$^#ma$b#ma$g#ma~OS%TO$P%TO~O%T%WO!g#Qi!x#Qi#P#Qi#S#Qi#X#Qi#[#Qi#e#Qi$z#Qi%[#Qi%V#Qi~O#`%YO#b%ZO!g#]X!x#]X#P#]X#S#]X#X#]X#[#]X#e#]X$z#]X%T#]X%[#]X%V#]X~O%T%]O!g#Yi!x#Yi#P#Yi#S#Yi#X#Yi#[#Yi#e#Yi$z#Yi%[#Yi%V#Yi~O#^%_O~OS%`OYqO[rO^sOe!|O!WuO!Y}O!Z}O#^!WO#l|O#q!OO$O!QO$P!WO$S!SO$U!TO$Z!XO$^![O$b!]O$g!aO~O%P%iO~OS%jOYqO[rO^sOe!|O!WuO!Y}O!Z}O#^!WO#l|O#q!OO$O!QO$P!WO$S!SO$U!TO$Z!XO$^![O$b!]O$g!aO~O%O!rO~On%nOe!ka!g!ka!m!ka!o!ka!q!ka!s!ka!u!ka!x!ka#P!ka#S!ka#X!ka#[!ka#e!ka$z!ka%[!ka%V!ka~O%T%rO%V%sO~P/OO%P%tO~Op#^Os#ZO}#^O!O#^O!P#^O!Q#^O!R#^O!S#^O!U#]O!WuO!Y#`O!Z#`O!]#aO!^#aO!_#aO!b#bO#j#dOSyikyiwyi!gyi!xyi#Pyi#Syi#Xyi#[yi#eyi$zyi%Tyi%[yi%Vyi#tyi#vyi#{yieyi!myi!oyi!qyi!syi!uyi#yyiYyi[yi^yi#^yi#lyi#qyi$Oyi$Pyi$Syi$Uyi$Zyi$^yi$byi$gyi~O{#[O~PISO{yi~PISOs#ZO!]#aO!^#aO!_#aOSyikyipyiwyi{yi}yi!Oyi!Pyi!Qyi!Ryi!Syi!Uyi!Wyi!byi!gyi!xyi#Pyi#Syi#Xyi#[yi#eyi#jyi$zyi%Tyi%[yi%Vyi#tyi#vyi#{yieyi!myi!oyi!qyi!syi!uyi#yyiYyi[yi^yi#^yi#lyi#qyi$Oyi$Pyi$Syi$Uyi$Zyi$^yi$byi$gyi~O!Y#`O!Z#`O~PMPO!Yyi!Zyi~PMPOs#ZOSyikyipyiwyi{yi}yi!Oyi!Pyi!Qyi!Ryi!Syi!Uyi!Wyi!Yyi!Zyi!]yi!^yi!_yi!byi!gyi!xyi#Pyi#Syi#Xyi#[yi#eyi#jyi$zyi%Tyi%[yi%Vyi#tyi#vyi#{yieyi!myi!oyi!qyi!syi!uyi#yyiYyi[yi^yi#^yi#lyi#qyi$Oyi$Pyi$Syi$Uyi$Zyi$^yi$byi$gyi~O!g!vq!x!vq#P!vq#S!vq#X!vq#[!vq#e!vq$z!vq%[!vq%V!vq~P!PO%T%yO!g!vq!x!vq#P!vq#S!vq#X!vq#[!vq#e!vq$z!vq%[!vq%V!vq~O#v%}O~P/OO%V&PO~O%V&QO~P/OO%V&QO~O!gQO~O!g#Qq!x#Qq#P#Qq#S#Qq#X#Qq#[#Qq#e#Qq$z#Qq%[#Qq%V#Qq~P!PO%T&UO!g#Qq!x#Qq#P#Qq#S#Qq#X#Qq#[#Qq#e#Qq$z#Qq%[#Qq%V#Qq~O!g#Yq!x#Yq#P#Yq#S#Yq#X#Yq#[#Yq#e#Yq$z#Yq%[#Yq%V#Yq~OS$QO#^$QO~P!*`O%T&WO~P!*`O%O!rO%P#WOkUXpUXsUXwUX{UX}UX!OUX!PUX!QUX!RUX!SUX!UUX!WUX!YUX!ZUX!]UX!^UX!_UX!bUX#jUX$klX~OS&YOYqO[rO^sO~P!+cOg&[Oi&]O~Op#^Ow#YO{#[O}#^O!O#^O!P#^O!Q#^O!R#^O!S#^O!U#]O!WuO!Y#`O!Z#`O!]#aO!^#aO!_#aO!b#bO#j#dO~Ok!uOs&`O~P!-fO%T&jOS$rXY$rX[$rX^$rXe$rX!W$rX!Y$rX!Z$rX#^$rX#l$rX#q$rX$O$rX$P$rX$S$rX$U$rX$Z$rX$^$rX$b$rX$g$rX%V$rX~O%V&lO~PDvO$k&mO~O%T&oOS$yXY$yX[$yX^$yXe$yX!W$yX!Y$yX!Z$yX#^$yX#l$yX#q$yX$O$yX$P$yX$S$yX$U$yX$Z$yX$^$yX$b$yX$g$yX%V$yX~O%V&qO~PFYOn%nOe!ki!g!ki!m!ki!o!ki!q!ki!s!ki!u!ki!x!ki#P!ki#S!ki#X!ki#[!ki#e!ki$z!ki%[!ki%V!ki~O%T&uO%V&vO~O%V&vO~P%gO%T&zO%V!cX~P/OO%V&{O~O!g!vy!x!vy#P!vy#S!vy#X!vy#[!vy#e!vy$z!vy%[!vy%V!vy~P!PO#{#wa~P/OO%V'OO~P/OO!g#Qy!x#Qy#P#Qy#S#Qy#X#Qy#[#Qy#e#Qy$z#Qy%[#Qy%V#Qy~P!POS$QO#^$QO!g#Yy!x#Yy#P#Yy#S#Yy#X#Yy#[#Yy#e#Yy$z#Yy%[#Yy%V#Yy~Oa'SOSVaYVa[Va^VaeVa!WVa!YVa!ZVa#^Va#lVa#qVa$OVa$PVa$SVa$UVa$ZVa$^Va$bVa$gVa%TVa%VVa~Ok!uOn%nO~O%P'ZO~O%V'eO~Oe!kq!g!kq!m!kq!o!kq!q!kq!s!kq!u!kq!x!kq#P!kq#S!kq#X!kq#[!kq#e!kq$z!kq%[!kq%V!kq~P/OO%V'hO~P%gO%T$sa%V$sa~P/OO%V'iO~O%T'jO%V!ca~O%V!ca~P%gO#t#rq#y#rq#{#rq~P/OO%V'kO~P/OO%V'lO~O%P'pO~Op#^Os#ZO}#^O!O#^O!P#^O!Q#^O!R#^O!S#^O!U#]O!WuO!Y#`O!Z#`O!]#aO!^#aO!_#aO!b#bO#j#dOkuiwui~O{#[O~P!;PO{ui~P!;POs#ZO!]#aO!^#aO!_#aOkuipuiwui{ui}ui!Oui!Pui!Qui!Rui!Sui!Uui!Wui!bui#jui~O!Y#`O!Z#`O~P!<lO!Yui!Zui~P!<lOs#ZOkuipuiwui{ui}ui!Oui!Pui!Qui!Rui!Sui!Uui!Wui!Yui!Zui!]ui!^ui!_ui!bui#jui~OSqiYqi[qi^qieqi#^qi#lqi#qqi$Oqi$Pqi$Sqi$Uqi$Zqi$^qi$bqi$gqi%Tqi%Vqi~P/OOe!ky!g!ky!m!ky!o!ky!q!ky!s!ky!u!ky!x!ky#P!ky#S!ky#X!ky#[!ky#e!ky$z!ky%[!ky%V!ky~P/OO%V!ci~P%gOp'sO~O%V'vO~O%V'yO~O$}!Zs$k!]!^~",
1345
- goto: "! V%^PP%_%cPP%g'Q'U'XP(eP)qP*}+QP+T+]+cP+pP+pP+sP,Y,xP-UP+T-[P-b-[-kP.S.S/SP/mPPPPPP0YP0wP2nPP3]PPP.S3|P4o4{5g5tP6U6U6Z7`7dP7dP7dP7dP7dP5g7hP7uP7{8^5g8iP5g8vP9TP5g9ZP5g9hP9uP9}P9}P5g:QP:_P.S:bP:}P<_=c<_>gP?k?qP?wP?z@QP@UP<_@`PPAdBhPBhPAdClClDpP<_EtPFx<_F{P<_HP<_<_P6`-[-[P%_%_HSPHWH^IqIwJRJbJhJvJ|KWPPPPPPK^KbKhPMrPM{<_Cl.SP! RTcOdT`OdUjR#S$^#S!ZTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%g%m%o%r%t%x%y&O&S&U&d&e&f&g&h&m&s&u&z'Z'g'j'pQ!l`Q!mbQ&_%bS'm'V'tR'w'sT%e$U%gR&Z%`#S!_Tfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%g%m%o%r%t%x%y&O&S&U&d&e&f&g&h&m&s&u&z'Z'g'j'pU$b#Z&T&`R&Y%`#S!`Tfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%g%m%o%r%t%x%y&O&S&U&d&e&f&g&h&m&s&u&z'Z'g'j'pU$b#Z&T&`R&Y%`#S!^Tfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%g%m%o%r%t%x%y&O&S&U&d&e&f&g&h&m&s&u&z'Z'g'j'pU$b#Z&T&`R&Y%`R'U&ZR'T&ZS%e$U%gT%k$W%mX%b$U$W%g%mS#Sn#VQ$^#TX%a$U$W%g%mR&^%aQ!xjQ!{lQ#ltQ$V!lQ&T%VQ&i%cR'W&_Q!wjQ!zlQ#ktQ$Y!xQ$[!{Q$n#lW%h$U$W%g%mQ'c&iR'o'WQ%o$]Q&s%pQ'V&_R't'oQ'n'VR'x'tX%d$U$W%g%mQ$c#ZQ'Q&TR'X&`t#ft!p!q#m#q$`${$}%V%u%|&R&r&w&}'P'd'fR&d%c!{!cTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$f$q$z%Q%W%o%r%t%x%y&O&S&U&d&e&f&g&h&m&s&u&z'Z'g'j'px#gt!p!q#m#q$`$i${$}%V%u%|&R&r&w&}'P'^'d'fR&e%c|#ht!p!q#m#q$`$i$j${$}%V%u%|&R&r&w&}'P'^'_'d'fR&f%c!O#^t!p!q#m#q$`$i$j${$}%V%c%u%|&R&r&w&}'P'^'_'d'fT$d#_&a#S}Tfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%g%m%o%r%t%x%y&O&S&U&d&e&f&g&h&m&s&u&z'Z'g'j'p|#_t!p!q#m#q$`$i$j${$}%V%u%|&R&r&w&}'P'^'_'d'fQ$h#eQ&a%cR']&c!Q#it!p!q#m#q$`$i$j$k${$}%V%u%|&R&r&w&}'P'^'_'`'d'fR&g%c!U#jt!p!q#m#q$`$i$j$k$l${$}%V%u%|&R&r&w&}'P'^'_'`'a'd'fR&h%c|#ct!p!q#m#q$`$i$j${$}%V%u%|&R&r&w&}'P'^'_'d'fQ$e#_Q&b%cR'Y&aQ%v$fQ&x%tQ'q'ZR'u'pSeOdS!ykvQ$|#vQ%v$fQ&n%iQ&x%tQ'q'ZR'u'pg^O_dkv#v$f%i%t'Z'pfRO_dkv#v$f%i%t'Z'pR&S%UVmR#S$^UlR#S$^!{!bTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$f$q$z%Q%W%o%r%t%x%y&O&S&U&d&e&f&g&h&m&s&u&z'Z'g'j'pT#Un#VT#Tn#VgTO_dkv#v$f%i%t'Z'pQ{TR%Q#wQzTQ#p{Q$P!h]$p#n$q%W%x%y&UcyT{!h#n$q%W%x%y&UgfO_dkv#v$f%i%t'Z'pgWO_dkv#v$f%i%t'Z'pQ!hWR!iZggO_dkv#v$f%i%t'Z'pgZO_dkv#v$f%i%t'Z'pQ$R!iV&V%]&W'RR%[$Qg]O_dkv#v$f%i%t'Z'pR$T!j|#et!p!q#m#q$`$i$j${$}%V%u%|&R&r&w&}'P'^'_'d'fR&c%c#S!VTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%g%m%o%r%t%x%y&O&S&U&d&e&f&g&h&m&s&u&z'Z'g'j'pQ$g#eQ%w$hQ'[&cR'r']#T!aTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%g%m%o%r%t%x%y&O&S&U&d&e&f&g&h&m&s&u&z'Z'g'j'p#T!dTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%g%m%o%r%t%x%y&O&S&U&d&e&f&g&h&m&s&u&z'Z'g'j'p#T!PTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%g%m%o%r%t%x%y&O&S&U&d&e&f&g&h&m&s&u&z'Z'g'j'pX#s!P#q#t$tX#u!P#q#t$tR&O${Q$y#tR%{$tT$z#t$tQ$x#tS%z$t$yR&|%{#T!RTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%g%m%o%r%t%x%y&O&S&U&d&e&f&g&h&m&s&u&z'Z'g'j'p#T!WTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%g%m%o%r%t%x%y&O&S&U&d&e&f&g&h&m&s&u&z'Z'g'j'p#T!UTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%g%m%o%r%t%x%y&O&S&U&d&e&f&g&h&m&s&u&z'Z'g'j'p#T!ZTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%g%m%o%r%t%x%y&O&S&U&d&e&f&g&h&m&s&u&z'Z'g'j'p#T!YTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%g%m%o%r%t%x%y&O&S&U&d&e&f&g&h&m&s&u&z'Z'g'j'p#T!eTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%g%m%o%r%t%x%y&O&S&U&d&e&f&g&h&m&s&u&z'Z'g'j'pR%U#}#T!fTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%g%m%o%r%t%x%y&O&S&U&d&e&f&g&h&m&s&u&z'Z'g'j'pR%S#yTbOdQdOR!od#SiR`bfgv!P!d#S#W#f#g#h#i#j#u#w$O$U$W$^$f$z%Q%b%g%m%o%r%t&O&S&d&e&f&g&h&m&s&u&z'V'Z'g'j'p's'tbpT{!h#n$q%W%x%y&UT!tipQ%g$UR&k%gQ%q$`S&t%q&yR&y%ud_Odkv#v$f%i%t'Z'pR!k_Q#VnR$_#VQ#ozU$r#o$s%XQ$s#pR%X$PQ%^$RR&X%^Q#t!PQ$t#qT$u#t$tQ%m$WR&p%mT%f$U%gX%c$U$W%g%mbtT{!h#n$q%W%x%y&UQ!pfQ!qgQ#mvQ#q!PQ#|!dQ$`#WQ$i#fQ$j#gQ$k#hQ$l#iQ$m#jQ${#uQ$}#wQ%V$OW%u$f%t'Z'pQ%|$zQ&R%QQ&r%oY&w%r&u&z'g'jQ&}&OQ'P&SQ'^&dQ'_&eQ'`&fQ'a&gQ'b&hQ'd&mR'f&sQnRQ$]#SR%p$^!z!cTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$f$q$z%Q%W%o%r%t%x%y&O&S&U&d&e&f&g&h&m&s&u&z'Z'g'j'pX%d$U$W%g%mT%l$W%m",
1346
- nodeNames: "\u26A0 Program TableStatement Kw Identifier table Ref ColumnDef DataType Kw date Kw timestamp Kw interval PrimaryKey Kw primary_key JoinDef JoinType Kw join Kw one Kw many Kw as Alias Kw on BinaryExpression = ComputedDef TypeCastExpression :: CastType BinaryExpression Kw or TypeCastExpression BinaryExpression Kw and ComparisonOp != <> < > <= >= Kw like Kw not AddOp + - MulOp * / % InExpression Kw in InValueList QueryStatement FromClause Kw from TableName Subquery SubqueryExpression JoinClause Kw inner Kw left Kw right Kw full Kw cross SelectClause Kw select Kw distinct SelectItem Wildcard WhereClause Kw where GroupByClause Kw group Kw by HavingClause Kw having OrderByClause Kw order OrderItem Number Kw asc Kw desc LimitClause Kw limit Kw offset NullTestExpression Kw is Kw null UnaryExpression UnaryOperator CaseExpression Kw case WhenClause Kw when Kw then ElseClause Kw else Kw end ExistsExpression Kw exists String Boolean Kw true Kw false Null FunctionCall Count Kw count ExtractExpression Kw extract ExtractUnit CastExpression Kw cast IntervalExpression IntervalUnit DateExpression TimestampExpression Param Parenthetical InExpression NullTestExpression : ViewStatement ExtendStatement Kw extend",
1347
- maxTerm: 197,
1353
+ states: "KOQYQPOOOOQO'#C_'#C_OOQO'#Ds'#DsOwQPO'#DrOOQO'#EU'#EUO#aQPO'#ETOOQO'#E]'#E]OOQO'#E`'#E`O#hQPO'#E_OOQO'#Ee'#EeOOQO'#Eh'#EhO#hQPO'#EgOOQO'#Eq'#EqO#mQPO'#EpOOQO'#GR'#GRO$ZQPO'#DqO$hQPO'#C^OOQO'#F{'#F{O$hQPO'#FzO$mQPO'#F}QYQPOOQ%bQPO'#F}O%gQPO'#E[O%gQPO'#EdO)^QPO'#CbO)hQPO'#CbO)mQPO'#DuO#rQPO'#DwO*zQPO'#DvOOQO'#Gc'#GcO,mQPO,5:^O-aQPO'#CbO.sQPO'#CbOOQO'#Ce'#CeOOQO'#Cg'#CgOOQO'#Ci'#CiO0]QPO'#EYOOQO'#Dd'#DdO1VQPO'#DwOOQO'#EW'#EWOOQO'#EZ'#EZOOQO'#EY'#EYO1pQPO,5:oO!PQPO,5:oOOQO'#Ex'#ExOOQO'#E{'#E{OOQO'#E}'#E}O2eQPO'#E|OOQO'#F['#F[O2lQPO'#FZOOQO'#F`'#F`OOQO'#Fb'#FbOOQO'#F_'#F_OOQO'#Fd'#FdOOQO'#Gg'#GgOOQO'#Fg'#FgO2qQPO'#FfOOQO'#Gf'#GfOOQO'#Fj'#FjOOQO'#Fn'#FnO2vQPO'#FpO3OQPO'#FrO3TQPO'#FsOOQO'#Ge'#GeOOQO'#Gh'#GhOOQO'#Ga'#GaO%gQPO'#EzO3YQPO'#FiO3_QPO'#FmOOQO'#Eb'#EbO!PQPO,5:yO3dQPO,5;RO3lQPO,5;[OOQO-E:P-E:PO4aQPO,58xO4iQPO,5<fOOQO,5<i,5<iOOQO-E9{-E9{O4nQPO,5:vO5bQPO,5;OOOQO,5<j,5<jO6UQPO,58|OOQO-E9|-E9|OOQO'#Cw'#CwOOQO'#Cy'#CyOOQO,5:a,5:aO:PQPO,5:aO:UQPO,5:cOOQO,5:b,5:bO:PQPO,5:bOOQO'#Cq'#CqOOQO'#Dy'#DyOOQO'#D{'#D{OOQO'#D}'#D}OOQO'#EP'#EPOOQO'#ER'#EROwQPO'#DxO:ZQPO'#DxOOQO'#GS'#GSO:`QPO1G/xO;SQPO,5<POOQO,5:u,5:uOOQO'#DT'#DTO;ZQPO,59qOOQO'#DX'#DXOOQO'#Db'#DbOOQO'#DZ'#DZO;iQPO,5:XOOQO'#Df'#DfOOQO'#Di'#DiOOQO'#Dn'#DnO;qQPO,5:XOOQO'#Ev'#EvO;vQPO,5;aO%gQPO,59rO%gQPO,59rO%gQPO,59rO%gQPO,59rO%gQPO,59rOOQO,5:t,5:tO:PQPO,5:tO<OQPO,5<aO<VQPO1G0ZO<yQPO1G0ZO<yQPO1G0ZO=nQPO,5;hOOQO'#FQ'#FQOOQO'#GV'#GVO=uQPO,5;hO%gQPO'#FPO#rQPO,5;uO>QQPO,5<QOOQO,5<[,5<[O>_QPO,5<[OOQO,5<^,5<^OOQO,5<_,5<_O>dQPO,5;fOBUQPO,5<TO%gQPO,5<XOB^QPO1G0eOCRQPO'#EjOC|QPO1G0mOOQO'#Es'#EsODqQPO1G0vODvQPO1G.dOFTQPO1G2POFYQPO1G2QPGgQPO'#GOOOQO1G/{1G/{OOQO1G/}1G/}OOQO1G/|1G/|OGlQPO,5:dOwQPO,5:dOOQO-E:Q-E:QOHsQPO1G1kOOQO1G1k1G1kOOQO'#DR'#DROOQO1G/]1G/]OOQO,59u,59uOH}QPO1G/sO1VQPO1G/sOOQO1G0{1G0{O;yQPO1G0{OLqQPO1G/^OLxQPO1G/^O!!kQPO1G/^O!!uQPO1G/^O!#PQPO1G/^OOQO1G0`1G0`OOQO1G1{1G1{OOQO,5<o,5<oO!&qQPO7+%uOOQO-E:R-E:RO!'eQPO7+%uO=uQPO1G1SOOQO-E:T-E:TOOQO'#FV'#FVOOQO'#FX'#FXOOQO1G1S1G1SO={QPO1G1SO%gQPO'#FUO!(YQPO,5;kO!(aQPO1G1aO!(fQPO1G1lOOQO1G1l1G1lO!(mQPO1G1lO%gQPO1G1lOOQO'#Fq'#FqOOQO1G1v1G1vOOQO'#Fl'#FlO!(rQPO1G1oO.{QPO1G1sO!(wQPO7+&PO!)kQPO7+&POOQO'#El'#ElOOQO'#En'#EnOOQO,5;U,5;UO!+QQPO7+&XO!+[QPO7+&XOOQO7+&b7+&bO!,|QPO'#CbO!-^QPO'#CdO!-oQPO'#CdO!.QQPO'#CdO!.fQPO'#CcO!.tQPO'#CpO$hQPO'#CoO!0WQPO'#DOOOQO'#G`'#G`OOQO'#G_'#G_O!0bQPO'#GPO!1uQPO7+$OO!1|QPO'#DOO#rQPO7+'kO!+cQPO'#CbOOQO'#Gj'#GjO!2RQPO'#GWO!3fQPO7+'lOOQO'#Cz'#CzO%gQPO1G0OO!3mQPO1G0OO!4tQPO7+'VO!4|QPO7+'VOOQO7+'V7+'VO1VQPO7+%_O!5TQPO'#DpO!5_QPO7+%_OOQO7+&g7+&gP!PQPO'#GTO!5dQPO<<IaOOQO7+&n7+&nO={QPO7+&nO!6WQPO,5;pOOQO'#FS'#FSO%gQPO1G1VOOQO7+&{7+&{OOQO7+'W7+'WO!6_QPO7+'WO%gQPO7+'ZO;ZQPO7+'_O!6fQPO<<IkOOQO,5<p,5<pO!7YQPO<<IsOOQO-E:S-E:SOOQO'#Ck'#CkO!8QQPO,58}OOQO'#Cs'#CsOOQO'#Cu'#CuOOQO,59[,59[O!9hQPO,59ZO;ZQPO,59kO;iQPO,5<bO!9pQPO,5<bO;vQPO,5<cO%gQPO,59nO%gQPO,59nO%gQPO,59nO%gQPO,59nO%gQPO,59nO:PQPO,59jOOQO,5<k,5<kOOQO-E9}-E9}OOQO<<Gj<<GjO%gQPO,59jO!9uQPO<<KVOOQO,5<r,5<rOOQO-E:U-E:UOOQO<<KW<<KWO!9zQPO7+%jO%gQPO7+%jOOQO-E:O-E:OO!;QQPO<<JqOOQO<<Jq<<JqO!;XQPO,5<lO!;cQPO<<HyO!;hQPO,5:[O!;pQPO,5:[OOQO<<Hy<<HyOOQO<<JY<<JYO!;wQPO7+&qOOQO<<Jr<<JrO!<UQPO<<JuO!<]QPO<<JyP3dQPO'#GUOOQO'#Cm'#CmOOQO'#Cl'#ClOOQO1G.i1G.iO$hQPO1G.uO:PQPO1G.uOOQO1G/V1G/VO!<bQPO1G1|O1VQPO1G1|OOQO1G1}1G1}O;yQPO1G1}O!=tQPO1G/YO!={QPO1G/YO!?^QPO1G/YO!?hQPO1G/YO!?rQPO1G/YOOQO1G/U1G/UO!ASQPO1G/UOOQOAN@qAN@qO!B`QPO<<IUP%gQPO'#GQOOQOAN@]AN@]OOQOAN>eAN>eO!CfQPO1G/vOOQOAN@aAN@aOOQOAN@eAN@eO!CmQPO'#C|OOQO7+$a7+$aO!9kQPO7+$aO1VQPO7+'hO!CrQPO7+'hOOQO7+'i7+'iO$hQPO,59hO$hQPO<<G{O!CwQPO<<KSOOQO<<KS<<KSOOQO1G/S1G/SOOQOAN=gAN=gOOQOAN@nAN@n",
1354
+ stateData: "!DT~O$}OS%OOS~OTPO!hQO!ySO#QUO#TVO#YXO#]YO#f[O$paO~OShO%QkO~OSoOYqO[rO^sO!XuO!Z}O![}O!^xO#_!WO#m|O#r!OO$P!QO$Q!WO$T!SO$V!TO$[!XO$_![O$c!]O$h!aO%QvO~O!{wO~P!PO#V!gO~O#_!jO~O!hQO!ySO#QUO#TVO#YXO#]YO#f[O~O${!eX%]!eX%W!eX~P#rOShO~O%]!nOT$qX!h$qX!y$qX#Q$qX#T$qX#Y$qX#]$qX#f$qX$p$qX${$qX~O%]!nO~OSoOYqO[rO^sO!XuO!Z}O![}O#_!WO#m|O#r!OO$P!QO$Q!WO$T!SO$V!TO$[!XO$_![O$c!]O$h!aO%QvO~O%P!rOSUXfUXlUX!hUX!nUX!pUX!rUX!tUX!vUX!yUX#QUX#TUX#YUX#]UX#fUX${UX%]UX%WUXqUXYUX[UX^UX!XUX!ZUX![UX#_UX#mUX#rUX$PUX$QUX$TUX$VUX$[UX$_UX$cUX$hUX%UUX~O%QUXoUX~P&tOS!sO~OS!vOl!uOf!iX!h!iX!n!iX!p!iX!r!iX!t!iX!v!iX!y!iX#Q!iX#T!iX#Y!iX#]!iX#f!iX${!iX%]!iX%W!iXo!iX~OS!vOl!uOf!jX!h!jX!n!jX!p!jX!r!jX!t!jX!v!jX!y!jX#Q!jX#T!jX#Y!jX#]!jX#f!jX${!jX%]!jX%W!jXo!jX~Of!|O!n!}O!p#OO!r#PO!t#QO!v#RO~O!h!fa!y!fa#Q!fa#T!fa#Y!fa#]!fa#f!fa${!fa%]!fa%W!fa~P,XO%Q#WOtUXxUX|UX!OUX!PUX!QUX!RUX!SUX!TUX!VUX!^UX!_UX!`UX!cUX#kUX#uUX#wUX#|UX#zUX~P&tOS!sO!^#XO~Ol!uOq#^Ot#ZOx#YO|#[O!O#^O!P#^O!Q#^O!R#^O!S#^O!T#^O!V#]O!XuO!Z#`O![#`O!^#aO!_#aO!`#aO!c#bO#k#dO~OS!vO!h!|X!y!|X#Q!|X#T!|X#Y!|X#]!|X#f!|X${!|X%U!|X%]!|X%W!|X~P.{O!hQO!ySO#QUO#TVO#YXO#]YO#f[O~P%gO%U#nO!h!wa!y!wa#Q!wa#T!wa#Y!wa#]!wa#f!wa${!wa%]!wa%W!wa~O#u#rO~P%gO%Q#vO~O%Q#wO~O#_#yO$Q#xO~O$Q#zO~O$Q#{O~O%Q#}O~O%Q$OO~OS$QO#_$QO~O#h$SO!h#da!y#da#Q#da#T#da#Y#da#]#da#f#da${#da%]#da%W#da~Ol!uO%Q$UO~O%Q$WO~O!h#Oa!y#Oa#Q#Oa#T#Oa#Y#Oa#]#Oa#f#Oa${#Oa%]#Oa%W#Oa~P/OO!h#Wa!y#Wa#Q#Wa#T#Wa#Y#Wa#]#Wa#f#Wa${#Wa%]#Wa%W#Wa~P/OO%P!rOSUafUalUa!hUa!nUa!pUa!rUa!tUa!vUa!yUa#QUa#TUa#YUa#]Ua#fUa${Ua%]UaqUatUaxUa|Ua!OUa!PUa!QUa!RUa!SUa!TUa!VUa!XUa!ZUa![Ua!^Ua!_Ua!`Ua!cUa#kUa%UUa%QUa%WUa#uUaoUa#wUa#|Ua#zUaYUa[Ua^Ua#_Ua#mUa#rUa$PUa$QUa$TUa$VUa$[Ua$_Ua$cUa$hUa~OS!vO~O%W$ZO~Of!|O~O!h!fi!y!fi#Q!fi#T!fi#Y!fi#]!fi#f!fi${!fi%]!fi%W!fi~P,XO%W$aO~P%gOS$bOYqO[rO^sO~O!V#]O!c#bO~O%Q$fO~O!XuO#m|O~O%W$oO~P/OO!h!wi!y!wi#Q!wi#T!wi#Y!wi#]!wi#f!wi${!wi%]!wi%W!wi~P!PO%U$qO!h!wi!y!wi#Q!wi#T!wi#Y!wi#]!wi#f!wi${!wi%]!wi%W!wi~O#u#rO~P/OO#u#rO#z$vO#|$wO~O!^%PO!{wO%W%OO~P%gOS%RO~Ot#ZOS#nal#naq#nax#na|#na!O#na!P#na!Q#na!R#na!S#na!T#na!V#na!X#na!Z#na![#na!^#na!_#na!`#na!c#na!h#na!y#na#Q#na#T#na#Y#na#]#na#f#na#k#na${#na%U#na%]#na%W#na#u#na#w#na#|#naf#na!n#na!p#na!r#na!t#na!v#na#z#naY#na[#na^#na#_#na#m#na#r#na$P#na$Q#na$T#na$V#na$[#na$_#na$c#na$h#na~OS%TO$Q%TO~O%U%WO!h#Ri!y#Ri#Q#Ri#T#Ri#Y#Ri#]#Ri#f#Ri${#Ri%]#Ri%W#Ri~O#a%YO#c%ZO!h#^X!y#^X#Q#^X#T#^X#Y#^X#]#^X#f#^X${#^X%U#^X%]#^X%W#^X~O%U%]O!h#Zi!y#Zi#Q#Zi#T#Zi#Y#Zi#]#Zi#f#Zi${#Zi%]#Zi%W#Zi~O#_%_O~OS%`OYqO[rO^sOf!|O!XuO!Z}O![}O#_!WO#m|O#r!OO$P!QO$Q!WO$T!SO$V!TO$[!XO$_![O$c!]O$h!aO~O%Q%mO~OS%nOYqO[rO^sOf!|O!XuO!Z}O![}O#_!WO#m|O#r!OO$P!QO$Q!WO$T!SO$V!TO$[!XO$_![O$c!]O$h!aO~O%P!rO~Oo%rOf!la!h!la!n!la!p!la!r!la!t!la!v!la!y!la#Q!la#T!la#Y!la#]!la#f!la${!la%]!la%W!la~O%U%vO%W%wO~P/OO%Q%xO~Oq#^Ot#ZO!O#^O!P#^O!Q#^O!R#^O!S#^O!T#^O!V#]O!XuO!Z#`O![#`O!^#aO!_#aO!`#aO!c#bO#k#dOSzilzixzi!hzi!yzi#Qzi#Tzi#Yzi#]zi#fzi${zi%Uzi%]zi%Wzi#uzi#wzi#|zifzi!nzi!pzi!rzi!tzi!vzi#zziYzi[zi^zi#_zi#mzi#rzi$Pzi$Qzi$Tzi$Vzi$[zi$_zi$czi$hzi~O|#[O~PISO|zi~PISOt#ZO!^#aO!_#aO!`#aOSzilziqzixzi|zi!Ozi!Pzi!Qzi!Rzi!Szi!Tzi!Vzi!Xzi!czi!hzi!yzi#Qzi#Tzi#Yzi#]zi#fzi#kzi${zi%Uzi%]zi%Wzi#uzi#wzi#|zifzi!nzi!pzi!rzi!tzi!vzi#zziYzi[zi^zi#_zi#mzi#rzi$Pzi$Qzi$Tzi$Vzi$[zi$_zi$czi$hzi~O!Z#`O![#`O~PMPO!Zzi![zi~PMPOt#ZOSzilziqzixzi|zi!Ozi!Pzi!Qzi!Rzi!Szi!Tzi!Vzi!Xzi!Zzi![zi!^zi!_zi!`zi!czi!hzi!yzi#Qzi#Tzi#Yzi#]zi#fzi#kzi${zi%Uzi%]zi%Wzi#uzi#wzi#|zifzi!nzi!pzi!rzi!tzi!vzi#zziYzi[zi^zi#_zi#mzi#rzi$Pzi$Qzi$Tzi$Vzi$[zi$_zi$czi$hzi~O!h!wq!y!wq#Q!wq#T!wq#Y!wq#]!wq#f!wq${!wq%]!wq%W!wq~P!PO%U%}O!h!wq!y!wq#Q!wq#T!wq#Y!wq#]!wq#f!wq${!wq%]!wq%W!wq~O#w&RO~P/OO%W&TO~O%W&UO~P/OO%W&UO~O!hQO~O!h#Rq!y#Rq#Q#Rq#T#Rq#Y#Rq#]#Rq#f#Rq${#Rq%]#Rq%W#Rq~P!PO%U&YO!h#Rq!y#Rq#Q#Rq#T#Rq#Y#Rq#]#Rq#f#Rq${#Rq%]#Rq%W#Rq~O!h#Zq!y#Zq#Q#Zq#T#Zq#Y#Zq#]#Zq#f#Zq${#Zq%]#Zq%W#Zq~OS$QO#_$QO~P!*`O%U&[O~P!*`O%P!rO%Q#WOlUXqUXtUXxUX|UX!OUX!PUX!QUX!RUX!SUX!TUX!VUX!XUX!ZUX![UX!^UX!_UX!`UX!cUX#kUX$lmX~OSWXYWX[WX^WX~P!+cO$Q#zOSWXYWX[WX^WX~O$Q#{OSWXYWX[WX^WX~O#_#yO$Q#xOSWXYWX[WX^WX~OS&^OYqO[rO^sO~Oh&`Oj&aO~Oq#^Ox#YO|#[O!O#^O!P#^O!Q#^O!R#^O!S#^O!T#^O!V#]O!XuO!Z#`O![#`O!^#aO!_#aO!`#aO!c#bO#k#dO~Ol!uOt&dO~P!.|O%U&nOS$sXY$sX[$sX^$sXf$sX!X$sX!Z$sX![$sX#_$sX#m$sX#r$sX$P$sX$Q$sX$T$sX$V$sX$[$sX$_$sX$c$sX$h$sX%W$sX~O%W&pO~PDvO$l&qO~O%U&sOS$zXY$zX[$zX^$zXf$zX!X$zX!Z$zX![$zX#_$zX#m$zX#r$zX$P$zX$Q$zX$T$zX$V$zX$[$zX$_$zX$c$zX$h$zX%W$zX~O%W&uO~PFYOo%rOf!li!h!li!n!li!p!li!r!li!t!li!v!li!y!li#Q!li#T!li#Y!li#]!li#f!li${!li%]!li%W!li~O%U&yO%W&zO~O%W&zO~P%gO%U'OO%W!dX~P/OO%W'PO~O!h!wy!y!wy#Q!wy#T!wy#Y!wy#]!wy#f!wy${!wy%]!wy%W!wy~P!PO#|#xa~P/OO%W'SO~P/OO!h#Ry!y#Ry#Q#Ry#T#Ry#Y#Ry#]#Ry#f#Ry${#Ry%]#Ry%W#Ry~P!POS$QO#_$QO!h#Zy!y#Zy#Q#Zy#T#Zy#Y#Zy#]#Zy#f#Zy${#Zy%]#Zy%W#Zy~Ob'WOSVaYVa[Va^VafVa!XVa!ZVa![Va#_Va#mVa#rVa$PVa$QVa$TVa$VVa$[Va$_Va$cVa$hVa%UVa%WVa~Ol!uOo%rO~O%Q'_O~O%W'iO~Of!lq!h!lq!n!lq!p!lq!r!lq!t!lq!v!lq!y!lq#Q!lq#T!lq#Y!lq#]!lq#f!lq${!lq%]!lq%W!lq~P/OO%W'lO~P%gO%U$ta%W$ta~P/OO%W'mO~O%U'nO%W!da~O%W!da~P%gO#u#sq#z#sq#|#sq~P/OO%W'oO~P/OO%W'pO~O%Q'tO~Oq#^Ot#ZO!O#^O!P#^O!Q#^O!R#^O!S#^O!T#^O!V#]O!XuO!Z#`O![#`O!^#aO!_#aO!`#aO!c#bO#k#dOlvixvi~O|#[O~P!<gO|vi~P!<gOt#ZO!^#aO!_#aO!`#aOlviqvixvi|vi!Ovi!Pvi!Qvi!Rvi!Svi!Tvi!Vvi!Xvi!cvi#kvi~O!Z#`O![#`O~P!>SO!Zvi![vi~P!>SOt#ZOlviqvixvi|vi!Ovi!Pvi!Qvi!Rvi!Svi!Tvi!Vvi!Xvi!Zvi![vi!^vi!_vi!`vi!cvi#kvi~OSriYri[ri^rifri#_ri#mri#rri$Pri$Qri$Tri$Vri$[ri$_ri$cri$hri%Uri%Wri~P/OOf!ly!h!ly!n!ly!p!ly!r!ly!t!ly!v!ly!y!ly#Q!ly#T!ly#Y!ly#]!ly#f!ly${!ly%]!ly%W!ly~P/OO%W!di~P%gOq'wO~O%W'zO~O%W'}O~O%O![t$l!^!_~",
1355
+ goto: "! b%_PP%`%dPP%h'R'V'ZP(iP)wP+V+Y+]P+`+h+nP+{P+{P,OP,e-TP-aP+`-gP-m-g-vP._._/_P/xPPPPPP0eP1SP2yPP3hPPP._4XP4z5W5r6PP6a6a6f7k7oP7oP7oP7oP7oP5r7sP8QP8W8i5r8tP5r9RP9`P5r9fP5r9sP:QP:YP:YP5r:]P:jP._:mP;YP<j=n<j>rP?v?|P@SP@V@]P@aP<j@kPPAoBsPBsPAoCwCwD{P<jFPPGT<jGWP<jH[<j<jP6k-g-gP%`%`H_PHcHiI|JSJ^JmJsKRKXKcPPPPPPKiKmKsPM}PNW<jCw._P! ^TcOdT`OdUjR#S$^#S!ZTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%k%q%s%v%x%|%}&S&W&Y&h&i&j&k&l&q&w&y'O'_'k'n'tQ!l`Q!mbQ&c%fS'q'Z'xR'{'wT%i$U%kT%d$U%k#O!_Tfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$W$f$q$z%Q%W%q%s%v%x%|%}&S&W&Y&h&i&j&k&l&q&w&y'O'_'k'n'tU$b#Z&X&dS%a$U%kR&^%d#O!`Tfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$W$f$q$z%Q%W%q%s%v%x%|%}&S&W&Y&h&i&j&k&l&q&w&y'O'_'k'n'tU$b#Z&X&dS%b$U%kR&^%d#O!^Tfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$W$f$q$z%Q%W%q%s%v%x%|%}&S&W&Y&h&i&j&k&l&q&w&y'O'_'k'n'tU$b#Z&X&dS%c$U%kR&^%dR&_%dR'Y&_R'X&_S%i$U%kT%o$W%qX%f$U$W%k%qS#Sn#VQ$^#TX%e$U$W%k%qR&b%eQ!xjQ!{lQ#ltQ$V!lQ&X%VQ&m%gR'[&cQ!wjQ!zlQ#ktQ$Y!xQ$[!{Q$n#lW%l$U$W%k%qQ'g&mR's'[Q%s$]Q&w%tQ'Z&cR'x'sQ'r'ZR'|'xX%h$U$W%k%qQ$c#ZQ'U&XR']&dt#ft!p!q#m#q$`${$}%V%y&Q&V&v&{'R'T'h'jR&h%g!{!cTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$f$q$z%Q%W%s%v%x%|%}&S&W&Y&h&i&j&k&l&q&w&y'O'_'k'n'tx#gt!p!q#m#q$`$i${$}%V%y&Q&V&v&{'R'T'b'h'jR&i%g|#ht!p!q#m#q$`$i$j${$}%V%y&Q&V&v&{'R'T'b'c'h'jR&j%g!O#^t!p!q#m#q$`$i$j${$}%V%g%y&Q&V&v&{'R'T'b'c'h'jT$d#_&e#S}Tfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%k%q%s%v%x%|%}&S&W&Y&h&i&j&k&l&q&w&y'O'_'k'n't|#_t!p!q#m#q$`$i$j${$}%V%y&Q&V&v&{'R'T'b'c'h'jQ$h#eQ&e%gR'a&g!Q#it!p!q#m#q$`$i$j$k${$}%V%y&Q&V&v&{'R'T'b'c'd'h'jR&k%g!U#jt!p!q#m#q$`$i$j$k$l${$}%V%y&Q&V&v&{'R'T'b'c'd'e'h'jR&l%g|#ct!p!q#m#q$`$i$j${$}%V%y&Q&V&v&{'R'T'b'c'h'jQ$e#_Q&f%gR'^&eQ%z$fQ&|%xQ'u'_R'y'tSeOdS!ykvQ$|#vQ%z$fQ&r%mQ&|%xQ'u'_R'y'tg^O_dkv#v$f%m%x'_'tfRO_dkv#v$f%m%x'_'tR&W%UVmR#S$^UlR#S$^!{!bTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$f$q$z%Q%W%s%v%x%|%}&S&W&Y&h&i&j&k&l&q&w&y'O'_'k'n'tT#Un#VT#Tn#VgTO_dkv#v$f%m%x'_'tQ{TR%Q#wQzTQ#p{Q$P!h]$p#n$q%W%|%}&YcyT{!h#n$q%W%|%}&YgfO_dkv#v$f%m%x'_'tgWO_dkv#v$f%m%x'_'tQ!hWR!iZggO_dkv#v$f%m%x'_'tgZO_dkv#v$f%m%x'_'tQ$R!iV&Z%]&['VR%[$Qg]O_dkv#v$f%m%x'_'tR$T!j|#et!p!q#m#q$`$i$j${$}%V%y&Q&V&v&{'R'T'b'c'h'jR&g%g#S!VTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%k%q%s%v%x%|%}&S&W&Y&h&i&j&k&l&q&w&y'O'_'k'n'tQ$g#eQ%{$hQ'`&gR'v'a#T!aTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%k%q%s%v%x%|%}&S&W&Y&h&i&j&k&l&q&w&y'O'_'k'n't#T!dTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%k%q%s%v%x%|%}&S&W&Y&h&i&j&k&l&q&w&y'O'_'k'n't#T!PTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%k%q%s%v%x%|%}&S&W&Y&h&i&j&k&l&q&w&y'O'_'k'n'tX#s!P#q#t$tX#u!P#q#t$tR&S${Q$y#tR&P$tT$z#t$tQ$x#tS&O$t$yR'Q&P#T!RTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%k%q%s%v%x%|%}&S&W&Y&h&i&j&k&l&q&w&y'O'_'k'n't#T!WTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%k%q%s%v%x%|%}&S&W&Y&h&i&j&k&l&q&w&y'O'_'k'n't#T!UTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%k%q%s%v%x%|%}&S&W&Y&h&i&j&k&l&q&w&y'O'_'k'n't#T!ZTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%k%q%s%v%x%|%}&S&W&Y&h&i&j&k&l&q&w&y'O'_'k'n't#T!YTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%k%q%s%v%x%|%}&S&W&Y&h&i&j&k&l&q&w&y'O'_'k'n't#T!eTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%k%q%s%v%x%|%}&S&W&Y&h&i&j&k&l&q&w&y'O'_'k'n'tR%U#}#T!fTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$U$W$f$q$z%Q%W%k%q%s%v%x%|%}&S&W&Y&h&i&j&k&l&q&w&y'O'_'k'n'tR%S#yTbOdQdOR!od#SiR`bfgv!P!d#S#W#f#g#h#i#j#u#w$O$U$W$^$f$z%Q%f%k%q%s%v%x&S&W&h&i&j&k&l&q&w&y'O'Z'_'k'n't'w'xbpT{!h#n$q%W%|%}&YT!tipQ%k$UR&o%kQ%u$`S&x%u&}R&}%yd_Odkv#v$f%m%x'_'tR!k_Q#VnR$_#VQ#ozU$r#o$s%XQ$s#pR%X$PQ%^$RR&]%^Q#t!PQ$t#qT$u#t$tQ%q$WR&t%qT%j$U%kX%g$U$W%k%qbtT{!h#n$q%W%|%}&YQ!pfQ!qgQ#mvQ#q!PQ#|!dQ$`#WQ$i#fQ$j#gQ$k#hQ$l#iQ$m#jQ${#uQ$}#wQ%V$OW%y$f%x'_'tQ&Q$zQ&V%QQ&v%sY&{%v&y'O'k'nQ'R&SQ'T&WQ'b&hQ'c&iQ'd&jQ'e&kQ'f&lQ'h&qR'j&wQnRQ$]#SR%t$^!z!cTfgv{!P!d!h#W#f#g#h#i#j#n#u#w$O$f$q$z%Q%W%s%v%x%|%}&S&W&Y&h&i&j&k&l&q&w&y'O'_'k'n'tX%h$U$W%k%qT%p$W%q",
1356
+ nodeNames: "\u26A0 Program TableStatement Kw Identifier table Ref ColumnDef ColumnName Kw date Kw timestamp Kw interval DataType PrimaryKey Kw primary_key JoinDef JoinType Kw join Kw one Kw many Kw as Alias Kw on BinaryExpression = ComputedDef TypeCastExpression :: CastType BinaryExpression Kw or TypeCastExpression BinaryExpression Kw and ComparisonOp != <> < > <= >= Kw like Kw not AddOp + - MulOp * / % InExpression Kw in InValueList QueryStatement FromClause Kw from TableName Subquery SubqueryExpression JoinClause Kw inner Kw left Kw right Kw full Kw cross SelectClause Kw select Kw distinct SelectItem Wildcard WhereClause Kw where GroupByClause Kw group Kw by HavingClause Kw having OrderByClause Kw order OrderItem Number Kw asc Kw desc LimitClause Kw limit Kw offset NullTestExpression Kw is Kw null UnaryExpression UnaryOperator CaseExpression Kw case WhenClause Kw when Kw then ElseClause Kw else Kw end ExistsExpression Kw exists String Boolean Kw true Kw false Null FunctionCall Count Kw count ExtractExpression Kw extract ExtractUnit CastExpression Kw cast IntervalExpression IntervalUnit DateExpression TimestampExpression Param Parenthetical InExpression NullTestExpression : ViewStatement ExtendStatement Kw extend",
1357
+ maxTerm: 198,
1348
1358
  nodeProps: [
1349
- ["group", -16, 6, 106, 121, 123, 136, 139, 140, 145, 146, 147, 150, 154, 157, 159, 160, 161, "Expression Expression", -11, 31, 34, 37, 40, 41, 62, 72, 116, 162, 163, 164, "Expression", -2, 70, 71, "TablePrimary"]
1359
+ ["group", -16, 6, 107, 122, 124, 137, 140, 141, 146, 147, 148, 151, 155, 158, 160, 161, 162, "Expression Expression", -11, 32, 35, 38, 41, 42, 63, 73, 117, 163, 164, 165, "Expression", -2, 71, 72, "TablePrimary"]
1350
1360
  ],
1351
1361
  skippedNodes: [0],
1352
1362
  repeatNodeCount: 10,
1353
- tokenData: "*w~RoX^#Spq#Sqr#wrs$Stu$quv%cwx%hxy&Qyz&Vz{&[{|&a|}&f}!O&k!O!P'[!P!Q'a!Q![(p![!])Z!]!^)h!^!_)m!_!`*S!`!a*X!c!}*f#T#o*f#y#z#S$f$g#S#BY#BZ#S$IS$I_#S$I|$JO#S$JT$JU#S$KV$KW#S&FU&FV#S~#XY$|~X^#Spq#S#y#z#S$f$g#S#BY#BZ#S$IS$I_#S$I|$JO#S$JT$JU#S$KV$KW#S&FU&FV#S~#zP!_!`#}~$SO}~~$VTOr$Srs$fs;'S$S;'S;=`$k<%lO$S~$kO$P~~$nP;=`<%l$S~$tS!Q![%Q!c!}%Q#R#S%Q#T#o%Q~%VS$g~!Q![%Q!c!}%Q#R#S%Q#T#o%Q~%hO!_~~%kTOw%hwx$fx;'S%h;'S;=`%z<%lO%h~%}P;=`<%l%h~&VO%P~~&[O%V~~&aO!]~~&fO!Y~~&kO%T~~&pP!Z~}!O&s~&xS$}~OY&sZ;'S&s;'S;=`'U<%lO&s~'XP;=`<%l&s~'aO%O~~'fP!^~z{'i~'lTOz'iz{'{{;'S'i;'S;=`(j<%lO'i~(OVOz'iz{'{{!P'i!P!Q(e!Q;'S'i;'S;=`(j<%lO'i~(jO$}~~(mP;=`<%l'i~(uQ#^~!O!P({!Q![(p~)OP!Q![)R~)WP#^~!Q![)R~)`P$k~![!])c~)hOs~~)mO%[~~)rQ!P~!_!`)x!`!a)}~)}O!R~~*SO!O~~*XOp~~*^P!Q~!_!`*a~*fO!S~~*kSS~!Q![*f!c!}*f#R#S*f#T#o*f",
1363
+ tokenData: "*w~RoX^#Spq#Sqr#wrs$Stu$quv%cwx%hxy&Qyz&Vz{&[{|&a|}&f}!O&k!O!P'[!P!Q'a!Q![(p![!])Z!]!^)h!^!_)m!_!`*S!`!a*X!c!}*f#T#o*f#y#z#S$f$g#S#BY#BZ#S$IS$I_#S$I|$JO#S$JT$JU#S$KV$KW#S&FU&FV#S~#XY$}~X^#Spq#S#y#z#S$f$g#S#BY#BZ#S$IS$I_#S$I|$JO#S$JT$JU#S$KV$KW#S&FU&FV#S~#zP!_!`#}~$SO!O~~$VTOr$Srs$fs;'S$S;'S;=`$k<%lO$S~$kO$Q~~$nP;=`<%l$S~$tS!Q![%Q!c!}%Q#R#S%Q#T#o%Q~%VS$h~!Q![%Q!c!}%Q#R#S%Q#T#o%Q~%hO!`~~%kTOw%hwx$fx;'S%h;'S;=`%z<%lO%h~%}P;=`<%l%h~&VO%Q~~&[O%W~~&aO!^~~&fO!Z~~&kO%U~~&pP![~}!O&s~&xS%O~OY&sZ;'S&s;'S;=`'U<%lO&s~'XP;=`<%l&s~'aO%P~~'fP!_~z{'i~'lTOz'iz{'{{;'S'i;'S;=`(j<%lO'i~(OVOz'iz{'{{!P'i!P!Q(e!Q;'S'i;'S;=`(j<%lO'i~(jO%O~~(mP;=`<%l'i~(uQ#_~!O!P({!Q![(p~)OP!Q![)R~)WP#_~!Q![)R~)`P$l~![!])c~)hOt~~)mO%]~~)rQ!Q~!_!`)x!`!a)}~)}O!S~~*SO!P~~*XOq~~*^P!R~!_!`*a~*fO!T~~*kSS~!Q![*f!c!}*f#R#S*f#T#o*f",
1354
1364
  tokenizers: [0],
1355
1365
  topRules: { "Program": [0, 1] },
1356
1366
  specialized: [{ term: 4, get: (value, stack) => specializeIdentifier(value, stack) << 1, external: specializeIdentifier }, { term: 4, get: (value) => spec_Identifier[value] || -1 }],
1357
- tokenPrec: 3656
1367
+ tokenPrec: 3724
1358
1368
  });
1359
1369
  }
1360
1370
  });
@@ -22,9 +22,6 @@ Graphene also has a CLI that lets you check syntax, run queries, serve data apps
22
22
  - [Using scalar stored expressions (dimensions) in queries](#using-scalar-stored-expressions-dimensions-in-queries)
23
23
  - [Using aggregative stored expressions (measures) in queries](#using-aggregative-stored-expressions-measures-in-queries)
24
24
  - [Safe aggregation in fan-outs](#safe-aggregation-in-fan-outs)
25
- - [Working with dates, timestamps, and intervals](#working-with-dates-timestamps-and-intervals)
26
- - [Date and timestamp literals](#date-and-timestamp-literals)
27
- - [Interval literals](#interval-literals)
28
25
  - [Available functions](#available-functions)
29
26
  - [Aggregate functions](#aggregate-functions)
30
27
  - [Date and time functions](#date-and-time-functions)
@@ -578,6 +575,7 @@ from sales_per_store
578
575
  - Expressions in `group by` are implicitly selected, so `from orders select avg(amount) group by user_id` will return two columns.
579
576
  - `count` is a reserved word. Do not alias your columns as `count`.
580
577
  - Window functions and set operations (`union [all]`, `intersect`, `except`) are not supported.
578
+ - Date and timestamp literals can be written with explicit keywords (`date '2024-01-01'` or `timestamp '2024-01-01 12:00:00'`), but these keywords are optional when the expected type is known from context (e.g., when comparing against a date or timestamp column). Interval literals always require the `interval` keyword.
581
579
 
582
580
  ## `table as` statements
583
581
 
@@ -345,19 +345,21 @@
345
345
 
346
346
  {#if groupBy}
347
347
  {#each sortedGroupNames as groupName (groupName)}
348
- <TableGroupRow
349
- {groupName}
350
- currentGroupData={groupedData[groupName]}
351
- toggled={groupToggleStates[groupName]}
352
- {columnSummary}
353
- {rowNumbers}
354
- rowColor={$accordionRowColorStore}
355
- {subtotals}
356
- on:toggle={handleToggle}
357
- {orderedColumns}
358
- {compact}
359
- />
360
- {#if groupToggleStates[groupName]}
348
+ {#if groupType !== 'section'}
349
+ <TableGroupRow
350
+ {groupName}
351
+ currentGroupData={groupedData[groupName]}
352
+ toggled={groupToggleStates[groupName]}
353
+ {columnSummary}
354
+ {rowNumbers}
355
+ rowColor={$accordionRowColorStore}
356
+ {subtotals}
357
+ on:toggle={handleToggle}
358
+ {orderedColumns}
359
+ {compact}
360
+ />
361
+ {/if}
362
+ {#if groupType === 'section' || groupToggleStates[groupName]}
361
363
  <TableRow
362
364
  displayedData={groupedData[groupName]}
363
365
  {rowShading}
@@ -372,6 +374,7 @@
372
374
  groupNamePosition={groupNamePosition}
373
375
  orderedColumns={orderedColumns}
374
376
  index={groupOffsets[groupName] ?? 0}
377
+ rowSpan={groupedData[groupName].length}
375
378
  />
376
379
  {#if subtotals}
377
380
  <TableSubtotalRow
package/package.json CHANGED
@@ -3,19 +3,20 @@
3
3
  "main": "cli.ts",
4
4
  "type": "module",
5
5
  "author": "Graphene Systems Inc",
6
- "version": "0.0.11",
6
+ "version": "0.0.12",
7
7
  "license": "Elastic-2.0",
8
8
  "engines": {
9
9
  "node": ">=16"
10
10
  },
11
11
  "files": [
12
12
  "dist",
13
+ "bin.js",
13
14
  "package.json",
14
15
  "LICENSE.md",
15
16
  "THIRD_PARTY_NOTICES.md"
16
17
  ],
17
18
  "bin": {
18
- "graphene": "./dist/cli/cli.js"
19
+ "graphene": "./bin.js"
19
20
  },
20
21
  "exports": {
21
22
  "./ui": {