diff options
author | Benjamin Barenblat <bbaren@mit.edu> | 2016-05-30 17:33:47 -0400 |
---|---|---|
committer | Benjamin Barenblat <bbaren@mit.edu> | 2016-05-30 17:33:47 -0400 |
commit | 08375baa9ee5611fd12e66e648fefc28ae6b0dd7 (patch) | |
tree | e64e8ef5ef2b253a4dfc6c684dcc37c8b422ba1d /src/sql.sml | |
parent | c59d73d2273ed02a8a8303b88ad3b469c270f11c (diff) | |
parent | a3e471e933945dcfb54873cb20c691a193b55671 (diff) |
Merge branch 'dfsg_clean'
Diffstat (limited to 'src/sql.sml')
-rw-r--r-- | src/sql.sml | 15 |
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 |