diff --git a/src/main/java/net/sf/jsqlparser/statement/alter/AlterExpression.java b/src/main/java/net/sf/jsqlparser/statement/alter/AlterExpression.java index 744d967a4..0a99c97d5 100644 --- a/src/main/java/net/sf/jsqlparser/statement/alter/AlterExpression.java +++ b/src/main/java/net/sf/jsqlparser/statement/alter/AlterExpression.java @@ -773,7 +773,8 @@ public ColumnDataType( @Override public String toString() { - return getColumnName() + (withType ? " TYPE " : " ") + toStringDataTypeAndSpec(); + return getColumnName() + (withType ? " TYPE " : getColDataType() == null ? "" : " ") + + toStringDataTypeAndSpec(); } @Override diff --git a/src/main/java/net/sf/jsqlparser/statement/create/table/ColumnDefinition.java b/src/main/java/net/sf/jsqlparser/statement/create/table/ColumnDefinition.java index f19962d8e..90a0e0e40 100644 --- a/src/main/java/net/sf/jsqlparser/statement/create/table/ColumnDefinition.java +++ b/src/main/java/net/sf/jsqlparser/statement/create/table/ColumnDefinition.java @@ -69,9 +69,10 @@ public String toString() { } public String toStringDataTypeAndSpec() { - return colDataType + (columnSpecs != null && !columnSpecs.isEmpty() - ? " " + PlainSelect.getStringList(columnSpecs, false, false) - : ""); + return (colDataType == null ? "" : colDataType) + + (columnSpecs != null && !columnSpecs.isEmpty() + ? " " + PlainSelect.getStringList(columnSpecs, false, false) + : ""); } public ColumnDefinition withColumnName(String columnName) { diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index 40f393769..7c01cb12d 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -6144,9 +6144,9 @@ AlterExpression.ColumnDataType AlterExpressionColumnDataType(): List parameter = null; } { - columnName = RelObjectName() + columnName = RelObjectName() { columnSpecs = new ArrayList(); } ( LOOKAHEAD(2) { withType = true; } )? - dataType = ColDataType() { columnSpecs = new ArrayList(); } + ( LOOKAHEAD(2) dataType = ColDataType() )? ( parameter = CreateParameter() { columnSpecs.addAll(parameter); } )* { return new AlterExpression.ColumnDataType(columnName, withType, dataType, columnSpecs); @@ -6291,6 +6291,10 @@ AlterExpression AlterExpression(): [ index = IndexWithComment(index) { alterExp.setIndex(index); } ] ) | + LOOKAHEAD(2) ( + sk3=RelObjectName() tk= { alterExp.withColumnName(sk3).withCommentText(tk.image); } + ) + | LOOKAHEAD(3) ( ( LOOKAHEAD(2) { alterExp.hasColumn(true); } )? [ { alterExp.setUseIfNotExists(true); } ] @@ -6433,8 +6437,6 @@ AlterExpression AlterExpression(): ) ) ) - | - ( sk3=RelObjectName() tk= { alterExp.withColumnName(sk3).withCommentText(tk.image); } ) ) ) | diff --git a/src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java b/src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java index 86962ae0f..24995bc3e 100644 --- a/src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java @@ -360,6 +360,34 @@ public void testAlterTableModifyColumn2() throws JSQLParserException { assertFalse(alterExpression.hasColumn()); } + @Test + public void testAlterTableModifyColumn3() throws JSQLParserException { + Alter alter = + (Alter) CCJSqlParserUtil.parse("ALTER TABLE mytable modify col1 NULL"); + AlterExpression alterExpression = alter.getAlterExpressions().get(0); + + // COLUMN keyword DOES NOT appear in deparsed statement, modify becomes all caps + assertStatementCanBeDeparsedAs(alter, "ALTER TABLE mytable MODIFY col1 NULL"); + + assertEquals(AlterOperation.MODIFY, alterExpression.getOperation()); + + assertFalse(alterExpression.hasColumn()); + } + + @Test + public void testAlterTableModifyColumn4() throws JSQLParserException { + Alter alter = + (Alter) CCJSqlParserUtil.parse("ALTER TABLE mytable modify col1 DEFAULT 0"); + AlterExpression alterExpression = alter.getAlterExpressions().get(0); + + // COLUMN keyword DOES NOT appear in deparsed statement, modify becomes all caps + assertStatementCanBeDeparsedAs(alter, "ALTER TABLE mytable MODIFY col1 DEFAULT 0"); + + assertEquals(AlterOperation.MODIFY, alterExpression.getOperation()); + + assertFalse(alterExpression.hasColumn()); + } + @Test public void testAlterTableAlterColumn() throws JSQLParserException { // http://www.postgresqltutorial.com/postgresql-change-column-type/