mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improved sql parser.
This commit is contained in:
@@ -28,11 +28,23 @@ public class MySqlExtractExpr extends SQLExprImpl implements MySqlExpr {
|
||||
public MySqlExtractExpr(){
|
||||
}
|
||||
|
||||
public MySqlExtractExpr clone() {
|
||||
MySqlExtractExpr x = new MySqlExtractExpr();
|
||||
if (value != null) {
|
||||
x.setValue(value.clone());
|
||||
}
|
||||
x.unit = unit;
|
||||
return x;
|
||||
}
|
||||
|
||||
public SQLExpr getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setValue(SQLExpr value) {
|
||||
if (value != null) {
|
||||
value.setParent(this);
|
||||
}
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
|
||||
@@ -28,6 +28,15 @@ public class MySqlIntervalExpr extends SQLExprImpl implements MySqlExpr {
|
||||
public MySqlIntervalExpr(){
|
||||
}
|
||||
|
||||
public MySqlIntervalExpr clone() {
|
||||
MySqlIntervalExpr x = new MySqlIntervalExpr();
|
||||
if (value != null) {
|
||||
x.setValue(value.clone());
|
||||
}
|
||||
x.unit = unit;
|
||||
return x;
|
||||
}
|
||||
|
||||
public SQLExpr getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -31,6 +31,20 @@ public class MySqlMatchAgainstExpr extends SQLExprImpl implements MySqlExpr {
|
||||
|
||||
private SearchModifier searchModifier;
|
||||
|
||||
public MySqlMatchAgainstExpr clone() {
|
||||
MySqlMatchAgainstExpr x = new MySqlMatchAgainstExpr();
|
||||
for (SQLExpr column : columns) {
|
||||
SQLExpr column2 = column.clone();
|
||||
column2.setParent(x);
|
||||
x.columns.add(column2);
|
||||
}
|
||||
if (against != null) {
|
||||
x.setAgainst(against.clone());
|
||||
}
|
||||
x.searchModifier = searchModifier;
|
||||
return x;
|
||||
}
|
||||
|
||||
public List<SQLExpr> getColumns() {
|
||||
return columns;
|
||||
}
|
||||
@@ -44,6 +58,9 @@ public class MySqlMatchAgainstExpr extends SQLExprImpl implements MySqlExpr {
|
||||
}
|
||||
|
||||
public void setAgainst(SQLExpr against) {
|
||||
if (against != null) {
|
||||
against.setParent(this);
|
||||
}
|
||||
this.against = against;
|
||||
}
|
||||
|
||||
|
||||
@@ -32,10 +32,19 @@ public class MySqlOrderingExpr extends SQLExprImpl implements MySqlExpr {
|
||||
|
||||
public MySqlOrderingExpr(SQLExpr expr, SQLOrderingSpecification type){
|
||||
super();
|
||||
this.expr = expr;
|
||||
setExpr(expr);
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public MySqlOrderingExpr clone() {
|
||||
MySqlOrderingExpr x = new MySqlOrderingExpr();
|
||||
if (expr != null) {
|
||||
x.setExpr(expr.clone());
|
||||
}
|
||||
x.type = type;
|
||||
return x;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void accept0(SQLASTVisitor visitor) {
|
||||
MySqlASTVisitor mysqlVisitor = (MySqlASTVisitor) visitor;
|
||||
@@ -51,7 +60,9 @@ public class MySqlOrderingExpr extends SQLExprImpl implements MySqlExpr {
|
||||
}
|
||||
|
||||
public void setExpr(SQLExpr expr) {
|
||||
expr.setParent(this);
|
||||
if (expr != null) {
|
||||
expr.setParent(this);
|
||||
}
|
||||
this.expr = expr;
|
||||
}
|
||||
|
||||
|
||||
+29
@@ -22,6 +22,7 @@ import com.alibaba.druid.sql.ast.*;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
|
||||
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObject;
|
||||
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectQueryBlock;
|
||||
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
|
||||
|
||||
public class MySqlSelectQueryBlock extends SQLSelectQueryBlock implements MySqlObject {
|
||||
@@ -46,6 +47,34 @@ public class MySqlSelectQueryBlock extends SQLSelectQueryBlock implements MySqlO
|
||||
|
||||
}
|
||||
|
||||
public MySqlSelectQueryBlock clone() {
|
||||
MySqlSelectQueryBlock x = new MySqlSelectQueryBlock();
|
||||
cloneTo(x);
|
||||
|
||||
x.hignPriority = hignPriority;
|
||||
x.straightJoin = straightJoin;
|
||||
|
||||
x.smallResult = smallResult;
|
||||
x.bigResult = bigResult;
|
||||
x.bufferResult = bufferResult;
|
||||
x.cache = cache;
|
||||
x.calcFoundRows = calcFoundRows;
|
||||
|
||||
if (procedureName != null) {
|
||||
x.setProcedureName(procedureName.clone());
|
||||
}
|
||||
if (procedureArgumentList != null) {
|
||||
for (SQLExpr arg : procedureArgumentList) {
|
||||
SQLExpr arg_cloned = arg.clone();
|
||||
arg_cloned.setParent(this);
|
||||
x.procedureArgumentList.add(arg_cloned);
|
||||
}
|
||||
}
|
||||
x.lockInShareMode = lockInShareMode;
|
||||
|
||||
return x;
|
||||
}
|
||||
|
||||
public int getHintsSize() {
|
||||
if (hints == null) {
|
||||
return 0;
|
||||
|
||||
@@ -16,10 +16,7 @@
|
||||
package com.alibaba.druid.sql.dialect.mysql.visitor;
|
||||
|
||||
import com.alibaba.druid.sql.ast.*;
|
||||
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.SQLVariantRefExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.*;
|
||||
import com.alibaba.druid.sql.ast.statement.*;
|
||||
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlForceIndexHint;
|
||||
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlIgnoreIndexHint;
|
||||
@@ -3677,4 +3674,31 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
|
||||
block.accept(this);
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(SQLCommentStatement x) {
|
||||
SQLCommentStatement.Type type = x.getType();
|
||||
|
||||
SQLExpr on = x.getOn();
|
||||
if (type == SQLCommentStatement.Type.TABLE) {
|
||||
print0(ucase ? "ALTER TABLE " : "alter table ");
|
||||
on.accept(this);
|
||||
print0(ucase ? " COMMENT = " : " comment = ");
|
||||
x.getComment().accept(this);
|
||||
} else {
|
||||
SQLPropertyExpr propertyExpr = (SQLPropertyExpr) on;
|
||||
|
||||
SQLExpr table = propertyExpr.getOwner();
|
||||
String column = propertyExpr.getName();
|
||||
|
||||
print0(ucase ? "ALTER TABLE " : "alter table ");
|
||||
table.accept(this);
|
||||
print0(ucase ? " MODIFY COLUMN " : " modify column ");
|
||||
print(column);
|
||||
print0(ucase ? " COMMENT " : " comment ");
|
||||
x.getComment().accept(this);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
} //
|
||||
|
||||
@@ -28,9 +28,16 @@ public class OracleCursorExpr extends SQLExprImpl implements OracleExpr {
|
||||
|
||||
}
|
||||
|
||||
public OracleCursorExpr clone() {
|
||||
OracleCursorExpr x = new OracleCursorExpr();
|
||||
if (query != null) {
|
||||
x.setQuery(query.clone());
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
public OracleCursorExpr(SQLSelect query){
|
||||
super();
|
||||
this.query = query;
|
||||
setQuery(query);
|
||||
}
|
||||
|
||||
public SQLSelect getQuery() {
|
||||
|
||||
@@ -31,11 +31,22 @@ public class OracleIsSetExpr extends SQLExprImpl implements OracleExpr {
|
||||
this.nestedTable = nestedTable;
|
||||
}
|
||||
|
||||
public OracleIsSetExpr clone() {
|
||||
OracleIsSetExpr x = new OracleIsSetExpr();
|
||||
if (nestedTable != null) {
|
||||
x.setNestedTable(nestedTable.clone());
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
public SQLExpr getNestedTable() {
|
||||
return nestedTable;
|
||||
}
|
||||
|
||||
public void setNestedTable(SQLExpr nestedTable) {
|
||||
if (nestedTable != null) {
|
||||
nestedTable.setParent(this);
|
||||
}
|
||||
this.nestedTable = nestedTable;
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,14 @@ public class PGBoxExpr extends PGExprImpl {
|
||||
|
||||
private SQLExpr value;
|
||||
|
||||
public PGBoxExpr clone() {
|
||||
PGBoxExpr x = new PGBoxExpr();
|
||||
if (value != null) {
|
||||
x.setValue(value.clone());
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
public SQLExpr getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -22,6 +22,14 @@ public class PGCidrExpr extends PGExprImpl {
|
||||
|
||||
private SQLExpr value;
|
||||
|
||||
public PGCidrExpr clone() {
|
||||
PGCidrExpr x = new PGCidrExpr();
|
||||
if (value != null) {
|
||||
x.setValue(value.clone());
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
public SQLExpr getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -22,6 +22,14 @@ public class PGCircleExpr extends PGExprImpl {
|
||||
|
||||
private SQLExpr value;
|
||||
|
||||
public PGCircleExpr clone() {
|
||||
PGCircleExpr x = new PGCircleExpr();
|
||||
if (value != null) {
|
||||
x.setValue(value.clone());
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
public SQLExpr getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -23,6 +23,15 @@ public class PGExtractExpr extends PGExprImpl {
|
||||
private PGDateField field;
|
||||
private SQLExpr source;
|
||||
|
||||
public PGExtractExpr clone() {
|
||||
PGExtractExpr x = new PGExtractExpr();
|
||||
x.field = field;
|
||||
if (source != null) {
|
||||
x.setSource(source.clone());
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
public PGDateField getField() {
|
||||
return field;
|
||||
}
|
||||
@@ -36,6 +45,9 @@ public class PGExtractExpr extends PGExprImpl {
|
||||
}
|
||||
|
||||
public void setSource(SQLExpr source) {
|
||||
if (source != null) {
|
||||
source.setParent(this);
|
||||
}
|
||||
this.source = source;
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,14 @@ public class PGInetExpr extends PGExprImpl {
|
||||
|
||||
private SQLExpr value;
|
||||
|
||||
public PGInetExpr clone() {
|
||||
PGInetExpr x = new PGInetExpr();
|
||||
if (value != null) {
|
||||
x.setValue(value.clone());
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
public SQLExpr getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
+8
@@ -22,6 +22,14 @@ public class PGLineSegmentsExpr extends PGExprImpl {
|
||||
|
||||
private SQLExpr value;
|
||||
|
||||
public PGLineSegmentsExpr clone() {
|
||||
PGLineSegmentsExpr x = new PGLineSegmentsExpr();
|
||||
if (value != null) {
|
||||
x.setValue(value.clone());
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
public SQLExpr getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -23,6 +23,14 @@ public class PGMacAddrExpr extends PGExprImpl {
|
||||
|
||||
private SQLExpr value;
|
||||
|
||||
public PGMacAddrExpr clone() {
|
||||
PGMacAddrExpr x = new PGMacAddrExpr();
|
||||
if (value != null) {
|
||||
x.setValue(value.clone());
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
public SQLExpr getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -22,6 +22,14 @@ public class PGPointExpr extends PGExprImpl {
|
||||
|
||||
private SQLExpr value;
|
||||
|
||||
public PGPointExpr clone() {
|
||||
PGPointExpr x = new PGPointExpr();
|
||||
if (value != null) {
|
||||
x.setValue(value.clone());
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
public SQLExpr getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -23,6 +23,14 @@ public class PGPolygonExpr extends PGExprImpl {
|
||||
|
||||
private SQLExpr value;
|
||||
|
||||
public PGPolygonExpr clone() {
|
||||
PGPolygonExpr x = new PGPolygonExpr();
|
||||
if (value != null) {
|
||||
x.setValue(value.clone());
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
public SQLExpr getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user