Skip to content

Commit f7b8f7e

Browse files
committed
Fixed spaces in identifiers in CREATE INDEX statements cause syntax errors
1 parent 601857f commit f7b8f7e

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

IHP/IDE/SchemaDesigner/Compiler.hs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ compileStatement DropColumn { tableName, columnName } = "ALTER TABLE " <> compil
3232
compileStatement RenameColumn { tableName, from, to } = "ALTER TABLE " <> compileIdentifier tableName <> " RENAME COLUMN " <> compileIdentifier from <> " TO " <> compileIdentifier to <> ";"
3333
compileStatement DropTable { tableName } = "DROP TABLE " <> compileIdentifier tableName <> ";"
3434
compileStatement Comment { content } = "--" <> content
35-
compileStatement CreateIndex { indexName, unique, tableName, columns, whereClause, indexType } = "CREATE" <> (if unique then " UNIQUE " else " ") <> "INDEX " <> indexName <> " ON " <> tableName <> (maybe "" (\indexType -> " USING " <> compileIndexType indexType) indexType) <> " (" <> (intercalate ", " (map compileIndexColumn columns)) <> ")" <> (case whereClause of Just expression -> " WHERE " <> compileExpression expression; Nothing -> "") <> ";"
35+
compileStatement CreateIndex { indexName, unique, tableName, columns, whereClause, indexType } = "CREATE" <> (if unique then " UNIQUE " else " ") <> "INDEX " <> compileIdentifier indexName <> " ON " <> compileIdentifier tableName <> (maybe "" (\indexType -> " USING " <> compileIndexType indexType) indexType) <> " (" <> (intercalate ", " (map compileIndexColumn columns)) <> ")" <> (case whereClause of Just expression -> " WHERE " <> compileExpression expression; Nothing -> "") <> ";"
3636
compileStatement CreateFunction { functionName, functionArguments, functionBody, orReplace, returns, language } = "CREATE " <> (if orReplace then "OR REPLACE " else "") <> "FUNCTION " <> functionName <> "(" <> (functionArguments |> map (\(argName, argType) -> argName ++ " " ++ compilePostgresType argType) |> intercalate ", ") <> ")" <> " RETURNS " <> compilePostgresType returns <> " AS $$" <> functionBody <> "$$ language " <> language <> ";"
3737
compileStatement EnableRowLevelSecurity { tableName } = "ALTER TABLE " <> tableName <> " ENABLE ROW LEVEL SECURITY;"
3838
compileStatement CreatePolicy { name, action, tableName, using, check } = "CREATE POLICY " <> compileIdentifier name <> " ON " <> compileIdentifier tableName <> maybe "" (\action -> " FOR " <> compilePolicyAction action) action <> maybe "" (\expr -> " USING (" <> compileExpression expr <> ")") using <> maybe "" (\expr -> " WITH CHECK (" <> compileExpression expr <> ")") check <> ";"
@@ -116,7 +116,12 @@ compileDefaultValue value = "DEFAULT " <> compileExpression value
116116

117117
compileExpression :: Expression -> Text
118118
compileExpression (TextExpression value) = "'" <> value <> "'"
119-
compileExpression (VarExpression name) = name
119+
compileExpression (VarExpression name) =
120+
if nameContainsSpaces
121+
then compileIdentifier name
122+
else name
123+
where
124+
nameContainsSpaces = Text.any (== ' ') name
120125
compileExpression (CallExpression func args) = func <> "(" <> intercalate ", " (map compileExpressionWithOptionalParenthese args) <> ")"
121126
compileExpression (NotEqExpression a b) = compileExpression a <> " <> " <> compileExpression b
122127
compileExpression (EqExpression a b) = compileExpressionWithOptionalParenthese a <> " = " <> compileExpressionWithOptionalParenthese b

0 commit comments

Comments
 (0)