summaryrefslogtreecommitdiff
path: root/src/monoize.sml
diff options
context:
space:
mode:
Diffstat (limited to 'src/monoize.sml')
-rw-r--r--src/monoize.sml19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/monoize.sml b/src/monoize.sml
index 7344c22f..5341ab99 100644
--- a/src/monoize.sml
+++ b/src/monoize.sml
@@ -614,7 +614,24 @@ fun monoExp (env, st, fm) (all as (e, loc)) =
strcatComma loc (map (fn (x, _) => strcat loc [(L'.EField (gf "From", x), loc),
sc (" AS " ^ x)]) tables),
sc " WHERE ",
- gf "Where"
+ gf "Where",
+ if List.all (fn (x, xts) =>
+ case List.find (fn (x', _) => x' = x) grouped of
+ NONE => List.null xts
+ | SOME (_, xts') =>
+ List.all (fn (x, _) =>
+ List.exists (fn (x', _) => x' = x)
+ xts') xts) tables then
+ sc ""
+ else
+ strcat loc [
+ sc " GROUP BY ",
+ strcatComma loc (map (fn (x, xts) =>
+ strcatComma loc
+ (map (fn (x', _) =>
+ sc (x ^ "." ^ x'))
+ xts)) grouped)
+ ]
]), loc),
fm)
| _ => poly ()