@@ -19,6 +19,8 @@ Squeal data manipulation language.
1919 , OverloadedStrings
2020 , PatternSynonyms
2121 , RankNTypes
22+ , ScopedTypeVariables
23+ , TypeApplications
2224 , TypeFamilies
2325 , TypeInType
2426 , TypeOperators
@@ -349,15 +351,13 @@ data ColumnExpression schema from grp params column where
349351instance (KnownSymbol alias, column ~ (alias ::: defness :=> ty))
350352 => Aliasable alias
351353 (Expression schema from grp params ty)
352− (ColumnExpression schema from grp params column)
353− where
354− expression `as` alias = Specific (expression `As` alias)
354+ (ColumnExpression schema from grp params column) where
355+ expression `as` alias = Specific (expression `As` alias)
355356instance (KnownSymbol alias, columns ~ '[alias ::: defness :=> ty])
356357 => Aliasable alias
357358 (Expression schema from grp params ty)
358− (NP (ColumnExpression schema from grp params) columns)
359− where
360− expression `as` alias = expression `as` alias :* Nil
359+ (NP (ColumnExpression schema from grp params) columns) where
360+ expression `as` alias = expression `as` alias :* Nil
361361instance (KnownSymbol col, column ~ (col ::: 'Def :=> ty))
362362 => DefaultAliasable col (ColumnExpression schema from grp params column) where
363363 defaultAs = DefaultAs
@@ -365,6 +365,55 @@ instance (KnownSymbol col, columns ~ '[col ::: 'Def :=> ty])
365365 => DefaultAliasable col (NP (ColumnExpression schema from grp params) columns) where
366366 defaultAs col = defaultAs col :* Nil
367367
368+instance (HasUnique table from columns, Has column columns ty, colty ~ (column ::: defness :=> ty))
369+ => IsLabel column (ColumnExpression schema from 'Ungrouped params colty) where
370+ fromLabel = fromLabel @column `as` Alias
371+instance (HasUnique table from columns, Has column columns ty, columnLabel ~ column, coltys ~ '[column ::: defness :=> ty])
372+ => IsLabel columnLabel
373+ (NP (ColumnExpression schema from 'Ungrouped params) coltys) where
374+ fromLabel = fromLabel @column `as` Alias
375+
376+instance (Has table from columns, Has column columns ty, colty ~ (column ::: defness :=> ty))
377+ => IsQualified table column (ColumnExpression schema from 'Ungrouped params colty) where
378+ tab ! column = tab ! column `as` column
379+instance (Has table from columns, Has column columns ty, coltys ~ '[column ::: defness :=> ty])
380+ => IsQualified table column (NP (ColumnExpression schema from 'Ungrouped params) coltys) where
381+ tab ! column = tab ! column `as` column
382+
383+instance
384+ ( HasUnique table from columns
385+ , Has column columns ty
386+ , GroupedBy table column bys
387+ , colty ~ (column ::: defness :=> ty)
388+ ) => IsLabel column
389+ (ColumnExpression schema from ('Grouped bys) params colty) where
390+ fromLabel = fromLabel @column `as` Alias
391+instance
392+ ( HasUnique table from columns
393+ , Has column columns ty
394+ , GroupedBy table column bys
395+ , coltys ~ '[column ::: defness :=> ty]
396+ ) => IsLabel column
397+ (NP (ColumnExpression schema from ('Grouped bys) params) coltys) where
398+ fromLabel = fromLabel @column `as` Alias
399+
400+instance
401+ ( Has table from columns
402+ , Has column columns ty
403+ , GroupedBy table column bys
404+ , colty ~ (column ::: defness :=> ty)
405+ ) => IsQualified table column
406+ (ColumnExpression schema from ('Grouped bys) params colty) where
407+ tab ! column = tab ! column `as` column
408+instance
409+ ( Has table from columns
410+ , Has column columns ty
411+ , GroupedBy table column bys
412+ , coltys ~ '[column ::: defness :=> ty]
413+ ) => IsQualified table column
414+ (NP (ColumnExpression schema from ('Grouped bys) params) coltys) where
415+ tab ! column = tab ! column :* Nil
416+
368417renderColumnExpression
369418 :: ColumnExpression schema from grp params column
370419 -> ByteString