git.iko.soy/typeable/postgresql-simple
on master help sign in
Merge pull request #4 from phadej/no-th
80a8698Oleg Grenrus
.gitignore+2
@@ -13,3 +13,5 @@ dist/
13cabal.sandbox.config
13cabal.sandbox.config
14/dist-newstyle
14/dist-newstyle
15.ghc.environment.*
15.ghc.environment.*
16+cabal.project.local
17+dump-core
.travis.yml+10−4
@@ -1,6 +1,6 @@
1# This Travis job script has been generated by a script via
1# This Travis job script has been generated by a script via
2#
2#
3−# runghc make_travis_yml_2.hs '--output' '.travis.yml' 'postgresql-simple.cabal'
3+# runghc make_travis_yml_2.hs '--branch' 'master' '--output' '.travis.yml' 'postgresql-simple.cabal'
4#
4#
5# For more information, see https://github.com/haskell-CI/haskell-ci
5# For more information, see https://github.com/haskell-CI/haskell-ci
6#
6#
@@ -13,6 +13,10 @@ services:
13git:
13git:
14 submodules: false # whether to recursively clone submodules
14 submodules: false # whether to recursively clone submodules
15
15
16+branches:
17+ only:
18+ - master
19+
16cache:
20cache:
17 directories:
21 directories:
18 - $HOME/.cabal/packages
22 - $HOME/.cabal/packages
@@ -31,9 +35,9 @@ before_cache:
31
35
32matrix:
36matrix:
33 include:
37 include:
34− - compiler: "ghc-8.6.1"
38+ - compiler: "ghc-8.6.3"
35 # env: TEST=--disable-tests BENCH=--disable-benchmarks
39 # env: TEST=--disable-tests BENCH=--disable-benchmarks
36− addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.6.1], sources: [hvr-ghc]}}
40+ addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.6.3], sources: [hvr-ghc]}}
37 - compiler: "ghc-8.4.4"
41 - compiler: "ghc-8.4.4"
38 # env: TEST=--disable-tests BENCH=--disable-benchmarks
42 # env: TEST=--disable-tests BENCH=--disable-benchmarks
39 addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.4.4], sources: [hvr-ghc]}}
43 addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.4.4], sources: [hvr-ghc]}}
@@ -77,6 +81,7 @@ install:
77 - rm -fv cabal.project cabal.project.local
81 - rm -fv cabal.project cabal.project.local
78 - grep -Ev -- '^\s*--' ${HOME}/.cabal/config | grep -Ev '^\s*$'
82 - grep -Ev -- '^\s*--' ${HOME}/.cabal/config | grep -Ev '^\s*$'
79 - "printf 'packages: \".\"\\n' > cabal.project"
83 - "printf 'packages: \".\"\\n' > cabal.project"
84+ - "printf 'write-ghc-environment-files: always\\n' >> cabal.project"
80 - touch cabal.project.local
85 - touch cabal.project.local
81 - "if ! $NOINSTALLEDCONSTRAINTS; then for pkg in $($HCPKG list --simple-output); do echo $pkg | grep -vw -- postgresql-simple | sed 's/^/constraints: /' | sed 's/-[^-]*$/ installed/' >> cabal.project.local; done; fi"
86 - "if ! $NOINSTALLEDCONSTRAINTS; then for pkg in $($HCPKG list --simple-output); do echo $pkg | grep -vw -- postgresql-simple | sed 's/^/constraints: /' | sed 's/-[^-]*$/ installed/' >> cabal.project.local; done; fi"
82 - cat cabal.project || true
87 - cat cabal.project || true
@@ -99,6 +104,7 @@ script:
99 - cd ${DISTDIR} || false
104 - cd ${DISTDIR} || false
100 - find . -maxdepth 1 -name '*.tar.gz' -exec tar -xvf '{}' \;
105 - find . -maxdepth 1 -name '*.tar.gz' -exec tar -xvf '{}' \;
101 - "printf 'packages: postgresql-simple-*/*.cabal\\n' > cabal.project"
106 - "printf 'packages: postgresql-simple-*/*.cabal\\n' > cabal.project"
107+ - "printf 'write-ghc-environment-files: always\\n' >> cabal.project"
102 - touch cabal.project.local
108 - touch cabal.project.local
103 - "if ! $NOINSTALLEDCONSTRAINTS; then for pkg in $($HCPKG list --simple-output); do echo $pkg | grep -vw -- postgresql-simple | sed 's/^/constraints: /' | sed 's/-[^-]*$/ installed/' >> cabal.project.local; done; fi"
109 - "if ! $NOINSTALLEDCONSTRAINTS; then for pkg in $($HCPKG list --simple-output); do echo $pkg | grep -vw -- postgresql-simple | sed 's/^/constraints: /' | sed 's/-[^-]*$/ installed/' >> cabal.project.local; done; fi"
104 - cat cabal.project || true
110 - cat cabal.project || true
@@ -119,5 +125,5 @@ script:
119 # Build without installed constraints for packages in global-db
125 # Build without installed constraints for packages in global-db
120 - if $UNCONSTRAINED; then rm -f cabal.project.local; echo cabal new-build -w ${HC} --disable-tests --disable-benchmarks all; else echo "Not building without installed constraints"; fi
126 - if $UNCONSTRAINED; then rm -f cabal.project.local; echo cabal new-build -w ${HC} --disable-tests --disable-benchmarks all; else echo "Not building without installed constraints"; fi
121
127
122−# REGENDATA ["--output",".travis.yml","postgresql-simple.cabal"]
128+# REGENDATA ["--branch","master","--output",".travis.yml","postgresql-simple.cabal"]
123# EOF
129# EOF
cabal.project+1
@@ -1 +1,2 @@
1packages: .
1packages: .
2+tests: true
postgresql-simple.cabal+18−2
@@ -28,7 +28,7 @@ tested-with:
28 || == 8.0.2
28 || == 8.0.2
29 || == 8.2.2
29 || == 8.2.2
30 || == 8.4.4
30 || == 8.4.4
31− || == 8.6.1
31+ || == 8.6.3
32
32
33Library
33Library
34 default-language: Haskell2010
34 default-language: Haskell2010
@@ -121,6 +121,22 @@ source-repository this
121 location: http://github.com/phadej/postgresql-simple
121 location: http://github.com/phadej/postgresql-simple
122 tag: v0.6
122 tag: v0.6
123
123
124+test-suite inspection
125+ if !impl(ghc >= 8.0)
126+ buildable: False
127+
128+ default-language: Haskell2010
129+ type: exitcode-stdio-1.0
130+ hs-source-dirs: test
131+ main-is: Inspection.hs
132+ build-depends:
133+ base
134+ , inspection-testing >=0.4.1.1 && <0.5
135+ , postgresql-simple
136+ , postgresql-libpq
137+ , tasty
138+ , tasty-hunit
139+
124test-suite test
140test-suite test
125 default-language: Haskell2010
141 default-language: Haskell2010
126 type: exitcode-stdio-1.0
142 type: exitcode-stdio-1.0
@@ -148,7 +164,7 @@ test-suite test
148 , base16-bytestring
164 , base16-bytestring
149 , bytestring
165 , bytestring
150 , containers
166 , containers
151− , cryptohash
167+ , cryptohash-md5 >= 0.11.100.1 && <0.12
152 , filepath
168 , filepath
153 , tasty
169 , tasty
154 , tasty-hunit
170 , tasty-hunit
src/Database/PostgreSQL/Simple/FromField.hs+42−30
@@ -1,7 +1,7 @@
1{-# LANGUAGE CPP, DeriveDataTypeable, DeriveFunctor #-}
1{-# LANGUAGE CPP, DeriveDataTypeable, DeriveFunctor #-}
2{-# LANGUAGE FlexibleInstances, TypeSynonymInstances #-}
2{-# LANGUAGE FlexibleInstances, TypeSynonymInstances #-}
3{-# LANGUAGE PatternGuards, ScopedTypeVariables #-}
3{-# LANGUAGE PatternGuards, ScopedTypeVariables #-}
4−{-# LANGUAGE RecordWildCards, TemplateHaskell #-}
4+{-# LANGUAGE RecordWildCards #-}
5
5
6{- |
6{- |
7Module: Database.PostgreSQL.Simple.FromField
7Module: Database.PostgreSQL.Simple.FromField
@@ -136,7 +136,6 @@ import Database.PostgreSQL.Simple.Ok
136import Database.PostgreSQL.Simple.Types
136import Database.PostgreSQL.Simple.Types
137import Database.PostgreSQL.Simple.TypeInfo as TI
137import Database.PostgreSQL.Simple.TypeInfo as TI
138import qualified Database.PostgreSQL.Simple.TypeInfo.Static as TI
138import qualified Database.PostgreSQL.Simple.TypeInfo.Static as TI
139−import Database.PostgreSQL.Simple.TypeInfo.Macro as TI
140import Database.PostgreSQL.Simple.Time
139import Database.PostgreSQL.Simple.Time
141import Database.PostgreSQL.Simple.Arrays as Arrays
140import Database.PostgreSQL.Simple.Arrays as Arrays
142import qualified Database.PostgreSQL.LibPQ as PQ
141import qualified Database.PostgreSQL.LibPQ as PQ
@@ -263,7 +262,7 @@ format Field{..} = unsafeDupablePerformIO (PQ.fformat result column)
263-- | void
262-- | void
264instance FromField () where
263instance FromField () where
265 fromField f _bs
264 fromField f _bs
266− | typeOid f /= $(inlineTypoid TI.void) = returnError Incompatible f ""
265+ | typeOid f /= TI.voidOid = returnError Incompatible f ""
267 | otherwise = pure ()
266 | otherwise = pure ()
268
267
269-- | For dealing with null values. Compatible with any postgresql type
268-- | For dealing with null values. Compatible with any postgresql type
@@ -293,7 +292,7 @@ instance FromField Null where
293-- | bool
292-- | bool
294instance FromField Bool where
293instance FromField Bool where
295 fromField f bs
294 fromField f bs
296− | typeOid f /= $(inlineTypoid TI.bool) = returnError Incompatible f ""
295+ | typeOid f /= TI.boolOid = returnError Incompatible f ""
297 | bs == Nothing = returnError UnexpectedNull f ""
296 | bs == Nothing = returnError UnexpectedNull f ""
298 | bs == Just "t" = pure True
297 | bs == Just "t" = pure True
299 | bs == Just "f" = pure False
298 | bs == Just "f" = pure False
@@ -302,7 +301,7 @@ instance FromField Bool where
302-- | \"char\", bpchar
301-- | \"char\", bpchar
303instance FromField Char where
302instance FromField Char where
304 fromField f bs =
303 fromField f bs =
305− if $(mkCompats [TI.char,TI.bpchar]) (typeOid f)
304+ if (eq TI.charOid \/ eq TI.bpcharOid) (typeOid f)
306 then case bs of
305 then case bs of
307 Nothing -> returnError UnexpectedNull f ""
306 Nothing -> returnError UnexpectedNull f ""
308 Just bs -> if B.length bs /= 1
307 Just bs -> if B.length bs /= 1
@@ -340,23 +339,23 @@ instance FromField Integer where
340-- better accuracy convert to 'Scientific' or 'Rational' first)
339-- better accuracy convert to 'Scientific' or 'Rational' first)
341instance FromField Float where
340instance FromField Float where
342 fromField = atto ok (realToFrac <$> pg_double)
341 fromField = atto ok (realToFrac <$> pg_double)
343− where ok = $(mkCompats [TI.float4,TI.int2])
342+ where ok = eq TI.float4Oid \/ eq TI.int2Oid
344
343
345-- | int2, int4, float4, float8 (Uses attoparsec's 'double' routine, for
344-- | int2, int4, float4, float8 (Uses attoparsec's 'double' routine, for
346-- better accuracy convert to 'Scientific' or 'Rational' first)
345-- better accuracy convert to 'Scientific' or 'Rational' first)
347instance FromField Double where
346instance FromField Double where
348 fromField = atto ok pg_double
347 fromField = atto ok pg_double
349− where ok = $(mkCompats [TI.float4,TI.float8,TI.int2,TI.int4])
348+ where ok = eq TI.float4Oid \/ eq TI.float8Oid \/ eq TI.int2Oid \/ eq TI.int4Oid
350
349
351-- | int2, int4, int8, float4, float8, numeric
350-- | int2, int4, int8, float4, float8, numeric
352instance FromField (Ratio Integer) where
351instance FromField (Ratio Integer) where
353 fromField = atto ok pg_rational
352 fromField = atto ok pg_rational
354− where ok = $(mkCompats [TI.float4,TI.float8,TI.int2,TI.int4,TI.int8,TI.numeric])
353+ where ok = eq TI.float4Oid \/ eq TI.float8Oid \/ eq TI.int2Oid \/ eq TI.int4Oid \/ eq TI.int8Oid \/ eq TI.numericOid
355
354
356-- | int2, int4, int8, float4, float8, numeric
355-- | int2, int4, int8, float4, float8, numeric
357instance FromField Scientific where
356instance FromField Scientific where
358 fromField = atto ok rational
357 fromField = atto ok rational
359− where ok = $(mkCompats [TI.float4,TI.float8,TI.int2,TI.int4,TI.int8,TI.numeric])
358+ where ok = eq TI.float4Oid \/ eq TI.float8Oid \/ eq TI.int2Oid \/ eq TI.int4Oid \/ eq TI.int8Oid \/ eq TI.numericOid
360
359
361unBinary :: Binary t -> t
360unBinary :: Binary t -> t
362unBinary (Binary x) = x
361unBinary (Binary x) = x
@@ -377,13 +376,13 @@ pg_rational
377
376
378-- | bytea, name, text, \"char\", bpchar, varchar, unknown
377-- | bytea, name, text, \"char\", bpchar, varchar, unknown
379instance FromField SB.ByteString where
378instance FromField SB.ByteString where
380− fromField f dat = if typeOid f == $(inlineTypoid TI.bytea)
379+ fromField f dat = if typeOid f == TI.byteaOid
381 then unBinary <$> fromField f dat
380 then unBinary <$> fromField f dat
382 else doFromField f okText' pure dat
381 else doFromField f okText' pure dat
383
382
384-- | oid
383-- | oid
385instance FromField PQ.Oid where
384instance FromField PQ.Oid where
386− fromField f dat = PQ.Oid <$> atto (== $(inlineTypoid TI.oid)) decimal f dat
385+ fromField f dat = PQ.Oid <$> atto (== TI.oidOid) decimal f dat
387
386
388-- | bytea, name, text, \"char\", bpchar, varchar, unknown
387-- | bytea, name, text, \"char\", bpchar, varchar, unknown
389instance FromField LB.ByteString where
388instance FromField LB.ByteString where
@@ -442,39 +441,39 @@ instance FromField [Char] where
442
441
443-- | timestamptz
442-- | timestamptz
444instance FromField UTCTime where
443instance FromField UTCTime where
445− fromField = ff $(inlineTypoid TI.timestamptz) "UTCTime" parseUTCTime
444+ fromField = ff TI.timestamptzOid "UTCTime" parseUTCTime
446
445
447-- | timestamptz
446-- | timestamptz
448instance FromField ZonedTime where
447instance FromField ZonedTime where
449− fromField = ff $(inlineTypoid TI.timestamptz) "ZonedTime" parseZonedTime
448+ fromField = ff TI.timestamptzOid "ZonedTime" parseZonedTime
450
449
451-- | timestamp
450-- | timestamp
452instance FromField LocalTime where
451instance FromField LocalTime where
453− fromField = ff $(inlineTypoid TI.timestamp) "LocalTime" parseLocalTime
452+ fromField = ff TI.timestampOid "LocalTime" parseLocalTime
454
453
455-- | date
454-- | date
456instance FromField Day where
455instance FromField Day where
457− fromField = ff $(inlineTypoid TI.date) "Day" parseDay
456+ fromField = ff TI.dateOid "Day" parseDay
458
457
459-- | time
458-- | time
460instance FromField TimeOfDay where
459instance FromField TimeOfDay where
461− fromField = ff $(inlineTypoid TI.time) "TimeOfDay" parseTimeOfDay
460+ fromField = ff TI.timeOid "TimeOfDay" parseTimeOfDay
462
461
463-- | timestamptz
462-- | timestamptz
464instance FromField UTCTimestamp where
463instance FromField UTCTimestamp where
465− fromField = ff $(inlineTypoid TI.timestamptz) "UTCTimestamp" parseUTCTimestamp
464+ fromField = ff TI.timestamptzOid "UTCTimestamp" parseUTCTimestamp
466
465
467-- | timestamptz
466-- | timestamptz
468instance FromField ZonedTimestamp where
467instance FromField ZonedTimestamp where
469− fromField = ff $(inlineTypoid TI.timestamptz) "ZonedTimestamp" parseZonedTimestamp
468+ fromField = ff TI.timestamptzOid "ZonedTimestamp" parseZonedTimestamp
470
469
471-- | timestamp
470-- | timestamp
472instance FromField LocalTimestamp where
471instance FromField LocalTimestamp where
473− fromField = ff $(inlineTypoid TI.timestamp) "LocalTimestamp" parseLocalTimestamp
472+ fromField = ff TI.timestampOid "LocalTimestamp" parseLocalTimestamp
474
473
475-- | date
474-- | date
476instance FromField Date where
475instance FromField Date where
477− fromField = ff $(inlineTypoid TI.date) "Date" parseDate
476+ fromField = ff TI.dateOid "Date" parseDate
478
477
479ff :: PQ.Oid -> String -> (B8.ByteString -> Either String a)
478ff :: PQ.Oid -> String -> (B8.ByteString -> Either String a)
480 -> Field -> Maybe B8.ByteString -> Conversion a
479 -> Field -> Maybe B8.ByteString -> Conversion a
@@ -542,7 +541,7 @@ instance (FromField a, Typeable a) => FromField (IOVector a) where
542-- | uuid
541-- | uuid
543instance FromField UUID where
542instance FromField UUID where
544 fromField f mbs =
543 fromField f mbs =
545− if typeOid f /= $(inlineTypoid TI.uuid)
544+ if typeOid f /= TI.uuidOid
546 then returnError Incompatible f ""
545 then returnError Incompatible f ""
547 else case mbs of
546 else case mbs of
548 Nothing -> returnError UnexpectedNull f ""
547 Nothing -> returnError UnexpectedNull f ""
@@ -561,7 +560,7 @@ instance FromField JSON.Value where
561-- | Return the JSON ByteString directly
560-- | Return the JSON ByteString directly
562fromFieldJSONByteString :: Field -> Maybe ByteString -> Conversion ByteString
561fromFieldJSONByteString :: Field -> Maybe ByteString -> Conversion ByteString
563fromFieldJSONByteString f mbs =
562fromFieldJSONByteString f mbs =
564− if typeOid f /= $(inlineTypoid TI.json) && typeOid f /= $(inlineTypoid TI.jsonb)
563+ if typeOid f /= TI.jsonOid && typeOid f /= TI.jsonbOid
565 then returnError Incompatible f ""
564 then returnError Incompatible f ""
566 else case mbs of
565 else case mbs of
567 Nothing -> returnError UnexpectedNull f ""
566 Nothing -> returnError UnexpectedNull f ""
@@ -609,20 +608,33 @@ instance FromField a => FromField (MVar a) where
609type Compat = PQ.Oid -> Bool
608type Compat = PQ.Oid -> Bool
610
609
611okText, okText', okBinary, ok16, ok32, ok64, okInt :: Compat
610okText, okText', okBinary, ok16, ok32, ok64, okInt :: Compat
612−okText = $( mkCompats [ TI.name, TI.text, TI.char,
611+okText = eq TI.nameOid \/ eq TI.textOid \/ eq TI.charOid
613− TI.bpchar, TI.varchar ] )
612+ \/ eq TI.bpcharOid \/ eq TI.varcharOid
614−okText' = $( mkCompats [ TI.name, TI.text, TI.char,
613+okText' = eq TI.nameOid \/ eq TI.textOid \/ eq TI.charOid
615− TI.bpchar, TI.varchar, TI.unknown ] )
614+ \/ eq TI.bpcharOid \/ eq TI.varcharOid \/ eq TI.unknownOid
616−okBinary = (== $( inlineTypoid TI.bytea ))
615+okBinary = eq TI.byteaOid
617−ok16 = (== $( inlineTypoid TI.int2 ))
616+ok16 = eq TI.int2Oid
618−ok32 = $( mkCompats [TI.int2,TI.int4] )
617+ok32 = eq TI.int2Oid \/ eq TI.int4Oid
619−ok64 = $( mkCompats [TI.int2,TI.int4,TI.int8] )
618+ok64 = eq TI.int2Oid \/ eq TI.int4Oid \/ eq TI.int8Oid
620#if WORD_SIZE_IN_BITS < 64
619#if WORD_SIZE_IN_BITS < 64
621okInt = ok32
620okInt = ok32
622#else
621#else
623okInt = ok64
622okInt = ok64
624#endif
623#endif
625
624
625+-- | eq and \/ are used to imlement what Macro stuff did,
626+-- i.e. mkCompats and inlineTypoid
627+eq :: PQ.Oid -> PQ.Oid -> Bool
628+eq = (==)
629+{-# INLINE eq #-}
630+
631+infixr 2 \/
632+(\/) :: (PQ.Oid -> Bool)
633+ -> (PQ.Oid -> Bool)
634+ -> (PQ.Oid -> Bool)
635+f \/ g = \x -> f x || g x
636+{-# INLINE (\/) #-}
637+
626doFromField :: forall a . (Typeable a)
638doFromField :: forall a . (Typeable a)
627 => Field -> Compat -> (ByteString -> Conversion a)
639 => Field -> Compat -> (ByteString -> Conversion a)
628 -> Maybe ByteString -> Conversion a
640 -> Maybe ByteString -> Conversion a
src/Database/PostgreSQL/Simple/SqlQQ.hs+9−8
@@ -1,4 +1,9 @@
1+{-# LANGUAGE CPP #-}
2+#if __GLASGOW_HASKELL__ >= 800
3+{-# LANGUAGE TemplateHaskellQuotes #-}
4+#else
1{-# LANGUAGE TemplateHaskell #-}
5{-# LANGUAGE TemplateHaskell #-}
6+#endif
2------------------------------------------------------------------------------
7------------------------------------------------------------------------------
3-- |
8-- |
4-- Module: Database.PostgreSQL.Simple.SqlQQ
9-- Module: Database.PostgreSQL.Simple.SqlQQ
@@ -52,13 +57,10 @@ import Data.String
52
57
53sql :: QuasiQuoter
58sql :: QuasiQuoter
54sql = QuasiQuoter
59sql = QuasiQuoter
55− { quotePat = error "Database.PostgreSQL.Simple.SqlQQ.sql:\
60+ { quotePat = error "Database.PostgreSQL.Simple.SqlQQ.sql: quasiquoter used in pattern context"
56− \ quasiquoter used in pattern context"
57− , quoteType = error "Database.PostgreSQL.Simple.SqlQQ.sql:\
61+ , quoteType = error "Database.PostgreSQL.Simple.SqlQQ.sql: quasiquoter used in type context"
58− \ quasiquoter used in type context"
59 , quoteExp = sqlExp
62 , quoteExp = sqlExp
60− , quoteDec = error "Database.PostgreSQL.Simple.SqlQQ.sql:\
63+ , quoteDec = error "Database.PostgreSQL.Simple.SqlQQ.sql: quasiquoter used in declaration context"
61− \ quasiquoter used in declaration context"
62 }
64 }
63
65
64sqlExp :: String -> Q Exp
66sqlExp :: String -> Q Exp
@@ -85,5 +87,4 @@ minimizeSpace = drop 1 . reduceSpace
85 instring ('\'':'\'':xs) = '\'':'\'': instring xs
87 instring ('\'':'\'':xs) = '\'':'\'': instring xs
86 instring ('\'':xs) = '\'': insql xs
88 instring ('\'':xs) = '\'': insql xs
87 instring (x:xs) = x : instring xs
89 instring (x:xs) = x : instring xs
88− instring [] = error "Database.PostgreSQL.Simple.SqlQQ.sql:\
90+ instring [] = error "Database.PostgreSQL.Simple.SqlQQ.sql: string literal not terminated"
89− \ string literal not terminated"
src/Database/PostgreSQL/Simple/TypeInfo/Macro.hs+9−3
@@ -1,4 +1,9 @@
1+{-# LANGUAGE CPP #-}
2+#if __GLASGOW_HASKELL__ >= 800
3+{-# LANGUAGE TemplateHaskellQuotes #-}
4+#else
1{-# LANGUAGE TemplateHaskell #-}
5{-# LANGUAGE TemplateHaskell #-}
6+#endif
2
7
3------------------------------------------------------------------------------
8------------------------------------------------------------------------------
4-- |
9-- |
@@ -22,11 +27,12 @@ import Database.PostgreSQL.Simple.TypeInfo.Static
22import Database.PostgreSQL.Simple.Types (Oid(..))
27import Database.PostgreSQL.Simple.Types (Oid(..))
23import Language.Haskell.TH
28import Language.Haskell.TH
24
29
25−
26-- | Returns an expression that has type @'Oid' -> 'Bool'@, true if the
30-- | Returns an expression that has type @'Oid' -> 'Bool'@, true if the
27-- oid is equal to any one of the 'typoid's of the given 'TypeInfo's.
31-- oid is equal to any one of the 'typoid's of the given 'TypeInfo's.
28mkCompats :: [TypeInfo] -> ExpQ
32mkCompats :: [TypeInfo] -> ExpQ
33+mkCompats tys = do
34+ x <- newName "x"
29−mkCompats tys = [| \(Oid x) -> $(caseE [| x |] (map alt tys ++ [catchAll])) |]
35+ lamE [conP 'Oid [varP x]] $ caseE (varE x) (map alt tys ++ [catchAll])
30 where
36 where
31 alt :: TypeInfo -> MatchQ
37 alt :: TypeInfo -> MatchQ
32 alt ty = match (inlineTypoidP ty) (normalB [| True |]) []
38 alt ty = match (inlineTypoidP ty) (normalB [| True |]) []
@@ -38,7 +44,7 @@ mkCompats tys = [| \(Oid x) -> $(caseE [| x |] (map alt tys ++ [catchAll])) |]
38-- Returns an expression of type 'Oid'. Useful because GHC tends
44-- Returns an expression of type 'Oid'. Useful because GHC tends
39-- not to fold constants.
45-- not to fold constants.
40inlineTypoid :: TypeInfo -> ExpQ
46inlineTypoid :: TypeInfo -> ExpQ
41−inlineTypoid ty = [| Oid $(litE (getTypoid ty)) |]
47+inlineTypoid ty = conE 'Oid `appE` litE (getTypoid ty)
42
48
43inlineTypoidP :: TypeInfo -> PatQ
49inlineTypoidP :: TypeInfo -> PatQ
44inlineTypoidP ty = litP (getTypoid ty)
50inlineTypoidP ty = litP (getTypoid ty)
src/Database/PostgreSQL/Simple/TypeInfo/Static.hs+684−114
@@ -19,119 +19,233 @@ module Database.PostgreSQL.Simple.TypeInfo.Static
19 ( TypeInfo(..)
19 ( TypeInfo(..)
20 , staticTypeInfo
20 , staticTypeInfo
21 , bool
21 , bool
22+ , boolOid
22 , bytea
23 , bytea
24+ , byteaOid
23 , char
25 , char
26+ , charOid
24 , name
27 , name
28+ , nameOid
25 , int8
29 , int8
30+ , int8Oid
26 , int2
31 , int2
32+ , int2Oid
27 , int4
33 , int4
34+ , int4Oid
28 , regproc
35 , regproc
36+ , regprocOid
29 , text
37 , text
38+ , textOid
30 , oid
39 , oid
40+ , oidOid
31 , tid
41 , tid
42+ , tidOid
32 , xid
43 , xid
44+ , xidOid
33 , cid
45 , cid
46+ , cidOid
34 , xml
47 , xml
48+ , xmlOid
35 , point
49 , point
50+ , pointOid
36 , lseg
51 , lseg
52+ , lsegOid
37 , path
53 , path
54+ , pathOid
38 , box
55 , box
56+ , boxOid
39 , polygon
57 , polygon
58+ , polygonOid
40 , line
59 , line
60+ , lineOid
41 , cidr
61 , cidr
62+ , cidrOid
42 , float4
63 , float4
64+ , float4Oid
43 , float8
65 , float8
66+ , float8Oid
44 , unknown
67 , unknown
68+ , unknownOid
45 , circle
69 , circle
70+ , circleOid
46 , money
71 , money
72+ , moneyOid
47 , macaddr
73 , macaddr
74+ , macaddrOid
48 , inet
75 , inet
76+ , inetOid
49 , bpchar
77 , bpchar
78+ , bpcharOid
50 , varchar
79 , varchar
80+ , varcharOid
51 , date
81 , date
82+ , dateOid
52 , time
83 , time
84+ , timeOid
53 , timestamp
85 , timestamp
86+ , timestampOid
54 , timestamptz
87 , timestamptz
88+ , timestamptzOid
55 , interval
89 , interval
90+ , intervalOid
56 , timetz
91 , timetz
92+ , timetzOid
57 , bit
93 , bit
94+ , bitOid
58 , varbit
95 , varbit
96+ , varbitOid
59 , numeric
97 , numeric
98+ , numericOid
60 , refcursor
99 , refcursor
100+ , refcursorOid
61 , record
101 , record
102+ , recordOid
62 , void
103 , void
104+ , voidOid
63 , array_record
105 , array_record
106+ , array_recordOid
64 , regprocedure
107 , regprocedure
108+ , regprocedureOid
65 , regoper
109 , regoper
110+ , regoperOid
66 , regoperator
111 , regoperator
112+ , regoperatorOid
67 , regclass
113 , regclass
114+ , regclassOid
68 , regtype
115 , regtype
116+ , regtypeOid
69 , uuid
117 , uuid
118+ , uuidOid
70 , json
119 , json
120+ , jsonOid
71 , jsonb
121 , jsonb
122+ , jsonbOid
72 , int2vector
123 , int2vector
124+ , int2vectorOid
73 , oidvector
125 , oidvector
126+ , oidvectorOid
74 , array_xml
127 , array_xml
128+ , array_xmlOid
75 , array_json
129 , array_json
130+ , array_jsonOid
76 , array_line
131 , array_line
132+ , array_lineOid
77 , array_cidr
133 , array_cidr
134+ , array_cidrOid
78 , array_circle
135 , array_circle
136+ , array_circleOid
79 , array_money
137 , array_money
138+ , array_moneyOid
80 , array_bool
139 , array_bool
140+ , array_boolOid
81 , array_bytea
141 , array_bytea
142+ , array_byteaOid
82 , array_char
143 , array_char
144+ , array_charOid
83 , array_name
145 , array_name
146+ , array_nameOid
84 , array_int2
147 , array_int2
148+ , array_int2Oid
85 , array_int2vector
149 , array_int2vector
150+ , array_int2vectorOid
86 , array_int4
151 , array_int4
152+ , array_int4Oid
87 , array_regproc
153 , array_regproc
154+ , array_regprocOid
88 , array_text
155 , array_text
156+ , array_textOid
89 , array_tid
157 , array_tid
158+ , array_tidOid
90 , array_xid
159 , array_xid
160+ , array_xidOid
91 , array_cid
161 , array_cid
162+ , array_cidOid
92 , array_oidvector
163 , array_oidvector
164+ , array_oidvectorOid
93 , array_bpchar
165 , array_bpchar
166+ , array_bpcharOid
94 , array_varchar
167 , array_varchar
168+ , array_varcharOid
95 , array_int8
169 , array_int8
170+ , array_int8Oid
96 , array_point
171 , array_point
172+ , array_pointOid
97 , array_lseg
173 , array_lseg
174+ , array_lsegOid
98 , array_path
175 , array_path
176+ , array_pathOid
99 , array_box
177 , array_box
178+ , array_boxOid
100 , array_float4
179 , array_float4
180+ , array_float4Oid
101 , array_float8
181 , array_float8
182+ , array_float8Oid
102 , array_polygon
183 , array_polygon
184+ , array_polygonOid
103 , array_oid
185 , array_oid
186+ , array_oidOid
104 , array_macaddr
187 , array_macaddr
188+ , array_macaddrOid
105 , array_inet
189 , array_inet
190+ , array_inetOid
106 , array_timestamp
191 , array_timestamp
192+ , array_timestampOid
107 , array_date
193 , array_date
194+ , array_dateOid
108 , array_time
195 , array_time
196+ , array_timeOid
109 , array_timestamptz
197 , array_timestamptz
198+ , array_timestamptzOid
110 , array_interval
199 , array_interval
200+ , array_intervalOid
111 , array_numeric
201 , array_numeric
202+ , array_numericOid
112 , array_timetz
203 , array_timetz
204+ , array_timetzOid
113 , array_bit
205 , array_bit
206+ , array_bitOid
114 , array_varbit
207 , array_varbit
208+ , array_varbitOid
115 , array_refcursor
209 , array_refcursor
210+ , array_refcursorOid
116 , array_regprocedure
211 , array_regprocedure
212+ , array_regprocedureOid
117 , array_regoper
213 , array_regoper
214+ , array_regoperOid
118 , array_regoperator
215 , array_regoperator
216+ , array_regoperatorOid
119 , array_regclass
217 , array_regclass
218+ , array_regclassOid
120 , array_regtype
219 , array_regtype
220+ , array_regtypeOid
121 , array_uuid
221 , array_uuid
222+ , array_uuidOid
122 , array_jsonb
223 , array_jsonb
224+ , array_jsonbOid
123 , int4range
225 , int4range
226+ , int4rangeOid
124 , _int4range
227 , _int4range
228+ , _int4rangeOid
125 , numrange
229 , numrange
230+ , numrangeOid
126 , _numrange
231 , _numrange
232+ , _numrangeOid
127 , tsrange
233 , tsrange
234+ , tsrangeOid
128 , _tsrange
235 , _tsrange
236+ , _tsrangeOid
129 , tstzrange
237 , tstzrange
238+ , tstzrangeOid
130 , _tstzrange
239 , _tstzrange
240+ , _tstzrangeOid
131 , daterange
241 , daterange
242+ , daterangeOid
132 , _daterange
243 , _daterange
244+ , _daterangeOid
133 , int8range
245 , int8range
246+ , int8rangeOid
134 , _int8range
247 , _int8range
248+ , _int8rangeOid
135 ) where
249 ) where
136
250
137import Database.PostgreSQL.LibPQ (Oid(..))
251import Database.PostgreSQL.LibPQ (Oid(..))
@@ -257,976 +371,1432 @@ staticTypeInfo (Oid x) = case x of
257
371
258bool :: TypeInfo
372bool :: TypeInfo
259bool = Basic {
373bool = Basic {
260− typoid = Oid 16,
374+ typoid = boolOid,
261 typcategory = 'B',
375 typcategory = 'B',
262 typdelim = ',',
376 typdelim = ',',
263 typname = "bool"
377 typname = "bool"
264 }
378 }
265
379
380+boolOid :: Oid
381+boolOid = Oid 16
382+{-# INLINE boolOid #-}
383+
266bytea :: TypeInfo
384bytea :: TypeInfo
267bytea = Basic {
385bytea = Basic {
268− typoid = Oid 17,
386+ typoid = byteaOid,
269 typcategory = 'U',
387 typcategory = 'U',
270 typdelim = ',',
388 typdelim = ',',
271 typname = "bytea"
389 typname = "bytea"
272 }
390 }
273
391
392+byteaOid :: Oid
393+byteaOid = Oid 17
394+{-# INLINE byteaOid #-}
395+
274char :: TypeInfo
396char :: TypeInfo
275char = Basic {
397char = Basic {
276− typoid = Oid 18,
398+ typoid = charOid,
277 typcategory = 'S',
399 typcategory = 'S',
278 typdelim = ',',
400 typdelim = ',',
279 typname = "char"
401 typname = "char"
280 }
402 }
281
403
404+charOid :: Oid
405+charOid = Oid 18
406+{-# INLINE charOid #-}
407+
282name :: TypeInfo
408name :: TypeInfo
283name = Basic {
409name = Basic {
284− typoid = Oid 19,
410+ typoid = nameOid,
285 typcategory = 'S',
411 typcategory = 'S',
286 typdelim = ',',
412 typdelim = ',',
287 typname = "name"
413 typname = "name"
288 }
414 }
289
415
416+nameOid :: Oid
417+nameOid = Oid 19
418+{-# INLINE nameOid #-}
419+
290int8 :: TypeInfo
420int8 :: TypeInfo
291int8 = Basic {
421int8 = Basic {
292− typoid = Oid 20,
422+ typoid = int8Oid,
293 typcategory = 'N',
423 typcategory = 'N',
294 typdelim = ',',
424 typdelim = ',',
295 typname = "int8"
425 typname = "int8"
296 }
426 }
297
427
428+int8Oid :: Oid
429+int8Oid = Oid 20
430+{-# INLINE int8Oid #-}
431+
298int2 :: TypeInfo
432int2 :: TypeInfo
299int2 = Basic {
433int2 = Basic {
300− typoid = Oid 21,
434+ typoid = int2Oid,
301 typcategory = 'N',
435 typcategory = 'N',
302 typdelim = ',',
436 typdelim = ',',
303 typname = "int2"
437 typname = "int2"
304 }
438 }
305
439
440+int2Oid :: Oid
441+int2Oid = Oid 21
442+{-# INLINE int2Oid #-}
443+
306int4 :: TypeInfo
444int4 :: TypeInfo
307int4 = Basic {
445int4 = Basic {
308− typoid = Oid 23,
446+ typoid = int4Oid,
309 typcategory = 'N',
447 typcategory = 'N',
310 typdelim = ',',
448 typdelim = ',',
311 typname = "int4"
449 typname = "int4"
312 }
450 }
313
451
452+int4Oid :: Oid
453+int4Oid = Oid 23
454+{-# INLINE int4Oid #-}
455+
314regproc :: TypeInfo
456regproc :: TypeInfo
315regproc = Basic {
457regproc = Basic {
316− typoid = Oid 24,
458+ typoid = regprocOid,
317 typcategory = 'N',
459 typcategory = 'N',
318 typdelim = ',',
460 typdelim = ',',
319 typname = "regproc"
461 typname = "regproc"
320 }
462 }
321
463
464+regprocOid :: Oid
465+regprocOid = Oid 24
466+{-# INLINE regprocOid #-}
467+
322text :: TypeInfo
468text :: TypeInfo
323text = Basic {
469text = Basic {
324− typoid = Oid 25,
470+ typoid = textOid,
325 typcategory = 'S',
471 typcategory = 'S',
326 typdelim = ',',
472 typdelim = ',',
327 typname = "text"
473 typname = "text"
328 }
474 }
329
475
476+textOid :: Oid
477+textOid = Oid 25
478+{-# INLINE textOid #-}
479+
330oid :: TypeInfo
480oid :: TypeInfo
331oid = Basic {
481oid = Basic {
332− typoid = Oid 26,
482+ typoid = oidOid,
333 typcategory = 'N',
483 typcategory = 'N',
334 typdelim = ',',
484 typdelim = ',',
335 typname = "oid"
485 typname = "oid"
336 }
486 }
337
487
488+oidOid :: Oid
489+oidOid = Oid 26
490+{-# INLINE oidOid #-}
491+
338tid :: TypeInfo
492tid :: TypeInfo
339tid = Basic {
493tid = Basic {
340− typoid = Oid 27,
494+ typoid = tidOid,
341 typcategory = 'U',
495 typcategory = 'U',
342 typdelim = ',',
496 typdelim = ',',
343 typname = "tid"
497 typname = "tid"
344 }
498 }
345
499
500+tidOid :: Oid
501+tidOid = Oid 27
502+{-# INLINE tidOid #-}
503+
346xid :: TypeInfo
504xid :: TypeInfo
347xid = Basic {
505xid = Basic {
348− typoid = Oid 28,
506+ typoid = xidOid,
349 typcategory = 'U',
507 typcategory = 'U',
350 typdelim = ',',
508 typdelim = ',',
351 typname = "xid"
509 typname = "xid"
352 }
510 }
353
511
512+xidOid :: Oid
513+xidOid = Oid 28
514+{-# INLINE xidOid #-}
515+
354cid :: TypeInfo
516cid :: TypeInfo
355cid = Basic {
517cid = Basic {
356− typoid = Oid 29,
518+ typoid = cidOid,
357 typcategory = 'U',
519 typcategory = 'U',
358 typdelim = ',',
520 typdelim = ',',
359 typname = "cid"
521 typname = "cid"
360 }
522 }
361
523
524+cidOid :: Oid
525+cidOid = Oid 29
526+{-# INLINE cidOid #-}
527+
362xml :: TypeInfo
528xml :: TypeInfo
363xml = Basic {
529xml = Basic {
364− typoid = Oid 142,
530+ typoid = xmlOid,
365 typcategory = 'U',
531 typcategory = 'U',
366 typdelim = ',',
532 typdelim = ',',
367 typname = "xml"
533 typname = "xml"
368 }
534 }
369
535
536+xmlOid :: Oid
537+xmlOid = Oid 142
538+{-# INLINE xmlOid #-}
539+
370point :: TypeInfo
540point :: TypeInfo
371point = Basic {
541point = Basic {
372− typoid = Oid 600,
542+ typoid = pointOid,
373 typcategory = 'G',
543 typcategory = 'G',
374 typdelim = ',',
544 typdelim = ',',
375 typname = "point"
545 typname = "point"
376 }
546 }
377
547
548+pointOid :: Oid
549+pointOid = Oid 600
550+{-# INLINE pointOid #-}
551+
378lseg :: TypeInfo
552lseg :: TypeInfo
379lseg = Basic {
553lseg = Basic {
380− typoid = Oid 601,
554+ typoid = lsegOid,
381 typcategory = 'G',
555 typcategory = 'G',
382 typdelim = ',',
556 typdelim = ',',
383 typname = "lseg"
557 typname = "lseg"
384 }
558 }
385
559
560+lsegOid :: Oid
561+lsegOid = Oid 601
562+{-# INLINE lsegOid #-}
563+
386path :: TypeInfo
564path :: TypeInfo
387path = Basic {
565path = Basic {
388− typoid = Oid 602,
566+ typoid = pathOid,
389 typcategory = 'G',
567 typcategory = 'G',
390 typdelim = ',',
568 typdelim = ',',
391 typname = "path"
569 typname = "path"
392 }
570 }
393
571
572+pathOid :: Oid
573+pathOid = Oid 602
574+{-# INLINE pathOid #-}
575+
394box :: TypeInfo
576box :: TypeInfo
395box = Basic {
577box = Basic {
396− typoid = Oid 603,
578+ typoid = boxOid,
397 typcategory = 'G',
579 typcategory = 'G',
398 typdelim = ';',
580 typdelim = ';',
399 typname = "box"
581 typname = "box"
400 }
582 }
401
583
584+boxOid :: Oid
585+boxOid = Oid 603
586+{-# INLINE boxOid #-}
587+
402polygon :: TypeInfo
588polygon :: TypeInfo
403polygon = Basic {
589polygon = Basic {
404− typoid = Oid 604,
590+ typoid = polygonOid,
405 typcategory = 'G',
591 typcategory = 'G',
406 typdelim = ',',
592 typdelim = ',',
407 typname = "polygon"
593 typname = "polygon"
408 }
594 }
409
595
596+polygonOid :: Oid
597+polygonOid = Oid 604
598+{-# INLINE polygonOid #-}
599+
410line :: TypeInfo
600line :: TypeInfo
411line = Basic {
601line = Basic {
412− typoid = Oid 628,
602+ typoid = lineOid,
413 typcategory = 'G',
603 typcategory = 'G',
414 typdelim = ',',
604 typdelim = ',',
415 typname = "line"
605 typname = "line"
416 }
606 }
417
607
608+lineOid :: Oid
609+lineOid = Oid 628
610+{-# INLINE lineOid #-}
611+
418cidr :: TypeInfo
612cidr :: TypeInfo
419cidr = Basic {
613cidr = Basic {
420− typoid = Oid 650,
614+ typoid = cidrOid,
421 typcategory = 'I',
615 typcategory = 'I',
422 typdelim = ',',
616 typdelim = ',',
423 typname = "cidr"
617 typname = "cidr"
424 }
618 }
425
619
620+cidrOid :: Oid
621+cidrOid = Oid 650
622+{-# INLINE cidrOid #-}
623+
426float4 :: TypeInfo
624float4 :: TypeInfo
427float4 = Basic {
625float4 = Basic {
428− typoid = Oid 700,
626+ typoid = float4Oid,
429 typcategory = 'N',
627 typcategory = 'N',
430 typdelim = ',',
628 typdelim = ',',
431 typname = "float4"
629 typname = "float4"
432 }
630 }
433
631
632+float4Oid :: Oid
633+float4Oid = Oid 700
634+{-# INLINE float4Oid #-}
635+
434float8 :: TypeInfo
636float8 :: TypeInfo
435float8 = Basic {
637float8 = Basic {
436− typoid = Oid 701,
638+ typoid = float8Oid,
437 typcategory = 'N',
639 typcategory = 'N',
438 typdelim = ',',
640 typdelim = ',',
439 typname = "float8"
641 typname = "float8"
440 }
642 }
441
643
644+float8Oid :: Oid
645+float8Oid = Oid 701
646+{-# INLINE float8Oid #-}
647+
442unknown :: TypeInfo
648unknown :: TypeInfo
443unknown = Basic {
649unknown = Basic {
444− typoid = Oid 705,
650+ typoid = unknownOid,
445 typcategory = 'X',
651 typcategory = 'X',
446 typdelim = ',',
652 typdelim = ',',
447 typname = "unknown"
653 typname = "unknown"
448 }
654 }
449
655
656+unknownOid :: Oid
657+unknownOid = Oid 705
658+{-# INLINE unknownOid #-}
659+
450circle :: TypeInfo
660circle :: TypeInfo
451circle = Basic {
661circle = Basic {
452− typoid = Oid 718,
662+ typoid = circleOid,
453 typcategory = 'G',
663 typcategory = 'G',
454 typdelim = ',',
664 typdelim = ',',
455 typname = "circle"
665 typname = "circle"
456 }
666 }
457
667
668+circleOid :: Oid
669+circleOid = Oid 718
670+{-# INLINE circleOid #-}
671+
458money :: TypeInfo
672money :: TypeInfo
459money = Basic {
673money = Basic {
460− typoid = Oid 790,
674+ typoid = moneyOid,
461 typcategory = 'N',
675 typcategory = 'N',
462 typdelim = ',',
676 typdelim = ',',
463 typname = "money"
677 typname = "money"
464 }
678 }
465
679
680+moneyOid :: Oid
681+moneyOid = Oid 790
682+{-# INLINE moneyOid #-}
683+
466macaddr :: TypeInfo
684macaddr :: TypeInfo
467macaddr = Basic {
685macaddr = Basic {
468− typoid = Oid 829,
686+ typoid = macaddrOid,
469 typcategory = 'U',
687 typcategory = 'U',
470 typdelim = ',',
688 typdelim = ',',
471 typname = "macaddr"
689 typname = "macaddr"
472 }
690 }
473
691
692+macaddrOid :: Oid
693+macaddrOid = Oid 829
694+{-# INLINE macaddrOid #-}
695+
474inet :: TypeInfo
696inet :: TypeInfo
475inet = Basic {
697inet = Basic {
476− typoid = Oid 869,
698+ typoid = inetOid,
477 typcategory = 'I',
699 typcategory = 'I',
478 typdelim = ',',
700 typdelim = ',',
479 typname = "inet"
701 typname = "inet"
480 }
702 }
481
703
704+inetOid :: Oid
705+inetOid = Oid 869
706+{-# INLINE inetOid #-}
707+
482bpchar :: TypeInfo
708bpchar :: TypeInfo
483bpchar = Basic {
709bpchar = Basic {
484− typoid = Oid 1042,
710+ typoid = bpcharOid,
485 typcategory = 'S',
711 typcategory = 'S',
486 typdelim = ',',
712 typdelim = ',',
487 typname = "bpchar"
713 typname = "bpchar"
488 }
714 }
489
715
716+bpcharOid :: Oid
717+bpcharOid = Oid 1042
718+{-# INLINE bpcharOid #-}
719+
490varchar :: TypeInfo
720varchar :: TypeInfo
491varchar = Basic {
721varchar = Basic {
492− typoid = Oid 1043,
722+ typoid = varcharOid,
493 typcategory = 'S',
723 typcategory = 'S',
494 typdelim = ',',
724 typdelim = ',',
495 typname = "varchar"
725 typname = "varchar"
496 }
726 }
497
727
728+varcharOid :: Oid
729+varcharOid = Oid 1043
730+{-# INLINE varcharOid #-}
731+
498date :: TypeInfo
732date :: TypeInfo
499date = Basic {
733date = Basic {
500− typoid = Oid 1082,
734+ typoid = dateOid,
501 typcategory = 'D',
735 typcategory = 'D',
502 typdelim = ',',
736 typdelim = ',',
503 typname = "date"
737 typname = "date"
504 }
738 }
505
739
740+dateOid :: Oid
741+dateOid = Oid 1082
742+{-# INLINE dateOid #-}
743+
506time :: TypeInfo
744time :: TypeInfo
507time = Basic {
745time = Basic {
508− typoid = Oid 1083,
746+ typoid = timeOid,
509 typcategory = 'D',
747 typcategory = 'D',
510 typdelim = ',',
748 typdelim = ',',
511 typname = "time"
749 typname = "time"
512 }
750 }
513
751
752+timeOid :: Oid
753+timeOid = Oid 1083
754+{-# INLINE timeOid #-}
755+
514timestamp :: TypeInfo
756timestamp :: TypeInfo
515timestamp = Basic {
757timestamp = Basic {
516− typoid = Oid 1114,
758+ typoid = timestampOid,
517 typcategory = 'D',
759 typcategory = 'D',
518 typdelim = ',',
760 typdelim = ',',
519 typname = "timestamp"
761 typname = "timestamp"
520 }
762 }
521
763
764+timestampOid :: Oid
765+timestampOid = Oid 1114
766+{-# INLINE timestampOid #-}
767+
522timestamptz :: TypeInfo
768timestamptz :: TypeInfo
523timestamptz = Basic {
769timestamptz = Basic {
524− typoid = Oid 1184,
770+ typoid = timestamptzOid,
525 typcategory = 'D',
771 typcategory = 'D',
526 typdelim = ',',
772 typdelim = ',',
527 typname = "timestamptz"
773 typname = "timestamptz"
528 }
774 }
529
775
776+timestamptzOid :: Oid
777+timestamptzOid = Oid 1184
778+{-# INLINE timestamptzOid #-}
779+
530interval :: TypeInfo
780interval :: TypeInfo
531interval = Basic {
781interval = Basic {
532− typoid = Oid 1186,
782+ typoid = intervalOid,
533 typcategory = 'T',
783 typcategory = 'T',
534 typdelim = ',',
784 typdelim = ',',
535 typname = "interval"
785 typname = "interval"
536 }
786 }
537
787
788+intervalOid :: Oid
789+intervalOid = Oid 1186
790+{-# INLINE intervalOid #-}
791+
538timetz :: TypeInfo
792timetz :: TypeInfo
539timetz = Basic {
793timetz = Basic {
540− typoid = Oid 1266,
794+ typoid = timetzOid,
541 typcategory = 'D',
795 typcategory = 'D',
542 typdelim = ',',
796 typdelim = ',',
543 typname = "timetz"
797 typname = "timetz"
544 }
798 }
545
799
800+timetzOid :: Oid
801+timetzOid = Oid 1266
802+{-# INLINE timetzOid #-}
803+
546bit :: TypeInfo
804bit :: TypeInfo
547bit = Basic {
805bit = Basic {
548− typoid = Oid 1560,
806+ typoid = bitOid,
549 typcategory = 'V',
807 typcategory = 'V',
550 typdelim = ',',
808 typdelim = ',',
551 typname = "bit"
809 typname = "bit"
552 }
810 }
553
811
812+bitOid :: Oid
813+bitOid = Oid 1560
814+{-# INLINE bitOid #-}
815+
554varbit :: TypeInfo
816varbit :: TypeInfo
555varbit = Basic {
817varbit = Basic {
556− typoid = Oid 1562,
818+ typoid = varbitOid,
557 typcategory = 'V',
819 typcategory = 'V',
558 typdelim = ',',
820 typdelim = ',',
559 typname = "varbit"
821 typname = "varbit"
560 }
822 }
561
823
824+varbitOid :: Oid
825+varbitOid = Oid 1562
826+{-# INLINE varbitOid #-}
827+
562numeric :: TypeInfo
828numeric :: TypeInfo
563numeric = Basic {
829numeric = Basic {
564− typoid = Oid 1700,
830+ typoid = numericOid,
565 typcategory = 'N',
831 typcategory = 'N',
566 typdelim = ',',
832 typdelim = ',',
567 typname = "numeric"
833 typname = "numeric"
568 }
834 }
569
835
836+numericOid :: Oid
837+numericOid = Oid 1700
838+{-# INLINE numericOid #-}
839+
570refcursor :: TypeInfo
840refcursor :: TypeInfo
571refcursor = Basic {
841refcursor = Basic {
572− typoid = Oid 1790,
842+ typoid = refcursorOid,
573 typcategory = 'U',
843 typcategory = 'U',
574 typdelim = ',',
844 typdelim = ',',
575 typname = "refcursor"
845 typname = "refcursor"
576 }
846 }
577
847
848+refcursorOid :: Oid
849+refcursorOid = Oid 1790
850+{-# INLINE refcursorOid #-}
851+
578record :: TypeInfo
852record :: TypeInfo
579record = Basic {
853record = Basic {
580− typoid = Oid 2249,
854+ typoid = recordOid,
581 typcategory = 'P',
855 typcategory = 'P',
582 typdelim = ',',
856 typdelim = ',',
583 typname = "record"
857 typname = "record"
584 }
858 }
585
859
860+recordOid :: Oid
861+recordOid = Oid 2249
862+{-# INLINE recordOid #-}
863+
586void :: TypeInfo
864void :: TypeInfo
587void = Basic {
865void = Basic {
588− typoid = Oid 2278,
866+ typoid = voidOid,
589 typcategory = 'P',
867 typcategory = 'P',
590 typdelim = ',',
868 typdelim = ',',
591 typname = "void"
869 typname = "void"
592 }
870 }
593
871
872+voidOid :: Oid
873+voidOid = Oid 2278
874+{-# INLINE voidOid #-}
875+
594array_record :: TypeInfo
876array_record :: TypeInfo
595array_record = Array {
877array_record = Array {
596− typoid = Oid 2287,
878+ typoid = array_recordOid,
597 typcategory = 'P',
879 typcategory = 'P',
598 typdelim = ',',
880 typdelim = ',',
599 typname = "_record",
881 typname = "_record",
600 typelem = record
882 typelem = record
601 }
883 }
602
884
885+array_recordOid :: Oid
886+array_recordOid = Oid 2287
887+{-# INLINE array_recordOid #-}
888+
603regprocedure :: TypeInfo
889regprocedure :: TypeInfo
604regprocedure = Basic {
890regprocedure = Basic {
605− typoid = Oid 2202,
891+ typoid = regprocedureOid,
606 typcategory = 'N',
892 typcategory = 'N',
607 typdelim = ',',
893 typdelim = ',',
608 typname = "regprocedure"
894 typname = "regprocedure"
609 }
895 }
610
896
897+regprocedureOid :: Oid
898+regprocedureOid = Oid 2202
899+{-# INLINE regprocedureOid #-}
900+
611regoper :: TypeInfo
901regoper :: TypeInfo
612regoper = Basic {
902regoper = Basic {
613− typoid = Oid 2203,
903+ typoid = regoperOid,
614 typcategory = 'N',
904 typcategory = 'N',
615 typdelim = ',',
905 typdelim = ',',
616 typname = "regoper"
906 typname = "regoper"
617 }
907 }
618
908
909+regoperOid :: Oid
910+regoperOid = Oid 2203
911+{-# INLINE regoperOid #-}
912+
619regoperator :: TypeInfo
913regoperator :: TypeInfo
620regoperator = Basic {
914regoperator = Basic {
621− typoid = Oid 2204,
915+ typoid = regoperatorOid,
622 typcategory = 'N',
916 typcategory = 'N',
623 typdelim = ',',
917 typdelim = ',',
624 typname = "regoperator"
918 typname = "regoperator"
625 }
919 }
626
920
921+regoperatorOid :: Oid
922+regoperatorOid = Oid 2204
923+{-# INLINE regoperatorOid #-}
924+
627regclass :: TypeInfo
925regclass :: TypeInfo
628regclass = Basic {
926regclass = Basic {
629− typoid = Oid 2205,
927+ typoid = regclassOid,
630 typcategory = 'N',
928 typcategory = 'N',
631 typdelim = ',',
929 typdelim = ',',
632 typname = "regclass"
930 typname = "regclass"
633 }
931 }
634
932
933+regclassOid :: Oid
934+regclassOid = Oid 2205
935+{-# INLINE regclassOid #-}
936+
635regtype :: TypeInfo
937regtype :: TypeInfo
636regtype = Basic {
938regtype = Basic {
637− typoid = Oid 2206,
939+ typoid = regtypeOid,
638 typcategory = 'N',
940 typcategory = 'N',
639 typdelim = ',',
941 typdelim = ',',
640 typname = "regtype"
942 typname = "regtype"
641 }
943 }
642
944
945+regtypeOid :: Oid
946+regtypeOid = Oid 2206
947+{-# INLINE regtypeOid #-}
948+
643uuid :: TypeInfo
949uuid :: TypeInfo
644uuid = Basic {
950uuid = Basic {
645− typoid = Oid 2950,
951+ typoid = uuidOid,
646 typcategory = 'U',
952 typcategory = 'U',
647 typdelim = ',',
953 typdelim = ',',
648 typname = "uuid"
954 typname = "uuid"
649 }
955 }
650
956
957+uuidOid :: Oid
958+uuidOid = Oid 2950
959+{-# INLINE uuidOid #-}
960+
651json :: TypeInfo
961json :: TypeInfo
652json = Basic {
962json = Basic {
653− typoid = Oid 114,
963+ typoid = jsonOid,
654 typcategory = 'U',
964 typcategory = 'U',
655 typdelim = ',',
965 typdelim = ',',
656 typname = "json"
966 typname = "json"
657 }
967 }
658
968
969+jsonOid :: Oid
970+jsonOid = Oid 114
971+{-# INLINE jsonOid #-}
972+
659jsonb :: TypeInfo
973jsonb :: TypeInfo
660jsonb = Basic {
974jsonb = Basic {
661− typoid = Oid 3802,
975+ typoid = jsonbOid,
662 typcategory = 'U',
976 typcategory = 'U',
663 typdelim = ',',
977 typdelim = ',',
664 typname = "jsonb"
978 typname = "jsonb"
665 }
979 }
666
980
981+jsonbOid :: Oid
982+jsonbOid = Oid 3802
983+{-# INLINE jsonbOid #-}
984+
667int2vector :: TypeInfo
985int2vector :: TypeInfo
668int2vector = Array {
986int2vector = Array {
669− typoid = Oid 22,
987+ typoid = int2vectorOid,
670 typcategory = 'A',
988 typcategory = 'A',
671 typdelim = ',',
989 typdelim = ',',
672 typname = "int2vector",
990 typname = "int2vector",
673 typelem = int2
991 typelem = int2
674 }
992 }
675
993
994+int2vectorOid :: Oid
995+int2vectorOid = Oid 22
996+{-# INLINE int2vectorOid #-}
997+
676oidvector :: TypeInfo
998oidvector :: TypeInfo
677oidvector = Array {
999oidvector = Array {
678− typoid = Oid 30,
1000+ typoid = oidvectorOid,
679 typcategory = 'A',
1001 typcategory = 'A',
680 typdelim = ',',
1002 typdelim = ',',
681 typname = "oidvector",
1003 typname = "oidvector",
682 typelem = oid
1004 typelem = oid
683 }
1005 }
684
1006
1007+oidvectorOid :: Oid
1008+oidvectorOid = Oid 30
1009+{-# INLINE oidvectorOid #-}
1010+
685array_xml :: TypeInfo
1011array_xml :: TypeInfo
686array_xml = Array {
1012array_xml = Array {
687− typoid = Oid 143,
1013+ typoid = array_xmlOid,
688 typcategory = 'A',
1014 typcategory = 'A',
689 typdelim = ',',
1015 typdelim = ',',
690 typname = "_xml",
1016 typname = "_xml",
691 typelem = xml
1017 typelem = xml
692 }
1018 }
693
1019
1020+array_xmlOid :: Oid
1021+array_xmlOid = Oid 143
1022+{-# INLINE array_xmlOid #-}
1023+
694array_json :: TypeInfo
1024array_json :: TypeInfo
695array_json = Array {
1025array_json = Array {
696− typoid = Oid 199,
1026+ typoid = array_jsonOid,
697 typcategory = 'A',
1027 typcategory = 'A',
698 typdelim = ',',
1028 typdelim = ',',
699 typname = "_json",
1029 typname = "_json",
700 typelem = json
1030 typelem = json
701 }
1031 }
702
1032
1033+array_jsonOid :: Oid
1034+array_jsonOid = Oid 199
1035+{-# INLINE array_jsonOid #-}
1036+
703array_line :: TypeInfo
1037array_line :: TypeInfo
704array_line = Array {
1038array_line = Array {
705− typoid = Oid 629,
1039+ typoid = array_lineOid,
706 typcategory = 'A',
1040 typcategory = 'A',
707 typdelim = ',',
1041 typdelim = ',',
708 typname = "_line",
1042 typname = "_line",
709 typelem = line
1043 typelem = line
710 }
1044 }
711
1045
1046+array_lineOid :: Oid
1047+array_lineOid = Oid 629
1048+{-# INLINE array_lineOid #-}
1049+
712array_cidr :: TypeInfo
1050array_cidr :: TypeInfo
713array_cidr = Array {
1051array_cidr = Array {
714− typoid = Oid 651,
1052+ typoid = array_cidrOid,
715 typcategory = 'A',
1053 typcategory = 'A',
716 typdelim = ',',
1054 typdelim = ',',
717 typname = "_cidr",
1055 typname = "_cidr",
718 typelem = cidr
1056 typelem = cidr
719 }
1057 }
720
1058
1059+array_cidrOid :: Oid
1060+array_cidrOid = Oid 651
1061+{-# INLINE array_cidrOid #-}
1062+
721array_circle :: TypeInfo
1063array_circle :: TypeInfo
722array_circle = Array {
1064array_circle = Array {
723− typoid = Oid 719,
1065+ typoid = array_circleOid,
724 typcategory = 'A',
1066 typcategory = 'A',
725 typdelim = ',',
1067 typdelim = ',',
726 typname = "_circle",
1068 typname = "_circle",
727 typelem = circle
1069 typelem = circle
728 }
1070 }
729
1071
1072+array_circleOid :: Oid
1073+array_circleOid = Oid 719
1074+{-# INLINE array_circleOid #-}
1075+
730array_money :: TypeInfo
1076array_money :: TypeInfo
731array_money = Array {
1077array_money = Array {
732− typoid = Oid 791,
1078+ typoid = array_moneyOid,
733 typcategory = 'A',
1079 typcategory = 'A',
734 typdelim = ',',
1080 typdelim = ',',
735 typname = "_money",
1081 typname = "_money",
736 typelem = money
1082 typelem = money
737 }
1083 }
738
1084
1085+array_moneyOid :: Oid
1086+array_moneyOid = Oid 791
1087+{-# INLINE array_moneyOid #-}
1088+
739array_bool :: TypeInfo
1089array_bool :: TypeInfo
740array_bool = Array {
1090array_bool = Array {
741− typoid = Oid 1000,
1091+ typoid = array_boolOid,
742 typcategory = 'A',
1092 typcategory = 'A',
743 typdelim = ',',
1093 typdelim = ',',
744 typname = "_bool",
1094 typname = "_bool",
745 typelem = bool
1095 typelem = bool
746 }
1096 }
747
1097
1098+array_boolOid :: Oid
1099+array_boolOid = Oid 1000
1100+{-# INLINE array_boolOid #-}
1101+
748array_bytea :: TypeInfo
1102array_bytea :: TypeInfo
749array_bytea = Array {
1103array_bytea = Array {
750− typoid = Oid 1001,
1104+ typoid = array_byteaOid,
751 typcategory = 'A',
1105 typcategory = 'A',
752 typdelim = ',',
1106 typdelim = ',',
753 typname = "_bytea",
1107 typname = "_bytea",
754 typelem = bytea
1108 typelem = bytea
755 }
1109 }
756
1110
1111+array_byteaOid :: Oid
1112+array_byteaOid = Oid 1001
1113+{-# INLINE array_byteaOid #-}
1114+
757array_char :: TypeInfo
1115array_char :: TypeInfo
758array_char = Array {
1116array_char = Array {
759− typoid = Oid 1002,
1117+ typoid = array_charOid,
760 typcategory = 'A',
1118 typcategory = 'A',
761 typdelim = ',',
1119 typdelim = ',',
762 typname = "_char",
1120 typname = "_char",
763 typelem = char
1121 typelem = char
764 }
1122 }
765
1123
1124+array_charOid :: Oid
1125+array_charOid = Oid 1002
1126+{-# INLINE array_charOid #-}
1127+
766array_name :: TypeInfo
1128array_name :: TypeInfo
767array_name = Array {
1129array_name = Array {
768− typoid = Oid 1003,
1130+ typoid = array_nameOid,
769 typcategory = 'A',
1131 typcategory = 'A',
770 typdelim = ',',
1132 typdelim = ',',
771 typname = "_name",
1133 typname = "_name",
772 typelem = name
1134 typelem = name
773 }
1135 }
774
1136
1137+array_nameOid :: Oid
1138+array_nameOid = Oid 1003
1139+{-# INLINE array_nameOid #-}
1140+
775array_int2 :: TypeInfo
1141array_int2 :: TypeInfo
776array_int2 = Array {
1142array_int2 = Array {
777− typoid = Oid 1005,
1143+ typoid = array_int2Oid,
778 typcategory = 'A',
1144 typcategory = 'A',
779 typdelim = ',',
1145 typdelim = ',',
780 typname = "_int2",
1146 typname = "_int2",
781 typelem = int2
1147 typelem = int2
782 }
1148 }
783
1149
1150+array_int2Oid :: Oid
1151+array_int2Oid = Oid 1005
1152+{-# INLINE array_int2Oid #-}
1153+
784array_int2vector :: TypeInfo
1154array_int2vector :: TypeInfo
785array_int2vector = Array {
1155array_int2vector = Array {
786− typoid = Oid 1006,
1156+ typoid = array_int2vectorOid,
787 typcategory = 'A',
1157 typcategory = 'A',
788 typdelim = ',',
1158 typdelim = ',',
789 typname = "_int2vector",
1159 typname = "_int2vector",
790 typelem = int2vector
1160 typelem = int2vector
791 }
1161 }
792
1162
1163+array_int2vectorOid :: Oid
1164+array_int2vectorOid = Oid 1006
1165+{-# INLINE array_int2vectorOid #-}
1166+
793array_int4 :: TypeInfo
1167array_int4 :: TypeInfo
794array_int4 = Array {
1168array_int4 = Array {
795− typoid = Oid 1007,
1169+ typoid = array_int4Oid,
796 typcategory = 'A',
1170 typcategory = 'A',
797 typdelim = ',',
1171 typdelim = ',',
798 typname = "_int4",
1172 typname = "_int4",
799 typelem = int4
1173 typelem = int4
800 }
1174 }
801
1175
1176+array_int4Oid :: Oid
1177+array_int4Oid = Oid 1007
1178+{-# INLINE array_int4Oid #-}
1179+
802array_regproc :: TypeInfo
1180array_regproc :: TypeInfo
803array_regproc = Array {
1181array_regproc = Array {
804− typoid = Oid 1008,
1182+ typoid = array_regprocOid,
805 typcategory = 'A',
1183 typcategory = 'A',
806 typdelim = ',',
1184 typdelim = ',',
807 typname = "_regproc",
1185 typname = "_regproc",
808 typelem = regproc
1186 typelem = regproc
809 }
1187 }
810
1188
1189+array_regprocOid :: Oid
1190+array_regprocOid = Oid 1008
1191+{-# INLINE array_regprocOid #-}
1192+
811array_text :: TypeInfo
1193array_text :: TypeInfo
812array_text = Array {
1194array_text = Array {
813− typoid = Oid 1009,
1195+ typoid = array_textOid,
814 typcategory = 'A',
1196 typcategory = 'A',
815 typdelim = ',',
1197 typdelim = ',',
816 typname = "_text",
1198 typname = "_text",
817 typelem = text
1199 typelem = text
818 }
1200 }
819
1201
1202+array_textOid :: Oid
1203+array_textOid = Oid 1009
1204+{-# INLINE array_textOid #-}
1205+
820array_tid :: TypeInfo
1206array_tid :: TypeInfo
821array_tid = Array {
1207array_tid = Array {
822− typoid = Oid 1010,
1208+ typoid = array_tidOid,
823 typcategory = 'A',
1209 typcategory = 'A',
824 typdelim = ',',
1210 typdelim = ',',
825 typname = "_tid",
1211 typname = "_tid",
826 typelem = tid
1212 typelem = tid
827 }
1213 }
828
1214
1215+array_tidOid :: Oid
1216+array_tidOid = Oid 1010
1217+{-# INLINE array_tidOid #-}
1218+
829array_xid :: TypeInfo
1219array_xid :: TypeInfo
830array_xid = Array {
1220array_xid = Array {
831− typoid = Oid 1011,
1221+ typoid = array_xidOid,
832 typcategory = 'A',
1222 typcategory = 'A',
833 typdelim = ',',
1223 typdelim = ',',
834 typname = "_xid",
1224 typname = "_xid",
835 typelem = xid
1225 typelem = xid
836 }
1226 }
837
1227
1228+array_xidOid :: Oid
1229+array_xidOid = Oid 1011
1230+{-# INLINE array_xidOid #-}
1231+
838array_cid :: TypeInfo
1232array_cid :: TypeInfo
839array_cid = Array {
1233array_cid = Array {
840− typoid = Oid 1012,
1234+ typoid = array_cidOid,
841 typcategory = 'A',
1235 typcategory = 'A',
842 typdelim = ',',
1236 typdelim = ',',
843 typname = "_cid",
1237 typname = "_cid",
844 typelem = cid
1238 typelem = cid
845 }
1239 }
846
1240
1241+array_cidOid :: Oid
1242+array_cidOid = Oid 1012
1243+{-# INLINE array_cidOid #-}
1244+
847array_oidvector :: TypeInfo
1245array_oidvector :: TypeInfo
848array_oidvector = Array {
1246array_oidvector = Array {
849− typoid = Oid 1013,
1247+ typoid = array_oidvectorOid,
850 typcategory = 'A',
1248 typcategory = 'A',
851 typdelim = ',',
1249 typdelim = ',',
852 typname = "_oidvector",
1250 typname = "_oidvector",
853 typelem = oidvector
1251 typelem = oidvector
854 }
1252 }
855
1253
1254+array_oidvectorOid :: Oid
1255+array_oidvectorOid = Oid 1013
1256+{-# INLINE array_oidvectorOid #-}
1257+
856array_bpchar :: TypeInfo
1258array_bpchar :: TypeInfo
857array_bpchar = Array {
1259array_bpchar = Array {
858− typoid = Oid 1014,
1260+ typoid = array_bpcharOid,
859 typcategory = 'A',
1261 typcategory = 'A',
860 typdelim = ',',
1262 typdelim = ',',
861 typname = "_bpchar",
1263 typname = "_bpchar",
862 typelem = bpchar
1264 typelem = bpchar
863 }
1265 }
864
1266
1267+array_bpcharOid :: Oid
1268+array_bpcharOid = Oid 1014
1269+{-# INLINE array_bpcharOid #-}
1270+
865array_varchar :: TypeInfo
1271array_varchar :: TypeInfo
866array_varchar = Array {
1272array_varchar = Array {
867− typoid = Oid 1015,
1273+ typoid = array_varcharOid,
868 typcategory = 'A',
1274 typcategory = 'A',
869 typdelim = ',',
1275 typdelim = ',',
870 typname = "_varchar",
1276 typname = "_varchar",
871 typelem = varchar
1277 typelem = varchar
872 }
1278 }
873
1279
1280+array_varcharOid :: Oid
1281+array_varcharOid = Oid 1015
1282+{-# INLINE array_varcharOid #-}
1283+
874array_int8 :: TypeInfo
1284array_int8 :: TypeInfo
875array_int8 = Array {
1285array_int8 = Array {
876− typoid = Oid 1016,
1286+ typoid = array_int8Oid,
877 typcategory = 'A',
1287 typcategory = 'A',
878 typdelim = ',',
1288 typdelim = ',',
879 typname = "_int8",
1289 typname = "_int8",
880 typelem = int8
1290 typelem = int8
881 }
1291 }
882
1292
1293+array_int8Oid :: Oid
1294+array_int8Oid = Oid 1016
1295+{-# INLINE array_int8Oid #-}
1296+
883array_point :: TypeInfo
1297array_point :: TypeInfo
884array_point = Array {
1298array_point = Array {
885− typoid = Oid 1017,
1299+ typoid = array_pointOid,
886 typcategory = 'A',
1300 typcategory = 'A',
887 typdelim = ',',
1301 typdelim = ',',
888 typname = "_point",
1302 typname = "_point",
889 typelem = point
1303 typelem = point
890 }
1304 }
891
1305
1306+array_pointOid :: Oid
1307+array_pointOid = Oid 1017
1308+{-# INLINE array_pointOid #-}
1309+
892array_lseg :: TypeInfo
1310array_lseg :: TypeInfo
893array_lseg = Array {
1311array_lseg = Array {
894− typoid = Oid 1018,
1312+ typoid = array_lsegOid,
895 typcategory = 'A',
1313 typcategory = 'A',
896 typdelim = ',',
1314 typdelim = ',',
897 typname = "_lseg",
1315 typname = "_lseg",
898 typelem = lseg
1316 typelem = lseg
899 }
1317 }
900
1318
1319+array_lsegOid :: Oid
1320+array_lsegOid = Oid 1018
1321+{-# INLINE array_lsegOid #-}
1322+
901array_path :: TypeInfo
1323array_path :: TypeInfo
902array_path = Array {
1324array_path = Array {
903− typoid = Oid 1019,
1325+ typoid = array_pathOid,
904 typcategory = 'A',
1326 typcategory = 'A',
905 typdelim = ',',
1327 typdelim = ',',
906 typname = "_path",
1328 typname = "_path",
907 typelem = path
1329 typelem = path
908 }
1330 }
909
1331
1332+array_pathOid :: Oid
1333+array_pathOid = Oid 1019
1334+{-# INLINE array_pathOid #-}
1335+
910array_box :: TypeInfo
1336array_box :: TypeInfo
911array_box = Array {
1337array_box = Array {
912− typoid = Oid 1020,
1338+ typoid = array_boxOid,
913 typcategory = 'A',
1339 typcategory = 'A',
914 typdelim = ';',
1340 typdelim = ';',
915 typname = "_box",
1341 typname = "_box",
916 typelem = box
1342 typelem = box
917 }
1343 }
918
1344
1345+array_boxOid :: Oid
1346+array_boxOid = Oid 1020
1347+{-# INLINE array_boxOid #-}
1348+
919array_float4 :: TypeInfo
1349array_float4 :: TypeInfo
920array_float4 = Array {
1350array_float4 = Array {
921− typoid = Oid 1021,
1351+ typoid = array_float4Oid,
922 typcategory = 'A',
1352 typcategory = 'A',
923 typdelim = ',',
1353 typdelim = ',',
924 typname = "_float4",
1354 typname = "_float4",
925 typelem = float4
1355 typelem = float4
926 }
1356 }
927
1357
1358+array_float4Oid :: Oid
1359+array_float4Oid = Oid 1021
1360+{-# INLINE array_float4Oid #-}
1361+
928array_float8 :: TypeInfo
1362array_float8 :: TypeInfo
929array_float8 = Array {
1363array_float8 = Array {
930− typoid = Oid 1022,
1364+ typoid = array_float8Oid,
931 typcategory = 'A',
1365 typcategory = 'A',
932 typdelim = ',',
1366 typdelim = ',',
933 typname = "_float8",
1367 typname = "_float8",
934 typelem = float8
1368 typelem = float8
935 }
1369 }
936
1370
1371+array_float8Oid :: Oid
1372+array_float8Oid = Oid 1022
1373+{-# INLINE array_float8Oid #-}
1374+
937array_polygon :: TypeInfo
1375array_polygon :: TypeInfo
938array_polygon = Array {
1376array_polygon = Array {
939− typoid = Oid 1027,
1377+ typoid = array_polygonOid,
940 typcategory = 'A',
1378 typcategory = 'A',
941 typdelim = ',',
1379 typdelim = ',',
942 typname = "_polygon",
1380 typname = "_polygon",
943 typelem = polygon
1381 typelem = polygon
944 }
1382 }
945
1383
1384+array_polygonOid :: Oid
1385+array_polygonOid = Oid 1027
1386+{-# INLINE array_polygonOid #-}
1387+
946array_oid :: TypeInfo
1388array_oid :: TypeInfo
947array_oid = Array {
1389array_oid = Array {
948− typoid = Oid 1028,
1390+ typoid = array_oidOid,
949 typcategory = 'A',
1391 typcategory = 'A',
950 typdelim = ',',
1392 typdelim = ',',
951 typname = "_oid",
1393 typname = "_oid",
952 typelem = oid
1394 typelem = oid
953 }
1395 }
954
1396
1397+array_oidOid :: Oid
1398+array_oidOid = Oid 1028
1399+{-# INLINE array_oidOid #-}
1400+
955array_macaddr :: TypeInfo
1401array_macaddr :: TypeInfo
956array_macaddr = Array {
1402array_macaddr = Array {
957− typoid = Oid 1040,
1403+ typoid = array_macaddrOid,
958 typcategory = 'A',
1404 typcategory = 'A',
959 typdelim = ',',
1405 typdelim = ',',
960 typname = "_macaddr",
1406 typname = "_macaddr",
961 typelem = macaddr
1407 typelem = macaddr
962 }
1408 }
963
1409
1410+array_macaddrOid :: Oid
1411+array_macaddrOid = Oid 1040
1412+{-# INLINE array_macaddrOid #-}
1413+
964array_inet :: TypeInfo
1414array_inet :: TypeInfo
965array_inet = Array {
1415array_inet = Array {
966− typoid = Oid 1041,
1416+ typoid = array_inetOid,
967 typcategory = 'A',
1417 typcategory = 'A',
968 typdelim = ',',
1418 typdelim = ',',
969 typname = "_inet",
1419 typname = "_inet",
970 typelem = inet
1420 typelem = inet
971 }
1421 }
972
1422
1423+array_inetOid :: Oid
1424+array_inetOid = Oid 1041
1425+{-# INLINE array_inetOid #-}
1426+
973array_timestamp :: TypeInfo
1427array_timestamp :: TypeInfo
974array_timestamp = Array {
1428array_timestamp = Array {
975− typoid = Oid 1115,
1429+ typoid = array_timestampOid,
976 typcategory = 'A',
1430 typcategory = 'A',
977 typdelim = ',',
1431 typdelim = ',',
978 typname = "_timestamp",
1432 typname = "_timestamp",
979 typelem = timestamp
1433 typelem = timestamp
980 }
1434 }
981
1435
1436+array_timestampOid :: Oid
1437+array_timestampOid = Oid 1115
1438+{-# INLINE array_timestampOid #-}
1439+
982array_date :: TypeInfo
1440array_date :: TypeInfo
983array_date = Array {
1441array_date = Array {
984− typoid = Oid 1182,
1442+ typoid = array_dateOid,
985 typcategory = 'A',
1443 typcategory = 'A',
986 typdelim = ',',
1444 typdelim = ',',
987 typname = "_date",
1445 typname = "_date",
988 typelem = date
1446 typelem = date
989 }
1447 }
990
1448
1449+array_dateOid :: Oid
1450+array_dateOid = Oid 1182
1451+{-# INLINE array_dateOid #-}
1452+
991array_time :: TypeInfo
1453array_time :: TypeInfo
992array_time = Array {
1454array_time = Array {
993− typoid = Oid 1183,
1455+ typoid = array_timeOid,
994 typcategory = 'A',
1456 typcategory = 'A',
995 typdelim = ',',
1457 typdelim = ',',
996 typname = "_time",
1458 typname = "_time",
997 typelem = time
1459 typelem = time
998 }
1460 }
999
1461
1462+array_timeOid :: Oid
1463+array_timeOid = Oid 1183
1464+{-# INLINE array_timeOid #-}
1465+
1000array_timestamptz :: TypeInfo
1466array_timestamptz :: TypeInfo
1001array_timestamptz = Array {
1467array_timestamptz = Array {
1002− typoid = Oid 1185,
1468+ typoid = array_timestamptzOid,
1003 typcategory = 'A',
1469 typcategory = 'A',
1004 typdelim = ',',
1470 typdelim = ',',
1005 typname = "_timestamptz",
1471 typname = "_timestamptz",
1006 typelem = timestamptz
1472 typelem = timestamptz
1007 }
1473 }
1008
1474
1475+array_timestamptzOid :: Oid
1476+array_timestamptzOid = Oid 1185
1477+{-# INLINE array_timestamptzOid #-}
1478+
1009array_interval :: TypeInfo
1479array_interval :: TypeInfo
1010array_interval = Array {
1480array_interval = Array {
1011− typoid = Oid 1187,
1481+ typoid = array_intervalOid,
1012 typcategory = 'A',
1482 typcategory = 'A',
1013 typdelim = ',',
1483 typdelim = ',',
1014 typname = "_interval",
1484 typname = "_interval",
1015 typelem = interval
1485 typelem = interval
1016 }
1486 }
1017
1487
1488+array_intervalOid :: Oid
1489+array_intervalOid = Oid 1187
1490+{-# INLINE array_intervalOid #-}
1491+
1018array_numeric :: TypeInfo
1492array_numeric :: TypeInfo
1019array_numeric = Array {
1493array_numeric = Array {
1020− typoid = Oid 1231,
1494+ typoid = array_numericOid,
1021 typcategory = 'A',
1495 typcategory = 'A',
1022 typdelim = ',',
1496 typdelim = ',',
1023 typname = "_numeric",
1497 typname = "_numeric",
1024 typelem = numeric
1498 typelem = numeric
1025 }
1499 }
1026
1500
1501+array_numericOid :: Oid
1502+array_numericOid = Oid 1231
1503+{-# INLINE array_numericOid #-}
1504+
1027array_timetz :: TypeInfo
1505array_timetz :: TypeInfo
1028array_timetz = Array {
1506array_timetz = Array {
1029− typoid = Oid 1270,
1507+ typoid = array_timetzOid,
1030 typcategory = 'A',
1508 typcategory = 'A',
1031 typdelim = ',',
1509 typdelim = ',',
1032 typname = "_timetz",
1510 typname = "_timetz",
1033 typelem = timetz
1511 typelem = timetz
1034 }
1512 }
1035
1513
1514+array_timetzOid :: Oid
1515+array_timetzOid = Oid 1270
1516+{-# INLINE array_timetzOid #-}
1517+
1036array_bit :: TypeInfo
1518array_bit :: TypeInfo
1037array_bit = Array {
1519array_bit = Array {
1038− typoid = Oid 1561,
1520+ typoid = array_bitOid,
1039 typcategory = 'A',
1521 typcategory = 'A',
1040 typdelim = ',',
1522 typdelim = ',',
1041 typname = "_bit",
1523 typname = "_bit",
1042 typelem = bit
1524 typelem = bit
1043 }
1525 }
1044
1526
1527+array_bitOid :: Oid
1528+array_bitOid = Oid 1561
1529+{-# INLINE array_bitOid #-}
1530+
1045array_varbit :: TypeInfo
1531array_varbit :: TypeInfo
1046array_varbit = Array {
1532array_varbit = Array {
1047− typoid = Oid 1563,
1533+ typoid = array_varbitOid,
1048 typcategory = 'A',
1534 typcategory = 'A',
1049 typdelim = ',',
1535 typdelim = ',',
1050 typname = "_varbit",
1536 typname = "_varbit",
1051 typelem = varbit
1537 typelem = varbit
1052 }
1538 }
1053
1539
1540+array_varbitOid :: Oid
1541+array_varbitOid = Oid 1563
1542+{-# INLINE array_varbitOid #-}
1543+
1054array_refcursor :: TypeInfo
1544array_refcursor :: TypeInfo
1055array_refcursor = Array {
1545array_refcursor = Array {
1056− typoid = Oid 2201,
1546+ typoid = array_refcursorOid,
1057 typcategory = 'A',
1547 typcategory = 'A',
1058 typdelim = ',',
1548 typdelim = ',',
1059 typname = "_refcursor",
1549 typname = "_refcursor",
1060 typelem = refcursor
1550 typelem = refcursor
1061 }
1551 }
1062
1552
1553+array_refcursorOid :: Oid
1554+array_refcursorOid = Oid 2201
1555+{-# INLINE array_refcursorOid #-}
1556+
1063array_regprocedure :: TypeInfo
1557array_regprocedure :: TypeInfo
1064array_regprocedure = Array {
1558array_regprocedure = Array {
1065− typoid = Oid 2207,
1559+ typoid = array_regprocedureOid,
1066 typcategory = 'A',
1560 typcategory = 'A',
1067 typdelim = ',',
1561 typdelim = ',',
1068 typname = "_regprocedure",
1562 typname = "_regprocedure",
1069 typelem = regprocedure
1563 typelem = regprocedure
1070 }
1564 }
1071
1565
1566+array_regprocedureOid :: Oid
1567+array_regprocedureOid = Oid 2207
1568+{-# INLINE array_regprocedureOid #-}
1569+
1072array_regoper :: TypeInfo
1570array_regoper :: TypeInfo
1073array_regoper = Array {
1571array_regoper = Array {
1074− typoid = Oid 2208,
1572+ typoid = array_regoperOid,
1075 typcategory = 'A',
1573 typcategory = 'A',
1076 typdelim = ',',
1574 typdelim = ',',
1077 typname = "_regoper",
1575 typname = "_regoper",
1078 typelem = regoper
1576 typelem = regoper
1079 }
1577 }
1080
1578
1579+array_regoperOid :: Oid
1580+array_regoperOid = Oid 2208
1581+{-# INLINE array_regoperOid #-}
1582+
1081array_regoperator :: TypeInfo
1583array_regoperator :: TypeInfo
1082array_regoperator = Array {
1584array_regoperator = Array {
1083− typoid = Oid 2209,
1585+ typoid = array_regoperatorOid,
1084 typcategory = 'A',
1586 typcategory = 'A',
1085 typdelim = ',',
1587 typdelim = ',',
1086 typname = "_regoperator",
1588 typname = "_regoperator",
1087 typelem = regoperator
1589 typelem = regoperator
1088 }
1590 }
1089
1591
1592+array_regoperatorOid :: Oid
1593+array_regoperatorOid = Oid 2209
1594+{-# INLINE array_regoperatorOid #-}
1595+
1090array_regclass :: TypeInfo
1596array_regclass :: TypeInfo
1091array_regclass = Array {
1597array_regclass = Array {
1092− typoid = Oid 2210,
1598+ typoid = array_regclassOid,
1093 typcategory = 'A',
1599 typcategory = 'A',
1094 typdelim = ',',
1600 typdelim = ',',
1095 typname = "_regclass",
1601 typname = "_regclass",
1096 typelem = regclass
1602 typelem = regclass
1097 }
1603 }
1098
1604
1605+array_regclassOid :: Oid
1606+array_regclassOid = Oid 2210
1607+{-# INLINE array_regclassOid #-}
1608+
1099array_regtype :: TypeInfo
1609array_regtype :: TypeInfo
1100array_regtype = Array {
1610array_regtype = Array {
1101− typoid = Oid 2211,
1611+ typoid = array_regtypeOid,
1102 typcategory = 'A',
1612 typcategory = 'A',
1103 typdelim = ',',
1613 typdelim = ',',
1104 typname = "_regtype",
1614 typname = "_regtype",
1105 typelem = regtype
1615 typelem = regtype
1106 }
1616 }
1107
1617
1618+array_regtypeOid :: Oid
1619+array_regtypeOid = Oid 2211
1620+{-# INLINE array_regtypeOid #-}
1621+
1108array_uuid :: TypeInfo
1622array_uuid :: TypeInfo
1109array_uuid = Array {
1623array_uuid = Array {
1110− typoid = Oid 2951,
1624+ typoid = array_uuidOid,
1111 typcategory = 'A',
1625 typcategory = 'A',
1112 typdelim = ',',
1626 typdelim = ',',
1113 typname = "_uuid",
1627 typname = "_uuid",
1114 typelem = uuid
1628 typelem = uuid
1115 }
1629 }
1116
1630
1631+array_uuidOid :: Oid
1632+array_uuidOid = Oid 2951
1633+{-# INLINE array_uuidOid #-}
1634+
1117array_jsonb :: TypeInfo
1635array_jsonb :: TypeInfo
1118array_jsonb = Array {
1636array_jsonb = Array {
1119− typoid = Oid 3807,
1637+ typoid = array_jsonbOid,
1120 typcategory = 'A',
1638 typcategory = 'A',
1121 typdelim = ',',
1639 typdelim = ',',
1122 typname = "_jsonb",
1640 typname = "_jsonb",
1123 typelem = jsonb
1641 typelem = jsonb
1124 }
1642 }
1125
1643
1644+array_jsonbOid :: Oid
1645+array_jsonbOid = Oid 3807
1646+{-# INLINE array_jsonbOid #-}
1647+
1126int4range :: TypeInfo
1648int4range :: TypeInfo
1127int4range = Range {
1649int4range = Range {
1128− typoid = Oid 3904,
1650+ typoid = int4rangeOid,
1129 typcategory = 'R',
1651 typcategory = 'R',
1130 typdelim = ',',
1652 typdelim = ',',
1131 typname = "int4range",
1653 typname = "int4range",
1132 rngsubtype = int4
1654 rngsubtype = int4
1133 }
1655 }
1134
1656
1657+int4rangeOid :: Oid
1658+int4rangeOid = Oid 3904
1659+{-# INLINE int4rangeOid #-}
1660+
1135_int4range :: TypeInfo
1661_int4range :: TypeInfo
1136_int4range = Array {
1662_int4range = Array {
1137− typoid = Oid 3905,
1663+ typoid = _int4rangeOid,
1138 typcategory = 'A',
1664 typcategory = 'A',
1139 typdelim = ',',
1665 typdelim = ',',
1140 typname = "_int4range",
1666 typname = "_int4range",
1141 typelem = int4range
1667 typelem = int4range
1142 }
1668 }
1143
1669
1670+_int4rangeOid :: Oid
1671+_int4rangeOid = Oid 3905
1672+{-# INLINE _int4rangeOid #-}
1673+
1144numrange :: TypeInfo
1674numrange :: TypeInfo
1145numrange = Range {
1675numrange = Range {
1146− typoid = Oid 3906,
1676+ typoid = numrangeOid,
1147 typcategory = 'R',
1677 typcategory = 'R',
1148 typdelim = ',',
1678 typdelim = ',',
1149 typname = "numrange",
1679 typname = "numrange",
1150 rngsubtype = numeric
1680 rngsubtype = numeric
1151 }
1681 }
1152
1682
1683+numrangeOid :: Oid
1684+numrangeOid = Oid 3906
1685+{-# INLINE numrangeOid #-}
1686+
1153_numrange :: TypeInfo
1687_numrange :: TypeInfo
1154_numrange = Array {
1688_numrange = Array {
1155− typoid = Oid 3907,
1689+ typoid = _numrangeOid,
1156 typcategory = 'A',
1690 typcategory = 'A',
1157 typdelim = ',',
1691 typdelim = ',',
1158 typname = "_numrange",
1692 typname = "_numrange",
1159 typelem = numrange
1693 typelem = numrange
1160 }
1694 }
1161
1695
1696+_numrangeOid :: Oid
1697+_numrangeOid = Oid 3907
1698+{-# INLINE _numrangeOid #-}
1699+
1162tsrange :: TypeInfo
1700tsrange :: TypeInfo
1163tsrange = Range {
1701tsrange = Range {
1164− typoid = Oid 3908,
1702+ typoid = tsrangeOid,
1165 typcategory = 'R',
1703 typcategory = 'R',
1166 typdelim = ',',
1704 typdelim = ',',
1167 typname = "tsrange",
1705 typname = "tsrange",
1168 rngsubtype = timestamp
1706 rngsubtype = timestamp
1169 }
1707 }
1170
1708
1709+tsrangeOid :: Oid
1710+tsrangeOid = Oid 3908
1711+{-# INLINE tsrangeOid #-}
1712+
1171_tsrange :: TypeInfo
1713_tsrange :: TypeInfo
1172_tsrange = Array {
1714_tsrange = Array {
1173− typoid = Oid 3909,
1715+ typoid = _tsrangeOid,
1174 typcategory = 'A',
1716 typcategory = 'A',
1175 typdelim = ',',
1717 typdelim = ',',
1176 typname = "_tsrange",
1718 typname = "_tsrange",
1177 typelem = tsrange
1719 typelem = tsrange
1178 }
1720 }
1179
1721
1722+_tsrangeOid :: Oid
1723+_tsrangeOid = Oid 3909
1724+{-# INLINE _tsrangeOid #-}
1725+
1180tstzrange :: TypeInfo
1726tstzrange :: TypeInfo
1181tstzrange = Range {
1727tstzrange = Range {
1182− typoid = Oid 3910,
1728+ typoid = tstzrangeOid,
1183 typcategory = 'R',
1729 typcategory = 'R',
1184 typdelim = ',',
1730 typdelim = ',',
1185 typname = "tstzrange",
1731 typname = "tstzrange",
1186 rngsubtype = timestamptz
1732 rngsubtype = timestamptz
1187 }
1733 }
1188
1734
1735+tstzrangeOid :: Oid
1736+tstzrangeOid = Oid 3910
1737+{-# INLINE tstzrangeOid #-}
1738+
1189_tstzrange :: TypeInfo
1739_tstzrange :: TypeInfo
1190_tstzrange = Array {
1740_tstzrange = Array {
1191− typoid = Oid 3911,
1741+ typoid = _tstzrangeOid,
1192 typcategory = 'A',
1742 typcategory = 'A',
1193 typdelim = ',',
1743 typdelim = ',',
1194 typname = "_tstzrange",
1744 typname = "_tstzrange",
1195 typelem = tstzrange
1745 typelem = tstzrange
1196 }
1746 }
1197
1747
1748+_tstzrangeOid :: Oid
1749+_tstzrangeOid = Oid 3911
1750+{-# INLINE _tstzrangeOid #-}
1751+
1198daterange :: TypeInfo
1752daterange :: TypeInfo
1199daterange = Range {
1753daterange = Range {
1200− typoid = Oid 3912,
1754+ typoid = daterangeOid,
1201 typcategory = 'R',
1755 typcategory = 'R',
1202 typdelim = ',',
1756 typdelim = ',',
1203 typname = "daterange",
1757 typname = "daterange",
1204 rngsubtype = date
1758 rngsubtype = date
1205 }
1759 }
1206
1760
1761+daterangeOid :: Oid
1762+daterangeOid = Oid 3912
1763+{-# INLINE daterangeOid #-}
1764+
1207_daterange :: TypeInfo
1765_daterange :: TypeInfo
1208_daterange = Array {
1766_daterange = Array {
1209− typoid = Oid 3913,
1767+ typoid = _daterangeOid,
1210 typcategory = 'A',
1768 typcategory = 'A',
1211 typdelim = ',',
1769 typdelim = ',',
1212 typname = "_daterange",
1770 typname = "_daterange",
1213 typelem = daterange
1771 typelem = daterange
1214 }
1772 }
1215
1773
1774+_daterangeOid :: Oid
1775+_daterangeOid = Oid 3913
1776+{-# INLINE _daterangeOid #-}
1777+
1216int8range :: TypeInfo
1778int8range :: TypeInfo
1217int8range = Range {
1779int8range = Range {
1218− typoid = Oid 3926,
1780+ typoid = int8rangeOid,
1219 typcategory = 'R',
1781 typcategory = 'R',
1220 typdelim = ',',
1782 typdelim = ',',
1221 typname = "int8range",
1783 typname = "int8range",
1222 rngsubtype = int8
1784 rngsubtype = int8
1223 }
1785 }
1224
1786
1787+int8rangeOid :: Oid
1788+int8rangeOid = Oid 3926
1789+{-# INLINE int8rangeOid #-}
1790+
1225_int8range :: TypeInfo
1791_int8range :: TypeInfo
1226_int8range = Array {
1792_int8range = Array {
1227− typoid = Oid 3927,
1793+ typoid = _int8rangeOid,
1228 typcategory = 'A',
1794 typcategory = 'A',
1229 typdelim = ',',
1795 typdelim = ',',
1230 typname = "_int8range",
1796 typname = "_int8range",
1231 typelem = int8range
1797 typelem = int8range
1232 }
1798 }
1799+
1800+_int8rangeOid :: Oid
1801+_int8rangeOid = Oid 3927
1802+{-# INLINE _int8rangeOid #-}
test/Inspection.hsnew file+74
@@ -0,0 +1,74 @@
1+{-# LANGUAGE CPP #-}
2+{-# LANGUAGE TemplateHaskell #-}
3+{-# OPTIONS_GHC -dsuppress-idinfo -dsuppress-coercions -dsuppress-type-applications -dsuppress-module-prefixes -dsuppress-type-signatures #-}
4+-- {-# OPTIONS_GHC -dsuppress-uniques #-}
5+{-# OPTIONS_GHC -fplugin=Test.Inspection.Plugin #-}
6+module Main where
7+
8+import Test.Inspection
9+import Test.Tasty
10+import Test.Tasty.HUnit
11+
12+import qualified Database.PostgreSQL.LibPQ as PQ
13+import Database.PostgreSQL.Simple.FromField
14+import Database.PostgreSQL.Simple.TypeInfo as TI
15+import Database.PostgreSQL.Simple.TypeInfo.Macro
16+import qualified Database.PostgreSQL.Simple.TypeInfo.Static as TI
17+
18+-------------------------------------------------------------------------------
19+-- Inspection tests
20+-------------------------------------------------------------------------------
21+
22+-- # doesn't work :(
23+#define TH_MKCOMPATS3(a,b,c) $(mkCompats [TI.a,TI.b,TI.c])
24+#define IN_MKCOMPATS3(a,b,c) (eq TI.a \/ eq TI.b \/ eq TI.c)
25+
26+#define TH_INLINETYPOID(n) eq $(inlineTypoid TI.n)
27+#define IN_INLINETYPOID(n) eq TI.n
28+
29+-- eta-expansion is required
30+lhs01, rhs01 :: PQ.Oid -> Bool
31+lhs01 = TH_MKCOMPATS3(name,text,char)
32+rhs01 = IN_MKCOMPATS3(nameOid,textOid,charOid)
33+
34+lhs02, rhs02 :: PQ.Oid -> Bool
35+lhs02 = TH_INLINETYPOID(name)
36+rhs02 = IN_INLINETYPOID(nameOid)
37+
38+eq :: PQ.Oid -> PQ.Oid -> Bool
39+eq = (==)
40+{-# INLINE eq #-}
41+
42+infixr 2 \/
43+(\/) :: (PQ.Oid -> Bool)
44+ -> (PQ.Oid -> Bool)
45+ -> (PQ.Oid -> Bool)
46+f \/ g = \x -> f x || g x
47+{-# INLINE (\/) #-}
48+
49+inspectionTests :: TestTree
50+inspectionTests = testGroup "inspection"
51+ [ testCase "mkCompats" $
52+ assertSuccess $(inspectTest $ 'lhs01 === 'rhs01)
53+
54+ -- byteaOid isn't inlined?
55+ , testCase "inlineTypoid" $
56+ assertFailure' $(inspectTest $ 'lhs02 ==- 'rhs02)
57+ ]
58+
59+assertSuccess :: Result -> IO ()
60+assertSuccess (Success _) = return ()
61+assertSuccess (Failure err) = assertFailure err
62+
63+assertFailure' :: Result -> IO ()
64+assertFailure' (Success err) = assertFailure err
65+assertFailure' (Failure _) = return ()
66+
67+-------------------------------------------------------------------------------
68+-- Main
69+-------------------------------------------------------------------------------
70+
71+main :: IO ()
72+main = defaultMain $ testGroup "tests"
73+ [ inspectionTests
74+ ]
tools/GenTypeInfo.hs+39−25
@@ -21,6 +21,9 @@
21-- know about. It then constructs a TypeInfo record and stores it in
21-- know about. It then constructs a TypeInfo record and stores it in
22-- a per-connection cache for later use.
22-- a per-connection cache for later use.
23--
23--
24+-- @
25+-- runghc -itools tools/GenTypeInfo.hs
26+-- @
24------------------------------------------------------------------------------
27------------------------------------------------------------------------------
25
28
26{-# LANGUAGE OverloadedStrings, QuasiQuotes, ViewPatterns, RecordWildCards #-}
29{-# LANGUAGE OverloadedStrings, QuasiQuotes, ViewPatterns, RecordWildCards #-}
@@ -38,12 +41,10 @@ import Database.PostgreSQL.Simple.FromRow
38import Database.PostgreSQL.Simple.Ok
41import Database.PostgreSQL.Simple.Ok
39import Database.PostgreSQL.Simple.Types(Oid(..))
42import Database.PostgreSQL.Simple.Types(Oid(..))
40import Database.PostgreSQL.Simple.SqlQQ
43import Database.PostgreSQL.Simple.SqlQQ
41−import qualified Data.ByteString.Char8 as B
44+import qualified Data.ByteString.Char8 as B8
42import Data.ByteString(ByteString)
45import Data.ByteString(ByteString)
43import qualified Data.ByteString.Lazy as L
46import qualified Data.ByteString.Lazy as L
44−import qualified Blaze.ByteString.Builder as Blaze
47+import qualified Data.ByteString.Builder as Blaze
45−import qualified Blaze.ByteString.Builder.ByteString as Blaze
46−import qualified Blaze.ByteString.Builder.Char8 as Blaze
47import Data.String
48import Data.String
48import Data.List ( sort, intersperse )
49import Data.List ( sort, intersperse )
49import qualified Data.Map as Map
50import qualified Data.Map as Map
@@ -69,11 +70,11 @@ data TypeInfo = TypeInfo
69instance FromRow TypeInfo where
70instance FromRow TypeInfo where
70 fromRow = TypeInfo <$> field <*> field <*> field <*> field <*> field <*> field
71 fromRow = TypeInfo <$> field <*> field <*> field <*> field <*> field <*> field
71
72
72−type NameMap = Map.Map B.ByteString TypeInfo
73+type NameMap = Map.Map B8.ByteString TypeInfo
73
74
74type OidMap = Map.Map Oid TypeInfo
75type OidMap = Map.Map Oid TypeInfo
75
76
76−type TypeName = (B.ByteString, B.ByteString)
77+type TypeName = (B8.ByteString, B8.ByteString)
77
78
78type TypeNames = [TypeName]
79type TypeNames = [TypeName]
79
80
@@ -197,9 +198,6 @@ int8range
197_int8range
198_int8range
198|]
199|]
199
200
200−instance IsString Blaze.Builder where
201− fromString = Blaze.fromByteString . fromString
202−
203connectionString = "dbname=postgres"
201connectionString = "dbname=postgres"
204
202
205withPostgreSQL = bracket (connectPostgreSQL connectionString) close
203withPostgreSQL = bracket (connectPostgreSQL connectionString) close
@@ -237,7 +235,7 @@ getTypeInfos typnames = withPostgreSQL $ \conn -> do
237
235
238main = do
236main = do
239 (oidmap, namemap) <- getTypeInfos typeNames
237 (oidmap, namemap) <- getTypeInfos typeNames
240− L.writeFile "../src/Database/PostgreSQL/Simple/TypeInfo/Static.hs"
238+ L.writeFile "src/Database/PostgreSQL/Simple/TypeInfo/Static.hs"
241 (Blaze.toLazyByteString (renderFile oidmap namemap typeNames))
239 (Blaze.toLazyByteString (renderFile oidmap namemap typeNames))
242
240
243
241
@@ -246,7 +244,7 @@ showOid (Oid n) = show n
246renderOid :: NameMap -> TypeName -> Blaze.Builder
244renderOid :: NameMap -> TypeName -> Blaze.Builder
247renderOid byName name
245renderOid byName name
248 = case Map.lookup (pg name) byName of
246 = case Map.lookup (pg name) byName of
249− Nothing -> error (B.unpack (pg name))
247+ Nothing -> error (B8.unpack (pg name))
250 Just (showOid . typoid -> n) -> fromString n
248 Just (showOid . typoid -> n) -> fromString n
251 ++ fromString (replicate (4 - length n) ' ')
249 ++ fromString (replicate (4 - length n) ' ')
252
250
@@ -264,20 +262,25 @@ renderTypeInfo byOid info name
264 typelem_hs_name =
262 typelem_hs_name =
265 case lookup (typname typelem_info) typeNames of
263 case lookup (typname typelem_info) typeNames of
266 Nothing -> error ( "type not found: "
264 Nothing -> error ( "type not found: "
267− ++ B.unpack( typname typelem_info)
265+ ++ B8.unpack( typname typelem_info)
268− ++ " (typelem of " ++ B.unpack (typname info)
266+ ++ " (typelem of " ++ B8.unpack (typname info)
269 ++ ")")
267 ++ ")")
270 Just x -> x
268 Just x -> x
271 in concat
269 in concat
272 [ "\n"
270 [ "\n"
273 , bs (hs name), " :: TypeInfo\n"
271 , bs (hs name), " :: TypeInfo\n"
274 , bs (hs name), " = Array {\n"
272 , bs (hs name), " = Array {\n"
275− , " typoid = ", fromString (show (typoid info)), ",\n"
273+ , " typoid = ", bs (hs name), "Oid,\n"
276− , " typcategory = '", Blaze.fromChar (typcategory info), "',\n"
274+ , " typcategory = '", bs $ B8.singleton (typcategory info), "',\n"
277− , " typdelim = '", Blaze.fromChar (typdelim info), "',\n"
275+ , " typdelim = '", bs $ B8.singleton (typdelim info), "',\n"
278 , " typname = \"", bs (typname info), "\",\n"
276 , " typname = \"", bs (typname info), "\",\n"
279 , " typelem = ", bs typelem_hs_name, "\n"
277 , " typelem = ", bs typelem_hs_name, "\n"
280 , " }\n"
278 , " }\n"
279+ , "\n"
280+ , bs (hs name), "Oid :: Oid\n"
281+ , bs (hs name), "Oid = ", fromString (show (typoid info)), "\n"
282+ , "{-# INLINE ", bs (hs name), "Oid #-}"
283+ , "\n"
281 ]
284 ]
282 | typcategory info == 'R' =
285 | typcategory info == 'R' =
283 let (Just rngsubtype_oid) = rngsubtype info
286 let (Just rngsubtype_oid) = rngsubtype info
@@ -285,31 +288,41 @@ renderTypeInfo byOid info name
285 rngsubtype_hs_name =
288 rngsubtype_hs_name =
286 case lookup (typname rngsubtype_info) typeNames of
289 case lookup (typname rngsubtype_info) typeNames of
287 Nothing -> error ( "type not found: "
290 Nothing -> error ( "type not found: "
288− ++ B.unpack (typname rngsubtype_info)
291+ ++ B8.unpack (typname rngsubtype_info)
289 ++ " (rngsubtype of "
292 ++ " (rngsubtype of "
290− ++ B.unpack (typname info) ++ ")")
293+ ++ B8.unpack (typname info) ++ ")")
291 Just x -> x
294 Just x -> x
292 in concat
295 in concat
293 [ "\n"
296 [ "\n"
294 , bs (hs name), " :: TypeInfo\n"
297 , bs (hs name), " :: TypeInfo\n"
295 , bs (hs name), " = Range {\n"
298 , bs (hs name), " = Range {\n"
296− , " typoid = ", fromString (show (typoid info)), ",\n"
299+ , " typoid = ", bs (hs name), "Oid,\n"
297− , " typcategory = '", Blaze.fromChar (typcategory info), "',\n"
300+ , " typcategory = '", bs $ B8.singleton (typcategory info), "',\n"
298− , " typdelim = '", Blaze.fromChar (typdelim info), "',\n"
301+ , " typdelim = '", bs $ B8.singleton (typdelim info), "',\n"
299 , " typname = \"", bs (typname info), "\",\n"
302 , " typname = \"", bs (typname info), "\",\n"
300 , " rngsubtype = ", bs rngsubtype_hs_name, "\n"
303 , " rngsubtype = ", bs rngsubtype_hs_name, "\n"
301 , " }\n"
304 , " }\n"
305+ , "\n"
306+ , bs (hs name), "Oid :: Oid\n"
307+ , bs (hs name), "Oid = ", fromString (show (typoid info)), "\n"
308+ , "{-# INLINE ", bs (hs name), "Oid #-}"
309+ , "\n"
302 ]
310 ]
303 | otherwise =
311 | otherwise =
304 concat
312 concat
305 [ "\n"
313 [ "\n"
306 , bs (hs name), " :: TypeInfo\n"
314 , bs (hs name), " :: TypeInfo\n"
307 , bs (hs name), " = Basic {\n"
315 , bs (hs name), " = Basic {\n"
308− , " typoid = ", fromString (show (typoid info)), ",\n"
316+ , " typoid = ", bs (hs name), "Oid,\n"
309− , " typcategory = '", Blaze.fromChar (typcategory info), "',\n"
317+ , " typcategory = '", bs $ B8.singleton (typcategory info), "',\n"
310− , " typdelim = '", Blaze.fromChar (typdelim info), "',\n"
318+ , " typdelim = '", bs $ B8.singleton (typdelim info), "',\n"
311 , " typname = \"", bs (typname info), "\"\n"
319 , " typname = \"", bs (typname info), "\"\n"
312 , " }\n"
320 , " }\n"
321+ , "\n"
322+ , bs (hs name), "Oid :: Oid\n"
323+ , bs (hs name), "Oid = ", fromString (show (typoid info)), "\n"
324+ , "{-# INLINE ", bs (hs name), "Oid #-}"
325+ , "\n"
313 ]
326 ]
314
327
315-- FIXME: add in any names that we need that we didn't specify, (i.e.
328-- FIXME: add in any names that we need that we didn't specify, (i.e.
@@ -318,7 +331,7 @@ renderTypeInfo byOid info name
318getNames :: NameMap -> TypeNames -> TypeNames
331getNames :: NameMap -> TypeNames -> TypeNames
319getNames _ x = x
332getNames _ x = x
320
333
321−bs = Blaze.fromByteString
334+bs = Blaze.byteString
322
335
323pg = fst
336pg = fst
324
337
@@ -347,6 +360,7 @@ module Database.PostgreSQL.Simple.TypeInfo.Static
347 ( TypeInfo(..)
360 ( TypeInfo(..)
348 , staticTypeInfo
361 , staticTypeInfo
349|] ++ concat [ " , " ++ bs (hs name) ++ "\n"
362|] ++ concat [ " , " ++ bs (hs name) ++ "\n"
363+ ++ " , " ++ bs (hs name) ++ "Oid\n"
350 | name <- names ] ++ [longstring|
364 | name <- names ] ++ [longstring|
351 ) where
365 ) where
352
366