This commit is contained in:
温少
2012-03-15 14:25:42 +08:00
parent 4bf0785f57
commit fc910ce774
11 changed files with 38 additions and 20 deletions
@@ -9,21 +9,25 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor;
public class SQLTruncateStatement extends SQLStatementImpl {
private static final long serialVersionUID = 1L;
protected List<SQLName> tableNames = new ArrayList<SQLName>(2);
private static final long serialVersionUID = 1L;
protected List<SQLExprTableSource> tableSources = new ArrayList<SQLExprTableSource>(2);
public List<SQLName> getTableNames() {
return tableNames;
public List<SQLExprTableSource> getTableSources() {
return tableSources;
}
public void setTableNames(List<SQLName> tableNames) {
this.tableNames = tableNames;
public void setTableSources(List<SQLExprTableSource> tableSources) {
this.tableSources = tableSources;
}
public void addTableSource(SQLName name) {
this.tableSources.add(new SQLExprTableSource(name));
}
@Override
protected void accept0(SQLASTVisitor visitor) {
if (visitor.visit(this)) {
acceptChild(visitor, tableNames);
acceptChild(visitor, tableSources);
}
visitor.endVisit(this);
}
@@ -4,12 +4,13 @@ import java.util.ArrayList;
import java.util.List;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor;
public class OracleAlterTableStatement extends OracleStatementImpl {
private static final long serialVersionUID = 1L;
private SQLName name;
private SQLExprTableSource tableSource;
private List<OracleAlterTableItem> items = new ArrayList<OracleAlterTableItem>();
private boolean updateGlobalIndexes = false;
@@ -18,7 +19,7 @@ public class OracleAlterTableStatement extends OracleStatementImpl {
@Override
public void accept0(OracleASTVisitor visitor) {
if (visitor.visit(this)) {
acceptChild(visitor, name);
acceptChild(visitor, tableSource);
acceptChild(visitor, items);
}
visitor.endVisit(this);
@@ -41,11 +42,22 @@ public class OracleAlterTableStatement extends OracleStatementImpl {
}
public SQLName getName() {
return name;
if (tableSource == null) {
return null;
}
return (SQLName) tableSource.getExpr();
}
public void setName(SQLName name) {
this.name = name;
this.setTableSource(new SQLExprTableSource(name));
}
public SQLExprTableSource getTableSource() {
return tableSource;
}
public void setTableSource(SQLExprTableSource tableSource) {
this.tableSource = tableSource;
}
public List<OracleAlterTableItem> getItems() {
@@ -17,7 +17,7 @@ public class OracleTruncateStatement extends SQLTruncateStatement implements Ora
public void accept0(OracleASTVisitor visitor) {
if (visitor.visit(this)) {
acceptChild(visitor, tableNames);
acceptChild(visitor, tableSources);
}
visitor.endVisit(this);
}
@@ -580,7 +580,7 @@ public class OracleStatementParser extends SQLStatementParser {
OracleTruncateStatement stmt = new OracleTruncateStatement();
SQLName name = this.exprParser.name();
stmt.getTableNames().add(name);
stmt.addTableSource(name);
if (identifierEquals("PURGE")) {
lexer.nextToken();
@@ -2839,7 +2839,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS
@Override
public boolean visit(OracleTruncateStatement x) {
print("TRUNCATE TABLE ");
printAndAccept(x.getTableNames(), ", ");
printAndAccept(x.getTableSources(), ", ");
if (x.isPurgeSnapshotLog()) {
print(" PURGE SNAPSHOT LOG");
@@ -37,7 +37,7 @@ public class PGTruncateStatement extends SQLTruncateStatement implements PGSQLSt
public void accept0(PGASTVisitor visitor) {
if (visitor.visit(this)) {
acceptChild(visitor, tableNames);
acceptChild(visitor, tableSources);
}
visitor.endVisit(this);
}
@@ -205,7 +205,7 @@ public class PGSQLStatementParser extends SQLStatementParser {
for (;;) {
SQLName name = this.exprParser.name();
stmt.getTableNames().add(name);
stmt.addTableSource(name);
if (lexer.token() == Token.COMMA) {
lexer.nextToken();
@@ -251,7 +251,7 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor
print("ONLY ");
}
printlnAndAccept(x.getTableNames(), ", ");
printlnAndAccept(x.getTableSources(), ", ");
if (x.getRestartIdentity() != null) {
if (x.getRestartIdentity().booleanValue()) {
@@ -176,7 +176,7 @@ public class SQLStatementParser extends SQLParser {
for (;;) {
SQLName name = this.exprParser.name();
stmt.getTableNames().add(name);
stmt.addTableSource(name);
if (lexer.token() == Token.COMMA) {
lexer.nextToken();
@@ -967,7 +967,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter {
@Override
public boolean visit(SQLTruncateStatement x) {
print("TRUNCATE TABLE ");
printAndAccept(x.getTableNames(), ", ");
printAndAccept(x.getTableSources(), ", ");
return false;
}
@@ -377,7 +377,9 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter {
String originalTable = getCurrentTable();
for (SQLName name : x.getTableNames()) {
for (SQLExprTableSource tableSource : x.getTableSources()) {
SQLName name = (SQLName) tableSource.getExpr();
String ident = name.toString();
setCurrentTable(ident);
x.putAttribute("_old_local_", originalTable);