comparison src/sqlcache.sml @ 2295:e6c5bb62fef8

Fix SQL parser JOIN bug and fix ON clause logic in Sqlcache.
author Ziv Scully <ziv@mit.edu>
date Thu, 19 Nov 2015 03:45:39 -0500
parents f8903af753ff
children 47d5c94aeeb8
comparison
equal deleted inserted replaced
2294:f8903af753ff 2295:e6c5bb62fef8
821 qfs 821 qfs
822 end 822 end
823 | Sql.Join (jt, fi1, fi2, se) => 823 | Sql.Join (jt, fi1, fi2, se) =>
824 concatMap (fn ((wher1, subst1)) => 824 concatMap (fn ((wher1, subst1)) =>
825 map (fn (wher2, subst2) => 825 map (fn (wher2, subst2) =>
826 (sqlAnd (wher1, wher2), 826 let
827 (* There should be no name conflicts... Ziv hopes? *) 827 val subst = unionSubst (subst1, subst2)
828 unionSubst (subst1, subst2))) 828 in
829 (* ON clause becomes part of the accumulated WHERE. *)
830 (sqlAnd (sqlAnd (wher1, wher2), applySubst subst se), subst)
831 end)
829 (flattenFitem fi2)) 832 (flattenFitem fi2))
830 (flattenFitem fi1) 833 (flattenFitem fi1)
831 834
832 and flattenQuery : Sql.query -> (queryFlat * substitution SM.map) list = 835 and flattenQuery : Sql.query -> (queryFlat * substitution SM.map) list =
833 fn Sql.Query1 q => 836 fn Sql.Query1 q =>
1360 bound 1363 bound
1361 env) 1364 env)
1362 val {query = queryText, initial, body, ...} = q 1365 val {query = queryText, initial, body, ...} = q
1363 val attempt = 1366 val attempt =
1364 (* Ziv misses Haskell's do notation.... *) 1367 (* Ziv misses Haskell's do notation.... *)
1365 (safe 0 (printExp "attempt" queryText) andalso safe 0 initial andalso safe 2 body) 1368 (safe 0 queryText andalso safe 0 initial andalso safe 2 body)
1366 <\oguard\> 1369 <\oguard\>
1367 (fn _ => 1370 (fn _ =>
1368 Sql.parse Sql.query (printExp "safe" queryText) 1371 Sql.parse Sql.query queryText
1369 <\obind\> 1372 <\obind\>
1370 (fn queryParsed => 1373 (fn queryParsed =>
1371 let 1374 let
1372 val _ = (printExp "parsed" queryText)
1373 val invalInfo = InvalInfo.singleton queryParsed 1375 val invalInfo = InvalInfo.singleton queryParsed
1374 fun mkExp state = 1376 fun mkExp state =
1375 case cacheExp (env, EQuery q, invalInfo, state) of 1377 case cacheExp (env, EQuery q, invalInfo, state) of
1376 NONE => ((EQuery q, dummyLoc), state) 1378 NONE => ((EQuery q, dummyLoc), state)
1377 | SOME (cachedExp, state) => ((cachedExp, dummyLoc), state) 1379 | SOME (cachedExp, state) => ((cachedExp, dummyLoc), state)