상속: MySqlParser
예제 #1
0
 public virtual void TestRelease()
 {
     var sql = "Release sAVEPOINT 1234e   ";
     var parser = new MySqlMtsParser(new MySqlLexer(sql));
     var savepoint = parser.Release();
     var output = Output2MySql(savepoint, sql);
     Assert.AreEqual("RELEASE SAVEPOINT 1234e", output);
     Assert.AreEqual("1234e", savepoint.Savepoint.IdText);
     sql = "Release SAVEPOINT sAVEPOINT";
     parser = new MySqlMtsParser(new MySqlLexer(sql));
     savepoint = parser.Release();
     output = Output2MySql(savepoint, sql);
     Assert.AreEqual("RELEASE SAVEPOINT sAVEPOINT", output);
     Assert.AreEqual("sAVEPOINT", savepoint.Savepoint.IdText);
 }
예제 #2
0
        public virtual void TestRelease()
        {
            var sql       = "Release sAVEPOINT 1234e   ";
            var parser    = new MySqlMtsParser(new MySqlLexer(sql));
            var savepoint = parser.Release();
            var output    = Output2MySql(savepoint, sql);

            Assert.AreEqual("RELEASE SAVEPOINT 1234e", output);
            Assert.AreEqual("1234e", savepoint.Savepoint.IdText);
            sql       = "Release SAVEPOINT sAVEPOINT";
            parser    = new MySqlMtsParser(new MySqlLexer(sql));
            savepoint = parser.Release();
            output    = Output2MySql(savepoint, sql);
            Assert.AreEqual("RELEASE SAVEPOINT sAVEPOINT", output);
            Assert.AreEqual("sAVEPOINT", savepoint.Savepoint.IdText);
        }
예제 #3
0
        public virtual void TestSavepint()
        {
            var sql       = "  savepoint 123e123e";
            var parser    = new MySqlMtsParser(new MySqlLexer(sql));
            var savepoint = parser.Savepoint();
            var output    = Output2MySql(savepoint, sql);

            Assert.AreEqual("SAVEPOINT 123e123e", output);
            Assert.AreEqual("123e123e", savepoint.Savepoint.IdText);
            sql       = "  savepoint SAVEPOINT";
            parser    = new MySqlMtsParser(new MySqlLexer(sql));
            savepoint = parser.Savepoint();
            output    = Output2MySql(savepoint, sql);
            Assert.AreEqual("SAVEPOINT SAVEPOINT", output);
            Assert.AreEqual("SAVEPOINT", savepoint.Savepoint.IdText);
            sql       = "  savepoInt `select`";
            parser    = new MySqlMtsParser(new MySqlLexer(sql));
            savepoint = parser.Savepoint();
            output    = Output2MySql(savepoint, sql);
            Assert.AreEqual("SAVEPOINT `select`", output);
            Assert.AreEqual("`select`", savepoint.Savepoint.IdText);
        }
