Cabal revisions of pg-schema-0.8.1.0
Hackage metadata revisions edit the .cabal file after upload; each diff below is one revision.
revision 1
-cabal-version: 3.12-name: pg-schema-version: 0.8.1.0-category: Database-author: Dmitry Olshansky-maintainer: olshanskydr@gmail.com-copyright: Dmitry Olshansky-license: BSD-3-Clause-license-file: LICENSE-build-type: Simple-tested-with:- GHC ==9.10.3- , GHC ==9.12.4- , GHC ==9.14.1-synopsis: Type-level definition of database schema and safe DML for PostgreSQL.-description:- == Schema definition-- Use `updateSchemaFile` function from "PgSchema.Generation" module to generate type-level definition of database schema.- You can make several schemas with any parts of your database.-- Usually you make executable which imports this module and run it to generate schema definition.- You can run it on CI to check if schema definition is up to date.-- == Safe DML for PostgreSQL-- Use "PgSchema.DML" module to describe and generate (in runtime) safe DML for PostgreSQL.- All operations are statically checked and you can't write invalid SQL.-- With @pg-schema@ you can select or insert/upsert data into tree-like ADT in one request.-- === Example- Let's say-- - we have a database with tables: "orders", "order_positions", "articles".- - There are articles with ids 41 and 42.- - We have generated `MySch` schema with `updateSchemaFile` function from "PgSchema.Generation" module.-- Then we can write a function to insert an order with order positions.- And select orders with order positions and articles in one request using some conditions for orders and order positions that return in order.-- Note that all table names, field names and foreign key constraint names are checked in compile time!-- @- data Order = Order { num :: Text, createdAt :: Day, items :: [OrdPos] } deriving Generic- data OrdPos = OrdPos { id :: Int32, num :: Int32, article :: Article, price :: Double } deriving Generic- data Article = Article { id :: Int32, name :: Text } deriving Generic- type MyAnn tabName = 'Ann CamelToSnake MySch 5 ("dbSchema" ->> tabName)- ...- do- -- insert an order with order positions- void $ insertJSON_ (MyAnn "orders") conn- [ "num" =: "num1" :. "ord__ord_pos" =:- [ "num" =: 1 :. "articleId" =: 42 :. "price" =: 10- , "num" =: 2 :. "articleId" =: 41 :. "price" =: 15 ] ]-- -- select orders- (xs :: [Order]) <- selectSch (MyAnn "orders") conn $ qRoot do- qWhere $ "created_at" >? someDay- &&& pchild "ord__ord_pos" defTabParam- (pparent "ord_pos__article" $ "name" ~~? "%pencil%")- qOrderBy [descf "created_at", descf "num"]- qPath "ord__ord_pos" do- qWhere $ pparent "ord_pos__article" $ "name" ~~? "%pencil%"- qOrderBy [ascf "num"]- qLimit 20- @-- === Structure of modules-- * "PgSchema.Generation" - module with generation functions.- Usually you make executable which generates schema definition using this module.- * "PgSchema.DML" - module with DML functions.- Import this module into your application and use it to generate safe DML for PostgreSQL.- * "PgSchema.Import" - generated schema module imports this module.--homepage: https://github.com/odr/pg-schema/tree/master/pg-schema#readme-bug-reports: https://github.com/odr/pg-schema/issues-extra-doc-files:- ChangeLog.md- README.md--source-repository head- type: git- location: https://github.com/odr/pg-schema--flag time- description: Make CanConvert1 instances for Time types- manual: True- default: True--flag uuid- description: Make CanConvert1 instances for UUID type- manual: True- default: True--flag case-insensitive- description: Make CanConvert1 instances for CaseInsensitive type- manual: True- default: True--flag arbitrary- description: Make Arbitrary instances for all types (Enums, PgTag)- manual: True- default: False--flag debug- description: Trace queries- manual: True- default: False--flag flat- description: Make Flat instances for all types (Enums, PgTag)- manual: True- default: False--flag hashable- description: Make Hashable instances for all types (Enums, PgTag)- manual: True- default: False--common shared- build-depends:- base >= 4.20 && < 5- , bytestring >= 0.10 && < 0.13- default-language: GHC2021- default-extensions:- AllowAmbiguousTypes- BlockArguments- ExplicitNamespaces- DataKinds- -- ^^^ added in GHC2024- DerivingStrategies- FunctionalDependencies- LambdaCase- -- ^^^ added in GHC2024- MultiWayIf- OverloadedRecordDot- OverloadedStrings- PatternSynonyms- RecordWildCards- RequiredTypeArguments- -- TemplateHaskell- TypeAbstractions- TypeFamilies- ViewPatterns- ghc-options:- -Wall- -Wunused-packages--library- import: shared- exposed-modules:- -- PgSchema- PgSchema.DML- PgSchema.Generation- PgSchema.Import- PgSchema.Schema.Catalog- PgSchema.Schema.Info- PgSchema.GenDot- other-modules:- PgSchema.Ann- PgSchema.DML.Delete- PgSchema.DML.Insert- PgSchema.DML.InsertJSON- PgSchema.DML.Insert.Types- PgSchema.DML.KeyedWrite- PgSchema.DML.UpsertByKey- PgSchema.DML.Select- PgSchema.DML.Select.Types- PgSchema.DML.Update- PgSchema.Schema- PgSchema.Types- PgSchema.Utils.CamelToSnake- PgSchema.Utils.Instances- PgSchema.Utils.Internal- PgSchema.Utils.TF- PgSchema.Utils.ShowType- --- Paths_pg_schema- PackageInfo_pg_schema- autogen-modules:- Paths_pg_schema- PackageInfo_pg_schema- hs-source-dirs: src- build-depends:- aeson >= 2.0 && < 2.3- , containers >= 0.7 && < 0.9- , directory >= 1.3 && < 1.5- , exceptions >= 0.9 && < 0.11- , mtl >= 2.0 && < 2.4- , postgresql-simple >= 0.6 && < 0.8- , postgresql-libpq >= 0.11 && < 0.12- , scientific >= 0.2 && < 0.4- , singletons >= 3.0.3 && < 3.1- , singletons-th >= 3.4 && < 3.6- , text >= 2.0 && < 2.2- if flag(time)- build-depends:- time >= 1.12 && < 2- cpp-options: -DMK_TIME- if flag(uuid)- build-depends:- uuid-types >= 1.0 && < 1.1- cpp-options: -DMK_UUID- if flag(case-insensitive)- build-depends:- case-insensitive >= 1.0 && < 1.3- cpp-options: -DMK_CASE_INSENSITIVE- if flag(flat)- build-depends: flat >= 0.6 && < 0.7- cpp-options: -DMK_FLAT- if flag(arbitrary)- build-depends:- QuickCheck >= 2.14.0 && < 2.18- cpp-options: -DMK_ARBITRARY- if flag(hashable)- build-depends:- hashable >= 1.5.1 && < 1.6- cpp-options: -DMK_HASHABLE- if flag(debug)- cpp-options: -DDEBUG--test-suite json-spec- import: shared- type: exitcode-stdio-1.0- main-is: json-spec.hs- other-modules:- PgTagJsonSpec- Paths_pg_schema- PackageInfo_pg_schema- autogen-modules:- Paths_pg_schema- PackageInfo_pg_schema- hs-source-dirs: test- build-depends:- aeson- , pg-schema- , text--test-suite test-gen- import: shared- type: exitcode-stdio-1.0- hs-source-dirs: test-gen- main-is: Main.hs- other-modules:- -- Paths and PackageInfo- Paths_pg_schema- PackageInfo_pg_schema- autogen-modules:- Paths_pg_schema- PackageInfo_pg_schema- build-depends:- pg-schema- , postgresql-simple >= 0.6 && < 0.8--test-suite test-pgs- import: shared- type: exitcode-stdio-1.0- hs-source-dirs: test-pgs- main-is: Main.hs- other-modules:- Sch- Tests.Aggregates- Tests.BaseConverts- Tests.Conditions- Tests.Hierarchy- Tests.KeyedDML- Tests.InsertJSONTransaction- Tests.UpsertUniqueKey- Tests.Path- Utils- -- Paths and PackageInfo- Paths_pg_schema- PackageInfo_pg_schema- autogen-modules:- Paths_pg_schema- PackageInfo_pg_schema- build-depends:- aeson,- case-insensitive,- hedgehog >= 1.1,- pg-schema,- postgresql-simple >= 0.6 && < 0.8,- resource-pool,- scientific,- tasty >= 1.4,- tasty-hedgehog >= 1.2,- text,- time,- uuid-types,- vector,- -- they can be excluded by flags- deepseq- ---------------- if flag(hashable)- build-depends:- hashable >= 1.5.1 && < 1.6- cpp-options: -DMK_HASHABLE+cabal-version: 3.12 +name: pg-schema +version: 0.8.1.0 +x-revision: 1 +category: Database +author: Dmitry Olshansky +maintainer: olshanskydr@gmail.com +copyright: Dmitry Olshansky +license: BSD-3-Clause +license-file: LICENSE +build-type: Simple +tested-with: + GHC ==9.10.3 + , GHC ==9.12.4 + , GHC ==9.14.1 +synopsis: Type-level definition of database schema and safe DML for PostgreSQL. +description: + == Schema definition + + Use `updateSchemaFile` function from "PgSchema.Generation" module to generate type-level definition of database schema. + You can make several schemas with any parts of your database. + + Usually you make executable which imports this module and run it to generate schema definition. + You can run it on CI to check if schema definition is up to date. + + == Safe DML for PostgreSQL + + Use "PgSchema.DML" module to describe and generate (in runtime) safe DML for PostgreSQL. + All operations are statically checked and you can't write invalid SQL. + + With @pg-schema@ you can select or insert/upsert data into tree-like ADT in one request. + + === Example + Let's say + + - we have a database with tables: "orders", "order_positions", "articles". + - There are articles with ids 41 and 42. + - We have generated `MySch` schema with `updateSchemaFile` function from "PgSchema.Generation" module. + + Then we can write a function to insert an order with order positions. + And select orders with order positions and articles in one request using some conditions for orders and order positions that return in order. + + Note that all table names, field names and foreign key constraint names are checked in compile time! + + @ + data Order = Order { num :: Text, createdAt :: Day, items :: [OrdPos] } deriving Generic + data OrdPos = OrdPos { id :: Int32, num :: Int32, article :: Article, price :: Double } deriving Generic + data Article = Article { id :: Int32, name :: Text } deriving Generic + type MyAnn tabName = 'Ann CamelToSnake MySch 5 ("dbSchema" ->> tabName) + ... + do + -- insert an order with order positions + void $ insertJSON_ (MyAnn "orders") conn + [ "num" =: "num1" :. "ord__ord_pos" =: + [ "num" =: 1 :. "articleId" =: 42 :. "price" =: 10 + , "num" =: 2 :. "articleId" =: 41 :. "price" =: 15 ] ] + + -- select orders + (xs :: [Order]) <- selectSch (MyAnn "orders") conn $ qRoot do + qWhere $ "created_at" >? someDay + &&& pchild "ord__ord_pos" defTabParam + (pparent "ord_pos__article" $ "name" ~~? "%pencil%") + qOrderBy [descf "created_at", descf "num"] + qPath "ord__ord_pos" do + qWhere $ pparent "ord_pos__article" $ "name" ~~? "%pencil%" + qOrderBy [ascf "num"] + qLimit 20 + @ + + === Structure of modules + + * "PgSchema.Generation" - module with generation functions. + Usually you make executable which generates schema definition using this module. + * "PgSchema.DML" - module with DML functions. + Import this module into your application and use it to generate safe DML for PostgreSQL. + * "PgSchema.Import" - generated schema module imports this module. + +homepage: https://github.com/odr/pg-schema/tree/master/pg-schema#readme +bug-reports: https://github.com/odr/pg-schema/issues +extra-doc-files: + ChangeLog.md + README.md + +source-repository head + type: git + location: https://github.com/odr/pg-schema + +flag time + description: Make CanConvert1 instances for Time types + manual: True + default: True + +flag uuid + description: Make CanConvert1 instances for UUID type + manual: True + default: True + +flag case-insensitive + description: Make CanConvert1 instances for CaseInsensitive type + manual: True + default: True + +flag arbitrary + description: Make Arbitrary instances for all types (Enums, PgTag) + manual: True + default: False + +flag debug + description: Trace queries + manual: True + default: False + +flag flat + description: Make Flat instances for all types (Enums, PgTag) + manual: True + default: False + +flag hashable + description: Make Hashable instances for all types (Enums, PgTag) + manual: True + default: False + +common shared + build-depends: + base >= 4.20 && < 5 + , bytestring >= 0.10 && < 0.13 + default-language: GHC2021 + default-extensions: + AllowAmbiguousTypes + BlockArguments + ExplicitNamespaces + DataKinds + -- ^^^ added in GHC2024 + DerivingStrategies + FunctionalDependencies + LambdaCase + -- ^^^ added in GHC2024 + MultiWayIf + OverloadedRecordDot + OverloadedStrings + PatternSynonyms + RecordWildCards + RequiredTypeArguments + -- TemplateHaskell + TypeAbstractions + TypeFamilies + ViewPatterns + ghc-options: + -Wall + -Wunused-packages + +library + import: shared + exposed-modules: + -- PgSchema + PgSchema.DML + PgSchema.Generation + PgSchema.Import + PgSchema.Schema.Catalog + PgSchema.Schema.Info + PgSchema.GenDot + other-modules: + PgSchema.Ann + PgSchema.DML.Delete + PgSchema.DML.Insert + PgSchema.DML.InsertJSON + PgSchema.DML.Insert.Types + PgSchema.DML.KeyedWrite + PgSchema.DML.UpsertByKey + PgSchema.DML.Select + PgSchema.DML.Select.Types + PgSchema.DML.Update + PgSchema.Schema + PgSchema.Types + PgSchema.Utils.CamelToSnake + PgSchema.Utils.Instances + PgSchema.Utils.Internal + PgSchema.Utils.TF + PgSchema.Utils.ShowType + -- + Paths_pg_schema + PackageInfo_pg_schema + autogen-modules: + Paths_pg_schema + PackageInfo_pg_schema + hs-source-dirs: src + build-depends: + aeson >= 2.0 && < 2.4 + , containers >= 0.7 && < 0.9 + , directory >= 1.3 && < 1.5 + , exceptions >= 0.9 && < 0.11 + , mtl >= 2.0 && < 2.4 + , postgresql-simple >= 0.6 && < 0.8 + , postgresql-libpq >= 0.11 && < 0.12 + , scientific >= 0.2 && < 0.4 + , singletons >= 3.0.3 && < 3.1 + , singletons-th >= 3.4 && < 3.6 + , text >= 2.0 && < 2.2 + if flag(time) + build-depends: + time >= 1.12 && < 2 + cpp-options: -DMK_TIME + if flag(uuid) + build-depends: + uuid-types >= 1.0 && < 1.1 + cpp-options: -DMK_UUID + if flag(case-insensitive) + build-depends: + case-insensitive >= 1.0 && < 1.3 + cpp-options: -DMK_CASE_INSENSITIVE + if flag(flat) + build-depends: flat >= 0.6 && < 0.7 + cpp-options: -DMK_FLAT + if flag(arbitrary) + build-depends: + QuickCheck >= 2.14.0 && < 2.18 + cpp-options: -DMK_ARBITRARY + if flag(hashable) + build-depends: + hashable >= 1.5.1 && < 1.6 + cpp-options: -DMK_HASHABLE + if flag(debug) + cpp-options: -DDEBUG + +test-suite json-spec + import: shared + type: exitcode-stdio-1.0 + main-is: json-spec.hs + other-modules: + PgTagJsonSpec + Paths_pg_schema + PackageInfo_pg_schema + autogen-modules: + Paths_pg_schema + PackageInfo_pg_schema + hs-source-dirs: test + build-depends: + aeson + , pg-schema + , text + +test-suite test-gen + import: shared + type: exitcode-stdio-1.0 + hs-source-dirs: test-gen + main-is: Main.hs + other-modules: + -- Paths and PackageInfo + Paths_pg_schema + PackageInfo_pg_schema + autogen-modules: + Paths_pg_schema + PackageInfo_pg_schema + build-depends: + pg-schema + , postgresql-simple >= 0.6 && < 0.8 + +test-suite test-pgs + import: shared + type: exitcode-stdio-1.0 + hs-source-dirs: test-pgs + main-is: Main.hs + other-modules: + Sch + Tests.Aggregates + Tests.BaseConverts + Tests.Conditions + Tests.Hierarchy + Tests.KeyedDML + Tests.InsertJSONTransaction + Tests.UpsertUniqueKey + Tests.Path + Utils + -- Paths and PackageInfo + Paths_pg_schema + PackageInfo_pg_schema + autogen-modules: + Paths_pg_schema + PackageInfo_pg_schema + build-depends: + aeson, + case-insensitive, + hedgehog >= 1.1, + pg-schema, + postgresql-simple >= 0.6 && < 0.8, + resource-pool, + scientific, + tasty >= 1.4, + tasty-hedgehog >= 1.2, + text, + time, + uuid-types, + vector, + -- they can be excluded by flags + deepseq + --------------- + if flag(hashable) + build-depends: + hashable >= 1.5.1 && < 1.6 + cpp-options: -DMK_HASHABLE