on dev help sign in
IsLabel instances for grouped columns
f0e5644Eitan Chatav
squeal-postgresql/src/Squeal/PostgreSQL/Expression.hs+16−6
@@ -198,12 +198,10 @@ instance {-# OVERLAPPABLE #-} (KnownNat n, HasParameter (n-1) params ty)
198instance (HasUnique relation relations columns, Has column columns ty)
198instance (HasUnique relation relations columns, Has column columns ty)
199 => IsLabel column (Expression relations 'Ungrouped params ty) where
199 => IsLabel column (Expression relations 'Ungrouped params ty) where
200 fromLabel = UnsafeExpression $ renderAlias (Alias @column)
200 fromLabel = UnsafeExpression $ renderAlias (Alias @column)
201−
202instance (HasUnique relation relations columns, Has column columns ty)
201instance (HasUnique relation relations columns, Has column columns ty)
203 => IsLabel column
202 => IsLabel column
204 (Aliased (Expression relations 'Ungrouped params) (column ::: ty)) where
203 (Aliased (Expression relations 'Ungrouped params) (column ::: ty)) where
205 fromLabel = fromLabel @column `As` Alias @column
204 fromLabel = fromLabel @column `As` Alias @column
206−
207instance (HasUnique relation relations columns, Has column columns ty)
205instance (HasUnique relation relations columns, Has column columns ty)
208 => IsLabel column
206 => IsLabel column
209 (NP (Aliased (Expression relations 'Ungrouped params)) '[column ::: ty]) where
207 (NP (Aliased (Expression relations 'Ungrouped params)) '[column ::: ty]) where
@@ -213,12 +211,10 @@ instance (Has relation relations columns, Has column columns ty)
213 => IsQualified relation column (Expression relations 'Ungrouped params ty) where
211 => IsQualified relation column (Expression relations 'Ungrouped params ty) where
214 relation ! column = UnsafeExpression $
212 relation ! column = UnsafeExpression $
215 renderAlias relation <> "." <> renderAlias column
213 renderAlias relation <> "." <> renderAlias column
216−
217instance (Has relation relations columns, Has column columns ty)
214instance (Has relation relations columns, Has column columns ty)
218 => IsQualified relation column
215 => IsQualified relation column
219 (Aliased (Expression relations 'Ungrouped params) (column ::: ty)) where
216 (Aliased (Expression relations 'Ungrouped params) (column ::: ty)) where
220 relation ! column = relation ! column `As` column
217 relation ! column = relation ! column `As` column
221−
222instance (Has relation relations columns, Has column columns ty)
218instance (Has relation relations columns, Has column columns ty)
223 => IsQualified relation column
219 => IsQualified relation column
224 (NP (Aliased (Expression relations 'Ungrouped params)) '[column ::: ty]) where
220 (NP (Aliased (Expression relations 'Ungrouped params)) '[column ::: ty]) where
@@ -231,6 +227,22 @@ instance
231 ) => IsLabel column
227 ) => IsLabel column
232 (Expression relations ('Grouped bys) params ty) where
228 (Expression relations ('Grouped bys) params ty) where
233 fromLabel = UnsafeExpression $ renderAlias (Alias @column)
229 fromLabel = UnsafeExpression $ renderAlias (Alias @column)
230+instance
231+ ( HasUnique relation relations columns
232+ , Has column columns ty
233+ , GroupedBy relation column bys
234+ ) => IsLabel column
235+ ( Aliased (Expression relations ('Grouped bys) params)
236+ (column ::: ty) ) where
237+ fromLabel = fromLabel @column `As` Alias @column
238+instance
239+ ( HasUnique relation relations columns
240+ , Has column columns ty
241+ , GroupedBy relation column bys
242+ ) => IsLabel column
243+ ( NP (Aliased (Expression relations ('Grouped bys) params))
244+ '[column ::: ty] ) where
245+ fromLabel = fromLabel @column :* Nil
234
246
235instance
247instance
236 ( Has relation relations columns
248 ( Has relation relations columns
@@ -240,7 +252,6 @@ instance
240 (Expression relations ('Grouped bys) params ty) where
252 (Expression relations ('Grouped bys) params ty) where
241 relation ! column = UnsafeExpression $
253 relation ! column = UnsafeExpression $
242 renderAlias relation <> "." <> renderAlias column
254 renderAlias relation <> "." <> renderAlias column
243−
244instance
255instance
245 ( Has relation relations columns
256 ( Has relation relations columns
246 , Has column columns ty
257 , Has column columns ty
@@ -249,7 +260,6 @@ instance
249 (Aliased (Expression relations ('Grouped bys) params)
260 (Aliased (Expression relations ('Grouped bys) params)
250 (column ::: ty)) where
261 (column ::: ty)) where
251 relation ! column = relation ! column `As` column
262 relation ! column = relation ! column `As` column
252−
253instance
263instance
254 ( Has relation relations columns
264 ( Has relation relations columns
255 , Has column columns ty
265 , Has column columns ty
squeal-postgresql/src/Squeal/PostgreSQL/Query.hs+1−1
@@ -177,7 +177,7 @@ let
177 '[ "sum" ::: 'NotNull 'PGint4
177 '[ "sum" ::: 'NotNull 'PGint4
178 , "col1" ::: 'NotNull 'PGint4 ]
178 , "col1" ::: 'NotNull 'PGint4 ]
179 query =
179 query =
180− select (sum_ #col2 `As` #sum :* #col1 `As` #col1 :* Nil)
180+ select (sum_ #col2 `As` #sum :* #col1 :* Nil)
181 ( from (table (#tab `As` #table1))
181 ( from (table (#tab `As` #table1))
182 & group (By #col1 :* Nil)
182 & group (By #col1 :* Nil)
183 & having (#col1 + sum_ #col2 .> 1) )
183 & having (#col1 + sum_ #col2 .> 1) )