From 9b180d7b14d307462222a7399de8530a220fd0bf Mon Sep 17 00:00:00 2001 From: lukaseder Date: Mon, 31 Jul 2017 15:29:22 +0200 Subject: [PATCH] [#5955] Added support for parsing ALTER COLUMN --- .../resources/org/jooq/web/grammar-3.10.txt | 1 + .../main/java/org/jooq/impl/ParserImpl.java | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.10.txt b/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.10.txt index 5681650c26..4077c9fe48 100644 --- a/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.10.txt +++ b/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.10.txt @@ -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 diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 3a3c52ed9f..2493ba9221 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -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);