예제 #4
0
 public virtual void TestRollback()
 {
     // ROLLBACK [WORK] TO [SAVEPOINT] identifier
     // ROLLBACK [WORK] [AND [NO] CHAIN | [NO] RELEASE]
     var sql = "rollBack work  ";
     var parser = new MySqlMtsParser(new MySqlLexer(sql));
     var rollback = parser.Rollback();
     var output = Output2MySql(rollback, sql);
     Assert.AreEqual("ROLLBACK", output);
     Assert.AreEqual(CompleteType.UnDef, rollback.CompleteType);
     Assert.IsNull(rollback.Savepoint);
     sql = "rollBack  ";
     parser = new MySqlMtsParser(new MySqlLexer(sql));
     rollback = parser.Rollback();
     output = Output2MySql(rollback, sql);
     Assert.AreEqual("ROLLBACK", output);
     Assert.AreEqual(CompleteType.UnDef, rollback.CompleteType);
     Assert.IsNull(rollback.Savepoint);
     sql = "rollBack work TO savepoint 123e ";
     parser = new MySqlMtsParser(new MySqlLexer(sql));
     rollback = parser.Rollback();
     output = Output2MySql(rollback, sql);
     Assert.AreEqual("ROLLBACK TO SAVEPOINT 123e", output);
     Assert.AreEqual("123e", rollback.Savepoint.IdText);
     Assert.IsTrue(rollback.CompleteType == CompleteType.None);
     sql = "rollBack to savePOINT savepoint ";
     parser = new MySqlMtsParser(new MySqlLexer(sql));
     rollback = parser.Rollback();
     output = Output2MySql(rollback, sql);
     Assert.AreEqual("ROLLBACK TO SAVEPOINT savepoint", output);
     Assert.AreEqual("savepoint", rollback.Savepoint.IdText);
     Assert.IsTrue(rollback.CompleteType == CompleteType.None);
     sql = "rollBack to `select` ";
     parser = new MySqlMtsParser(new MySqlLexer(sql));
     rollback = parser.Rollback();
     output = Output2MySql(rollback, sql);
     Assert.AreEqual("ROLLBACK TO SAVEPOINT `select`", output);
     Assert.AreEqual("`select`", rollback.Savepoint.IdText);
     Assert.IsTrue(rollback.CompleteType == CompleteType.None);
     sql = "rollBack work to  `select` ";
     parser = new MySqlMtsParser(new MySqlLexer(sql));
     rollback = parser.Rollback();
     output = Output2MySql(rollback, sql);
     Assert.AreEqual("ROLLBACK TO SAVEPOINT `select`", output);
     Assert.AreEqual("`select`", rollback.Savepoint.IdText);
     Assert.IsTrue(rollback.CompleteType == CompleteType.None);
     sql = "rollBack work and no chaiN ";
     parser = new MySqlMtsParser(new MySqlLexer(sql));
     rollback = parser.Rollback();
     output = Output2MySql(rollback, sql);
     Assert.AreEqual("ROLLBACK AND NO CHAIN", output);
     Assert.AreEqual(CompleteType.NoChain, rollback.CompleteType);
     Assert.IsNull(rollback.Savepoint);
     sql = "rollBack work and  chaiN ";
     parser = new MySqlMtsParser(new MySqlLexer(sql));
     rollback = parser.Rollback();
     output = Output2MySql(rollback, sql);
     Assert.AreEqual("ROLLBACK AND CHAIN", output);
     Assert.AreEqual(CompleteType.Chain, rollback.CompleteType);
     Assert.IsNull(rollback.Savepoint);
     sql = "rollBack work NO release ";
     parser = new MySqlMtsParser(new MySqlLexer(sql));
     rollback = parser.Rollback();
     output = Output2MySql(rollback, sql);
     Assert.AreEqual("ROLLBACK NO RELEASE", output);
     Assert.AreEqual(CompleteType.NoRelease, rollback.CompleteType);
     Assert.IsNull(rollback.Savepoint);
     sql = "rollBack work  release ";
     parser = new MySqlMtsParser(new MySqlLexer(sql));
     rollback = parser.Rollback();
     output = Output2MySql(rollback, sql);
     Assert.AreEqual("ROLLBACK RELEASE", output);
     Assert.AreEqual(CompleteType.Release, rollback.CompleteType);
     Assert.IsNull(rollback.Savepoint);
     sql = "rollBack  and no chaiN ";
     parser = new MySqlMtsParser(new MySqlLexer(sql));
     rollback = parser.Rollback();
     output = Output2MySql(rollback, sql);
     Assert.AreEqual("ROLLBACK AND NO CHAIN", output);
     Assert.AreEqual(CompleteType.NoChain, rollback.CompleteType);
     Assert.IsNull(rollback.Savepoint);
     sql = "rollBack  and  chaiN ";
     parser = new MySqlMtsParser(new MySqlLexer(sql));
     rollback = parser.Rollback();
     output = Output2MySql(rollback, sql);
     Assert.AreEqual("ROLLBACK AND CHAIN", output);
     Assert.AreEqual(CompleteType.Chain, rollback.CompleteType);
     Assert.IsNull(rollback.Savepoint);
     sql = "rollBack  NO release ";
     parser = new MySqlMtsParser(new MySqlLexer(sql));
     rollback = parser.Rollback();
     output = Output2MySql(rollback, sql);
     Assert.AreEqual("ROLLBACK NO RELEASE", output);
     Assert.AreEqual(CompleteType.NoRelease, rollback.CompleteType);
     Assert.IsNull(rollback.Savepoint);
     sql = "rollBack   release ";
     parser = new MySqlMtsParser(new MySqlLexer(sql));
     rollback = parser.Rollback();
     output = Output2MySql(rollback, sql);
     Assert.AreEqual("ROLLBACK RELEASE", output);
     Assert.AreEqual(CompleteType.Release, rollback.CompleteType);
     Assert.IsNull(rollback.Savepoint);
 }
