postgresql-binary 0.13.1.3 → 0.14
raw patch · 7 files changed
+63/−56 lines, 7 filesdep +iproutedep −network-ip
Dependencies added: iproute
Dependencies removed: network-ip
Files
- CHANGELOG.md +4/−0
- library/PostgreSQL/Binary/Decoding.hs +10/−13
- library/PostgreSQL/Binary/Encoding.hs +2/−2
- library/PostgreSQL/Binary/Encoding/Builders.hs +29/−23
- postgresql-binary.cabal +3/−3
- tasty/Main.hs +2/−0
- tasty/Main/Gens.hs +13/−15
CHANGELOG.md view
@@ -1,3 +1,7 @@+# 0.14++- Moved to "iproute" from "network-ip" for inet datatypes+ # 0.13 - Removed `PostgreSQL.Binary.Data`. Because it was causing Haddock in the dependant packages to unpredictably redirect to it instead of the original location regardless of whether they were imported from it.
library/PostgreSQL/Binary/Decoding.hs view
@@ -65,13 +65,13 @@ import qualified Data.Aeson as Aeson import qualified Data.ByteString as ByteString import qualified Data.ByteString.Lazy as LazyByteString+import qualified Data.IP as IP import qualified Data.Text as Text import qualified Data.Text.Encoding as Text import qualified Data.Text.Encoding.Error as Text import qualified Data.Text.Lazy.Encoding as LazyText import qualified Data.UUID as UUID import qualified Data.Vector as Vector-import qualified Network.IP.Addr as IPAddr import qualified PostgreSQL.Binary.Inet as Inet import qualified PostgreSQL.Binary.Integral as Integral import qualified PostgreSQL.Binary.Interval as Interval@@ -155,35 +155,32 @@ UUID.fromWords <$> intOfSize 4 <*> intOfSize 4 <*> intOfSize 4 <*> intOfSize 4 {-# INLINE ip4 #-}-ip4 :: Value IPAddr.IP4+ip4 :: Value IP.IPv4 ip4 =- IPAddr.ip4FromOctets <$> intOfSize 1 <*> intOfSize 1 <*> intOfSize 1 <*> intOfSize 1+ IP.toIPv4w <$> intOfSize 4 {-# INLINE ip6 #-}-ip6 :: Value IPAddr.IP6+ip6 :: Value IP.IPv6 ip6 =- IPAddr.ip6FromWords <$> intOfSize 2 <*> intOfSize 2 <*> intOfSize 2 <*> intOfSize 2 <*> intOfSize 2 <*> intOfSize 2 <*> intOfSize 2 <*> intOfSize 2+ IP.toIPv6w <$> ((,,,) <$> intOfSize 4 <*> intOfSize 4 <*> intOfSize 4 <*> intOfSize 4) {-# INLINEABLE inet #-}-inet :: Value (IPAddr.NetAddr IPAddr.IP)+inet :: Value IP.IPRange inet = do af <- intOfSize 1 netmask <- intOfSize 1- isCidr <- intOfSize 1- ipSize <- intOfSize 1+ isCidr <- intOfSize 1 :: Value Int -- unused+ ipSize <- intOfSize 1 :: Value Int -- unused if | af == Inet.inetAddressFamily -> do ip <- ip4- return $ inetFromBytes af netmask isCidr ipSize (IPAddr.IPv4 ip)+ return . IP.IPv4Range $ IP.makeAddrRange ip netmask | af == Inet.inet6AddressFamily -> do ip <- ip6- return $ inetFromBytes af netmask isCidr ipSize (IPAddr.IPv6 ip)+ return . IP.IPv6Range $ IP.makeAddrRange ip netmask | otherwise -> BinaryParser.failure ("Unknown address family: " <> fromString (show af))- where- inetFromBytes :: Word8 -> Word8 -> Word8 -> Int8 -> IPAddr.IP -> IPAddr.NetAddr IPAddr.IP- inetFromBytes _ netmask _ _ ip = IPAddr.netAddr ip netmask {-# INLINEABLE json_ast #-} json_ast :: Value Aeson.Value
library/PostgreSQL/Binary/Encoding.hs view
@@ -70,8 +70,8 @@ import qualified ByteString.StrictBuilder as C import qualified Data.Aeson as R import qualified Data.ByteString.Lazy as N+import qualified Data.IP as G import qualified Data.Text.Lazy as L-import qualified Network.IP.Addr as G import qualified PostgreSQL.Binary.Encoding.Builders as B import PostgreSQL.Binary.Prelude hiding (bool, length) @@ -201,7 +201,7 @@ B.uuid {-# INLINE inet #-}-inet :: G.NetAddr G.IP -> Encoding+inet :: G.IPRange -> Encoding inet = B.inet
library/PostgreSQL/Binary/Encoding/Builders.hs view
@@ -5,6 +5,7 @@ import qualified Data.ByteString.Builder as M import qualified Data.ByteString.Lazy as N import qualified Data.HashMap.Strict as F+import qualified Data.IP as G import qualified Data.Map.Strict as Q import qualified Data.Scientific as D import qualified Data.Text.Encoding as J@@ -12,7 +13,6 @@ import qualified Data.Text.Lazy.Encoding as K import qualified Data.UUID as E import qualified Data.Vector as A-import qualified Network.IP.Addr as G import qualified PostgreSQL.Binary.BuilderPrim as I import qualified PostgreSQL.Binary.Inet as H import qualified PostgreSQL.Binary.Interval as P@@ -160,36 +160,42 @@ (w1, w2, w3, w4) -> int4_word32 w1 <> int4_word32 w2 <> int4_word32 w3 <> int4_word32 w4 {-# INLINEABLE ip4 #-}-ip4 :: G.IP4 -> Builder-ip4 x =- case G.ip4ToOctets x of- (w1, w2, w3, w4) -> word8 w1 <> word8 w2 <> word8 w3 <> word8 w4+ip4 :: G.IPv4 -> Builder+ip4 =+ int4_word32 . G.fromIPv4w {-# INLINEABLE ip6 #-}-ip6 :: G.IP6 -> Builder+ip6 :: G.IPv6 -> Builder ip6 x =- case G.ip6ToWords x of- (w1, w2, w3, w4, w5, w6, w7, w8) ->- int2_word16 w1- <> int2_word16 w2- <> int2_word16 w3- <> int2_word16 w4- <> int2_word16 w5- <> int2_word16 w6- <> int2_word16 w7- <> int2_word16 w8+ case G.fromIPv6w x of+ (w1, w2, w3, w4) -> int4_word32 w1 <> int4_word32 w2 <> int4_word32 w3 <> int4_word32 w4 -{-# INLINEABLE inet #-}-inet :: G.NetAddr G.IP -> Builder-inet i =- case G.netHost i of- G.IPv4 x -> inetAddressFamily <> netLength <> isCidr <> ip4Size <> ip4 x- G.IPv6 x -> inet6AddressFamily <> netLength <> isCidr <> ip6Size <> ip6 x+{-# INLINEABLE ip4range #-}+ip4range :: G.AddrRange G.IPv4 -> Builder+ip4range x =+ case G.addrRangePair x of+ (addr, mlen) -> inetAddressFamily <> netLength mlen <> isCidr <> ip4Size <> ip4 addr where netLength =- word8 (G.netLength i)+ word8 . fromIntegral isCidr = false1++{-# INLINEABLE ip6range #-}+ip6range :: G.AddrRange G.IPv6 -> Builder+ip6range x =+ case G.addrRangePair x of+ (addr, mlen) -> inet6AddressFamily <> netLength mlen <> isCidr <> ip6Size <> ip6 addr+ where+ netLength =+ word8 . fromIntegral+ isCidr =+ false1++{-# INLINEABLE inet #-}+inet :: G.IPRange -> Builder+inet (G.IPv4Range x) = ip4range x+inet (G.IPv6Range x) = ip6range x {-# NOINLINE inetAddressFamily #-} inetAddressFamily :: Builder
postgresql-binary.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: postgresql-binary-version: 0.13.1.3+version: 0.14 synopsis: Encoders and decoders for the PostgreSQL's binary format description: An API for dealing with PostgreSQL's binary data format.@@ -90,7 +90,7 @@ , bytestring >=0.10.4 && <0.13 , bytestring-strict-builder >=0.4.5.4 && <0.5 , containers >=0.5 && <0.8- , network-ip >=0.3 && <0.4+ , iproute >=1.7 && <2 , scientific >=0.3 && <0.4 , text >=1.2 && <3 , time >=1.9 && <2@@ -118,7 +118,7 @@ build-depends: , aeson >=2 && <3- , network-ip >=0.2 && <1+ , iproute >=1.4 && <2 , postgresql-binary , postgresql-libpq >=0.9 && <0.11 , QuickCheck >=2.10 && <3
tasty/Main.hs view
@@ -136,6 +136,8 @@ primitiveRoundtrip "bytea_lazy" Gens.auto PTI.bytea A.bytea_lazy B.bytea_lazy, primitiveRoundtrip "uuid" Gens.uuid PTI.uuid A.uuid B.uuid, primitiveRoundtrip "inet" Gens.inet PTI.inet A.inet B.inet,+ select "SELECT '127.0.0.1' :: inet" (const B.inet) (read "127.0.0.1"),+ select "SELECT '::1' :: inet" (const B.inet) (read "::1"), primitiveRoundtrip "int2_int16" Gens.auto PTI.int2 A.int2_int16 B.int, primitiveRoundtrip "int2_word16" Gens.auto PTI.int2 A.int2_word16 B.int, primitiveRoundtrip "int4_int32" Gens.auto PTI.int4 A.int4_int32 B.int,
tasty/Main/Gens.hs view
@@ -4,12 +4,12 @@ import qualified Data.Aeson.Key as AesonKey import qualified Data.Aeson.KeyMap as AesonKeyMap import qualified Data.HashMap.Strict as HashMap+import qualified Data.IP as IP import qualified Data.Scientific as Scientific import qualified Data.Text as Text import qualified Data.UUID as UUID import qualified Data.Vector as Vector import Main.Prelude hiding (choose, isLeft, isRight)-import qualified Network.IP.Addr as IPAddr import Test.QuickCheck hiding (vector) maybeOf :: Gen a -> Gen (Maybe a)@@ -126,26 +126,24 @@ uuid = UUID.fromWords <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary -inet :: Gen (IPAddr.NetAddr IPAddr.IP)+inet :: Gen IP.IPRange inet = do ipv6 <- choose (True, False) if ipv6 then- IPAddr.netAddr- <$> ( IPAddr.IPv6- <$> ( IPAddr.ip6FromWords- <$> arbitrary- <*> arbitrary- <*> arbitrary- <*> arbitrary- <*> arbitrary- <*> arbitrary- <*> arbitrary- <*> arbitrary+ IP.IPv6Range+ <$> ( IP.makeAddrRange+ <$> ( IP.toIPv6w+ <$> ( (,,,)+ <$> arbitrary+ <*> arbitrary+ <*> arbitrary+ <*> arbitrary+ ) )+ <*> choose (0, 128) )- <*> choose (0, 128)- else IPAddr.netAddr <$> (IPAddr.IPv4 <$> (IPAddr.ip4FromOctets <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary)) <*> choose (0, 32)+ else IP.IPv4Range <$> (IP.makeAddrRange <$> (IP.toIPv4w <$> arbitrary) <*> choose (0, 32)) array3 :: Gen a -> Gen [[[a]]] array3 gen =