comparison src/monoize.sml @ 1196:134da5110bf7

Relational operators portability
author Adam Chlipala <adamc@hcoop.net>
date Thu, 01 Apr 2010 17:21:16 -0400
parents aff5e661b5f8
children c316ca3c9ec6
comparison
equal deleted inserted replaced
1195:aff5e661b5f8 1196:134da5110bf7
2401 _) => 2401 _) =>
2402 let 2402 let
2403 val s = (L'.TFfi ("Basis", "string"), loc) 2403 val s = (L'.TFfi ("Basis", "string"), loc)
2404 fun sc s = (L'.EPrim (Prim.String s), loc) 2404 fun sc s = (L'.EPrim (Prim.String s), loc)
2405 in 2405 in
2406 ((L'.EAbs ("c", s, (L'.TFun (s, (L'.TFun (s, s), loc)), loc), 2406 (if #nestedRelops (Settings.currentDbms ()) then
2407 (L'.EAbs ("e1", s, (L'.TFun (s, s), loc), 2407 (L'.EAbs ("c", s, (L'.TFun (s, (L'.TFun (s, s), loc)), loc),
2408 (L'.EAbs ("e2", s, s, 2408 (L'.EAbs ("e1", s, (L'.TFun (s, s), loc),
2409 strcat [sc "((", 2409 (L'.EAbs ("e2", s, s,
2410 (L'.ERel 1, loc), 2410 strcat [sc "((",
2411 sc ") ", 2411 (L'.ERel 1, loc),
2412 (L'.ERel 2, loc), 2412 sc ") ",
2413 sc " (", 2413 (L'.ERel 2, loc),
2414 (L'.ERel 0, loc), 2414 sc " (",
2415 sc "))"]), loc)), loc)), loc), 2415 (L'.ERel 0, loc),
2416 sc "))"]), loc)), loc)), loc)
2417 else
2418 (L'.EAbs ("c", s, (L'.TFun (s, (L'.TFun (s, s), loc)), loc),
2419 (L'.EAbs ("e1", s, (L'.TFun (s, s), loc),
2420 (L'.EAbs ("e2", s, s,
2421 strcat [(L'.ERel 1, loc),
2422 sc " ",
2423 (L'.ERel 2, loc),
2424 sc " ",
2425 (L'.ERel 0, loc)]), loc)), loc)), loc),
2416 fm) 2426 fm)
2417 end 2427 end
2418 | L.ECApp ( 2428 | L.ECApp (
2419 (L.ECApp ( 2429 (L.ECApp (
2420 (L.ECApp ( 2430 (L.ECApp (
2431 ((L'.EAbs ("x", s, s, (L'.ERel 0, loc)), loc), 2441 ((L'.EAbs ("x", s, s, (L'.ERel 0, loc)), loc),
2432 fm) 2442 fm)
2433 end 2443 end
2434 2444
2435 | L.EFfi ("Basis", "sql_union") => ((L'.EPrim (Prim.String "UNION"), loc), fm) 2445 | L.EFfi ("Basis", "sql_union") => ((L'.EPrim (Prim.String "UNION"), loc), fm)
2436 | L.EFfi ("Basis", "sql_intersect") => ((L'.EPrim (Prim.String "INTERSECT"), loc), fm) 2446 | L.EFfi ("Basis", "sql_intersect") =>
2437 | L.EFfi ("Basis", "sql_except") => ((L'.EPrim (Prim.String "EXCEPT"), loc), fm) 2447 (if #onlyUnion (Settings.currentDbms ()) then
2448 ErrorMsg.errorAt loc "The DBMS you've selected doesn't support INTERSECT."
2449 else
2450 ();
2451 ((L'.EPrim (Prim.String "INTERSECT"), loc), fm))
2452 | L.EFfi ("Basis", "sql_except") =>
2453 (if #onlyUnion (Settings.currentDbms ()) then
2454 ErrorMsg.errorAt loc "The DBMS you've selected doesn't support EXCEPT."
2455 else
2456 ();
2457 ((L'.EPrim (Prim.String "EXCEPT"), loc), fm))
2438 2458
2439 | L.ECApp ( 2459 | L.ECApp (
2440 (L.ECApp ( 2460 (L.ECApp (
2441 (L.ECApp ( 2461 (L.ECApp (
2442 (L.EFfi ("Basis", "sql_count"), _), 2462 (L.EFfi ("Basis", "sql_count"), _),