mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
mysql parser support Hierarchical clause.
This commit is contained in:
@@ -158,6 +158,8 @@ public class MySqlSelectParser extends SQLSelectParser {
|
||||
|
||||
parseWhere(queryBlock);
|
||||
|
||||
parseHierachical(queryBlock);
|
||||
|
||||
parseGroupBy(queryBlock);
|
||||
|
||||
queryBlock.setOrderBy(this.exprParser.parseOrderBy());
|
||||
|
||||
@@ -279,6 +279,8 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
|
||||
x.getWhere().accept(this);
|
||||
}
|
||||
|
||||
printHierarchical(x);
|
||||
|
||||
if (x.getGroupBy() != null) {
|
||||
println();
|
||||
x.getGroupBy().accept(this);
|
||||
|
||||
@@ -148,7 +148,7 @@ public class OdpsSelectParser extends SQLSelectParser {
|
||||
break;
|
||||
}
|
||||
|
||||
String alias = this.as();
|
||||
String alias = this.tableAlias();
|
||||
tableSource.setAlias(alias);
|
||||
|
||||
accept(Token.LPAREN);
|
||||
|
||||
@@ -563,66 +563,9 @@ public class OracleSelectParser extends SQLSelectParser {
|
||||
}
|
||||
|
||||
protected String as() {
|
||||
if (lexer.token() == Token.CONNECT) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return super.as();
|
||||
}
|
||||
|
||||
private void parseHierachical(OracleSelectQueryBlock queryBlock) {
|
||||
|
||||
|
||||
if (lexer.token() == Token.CONNECT) {
|
||||
lexer.nextToken();
|
||||
accept(Token.BY);
|
||||
|
||||
if (lexer.token() == Token.PRIOR) {
|
||||
lexer.nextToken();
|
||||
queryBlock.setPrior(true);
|
||||
}
|
||||
|
||||
if (identifierEquals("NOCYCLE")) {
|
||||
queryBlock.setNoCycle(true);
|
||||
lexer.nextToken();
|
||||
|
||||
if (lexer.token() == Token.PRIOR) {
|
||||
lexer.nextToken();
|
||||
queryBlock.setPrior(true);
|
||||
}
|
||||
}
|
||||
queryBlock.setConnectBy(this.exprParser.expr());
|
||||
}
|
||||
|
||||
if (lexer.token() == Token.START) {
|
||||
lexer.nextToken();
|
||||
accept(Token.WITH);
|
||||
|
||||
queryBlock.setStartWith(this.exprParser.expr());
|
||||
}
|
||||
|
||||
if (lexer.token() == Token.CONNECT) {
|
||||
lexer.nextToken();
|
||||
accept(Token.BY);
|
||||
|
||||
if (lexer.token() == Token.PRIOR) {
|
||||
lexer.nextToken();
|
||||
queryBlock.setPrior(true);
|
||||
}
|
||||
|
||||
if (identifierEquals("NOCYCLE")) {
|
||||
queryBlock.setNoCycle(true);
|
||||
lexer.nextToken();
|
||||
|
||||
if (lexer.token() == Token.PRIOR) {
|
||||
lexer.nextToken();
|
||||
queryBlock.setPrior(true);
|
||||
}
|
||||
}
|
||||
queryBlock.setConnectBy(this.exprParser.expr());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public SQLTableSource parseTableSource() {
|
||||
if (lexer.token() == (Token.LPAREN)) {
|
||||
@@ -807,10 +750,10 @@ public class OracleSelectParser extends SQLSelectParser {
|
||||
tableSource.setFlashback(flashback());
|
||||
}
|
||||
|
||||
tableSource.setAlias(as());
|
||||
tableSource.setAlias(tableAlias());
|
||||
} else if ((tableSource.getAlias() == null) || (tableSource.getAlias().length() == 0)) {
|
||||
if (lexer.token() != Token.LEFT && lexer.token() != Token.RIGHT && lexer.token() != Token.FULL) {
|
||||
tableSource.setAlias(as());
|
||||
tableSource.setAlias(tableAlias());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -1273,7 +1273,7 @@ public class OracleStatementParser extends SQLStatementParser {
|
||||
deleteStatement.setTableName(tableName);
|
||||
}
|
||||
|
||||
deleteStatement.setAlias(as());
|
||||
deleteStatement.setAlias(tableAlias());
|
||||
}
|
||||
|
||||
if (lexer.token() == (Token.WHERE)) {
|
||||
|
||||
@@ -49,7 +49,7 @@ public class OracleUpdateParser extends SQLStatementParser {
|
||||
update.setTableSource(tableSource);
|
||||
|
||||
if ((update.getAlias() == null) || (update.getAlias().length() == 0)) {
|
||||
update.setAlias(as());
|
||||
update.setAlias(tableAlias());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-21
@@ -527,27 +527,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS
|
||||
x.getWhere().accept(this);
|
||||
}
|
||||
|
||||
SQLExpr startWith = x.getStartWith(), connectBy = x.getConnectBy();
|
||||
if (startWith != null || connectBy != null){
|
||||
println();
|
||||
if (x.getStartWith() != null) {
|
||||
print0(ucase ? "START WITH " : "start with ");
|
||||
x.getStartWith().accept(this);
|
||||
println();
|
||||
}
|
||||
|
||||
print0(ucase ? "CONNECT BY " : "connect by ");
|
||||
|
||||
if (x.isNoCycle()) {
|
||||
print0(ucase ? "NOCYCLE " : "nocycle ");
|
||||
}
|
||||
|
||||
if (x.isPrior()) {
|
||||
print0(ucase ? "PRIOR " : "prior ");
|
||||
}
|
||||
|
||||
x.getConnectBy().accept(this);
|
||||
}
|
||||
printHierarchical(x);
|
||||
|
||||
if (x.getGroupBy() != null) {
|
||||
println();
|
||||
|
||||
+1
-1
@@ -256,7 +256,7 @@ public class SQLServerStatementParser extends SQLStatementParser {
|
||||
insertStatement.setTableName(tableName);
|
||||
|
||||
if (lexer.token() == Token.LITERAL_ALIAS) {
|
||||
insertStatement.setAlias(as());
|
||||
insertStatement.setAlias(tableAlias());
|
||||
}
|
||||
|
||||
parseInsert0_hinits(insertStatement);
|
||||
|
||||
Reference in New Issue
Block a user