This commit is contained in:
温少
2012-05-16 14:56:56 +08:00
parent 30457a8c06
commit 2b2b4a5873
9 changed files with 228 additions and 35 deletions
@@ -0,0 +1,7 @@
package com.alibaba.druid.sql.ast.statement;
import com.alibaba.druid.sql.ast.SQLObject;
public interface SQLAlterTableItem extends SQLObject {
}
@@ -0,0 +1,31 @@
package com.alibaba.druid.sql.ast.statement;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.druid.sql.ast.SQLStatementImpl;
public class SQLAlterTableStatement extends SQLStatementImpl {
private static final long serialVersionUID = 1L;
private SQLExprTableSource tableSource;
private List<SQLAlterTableItem> items = new ArrayList<SQLAlterTableItem>();
public List<SQLAlterTableItem> getItems() {
return items;
}
public void setItems(List<SQLAlterTableItem> items) {
this.items = items;
}
public SQLExprTableSource getTableSource() {
return tableSource;
}
public void setTableSource(SQLExprTableSource tableSource) {
this.tableSource = tableSource;
}
}
@@ -0,0 +1,8 @@
package com.alibaba.druid.sql.dialect.mysql.ast.statement;
public class MySqlAlterTableStatement extends MySqlStatementImpl {
private static final long serialVersionUID = 1L;
}
@@ -1785,4 +1785,9 @@ public class MySqlStatementParser extends SQLStatementParser {
return null;
}
public SQLSetStatement parseAlter() {
accept(Token.ALTER);
throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal());
}
}
@@ -1,8 +1,9 @@
package com.alibaba.druid.sql.dialect.oracle.ast.stmt;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem;
import com.alibaba.druid.sql.dialect.oracle.ast.OracleSQLObjectImpl;
public abstract class OracleAlterTableItem extends OracleSQLObjectImpl {
public abstract class OracleAlterTableItem extends OracleSQLObjectImpl implements SQLAlterTableItem {
private static final long serialVersionUID = 1L;
@@ -1,26 +1,27 @@
package com.alibaba.druid.sql.dialect.oracle.ast.stmt;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement;
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor;
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
public class OracleAlterTableStatement extends OracleStatementImpl {
public class OracleAlterTableStatement extends SQLAlterTableStatement implements OracleStatement {
private static final long serialVersionUID = 1L;
private SQLExprTableSource tableSource;
private List<OracleAlterTableItem> items = new ArrayList<OracleAlterTableItem>();
private static final long serialVersionUID = 1L;
private boolean updateGlobalIndexes = false;
private boolean invalidateGlobalIndexes = false;
private boolean updateGlobalIndexes = false;
private boolean invalidateGlobalIndexes = false;
protected void accept0(SQLASTVisitor visitor) {
accept0((OracleASTVisitor) visitor);
}
@Override
public void accept0(OracleASTVisitor visitor) {
if (visitor.visit(this)) {
acceptChild(visitor, tableSource);
acceptChild(visitor, items);
acceptChild(visitor, getTableSource());
acceptChild(visitor, getItems());
}
visitor.endVisit(this);
}
@@ -42,30 +43,13 @@ public class OracleAlterTableStatement extends OracleStatementImpl {
}
public SQLName getName() {
if (tableSource == null) {
if (getTableSource() == null) {
return null;
}
return (SQLName) tableSource.getExpr();
return (SQLName) getTableSource().getExpr();
}
public void setName(SQLName name) {
this.setTableSource(new SQLExprTableSource(name));
}
public SQLExprTableSource getTableSource() {
return tableSource;
}
public void setTableSource(SQLExprTableSource tableSource) {
this.tableSource = tableSource;
}
public List<OracleAlterTableItem> getItems() {
return items;
}
public void setItems(List<OracleAlterTableItem> items) {
this.items = items;
}
}
@@ -29,6 +29,7 @@ import com.alibaba.druid.sql.ast.expr.SQLLiteralExpr;
import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr;
import com.alibaba.druid.sql.ast.expr.SQLObjectCreateExpr;
import com.alibaba.druid.sql.ast.expr.SQLQueryExpr;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem;
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
import com.alibaba.druid.sql.ast.statement.SQLInsertStatement;
@@ -90,7 +91,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSynonymStatement
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableAddColumn;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableAddConstaint;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableDropPartition;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableItem;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableModify;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableMoveTablespace;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableRenameTo;
@@ -2045,7 +2045,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS
print("ALTER TABLE ");
x.getName().accept(this);
incrementIndent();
for (OracleAlterTableItem item : x.getItems()) {
for (SQLAlterTableItem item : x.getItems()) {
println();
item.accept(this);
}
@@ -109,7 +109,8 @@ public class SQLStatementParser extends SQLParser {
}
if (lexer.token() == Token.ALTER) {
throw new ParserException("TODO");
statementList.add(parseAlter());
continue;
}
if (lexer.token() == Token.DROP) {
@@ -162,6 +163,11 @@ public class SQLStatementParser extends SQLParser {
stmt.setDatabase(this.exprParser.name());
return stmt;
}
public SQLSetStatement parseAlter() {
accept(Token.ALTER);
throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal());
}
protected SQLDropTableStatement parseDropTable(boolean acceptDrop) {
if (acceptDrop) {
@@ -185,7 +191,9 @@ public class SQLStatementParser extends SQLParser {
public SQLStatement parseTruncate() {
accept(Token.TRUNCATE);
accept(Token.TABLE);
if (lexer.token() == Token.TABLE) {
lexer.nextToken();
}
SQLTruncateStatement stmt = new SQLTruncateStatement();
for (;;) {