This commit is contained in:
温少
2012-05-16 19:58:58 +08:00
6 changed files with 100 additions and 4 deletions
@@ -42,6 +42,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLoadDataInFileStat
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLoadXmlStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPartitionByKey;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPrepareStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRenameTableStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlReplicateStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlResetStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRollbackStatement;
@@ -423,12 +424,20 @@ public interface MySqlASTVisitor extends SQLASTVisitor {
boolean visit(MySqlAlterTableStatement x);
void endVisit(MySqlAlterTableStatement x);
boolean visit(MySqlAlterTableAddColumn x);
void endVisit(MySqlAlterTableAddColumn x);
boolean visit(MySqlCreateIndexStatement x);
void endVisit(MySqlCreateIndexStatement x);
boolean visit(MySqlRenameTableStatement.Item x);
void endVisit(MySqlRenameTableStatement.Item x);
boolean visit(MySqlRenameTableStatement x);
void endVisit(MySqlRenameTableStatement x);
}
@@ -28,6 +28,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLoadDataInFileStat
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLoadXmlStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPartitionByKey;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPrepareStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRenameTableStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlReplicateStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlResetStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRollbackStatement;
@@ -937,4 +938,24 @@ public class MySqlASTVisitorAdapter extends SQLASTVisitorAdapter implements
public void endVisit(MySqlCreateIndexStatement x) {
}
@Override
public boolean visit(MySqlRenameTableStatement.Item x) {
return true;
}
@Override
public void endVisit(MySqlRenameTableStatement.Item x) {
}
@Override
public boolean visit(MySqlRenameTableStatement x) {
return true;
}
@Override
public void endVisit(MySqlRenameTableStatement x) {
}
}
@@ -61,6 +61,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLoadDataInFileStat
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLoadXmlStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPartitionByKey;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPrepareStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRenameTableStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlReplicateStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlResetStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRollbackStatement;
@@ -2249,4 +2250,29 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
}
@Override
public boolean visit(MySqlRenameTableStatement.Item x) {
x.getName().accept(this);
print(" TO ");
x.getTo().accept(this);
return false;
}
@Override
public void endVisit(MySqlRenameTableStatement.Item x) {
}
@Override
public boolean visit(MySqlRenameTableStatement x) {
print("RENAME ");
printAndAccept(x.getItems(), ", ");
return false;
}
@Override
public void endVisit(MySqlRenameTableStatement x) {
}
}
@@ -37,6 +37,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLoadDataInFileStat
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLoadXmlStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPartitionByKey;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPrepareStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRenameTableStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlReplicateStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlResetStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRollbackStatement;
@@ -1000,4 +1001,24 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS
public void endVisit(MySqlCreateIndexStatement x) {
}
@Override
public boolean visit(MySqlRenameTableStatement.Item x) {
return false;
}
@Override
public void endVisit(MySqlRenameTableStatement.Item x) {
}
@Override
public boolean visit(MySqlRenameTableStatement x) {
return false;
}
@Override
public void endVisit(MySqlRenameTableStatement x) {
}
}
@@ -153,6 +153,12 @@ public class SQLStatementParser extends SQLParser {
statementList.add(stmt);
continue;
}
if (identifierEquals("RENAME")) {
SQLStatement stmt = parseRename();
statementList.add(stmt);
continue;
}
if (parseStatementListDialect(statementList)) {
continue;
@@ -173,6 +179,10 @@ public class SQLStatementParser extends SQLParser {
accept(Token.ALTER);
throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal());
}
public SQLStatement parseRename() {
throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal());
}
protected SQLDropTableStatement parseDropTable(boolean acceptDrop) {
if (acceptDrop) {
@@ -180,6 +180,15 @@ public class DDLParserTest extends TestCase {
String output = SQLUtils.toMySqlString(stmt);
Assert.assertEquals("DROP TABLE t1", output);
}
public void test_rename_0() throws Exception {
String sql = "RENAME TABLE current_db.tbl_name TO other_db.tbl_name";
MySqlStatementParser parser = new MySqlStatementParser(sql);
SQLStatement stmt = parser.parseStatementList().get(0);
parser.match(Token.EOF);
String output = SQLUtils.toMySqlString(stmt);
Assert.assertEquals("RENAME TABLE current_db.tbl_name TO other_db.tbl_name", output);
}
// public void testDDLStmt() throws Exception {