diff --git a/postgrest.cabal b/postgrest.cabal index be6e6320b..585018f28 100644 --- a/postgrest.cabal +++ b/postgrest.cabal @@ -40,7 +40,8 @@ library PostgREST.RangeQuery PostgREST.Types other-modules: Paths_postgrest - PostgREST.QueryBuilder.Private + PostgREST.Private.Common + PostgREST.Private.QueryFragment hs-source-dirs: src build-depends: base >= 4.9 && < 4.13 , HTTP >= 4000.3.7 && < 4000.4 diff --git a/src/PostgREST/DbStructure.hs b/src/PostgREST/DbStructure.hs index 691010b29..e459eccd9 100644 --- a/src/PostgREST/DbStructure.hs +++ b/src/PostgREST/DbStructure.hs @@ -40,21 +40,10 @@ import Unsafe (unsafeHead) import Control.Applicative +import PostgREST.Private.Common import PostgREST.Types import Protolude -column :: HD.Value a -> HD.Row a -column = HD.column . HD.nonNullable - -nullableColumn :: HD.Value a -> HD.Row (Maybe a) -nullableColumn = HD.column . HD.nullable - -element :: HD.Value a -> HD.Array a -element = HD.element . HD.nonNullable - -param :: HE.Value a -> HE.Params a -param = HE.param . HE.nonNullable - getDbStructure :: Schema -> PgVersion -> HT.Transaction DbStructure getDbStructure schema pgVer = do HT.sql "set local schema ''" -- for getting the fully qualified name(schema.name) of every db object diff --git a/src/PostgREST/Private/Common.hs b/src/PostgREST/Private/Common.hs new file mode 100644 index 000000000..fafabdc04 --- /dev/null +++ b/src/PostgREST/Private/Common.hs @@ -0,0 +1,22 @@ +{-| +Module : PostgREST.Common +Description : Common helper functions. +-} +module PostgREST.Private.Common where + +import Data.Maybe +import qualified Hasql.Decoders as HD +import qualified Hasql.Encoders as HE +import Protolude + +column :: HD.Value a -> HD.Row a +column = HD.column . HD.nonNullable + +nullableColumn :: HD.Value a -> HD.Row (Maybe a) +nullableColumn = HD.column . HD.nullable + +element :: HD.Value a -> HD.Array a +element = HD.element . HD.nonNullable + +param :: HE.Value a -> HE.Params a +param = HE.param . HE.nonNullable diff --git a/src/PostgREST/QueryBuilder/Private.hs b/src/PostgREST/Private/QueryFragment.hs similarity index 98% rename from src/PostgREST/QueryBuilder/Private.hs rename to src/PostgREST/Private/QueryFragment.hs index 8cb9ec274..14cede69a 100644 --- a/src/PostgREST/QueryBuilder/Private.hs +++ b/src/PostgREST/Private/QueryFragment.hs @@ -1,11 +1,11 @@ {-# LANGUAGE LambdaCase #-} {-| -Module : PostgREST.QueryBuilder.Private +Module : PostgREST.Private.QueryFragment Description : Helper functions for PostgREST.QueryBuilder. Any function that outputs a SqlFragment should be in this module. -} -module PostgREST.QueryBuilder.Private where +module PostgREST.Private.QueryFragment where import qualified Data.HashMap.Strict as HM import Data.Maybe diff --git a/src/PostgREST/QueryBuilder.hs b/src/PostgREST/QueryBuilder.hs index 7e0061d7f..96ceee54c 100644 --- a/src/PostgREST/QueryBuilder.hs +++ b/src/PostgREST/QueryBuilder.hs @@ -27,12 +27,12 @@ import Data.Tree (Tree (..)) import Data.Maybe -import PostgREST.QueryBuilder.Private -import PostgREST.RangeQuery (allRange, rangeLimit, - rangeOffset) +import PostgREST.Private.QueryFragment +import PostgREST.RangeQuery (allRange, rangeLimit, + rangeOffset) import PostgREST.Types -import Protolude hiding (cast, intercalate, - replace) +import Protolude hiding (cast, intercalate, + replace) readRequestToQuery :: Bool -> ReadRequest -> SqlQuery readRequestToQuery isParent (Node (Select colSelects mainQi tblAlias implJoins logicForest joinConditions_ ordts range, _) forest) = diff --git a/src/PostgREST/Statements.hs b/src/PostgREST/Statements.hs index e66a43ad4..45097029f 100644 --- a/src/PostgREST/Statements.hs +++ b/src/PostgREST/Statements.hs @@ -17,22 +17,25 @@ module PostgREST.Statements ( ) where -import Control.Lens ((^?)) -import Data.Aeson as JSON -import qualified Data.Aeson.Lens as L -import qualified Data.ByteString.Char8 as BS +import Control.Lens ((^?)) +import Data.Aeson as JSON +import qualified Data.Aeson.Lens as L +import qualified Data.ByteString.Char8 as BS import Data.Maybe -import Data.Text (intercalate, unwords) -import Data.Text.Encoding (encodeUtf8) -import qualified Hasql.Decoders as HD -import qualified Hasql.Encoders as HE -import qualified Hasql.Statement as H -import PostgREST.ApiRequest (PreferRepresentation (..)) -import PostgREST.QueryBuilder.Private +import Data.Text (intercalate, + unwords) +import Data.Text.Encoding (encodeUtf8) +import qualified Hasql.Decoders as HD +import qualified Hasql.Encoders as HE +import qualified Hasql.Statement as H +import PostgREST.ApiRequest (PreferRepresentation (..)) +import PostgREST.Private.Common +import PostgREST.Private.QueryFragment import PostgREST.Types -import Protolude hiding (cast, - intercalate, replace) -import Text.InterpolatedString.Perl6 (qc) +import Protolude hiding (cast, + intercalate, + replace) +import Text.InterpolatedString.Perl6 (qc) {-| The generic query result format used by API responses. The location header is represented as a list of strings containing variable bindings like @@ -187,17 +190,3 @@ createExplainStatement countQuery = unicodeStatement :: Text -> HE.Params a -> HD.Result b -> Bool -> H.Statement a b unicodeStatement = H.Statement . encodeUtf8 - --- Helper hasql functions - -column :: HD.Value a -> HD.Row a -column = HD.column . HD.nonNullable - -nullableColumn :: HD.Value a -> HD.Row (Maybe a) -nullableColumn = HD.column . HD.nullable - -element :: HD.Value a -> HD.Array a -element = HD.element . HD.nonNullable - -param :: HE.Value a -> HE.Params a -param = HE.param . HE.nonNullable