protected void parseColumns( DdlTokenStream tokens,
                                 AstNode tableNode,
                                 boolean isAlterTable ) throws ParsingException {
        String tableElementString = getTableElementsString(tokens, false);

        DdlTokenStream localTokens = new DdlTokenStream(tableElementString, DdlTokenStream.ddlTokenizer(false), false);

        localTokens.start();

        StringBuilder unusedTokensSB = new StringBuilder();

        do {
            if (isColumnDefinitionStart(localTokens)) {
                parseColumnDefinition(localTokens, tableNode, isAlterTable);
            } else {
                // THIS IS AN ERROR. NOTHING FOUND.
                // NEED TO absorb tokens
                unusedTokensSB.append(SPACE).append(localTokens.consume());
            }
        } while (localTokens.canConsume(COMMA));

        if (unusedTokensSB.length() > 0) {
            String msg = DdlSequencerI18n.unusedTokensParsingColumnDefinition.text(tableNode.getName());
            DdlParserProblem problem = new DdlParserProblem(Problems.WARNING, getCurrentMarkedPosition(), msg);
            problem.setUnusedSource(unusedTokensSB.toString());
            addProblem(problem, tableNode);
        }
    }
protected void parseColumns ( DdlTokenStream tokens , AstNode tableNode , boolean isAlterTable ) throws ParsingException { String tableElementString = getTableElementsString ( tokens , false ) ; DdlTokenStream localTokens = new DdlTokenStream ( tableElementString , DdlTokenStream . ddlTokenizer ( false ) , false ) ; localTokens . start ( ) ; StringBuilder unusedTokensSB = new StringBuilder ( ) ; do { if ( isColumnDefinitionStart ( localTokens ) ) { parseColumnDefinition ( localTokens , tableNode , isAlterTable ) ; } else { unusedTokensSB . append ( SPACE ) . append ( localTokens . consume ( ) ) ; } } while ( localTokens . canConsume ( COMMA ) ) ; if ( unusedTokensSB . length ( ) > 0 ) { String msg = DdlSequencerI18n . unusedTokensParsingColumnDefinition . text ( tableNode . getName ( ) ) ; DdlParserProblem problem = new DdlParserProblem ( Problems . WARNING , getCurrentMarkedPosition ( ) , msg ) ; problem . setUnusedSource ( unusedTokensSB . toString ( ) ) ; addProblem ( problem , tableNode ) ; } }
Utility method designed to parse columns within an ALTER TABLE ADD statement.

@param tokens the tokenized {@link DdlTokenStream} of the DDL input content; may not be null
@param tableNode
@param isAlterTable
@throws ParsingException