summaryrefslogtreecommitdiff
path: root/src/sql.sml
diff options
context:
space:
mode:
Diffstat (limited to 'src/sql.sml')
-rw-r--r--src/sql.sml15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/sql.sml b/src/sql.sml
index dfe2f968..409e205c 100644
--- a/src/sql.sml
+++ b/src/sql.sml
@@ -193,7 +193,7 @@ val uw_ident = wrapP ident (fn s => if String.isPrefix "uw_" s andalso size s >=
SOME (str (Char.toUpper (String.sub (s, 3)))
^ String.extract (s, 4, NONE))
else
- NONE)
+ SOME s)
val field = wrap (follow (opt (follow t_ident (const ".")))
uw_ident)
@@ -221,6 +221,7 @@ datatype sqexp =
fun cmp s r = wrap (const s) (fn () => RCmp r)
val sqbrel = altL [cmp "=" Eq,
+ cmp "IS NOT DISTINCT FROM" Eq,
cmp "<>" Ne,
cmp "<=" Le,
cmp "<" Lt,
@@ -334,11 +335,12 @@ fun sqexp chs =
(altL [wrap (if !sqlcacheMode then primSqlcache else prim) SqConst,
wrap (const "TRUE") (fn () => SqTrue),
wrap (const "FALSE") (fn () => SqFalse),
+ wrap (follow (const "NULL::") ident) (fn ((), _) => Null),
wrap (const "NULL") (fn () => Null),
- wrap field Field,
- wrap uw_ident Computed,
wrap known SqKnown,
wrap func SqFunc,
+ wrap field Field,
+ wrap uw_ident Computed,
wrap (arithmetic sqexp) (fn _ => Unmodeled),
wrap unmodeled (fn () => Unmodeled),
wrap (if !sqlcacheMode then sqlifySqlcache else sqlify) Inj,
@@ -402,6 +404,11 @@ val orderby = log "orderby"
(opt (ws (const "DESC"))))))
ignore)
+val groupby = log "groupby"
+ (wrap (follow (ws (const "GROUP BY "))
+ (list sqexp))
+ ignore)
+
val jtype = altL [wrap (const "JOIN") (fn () => Inner),
wrap (const "LEFT JOIN") (fn () => Left),
wrap (const "RIGHT JOIN") (fn () => Right),
@@ -444,7 +451,7 @@ and query chs = log "query"
(follow query (const "))")))))
(fn ((), (q1, ((), (q2, ())))) => Union (q1, q2)))
(wrap query1 Query1))
- (opt orderby))
+ (follow (opt groupby) (opt orderby)))
#1)
chs