mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
增强Parser
git-svn-id: http://code.alibabatech.com/svn/druid/trunk@132 b9813039-fb51-4c41-a8b9-e21c2acb5095
This commit is contained in:
+5
-2
@@ -560,6 +560,10 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS
|
||||
}
|
||||
|
||||
public boolean visit(OracleSelectHierachicalQueryClause x) {
|
||||
print("START WITH ");
|
||||
x.getStartWith().accept(this);
|
||||
|
||||
println();
|
||||
print("CONNECT BY ");
|
||||
|
||||
if (x.isPrior()) {
|
||||
@@ -571,8 +575,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS
|
||||
}
|
||||
|
||||
x.getConnectBy().accept(this);
|
||||
print(" START WITH ");
|
||||
x.getStartWith().accept(this);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -15,8 +15,10 @@
|
||||
*/
|
||||
package com.alibaba.druid.sql.dialect.oracle.parser;
|
||||
|
||||
import com.alibaba.druid.sql.ast.SQLExpr;
|
||||
import com.alibaba.druid.sql.ast.SQLOrderingSpecification;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.OracleOrderBy;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleAggregateExpr;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleAnalytic;
|
||||
@@ -55,6 +57,24 @@ public class OracleExprParser extends SQLExprParser {
|
||||
return false;
|
||||
}
|
||||
|
||||
public SQLExpr primary() throws ParserException {
|
||||
final Token tok = lexer.token();
|
||||
|
||||
switch (tok) {
|
||||
case COLON:
|
||||
lexer.nextToken();
|
||||
if (lexer.token() == Token.LITERAL_INT) {
|
||||
String name = ":" + lexer.numberString();
|
||||
lexer.nextToken();
|
||||
return new SQLVariantRefExpr(name);
|
||||
} else{
|
||||
throw new ParserException("syntax error : " + lexer.token());
|
||||
}
|
||||
default:
|
||||
return super.primary();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public OracleOrderBy parseOrderBy() {
|
||||
if (lexer.token() == (Token.ORDER)) {
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
package com.alibaba.druid.sql.dialect.oracle.parser;
|
||||
|
||||
import com.alibaba.druid.sql.ast.statement.SQLInsertStatement;
|
||||
import com.alibaba.druid.sql.ast.SQLStatement;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleInsertStatement;
|
||||
import com.alibaba.druid.sql.parser.Lexer;
|
||||
import com.alibaba.druid.sql.parser.ParserException;
|
||||
@@ -32,7 +32,7 @@ public class OracleInsertParser extends SQLStatementParser {
|
||||
super(lexer);
|
||||
}
|
||||
|
||||
public SQLInsertStatement parseInsert() throws ParserException {
|
||||
public SQLStatement parseInsert() throws ParserException {
|
||||
throw new ParserException("TODO");
|
||||
}
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectTableSource;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectUnPivot;
|
||||
import com.alibaba.druid.sql.parser.Lexer;
|
||||
import com.alibaba.druid.sql.parser.ParserException;
|
||||
import com.alibaba.druid.sql.parser.SQLExprParser;
|
||||
import com.alibaba.druid.sql.parser.SQLSelectParser;
|
||||
import com.alibaba.druid.sql.parser.Token;
|
||||
|
||||
@@ -48,6 +49,10 @@ public class OracleSelectParser extends SQLSelectParser {
|
||||
public OracleSelectParser(Lexer lexer){
|
||||
super(lexer);
|
||||
}
|
||||
|
||||
protected SQLExprParser createExprParser() {
|
||||
return new OracleExprParser(lexer);
|
||||
}
|
||||
|
||||
public OracleSelect select() {
|
||||
OracleSelect select = new OracleSelect();
|
||||
|
||||
@@ -24,6 +24,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateViewStatement;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePLSQLCommitStatement;
|
||||
import com.alibaba.druid.sql.parser.Lexer;
|
||||
import com.alibaba.druid.sql.parser.ParserException;
|
||||
import com.alibaba.druid.sql.parser.SQLExprParser;
|
||||
import com.alibaba.druid.sql.parser.SQLStatementParser;
|
||||
import com.alibaba.druid.sql.parser.Token;
|
||||
|
||||
@@ -37,6 +38,10 @@ public class OracleStatementParser extends SQLStatementParser {
|
||||
public OracleStatementParser(Lexer lexer){
|
||||
super(lexer);
|
||||
}
|
||||
|
||||
protected SQLExprParser createExprParser() {
|
||||
return new OracleExprParser(lexer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parseStatementList(List<SQLStatement> statementList) throws ParserException {
|
||||
|
||||
Reference in New Issue
Block a user