From 455912c1dde3b6407673936f23816bd7a6b9d8f0 Mon Sep 17 00:00:00 2001 From: Michal Kozakiewicz Date: Wed, 3 Nov 2021 11:57:57 +0000 Subject: [PATCH 1/5] Some dates require year padding to be properly parsed by PostgreSQL and SQLite --- Test/Test.hs | 22 +++++++--- opaleye-sqlite/src/Opaleye/SQLite/PGTypes.hs | 30 ++++++------- src/Opaleye/Internal/PGTypesExternal.hs | 46 ++++++++++---------- 3 files changed, 53 insertions(+), 45 deletions(-) diff --git a/Test/Test.hs b/Test/Test.hs index 3e6205176..27714357d 100644 --- a/Test/Test.hs +++ b/Test/Test.hs @@ -6,11 +6,13 @@ module Main where import qualified Configuration.Dotenv as Dotenv +import qualified Connection import Control.Applicative ((<$>), (<*>), (<|>)) import qualified Control.Applicative as A import Control.Arrow ((&&&), (***), (<<<), (>>>)) import qualified Control.Arrow as Arr import qualified Data.Aeson as Json +import qualified Data.ByteString as SBS import qualified Data.Function as F import qualified Data.List as L import Data.Monoid ((<>)) @@ -19,10 +21,9 @@ import qualified Data.Profunctor as P import qualified Data.Profunctor.Product as PP import qualified Data.Profunctor.Product.Default as D import qualified Data.String as String -import qualified Data.ByteString as SBS import qualified Data.Text as T -import qualified Data.Time.Compat as Time import qualified Data.Time.Clock.POSIX.Compat as Time +import qualified Data.Time.Compat as Time import qualified Database.PostgreSQL.Simple as PGS import qualified Database.PostgreSQL.Simple.Range as R import GHC.Int (Int64) @@ -30,16 +31,15 @@ import Opaleye (Field, Nullable, Select, SelectArr, (.==), (.>)) import qualified Opaleye as O import qualified Opaleye.Internal.Aggregate as IA -import Opaleye.Internal.RunQuery (DefaultFromField) -import Opaleye.Internal.MaybeFields as OM import Opaleye.Internal.Locking as OL -import qualified Connection +import Opaleye.Internal.MaybeFields as OM +import Opaleye.Internal.RunQuery (DefaultFromField) import qualified QuickCheck import System.Environment (lookupEnv) import Test.Hspec import qualified TypeFamilies () -import Opaleye.Manipulation (Delete (Delete)) +import Opaleye.Manipulation (Delete (Delete)) {- @@ -1247,8 +1247,12 @@ testLiterals = do it "sqlBool" $ testLiteral O.sqlBool True it "sqlUUID" $ testLiteral O.sqlUUID (read "c2cc10e1-57d6-4b6f-9899-38d972112d8c") it "sqlDay" $ testLiteral O.sqlDay (read "2018-11-29") + it "sqlDayPadded" $ testLiteral O.sqlDay (read "20-11-21") it "sqlUTCTime" $ testLiteral O.sqlUTCTime (read "2018-11-29 11:22:33 UTC") + it "sqlUTCTimePadded" $ testLiteral O.sqlUTCTime (read "20-11-21 11:22:33 UTC") it "sqlLocalTime" $ testLiteral O.sqlLocalTime (read "2018-11-29 11:22:33") + it "sqlLocalTimePadded" $ testLiteral O.sqlLocalTime (read "20-11-21 11:22:33") + it "sqlInterval" $ testLiteral O.sqlInterval (Time.calendarTimeTime 1) -- ZonedTime has no Eq instance, so we compare on the result of 'zonedTimeToUTC' it "sqlZonedTime" $ @@ -1256,7 +1260,10 @@ testLiterals = do testH (pure (O.sqlZonedTime value)) (\r -> map Time.zonedTimeToUTC r `shouldBe` [Time.zonedTimeToUTC value]) - it "sqlInterval" $ testLiteral O.sqlInterval (Time.calendarTimeTime 1) + it "sqlZonedTimePadded" $ + let value = read "20-11-21 11:22:33 UTC" :: Time.ZonedTime in + testH (pure (O.sqlZonedTime value)) + (\r -> map Time.zonedTimeToUTC r `shouldBe` [Time.zonedTimeToUTC value]) -- Check that MaybeFields's "Nothings" are not distinct, even if we -- fmap different values over their inner fields. @@ -1379,6 +1386,7 @@ testAddIntervalFromTimeToTime = do (realToFrac (Time.ctTime c :: Time.NominalDiffTime) :: Time.DiffTime) + Time.timeOfDayToTime t + main :: IO () main = do let envVarName = "POSTGRES_CONNSTRING" diff --git a/opaleye-sqlite/src/Opaleye/SQLite/PGTypes.hs b/opaleye-sqlite/src/Opaleye/SQLite/PGTypes.hs index 27c5a35d1..5156ed643 100644 --- a/opaleye-sqlite/src/Opaleye/SQLite/PGTypes.hs +++ b/opaleye-sqlite/src/Opaleye/SQLite/PGTypes.hs @@ -2,22 +2,22 @@ module Opaleye.SQLite.PGTypes (module Opaleye.SQLite.PGTypes) where -import Opaleye.SQLite.Internal.Column (Column) -import qualified Opaleye.SQLite.Internal.Column as C -import qualified Opaleye.SQLite.Internal.PGTypes as IPT +import Opaleye.SQLite.Internal.Column (Column) +import qualified Opaleye.SQLite.Internal.Column as C +import qualified Opaleye.SQLite.Internal.PGTypes as IPT -import qualified Opaleye.SQLite.Internal.HaskellDB.PrimQuery as HPQ +import qualified Opaleye.SQLite.Internal.HaskellDB.PrimQuery as HPQ import qualified Opaleye.SQLite.Internal.HaskellDB.Sql.Default as HSD (quote) -import qualified Data.CaseInsensitive as CI -import qualified Data.Text as SText -import qualified Data.Text.Lazy as LText -import qualified Data.ByteString as SByteString -import qualified Data.ByteString.Lazy as LByteString -import qualified Data.Time as Time -import qualified Data.UUID as UUID +import qualified Data.ByteString as SByteString +import qualified Data.ByteString.Lazy as LByteString +import qualified Data.CaseInsensitive as CI +import qualified Data.Text as SText +import qualified Data.Text.Lazy as LText +import qualified Data.Time as Time +import qualified Data.UUID as UUID -import Data.Int (Int64) +import Data.Int (Int64) data PGBool data PGDate @@ -95,13 +95,13 @@ unsafePgFormatTime = IPT.unsafePgFormatTime #-} pgDay :: Time.Day -> Column PGDate -pgDay = IPT.unsafePgFormatTime "date" "'%F'" +pgDay = IPT.unsafePgFormatTime "date" "'%0Y-%m-%d'" pgUTCTime :: Time.UTCTime -> Column PGTimestamptz -pgUTCTime = IPT.unsafePgFormatTime "timestamptz" "'%FT%TZ'" +pgUTCTime = IPT.unsafePgFormatTime "timestamptz" "'%0Y-%m-%dT%TZ'" pgLocalTime :: Time.LocalTime -> Column PGTimestamp -pgLocalTime = IPT.unsafePgFormatTime "timestamp" "'%FT%T'" +pgLocalTime = IPT.unsafePgFormatTime "timestamp" "'%0Y-%m-%dT%T'" pgTimeOfDay :: Time.TimeOfDay -> Column PGTime pgTimeOfDay = IPT.unsafePgFormatTime "time" "'%T'" diff --git a/src/Opaleye/Internal/PGTypesExternal.hs b/src/Opaleye/Internal/PGTypesExternal.hs index cf833a5da..73ce51197 100644 --- a/src/Opaleye/Internal/PGTypesExternal.hs +++ b/src/Opaleye/Internal/PGTypesExternal.hs @@ -1,32 +1,32 @@ -{-# LANGUAGE EmptyDataDecls #-} -{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE EmptyDataDecls #-} +{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeSynonymInstances #-} module Opaleye.Internal.PGTypesExternal (module Opaleye.Internal.PGTypesExternal, IsSqlType(..)) where -import Opaleye.Internal.Column (Column) -import qualified Opaleye.Internal.Column as C -import qualified Opaleye.Internal.PGTypes as IPT -import Opaleye.Internal.PGTypes (IsSqlType(..)) +import Opaleye.Internal.Column (Column) +import qualified Opaleye.Internal.Column as C +import Opaleye.Internal.PGTypes (IsSqlType (..)) +import qualified Opaleye.Internal.PGTypes as IPT -import qualified Opaleye.Internal.HaskellDB.PrimQuery as HPQ +import qualified Opaleye.Internal.HaskellDB.PrimQuery as HPQ import qualified Opaleye.Internal.HaskellDB.Sql.Default as HSD -import qualified Data.CaseInsensitive as CI -import qualified Data.Aeson as Ae -import qualified Data.Text as SText -import qualified Data.Text.Lazy as LText -import qualified Data.ByteString as SByteString -import qualified Data.ByteString.Lazy as LByteString -import Data.Scientific as Sci -import qualified Data.Time.Compat as Time -import qualified Data.Time.Format.ISO8601.Compat as Time.Format.ISO8601 -import qualified Data.UUID as UUID +import qualified Data.Aeson as Ae +import qualified Data.ByteString as SByteString +import qualified Data.ByteString.Lazy as LByteString +import qualified Data.CaseInsensitive as CI +import Data.Scientific as Sci +import qualified Data.Text as SText +import qualified Data.Text.Lazy as LText +import qualified Data.Time.Compat as Time +import qualified Data.Time.Format.ISO8601.Compat as Time.Format.ISO8601 +import qualified Data.UUID as UUID -import Data.Int (Int64) +import Data.Int (Int64) -import qualified Database.PostgreSQL.Simple.Range as R +import qualified Database.PostgreSQL.Simple.Range as R instance C.SqlNum SqlFloat8 where sqlFromInteger = pgDouble . fromInteger @@ -102,16 +102,16 @@ pgUUID :: UUID.UUID -> Column PGUuid pgUUID = IPT.literalColumn . HPQ.StringLit . UUID.toString pgDay :: Time.Day -> Column PGDate -pgDay = IPT.unsafePgFormatTime "date" "'%F'" +pgDay = IPT.unsafePgFormatTime "date" "'%0Y-%m-%d'" pgUTCTime :: Time.UTCTime -> Column PGTimestamptz -pgUTCTime = IPT.unsafePgFormatTime "timestamptz" "'%FT%T%QZ'" +pgUTCTime = IPT.unsafePgFormatTime "timestamptz" "'%0Y-%m-%dT%T%QZ'" pgLocalTime :: Time.LocalTime -> Column PGTimestamp -pgLocalTime = IPT.unsafePgFormatTime "timestamp" "'%FT%T%Q'" +pgLocalTime = IPT.unsafePgFormatTime "timestamp" "'%0Y-%m-%dT%T%Q'" pgZonedTime :: Time.ZonedTime -> Column PGTimestamptz -pgZonedTime = IPT.unsafePgFormatTime "timestamptz" "'%FT%T%Q%z'" +pgZonedTime = IPT.unsafePgFormatTime "timestamptz" "'%0Y-%m-%dT%T%Q%z'" pgTimeOfDay :: Time.TimeOfDay -> Column PGTime pgTimeOfDay = IPT.unsafePgFormatTime "time" "'%T%Q'" From cd2aa6534961cc627c43877b17d26c14d1644b09 Mon Sep 17 00:00:00 2001 From: Michal Kozakiewicz Date: Thu, 4 Nov 2021 11:16:37 +0000 Subject: [PATCH 2/5] Use ISO8601 show --- opaleye.cabal | 1 + src/Opaleye/Internal/PGTypes.hs | 31 +++++++++++++------------ src/Opaleye/Internal/PGTypesExternal.hs | 10 ++++---- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/opaleye.cabal b/opaleye.cabal index 6f76c190a..dfa07d824 100644 --- a/opaleye.cabal +++ b/opaleye.cabal @@ -41,6 +41,7 @@ library , semigroups >= 0.13 && < 0.20 , text >= 0.11 && < 1.3 , transformers >= 0.3 && < 0.6 + , time >= 1.9.3 && < 2 , time-compat >= 1.9.5 && < 1.12 , time-locale-compat >= 0.1 && < 0.2 , uuid >= 1.3 && < 1.4 diff --git a/src/Opaleye/Internal/PGTypes.hs b/src/Opaleye/Internal/PGTypes.hs index fdcb563e3..9b653078a 100644 --- a/src/Opaleye/Internal/PGTypes.hs +++ b/src/Opaleye/Internal/PGTypes.hs @@ -2,23 +2,24 @@ module Opaleye.Internal.PGTypes where -import Opaleye.Internal.Column (Column(Column)) -import qualified Opaleye.Internal.Column as C +import Opaleye.Internal.Column (Column (Column)) +import qualified Opaleye.Internal.Column as C import qualified Opaleye.Internal.HaskellDB.PrimQuery as HPQ -import Data.Proxy (Proxy(..)) -import qualified Data.Text as SText -import qualified Data.Text.Encoding as STextEncoding -import qualified Data.Text.Lazy as LText -import qualified Data.Text.Lazy.Encoding as LTextEncoding -import qualified Data.ByteString as SByteString -import qualified Data.ByteString.Lazy as LByteString -import qualified Data.Time.Compat as Time -import qualified Data.Time.Locale.Compat as Locale - -unsafePgFormatTime :: Time.FormatTime t => HPQ.Name -> String -> t -> Column c -unsafePgFormatTime typeName formatString = castToType typeName . format - where format = Time.formatTime Locale.defaultTimeLocale formatString +import qualified Data.ByteString as SByteString +import qualified Data.ByteString.Lazy as LByteString +import Data.Proxy (Proxy (..)) +import qualified Data.Text as SText +import qualified Data.Text.Encoding as STextEncoding +import qualified Data.Text.Lazy as LText +import qualified Data.Text.Lazy.Encoding as LTextEncoding +import qualified Data.Time.Format.ISO8601 as Time + +unsafePgFormatTime :: Time.ISO8601 t => HPQ.Name -> t -> Column c +unsafePgFormatTime typeName = castToType typeName . format + where + format = quote . Time.iso8601Show + quote s = "'" ++ s ++ "'" literalColumn :: forall a. IsSqlType a => HPQ.Literal -> Column a literalColumn = Column . HPQ.CastExpr (showSqlType (Proxy :: Proxy a)) . HPQ.ConstExpr diff --git a/src/Opaleye/Internal/PGTypesExternal.hs b/src/Opaleye/Internal/PGTypesExternal.hs index 73ce51197..73b336297 100644 --- a/src/Opaleye/Internal/PGTypesExternal.hs +++ b/src/Opaleye/Internal/PGTypesExternal.hs @@ -102,19 +102,19 @@ pgUUID :: UUID.UUID -> Column PGUuid pgUUID = IPT.literalColumn . HPQ.StringLit . UUID.toString pgDay :: Time.Day -> Column PGDate -pgDay = IPT.unsafePgFormatTime "date" "'%0Y-%m-%d'" +pgDay = IPT.unsafePgFormatTime "date" pgUTCTime :: Time.UTCTime -> Column PGTimestamptz -pgUTCTime = IPT.unsafePgFormatTime "timestamptz" "'%0Y-%m-%dT%T%QZ'" +pgUTCTime = IPT.unsafePgFormatTime "timestamptz" pgLocalTime :: Time.LocalTime -> Column PGTimestamp -pgLocalTime = IPT.unsafePgFormatTime "timestamp" "'%0Y-%m-%dT%T%Q'" +pgLocalTime = IPT.unsafePgFormatTime "timestamp" pgZonedTime :: Time.ZonedTime -> Column PGTimestamptz -pgZonedTime = IPT.unsafePgFormatTime "timestamptz" "'%0Y-%m-%dT%T%Q%z'" +pgZonedTime = IPT.unsafePgFormatTime "timestamptz" pgTimeOfDay :: Time.TimeOfDay -> Column PGTime -pgTimeOfDay = IPT.unsafePgFormatTime "time" "'%T%Q'" +pgTimeOfDay = IPT.unsafePgFormatTime "time" -- "We recommend not using the type time with time zone" -- http://www.postgresql.org/docs/8.3/static/datatype-datetime.html From 4b78c39e15166d10841a62dbea11189e6938ae95 Mon Sep 17 00:00:00 2001 From: Michal Kozakiewicz Date: Thu, 4 Nov 2021 11:20:07 +0000 Subject: [PATCH 3/5] Use the same function for "interval" as well --- src/Opaleye/Internal/PGTypesExternal.hs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Opaleye/Internal/PGTypesExternal.hs b/src/Opaleye/Internal/PGTypesExternal.hs index 73b336297..9a1b2130f 100644 --- a/src/Opaleye/Internal/PGTypesExternal.hs +++ b/src/Opaleye/Internal/PGTypesExternal.hs @@ -120,9 +120,7 @@ pgTimeOfDay = IPT.unsafePgFormatTime "time" -- http://www.postgresql.org/docs/8.3/static/datatype-datetime.html sqlInterval :: Time.CalendarDiffTime -> Column PGInterval -sqlInterval = IPT.castToType "interval" . quote . Time.Format.ISO8601.iso8601Show - where - quote s = "'" ++ s ++ "'" +sqlInterval = IPT.unsafePgFormatTime "interval" pgCiStrictText :: CI.CI SText.Text -> Column PGCitext pgCiStrictText = IPT.literalColumn . HPQ.StringLit . SText.unpack . CI.original From 6b7be180ed227b112c43e2036fa6170bc5cd1569 Mon Sep 17 00:00:00 2001 From: Michal Kozakiewicz Date: Thu, 4 Nov 2021 11:39:40 +0000 Subject: [PATCH 4/5] Remove import refactors --- opaleye-sqlite/src/Opaleye/SQLite/PGTypes.hs | 24 ++++++------- src/Opaleye/Internal/PGTypes.hs | 24 ++++++------- src/Opaleye/Internal/PGTypesExternal.hs | 37 ++++++++++---------- 3 files changed, 41 insertions(+), 44 deletions(-) diff --git a/opaleye-sqlite/src/Opaleye/SQLite/PGTypes.hs b/opaleye-sqlite/src/Opaleye/SQLite/PGTypes.hs index 5156ed643..ac640b935 100644 --- a/opaleye-sqlite/src/Opaleye/SQLite/PGTypes.hs +++ b/opaleye-sqlite/src/Opaleye/SQLite/PGTypes.hs @@ -2,22 +2,22 @@ module Opaleye.SQLite.PGTypes (module Opaleye.SQLite.PGTypes) where -import Opaleye.SQLite.Internal.Column (Column) -import qualified Opaleye.SQLite.Internal.Column as C -import qualified Opaleye.SQLite.Internal.PGTypes as IPT +import Opaleye.SQLite.Internal.Column (Column) +import qualified Opaleye.SQLite.Internal.Column as C +import qualified Opaleye.SQLite.Internal.PGTypes as IPT -import qualified Opaleye.SQLite.Internal.HaskellDB.PrimQuery as HPQ +import qualified Opaleye.SQLite.Internal.HaskellDB.PrimQuery as HPQ import qualified Opaleye.SQLite.Internal.HaskellDB.Sql.Default as HSD (quote) -import qualified Data.ByteString as SByteString -import qualified Data.ByteString.Lazy as LByteString -import qualified Data.CaseInsensitive as CI -import qualified Data.Text as SText -import qualified Data.Text.Lazy as LText -import qualified Data.Time as Time -import qualified Data.UUID as UUID +import qualified Data.CaseInsensitive as CI +import qualified Data.Text as SText +import qualified Data.Text.Lazy as LText +import qualified Data.ByteString as SByteString +import qualified Data.ByteString.Lazy as LByteString +import qualified Data.Time as Time +import qualified Data.UUID as UUID -import Data.Int (Int64) +import Data.Int (Int64) data PGBool data PGDate diff --git a/src/Opaleye/Internal/PGTypes.hs b/src/Opaleye/Internal/PGTypes.hs index 9b653078a..5db9ccb01 100644 --- a/src/Opaleye/Internal/PGTypes.hs +++ b/src/Opaleye/Internal/PGTypes.hs @@ -2,24 +2,22 @@ module Opaleye.Internal.PGTypes where -import Opaleye.Internal.Column (Column (Column)) -import qualified Opaleye.Internal.Column as C +import Opaleye.Internal.Column (Column(Column)) +import qualified Opaleye.Internal.Column as C import qualified Opaleye.Internal.HaskellDB.PrimQuery as HPQ -import qualified Data.ByteString as SByteString -import qualified Data.ByteString.Lazy as LByteString -import Data.Proxy (Proxy (..)) -import qualified Data.Text as SText -import qualified Data.Text.Encoding as STextEncoding -import qualified Data.Text.Lazy as LText -import qualified Data.Text.Lazy.Encoding as LTextEncoding -import qualified Data.Time.Format.ISO8601 as Time +import Data.Proxy (Proxy(..)) +import qualified Data.Text as SText +import qualified Data.Text.Encoding as STextEncoding +import qualified Data.Text.Lazy as LText +import qualified Data.Text.Lazy.Encoding as LTextEncoding +import qualified Data.ByteString as SByteString +import qualified Data.ByteString.Lazy as LByteString +import qualified Data.Time.Format.ISO8601 as Time unsafePgFormatTime :: Time.ISO8601 t => HPQ.Name -> t -> Column c unsafePgFormatTime typeName = castToType typeName . format - where - format = quote . Time.iso8601Show - quote s = "'" ++ s ++ "'" + where format s = "'" ++ Time.iso8601Show s ++ "'" literalColumn :: forall a. IsSqlType a => HPQ.Literal -> Column a literalColumn = Column . HPQ.CastExpr (showSqlType (Proxy :: Proxy a)) . HPQ.ConstExpr diff --git a/src/Opaleye/Internal/PGTypesExternal.hs b/src/Opaleye/Internal/PGTypesExternal.hs index 9a1b2130f..0d29e8d86 100644 --- a/src/Opaleye/Internal/PGTypesExternal.hs +++ b/src/Opaleye/Internal/PGTypesExternal.hs @@ -1,32 +1,31 @@ -{-# LANGUAGE EmptyDataDecls #-} -{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE EmptyDataDecls #-} +{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeSynonymInstances #-} module Opaleye.Internal.PGTypesExternal (module Opaleye.Internal.PGTypesExternal, IsSqlType(..)) where -import Opaleye.Internal.Column (Column) -import qualified Opaleye.Internal.Column as C -import Opaleye.Internal.PGTypes (IsSqlType (..)) -import qualified Opaleye.Internal.PGTypes as IPT +import Opaleye.Internal.Column (Column) +import qualified Opaleye.Internal.Column as C +import qualified Opaleye.Internal.PGTypes as IPT +import Opaleye.Internal.PGTypes (IsSqlType(..)) -import qualified Opaleye.Internal.HaskellDB.PrimQuery as HPQ +import qualified Opaleye.Internal.HaskellDB.PrimQuery as HPQ import qualified Opaleye.Internal.HaskellDB.Sql.Default as HSD -import qualified Data.Aeson as Ae -import qualified Data.ByteString as SByteString -import qualified Data.ByteString.Lazy as LByteString -import qualified Data.CaseInsensitive as CI -import Data.Scientific as Sci -import qualified Data.Text as SText -import qualified Data.Text.Lazy as LText -import qualified Data.Time.Compat as Time -import qualified Data.Time.Format.ISO8601.Compat as Time.Format.ISO8601 -import qualified Data.UUID as UUID +import qualified Data.CaseInsensitive as CI +import qualified Data.Aeson as Ae +import qualified Data.Text as SText +import qualified Data.Text.Lazy as LText +import qualified Data.ByteString as SByteString +import qualified Data.ByteString.Lazy as LByteString +import Data.Scientific as Sci +import qualified Data.Time.Compat as Time +import qualified Data.UUID as UUID -import Data.Int (Int64) +import Data.Int (Int64) -import qualified Database.PostgreSQL.Simple.Range as R +import qualified Database.PostgreSQL.Simple.Range as R instance C.SqlNum SqlFloat8 where sqlFromInteger = pgDouble . fromInteger From 967e48704d664eeb27f2cb6d473ae4978487f70c Mon Sep 17 00:00:00 2001 From: Michal Kozakiewicz Date: Thu, 4 Nov 2021 11:49:35 +0000 Subject: [PATCH 5/5] More imports reformat --- Test/Test.hs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Test/Test.hs b/Test/Test.hs index bafeea99f..0e1cc811b 100644 --- a/Test/Test.hs +++ b/Test/Test.hs @@ -6,13 +6,11 @@ module Main where import qualified Configuration.Dotenv as Dotenv -import qualified Connection import Control.Applicative ((<$>), (<*>), (<|>)) import qualified Control.Applicative as A import Control.Arrow ((&&&), (***), (<<<), (>>>)) import qualified Control.Arrow as Arr import qualified Data.Aeson as Json -import qualified Data.ByteString as SBS import qualified Data.Function as F import qualified Data.List as L import Data.Monoid ((<>)) @@ -21,9 +19,10 @@ import qualified Data.Profunctor as P import qualified Data.Profunctor.Product as PP import qualified Data.Profunctor.Product.Default as D import qualified Data.String as String +import qualified Data.ByteString as SBS import qualified Data.Text as T -import qualified Data.Time.Clock.POSIX.Compat as Time import qualified Data.Time.Compat as Time +import qualified Data.Time.Clock.POSIX.Compat as Time import qualified Database.PostgreSQL.Simple as PGS import qualified Database.PostgreSQL.Simple.Range as R import GHC.Int (Int64) @@ -31,15 +30,16 @@ import Opaleye (Field, Nullable, Select, SelectArr, (.==), (.>)) import qualified Opaleye as O import qualified Opaleye.Internal.Aggregate as IA -import Opaleye.Internal.Locking as OL -import Opaleye.Internal.MaybeFields as OM import Opaleye.Internal.RunQuery (DefaultFromField) +import Opaleye.Internal.MaybeFields as OM +import Opaleye.Internal.Locking as OL +import qualified Connection import qualified QuickCheck import System.Environment (lookupEnv) import Test.Hspec import qualified TypeFamilies () -import Opaleye.Manipulation (Delete (Delete)) +import Opaleye.Manipulation (Delete (Delete)) {-