Index: extensions/modeshape-sequencer-ddl/src/main/java/org/modeshape/sequencer/ddl/StandardDdlParser.java =================================================================== --- extensions/modeshape-sequencer-ddl/src/main/java/org/modeshape/sequencer/ddl/StandardDdlParser.java (revision 2007) +++ extensions/modeshape-sequencer-ddl/src/main/java/org/modeshape/sequencer/ddl/StandardDdlParser.java (working copy) @@ -1384,12 +1384,13 @@ public class StandardDdlParser implements DdlParser, DdlConstants, DdlConstants. while (tokens.hasNext() && !tokens.matches(getTerminator()) && !tokens.matches(DdlTokenizer.STATEMENT_KEY)) { boolean parsedDefaultClause = parseDefaultClause(tokens, columnNode); + boolean foundSomething = parsedDefaultClause; if (!parsedDefaultClause) { - parseCollateClause(tokens, columnNode); - parseColumnConstraint(tokens, columnNode, isAlterTable); + foundSomething |= parseCollateClause(tokens, columnNode); + foundSomething |= parseColumnConstraint(tokens, columnNode, isAlterTable); } - consumeComment(tokens); - if (tokens.canConsume(COMMA)) break; + foundSomething |= consumeComment(tokens); + if (tokens.canConsume(COMMA) || !foundSomething) break; } } @@ -2260,10 +2261,11 @@ public class StandardDdlParser implements DdlParser, DdlConstants, DdlConstants. * Consumes an an end-of-line comment or in-line comment * * @param tokens the {@link DdlTokenStream} representing the tokenized DDL content; may not be null + * @return true if a comment was found and consumed * @throws ParsingException */ - protected void consumeComment( DdlTokenStream tokens ) throws ParsingException { - tokens.canConsume(DdlTokenizer.COMMENT); + protected boolean consumeComment( DdlTokenStream tokens ) throws ParsingException { + return tokens.canConsume(DdlTokenizer.COMMENT); } /** Index: extensions/modeshape-sequencer-ddl/src/main/java/org/modeshape/sequencer/ddl/datatype/DataTypeParser.java =================================================================== --- extensions/modeshape-sequencer-ddl/src/main/java/org/modeshape/sequencer/ddl/datatype/DataTypeParser.java (revision 2007) +++ extensions/modeshape-sequencer-ddl/src/main/java/org/modeshape/sequencer/ddl/datatype/DataTypeParser.java (working copy) @@ -932,6 +932,9 @@ public class DataTypeParser implements DdlConstants { public void setPropertiesOnNode( AstNode columnNode, DataType datatype ) { + if (datatype == null) { + int x = 0; + } columnNode.setProperty(DATATYPE_NAME, datatype.getName()); if (datatype.getLength() >= 0) { columnNode.setProperty(DATATYPE_LENGTH, datatype.getLength()); Index: extensions/modeshape-sequencer-ddl/src/test/java/org/modeshape/sequencer/ddl/StandardDdlParserTest.java =================================================================== --- extensions/modeshape-sequencer-ddl/src/test/java/org/modeshape/sequencer/ddl/StandardDdlParserTest.java (revision 2007) +++ extensions/modeshape-sequencer-ddl/src/test/java/org/modeshape/sequencer/ddl/StandardDdlParserTest.java (working copy) @@ -837,6 +837,20 @@ public class StandardDdlParserTest extends DdlParserTestHelper { assertEquals("columnA", columnRef.getName().getString()); } + @FixFor( "MODE-817" ) + @Test + public void shouldParseAlterTables() { + printTest("shouldParseAlterTables()"); + + String content = getFileContent(DDL_FILE_PATH + "alterTables.ddl"); + assertScoreAndParse(content, "alterTables.ddl", 31); + + List theNodes = parser.nodeFactory().getChildrenForType(rootNode, TYPE_CREATE_TABLE_STATEMENT); + assertThat(theNodes.size(), is(0)); + theNodes = parser.nodeFactory().getChildrenForType(rootNode, TYPE_ALTER_TABLE_STATEMENT); + assertThat(theNodes.size(), is(13)); + } + @Test public void shouldParseCreateTables() { printTest("shouldParseCreateTables()"); Index: extensions/modeshape-sequencer-ddl/src/test/resources/ddl/alterTables.ddl =================================================================== --- extensions/modeshape-sequencer-ddl/src/test/resources/ddl/alterTables.ddl (revision 2007) +++ extensions/modeshape-sequencer-ddl/src/test/resources/ddl/alterTables.ddl (working copy) @@ -59,11 +59,11 @@ DROP SCHEMA schema_name RESTRICT ALTER TABLE table_name ADD COLUMN column_name VARCHAR(25) NOT NULL -ALTER TABLE table_name ADD (COLUMN column1_name INTEGER NOT NULL, COLUMN column2_name, VARCHAR(25)) - ALTER TABLE table_name ADD column_name INTEGER NOT NULL DEFAref_table_nameULT (25) -ALTER TABLE table_name ADD (column1_name INTEGER NOT NULL DEFAULT (25), column2_name, VARCHAR(25)) +-- Adding multiple columns is not valid SQL-92 +--ALTER TABLE table_name ADD (COLUMN column1_name INTEGER NOT NULL, COLUMN column2_name VARCHAR(25)) +--ALTER TABLE table_name ADD (column1_name INTEGER NOT NULL DEFAULT (25), column2_name VARCHAR(25)) -- ::= -- ALTER [ COLUMN ]