예제 #5
0
 public virtual void TestSavepint()
 {
     var sql = "  savepoint 123e123e";
     var parser = new MySqlMtsParser(new MySqlLexer(sql));
     var savepoint = parser.Savepoint();
     var output = Output2MySql(savepoint, sql);
     Assert.AreEqual("SAVEPOINT 123e123e", output);
     Assert.AreEqual("123e123e", savepoint.Savepoint.IdText);
     sql = "  savepoint SAVEPOINT";
     parser = new MySqlMtsParser(new MySqlLexer(sql));
     savepoint = parser.Savepoint();
     output = Output2MySql(savepoint, sql);
     Assert.AreEqual("SAVEPOINT SAVEPOINT", output);
     Assert.AreEqual("SAVEPOINT", savepoint.Savepoint.IdText);
     sql = "  savepoInt `select`";
     parser = new MySqlMtsParser(new MySqlLexer(sql));
     savepoint = parser.Savepoint();
     output = Output2MySql(savepoint, sql);
     Assert.AreEqual("SAVEPOINT `select`", output);
     Assert.AreEqual("`select`", savepoint.Savepoint.IdText);
 }
예제 #6
0
        /// <exception cref="System.SqlSyntaxErrorException" />
        public static ISqlStatement Parse(string sql, MySqlLexer lexer, string charset)
        {
            try
            {
                ISqlStatement stmt = null;
                var isEof = true;
                var exprParser = new MySqlExprParser(lexer, charset);
                switch (lexer.Token())
                {
                    case MySqlToken.KwDesc:
                    case MySqlToken.KwDescribe:
                    {
                        stmt = new MySqlDalParser(lexer, exprParser).Desc();
                        goto stmtSwitch_break;
                    }

                    case MySqlToken.KwSelect:
                    case MySqlToken.PuncLeftParen:
                    {
                        stmt = new MySqlDmlSelectParser(lexer, exprParser).SelectUnion();
                        goto stmtSwitch_break;
                    }

                    case MySqlToken.KwDelete:
                    {
                        stmt = new MySqlDmlDeleteParser(lexer, exprParser).Delete();
                        goto stmtSwitch_break;
                    }

                    case MySqlToken.KwInsert:
                    {
                        stmt = new MySqlDmlInsertParser(lexer, exprParser).Insert();
                        goto stmtSwitch_break;
                    }

                    case MySqlToken.KwReplace:
                    {
                        stmt = new MySqlDmlReplaceParser(lexer, exprParser).Replace();
                        goto stmtSwitch_break;
                    }

                    case MySqlToken.KwUpdate:
                    {
                        stmt = new MySqlDmlUpdateParser(lexer, exprParser).Update();
                        goto stmtSwitch_break;
                    }

                    case MySqlToken.KwCall:
                    {
                        stmt = new MySqlDmlCallParser(lexer, exprParser).Call();
                        goto stmtSwitch_break;
                    }

                    case MySqlToken.KwSet:
                    {
                        stmt = new MySqlDalParser(lexer, exprParser).Set();
                        goto stmtSwitch_break;
                    }

                    case MySqlToken.KwShow:
                    {
                        stmt = new MySqlDalParser(lexer, exprParser).Show();
                        goto stmtSwitch_break;
                    }

                    case MySqlToken.KwAlter:
                    case MySqlToken.KwCreate:
                    case MySqlToken.KwDrop:
                    case MySqlToken.KwRename:
                    {
                        stmt = new MySqlDdlParser(lexer, exprParser).DdlStmt();
                        isEof = IsEOFedDdl(stmt);
                        goto stmtSwitch_break;
                    }

                    case MySqlToken.KwRelease:
                    {
                        stmt = new MySqlMtsParser(lexer).Release();
                        goto stmtSwitch_break;
                    }

                    case MySqlToken.Identifier:
                    {
                        var si = SpecialIdentifier.None;
                        if ((si = SpecialIdentifiers[lexer.GetStringValueUppercase()]) != SpecialIdentifier.None)
                        {
                            switch (si)
                            {
                                case SpecialIdentifier.Truncate:
                                {
                                    stmt = new MySqlDdlParser(lexer, exprParser).Truncate();
                                    goto stmtSwitch_break;
                                }

                                case SpecialIdentifier.Savepoint:
                                {
                                    stmt = new MySqlMtsParser(lexer).Savepoint();
                                    goto stmtSwitch_break;
                                }

                                case SpecialIdentifier.Rollback:
                                {
                                    stmt = new MySqlMtsParser(lexer).Rollback();
                                    goto stmtSwitch_break;
                                }
                            }
                        }
                        goto default;
                    }

                    default:
                    {
                        throw new SqlSyntaxErrorException("sql is not a supported statement");
                    }
                }
                stmtSwitch_break:
                ;
                if (isEof)
                {
                    while (lexer.Token() == MySqlToken.PuncSemicolon)
                    {
                        lexer.NextToken();
                    }
                    if (lexer.Token() != MySqlToken.Eof)
                    {
                        throw new SqlSyntaxErrorException("Sql syntax error!");
                    }
                }
                return stmt;
            }
            catch (Exception e)
            {
                throw new SqlSyntaxErrorException(BuildErrorMsg(e, lexer, sql), e);
            }
        }
