[#5955] Added support for parsing ALTER COLUMN

This commit is contained in:
lukaseder 2017-07-31 15:29:22 +02:00
parent 0ec191b973
commit 9b180d7b14
2 changed files with 29 additions and 0 deletions

View File

@ -44,6 +44,7 @@ alterTableStatement = 'ALTER TABLE' [ 'IF EXISTS' ] tableName break
| 'DEFAULT' concat
)
}
| ( 'ALTER' | 'MODIFY' ) [ 'COLUMN' ] identifier dataType [ [ 'NOT' ] 'NULL' ]
| 'DROP COLUMN' identifier [ 'CASCADE' | 'RESTRICT' ]
| 'DROP CONSTRAINT' constraintName
| 'RENAME' [ ( 'COLUMN' | 'INDEX' | 'CONSTRAINT' ) identifier ] 'TO' identifier

View File

@ -1677,6 +1677,10 @@ class ParserImpl implements Parser {
return s1.add(field(fieldName, type), type);
}
}
else if (parseKeywordIf(ctx, "ALTER")) {
parseKeywordIf(ctx, "COLUMN");
return parseAlterTableAlterColumn(ctx, s1);
}
break;
@ -1706,6 +1710,14 @@ class ParserImpl implements Parser {
break;
case 'm':
case 'M':
if (parseKeywordIf(ctx, "MODIFY")) {
parseKeywordIf(ctx, "COLUMN");
return parseAlterTableAlterColumn(ctx, s1);
}
break;
case 'r':
case 'R':
if (parseKeywordIf(ctx, "RENAME")) {
@ -1743,6 +1755,22 @@ class ParserImpl implements Parser {
throw ctx.unexpectedToken();
}
private static final DDLQuery parseAlterTableAlterColumn(ParserContext ctx, AlterTableStep s1) {
TableField<?, ?> field = parseFieldName(ctx);
if (parseKeywordIf(ctx, "TYPE") || parseKeywordIf(ctx, "SET DATA TYPE"))
;
DataType<?> type = parseDataType(ctx);
if (parseKeywordIf(ctx, "NULL"))
type = type.nullable(true);
else if (parseKeywordIf(ctx, "NOT NULL"))
type = type.nullable(false);
return s1.alter(field).set(type);
}
private static final DDLQuery parseRename(ParserContext ctx) {
parseKeyword(ctx, "RENAME");
parseWhitespaceIf(ctx);