graphql-engine/server/src-test/Test/Parser/Insert.hs

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

46 lines
1.5 KiB
Haskell
Raw Normal View History

module Test.Parser.Insert
( InsertQueryBuilder (..),
mkInsertQuery,
)
where
import Hasura.Backends.Postgres.SQL.Types (QualifiedTable)
import Hasura.Prelude
import Hasura.RQL.IR.BoolExp (GBoolExp (..))
import Hasura.RQL.IR.Insert (InsertQueryP1 (..))
import Hasura.RQL.IR.Returning (MutationOutputG (..))
import Hasura.RQL.IR.Value (UnpreparedValue (..))
import Hasura.RQL.Types.Column (ColumnInfo (..))
import Test.Backend.Postgres.Misc
type Output = MutationOutputG PG Void (UnpreparedValue PG)
-- | Internal use only. The intended use is through
-- 'Test.Backend.Postgres.Insert.runTest'.
--
-- Build an 'InsertQueryP1', to be used with 'mkInsertQuery'.
data InsertQueryBuilder = InsertQueryBuilder
{ -- | the main table for the update
iqbTable :: QualifiedTable,
-- | the columns used in the insert statement
iqbInsertColumns :: [ColumnInfo PG],
-- | the rows of values to be inserted
iqbValues :: [[UnpreparedValue PG]],
-- | the 'Output' clause, e.g., selection set, affected_rows, etc.
iqbOutput :: Output,
-- | the table columns (all of them)
iqbAllColumns :: [ColumnInfo PG]
}
mkInsertQuery :: InsertQueryBuilder -> InsertQueryP1 PG
mkInsertQuery InsertQueryBuilder {..} =
InsertQueryP1
{ iqp1Table = iqbTable,
iqp1Cols = ciColumn <$> iqbInsertColumns,
iqp1Tuples = fmap unpreparedValueToSQLExp <$> iqbValues,
iqp1Conflict = Nothing,
iqp1CheckCond = (BoolAnd [], Nothing),
iqp1Output = unpreparedValueToSQLExp <$> iqbOutput,
iqp1AllCols = iqbAllColumns
}