@@ -24,7 +24,7 @@ import Language.GraphQL.Draft.Syntax (unName)
24
24
fromInsert :: IR. AnnInsert 'MSSQL Void Expression -> Insert
25
25
fromInsert IR. AnnInsert {.. } =
26
26
let IR. AnnIns {.. } = _aiData
27
- insertRows = normalizeInsertRows $ map ( IR. getInsertColumns) _aiInsObj
27
+ insertRows = normalizeInsertRows _aiDefVals $ map IR. getInsertColumns _aiInsObj
28
28
insertColumnNames = maybe [] (map fst ) $ listToMaybe insertRows
29
29
insertValues = map (Values . map snd ) insertRows
30
30
allColumnNames = map (ColumnName . unName . IR. ciName) _aiTableCols
@@ -58,11 +58,13 @@ fromInsert IR.AnnInsert {..} =
58
58
-- > OUTPUT INSERTED.id
59
59
-- > VALUES (1, 'Foo', 21), (2, 'Bar', DEFAULT)
60
60
normalizeInsertRows ::
61
+ HM. HashMap (Column 'MSSQL) Expression ->
61
62
[[(Column 'MSSQL, Expression )]] ->
62
63
[[(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
66
68
addMissingColumns insertRow =
67
69
HM. toList $ HM. fromList insertRow `HM.union` HM. fromList allColumnsWithDefaultValue
68
70
sortByColumn = sortBy (\ l r -> compare (fst l) (fst r))
@@ -78,7 +80,7 @@ toMerge ::
78
80
IfMatched Expression ->
79
81
FromIr Merge
80
82
toMerge tableName insertRows allColumns IfMatched {.. } = do
81
- let normalizedInsertRows = normalizeInsertRows $ map ( IR. getInsertColumns) insertRows
83
+ let normalizedInsertRows = normalizeInsertRows _imColumnPresets $ map IR. getInsertColumns insertRows
82
84
insertColumnNames = maybe [] (map fst ) $ listToMaybe normalizedInsertRows
83
85
allColumnNames = map (ColumnName . unName . IR. ciName) allColumns
84
86
@@ -107,7 +109,7 @@ toMerge tableName insertRows allColumns IfMatched {..} = do
107
109
toInsertValuesIntoTempTable :: TempTableName -> IR. AnnInsert 'MSSQL Void Expression -> InsertValuesIntoTempTable
108
110
toInsertValuesIntoTempTable tempTable IR. AnnInsert {.. } =
109
111
let IR. AnnIns {.. } = _aiData
110
- insertRows = normalizeInsertRows $ map IR. getInsertColumns _aiInsObj
112
+ insertRows = normalizeInsertRows _aiDefVals $ map IR. getInsertColumns _aiInsObj
111
113
insertColumnNames = maybe [] (map fst ) $ listToMaybe insertRows
112
114
insertValues = map (Values . map snd ) insertRows
113
115
in InsertValuesIntoTempTable
0 commit comments