mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improved sql parser, bug fixed for parent is null
This commit is contained in:
@@ -154,7 +154,7 @@ public class SQLCreateTableParser extends SQLDDLParser {
|
||||
SQLIdentifierExpr maxValue = new SQLIdentifierExpr(lexer.stringVal());
|
||||
lexer.nextToken();
|
||||
maxValue.setParent(values);
|
||||
values.getItems().add(maxValue);
|
||||
values.addItem(maxValue);
|
||||
} else {
|
||||
accept(Token.LPAREN);
|
||||
this.exprParser.exprList(values.getItems(), values);
|
||||
|
||||
@@ -203,10 +203,10 @@ public class SQLExprParser extends SQLParser {
|
||||
sqlExpr = expr();
|
||||
if (lexer.token() == Token.COMMA) {
|
||||
SQLListExpr listExpr = new SQLListExpr();
|
||||
listExpr.getItems().add(sqlExpr);
|
||||
listExpr.addItem(sqlExpr);
|
||||
do {
|
||||
lexer.nextToken();
|
||||
listExpr.getItems().add(expr());
|
||||
listExpr.addItem(expr());
|
||||
} while (lexer.token() == Token.COMMA);
|
||||
|
||||
sqlExpr = listExpr;
|
||||
@@ -358,7 +358,7 @@ public class SQLExprParser extends SQLParser {
|
||||
accept(Token.THEN);
|
||||
valueExpr = expr();
|
||||
caseItem = new SQLCaseExpr.Item(testExpr, valueExpr);
|
||||
caseExpr.getItems().add(caseItem);
|
||||
caseExpr.addItem(caseItem);
|
||||
}
|
||||
|
||||
if (lexer.token() == Token.ELSE) {
|
||||
@@ -701,7 +701,7 @@ public class SQLExprParser extends SQLParser {
|
||||
}
|
||||
|
||||
item.setParent(groupingSets);
|
||||
groupingSets.getParameters().add(item);
|
||||
groupingSets.addParameter(item);
|
||||
|
||||
if (lexer.token() == Token.RPAREN) {
|
||||
break;
|
||||
@@ -1502,7 +1502,7 @@ public class SQLExprParser extends SQLParser {
|
||||
lexer.nextToken();
|
||||
SQLExpr arg = this.expr();
|
||||
arg.setParent(charType);
|
||||
charType.getArguments().add(arg);
|
||||
charType.addArgument(arg);
|
||||
accept(Token.RPAREN);
|
||||
}
|
||||
|
||||
@@ -1610,7 +1610,7 @@ public class SQLExprParser extends SQLParser {
|
||||
if (lexer.token() == Token.NOT) {
|
||||
lexer.nextToken();
|
||||
accept(Token.NULL);
|
||||
column.getConstraints().add(new NotNullConstraint());
|
||||
column.addConstraint(new NotNullConstraint());
|
||||
return parseColumnRest(column);
|
||||
}
|
||||
|
||||
@@ -1623,7 +1623,7 @@ public class SQLExprParser extends SQLParser {
|
||||
if (lexer.token == Token.PRIMARY) {
|
||||
lexer.nextToken();
|
||||
accept(Token.KEY);
|
||||
column.getConstraints().add(new SQLColumnPrimaryKey());
|
||||
column.addConstraint(new SQLColumnPrimaryKey());
|
||||
return parseColumnRest(column);
|
||||
}
|
||||
|
||||
@@ -1632,7 +1632,7 @@ public class SQLExprParser extends SQLParser {
|
||||
if (lexer.token() == Token.KEY) {
|
||||
lexer.nextToken();
|
||||
}
|
||||
column.getConstraints().add(new SQLColumnUniqueKey());
|
||||
column.addConstraint(new SQLColumnUniqueKey());
|
||||
return parseColumnRest(column);
|
||||
}
|
||||
|
||||
@@ -1646,7 +1646,7 @@ public class SQLExprParser extends SQLParser {
|
||||
accept(Token.KEY);
|
||||
SQLColumnPrimaryKey pk = new SQLColumnPrimaryKey();
|
||||
pk.setName(name);
|
||||
column.getConstraints().add(pk);
|
||||
column.addConstraint(pk);
|
||||
return parseColumnRest(column);
|
||||
}
|
||||
|
||||
@@ -1654,7 +1654,7 @@ public class SQLExprParser extends SQLParser {
|
||||
lexer.nextToken();
|
||||
SQLColumnUniqueKey uk = new SQLColumnUniqueKey();
|
||||
uk.setName(name);
|
||||
column.getConstraints().add(uk);
|
||||
column.addConstraint(uk);
|
||||
return parseColumnRest(column);
|
||||
}
|
||||
|
||||
@@ -1666,7 +1666,7 @@ public class SQLExprParser extends SQLParser {
|
||||
accept(Token.LPAREN);
|
||||
this.names(ref.getColumns(), ref);
|
||||
accept(Token.RPAREN);
|
||||
column.getConstraints().add(ref);
|
||||
column.addConstraint(ref);
|
||||
return parseColumnRest(column);
|
||||
}
|
||||
|
||||
@@ -1675,7 +1675,7 @@ public class SQLExprParser extends SQLParser {
|
||||
accept(Token.NULL);
|
||||
NotNullConstraint notNull = new NotNullConstraint();
|
||||
notNull.setName(name);
|
||||
column.getConstraints().add(notNull);
|
||||
column.addConstraint(notNull);
|
||||
return parseColumnRest(column);
|
||||
}
|
||||
|
||||
@@ -1683,7 +1683,7 @@ public class SQLExprParser extends SQLParser {
|
||||
SQLColumnCheck check = parseColumnCheck();
|
||||
check.setName(name);
|
||||
check.setParent(column);
|
||||
column.getConstraints().add(check);
|
||||
column.addConstraint(check);
|
||||
return parseColumnRest(column);
|
||||
}
|
||||
|
||||
@@ -1699,7 +1699,7 @@ public class SQLExprParser extends SQLParser {
|
||||
|
||||
if (lexer.token == Token.CHECK) {
|
||||
SQLColumnCheck check = parseColumnCheck();
|
||||
column.getConstraints().add(check);
|
||||
column.addConstraint(check);
|
||||
return parseColumnRest(column);
|
||||
}
|
||||
|
||||
|
||||
@@ -222,7 +222,7 @@ public class SQLSelectParser extends SQLParser {
|
||||
entry.setSubQuery(select());
|
||||
accept(Token.RPAREN);
|
||||
|
||||
withQueryClause.getEntries().add(entry);
|
||||
withQueryClause.addEntry(entry);
|
||||
|
||||
if (lexer.token() == Token.COMMA) {
|
||||
lexer.nextToken();
|
||||
|
||||
@@ -813,7 +813,7 @@ public class SQLStatementParser extends SQLParser {
|
||||
if (lexer.token() == Token.TABLE) {
|
||||
lexer.nextToken();
|
||||
|
||||
SQLAlterTableStatement stmt = new SQLAlterTableStatement();
|
||||
SQLAlterTableStatement stmt = new SQLAlterTableStatement(getDbType());
|
||||
stmt.setName(this.exprParser.name());
|
||||
|
||||
for (;;) {
|
||||
@@ -834,26 +834,26 @@ public class SQLStatementParser extends SQLParser {
|
||||
if (lexer.token() == Token.PRIMARY) {
|
||||
SQLPrimaryKey primaryKey = this.exprParser.parsePrimaryKey();
|
||||
SQLAlterTableAddConstraint item = new SQLAlterTableAddConstraint(primaryKey);
|
||||
stmt.getItems().add(item);
|
||||
stmt.addItem(item);
|
||||
} else if (lexer.token() == Token.IDENTIFIER) {
|
||||
SQLAlterTableAddColumn item = parseAlterTableAddColumn();
|
||||
stmt.getItems().add(item);
|
||||
stmt.addItem(item);
|
||||
} else if (lexer.token() == Token.COLUMN) {
|
||||
lexer.nextToken();
|
||||
SQLAlterTableAddColumn item = parseAlterTableAddColumn();
|
||||
stmt.getItems().add(item);
|
||||
stmt.addItem(item);
|
||||
} else if (lexer.token() == Token.CHECK) {
|
||||
SQLCheck check = this.exprParser.parseCheck();
|
||||
SQLAlterTableAddConstraint item = new SQLAlterTableAddConstraint(check);
|
||||
stmt.getItems().add(item);
|
||||
stmt.addItem(item);
|
||||
} else if (lexer.token() == Token.CONSTRAINT) {
|
||||
SQLConstraint constraint = this.exprParser.parseConstaint();
|
||||
SQLAlterTableAddConstraint item = new SQLAlterTableAddConstraint(constraint);
|
||||
stmt.getItems().add(item);
|
||||
stmt.addItem(item);
|
||||
} else if (lexer.token() == Token.FOREIGN) {
|
||||
SQLConstraint constraint = this.exprParser.parseForeignKey();
|
||||
SQLAlterTableAddConstraint item = new SQLAlterTableAddConstraint(constraint);
|
||||
stmt.getItems().add(item);
|
||||
stmt.addItem(item);
|
||||
} else if (lexer.token() == Token.PARTITION) {
|
||||
lexer.nextToken();
|
||||
SQLAlterTableAddPartition addPartition = new SQLAlterTableAddPartition();
|
||||
@@ -866,7 +866,7 @@ public class SQLStatementParser extends SQLParser {
|
||||
|
||||
accept(Token.RPAREN);
|
||||
|
||||
stmt.getItems().add(addPartition);
|
||||
stmt.addItem(addPartition);
|
||||
} else {
|
||||
throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal());
|
||||
}
|
||||
@@ -877,15 +877,15 @@ public class SQLStatementParser extends SQLParser {
|
||||
lexer.nextToken();
|
||||
SQLAlterTableDisableConstraint item = new SQLAlterTableDisableConstraint();
|
||||
item.setConstraintName(this.exprParser.name());
|
||||
stmt.getItems().add(item);
|
||||
stmt.addItem(item);
|
||||
} else if (identifierEquals("LIFECYCLE")) {
|
||||
lexer.nextToken();
|
||||
SQLAlterTableDisableLifecycle item = new SQLAlterTableDisableLifecycle();
|
||||
stmt.getItems().add(item);
|
||||
stmt.addItem(item);
|
||||
} else {
|
||||
acceptIdentifier("KEYS");
|
||||
SQLAlterTableDisableKeys item = new SQLAlterTableDisableKeys();
|
||||
stmt.getItems().add(item);
|
||||
stmt.addItem(item);
|
||||
}
|
||||
} else if (lexer.token() == Token.ENABLE) {
|
||||
lexer.nextToken();
|
||||
@@ -893,24 +893,24 @@ public class SQLStatementParser extends SQLParser {
|
||||
lexer.nextToken();
|
||||
SQLAlterTableEnableConstraint item = new SQLAlterTableEnableConstraint();
|
||||
item.setConstraintName(this.exprParser.name());
|
||||
stmt.getItems().add(item);
|
||||
stmt.addItem(item);
|
||||
} else if (identifierEquals("LIFECYCLE")) {
|
||||
lexer.nextToken();
|
||||
SQLAlterTableEnableLifecycle item = new SQLAlterTableEnableLifecycle();
|
||||
stmt.getItems().add(item);
|
||||
stmt.addItem(item);
|
||||
} else {
|
||||
acceptIdentifier("KEYS");
|
||||
SQLAlterTableEnableKeys item = new SQLAlterTableEnableKeys();
|
||||
stmt.getItems().add(item);
|
||||
stmt.addItem(item);
|
||||
}
|
||||
} else if (lexer.token() == Token.ALTER) {
|
||||
lexer.nextToken();
|
||||
if (lexer.token() == Token.COLUMN) {
|
||||
SQLAlterTableAlterColumn alterColumn = parseAlterColumn();
|
||||
stmt.getItems().add(alterColumn);
|
||||
stmt.addItem(alterColumn);
|
||||
} else if (lexer.token() == Token.LITERAL_ALIAS) {
|
||||
SQLAlterTableAlterColumn alterColumn = parseAlterColumn();
|
||||
stmt.getItems().add(alterColumn);
|
||||
stmt.addItem(alterColumn);
|
||||
} else {
|
||||
throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal());
|
||||
}
|
||||
@@ -923,9 +923,9 @@ public class SQLStatementParser extends SQLParser {
|
||||
SQLAlterTableAddConstraint addCheck = new SQLAlterTableAddConstraint();
|
||||
addCheck.setWithNoCheck(true);
|
||||
addCheck.setConstraint(check);
|
||||
stmt.getItems().add(addCheck);
|
||||
stmt.addItem(addCheck);
|
||||
} else if (identifierEquals("RENAME")) {
|
||||
stmt.getItems().add(parseAlterTableRename());
|
||||
stmt.addItem(parseAlterTableRename());
|
||||
} else if (lexer.token() == Token.SET) {
|
||||
lexer.nextToken();
|
||||
|
||||
@@ -933,12 +933,12 @@ public class SQLStatementParser extends SQLParser {
|
||||
lexer.nextToken();
|
||||
SQLAlterTableSetComment setComment = new SQLAlterTableSetComment();
|
||||
setComment.setComment(this.exprParser.primary());
|
||||
stmt.getItems().add(setComment);
|
||||
stmt.addItem(setComment);
|
||||
} else if (identifierEquals("LIFECYCLE")) {
|
||||
lexer.nextToken();
|
||||
SQLAlterTableSetLifecycle setLifecycle = new SQLAlterTableSetLifecycle();
|
||||
setLifecycle.setLifecycle(this.exprParser.primary());
|
||||
stmt.getItems().add(setLifecycle);
|
||||
stmt.addItem(setLifecycle);
|
||||
} else {
|
||||
throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal());
|
||||
}
|
||||
@@ -964,7 +964,7 @@ public class SQLStatementParser extends SQLParser {
|
||||
enableLifeCycle.getPartition().add(condition);
|
||||
condition.setParent(enableLifeCycle);
|
||||
}
|
||||
stmt.getItems().add(enableLifeCycle);
|
||||
stmt.addItem(enableLifeCycle);
|
||||
|
||||
continue;
|
||||
}
|
||||
@@ -980,7 +980,7 @@ public class SQLStatementParser extends SQLParser {
|
||||
disableLifeCycle.getPartition().add(condition);
|
||||
condition.setParent(disableLifeCycle);
|
||||
}
|
||||
stmt.getItems().add(disableLifeCycle);
|
||||
stmt.addItem(disableLifeCycle);
|
||||
|
||||
continue;
|
||||
}
|
||||
@@ -995,7 +995,7 @@ public class SQLStatementParser extends SQLParser {
|
||||
|
||||
accept(Token.RPAREN);
|
||||
|
||||
stmt.getItems().add(renamePartition);
|
||||
stmt.addItem(renamePartition);
|
||||
} else if(identifierEquals("TOUCH")) {
|
||||
lexer.nextToken();
|
||||
SQLAlterTableTouch item = new SQLAlterTableTouch();
|
||||
@@ -1008,7 +1008,7 @@ public class SQLStatementParser extends SQLParser {
|
||||
accept(Token.RPAREN);
|
||||
}
|
||||
|
||||
stmt.getItems().add(item);
|
||||
stmt.addItem(item);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
@@ -1084,7 +1084,7 @@ public class SQLStatementParser extends SQLParser {
|
||||
lexer.nextToken();
|
||||
SQLAlterTableDropConstraint item = new SQLAlterTableDropConstraint();
|
||||
item.setConstraintName(this.exprParser.name());
|
||||
stmt.getItems().add(item);
|
||||
stmt.addItem(item);
|
||||
} else if (lexer.token() == Token.COLUMN) {
|
||||
lexer.nextToken();
|
||||
SQLAlterTableDropColumnItem item = new SQLAlterTableDropColumnItem();
|
||||
@@ -1095,7 +1095,7 @@ public class SQLStatementParser extends SQLParser {
|
||||
lexer.nextToken();
|
||||
}
|
||||
|
||||
stmt.getItems().add(item);
|
||||
stmt.addItem(item);
|
||||
} else if (lexer.token() == Token.LITERAL_ALIAS) {
|
||||
SQLAlterTableDropColumnItem item = new SQLAlterTableDropColumnItem();
|
||||
this.exprParser.names(item.getColumns());
|
||||
@@ -1105,7 +1105,7 @@ public class SQLStatementParser extends SQLParser {
|
||||
lexer.nextToken();
|
||||
}
|
||||
|
||||
stmt.getItems().add(item);
|
||||
stmt.addItem(item);
|
||||
} else if (lexer.token() == Token.PARTITION) {
|
||||
lexer.nextToken();
|
||||
SQLAlterTableDropPartition dropPartition = new SQLAlterTableDropPartition();
|
||||
@@ -1123,7 +1123,7 @@ public class SQLStatementParser extends SQLParser {
|
||||
dropPartition.setPurge(true);
|
||||
}
|
||||
|
||||
stmt.getItems().add(dropPartition);
|
||||
stmt.addItem(dropPartition);
|
||||
} else {
|
||||
throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal());
|
||||
}
|
||||
@@ -1155,7 +1155,7 @@ public class SQLStatementParser extends SQLParser {
|
||||
|
||||
for (;;) {
|
||||
SQLName name = this.exprParser.name();
|
||||
stmt.getTableSources().add(new SQLExprTableSource(name));
|
||||
stmt.addPartition(new SQLExprTableSource(name));
|
||||
if (lexer.token() == Token.COMMA) {
|
||||
lexer.nextToken();
|
||||
continue;
|
||||
@@ -1238,7 +1238,7 @@ public class SQLStatementParser extends SQLParser {
|
||||
|
||||
for (;;) {
|
||||
SQLName name = this.exprParser.name();
|
||||
stmt.getTableSources().add(new SQLExprTableSource(name));
|
||||
stmt.addPartition(new SQLExprTableSource(name));
|
||||
if (lexer.token() == Token.COMMA) {
|
||||
lexer.nextToken();
|
||||
continue;
|
||||
@@ -1483,7 +1483,7 @@ public class SQLStatementParser extends SQLParser {
|
||||
SQLDropUserStatement stmt = new SQLDropUserStatement(getDbType());
|
||||
for (;;) {
|
||||
SQLExpr expr = this.exprParser.expr();
|
||||
stmt.getUsers().add(expr);
|
||||
stmt.addUser(expr);
|
||||
if (lexer.token() == Token.COMMA) {
|
||||
lexer.nextToken();
|
||||
continue;
|
||||
@@ -1738,7 +1738,7 @@ public class SQLStatementParser extends SQLParser {
|
||||
for (;;) {
|
||||
SQLSelectOrderByItem item = this.exprParser.parseSelectOrderByItem();
|
||||
item.setParent(stmt);
|
||||
stmt.getItems().add(item);
|
||||
stmt.addItem(item);
|
||||
if (lexer.token() == Token.COMMA) {
|
||||
lexer.nextToken();
|
||||
continue;
|
||||
@@ -1874,7 +1874,7 @@ public class SQLStatementParser extends SQLParser {
|
||||
}
|
||||
|
||||
column.setParent(createView);
|
||||
createView.getColumns().add(column);
|
||||
createView.addColumn(column);
|
||||
|
||||
if (lexer.token() == Token.COMMA) {
|
||||
lexer.nextToken();
|
||||
@@ -1925,7 +1925,7 @@ public class SQLStatementParser extends SQLParser {
|
||||
|
||||
for (;;) {
|
||||
SQLColumnDefinition columnDef = this.exprParser.parseColumn();
|
||||
item.getColumns().add(columnDef);
|
||||
item.addColumn(columnDef);
|
||||
if (lexer.token() == Token.COMMA) {
|
||||
lexer.nextToken();
|
||||
if (identifierEquals("ADD")) {
|
||||
@@ -1999,7 +1999,7 @@ public class SQLStatementParser extends SQLParser {
|
||||
|
||||
for (;;) {
|
||||
SQLSelectOrderByItem column = this.exprParser.parseSelectOrderByItem();
|
||||
item.getItems().add(column);
|
||||
item.addItem(column);
|
||||
if (lexer.token() == Token.COMMA) {
|
||||
lexer.nextToken();
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user