diff --git a/src/Database/Esqueleto/Internal/Sql.hs b/src/Database/Esqueleto/Internal/Sql.hs index 2331df8..7476ceb 100644 --- a/src/Database/Esqueleto/Internal/Sql.hs +++ b/src/Database/Esqueleto/Internal/Sql.hs @@ -707,13 +707,15 @@ uncommas' = (uncommas *** mconcat) . unzip makeSelect :: SqlSelect a r => Connection -> Mode -> a -> (TLB.Builder, [PersistValue]) -makeSelect conn mode ret = first (s <>) (sqlSelectCols conn ret) +makeSelect conn mode ret = + case mode of + SELECT -> withCols "SELECT " + SELECT_DISTINCT -> withCols "SELECT DISTINCT " + DELETE -> plain "DELETE " + UPDATE -> plain "UPDATE " where - s = case mode of - SELECT -> "SELECT " - SELECT_DISTINCT -> "SELECT DISTINCT " - DELETE -> "DELETE" - UPDATE -> "UPDATE " + withCols v = first (v <>) (sqlSelectCols conn ret) + plain v = (v, []) makeFrom :: Connection -> Mode -> [FromClause] -> (TLB.Builder, [PersistValue]) @@ -831,8 +833,8 @@ class SqlSelect a r | a -> r, r -> a where -- | Not useful for 'select', but used for 'update' and 'delete'. instance SqlSelect () () where - sqlSelectCols _ _ = mempty - sqlSelectColCount _ = 0 + sqlSelectCols _ _ = ("1", []) + sqlSelectColCount _ = 1 sqlSelectProcessRow _ = Right () diff --git a/test/Test.hs b/test/Test.hs index 0792ace..d95b3f2 100644 --- a/test/Test.hs +++ b/test/Test.hs @@ -60,6 +60,11 @@ main = do ret <- select $ return (val (3 :: Int), ()) liftIO $ ret `shouldBe` [ (Value 3, ()) ] + it "works for a single ()" $ + run $ do + ret <- select $ return () + liftIO $ ret `shouldBe` [ () ] + it "works for a single NULL value" $ run $ do ret <- select $ return $ nothing