hpqtypes-extras 1.13.0.0 → 1.13.1.0
raw patch · 5 files changed
+34/−12 lines, 5 filesdep ~semigroupsPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: semigroups
API changes (from Hackage documentation)
+ Database.PostgreSQL.PQTypes.Model.Index: [idxInclude] :: TableIndex -> [RawSQL ()]
- Database.PostgreSQL.PQTypes.Model.Index: TableIndex :: [RawSQL ()] -> IndexMethod -> Bool -> Bool -> Maybe (RawSQL ()) -> TableIndex
+ Database.PostgreSQL.PQTypes.Model.Index: TableIndex :: [RawSQL ()] -> [RawSQL ()] -> IndexMethod -> Bool -> Bool -> Maybe (RawSQL ()) -> TableIndex
Files
- CHANGELOG.md +8/−0
- hpqtypes-extras.cabal +1/−1
- src/Database/PostgreSQL/PQTypes/Checks.hs +12/−9
- src/Database/PostgreSQL/PQTypes/Model/Index.hs +11/−0
- test/Main.hs +2/−2
CHANGELOG.md view
@@ -1,3 +1,11 @@+# hpqtypes-extras-1.13.1.0 (2021-11-26)+* Add support for including columns in indexes.++# hpqtypes-extras-1.13.0.0 (2021-11-08)+* Add support for handling lock_timeout during migrations.+* Improvements for making no downtime migrations easier to write.+* Commiting after each migration was made non-optional.+ # hpqtypes-extras-1.12.0.1 (2021-10-11) * Add support for log-base-0.11.0.0
hpqtypes-extras.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.2 name: hpqtypes-extras-version: 1.13.0.0+version: 1.13.1.0 synopsis: Extra utilities for hpqtypes library description: The following extras for hpqtypes library: .
src/Database/PostgreSQL/PQTypes/Checks.hs view
@@ -1064,7 +1064,8 @@ sqlGetIndexes :: Table -> SQL sqlGetIndexes table = toSQLCommand . sqlSelect "pg_catalog.pg_class c" $ do sqlResult "c.relname::text" -- index name- sqlResult $ "ARRAY(" <> selectCoordinates <> ")" -- array of index coordinates+ sqlResult $ "ARRAY(" <> selectCoordinates "0" "i.indnkeyatts" <> ")" -- array of key columns in the index+ sqlResult $ "ARRAY(" <> selectCoordinates "i.indnkeyatts" "i.indnatts" <> ")" -- array of included columns in the index sqlResult "am.amname::text" -- the method used (btree, gin etc) sqlResult "i.indisunique" -- is it unique? sqlResult "i.indisvalid" -- is it valid?@@ -1078,22 +1079,24 @@ sqlWhereIsNULL "r.contype" -- fetch only "pure" indexes where -- Get all coordinates of the index.- selectCoordinates = smconcat [+ selectCoordinates start end = smconcat [ "WITH RECURSIVE coordinates(k, name) AS ("- , " VALUES (0, NULL)"+ , " VALUES (" <> start <> "::integer, NULL)" , " UNION ALL" , " SELECT k+1, pg_catalog.pg_get_indexdef(i.indexrelid, k+1, true)" , " FROM coordinates"- , " WHERE pg_catalog.pg_get_indexdef(i.indexrelid, k+1, true) != ''"+ , " WHERE k < " <> end , ")"- , "SELECT name FROM coordinates WHERE k > 0"+ , "SELECT name FROM coordinates WHERE name IS NOT NULL" ] -fetchTableIndex :: (String, Array1 String, String, Bool, Bool, Maybe String)- -> (TableIndex, RawSQL ())-fetchTableIndex (name, Array1 columns, method, unique, valid, mconstraint) =+fetchTableIndex+ :: (String, Array1 String, Array1 String, String, Bool, Bool, Maybe String)+ -> (TableIndex, RawSQL ())+fetchTableIndex (name, Array1 keyColumns, Array1 includeColumns, method, unique, valid, mconstraint) = (TableIndex- { idxColumns = map unsafeSQL columns+ { idxColumns = map unsafeSQL keyColumns+ , idxInclude = map unsafeSQL includeColumns , idxMethod = read method , idxUnique = unique , idxValid = valid
src/Database/PostgreSQL/PQTypes/Model/Index.hs view
@@ -29,6 +29,7 @@ data TableIndex = TableIndex { idxColumns :: [RawSQL ()]+, idxInclude :: [RawSQL ()] , idxMethod :: IndexMethod , idxUnique :: Bool , idxValid :: Bool -- ^ If creation of index with CONCURRENTLY fails, index@@ -54,6 +55,7 @@ tblIndex :: TableIndex tblIndex = TableIndex { idxColumns = []+, idxInclude = [] , idxMethod = BTree , idxUnique = False , idxValid = True@@ -84,6 +86,7 @@ uniqueIndexOnColumn :: RawSQL () -> TableIndex uniqueIndexOnColumn column = TableIndex { idxColumns = [column]+, idxInclude = [] , idxMethod = BTree , idxUnique = True , idxValid = True@@ -93,6 +96,7 @@ uniqueIndexOnColumns :: [RawSQL ()] -> TableIndex uniqueIndexOnColumns columns = TableIndex { idxColumns = columns+, idxInclude = [] , idxMethod = BTree , idxUnique = True , idxValid = True@@ -102,6 +106,7 @@ uniqueIndexOnColumnWithCondition :: RawSQL () -> RawSQL () -> TableIndex uniqueIndexOnColumnWithCondition column whereC = TableIndex { idxColumns = [column]+, idxInclude = [] , idxMethod = BTree , idxUnique = True , idxValid = True@@ -114,6 +119,9 @@ , tname , "__" , mintercalate "__" $ map (asText sanitize) idxColumns+ , if null idxInclude+ then ""+ else "$$" <> mintercalate "__" (map (asText sanitize) idxInclude) , maybe "" (("__" <>) . hashWhere) idxWhere ] where@@ -154,6 +162,9 @@ , " USING" <+> (rawSQL (T.pack . show $ idxMethod) ()) <+> "(" , mintercalate ", " idxColumns , ")"+ , if null idxInclude+ then ""+ else " INCLUDE (" <> mintercalate ", " idxInclude <> ")" , maybe "" (" WHERE" <+>) idxWhere ]
test/Main.hs view
@@ -126,7 +126,7 @@ , mgrFrom = 3 , mgrAction = CreateIndexConcurrentlyMigration (tblName tableBankSchema3)- (indexOnColumn "name")+ ((indexOnColumn "name") { idxInclude = ["id", "location"] }) } tableBankSchema5 :: Table@@ -134,7 +134,7 @@ tblVersion = (tblVersion tableBankSchema4) + 2 , tblColumns = filter (\c -> colName c /= "cash") (tblColumns tableBankSchema4)- , tblIndexes = [indexOnColumn "name"]+ , tblIndexes = [(indexOnColumn "name") { idxInclude = ["id", "location"] }] } tableBadGuySchema1 :: Table