mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improved mysql/oracle sql parser.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user