Mercurial > urweb
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) |