on dev help sign in
fix up By and Column
commit9f54306c373cd7f3b535c2977f3a4e169718cde7 authorEitan Chatav <eitan.chatav@gmail.com> dateThu 10 Aug 2017, 13:25 (9 years ago) parentbd6ba2b
2 files changed+23−11
squeel-postgresql/src/Squeel/PostgreSQL/Statement.hs+17−7 squeel-postgresql/test/Squeel/PostgreSQL/StatementSpec.hs+6−4
squeel-postgresql/src/Squeel/PostgreSQL/Statement.hs+17−7
@@ -383,12 +383,18 @@ data By
383383 (tables :: [(Symbol,[(Symbol,ColumnType)])])
384384 (tabcol :: (Symbol,Symbol)) where
385385 By
386+ :: (tables ~ '[table ::: columns], HasColumn column columns ty)
387+ => Alias column
388+ -> By tables '(table, column)
389+ By2
386390 :: (HasTable table tables columns, HasColumn column columns ty)
387391 => (Alias table, Alias column)
388392 -> By tables '(table, column)
389393
390394renderBy :: By tables tabcolty -> ByteString
391−renderBy (By (table, column)) = renderAlias table <> "." <> renderAlias column
395+renderBy = \case
396+ By column -> renderAlias column
397+ By2 (table, column) -> renderAlias table <> "." <> renderAlias column
392398
393399data GroupByClause tables grouping where
394400 NoGroups :: GroupByClause tables 'Ungrouped
@@ -893,13 +899,17 @@ check
893899check condition = UnsafeTableConstraint $
894900 "CHECK" <+> renderExpression condition
895901
896−newtype Column
902+data Column
897903 (columns :: [(Symbol,ColumnType)])
898904 (columnty :: (Symbol,ColumnType))
899− = UnsafeColumn {renderColumn :: ByteString}
900−instance HasColumn column columns ty
901− => IsLabel column (Column columns (column ::: ty)) where
902− fromLabel symbol = UnsafeColumn (renderSymbol symbol)
905+ where
906+ Column
907+ :: HasColumn column columns ty
908+ => Alias column
909+ -> Column columns (column ::: ty)
910+
911+renderColumn :: Column columns columnty -> ByteString
912+renderColumn (Column column) = renderAlias column
903913
904914unique
905915 :: SListI subcolumns
@@ -913,7 +923,7 @@ primaryKey
913923 => NP (Column columns) subcolumns
914924 -> TableConstraint schema columns
915925primaryKey columns = UnsafeTableConstraint $
916− "PRIMARY KEY" <+> renderCommaSeparated renderColumn columns
926+ "PRIMARY KEY" <+> parenthesized (renderCommaSeparated renderColumn columns)
917927
918928type family SameTypes columns0 columns1 :: Constraint where
919929 SameTypes '[] '[] = ()
squeel-postgresql/test/Squeel/PostgreSQL/StatementSpec.hs+6−4
@@ -87,12 +87,12 @@ spec = do
8787 statement =
8888 select (sum_ #col2 `As` #sum :* #col1 `As` #col1 :* Nil)
8989 ( from (Table (#table1 `As` #table1))
90− & group (By (#table1,#col1) :* Nil)
90+ & group (By #col1 :* Nil)
9191 & having ((#col1 + sum_ #col2) >* 1) )
9292 statement `queryRenders`
9393 "SELECT sum(col2) AS sum, col1 AS col1\
9494 \ FROM table1 AS table1\
95− \ GROUP BY table1.col1\
95+ \ GROUP BY col1\
9696 \ HAVING ((col1 + sum(col2)) > 1);"
9797 it "correctly renders simple INSERTs" $ do
9898 let
@@ -226,10 +226,12 @@ spec = do
226226 \ CROSS JOIN orders AS orders2;"
227227 it "should render CREATE TABLE statements" $ do
228228 createTable #table1
229− ((int4 & notNull) `As` #col1 :* (int4 & notNull) `As` #col2 :* Nil) []
229+ ((int4 & notNull) `As` #col1 :* (int4 & notNull) `As` #col2 :* Nil)
230+ [primaryKey (Column #col1 :* Column #col2 :* Nil)]
230231 `definitionRenders`
231232 "CREATE TABLE table1\
232− \ (col1 int4 NOT NULL, col2 int4 NOT NULL);"
233+ \ (col1 int4 NOT NULL, col2 int4 NOT NULL,\
234+ \ PRIMARY KEY (col1, col2));"
233235 createTable #table2
234236 ( serial `As` #col1 :*
235237 text `As` #col2 :*