improved mysql/oracle sql parser.

This commit is contained in:
wenshao
2017-05-20 22:03:21 +08:00
parent ae0ae2e9e0
commit ac4b6059f0
53 changed files with 1449 additions and 296 deletions
@@ -15,6 +15,6 @@
*/
package com.alibaba.druid.sql.ast;
public interface SQLExpr extends SQLObject {
public interface SQLExpr extends SQLObject, Cloneable {
SQLExpr clone();
}
@@ -24,4 +24,8 @@ public abstract class SQLExprImpl extends SQLObjectImpl implements SQLExpr {
public abstract boolean equals(Object o);
public abstract int hashCode();
public SQLExpr clone() {
throw new UnsupportedOperationException();
}
}
@@ -17,4 +17,6 @@ package com.alibaba.druid.sql.ast;
public interface SQLName extends SQLExpr {
String getSimpleName();
SQLName clone();
}
@@ -208,6 +208,10 @@ public class SQLOver extends SQLObjectImpl {
return result;
}
public SQLExpr clone() {
throw new UnsupportedOperationException();
}
public static enum WindowingType {
ROWS, RANGE
}
@@ -18,6 +18,8 @@ package com.alibaba.druid.sql.ast;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleLobStorageClause;
import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleStorageClause;
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
public class SQLPartition extends SQLObjectImpl {
@@ -39,6 +41,16 @@ public class SQLPartition extends SQLObjectImpl {
protected SQLExpr engine;
protected SQLExpr comment;
private SQLExpr ptcfree;
private SQLExpr pctused;
private SQLExpr initrans;
private SQLExpr maxtrans;
private OracleStorageClause storage;
private SQLName tablespace;
private Boolean compress;
private OracleLobStorageClause lobStorage;
public SQLName getName() {
return name;
@@ -174,7 +186,98 @@ public class SQLPartition extends SQLObjectImpl {
acceptChild(visitor, minRows);
acceptChild(visitor, engine);
acceptChild(visitor, comment);
acceptChild(visitor, ptcfree);
acceptChild(visitor, pctused);
acceptChild(visitor, initrans);
acceptChild(visitor, maxtrans);
acceptChild(visitor, storage);
}
visitor.endVisit(this);
}
public SQLExpr getPtcfree() {
return ptcfree;
}
public void setPtcfree(SQLExpr ptcfree) {
if (ptcfree != null) {
ptcfree.setParent(this);
}
this.ptcfree = ptcfree;
}
public SQLExpr getPctused() {
return pctused;
}
public void setPctused(SQLExpr pctused) {
if (pctused != null) {
pctused.setParent(this);
}
this.pctused = pctused;
}
public SQLExpr getInitrans() {
return initrans;
}
public void setInitrans(SQLExpr initrans) {
if (initrans != null) {
initrans.setParent(this);
}
this.initrans = initrans;
}
public SQLExpr getMaxtrans() {
return maxtrans;
}
public void setMaxtrans(SQLExpr maxtrans) {
if (maxtrans != null) {
maxtrans.setParent(this);
}
this.maxtrans = maxtrans;
}
public OracleStorageClause getStorage() {
return storage;
}
public void setStorage(OracleStorageClause storage) {
if (storage != null) {
storage.setParent(this);
}
this.storage = storage;
}
public SQLName getTablespace() {
return tablespace;
}
public void setTablespace(SQLName tablespace) {
if (tablespace != null) {
tablespace.setParent(this);
}
this.tablespace = tablespace;
}
public Boolean getCompress() {
return compress;
}
public void setCompress(Boolean compress) {
this.compress = compress;
}
public OracleLobStorageClause getLobStorage() {
return lobStorage;
}
public void setLobStorage(OracleLobStorageClause lobStorage) {
if (lobStorage != null) {
lobStorage.setParent(this);
}
this.lobStorage = lobStorage;
}
}
@@ -100,4 +100,8 @@ public class SQLIdentifierExpr extends SQLExprImpl implements SQLName {
public String toString() {
return this.name;
}
public SQLIdentifierExpr clone() {
return new SQLIdentifierExpr(this.name);
}
}
@@ -18,6 +18,7 @@ package com.alibaba.druid.sql.ast.expr;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLExprImpl;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.parser.ParserException;
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
public class SQLPropertyExpr extends SQLExprImpl implements SQLName {
@@ -109,4 +110,13 @@ public class SQLPropertyExpr extends SQLExprImpl implements SQLName {
return true;
}
public SQLPropertyExpr clone() {
SQLPropertyExpr propertyExpr = new SQLPropertyExpr();
propertyExpr.name = this.name;
if (owner != null) {
propertyExpr.setOwner(owner.clone());
}
return propertyExpr;
}
}
@@ -50,4 +50,11 @@ public class SQLCheck extends SQLConstraintImpl implements SQLTableElement {
visitor.endVisit(this);
}
public void cloneTo(SQLCheck x) {
super.cloneTo(x);
if (expr != null) {
expr = expr.clone();
}
}
}
@@ -33,6 +33,8 @@ public class SQLColumnDefinition extends SQLObjectImpl implements SQLTableElemen
protected SQLExpr comment;
protected Boolean enable;
protected Boolean validate;
protected Boolean rely;
// for mysql
protected boolean autoIncrement = false;
@@ -69,6 +71,22 @@ public class SQLColumnDefinition extends SQLObjectImpl implements SQLTableElemen
this.enable = enable;
}
public Boolean getValidate() {
return validate;
}
public void setValidate(Boolean validate) {
this.validate = validate;
}
public Boolean getRely() {
return rely;
}
public void setRely(Boolean rely) {
this.rely = rely;
}
public SQLName getName() {
return name;
}
@@ -25,6 +25,8 @@ public abstract class SQLConstraintImpl extends SQLObjectImpl implements SQLCons
private SQLName name;
private Boolean enable;
private Boolean validate;
private Boolean rely;
public List<SQLCommentHint> hints;
@@ -58,4 +60,25 @@ public abstract class SQLConstraintImpl extends SQLObjectImpl implements SQLCons
this.enable = enable;
}
public void cloneTo(SQLConstraint x) {
if (name != null) {
x.setName(name.clone());
}
}
public Boolean getValidate() {
return validate;
}
public void setValidate(Boolean validate) {
this.validate = validate;
}
public Boolean getRely() {
return rely;
}
public void setRely(Boolean rely) {
this.rely = rely;
}
}
@@ -29,6 +29,7 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor;
public class SQLCreateViewStatement extends SQLStatementImpl implements SQLDDLStatement {
private boolean orReplace = false;
private boolean force = false;
protected SQLName name;
protected SQLSelect subQuery;
protected boolean ifNotExists = false;
@@ -140,6 +141,14 @@ public class SQLCreateViewStatement extends SQLStatementImpl implements SQLDDLSt
this.sqlSecurity = sqlSecurity;
}
public boolean isForce() {
return force;
}
public void setForce(boolean force) {
this.force = force;
}
public void output(StringBuffer buf) {
buf.append("CREATE VIEW ");
this.name.output(buf);
@@ -26,6 +26,8 @@ public class SQLForeignKeyImpl extends SQLConstraintImpl implements SQLForeignKe
private SQLName referencedTableName;
private List<SQLName> referencingColumns = new ArrayList<SQLName>();
private List<SQLName> referencedColumns = new ArrayList<SQLName>();
private boolean onDeleteCascade = false;
private boolean onDeleteSetNull = false;
public SQLForeignKeyImpl(){
@@ -51,6 +53,22 @@ public class SQLForeignKeyImpl extends SQLConstraintImpl implements SQLForeignKe
return referencedColumns;
}
public boolean isOnDeleteCascade() {
return onDeleteCascade;
}
public void setOnDeleteCascade(boolean onDeleteCascade) {
this.onDeleteCascade = onDeleteCascade;
}
public boolean isOnDeleteSetNull() {
return onDeleteSetNull;
}
public void setOnDeleteSetNull(boolean onDeleteSetNull) {
this.onDeleteSetNull = onDeleteSetNull;
}
@Override
protected void accept0(SQLASTVisitor visitor) {
if (visitor.visit(this)) {
@@ -62,4 +80,23 @@ public class SQLForeignKeyImpl extends SQLConstraintImpl implements SQLForeignKe
visitor.endVisit(this);
}
public void cloneTo(SQLForeignKeyConstraint x) {
super.cloneTo(x);
if (referencedTableName != null) {
x.setReferencedTableName(referencedTableName.clone());
}
for (SQLName column : referencingColumns) {
SQLName columnClone = column.clone();
columnClone.setParent(x);
x.getReferencingColumns().add(columnClone);
}
for (SQLName column : referencedColumns) {
SQLName columnClone = column.clone();
columnClone.setParent(x);
x.getReferencedColumns().add(columnClone);
}
}
}
@@ -19,11 +19,12 @@ import java.util.ArrayList;
import java.util.List;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
public class SQLUnique extends SQLConstraintImpl implements SQLUniqueConstraint, SQLTableElement {
private final List<SQLExpr> columns = new ArrayList<SQLExpr>();
protected final List<SQLExpr> columns = new ArrayList<SQLExpr>();
public SQLUnique(){
@@ -49,4 +50,12 @@ public class SQLUnique extends SQLConstraintImpl implements SQLUniqueConstraint,
visitor.endVisit(this);
}
public void cloneTo(SQLUnique x) {
super.cloneTo(x);
for (SQLExpr column : columns) {
SQLExpr columnClone = column.clone();
x.addColumn(columnClone);
}
}
}