Skip to content

Commit d2f8d12

Browse files
SQL grammar improvements, aliases, functions and some constants, closes #110
1 parent 011200a commit d2f8d12

File tree

2 files changed

+47
-16
lines changed

2 files changed

+47
-16
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"printableName": "Cache Web Terminal",
66
"description": "Web-based terminal emulator for Caché administering.",
77
"author": "ZitRo",
8-
"version": "4.6.2",
8+
"version": "4.6.3",
99
"gaID": "UA-83005064-2",
1010
"releaseNumber": 26,
1111
"scripts": {

src/client/js/parser/grammar.js

Lines changed: 46 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -860,6 +860,12 @@ rule("SQLSelect").split(
860860
any()
861861
).branch().split(
862862
char({ value: "*", class: "special" }),
863+
split(
864+
id({ CI, value: "avg", class: "keyword" }),
865+
id({ CI, value: "count", class: "keyword" }),
866+
id({ CI, value: "max", class: "keyword" }),
867+
id({ CI, value: "min", class: "keyword" })
868+
).char("(").optWhitespace().call("SQLVar").optWhitespace().char(")"),
863869
call("SQLVar").split(
864870
id({ CI, value: "as", class: "keyword" }).whitespace().id({ class: "variable" })
865871
.optWhitespace(),
@@ -869,24 +875,39 @@ rule("SQLSelect").split(
869875
any()
870876
)
871877
).whitespace().call("SQLFrom").optWhitespace().split(
872-
id({ CI, value: "where", class: "keyword" }).whitespace().call("SQLExpression"),
873-
any()
874-
).optWhitespace().split(
875-
id({ CI, value: "order", class: "keyword" }).whitespace()
876-
.id({ CI, value: "by", class: "keyword" }).whitespace()
877-
.branch().id({ class: "variable", type: "sqlFieldName" }).optWhitespace().split(
878-
id({ CI, value: "desc", class: "keyword" }).optWhitespace(),
879-
id({ CI, value: "asc", class: "keyword" }).optWhitespace(),
880-
any()
881-
).split(
882-
char(",").optWhitespace().merge(),
878+
id({ CI, value: "order", class: "keyword" }).call("SQLOrder"),
879+
id({ CI, value: "where", class: "keyword" }).whitespace().call("SQLExpression")
880+
.optWhitespace().split(
881+
id({ CI, value: "order", class: "keyword" }).call("SQLOrder"),
882+
any()
883+
),
884+
id({ class: "variable" }).whitespace().split(
885+
id({ CI, value: "order", class: "keyword" }).call("SQLOrder"),
886+
id({ CI, value: "where", class: "keyword" }).whitespace().call("SQLExpression")
887+
.optWhitespace().split(
888+
id({ CI, value: "order", class: "keyword" }).call("SQLOrder"),
889+
any()
890+
),
883891
any()
884892
),
885893
any()
886894
).exit().end();
887895

888-
rule("SQLUpdate").call("SQLClassName").whitespace()
889-
.id({ CI, value: "set", class: "keyword" }).whitespace()
896+
rule("SQLOrder").whitespace()
897+
.id({ CI, value: "by", class: "keyword" }).whitespace()
898+
.branch().id({ class: "variable", type: "sqlFieldName" }).optWhitespace().split(
899+
id({ CI, value: "desc", class: "keyword" }).optWhitespace(),
900+
id({ CI, value: "asc", class: "keyword" }).optWhitespace(),
901+
any()
902+
).split(
903+
char(",").optWhitespace().merge(),
904+
any()
905+
).exit().end();
906+
907+
rule("SQLUpdate").call("SQLClassName").whitespace().split(
908+
id({ CI, value: "set", class: "keyword" }),
909+
id({ class: "variable" }).whitespace().id({ CI, value: "set", class: "keyword" })
910+
).whitespace()
890911
.branch()
891912
.id({ type: "sqlFieldName", class: "variable" }).optWhitespace().char("=").optWhitespace()
892913
.call("SQLExpression").optWhitespace().split(
@@ -919,6 +940,8 @@ rule("SQLExpression").split(
919940

920941
constant(),
921942

943+
id({ CI, value: "null", class: "constant" }),
944+
922945
char("(").optWhitespace().split(
923946
id({ CI, value: "delete", class: "keyword" }).whitespace().call("SQLDelete").optWhitespace(),
924947
id({ CI, value: "update", class: "keyword" }).whitespace().call("SQLUpdate").optWhitespace(),
@@ -939,9 +962,16 @@ rule("SQLExpression").split(
939962
).merge()
940963
),
941964

942-
id({ class: "variable", type: "sqlFieldName" }).split(
965+
split(
966+
id({ CI, value: "char", class: "keyword", type: "sqlFunc" }),
967+
id({ CI, value: "ascii", class: "keyword", type: "sqlFunc" })
968+
).char("(").optWhitespace().call("SQLExpression").optWhitespace().char(")"),
969+
970+
id({ class: "variable", type: "sqlFieldName" }).branch().split(
943971
char({ value: "_", class: "variable", type: "sqlFieldName" })
944972
.id({ class: "variable", type: "sqlFieldName" }),
973+
char({ value: ".", class: "variable", type: "sqlFieldName" })
974+
.id({ class: "variable", type: "sqlFieldName" }).merge(),
945975
any()
946976
)
947977

@@ -958,7 +988,8 @@ rule("SQLExpression").split(
958988
),
959989
id({ CI, value: "and", class: "keyword" }),
960990
id({ CI, value: "like", class: "keyword" }),
961-
id({ CI, value: "or", class: "keyword" })
991+
id({ CI, value: "or", class: "keyword" }),
992+
id({ CI, value: "is", class: "keyword" })
962993
).optWhitespace().call("SQLExpression"),
963994
any()
964995
).exit().end();

0 commit comments

Comments
 (0)