@@ -20,8 +20,7 @@ import Data.ByteString (ByteString)
2020import Data.Maybe
2121import Data.Monoid
2222import Data.String
23−import Data.Vinyl
24−import Data.Vinyl.Functor
23+import Generics.SOP
2524import GHC.Exts
2625import GHC.OverloadedLabels
2726import GHC.TypeLits
@@ -117,8 +116,8 @@ unsafeFunction
117116 :: ByteString
118117 -> Expression params tables xty
119118 -> Expression params tables yty
120−unsafeFunction fn x = UnsafeExpression $ mconcat
121− [fn, "(", renderExpression x, ")"]
119+unsafeFunction fun x = UnsafeExpression $ mconcat
120+ [fun, "(", renderExpression x, ")"]
122121
123122instance PGNum ty => Num (Expression params tables ('Required (nullity ty))) where
124123 (+) = unsafeBinaryOp "+"
@@ -407,7 +406,8 @@ Alias tab `dotStarFrom` tabs = UnsafeSelection $
407406 fromString (symbolVal' tab) <> ".* FROM " <> renderFrom tabs
408407
409408from
410− :: Rec (Aliased (Expression params tables)) columns
409+ :: SListI columns
410+ => NP (Aliased (Expression params tables)) columns
411411 -> From params schema tables
412412 -> Selection params schema columns
413413list `from` tabs = UnsafeSelection $
@@ -415,8 +415,8 @@ list `from` tabs = UnsafeSelection $
415415 where
416416 renderList
417417 = ByteString.intercalate ", "
418− . recordToList
419− . rmap (Const . renderAliased renderExpression)
418+ . hcollapse
419+ . hmap (K . renderAliased renderExpression)
420420
421421select
422422 :: Selection params schema columns
@@ -436,9 +436,9 @@ INSERT statements
436436-----------------------------------------}
437437
438438insertInto
439− :: HasTable table schema columns
439+ :: (SListI columns, HasTable table schema columns)
440440 => Alias table
441− -> Rec (Aliased (Expression params '[])) columns
441+ -> NP (Aliased (Expression params '[])) columns
442442 -> Statement params '[] schema schema
443443insertInto (Alias table) expressions = UnsafeStatement $ "INSERT INTO "
444444 <> fromString (symbolVal' table)
@@ -447,11 +447,11 @@ insertInto (Alias table) expressions = UnsafeStatement $ "INSERT INTO "
447447 <> ByteString.intercalate ", " values
448448 <> ");"
449449 where
450− aliases = recordToList $ rmap
451− (\ (_ `As` Alias name) -> Const (fromString (symbolVal' name)))
450+ aliases = hcollapse $ hmap
451+ (\ (_ `As` Alias name) -> K (fromString (symbolVal' name)))
452452 expressions
453− values = recordToList $ rmap
454− (\ (expression `As` _) -> Const (renderExpression expression))
453+ values = hcollapse $ hmap
454+ (\ (expression `As` _) -> K (renderExpression expression))
455455 expressions
456456
457457{-----------------------------------------
@@ -486,16 +486,16 @@ serial :: TypeExpression ('Optional ('NotNull 'PGInt4))
486486serial = UnsafeTypeExpression "serial"
487487
488488createTable
489− :: KnownSymbol table
489+ :: (KnownSymbol table, SListI columns)
490490 => Alias table
491− -> Rec (Aliased TypeExpression) columns
491+ -> NP (Aliased TypeExpression) columns
492492 -> Statement '[] '[] schema ((table ::: columns) ': schema)
493493createTable (Alias table) columns = UnsafeStatement $ mconcat
494494 [ "CREATE TABLE "
495495 , fromString $ symbolVal' table
496496 , " ("
497− , ByteString.intercalate ", " . recordToList $
498− rmap (Const . renderColumn) columns
497+ , ByteString.intercalate ", " . hcollapse $
498+ hmap (K . renderColumn) columns
499499 , ");"
500500 ]
501501 where
@@ -523,33 +523,33 @@ instance {-# OVERLAPPABLE #-}
523523UPDATE statements
524524-----------------------------------------}
525525
526−set :: g x -> (Maybe `Compose` g) x
527−set = Compose . Just
526+set :: g x -> (Maybe :.: g) x
527+set = Comp . Just
528528
529−same :: (Maybe `Compose` g) x
530−same = Compose Nothing
529+same :: (Maybe :.: g) x
530+same = Comp Nothing
531531
532532update
533− :: HasTable table schema columns
533+ :: (HasTable table schema columns, SListI columns)
534534 => Alias table
535− -> Rec (Aliased (Maybe `Compose` Expression params '[table ::: columns])) columns
535+ -> NP (Aliased (Maybe :.: Expression params '[table ::: columns])) columns
536536 -> Expression params '[table ::: columns] ('Required ('NotNull 'PGBool))
537537 -> Statement params '[] schema schema
538538update (Alias table) columns where' = UnsafeStatement $ mconcat
539539 [ "UPDATE "
540540 , fromString $ symbolVal' table
541541 , " SET "
542− , ByteString.intercalate ", " . catMaybes . recordToList $
543− rmap (Const . renderSet) columns
542+ , ByteString.intercalate ", " . catMaybes . hcollapse $
543+ hmap (K . renderSet) columns
544544 , " WHERE ", renderExpression where'
545545 ] where
546546 renderSet
547− :: Aliased (Maybe `Compose` Expression params tables) column
547+ :: Aliased (Maybe :.: Expression params tables) column
548548 -> Maybe ByteString
549549 renderSet = \case
550− Compose (Just expression) `As` Alias column -> Just $ mconcat
550+ Comp (Just expression) `As` Alias column -> Just $ mconcat
551551 [ fromString $ symbolVal' column
552552 , " = "
553553 , renderExpression expression
554554 ]
555− Compose Nothing `As` _ -> Nothing
555+ Comp Nothing `As` _ -> Nothing