bug fixed for oracle sql parser

This commit is contained in:
温少
2012-03-06 22:52:24 +08:00
106 changed files with 2496 additions and 621 deletions
@@ -17,6 +17,7 @@ package com.alibaba.druid.sql.parser;
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
import com.alibaba.druid.sql.ast.statement.SQLPrimaryKey;
public class SQLCreateTableParser extends SQLDDLParser {
@@ -65,17 +66,23 @@ public class SQLCreateTableParser extends SQLDDLParser {
if (lexer.token() == Token.LPAREN) {
lexer.nextToken();
while (lexer.token() == Token.IDENTIFIER || lexer.token() == Token.LITERAL_ALIAS) {
SQLColumnDefinition column = this.exprParser.parseColumn();
createTable.getTableElementList().add(column);
// parseConstaint(column.getConstaints());
if (lexer.token() != Token.COMMA) {
break;
for (;;) {
if (lexer.token() == Token.IDENTIFIER || lexer.token() == Token.LITERAL_ALIAS) {
SQLColumnDefinition column = this.exprParser.parseColumn();
createTable.getTableElementList().add(column);
} else if (lexer.token() == Token.PRIMARY) {
SQLPrimaryKey primaryKey = exprParser.parsePrimaryKey();
createTable.getTableElementList().add(primaryKey);
} else {
throw new ParserException("TODO " + lexer.token());
}
if (lexer.token() == Token.COMMA) {
lexer.nextToken();
continue;
}
lexer.nextToken();
break;
}
// while
@@ -56,8 +56,10 @@ import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr;
import com.alibaba.druid.sql.ast.statement.NotNullConstraint;
import com.alibaba.druid.sql.ast.statement.SQLCharactorDataType;
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
import com.alibaba.druid.sql.ast.statement.SQLPrimaryKey;
import com.alibaba.druid.sql.ast.statement.SQLSelect;
import com.alibaba.druid.sql.ast.statement.SQLSelectOrderByItem;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePrimaryKey;
public class SQLExprParser extends SQLParser {
@@ -214,6 +216,7 @@ public class SQLExprParser extends SQLParser {
case LIMIT:
case SCHEMA:
case AT:
case COLUMN:
sqlExpr = new SQLIdentifierExpr(lexer.stringVal());
lexer.nextToken();
break;
@@ -1131,4 +1134,8 @@ public class SQLExprParser extends SQLParser {
return column;
}
public SQLPrimaryKey parsePrimaryKey() {
throw new ParserException("TODO");
}
}
@@ -286,7 +286,7 @@ public class SQLStatementParser extends SQLParser {
if (token == Token.TABLE || identifierEquals("GLOBAL")) {
SQLCreateTableParser createTableParser = getSQLCreateTableParser();
return createTableParser.parseCrateTable(false);
} else if (token == Token.INDEX) {
} else if (token == Token.INDEX || token == Token.UNIQUE) {
return parseCreateIndex(false);
}