Hello community, here is the log from the commit of package ghc-postgresql-binary for openSUSE:Factory checked in at 2017-03-12 20:04:16 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ghc-postgresql-binary (Old) and /work/SRC/openSUSE:Factory/.ghc-postgresql-binary.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "ghc-postgresql-binary" Sun Mar 12 20:04:16 2017 rev:2 rq:477838 version:0.9.3 Changes: -------- --- /work/SRC/openSUSE:Factory/ghc-postgresql-binary/ghc-postgresql-binary.changes 2017-03-01 23:43:15.876427898 +0100 +++ /work/SRC/openSUSE:Factory/.ghc-postgresql-binary.new/ghc-postgresql-binary.changes 2017-03-12 20:04:16.775383235 +0100 @@ -1,0 +2,20 @@ +Mon Feb 20 08:42:15 UTC 2017 - psimons@suse.com + +- Update to version 0.9.3 with cabal2obs. + +------------------------------------------------------------------- +Sun Feb 5 19:32:32 UTC 2017 - psimons@suse.com + +- Update to version 0.9.2 with cabal2obs. + +------------------------------------------------------------------- +Tue Oct 11 08:49:45 UTC 2016 - psimons@suse.com + +- Update to version 0.9.1.1 with cabal2obs. + +------------------------------------------------------------------- +Wed Aug 17 18:28:09 UTC 2016 - psimons@suse.com + +- Update to version 0.9.1 revision 0 with cabal2obs. + +------------------------------------------------------------------- Old: ---- postgresql-binary-0.9.0.1.tar.gz New: ---- postgresql-binary-0.9.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ghc-postgresql-binary.spec ++++++ --- /var/tmp/diff_new_pack.lWLTpq/_old 2017-03-12 20:04:17.355301175 +0100 +++ /var/tmp/diff_new_pack.lWLTpq/_new 2017-03-12 20:04:17.359300609 +0100 @@ -1,7 +1,7 @@ # # spec file for package ghc-postgresql-binary # -# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -19,15 +19,14 @@ %global pkg_name postgresql-binary %bcond_with tests Name: ghc-%{pkg_name} -Version: 0.9.0.1 +Version: 0.9.3 Release: 0 Summary: Encoders and decoders for the PostgreSQL's binary format License: MIT -Group: System/Libraries +Group: Development/Languages/Other Url: https://hackage.haskell.org/package/%{pkg_name} Source0: https://hackage.haskell.org/package/%{pkg_name}-%{version}/%{pkg_name}-%{version}.tar.gz BuildRequires: ghc-Cabal-devel -# Begin cabal-rpm deps: BuildRequires: ghc-aeson-devel BuildRequires: ghc-base-prelude-devel BuildRequires: ghc-binary-parser-devel @@ -48,17 +47,15 @@ BuildRequires: ghc-conversion-bytestring-devel BuildRequires: ghc-conversion-devel BuildRequires: ghc-conversion-text-devel -BuildRequires: ghc-either-devel BuildRequires: ghc-json-ast-devel BuildRequires: ghc-postgresql-libpq-devel BuildRequires: ghc-quickcheck-instances-devel -BuildRequires: ghc-rebase-devel +BuildRequires: ghc-rerebase-devel BuildRequires: ghc-tasty-devel BuildRequires: ghc-tasty-hunit-devel BuildRequires: ghc-tasty-quickcheck-devel BuildRequires: ghc-tasty-smallcheck-devel %endif -# End cabal-rpm deps %description An API for dealing with PostgreSQL's binary data format. @@ -67,7 +64,7 @@ <http://hackage.haskell.org/package/hasql "hasql"> is based on this library. It supports all Postgres versions starting from 8.3 and is tested against 8.3, -9.3 and 9.4 with the 'integer_datetimes' setting off and on. +9.3 and 9.5 with the 'integer_datetimes' setting off and on. %package devel Summary: Haskell %{pkg_name} library development files @@ -84,20 +81,14 @@ %prep %setup -q -n %{pkg_name}-%{version} - %build %ghc_lib_build - %install %ghc_lib_install - %check -%if %{with tests} -%{cabal} test -%endif - +%cabal_test %post devel %ghc_pkg_recache ++++++ postgresql-binary-0.9.0.1.tar.gz -> postgresql-binary-0.9.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/postgresql-binary-0.9.0.1/decoding/Main.hs new/postgresql-binary-0.9.3/decoding/Main.hs --- old/postgresql-binary-0.9.0.1/decoding/Main.hs 2016-05-29 01:29:32.000000000 +0200 +++ new/postgresql-binary-0.9.3/decoding/Main.hs 2017-02-13 16:15:39.000000000 +0100 @@ -1,14 +1,8 @@ module Main where -import BasePrelude -import MTLPrelude -import Control.DeepSeq +import Prelude import Criterion import Criterion.Main -import Data.Text (Text) -import Data.ByteString (ByteString) -import Data.Scientific (Scientific) -import Data.Time import qualified PostgreSQL.Binary.Encoder as E import qualified PostgreSQL.Binary.Decoder as D diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/postgresql-binary-0.9.0.1/encoding/Main.hs new/postgresql-binary-0.9.3/encoding/Main.hs --- old/postgresql-binary-0.9.0.1/encoding/Main.hs 2016-05-29 01:29:32.000000000 +0200 +++ new/postgresql-binary-0.9.3/encoding/Main.hs 2017-02-13 16:15:39.000000000 +0100 @@ -1,14 +1,8 @@ module Main where -import BasePrelude -import MTLPrelude -import Control.DeepSeq +import Prelude import Criterion import Criterion.Main -import Data.Text (Text) -import Data.ByteString (ByteString) -import Data.Scientific (Scientific) -import Data.Time import qualified PostgreSQL.Binary.Encoder as E diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/postgresql-binary-0.9.0.1/library/PostgreSQL/Binary/Data.hs new/postgresql-binary-0.9.3/library/PostgreSQL/Binary/Data.hs --- old/postgresql-binary-0.9.0.1/library/PostgreSQL/Binary/Data.hs 2016-05-29 01:29:32.000000000 +0200 +++ new/postgresql-binary-0.9.3/library/PostgreSQL/Binary/Data.hs 2017-02-13 16:15:39.000000000 +0100 @@ -56,3 +56,45 @@ -- type Numeric = (Int16, Word16, Vector Int16) + +-- | +-- Representation of the PostgreSQL Network Address Type @inet@. +-- +-- The Inet type holds an IPv4 or IPv6 host address, and optionally its subnet. +-- The subnet is represented by the number of network address bits present in the host address (the "netmask"). +-- If the subnet portion is missing, the netmask is 32 for IPv4 and 128 for IPv6. +data Inet + = InetIPv4 IPv4 + | InetIPv4Subnet IPv4 Netmask + | InetIPv6 IPv6 + | InetIPv6Subnet IPv6 Netmask + deriving (Eq, Show) + +type IPv4 = (Word8, Word8, Word8, Word8) + +type IPv6 = (Word16, Word16, Word16, Word16, Word16, Word16, Word16, Word16) + +type Netmask = Word8 + +maxNetmaskIPv4 :: Word8 +maxNetmaskIPv4 = 32 + +maxNetmaskIPv6 :: Word8 +maxNetmaskIPv6 = 128 + +-- | Address family AF_INET +afInet :: Word8 +afInet = 2 + +-- | Address family AF_INET6 +afInet6 :: Word8 +afInet6 = 3 + +ipv4Size :: Int8 +ipv4Size = 4 + +ipv6Size :: Int8 +ipv6Size = 16 + +isCidr :: Word8 +isCidr = 0 \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/postgresql-binary-0.9.0.1/library/PostgreSQL/Binary/Decoder.hs new/postgresql-binary-0.9.3/library/PostgreSQL/Binary/Decoder.hs --- old/postgresql-binary-0.9.0.1/library/PostgreSQL/Binary/Decoder.hs 2016-05-29 01:29:32.000000000 +0200 +++ new/postgresql-binary-0.9.3/library/PostgreSQL/Binary/Decoder.hs 2017-02-13 16:15:39.000000000 +0100 @@ -17,6 +17,7 @@ fn, numeric, uuid, + inet, json_ast, json_bytes, jsonb_ast, @@ -87,9 +88,13 @@ {-# INLINABLE onContent #-} onContent :: Decoder a -> Decoder ( Maybe a ) onContent decoder = - intOfSize 4 >>= \case + size >>= + \case (-1) -> pure Nothing - n -> fmap Just (sized n decoder) + n -> fmap Just (sized (fromIntegral n) decoder) + where + size = + intOfSize 4 :: Decoder Int32 {-# INLINABLE content #-} content :: Decoder (Maybe ByteString) @@ -148,6 +153,47 @@ uuid = UUID.fromWords <$> intOfSize 4 <*> intOfSize 4 <*> intOfSize 4 <*> intOfSize 4 +{-# INLINABLE ipv4 #-} +ipv4 :: Decoder Data.IPv4 +ipv4 = + (,,,) <$> intOfSize 1 <*> intOfSize 1 <*> intOfSize 1 <*> intOfSize 1 + +{-# INLINABLE ipv6 #-} +ipv6 :: Decoder Data.IPv6 +ipv6 = + (,,,,,,,) <$> intOfSize 2 <*> intOfSize 2 <*> intOfSize 2 <*> intOfSize 2 <*> intOfSize 2 <*> intOfSize 2 <*> intOfSize 2 <*> intOfSize 2 + +{-# INLINABLE inet #-} +inet :: Decoder Data.Inet +inet = do + af <- intOfSize 1 + netmask <- intOfSize 1 + isCidr <- intOfSize 1 + ipSize <- intOfSize 1 + if af == Data.afInet + then do + ip <- ipv4 + return $ inetIPv4FromBytes af netmask isCidr ipSize ip + else do + ip <- ipv6 + return $ inetIPv6FromBytes af netmask isCidr ipSize ip + +{-# INLINABLE inetIPv4FromBytes #-} +inetIPv4FromBytes:: Word8 -> Word8 -> Word8 -> Int8 -> Data.IPv4 -> Data.Inet +inetIPv4FromBytes _ netmask _ _ ip = + if netmask == Data.maxNetmaskIPv4 then + Data.InetIPv4 ip + else + Data.InetIPv4Subnet ip netmask + +{-# INLINABLE inetIPv6FromBytes #-} +inetIPv6FromBytes:: Word8 -> Word8 -> Word8 -> Int8 -> Data.IPv6 -> Data.Inet +inetIPv6FromBytes _ netmask _ _ ip = + if netmask == Data.maxNetmaskIPv6 then + Data.InetIPv6 ip + else + Data.InetIPv6Subnet ip netmask + {-# INLINABLE json_ast #-} json_ast :: Decoder Aeson.Value json_ast = @@ -429,21 +475,30 @@ {-# INLINE composite #-} composite :: CompositeDecoder a -> Decoder a composite (CompositeDecoder decoder) = - unitOfSize 4 *> decoder + numOfComponents *> decoder + where + numOfComponents = + unitOfSize 4 -- | -- Lift a value 'Decoder' into 'CompositeDecoder'. {-# INLINE compositeValue #-} compositeValue :: Decoder a -> CompositeDecoder ( Maybe a ) -compositeValue = - CompositeDecoder . onContent +compositeValue valueDecoder = + CompositeDecoder (skipOid *> onContent valueDecoder) + where + skipOid = + unitOfSize 4 -- | -- Lift a non-nullable value 'Decoder' into 'CompositeDecoder'. {-# INLINE compositeNonNullValue #-} compositeNonNullValue :: Decoder a -> CompositeDecoder a -compositeNonNullValue = - CompositeDecoder . join . fmap (maybe (failure "Unexpected NULL") return) . onContent +compositeNonNullValue valueDecoder = + CompositeDecoder (skipOid *> onContent valueDecoder >>= maybe (failure "Unexpected NULL") return) + where + skipOid = + unitOfSize 4 -- * Array diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/postgresql-binary-0.9.0.1/library/PostgreSQL/Binary/Encoder.hs new/postgresql-binary-0.9.3/library/PostgreSQL/Binary/Encoder.hs --- old/postgresql-binary-0.9.0.1/library/PostgreSQL/Binary/Encoder.hs 2016-05-29 01:29:32.000000000 +0200 +++ new/postgresql-binary-0.9.3/library/PostgreSQL/Binary/Encoder.hs 2017-02-13 16:15:39.000000000 +0100 @@ -16,6 +16,7 @@ bool, numeric, uuid, + inet, json_ast, json_bytes, jsonb_ast, @@ -95,11 +96,29 @@ tuple4 e1 e2 e3 e4 = \(v1, v2, v3, v4) -> e1 v1 <> e2 v2 <> e3 v3 <> e4 v4 +{-# INLINE tuple5 #-} +tuple5 :: Encoder a -> Encoder b -> Encoder c -> Encoder d -> Encoder e -> Encoder (a, b, c, d, e) +tuple5 e1 e2 e3 e4 e5 (v1, v2, v3, v4, v5) = e1 v1 <> e2 v2 <> e3 v3 <> e4 v4 <> e5 v5 + +{-# INLINE tuple8 #-} +tuple8 :: Encoder a -> Encoder b -> Encoder c -> Encoder d -> Encoder e -> Encoder f -> Encoder g -> Encoder h -> Encoder (a, b, c, d, e, f, g, h) +tuple8 e1 e2 e3 e4 e5 e6 e7 e8 (v1, v2, v3, v4, v5, v6, v7, v8) = e1 v1 <> e2 v2 <> e3 v3 <> e4 v4 <> e5 v5 <> e6 v6 <> e7 v7 <> e8 v8 + {-# INLINE premap #-} premap :: (a -> b) -> Encoder b -> Encoder a premap f e = e . f +{-# INLINE int_int8 #-} +int_int8 :: Encoder Int8 +int_int8 = + Builder.int8 + +{-# INLINE int_word8 #-} +int_word8 :: Encoder Word8 +int_word8 = + Builder.word8 + {-# INLINE int2_int16 #-} int2_int16 :: Encoder Int16 int2_int16 = @@ -222,6 +241,28 @@ uuid = premap UUID.toWords (tuple4 int4_word32 int4_word32 int4_word32 int4_word32) +{-# INLINABLE inetIPv4 #-} +inetIPv4 :: Encoder (Word8, Word8, Word8, Int8, Data.IPv4) +inetIPv4 = + tuple5 int_word8 int_word8 int_word8 int_int8 $ tuple4 int_word8 int_word8 int_word8 int_word8 + +{-# INLINABLE inetIPv6 #-} +inetIPv6 :: Encoder (Word8, Word8, Word8, Int8, Data.IPv6) +inetIPv6 = + tuple5 int_word8 int_word8 int_word8 int_int8 $ + tuple8 int2_word16 int2_word16 int2_word16 int2_word16 int2_word16 int2_word16 int2_word16 int2_word16 + +{-# INLINABLE inet #-} +inet :: Encoder Data.Inet +inet i@(Data.InetIPv4 ipv4) = + premap (const (Data.afInet, Data.maxNetmaskIPv4, Data.isCidr, Data.ipv4Size, ipv4)) inetIPv4 i +inet i@(Data.InetIPv4Subnet ipv4 netmask) = + premap (const (Data.afInet, netmask, Data.isCidr, Data.ipv4Size, ipv4)) inetIPv4 i +inet i@(Data.InetIPv6 ipv6) = + premap (const (Data.afInet6, Data.maxNetmaskIPv6, Data.isCidr, Data.ipv6Size, ipv6)) inetIPv6 i +inet i@(Data.InetIPv6Subnet ipv6 netmask) = + premap (const (Data.afInet6, netmask, Data.isCidr, Data.ipv6Size, ipv6)) inetIPv6 i + {-# INLINABLE json_ast #-} json_ast :: Encoder Aeson.Value #if MIN_VERSION_aeson(0,10,0) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/postgresql-binary-0.9.0.1/postgresql-binary.cabal new/postgresql-binary-0.9.3/postgresql-binary.cabal --- old/postgresql-binary-0.9.0.1/postgresql-binary.cabal 2016-05-29 01:29:32.000000000 +0200 +++ new/postgresql-binary-0.9.3/postgresql-binary.cabal 2017-02-13 16:15:39.000000000 +0100 @@ -1,7 +1,7 @@ name: postgresql-binary version: - 0.9.0.1 + 0.9.3 synopsis: Encoders and decoders for the PostgreSQL's binary format description: @@ -12,7 +12,7 @@ is based on this library. . It supports all Postgres versions starting from 8.3 - and is tested against 8.3, 9.3 and 9.4 + and is tested against 8.3, 9.3 and 9.5 with the @integer_datetimes@ setting off and on. category: PostgreSQL, Database, Codecs, Parsing @@ -72,13 +72,13 @@ -- parsing: binary-parser >= 0.5 && < 0.6, -- data: - aeson >= 0.9 && < 0.12, + aeson >= 0.9 && < 2, uuid == 1.3.*, time >= 1.4 && < 2, scientific >= 0.2 && < 0.4, bytestring >= 0.10.4 && < 0.11, text >= 1 && < 2, - vector >= 0.10 && < 0.12, + vector >= 0.10 && < 0.13, -- errors: loch-th == 0.2.*, placeholders == 0.1.*, @@ -119,27 +119,18 @@ tasty-smallcheck == 0.8.*, tasty-hunit == 0.9.*, quickcheck-instances >= 0.3.11 && < 0.4, - QuickCheck >= 2.8.1 && < 2.9, + QuickCheck >= 2.8.1 && < 2.10, -- data: aeson, - json-ast == 0.2.*, - uuid == 1.3.*, - time >= 1.4 && < 2, - scientific >= 0.2 && < 0.4, - bytestring >= 0.10.4 && < 0.11, - text >= 1 && < 2, - vector >= 0.10 && < 0.12, - -- errors: - loch-th == 0.2.*, - placeholders == 0.1.*, - -- general: + json-ast == 0.3.*, conversion == 1.*, conversion-bytestring == 1.*, conversion-text == 1.*, - either == 4.*, - transformers, - rebase >= 0.4 && < 2, - base + -- debugging: + loch-th == 0.2.*, + placeholders == 0.1.*, + -- general: + rerebase >= 1.0.2 && < 2 benchmark encoding @@ -162,15 +153,8 @@ postgresql-binary, -- benchmarking: criterion >= 1.0 && < 1.2, - -- data: - time, - scientific, - text, - bytestring, -- general: - deepseq >= 1.3 && < 1.5, - mtl-prelude < 3, - base-prelude + rerebase < 2 benchmark decoding @@ -193,12 +177,5 @@ postgresql-binary, -- benchmarking: criterion >= 1.0 && < 1.2, - -- data: - time, - scientific, - text, - bytestring, -- general: - deepseq >= 1.3 && < 1.5, - mtl-prelude < 3, - base-prelude + rerebase < 2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/postgresql-binary-0.9.0.1/tasty/Main/Gens.hs new/postgresql-binary-0.9.3/tasty/Main/Gens.hs --- old/postgresql-binary-0.9.0.1/tasty/Main/Gens.hs 2016-05-29 01:29:32.000000000 +0200 +++ new/postgresql-binary-0.9.3/tasty/Main/Gens.hs 2017-02-13 16:15:39.000000000 +0100 @@ -3,17 +3,16 @@ import Main.Prelude hiding (assert, isRight, isLeft, choose) import Test.QuickCheck hiding (vector) import Test.QuickCheck.Instances -import JSONAST (JSON) +import JSONAST import qualified Main.PTI as PTI import qualified Data.Scientific as Scientific import qualified Data.UUID as UUID import qualified Data.Vector as Vector -import qualified Rebase.Data.HashMap.Strict as HashMap +import qualified Data.HashMap.Strict as HashMap import qualified PostgreSQL.Binary.Data as Data import qualified PostgreSQL.Binary.Encoder as Encoder import qualified Data.Text as Text import qualified Data.Aeson as Aeson -import qualified JSONAST -- * Generators @@ -43,17 +42,17 @@ maxFreq = 6 null = - pure JSONAST.Null + pure JSON_Null bool = - fmap JSONAST.Bool arbitrary + fmap JSON_Bool arbitrary number = - fmap JSONAST.Number arbitrary + fmap JSON_Number arbitrary string = - fmap JSONAST.String text + fmap JSON_String text array = - fmap JSONAST.Array (vector (byDepth (succ depth))) + fmap JSON_Array (vector (byDepth (succ depth))) object = - fmap JSONAST.Object (hashMap text (byDepth (succ depth))) + fmap JSON_Object (hashMap text (byDepth (succ depth))) vector :: Gen a -> Gen (Vector a) vector element = @@ -121,6 +120,16 @@ uuid = UUID.fromWords <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary +inet :: Gen Data.Inet +inet = do + ipv6 <- choose (True, False) + subnetOn <- choose (True, False) + case (ipv6, subnetOn) of + (False, False) -> Data.InetIPv4 <$> ((,,,) <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary) + (False, True) -> Data.InetIPv4Subnet <$> ((,,,) <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary) <*> choose (0, Data.maxNetmaskIPv4 - 1) + (True, False) -> Data.InetIPv6 <$> ((,,,,,,,) <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary) + (True, True) -> Data.InetIPv6Subnet <$> ((,,,,,,,) <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary) <*> choose (0, Data.maxNetmaskIPv6 - 1) + arrayRep :: Gen (Word32, Data.Array) arrayRep = do diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/postgresql-binary-0.9.0.1/tasty/Main/Prelude.hs new/postgresql-binary-0.9.3/tasty/Main/Prelude.hs --- old/postgresql-binary-0.9.0.1/tasty/Main/Prelude.hs 2016-05-29 01:29:32.000000000 +0200 +++ new/postgresql-binary-0.9.3/tasty/Main/Prelude.hs 2017-02-13 16:15:39.000000000 +0100 @@ -11,9 +11,9 @@ where --- rebase +-- rerebase ------------------------- -import Rebase.Prelude as Exports hiding (assert, Data, fail) +import Prelude as Exports hiding (assert, Data, fail, check) -- conversion ------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/postgresql-binary-0.9.0.1/tasty/Main.hs new/postgresql-binary-0.9.3/tasty/Main.hs --- old/postgresql-binary-0.9.0.1/tasty/Main.hs 2016-05-29 01:29:32.000000000 +0200 +++ new/postgresql-binary-0.9.3/tasty/Main.hs 2017-02-13 16:15:39.000000000 +0100 @@ -36,6 +36,24 @@ else [] other = [ + let + sql = + "select (1, 'a')" + decoder _ = + Decoder.composite ((,) <$> Decoder.compositeNonNullValue Decoder.int <*> Decoder.compositeNonNullValue Decoder.char) + expected = + (1 :: Int64, 'a') + in select sql decoder expected + , + let + sql = + "select (1, null)" + decoder _ = + Decoder.composite ((,) <$> Decoder.compositeNonNullValue Decoder.int <*> Decoder.compositeValue Decoder.char) + expected = + (1 :: Int64, Nothing :: Maybe Char) + in select sql decoder expected + , select "SELECT '1 year 2 months 3 days 4 hours 5 minutes 6 seconds 332211 microseconds' :: interval" (bool Decoder.interval_float Decoder.interval_int) (picosecondsToDiffTime (10^6 * (332211 + 10^6 * (6 + 60 * (5 + 60 * (4 + 24 * (3 + 31 * (2 + 12)))))))) @@ -123,6 +141,8 @@ , stdRoundtrip "uuid" Gens.uuid PTI.uuid Encoder.uuid Decoder.uuid , + stdRoundtrip "inet" Gens.inet PTI.inet Encoder.inet Decoder.inet + , stdRoundtrip "int2_int16" Gens.auto PTI.int2 Encoder.int2_int16 Decoder.int , stdRoundtrip "int2_word16" Gens.auto PTI.int2 Encoder.int2_word16 Decoder.int