@@ -37,9 +37,8 @@ module Squeal.PostgreSQL.Expression
3737 ( -- * Expression
3838 Expression (UnsafeExpression, renderExpression)
3939 , HasParameter (param)
40− , HasColumn (getColumn)
41− , Column (Column)
42− , renderColumn
40+ -- , Column (Column)
41+ -- , renderColumn
4342 , GroupedBy (getGroup1, getGroup2)
4443 -- ** Null
4544 , null_
@@ -100,8 +99,7 @@ module Squeal.PostgreSQL.Expression
10099 , every, everyDistinct
101100 , max_, maxDistinct, min_, minDistinct
102101 -- * Tables
103− , Table (UnsafeTable, renderTable)
104− , HasTable (getTable)
102+ , Subtable (UnsafeSubtable, renderSubtable)
105103 , TypeExpression (UnsafeTypeExpression, renderTypeExpression)
106104 , PGTyped (pgtype)
107105 , bool
@@ -206,32 +204,11 @@ instance {-# OVERLAPPING #-} PGTyped (PGTypeOf ty1)
206204instance {-# OVERLAPPABLE #-} (KnownNat n, HasParameter (n-1) params ty)
207205 => HasParameter n (ty' : params) ty
208206
209−{- | A `HasColumn` constraint indicates an unqualified column reference.
210−`getColumn` can only be unambiguous when the `TableExpression` the column
211−references is unique, in which case the column may be referenced using
212−@-XOverloadedLabels@. Otherwise, combined with a `HasTable` constraint, the
213−qualified column reference operator `!` may be used.
214−-}
215−class KnownSymbol column => HasColumn
216− (column :: Symbol)
217− (columns :: RelationType)
218− (ty :: NullityType)
219− | column columns -> ty where
220− getColumn
221− :: HasUnique table tables columns
222− => Alias column
223− -> Expression tables 'Ungrouped params ty
224− getColumn column = UnsafeExpression $ renderAlias column
225−instance {-# OVERLAPPING #-} KnownSymbol column
226− => HasColumn column (column ::: ty ': tys) ty
227−instance {-# OVERLAPPABLE #-} (KnownSymbol column, HasColumn column table ty)
228− => HasColumn column (ty' ': table) ty
229−
230−instance (HasColumn column columns ty, HasUnique table tables columns)
207+instance (HasUnique table tables columns, Has column columns ty)
231208 => IsLabel column (Expression tables 'Ungrouped params ty) where
232− fromLabel = getColumn (Alias @column)
209+ fromLabel = UnsafeExpression $ renderAlias (Alias @column)
233210
234−instance (HasTable table tables columns, HasColumn column columns ty)
211+instance (Has table tables columns, Has column columns ty)
235212 => IsTableColumn table column (Expression tables 'Ungrouped params ty) where
236213 table ! column = UnsafeExpression $
237214 renderAlias table <> "." <> renderAlias column
@@ -240,21 +217,21 @@ instance (HasTable table tables columns, HasColumn column columns ty)
240217-- in `Squeel.PostgreSQL.Definition.unique` and other
241218-- `Squeel.PostgreSQL.Definition.TableConstraint`s to witness a
242219-- subcolumns relationship.
243−data Column
244− (columns :: RelationType)
245− (columnty :: (Symbol,NullityType))
246− where
247− Column
248− :: HasColumn column columns ty
249− => Alias column
250− -> Column columns (column ::: ty)
251−deriving instance Show (Column columns columnty)
252−deriving instance Eq (Column columns columnty)
253−deriving instance Ord (Column columns columnty)
254−
255−-- | Render a `Column`.
256−renderColumn :: Column columns columnty -> ByteString
257−renderColumn (Column column) = renderAlias column
220+-- data Column
221+-- (columns :: RelationType)
222+-- (columnty :: (Symbol,NullityType))
223+-- where
224+-- Column
225+-- :: Has column columns ty
226+-- => Alias column
227+-- -> Column columns (column ::: ty)
228+-- deriving instance Show (Column columns columnty)
229+-- deriving instance Eq (Column columns columnty)
230+-- deriving instance Ord (Column columns columnty)
231+
232+-- -- | Render a `Column`.
233+-- renderColumn :: Column columns columnty -> ByteString
234+-- renderColumn (Column column) = renderAlias column
258235
259236{- | A `GroupedBy` constraint indicates that a table qualified column is
260237a member of the auxiliary namespace created by @GROUP BY@ clauses and thus,
@@ -263,12 +240,12 @@ may be called in an output `Expression` without aggregating.
263240class (KnownSymbol table, KnownSymbol column)
264241 => GroupedBy table column bys where
265242 getGroup1
266− :: (HasUnique table tables columns, HasColumn column columns ty)
243+ :: (HasUnique table tables columns, Has column columns ty)
267244 => Alias column
268245 -> Expression tables ('Grouped bys) params ty
269246 getGroup1 column = UnsafeExpression $ renderAlias column
270247 getGroup2
271− :: (HasTable table tables columns, HasColumn column columns ty)
248+ :: (Has table tables columns, Has column columns ty)
272249 => Alias table
273250 -> Alias column
274251 -> Expression tables ('Grouped bys) params ty
@@ -284,15 +261,15 @@ instance {-# OVERLAPPABLE #-}
284261
285262instance
286263 ( HasUnique table tables columns
287− , HasColumn column columns ty
264+ , Has column columns ty
288265 , GroupedBy table column bys
289266 ) => IsLabel column
290267 (Expression tables ('Grouped bys) params ty) where
291268 fromLabel = getGroup1 (Alias @column)
292269
293270instance
294− ( HasTable table tables columns
295− , HasColumn column columns ty
271+ ( Has table tables columns
272+ , Has column columns ty
296273 , GroupedBy table column bys
297274 ) => IsTableColumn table column
298275 (Expression tables ('Grouped bys) params ty) where (!) = getGroup2
@@ -961,31 +938,19 @@ minDistinct = unsafeAggregateDistinct "min"
961938tables
962939-----------------------------------------}
963940
964−-- | A `Table` from a schema without its alias with an `IsLabel` instance
941+-- | A `Subtable` from a table expression is a way
965942-- to call a table reference by its alias.
966−newtype Table
967− (schema :: RelationProduct)
943+newtype Subtable
944+ (table :: RelationProduct)
968945 (columns :: RelationType)
969− = UnsafeTable { renderTable :: ByteString }
946+ = UnsafeSubtable { renderSubtable :: ByteString }
970947 deriving (GHC.Generic,Show,Eq,Ord,NFData)
971−
972−-- | A `HasTable` constraint indicates a table reference.
973−class KnownSymbol table => HasTable
974− (table :: Symbol)
975− (tables :: RelationProduct)
948+instance Has
949+ (subtable :: Symbol)
950+ (table :: RelationProduct)
976951 (columns :: RelationType)
977− | table tables -> columns where
978− getTable :: Alias table -> Table tables columns
979− getTable table = UnsafeTable $ renderAlias table
980−instance {-# OVERLAPPING #-} KnownSymbol table
981− => HasTable table ((table ::: columns) ': tables) columns
982−instance {-# OVERLAPPABLE #-}
983− (KnownSymbol table, HasTable table schema columns)
984− => HasTable table (table' ': schema) columns
985−
986−instance HasTable table schema columns
987− => IsLabel table (Table schema columns) where
988− fromLabel = getTable (Alias @table)
952+ => IsLabel subtable (Subtable table columns) where
953+ fromLabel = UnsafeSubtable $ renderAlias (Alias @subtable)
989954
990955{-----------------------------------------
991956type expressions