/* * 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-9-12) */ package com.alibaba.cobar.parser.recognizer.mysql.syntax; import java.sql.SQLSyntaxErrorException; import junit.framework.Assert; import com.alibaba.cobar.parser.ast.stmt.mts.MTSReleaseStatement; import com.alibaba.cobar.parser.ast.stmt.mts.MTSRollbackStatement; import com.alibaba.cobar.parser.ast.stmt.mts.MTSSavepointStatement; import com.alibaba.cobar.parser.recognizer.mysql.lexer.MySQLLexer; /** * @author <a href="mailto:shuo.qius@alibaba-inc.com">QIU Shuo</a> */ public class MySQLMTSParserTest extends AbstractSyntaxTest { public void testSavepint() throws SQLSyntaxErrorException { String sql = " savepoint 123e123e"; MySQLMTSParser parser = new MySQLMTSParser(new MySQLLexer(sql)); MTSSavepointStatement savepoint = parser.savepoint(); String output = output2MySQL(savepoint, sql); Assert.assertEquals("SAVEPOINT 123e123e", output); Assert.assertEquals("123e123e", savepoint.getSavepoint().getIdText()); sql = " savepoint SAVEPOINT"; parser = new MySQLMTSParser(new MySQLLexer(sql)); savepoint = parser.savepoint(); output = output2MySQL(savepoint, sql); Assert.assertEquals("SAVEPOINT SAVEPOINT", output); Assert.assertEquals("SAVEPOINT", savepoint.getSavepoint().getIdText()); sql = " savepoInt `select`"; parser = new MySQLMTSParser(new MySQLLexer(sql)); savepoint = parser.savepoint(); output = output2MySQL(savepoint, sql); Assert.assertEquals("SAVEPOINT `select`", output); Assert.assertEquals("`select`", savepoint.getSavepoint().getIdText()); } public void testRelease() throws SQLSyntaxErrorException { String sql = "Release sAVEPOINT 1234e "; MySQLMTSParser parser = new MySQLMTSParser(new MySQLLexer(sql)); MTSReleaseStatement savepoint = parser.release(); String output = output2MySQL(savepoint, sql); Assert.assertEquals("RELEASE SAVEPOINT 1234e", output); Assert.assertEquals("1234e", savepoint.getSavepoint().getIdText()); sql = "Release SAVEPOINT sAVEPOINT"; parser = new MySQLMTSParser(new MySQLLexer(sql)); savepoint = parser.release(); output = output2MySQL(savepoint, sql); Assert.assertEquals("RELEASE SAVEPOINT sAVEPOINT", output); Assert.assertEquals("sAVEPOINT", savepoint.getSavepoint().getIdText()); } public void testRollback() throws SQLSyntaxErrorException { // ROLLBACK [WORK] TO [SAVEPOINT] identifier // ROLLBACK [WORK] [AND [NO] CHAIN | [NO] RELEASE] String sql = "rollBack work "; MySQLMTSParser parser = new MySQLMTSParser(new MySQLLexer(sql)); MTSRollbackStatement rollback = parser.rollback(); String output = output2MySQL(rollback, sql); Assert.assertEquals("ROLLBACK", output); Assert.assertEquals(MTSRollbackStatement.CompleteType.UN_DEF, rollback.getCompleteType()); Assert.assertNull(rollback.getSavepoint()); sql = "rollBack "; parser = new MySQLMTSParser(new MySQLLexer(sql)); rollback = parser.rollback(); output = output2MySQL(rollback, sql); Assert.assertEquals("ROLLBACK", output); Assert.assertEquals(MTSRollbackStatement.CompleteType.UN_DEF, rollback.getCompleteType()); Assert.assertNull(rollback.getSavepoint()); sql = "rollBack work TO savepoint 123e "; parser = new MySQLMTSParser(new MySQLLexer(sql)); rollback = parser.rollback(); output = output2MySQL(rollback, sql); Assert.assertEquals("ROLLBACK TO SAVEPOINT 123e", output); Assert.assertEquals("123e", rollback.getSavepoint().getIdText()); Assert.assertNull(rollback.getCompleteType()); sql = "rollBack to savePOINT savepoint "; parser = new MySQLMTSParser(new MySQLLexer(sql)); rollback = parser.rollback(); output = output2MySQL(rollback, sql); Assert.assertEquals("ROLLBACK TO SAVEPOINT savepoint", output); Assert.assertEquals("savepoint", rollback.getSavepoint().getIdText()); Assert.assertNull(rollback.getCompleteType()); sql = "rollBack to `select` "; parser = new MySQLMTSParser(new MySQLLexer(sql)); rollback = parser.rollback(); output = output2MySQL(rollback, sql); Assert.assertEquals("ROLLBACK TO SAVEPOINT `select`", output); Assert.assertEquals("`select`", rollback.getSavepoint().getIdText()); Assert.assertNull(rollback.getCompleteType()); sql = "rollBack work to `select` "; parser = new MySQLMTSParser(new MySQLLexer(sql)); rollback = parser.rollback(); output = output2MySQL(rollback, sql); Assert.assertEquals("ROLLBACK TO SAVEPOINT `select`", output); Assert.assertEquals("`select`", rollback.getSavepoint().getIdText()); Assert.assertNull(rollback.getCompleteType()); sql = "rollBack work and no chaiN "; parser = new MySQLMTSParser(new MySQLLexer(sql)); rollback = parser.rollback(); output = output2MySQL(rollback, sql); Assert.assertEquals("ROLLBACK AND NO CHAIN", output); Assert.assertEquals(MTSRollbackStatement.CompleteType.NO_CHAIN, rollback.getCompleteType()); Assert.assertNull(rollback.getSavepoint()); sql = "rollBack work and chaiN "; parser = new MySQLMTSParser(new MySQLLexer(sql)); rollback = parser.rollback(); output = output2MySQL(rollback, sql); Assert.assertEquals("ROLLBACK AND CHAIN", output); Assert.assertEquals(MTSRollbackStatement.CompleteType.CHAIN, rollback.getCompleteType()); Assert.assertNull(rollback.getSavepoint()); sql = "rollBack work NO release "; parser = new MySQLMTSParser(new MySQLLexer(sql)); rollback = parser.rollback(); output = output2MySQL(rollback, sql); Assert.assertEquals("ROLLBACK NO RELEASE", output); Assert.assertEquals(MTSRollbackStatement.CompleteType.NO_RELEASE, rollback.getCompleteType()); Assert.assertNull(rollback.getSavepoint()); sql = "rollBack work release "; parser = new MySQLMTSParser(new MySQLLexer(sql)); rollback = parser.rollback(); output = output2MySQL(rollback, sql); Assert.assertEquals("ROLLBACK RELEASE", output); Assert.assertEquals(MTSRollbackStatement.CompleteType.RELEASE, rollback.getCompleteType()); Assert.assertNull(rollback.getSavepoint()); sql = "rollBack and no chaiN "; parser = new MySQLMTSParser(new MySQLLexer(sql)); rollback = parser.rollback(); output = output2MySQL(rollback, sql); Assert.assertEquals("ROLLBACK AND NO CHAIN", output); Assert.assertEquals(MTSRollbackStatement.CompleteType.NO_CHAIN, rollback.getCompleteType()); Assert.assertNull(rollback.getSavepoint()); sql = "rollBack and chaiN "; parser = new MySQLMTSParser(new MySQLLexer(sql)); rollback = parser.rollback(); output = output2MySQL(rollback, sql); Assert.assertEquals("ROLLBACK AND CHAIN", output); Assert.assertEquals(MTSRollbackStatement.CompleteType.CHAIN, rollback.getCompleteType()); Assert.assertNull(rollback.getSavepoint()); sql = "rollBack NO release "; parser = new MySQLMTSParser(new MySQLLexer(sql)); rollback = parser.rollback(); output = output2MySQL(rollback, sql); Assert.assertEquals("ROLLBACK NO RELEASE", output); Assert.assertEquals(MTSRollbackStatement.CompleteType.NO_RELEASE, rollback.getCompleteType()); Assert.assertNull(rollback.getSavepoint()); sql = "rollBack release "; parser = new MySQLMTSParser(new MySQLLexer(sql)); rollback = parser.rollback(); output = output2MySQL(rollback, sql); Assert.assertEquals("ROLLBACK RELEASE", output); Assert.assertEquals(MTSRollbackStatement.CompleteType.RELEASE, rollback.getCompleteType()); Assert.assertNull(rollback.getSavepoint()); } }