{-# LINE 1 "src/Database/PostgreSQL/PQTypes/Interval.hsc" #-}
module Database.PostgreSQL.PQTypes.Interval
( Interval(..)
, iyears
, imonths
, idays
, ihours
, iminutes
, iseconds
, imicroseconds
) where
import Data.Int
import Data.List
import Foreign.Storable
import Data.ByteString.Char8 qualified as BS
import Data.Semigroup qualified as SG
import Database.PostgreSQL.PQTypes.Format
import Database.PostgreSQL.PQTypes.FromSQL
import Database.PostgreSQL.PQTypes.Internal.Utils
import Database.PostgreSQL.PQTypes.ToSQL
data Interval = Interval
{ Interval -> Int32
intYears :: !Int32
, Interval -> Int32
intMonths :: !Int32
, Interval -> Int32
intDays :: !Int32
, Interval -> Int32
intHours :: !Int32
, Interval -> Int32
intMinutes :: !Int32
, Interval -> Int32
intSeconds :: !Int32
, Interval -> Int32
intMicroseconds :: !Int32
} deriving (Interval -> Interval -> Bool
(Interval -> Interval -> Bool)
-> (Interval -> Interval -> Bool) -> Eq Interval
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Interval -> Interval -> Bool
== :: Interval -> Interval -> Bool
$c/= :: Interval -> Interval -> Bool
/= :: Interval -> Interval -> Bool
Eq, Eq Interval
Eq Interval =>
(Interval -> Interval -> Ordering)
-> (Interval -> Interval -> Bool)
-> (Interval -> Interval -> Bool)
-> (Interval -> Interval -> Bool)
-> (Interval -> Interval -> Bool)
-> (Interval -> Interval -> Interval)
-> (Interval -> Interval -> Interval)
-> Ord Interval
Interval -> Interval -> Bool
Interval -> Interval -> Ordering
Interval -> Interval -> Interval
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Interval -> Interval -> Ordering
compare :: Interval -> Interval -> Ordering
$c< :: Interval -> Interval -> Bool
< :: Interval -> Interval -> Bool
$c<= :: Interval -> Interval -> Bool
<= :: Interval -> Interval -> Bool
$c> :: Interval -> Interval -> Bool
> :: Interval -> Interval -> Bool
$c>= :: Interval -> Interval -> Bool
>= :: Interval -> Interval -> Bool
$cmax :: Interval -> Interval -> Interval
max :: Interval -> Interval -> Interval
$cmin :: Interval -> Interval -> Interval
min :: Interval -> Interval -> Interval
Ord)
instance Show Interval where
showsPrec :: Int -> Interval -> ShowS
showsPrec Int
_ Interval{Int32
intYears :: Interval -> Int32
intMonths :: Interval -> Int32
intDays :: Interval -> Int32
intHours :: Interval -> Int32
intMinutes :: Interval -> Int32
intSeconds :: Interval -> Int32
intMicroseconds :: Interval -> Int32
intYears :: Int32
intMonths :: Int32
intDays :: Int32
intHours :: Int32
intMinutes :: Int32
intSeconds :: Int32
intMicroseconds :: Int32
..} = String -> ShowS
forall a. [a] -> [a] -> [a]
(++) (String -> ShowS) -> ([String] -> String) -> [String] -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> [String] -> String
forall a. [a] -> [[a]] -> [a]
intercalate String
", " ([String] -> ShowS) -> [String] -> ShowS
forall a b. (a -> b) -> a -> b
$ (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
filter (Bool -> Bool
not (Bool -> Bool) -> (String -> Bool) -> String -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null)
[ Int32 -> ShowS
forall {a}. (Eq a, Num a, Show a) => a -> ShowS
f Int32
intYears String
"year"
, Int32 -> ShowS
forall {a}. (Eq a, Num a, Show a) => a -> ShowS
f Int32
intMonths String
"month"
, Int32 -> ShowS
forall {a}. (Eq a, Num a, Show a) => a -> ShowS
f Int32
intDays String
"day"
, Int32 -> ShowS
forall {a}. (Eq a, Num a, Show a) => a -> ShowS
f Int32
intHours String
"hour"
, Int32 -> ShowS
forall {a}. (Eq a, Num a, Show a) => a -> ShowS
f Int32
intMinutes String
"minute"
, Int32 -> ShowS
forall {a}. (Eq a, Num a, Show a) => a -> ShowS
f Int32
intSeconds String
"second"
, Int32 -> ShowS
forall {a}. (Eq a, Num a, Show a) => a -> ShowS
f Int32
intMicroseconds String
"microsecond"
]
where
f :: a -> ShowS
f a
n String
desc = case a
n of
a
0 -> String
""
a
1 -> a -> String
forall a. Show a => a -> String
show a
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" " String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
desc
a
_ -> a -> String
forall a. Show a => a -> String
show a
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" " String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
desc String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"s"
instance SG.Semigroup Interval where
Interval
a <> :: Interval -> Interval -> Interval
<> Interval
b = Interval
{ intYears :: Int32
intYears = Interval -> Int32
intYears Interval
a Int32 -> Int32 -> Int32
forall a. Num a => a -> a -> a
+ Interval -> Int32
intYears Interval
b
, intMonths :: Int32
intMonths = Interval -> Int32
intMonths Interval
a Int32 -> Int32 -> Int32
forall a. Num a => a -> a -> a
+ Interval -> Int32
intMonths Interval
b
, intDays :: Int32
intDays = Interval -> Int32
intDays Interval
a Int32 -> Int32 -> Int32
forall a. Num a => a -> a -> a
+ Interval -> Int32
intDays Interval
b
, intHours :: Int32
intHours = Interval -> Int32
intHours Interval
a Int32 -> Int32 -> Int32
forall a. Num a => a -> a -> a
+ Interval -> Int32
intHours Interval
b
, intMinutes :: Int32
intMinutes = Interval -> Int32
intMinutes Interval
a Int32 -> Int32 -> Int32
forall a. Num a => a -> a -> a
+ Interval -> Int32
intMinutes Interval
b
, intSeconds :: Int32
intSeconds = Interval -> Int32
intSeconds Interval
a Int32 -> Int32 -> Int32
forall a. Num a => a -> a -> a
+ Interval -> Int32
intSeconds Interval
b
, intMicroseconds :: Int32
intMicroseconds = Interval -> Int32
intMicroseconds Interval
a Int32 -> Int32 -> Int32
forall a. Num a => a -> a -> a
+ Interval -> Int32
intMicroseconds Interval
b
}
instance Monoid Interval where
mempty :: Interval
mempty = Int32
-> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Interval
Interval Int32
0 Int32
0 Int32
0 Int32
0 Int32
0 Int32
0 Int32
0
mappend :: Interval -> Interval -> Interval
mappend = Interval -> Interval -> Interval
forall a. Semigroup a => a -> a -> a
(SG.<>)
instance Storable Interval where
sizeOf :: Interval -> Int
sizeOf Interval
_ = (Int
28)
{-# LINE 71 "src/Database/PostgreSQL/PQTypes/Interval.hsc" #-}
alignment _ = 4
{-# LINE 72 "src/Database/PostgreSQL/PQTypes/Interval.hsc" #-}
peek ptr = Interval
<$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 74 "src/Database/PostgreSQL/PQTypes/Interval.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 4) ptr
{-# LINE 75 "src/Database/PostgreSQL/PQTypes/Interval.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 76 "src/Database/PostgreSQL/PQTypes/Interval.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 12) ptr
{-# LINE 77 "src/Database/PostgreSQL/PQTypes/Interval.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
{-# LINE 78 "src/Database/PostgreSQL/PQTypes/Interval.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 20) ptr
{-# LINE 79 "src/Database/PostgreSQL/PQTypes/Interval.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 24) ptr
{-# LINE 80 "src/Database/PostgreSQL/PQTypes/Interval.hsc" #-}
poke ptr Interval{..} = do
(\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr intYears
{-# LINE 82 "src/Database/PostgreSQL/PQTypes/Interval.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 4) ptr intMonths
{-# LINE 83 "src/Database/PostgreSQL/PQTypes/Interval.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr intDays
{-# LINE 84 "src/Database/PostgreSQL/PQTypes/Interval.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 12) ptr intHours
{-# LINE 85 "src/Database/PostgreSQL/PQTypes/Interval.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 16) ptr intMinutes
{-# LINE 86 "src/Database/PostgreSQL/PQTypes/Interval.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 20) ptr intSeconds
{-# LINE 87 "src/Database/PostgreSQL/PQTypes/Interval.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 24) ptr intMicroseconds
{-# LINE 88 "src/Database/PostgreSQL/PQTypes/Interval.hsc" #-}
instance PQFormat Interval where
pqFormat :: ByteString
pqFormat = String -> ByteString
BS.pack String
"%interval"
instance FromSQL Interval where
type PQBase Interval = Interval
fromSQL :: Maybe (PQBase Interval) -> IO Interval
fromSQL Maybe (PQBase Interval)
Nothing = IO Interval
forall a. IO a
unexpectedNULL
fromSQL (Just PQBase Interval
int) = Interval -> IO Interval
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure PQBase Interval
Interval
int
instance ToSQL Interval where
type PQDest Interval = Interval
toSQL :: forall r.
Interval
-> ParamAllocator -> (Ptr (PQDest Interval) -> IO r) -> IO r
toSQL Interval
int ParamAllocator
_ = Interval -> (Ptr Interval -> IO r) -> IO r
forall t r. Storable t => t -> (Ptr t -> IO r) -> IO r
putAsPtr Interval
int
iyears :: Int32 -> Interval
iyears :: Int32 -> Interval
iyears Int32
v = Interval
forall a. Monoid a => a
mempty { intYears = v }
imonths :: Int32 -> Interval
imonths :: Int32 -> Interval
imonths Int32
v = Interval
forall a. Monoid a => a
mempty { intMonths = v }
idays :: Int32 -> Interval
idays :: Int32 -> Interval
idays Int32
v = Interval
forall a. Monoid a => a
mempty { intDays = v }
ihours :: Int32 -> Interval
ihours :: Int32 -> Interval
ihours Int32
v = Interval
forall a. Monoid a => a
mempty { intHours = v }
iminutes :: Int32 -> Interval
iminutes :: Int32 -> Interval
iminutes Int32
v = Interval
forall a. Monoid a => a
mempty { intMinutes = v }
iseconds :: Int32 -> Interval
iseconds :: Int32 -> Interval
iseconds Int32
v = Interval
forall a. Monoid a => a
mempty { intSeconds = v }
imicroseconds :: Int32 -> Interval
imicroseconds :: Int32 -> Interval
imicroseconds Int32
v = Interval
forall a. Monoid a => a
mempty { intMicroseconds = v }