Skip to content

Commit 011200a

Browse files
SQL grammar enhancements, nested SQL calls
1 parent c914b9f commit 011200a

File tree

2 files changed

+66
-45
lines changed

2 files changed

+66
-45
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.1",
8+
"version": "4.6.2",
99
"gaID": "UA-83005064-2",
1010
"releaseNumber": 26,
1111
"scripts": {

src/client/js/parser/grammar.js

Lines changed: 65 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -840,56 +840,66 @@ rule("nonEmptyArgumentList").branch().split(
840840

841841
rule("SQLMode").split(
842842
char({ value: "/", class: "special" }).call("CWTSpecial").exit(),
843-
id({ CI, value: "delete", class: "keyword" }).whitespace()
844-
.call("SQLFrom").whitespace()
845-
.id({ CI, value: "where", class: "keyword" }).whitespace().call("SQLExpression")
846-
.whitespace(),
847-
id({ CI, value: "update", class: "keyword" }).whitespace()
848-
.call("SQLClassName").whitespace()
849-
.id({ CI, value: "set", class: "keyword" }).whitespace().branch()
850-
.id({ type: "sqlFieldName", class: "variable" }).optWhitespace().char("=").optWhitespace()
851-
.call("SQLExpression").optWhitespace().split(
852-
char(",").optWhitespace().merge(),
853-
any()
854-
)
855-
.id({ CI, value: "where", class: "keyword" }).whitespace().call("SQLExpression")
856-
.whitespace(),
857-
id({ CI, value: "select", class: "keyword" }).whitespace().split(
858-
id({ CI, value: "top", class: "keyword" }).whitespace().constant().whitespace(),
843+
id({ CI, value: "delete", class: "keyword" }).whitespace().call("SQLDelete"),
844+
id({ CI, value: "update", class: "keyword" }).whitespace().call("SQLUpdate"),
845+
id({ CI, value: "select", class: "keyword" }).whitespace().call("SQLSelect")
846+
).exit().end();
847+
848+
rule("SQLVar").branch()
849+
.id({ class: "variable", type: "sqlFieldName" }).split(
850+
char(".").id({ class: "variable", type: "sqlFieldName" }),
851+
any()
852+
).optWhitespace().branch().split(
853+
char("-").char(">").optWhitespace()
854+
.id({ class: "variable", type: "sqlFieldName" }).optWhitespace().merge(),
855+
any()
856+
).exit().end();
857+
858+
rule("SQLSelect").split(
859+
id({ CI, value: "top", class: "keyword" }).whitespace().constant().whitespace(),
860+
any()
861+
).branch().split(
862+
char({ value: "*", class: "special" }),
863+
call("SQLVar").split(
864+
id({ CI, value: "as", class: "keyword" }).whitespace().id({ class: "variable" })
865+
.optWhitespace(),
859866
any()
860867
).split(
861-
char({ value: "*", class: "special" }),
862-
branch().id({ class: "variable", type: "sqlFieldName" }).optWhitespace().branch().split(
863-
char("-").char(">").optWhitespace()
864-
.id({ class: "variable", type: "sqlFieldName" }).optWhitespace().merge(),
865-
any()
866-
).split(
867-
id({ CI, value: "as", class: "keyword" }).whitespace().id({ class: "variable" })
868-
.optWhitespace(),
869-
any()
870-
).split(
871-
char(",").optWhitespace().merge(),
872-
any()
873-
)
874-
).whitespace().call("SQLFrom").whitespace().split(
875-
id({ CI, value: "where", class: "keyword" }).whitespace().call("SQLExpression")
876-
.whitespace(),
868+
char(",").optWhitespace().merge(),
869+
any()
870+
)
871+
).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(),
877880
any()
878881
).split(
879-
id({ CI, value: "order", class: "keyword" }).whitespace()
880-
.id({ CI, value: "by", class: "keyword" }).whitespace()
881-
.branch().id({ class: "variable", type: "sqlFieldName" }).optWhitespace().split(
882-
id({ CI, value: "desc", class: "keyword" }).optWhitespace(),
883-
id({ CI, value: "asc", class: "keyword" }).optWhitespace(),
884-
any()
885-
).split(
886-
char(",").optWhitespace().merge(),
887-
any()
888-
),
882+
char(",").optWhitespace().merge(),
889883
any()
890-
)
884+
),
885+
any()
891886
).exit().end();
892887

888+
rule("SQLUpdate").call("SQLClassName").whitespace()
889+
.id({ CI, value: "set", class: "keyword" }).whitespace()
890+
.branch()
891+
.id({ type: "sqlFieldName", class: "variable" }).optWhitespace().char("=").optWhitespace()
892+
.call("SQLExpression").optWhitespace().split(
893+
char(",").optWhitespace().merge(),
894+
any()
895+
)
896+
.id({ CI, value: "where", class: "keyword" })
897+
.whitespace()
898+
.call("SQLExpression").exit().end();
899+
900+
rule("SQLDelete").call("SQLFrom").whitespace()
901+
.id({ CI, value: "where", class: "keyword" }).whitespace().call("SQLExpression").exit().end();
902+
893903
rule("SQLFrom").id({ CI, value: "from", class: "keyword" }).whitespace().call("SQLClassName")
894904
.exit().end();
895905

@@ -906,9 +916,18 @@ rule("SQLClassName").split(
906916
)).exit().end();
907917

908918
rule("SQLExpression").split(
919+
909920
constant(),
910-
char("(").optWhitespace().call("SQLExpression").optWhitespace().char(")"),
921+
922+
char("(").optWhitespace().split(
923+
id({ CI, value: "delete", class: "keyword" }).whitespace().call("SQLDelete").optWhitespace(),
924+
id({ CI, value: "update", class: "keyword" }).whitespace().call("SQLUpdate").optWhitespace(),
925+
id({ CI, value: "select", class: "keyword" }).whitespace().call("SQLSelect").optWhitespace(),
926+
call("SQLExpression").optWhitespace()
927+
).char(")"),
928+
911929
id({ CI, value: "not", class: "keyword" }).optWhitespace().call("SQLExpression"),
930+
912931
char({ value: "'", class: "string" }).branch().split(
913932
char({ value: "'", class: "string" }),
914933
split(
@@ -919,11 +938,13 @@ rule("SQLExpression").split(
919938
whitespace()
920939
).merge()
921940
),
941+
922942
id({ class: "variable", type: "sqlFieldName" }).split(
923943
char({ value: "_", class: "variable", type: "sqlFieldName" })
924944
.id({ class: "variable", type: "sqlFieldName" }),
925945
any()
926946
)
947+
927948
).optWhitespace().split(
928949
split(
929950
char("+"),

0 commit comments

Comments
 (0)