mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
refactor
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
+8
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -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;
|
||||
|
||||
|
||||
+14
-30
@@ -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 (;;) {
|
||||
|
||||
@@ -0,0 +1,149 @@
|
||||
/**
|
||||
* (created at 2011-7-18)
|
||||
*/
|
||||
package com.alibaba.druid.bvt.sql.cobar;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.junit.Assert;
|
||||
|
||||
import com.alibaba.druid.sql.SQLUtils;
|
||||
import com.alibaba.druid.sql.ast.SQLStatement;
|
||||
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
|
||||
import com.alibaba.druid.sql.parser.Token;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:danping.yudp@alibaba-inc.com">YU Danping</a>
|
||||
*/
|
||||
public class DDLParserTest extends TestCase {
|
||||
|
||||
public void testTruncate() throws Exception {
|
||||
String sql = "Truncate table tb1";
|
||||
MySqlStatementParser parser = new MySqlStatementParser(sql);
|
||||
SQLStatement stmt = parser.parseStatementList().get(0);
|
||||
parser.match(Token.EOF);
|
||||
String output = SQLUtils.toMySqlString(stmt);
|
||||
Assert.assertEquals("TRUNCATE TABLE tb1", output);
|
||||
}
|
||||
|
||||
public void testTruncate_1() throws Exception {
|
||||
String sql = "Truncate tb1";
|
||||
MySqlStatementParser parser = new MySqlStatementParser(sql);
|
||||
SQLStatement stmt = parser.parseStatementList().get(0);
|
||||
parser.match(Token.EOF);
|
||||
String output = SQLUtils.toMySqlString(stmt);
|
||||
Assert.assertEquals("TRUNCATE TABLE tb1", output);
|
||||
}
|
||||
|
||||
public void testAlterTable0() throws Exception {
|
||||
String sql = "alTer ignore table tb_name";
|
||||
MySqlStatementParser parser = new MySqlStatementParser(sql);
|
||||
SQLStatement stmt = parser.parseStatementList().get(0);
|
||||
parser.match(Token.EOF);
|
||||
String output = SQLUtils.toMySqlString(stmt);
|
||||
Assert.assertEquals("ALTER ignore table tb_name", output);
|
||||
}
|
||||
|
||||
// public void testDDLStmt() throws Exception {
|
||||
// String sql = "alTer ignore table tb_name";
|
||||
// SQLLexer lexer = new SQLLexer(sql);
|
||||
// DDLParser parser = new DDLParser(lexer, new SQLExprParser(lexer));
|
||||
// DDLStatement dst = parser.ddlStmt();
|
||||
//
|
||||
// sql = "alTeR table tb_name";
|
||||
// lexer = new SQLLexer(sql);
|
||||
// parser = new DDLParser(lexer, new SQLExprParser(lexer));
|
||||
// dst = parser.ddlStmt();
|
||||
//
|
||||
// sql = "crEate temporary tabLe if not exists tb_name";
|
||||
// lexer = new SQLLexer(sql);
|
||||
// parser = new DDLParser(lexer, new SQLExprParser(lexer));
|
||||
// dst = parser.ddlStmt();
|
||||
//
|
||||
// sql = "crEate tabLe if not exists tb_name";
|
||||
// lexer = new SQLLexer(sql);
|
||||
// parser = new DDLParser(lexer, new SQLExprParser(lexer));
|
||||
// dst = parser.ddlStmt();
|
||||
//
|
||||
// sql = "crEate temporary tabLe tb_name";
|
||||
// lexer = new SQLLexer(sql);
|
||||
// parser = new DDLParser(lexer, new SQLExprParser(lexer));
|
||||
// dst = parser.ddlStmt();
|
||||
//
|
||||
// sql = "crEate unique index index_name on tb(col(id)) desc";
|
||||
// lexer = new SQLLexer(sql);
|
||||
// parser = new DDLParser(lexer, new SQLExprParser(lexer));
|
||||
// dst = parser.ddlStmt();
|
||||
//
|
||||
// sql = "crEate fulltext index index_name on tb(col(id))";
|
||||
// lexer = new SQLLexer(sql);
|
||||
// parser = new DDLParser(lexer, new SQLExprParser(lexer));
|
||||
// dst = parser.ddlStmt();
|
||||
//
|
||||
// sql = "crEate spatial index index_name on tb(col(id))";
|
||||
// lexer = new SQLLexer(sql);
|
||||
// parser = new DDLParser(lexer, new SQLExprParser(lexer));
|
||||
// dst = parser.ddlStmt();
|
||||
//
|
||||
// sql = "crEate index index_name using hash on tb(col(id))";
|
||||
// lexer = new SQLLexer(sql);
|
||||
// parser = new DDLParser(lexer, new SQLExprParser(lexer));
|
||||
// dst = parser.ddlStmt();
|
||||
//
|
||||
// sql = "drop index index_name on tb1";
|
||||
// lexer = new SQLLexer(sql);
|
||||
// parser = new DDLParser(lexer, new SQLExprParser(lexer));
|
||||
// dst = parser.ddlStmt();
|
||||
// String output = output2MySQL(dst, sql);
|
||||
// Assert.assertEquals("DROP INDEX index_name ON tb1", output);
|
||||
//
|
||||
// sql = "drop temporary tabLe if exists tb1,tb2,tb3 restrict";
|
||||
// lexer = new SQLLexer(sql);
|
||||
// parser = new DDLParser(lexer, new SQLExprParser(lexer));
|
||||
// dst = parser.ddlStmt();
|
||||
// output = output2MySQL(dst, sql);
|
||||
// Assert.assertEquals("DROP TEMPORARY TABLE IF EXISTS tb1, tb2, tb3 RESTRICT", output);
|
||||
//
|
||||
// sql = "drop temporary tabLe if exists tb1,tb2,tb3 cascade";
|
||||
// lexer = new SQLLexer(sql);
|
||||
// parser = new DDLParser(lexer, new SQLExprParser(lexer));
|
||||
// dst = parser.ddlStmt();
|
||||
// output = output2MySQL(dst, sql);
|
||||
// Assert.assertEquals("DROP TEMPORARY TABLE IF EXISTS tb1, tb2, tb3 CASCADE", output);
|
||||
//
|
||||
// sql = "drop temporary tabLe if exists tb1 cascade";
|
||||
// lexer = new SQLLexer(sql);
|
||||
// parser = new DDLParser(lexer, new SQLExprParser(lexer));
|
||||
// dst = parser.ddlStmt();
|
||||
// output = output2MySQL(dst, sql);
|
||||
// Assert.assertEquals("DROP TEMPORARY TABLE IF EXISTS tb1 CASCADE", output);
|
||||
//
|
||||
// sql = "drop tabLe if exists tb1 cascade";
|
||||
// lexer = new SQLLexer(sql);
|
||||
// parser = new DDLParser(lexer, new SQLExprParser(lexer));
|
||||
// dst = parser.ddlStmt();
|
||||
// output = output2MySQL(dst, sql);
|
||||
// Assert.assertEquals("DROP TABLE IF EXISTS tb1 CASCADE", output);
|
||||
//
|
||||
// sql = "drop temporary tabLe tb1 cascade";
|
||||
// lexer = new SQLLexer(sql);
|
||||
// parser = new DDLParser(lexer, new SQLExprParser(lexer));
|
||||
// dst = parser.ddlStmt();
|
||||
// output = output2MySQL(dst, sql);
|
||||
// Assert.assertEquals("DROP TEMPORARY TABLE tb1 CASCADE", output);
|
||||
//
|
||||
// sql = "rename table tb1 to ntb1,tb2 to ntb2";
|
||||
// lexer = new SQLLexer(sql);
|
||||
// parser = new DDLParser(lexer, new SQLExprParser(lexer));
|
||||
// dst = parser.ddlStmt();
|
||||
// output = output2MySQL(dst, sql);
|
||||
// Assert.assertEquals("RENAME TABLE tb1 TO ntb1, tb2 TO ntb2", output);
|
||||
//
|
||||
// sql = "rename table tb1 to ntb1";
|
||||
// lexer = new SQLLexer(sql);
|
||||
// parser = new DDLParser(lexer, new SQLExprParser(lexer));
|
||||
// dst = parser.ddlStmt();
|
||||
// output = output2MySQL(dst, sql);
|
||||
// Assert.assertEquals("RENAME TABLE tb1 TO ntb1", output);
|
||||
// }
|
||||
}
|
||||
Reference in New Issue
Block a user