hpqtypes-extras 1.10.1.0 → 1.10.2.0
raw patch · 4 files changed
+43/−21 lines, 4 filesdep ~basePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: base
API changes (from Hackage documentation)
+ Database.PostgreSQL.PQTypes.SQL.Builder: [sqlSelectUnion] :: SqlSelect -> [SQL]
+ Database.PostgreSQL.PQTypes.SQL.Builder: sqlUnion :: (MonadState SqlSelect m, Sqlable sql) => [sql] -> m ()
- Database.PostgreSQL.PQTypes.SQL.Builder: SqlSelect :: SQL -> Bool -> [SQL] -> [SqlCondition] -> [SQL] -> [SQL] -> [SQL] -> Integer -> Integer -> [(SQL, SQL)] -> SqlSelect
+ Database.PostgreSQL.PQTypes.SQL.Builder: SqlSelect :: SQL -> [SQL] -> Bool -> [SQL] -> [SqlCondition] -> [SQL] -> [SQL] -> [SQL] -> Integer -> Integer -> [(SQL, SQL)] -> SqlSelect
Files
- CHANGELOG.md +4/−0
- hpqtypes-extras.cabal +3/−3
- src/Database/PostgreSQL/PQTypes/Model/Migration.hs +6/−0
- src/Database/PostgreSQL/PQTypes/SQL/Builder.hs +30/−18
CHANGELOG.md view
@@ -1,3 +1,7 @@+# hpqtypes-extras-1.10.2.0 (2020-01-20)+* Add support for UNION clause+* Add support for GHC 8.8+ # hpqtypes-extras-1.10.1.0 (2020-01-09) * Add support for ON CONFLICT clause
hpqtypes-extras.cabal view
@@ -1,6 +1,6 @@ cabal-version: 1.18 name: hpqtypes-extras-version: 1.10.1.0+version: 1.10.2.0 synopsis: Extra utilities for hpqtypes library description: The following extras for hpqtypes library: .@@ -20,7 +20,7 @@ copyright: Scrive AB category: Database build-type: Simple-tested-with: GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.5+tested-with: GHC ==8.0.2 || ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.2 Source-repository head Type: git@@ -50,7 +50,7 @@ other-modules: Database.PostgreSQL.PQTypes.Checks.Util , Database.PostgreSQL.PQTypes.Utils.NubList - build-depends: base >= 4.9 && < 4.13+ build-depends: base >= 4.9 && < 4.14 , hpqtypes >= 1.8.0.0 && < 1.9.0.0 , base16-bytestring >= 0.1 && < 0.2 , bytestring >= 0.10 && < 0.11
src/Database/PostgreSQL/PQTypes/Model/Migration.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {- | Using migrations is fairly easy. After you've defined the lists of@@ -48,8 +49,13 @@ -- | Migration for creating an index concurrently. | CreateIndexConcurrentlyMigration+#if __GLASGOW_HASKELL__ >= 806 (RawSQL ()) -- ^ Table name TableIndex -- ^ Index+#else+ (RawSQL ())+ TableIndex+#endif -- | Migration object. data Migration m =
src/Database/PostgreSQL/PQTypes/SQL/Builder.hs view
@@ -180,6 +180,7 @@ , sqlLimit , sqlDistinct , sqlWith+ , sqlUnion , SqlTurnIntoSelect , sqlTurnIntoSelect@@ -321,6 +322,7 @@ data SqlSelect = SqlSelect { sqlSelectFrom :: SQL+ , sqlSelectUnion :: [SQL] , sqlSelectDistinct :: Bool , sqlSelectResult :: [SQL] , sqlSelectWhere :: [SqlCondition]@@ -426,21 +428,24 @@ withSQL = withSQL . toSQLCommand instance Sqlable SqlSelect where- toSQLCommand cmd =- emitClausesSepComma "WITH" (map (\(name,command) -> name <+> "AS" <+> parenthesize command) (sqlSelectWith cmd)) <+>- "SELECT" <+> (if sqlSelectDistinct cmd then "DISTINCT" else mempty) <+>- sqlConcatComma (sqlSelectResult cmd) <+>- emitClause "FROM" (sqlSelectFrom cmd) <+>- emitClausesSep "WHERE" "AND" (map toSQLCommand $ sqlSelectWhere cmd) <+>- emitClausesSepComma "GROUP BY" (sqlSelectGroupBy cmd) <+>- emitClausesSep "HAVING" "AND" (sqlSelectHaving cmd) <+>- emitClausesSepComma "ORDER BY" (sqlSelectOrderBy cmd) <+>- (if sqlSelectOffset cmd > 0- then unsafeSQL ("OFFSET " ++ show (sqlSelectOffset cmd))- else "") <+>- (if sqlSelectLimit cmd >= 0- then unsafeSQL ("LIMIT " ++ show (sqlSelectLimit cmd))- else "")+ toSQLCommand cmd = smconcat+ [ emitClausesSepComma "WITH" $+ map (\(name,command) -> name <+> "AS" <+> parenthesize command) (sqlSelectWith cmd)+ , "SELECT" <+> (if sqlSelectDistinct cmd then "DISTINCT" else mempty)+ , sqlConcatComma (sqlSelectResult cmd)+ , emitClause "FROM" (sqlSelectFrom cmd)+ , emitClausesSep "WHERE" "AND" (map toSQLCommand $ sqlSelectWhere cmd)+ , emitClausesSep "UNION" "UNION" (sqlSelectUnion cmd)+ , emitClausesSepComma "GROUP BY" (sqlSelectGroupBy cmd)+ , emitClausesSep "HAVING" "AND" (sqlSelectHaving cmd)+ , emitClausesSepComma "ORDER BY" (sqlSelectOrderBy cmd)+ , if sqlSelectOffset cmd > 0+ then unsafeSQL ("OFFSET " ++ show (sqlSelectOffset cmd))+ else ""+ , if sqlSelectLimit cmd >= 0+ then unsafeSQL ("LIMIT " ++ show (sqlSelectLimit cmd))+ else ""+ ] instance Sqlable SqlInsert where toSQLCommand cmd =@@ -468,6 +473,7 @@ "INSERT INTO" <+> sqlInsertSelectWhat cmd <+> parenthesize (sqlConcatComma (map fst (sqlInsertSelectSet cmd))) <+> parenthesize (toSQLCommand (SqlSelect { sqlSelectFrom = sqlInsertSelectFrom cmd+ , sqlSelectUnion = [] , sqlSelectDistinct = sqlInsertSelectDistinct cmd , sqlSelectResult = fmap snd $ sqlInsertSelectSet cmd , sqlSelectWhere = sqlInsertSelectWhere cmd@@ -505,11 +511,11 @@ sqlSelect :: SQL -> State SqlSelect () -> SqlSelect sqlSelect table refine =- execState refine (SqlSelect table False [] [] [] [] [] 0 (-1) [])+ execState refine (SqlSelect table [] False [] [] [] [] [] 0 (-1) []) sqlSelect2 :: SQL -> State SqlSelect () -> SqlSelect sqlSelect2 from refine =- execState refine (SqlSelect from False [] [] [] [] [] 0 (-1) [])+ execState refine (SqlSelect from [] False [] [] [] [] [] 0 (-1) []) sqlInsert :: SQL -> State SqlInsert () -> SqlInsert sqlInsert table refine =@@ -564,7 +570,10 @@ sqlWith :: (MonadState v m, SqlWith v, Sqlable s) => SQL -> s -> m () sqlWith name sql = modify (\cmd -> sqlWith1 cmd name (toSQLCommand sql)) -+-- | Note: WHERE clause of the main SELECT is treated specially, i.e. it only+-- applies to the main SELECT, not the whole union.+sqlUnion :: (MonadState SqlSelect m, Sqlable sql) => [sql] -> m ()+sqlUnion sqls = modify (\cmd -> cmd { sqlSelectUnion = map toSQLCommand sqls }) class SqlWhere a where sqlWhere1 :: a -> SqlCondition -> a@@ -1046,6 +1055,7 @@ if isSqlEmpty (sqlUpdateFrom s) then "" else "," <+> sqlUpdateFrom s+ , sqlSelectUnion = [] , sqlSelectDistinct = False , sqlSelectResult = if null (sqlUpdateResult s) then ["TRUE"]@@ -1065,6 +1075,7 @@ if isSqlEmpty (sqlDeleteUsing s) then "" else "," <+> sqlDeleteUsing s+ , sqlSelectUnion = [] , sqlSelectDistinct = False , sqlSelectResult = if null (sqlDeleteResult s) then ["TRUE"]@@ -1081,6 +1092,7 @@ instance SqlTurnIntoSelect SqlInsertSelect where sqlTurnIntoSelect s = SqlSelect { sqlSelectFrom = sqlInsertSelectFrom s+ , sqlSelectUnion = [] , sqlSelectDistinct = False , sqlSelectResult = sqlInsertSelectResult s , sqlSelectWhere = sqlInsertSelectWhere s