Skip to content

Commit 92ab937

Browse files
soupihasura-bot
authored andcommitted
server/mssql: Implement column presets
PR-URL: hasura/graphql-engine-mono#3856 GitOrigin-RevId: 8527749c33df1a5bdde29338630714e673e308ab
1 parent bd05e24 commit 92ab937

File tree

7 files changed

+413
-33
lines changed

7 files changed

+413
-33
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ function:
105105
- server: improve SQL generation for BigQuery backend queries involving `Orderby`.
106106
- server: fix regression where remote relationships would get exposed over Relay, which is unsupported
107107
- server: add support for customising the GraphQL schema descriptions of table columns in metadata
108+
- server: implement column presets for SQL Server (#8221)
108109
- console: fixed an issue where editing both a column's name and its GraphQL field name at the same time caused an error
109110
- console: enable searching tables within a schema
110111
- cli: fix inherited roles metadata not being updated when dropping all roles (#7872)

server/graphql-engine.cabal

+1
Original file line numberDiff line numberDiff line change
@@ -1030,6 +1030,7 @@ test-suite tests-hspec
10301030
-- Test
10311031
Test.ArrayRelationshipsSpec
10321032
Test.BasicFieldsSpec
1033+
Test.ColumnPresetsSpec
10331034
Test.DirectivesSpec
10341035
Test.HelloWorldSpec
10351036
Test.LimitOffsetSpec

server/src-lib/Hasura/Backends/MSSQL/Execute/Insert.hs

+4-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ module Hasura.Backends.MSSQL.Execute.Insert
99
)
1010
where
1111

12+
import Data.HashMap.Strict qualified as HM
1213
import Database.MSSQL.Transaction qualified as Tx
1314
import Hasura.Backends.MSSQL.Connection
1415
import Hasura.Backends.MSSQL.FromIr as TSQL
@@ -181,7 +182,9 @@ buildInsertTx tableName withAlias stringifyNum insert = do
181182
-- Should be used as part of a bigger transaction in 'buildInsertTx'.
182183
buildUpsertTx :: TSQL.TableName -> AnnInsert 'MSSQL Void Expression -> IfMatched Expression -> Tx.TxET QErr IO ()
183184
buildUpsertTx tableName insert ifMatched = do
184-
let insertColumnNames = concatMap (map fst . getInsertColumns) $ _aiInsObj $ _aiData insert
185+
let presets = _aiDefVals $ _aiData insert
186+
insertColumnNames =
187+
concatMap (map fst . getInsertColumns) (_aiInsObj $ _aiData insert) <> HM.keys presets
185188
allTableColumns = _aiTableCols $ _aiData insert
186189
insertColumns = filter (\c -> ciColumn c `elem` insertColumnNames) allTableColumns
187190
createValuesTempTableQuery =

server/src-lib/Hasura/Backends/MSSQL/FromIr/Insert.hs

+8-6
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import Language.GraphQL.Draft.Syntax (unName)
2424
fromInsert :: IR.AnnInsert 'MSSQL Void Expression -> Insert
2525
fromInsert IR.AnnInsert {..} =
2626
let IR.AnnIns {..} = _aiData
27-
insertRows = normalizeInsertRows $ map (IR.getInsertColumns) _aiInsObj
27+
insertRows = normalizeInsertRows _aiDefVals $ map IR.getInsertColumns _aiInsObj
2828
insertColumnNames = maybe [] (map fst) $ listToMaybe insertRows
2929
insertValues = map (Values . map snd) insertRows
3030
allColumnNames = map (ColumnName . unName . IR.ciName) _aiTableCols
@@ -58,11 +58,13 @@ fromInsert IR.AnnInsert {..} =
5858
-- > OUTPUT INSERTED.id
5959
-- > VALUES (1, 'Foo', 21), (2, 'Bar', DEFAULT)
6060
normalizeInsertRows ::
61+
HM.HashMap (Column 'MSSQL) Expression ->
6162
[[(Column 'MSSQL, Expression)]] ->
6263
[[(Column 'MSSQL, Expression)]]
63-
normalizeInsertRows insertRows =
64-
let insertColumns = nubOrd (concatMap (map fst) insertRows)
65-
allColumnsWithDefaultValue = map (,DefaultExpression) $ insertColumns
64+
normalizeInsertRows presets insertRows =
65+
let insertColumns = nubOrd (concatMap (map fst) insertRows <> HM.keys presets)
66+
allColumnsWithDefaultValue =
67+
map (\col -> (col, fromMaybe DefaultExpression $ HM.lookup col presets)) insertColumns
6668
addMissingColumns insertRow =
6769
HM.toList $ HM.fromList insertRow `HM.union` HM.fromList allColumnsWithDefaultValue
6870
sortByColumn = sortBy (\l r -> compare (fst l) (fst r))
@@ -78,7 +80,7 @@ toMerge ::
7880
IfMatched Expression ->
7981
FromIr Merge
8082
toMerge tableName insertRows allColumns IfMatched {..} = do
81-
let normalizedInsertRows = normalizeInsertRows $ map (IR.getInsertColumns) insertRows
83+
let normalizedInsertRows = normalizeInsertRows _imColumnPresets $ map IR.getInsertColumns insertRows
8284
insertColumnNames = maybe [] (map fst) $ listToMaybe normalizedInsertRows
8385
allColumnNames = map (ColumnName . unName . IR.ciName) allColumns
8486

@@ -107,7 +109,7 @@ toMerge tableName insertRows allColumns IfMatched {..} = do
107109
toInsertValuesIntoTempTable :: TempTableName -> IR.AnnInsert 'MSSQL Void Expression -> InsertValuesIntoTempTable
108110
toInsertValuesIntoTempTable tempTable IR.AnnInsert {..} =
109111
let IR.AnnIns {..} = _aiData
110-
insertRows = normalizeInsertRows $ map IR.getInsertColumns _aiInsObj
112+
insertRows = normalizeInsertRows _aiDefVals $ map IR.getInsertColumns _aiInsObj
111113
insertColumnNames = maybe [] (map fst) $ listToMaybe insertRows
112114
insertValues = map (Values . map snd) insertRows
113115
in InsertValuesIntoTempTable

0 commit comments

Comments
 (0)