aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2008-08-16 17:46:26 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2008-08-16 17:46:26 -0400
commitafa00baf57893d90366720a364333d3d86c7089a (patch)
tree0951434abbf171bc1b9dd917cc4e88b8f4cb1519 /src
parent631b4b46de98cae2e6d207dc596fbd57a0a1beeb (diff)
Fields in SQL expressions
Diffstat (limited to 'src')
-rw-r--r--src/lacweb.grm13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/lacweb.grm b/src/lacweb.grm
index 97d620db..aee12028 100644
--- a/src/lacweb.grm
+++ b/src/lacweb.grm
@@ -230,6 +230,7 @@ fun sql_unary (oper, sqlexp, loc) =
%nonassoc TWIDDLE
%nonassoc DOLLAR
%left DOT
+%nonassoc LBRACE RBRACE
%%
@@ -659,11 +660,11 @@ tname : CSYMBOL (CName CSYMBOL, s (CSYMBOLleft, CSYMBOLr
table : SYMBOL ((CName SYMBOL, s (SYMBOLleft, SYMBOLright)),
(EVar ([], SYMBOL), s (SYMBOLleft, SYMBOLright)))
| SYMBOL AS tname (tname, (EVar ([], SYMBOL), s (SYMBOLleft, SYMBOLright)))
- | LBRACE eexp RBRACE AS tname (tname, eexp)
+ | LBRACE LBRACE eexp RBRACE RBRACE AS tname (tname, eexp)
tident : SYMBOL (CName SYMBOL, s (SYMBOLleft, SYMBOLright))
| CSYMBOL (CName CSYMBOL, s (CSYMBOLleft, CSYMBOLright))
- | LBRACE cexp RBRACE (cexp)
+ | LBRACE LBRACE cexp RBRACE RBRACE (cexp)
fident : CSYMBOL (CName CSYMBOL, s (CSYMBOLleft, CSYMBOLright))
| LBRACE cexp RBRACE (cexp)
@@ -683,6 +684,14 @@ sqlexp : TRUE (sql_inject (EVar (["Basis"], "True"),
EVar (["Basis"], "sql_bool"),
s (FALSEleft, FALSEright)))
+ | tident DOT fident (let
+ val loc = s (tidentleft, fidentright)
+ val e = (EVar (["Basis"], "sql_field"), loc)
+ val e = (ECApp (e, tident), loc)
+ in
+ (ECApp (e, fident), loc)
+ end)
+
| sqlexp EQ sqlexp (sql_compare ("eq", sqlexp1, sqlexp2, s (sqlexp1left, sqlexp2right)))
| sqlexp NE sqlexp (sql_compare ("ne", sqlexp1, sqlexp2, s (sqlexp1left, sqlexp2right)))
| sqlexp LT sqlexp (sql_compare ("lt", sqlexp1, sqlexp2, s (sqlexp1left, sqlexp2right)))