mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
refactor sql parser
This commit is contained in:
@@ -30,7 +30,6 @@ import com.alibaba.druid.sql.ast.expr.SQLAggregateExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLNullExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLQueryExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddColumn;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem;
|
||||
@@ -44,7 +43,6 @@ import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLIfStatement;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLLoopStatement;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLSelect;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLShowTablesStatement;
|
||||
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlForceIndexHint;
|
||||
@@ -3206,41 +3204,6 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(SQLParameter x) {
|
||||
if (x.getDataType().getName().equalsIgnoreCase("CURSOR")) {
|
||||
print0(ucase ? "CURSOR " : "cursor ");
|
||||
x.getName().accept(this);
|
||||
print0(ucase ? " IS" : " is");
|
||||
incrementIndent();
|
||||
println();
|
||||
SQLSelect select = ((SQLQueryExpr) x.getDefaultValue()).getSubQuery();
|
||||
select.accept(this);
|
||||
decrementIndent();
|
||||
|
||||
} else {
|
||||
|
||||
if (x.getParamType() == SQLParameter.ParameterType.IN) {
|
||||
print0(ucase ? "IN " : "in ");
|
||||
} else if (x.getParamType() == SQLParameter.ParameterType.OUT) {
|
||||
print0(ucase ? "OUT " : "out ");
|
||||
} else if (x.getParamType() == SQLParameter.ParameterType.INOUT) {
|
||||
print0(ucase ? "INOUT " : "inout ");
|
||||
}
|
||||
x.getName().accept(this);
|
||||
print(' ');
|
||||
|
||||
x.getDataType().accept(this);
|
||||
|
||||
if (x.getDefaultValue() != null) {
|
||||
print0(" := ");
|
||||
x.getDefaultValue().accept(this);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(MySqlWhileStatement x) {
|
||||
if (x.getLabelName() != null && !x.getLabelName().equals("")) {
|
||||
|
||||
@@ -28,7 +28,6 @@ import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLLiteralExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLQueryExpr;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLBlockStatement;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLCharacterDataType;
|
||||
@@ -2515,38 +2514,6 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(SQLParameter x) {
|
||||
if (x.getDataType().getName().equalsIgnoreCase("CURSOR")) {
|
||||
print0(ucase ? "CURSOR " : "cursor ");
|
||||
x.getName().accept(this);
|
||||
print0(ucase ? " IS" : " is");
|
||||
incrementIndent();
|
||||
println();
|
||||
SQLSelect select = ((SQLQueryExpr) x.getDefaultValue()).getSubQuery();
|
||||
select.accept(this);
|
||||
decrementIndent();
|
||||
|
||||
} else {
|
||||
x.getName().accept(this);
|
||||
print(' ');
|
||||
|
||||
x.getDataType().accept(this);
|
||||
|
||||
if (x.getDefaultValue() != null) {
|
||||
print0(" := ");
|
||||
x.getDefaultValue().accept(this);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endVisit(SQLParameter x) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(OracleCommitStatement x) {
|
||||
print0(ucase ? "COMMIT" : "commit");
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
/*
|
||||
* Copyright 1999-2101 Alibaba Group Holding Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.alibaba.druid.sql.dialect.postgresql.ast.expr;
|
||||
|
||||
import com.alibaba.druid.sql.ast.SQLDataType;
|
||||
import com.alibaba.druid.sql.ast.SQLExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.PGSQLObjectImpl;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor;
|
||||
|
||||
public class PGParameter extends PGSQLObjectImpl {
|
||||
|
||||
private SQLExpr name;
|
||||
private SQLDataType dataType;
|
||||
|
||||
public SQLExpr getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(SQLExpr name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public SQLDataType getDataType() {
|
||||
return dataType;
|
||||
}
|
||||
|
||||
public void setDataType(SQLDataType dataType) {
|
||||
this.dataType = dataType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void accept0(PGASTVisitor visitor) {
|
||||
if (visitor.visit(this)) {
|
||||
acceptChild(visitor, name);
|
||||
acceptChild(visitor, dataType);
|
||||
}
|
||||
visitor.endVisit(this);
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -19,15 +19,15 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.alibaba.druid.sql.ast.SQLExpr;
|
||||
import com.alibaba.druid.sql.ast.SQLParameter;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.PGSQLObject;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGParameter;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor;
|
||||
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
|
||||
|
||||
public class PGFunctionTableSource extends SQLExprTableSource implements PGSQLObject {
|
||||
|
||||
private final List<PGParameter> parameters = new ArrayList<PGParameter>();
|
||||
private final List<SQLParameter> parameters = new ArrayList<SQLParameter>();
|
||||
|
||||
public PGFunctionTableSource(){
|
||||
|
||||
@@ -37,7 +37,7 @@ public class PGFunctionTableSource extends SQLExprTableSource implements PGSQLOb
|
||||
this.expr = expr;
|
||||
}
|
||||
|
||||
public List<PGParameter> getParameters() {
|
||||
public List<SQLParameter> getParameters() {
|
||||
return parameters;
|
||||
}
|
||||
|
||||
|
||||
@@ -18,13 +18,13 @@ package com.alibaba.druid.sql.dialect.postgresql.parser;
|
||||
import java.util.List;
|
||||
|
||||
import com.alibaba.druid.sql.ast.SQLExpr;
|
||||
import com.alibaba.druid.sql.ast.SQLParameter;
|
||||
import com.alibaba.druid.sql.ast.SQLSetQuantifier;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLSelectQuery;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLTableSource;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGParameter;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGFunctionTableSource;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.IntoOption;
|
||||
@@ -286,9 +286,9 @@ public class PGSelectParser extends SQLSelectParser {
|
||||
return super.parseTableSourceRest(tableSource);
|
||||
}
|
||||
|
||||
private void parserParameters(List<PGParameter> parameters) {
|
||||
private void parserParameters(List<SQLParameter> parameters) {
|
||||
for (;;) {
|
||||
PGParameter parameter = new PGParameter();
|
||||
SQLParameter parameter = new SQLParameter();
|
||||
|
||||
parameter.setName(this.exprParser.name());
|
||||
parameter.setDataType(this.exprParser.parseDataType());
|
||||
|
||||
@@ -25,7 +25,6 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGInetExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGIntervalExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGLineSegmentsExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGMacAddrExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGParameter;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGPointExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGPolygonExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGTypeCastExpr;
|
||||
@@ -85,10 +84,6 @@ public interface PGASTVisitor extends SQLASTVisitor {
|
||||
|
||||
boolean visit(PGUpdateStatement x);
|
||||
|
||||
void endVisit(PGParameter x);
|
||||
|
||||
boolean visit(PGParameter x);
|
||||
|
||||
void endVisit(PGFunctionTableSource x);
|
||||
|
||||
boolean visit(PGFunctionTableSource x);
|
||||
|
||||
-11
@@ -25,7 +25,6 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGInetExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGIntervalExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGLineSegmentsExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGMacAddrExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGParameter;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGPointExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGPolygonExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGTypeCastExpr;
|
||||
@@ -150,16 +149,6 @@ public class PGASTVisitorAdapter extends SQLASTVisitorAdapter implements PGASTVi
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endVisit(PGParameter x) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(PGParameter x) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endVisit(PGFunctionTableSource x) {
|
||||
|
||||
|
||||
@@ -29,7 +29,6 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGInetExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGIntervalExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGLineSegmentsExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGMacAddrExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGParameter;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGPointExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGPolygonExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGTypeCastExpr;
|
||||
@@ -448,21 +447,6 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endVisit(PGParameter x) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(PGParameter x) {
|
||||
x.getName().accept(this);
|
||||
print(' ');
|
||||
|
||||
x.getDataType().accept(this);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(PGFunctionTableSource x) {
|
||||
x.getExpr().accept(this);
|
||||
|
||||
-11
@@ -31,7 +31,6 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGInetExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGIntervalExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGLineSegmentsExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGMacAddrExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGParameter;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGPointExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGPolygonExpr;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGTypeCastExpr;
|
||||
@@ -261,16 +260,6 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit
|
||||
return this.visit((SQLSelectQueryBlock) x);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endVisit(PGParameter x) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(PGParameter x) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endVisit(PGFunctionTableSource x) {
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ import com.alibaba.druid.sql.ast.SQLExpr;
|
||||
import com.alibaba.druid.sql.ast.SQLObject;
|
||||
import com.alibaba.druid.sql.ast.SQLOrderBy;
|
||||
import com.alibaba.druid.sql.ast.SQLOver;
|
||||
import com.alibaba.druid.sql.ast.SQLParameter;
|
||||
import com.alibaba.druid.sql.ast.SQLSetQuantifier;
|
||||
import com.alibaba.druid.sql.ast.SQLStatement;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLAggregateExpr;
|
||||
@@ -2567,6 +2568,41 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
|
||||
print0(ucase ? "END LOOP" : "end loop");
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(SQLParameter x) {
|
||||
if (x.getDataType().getName().equalsIgnoreCase("CURSOR")) {
|
||||
print0(ucase ? "CURSOR " : "cursor ");
|
||||
x.getName().accept(this);
|
||||
print0(ucase ? " IS" : " is");
|
||||
incrementIndent();
|
||||
println();
|
||||
SQLSelect select = ((SQLQueryExpr) x.getDefaultValue()).getSubQuery();
|
||||
select.accept(this);
|
||||
decrementIndent();
|
||||
|
||||
} else {
|
||||
|
||||
if (x.getParamType() == SQLParameter.ParameterType.IN) {
|
||||
print0(ucase ? "IN " : "in ");
|
||||
} else if (x.getParamType() == SQLParameter.ParameterType.OUT) {
|
||||
print0(ucase ? "OUT " : "out ");
|
||||
} else if (x.getParamType() == SQLParameter.ParameterType.INOUT) {
|
||||
print0(ucase ? "INOUT " : "inout ");
|
||||
}
|
||||
x.getName().accept(this);
|
||||
print(' ');
|
||||
|
||||
x.getDataType().accept(this);
|
||||
|
||||
if (x.getDefaultValue() != null) {
|
||||
print0(" := ");
|
||||
x.getDefaultValue().accept(this);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isUppCase() {
|
||||
return ucase;
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
package com.alibaba.druid.bvt.sql.postgresql;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithClause;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithQuery;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGParameter;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGDeleteStatement;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGFunctionTableSource;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.FetchClause;
|
||||
@@ -12,6 +9,8 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.ForC
|
||||
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.WindowClause;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitorAdapter;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
public class PGASTVisitorAdapterTest extends TestCase {
|
||||
|
||||
public void test_adapter() throws Exception {
|
||||
@@ -23,7 +22,6 @@ public class PGASTVisitorAdapterTest extends TestCase {
|
||||
new PGWithQuery().accept(adapter);
|
||||
new PGWithClause().accept(adapter);
|
||||
new PGDeleteStatement().accept(adapter);
|
||||
new PGParameter().accept(adapter);
|
||||
new PGFunctionTableSource().accept(adapter);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user