/* * Copyright 1999-2012 Alibaba Group. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * (created at 2011-7-18) */ package com.alibaba.cobar.parser.recognizer.mysql.syntax; import org.junit.Assert; import com.alibaba.cobar.parser.ast.stmt.ddl.DDLStatement; import com.alibaba.cobar.parser.ast.stmt.ddl.DDLTruncateStatement; import com.alibaba.cobar.parser.recognizer.mysql.MySQLToken; import com.alibaba.cobar.parser.recognizer.mysql.lexer.MySQLLexer; /** * @author <a href="mailto:danping.yudp@alibaba-inc.com">YU Danping</a> */ public class MySQLDDLParserTest extends AbstractSyntaxTest { public void testTruncate() throws Exception { String sql = "Truncate table tb1"; MySQLLexer lexer = new MySQLLexer(sql); MySQLDDLParser parser = new MySQLDDLParser(lexer, new MySQLExprParser(lexer)); DDLStatement trun = (DDLTruncateStatement) parser.truncate(); parser.match(MySQLToken.EOF); String output = output2MySQL(trun, sql); Assert.assertEquals("TRUNCATE TABLE tb1", output); sql = "Truncate tb1"; lexer = new MySQLLexer(sql); parser = new MySQLDDLParser(lexer, new MySQLExprParser(lexer)); trun = (DDLTruncateStatement) parser.truncate(); parser.match(MySQLToken.EOF); output = output2MySQL(trun, sql); Assert.assertEquals("TRUNCATE TABLE tb1", output); } public void testDDLStmt() throws Exception { String sql = "alTer ignore table tb_name"; MySQLLexer lexer = new MySQLLexer(sql); MySQLDDLParser parser = new MySQLDDLParser(lexer, new MySQLExprParser(lexer)); DDLStatement dst = parser.ddlStmt(); sql = "alTeR table tb_name"; lexer = new MySQLLexer(sql); parser = new MySQLDDLParser(lexer, new MySQLExprParser(lexer)); dst = parser.ddlStmt(); sql = "crEate temporary tabLe if not exists tb_name"; lexer = new MySQLLexer(sql); parser = new MySQLDDLParser(lexer, new MySQLExprParser(lexer)); dst = parser.ddlStmt(); sql = "crEate tabLe if not exists tb_name"; lexer = new MySQLLexer(sql); parser = new MySQLDDLParser(lexer, new MySQLExprParser(lexer)); dst = parser.ddlStmt(); sql = "crEate temporary tabLe tb_name"; lexer = new MySQLLexer(sql); parser = new MySQLDDLParser(lexer, new MySQLExprParser(lexer)); dst = parser.ddlStmt(); sql = "crEate unique index index_name on tb(col(id)) desc"; lexer = new MySQLLexer(sql); parser = new MySQLDDLParser(lexer, new MySQLExprParser(lexer)); dst = parser.ddlStmt(); sql = "crEate fulltext index index_name on tb(col(id))"; lexer = new MySQLLexer(sql); parser = new MySQLDDLParser(lexer, new MySQLExprParser(lexer)); dst = parser.ddlStmt(); sql = "crEate spatial index index_name on tb(col(id))"; lexer = new MySQLLexer(sql); parser = new MySQLDDLParser(lexer, new MySQLExprParser(lexer)); dst = parser.ddlStmt(); sql = "crEate index index_name using hash on tb(col(id))"; lexer = new MySQLLexer(sql); parser = new MySQLDDLParser(lexer, new MySQLExprParser(lexer)); dst = parser.ddlStmt(); sql = "drop index index_name on tb1"; lexer = new MySQLLexer(sql); parser = new MySQLDDLParser(lexer, new MySQLExprParser(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 MySQLLexer(sql); parser = new MySQLDDLParser(lexer, new MySQLExprParser(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 MySQLLexer(sql); parser = new MySQLDDLParser(lexer, new MySQLExprParser(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 MySQLLexer(sql); parser = new MySQLDDLParser(lexer, new MySQLExprParser(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 MySQLLexer(sql); parser = new MySQLDDLParser(lexer, new MySQLExprParser(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 MySQLLexer(sql); parser = new MySQLDDLParser(lexer, new MySQLExprParser(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 MySQLLexer(sql); parser = new MySQLDDLParser(lexer, new MySQLExprParser(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 MySQLLexer(sql); parser = new MySQLDDLParser(lexer, new MySQLExprParser(lexer)); dst = parser.ddlStmt(); output = output2MySQL(dst, sql); Assert.assertEquals("RENAME TABLE tb1 TO ntb1", output); } }