예제 #7
0
        public virtual void TestRollback()
        {
            // ROLLBACK [WORK] TO [SAVEPOINT] identifier
            // ROLLBACK [WORK] [AND [NO] CHAIN | [NO] RELEASE]
            var sql      = "rollBack work  ";
            var parser   = new MySqlMtsParser(new MySqlLexer(sql));
            var rollback = parser.Rollback();
            var output   = Output2MySql(rollback, sql);

            Assert.AreEqual("ROLLBACK", output);
            Assert.AreEqual(CompleteType.UnDef, rollback.CompleteType);
            Assert.IsNull(rollback.Savepoint);
            sql      = "rollBack  ";
            parser   = new MySqlMtsParser(new MySqlLexer(sql));
            rollback = parser.Rollback();
            output   = Output2MySql(rollback, sql);
            Assert.AreEqual("ROLLBACK", output);
            Assert.AreEqual(CompleteType.UnDef, rollback.CompleteType);
            Assert.IsNull(rollback.Savepoint);
            sql      = "rollBack work TO savepoint 123e ";
            parser   = new MySqlMtsParser(new MySqlLexer(sql));
            rollback = parser.Rollback();
            output   = Output2MySql(rollback, sql);
            Assert.AreEqual("ROLLBACK TO SAVEPOINT 123e", output);
            Assert.AreEqual("123e", rollback.Savepoint.IdText);
            Assert.IsTrue(rollback.CompleteType == CompleteType.None);
            sql      = "rollBack to savePOINT savepoint ";
            parser   = new MySqlMtsParser(new MySqlLexer(sql));
            rollback = parser.Rollback();
            output   = Output2MySql(rollback, sql);
            Assert.AreEqual("ROLLBACK TO SAVEPOINT savepoint", output);
            Assert.AreEqual("savepoint", rollback.Savepoint.IdText);
            Assert.IsTrue(rollback.CompleteType == CompleteType.None);
            sql      = "rollBack to `select` ";
            parser   = new MySqlMtsParser(new MySqlLexer(sql));
            rollback = parser.Rollback();
            output   = Output2MySql(rollback, sql);
            Assert.AreEqual("ROLLBACK TO SAVEPOINT `select`", output);
            Assert.AreEqual("`select`", rollback.Savepoint.IdText);
            Assert.IsTrue(rollback.CompleteType == CompleteType.None);
            sql      = "rollBack work to  `select` ";
            parser   = new MySqlMtsParser(new MySqlLexer(sql));
            rollback = parser.Rollback();
            output   = Output2MySql(rollback, sql);
            Assert.AreEqual("ROLLBACK TO SAVEPOINT `select`", output);
            Assert.AreEqual("`select`", rollback.Savepoint.IdText);
            Assert.IsTrue(rollback.CompleteType == CompleteType.None);
            sql      = "rollBack work and no chaiN ";
            parser   = new MySqlMtsParser(new MySqlLexer(sql));
            rollback = parser.Rollback();
            output   = Output2MySql(rollback, sql);
            Assert.AreEqual("ROLLBACK AND NO CHAIN", output);
            Assert.AreEqual(CompleteType.NoChain, rollback.CompleteType);
            Assert.IsNull(rollback.Savepoint);
            sql      = "rollBack work and  chaiN ";
            parser   = new MySqlMtsParser(new MySqlLexer(sql));
            rollback = parser.Rollback();
            output   = Output2MySql(rollback, sql);
            Assert.AreEqual("ROLLBACK AND CHAIN", output);
            Assert.AreEqual(CompleteType.Chain, rollback.CompleteType);
            Assert.IsNull(rollback.Savepoint);
            sql      = "rollBack work NO release ";
            parser   = new MySqlMtsParser(new MySqlLexer(sql));
            rollback = parser.Rollback();
            output   = Output2MySql(rollback, sql);
            Assert.AreEqual("ROLLBACK NO RELEASE", output);
            Assert.AreEqual(CompleteType.NoRelease, rollback.CompleteType);
            Assert.IsNull(rollback.Savepoint);
            sql      = "rollBack work  release ";
            parser   = new MySqlMtsParser(new MySqlLexer(sql));
            rollback = parser.Rollback();
            output   = Output2MySql(rollback, sql);
            Assert.AreEqual("ROLLBACK RELEASE", output);
            Assert.AreEqual(CompleteType.Release, rollback.CompleteType);
            Assert.IsNull(rollback.Savepoint);
            sql      = "rollBack  and no chaiN ";
            parser   = new MySqlMtsParser(new MySqlLexer(sql));
            rollback = parser.Rollback();
            output   = Output2MySql(rollback, sql);
            Assert.AreEqual("ROLLBACK AND NO CHAIN", output);
            Assert.AreEqual(CompleteType.NoChain, rollback.CompleteType);
            Assert.IsNull(rollback.Savepoint);
            sql      = "rollBack  and  chaiN ";
            parser   = new MySqlMtsParser(new MySqlLexer(sql));
            rollback = parser.Rollback();
            output   = Output2MySql(rollback, sql);
            Assert.AreEqual("ROLLBACK AND CHAIN", output);
            Assert.AreEqual(CompleteType.Chain, rollback.CompleteType);
            Assert.IsNull(rollback.Savepoint);
            sql      = "rollBack  NO release ";
            parser   = new MySqlMtsParser(new MySqlLexer(sql));
            rollback = parser.Rollback();
            output   = Output2MySql(rollback, sql);
            Assert.AreEqual("ROLLBACK NO RELEASE", output);
            Assert.AreEqual(CompleteType.NoRelease, rollback.CompleteType);
            Assert.IsNull(rollback.Savepoint);
            sql      = "rollBack   release ";
            parser   = new MySqlMtsParser(new MySqlLexer(sql));
            rollback = parser.Rollback();
            output   = Output2MySql(rollback, sql);
            Assert.AreEqual("ROLLBACK RELEASE", output);
            Assert.AreEqual(CompleteType.Release, rollback.CompleteType);
            Assert.IsNull(rollback.Savepoint);
        }