Ejemplo n.º 1
0
        public virtual void TestCall()
        {
            var sql    = "call p(?,?) ";
            var lexer  = new MySqlLexer(sql);
            var parser = new MySqlDmlCallParser(lexer, new MySqlExprParser(lexer));
            var calls  = parser.Call();

            parser.Match(MySqlToken.Eof);
            var output = Output2MySql(calls, sql);

            Assert.AreEqual("CALL p(?, ?)", output);
            sql    = "call p(@var1,'@var2',var3)";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlCallParser(lexer, new MySqlExprParser(lexer));
            calls  = parser.Call();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(calls, sql);
            Assert.AreEqual("CALL p(@var1, '@var2', var3)", output);
            sql    = "call p()";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlCallParser(lexer, new MySqlExprParser(lexer));
            calls  = parser.Call();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(calls, sql);
            Assert.AreEqual("CALL p()", output);
            sql    = "call p(?)";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlCallParser(lexer, new MySqlExprParser(lexer));
            calls  = parser.Call();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(calls, sql);
            Assert.AreEqual("CALL p(?)", output);
        }
Ejemplo n.º 2
0
        //[Test]
        //public virtual void TestMain()
        //{
        //    Main(null);
        //    Assert.IsTrue(true);
        //}
        /// <exception cref="System.Exception" />
        public static void Main(string[] ars)
        {
            var sql = Performance.SqlBenchmarkSelect;

            for (var i = 0; i < 3; ++i)
            {
                var lexer             = new MySqlLexer(sql);
                var exprParser        = new MySqlExprParser(lexer);
                var parser            = new MySqlDmlSelectParser(lexer, exprParser);
                IQueryExpression stmt = parser.Select();
            }

            // System.out.println(stmt);
            Thread.Sleep(1000);
            long loop = 300 * 10000;
            var  t1   = Runtime.CurrentTimeMillis();

            t1 = Runtime.CurrentTimeMillis();
            for (long i_1 = 0; i_1 < loop; ++i_1)
            {
                var lexer             = new MySqlLexer(sql);
                var exprParser        = new MySqlExprParser(lexer);
                var parser            = new MySqlDmlSelectParser(lexer, exprParser);
                IQueryExpression stmt = parser.Select();
            }
            var t2 = Runtime.CurrentTimeMillis();

            Console.Out.WriteLine((t2 - t1) * 1000.0d / loop + " us");
        }
Ejemplo n.º 3
0
        public virtual void TestSelectUnion()
        {
            var sql =
                "(select id from t1) union all (select id from t2) union all (select id from t3) ordeR By d desC limit 1 offset ?";
            var lexer  = new MySqlLexer(sql);
            var parser = new MySqlDmlSelectParser(lexer, new MySqlExprParser(lexer));
            var select = (DmlSelectUnionStatement)parser.SelectUnion();

            Assert.AreEqual(0, @select.FirstDistinctIndex);
            Assert.AreEqual(3, @select.SelectStmtList.Count);
            var output = Output2MySql(select, sql);

            Assert.AreEqual(
                "(SELECT id FROM t1) UNION ALL (SELECT id FROM t2) UNION ALL (SELECT id FROM t3) ORDER BY d DESC LIMIT ?, 1",
                output);
            sql =
                "(select id from t1) union  select id from t2 order by id union aLl (select id from t3) ordeR By d asC";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlSelectParser(lexer, new MySqlExprParser(lexer));
            select = (DmlSelectUnionStatement)parser.SelectUnion();
            Assert.AreEqual(1, @select.FirstDistinctIndex);
            Assert.AreEqual(3, @select.SelectStmtList.Count);
            output = Output2MySql(select, sql);
            Assert.AreEqual(
                "(SELECT id FROM t1) UNION (SELECT id FROM t2 ORDER BY id) UNION ALL (SELECT id FROM t3) ORDER BY d",
                output);
            sql    = "(select id from t1) union distInct (select id from t2) union  select id from t3";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlSelectParser(lexer, new MySqlExprParser(lexer));
            select = (DmlSelectUnionStatement)parser.SelectUnion();
            Assert.AreEqual(2, @select.FirstDistinctIndex);
            Assert.AreEqual(3, @select.SelectStmtList.Count);
            output = Output2MySql(select, sql);
            Assert.AreEqual("(SELECT id FROM t1) UNION (SELECT id FROM t2) UNION (SELECT id FROM t3)", output);
        }
Ejemplo n.º 4
0
        /// <exception cref="System.SqlSyntaxErrorException" />
        public static void InitRouteRule(ISchemaLoader loader)
        {
            var functions       = loader.Functions;
            var functionManager = new MySqlFunctionManager(true);

            BuildFuncManager(functionManager, functions);
            foreach (var conf in loader.RuleConfigList)
            {
                var algorithmString = conf.Algorithm;
                var lexer           = new MySqlLexer(algorithmString);
                var parser          = new MySqlExprParser(lexer, functionManager, false, MySqlParser.DefaultCharset);
                var expression      = parser.Expression();
                if (lexer.Token() != MySqlToken.Eof)
                {
                    throw new ConfigException("route algorithm not end with EOF: " + algorithmString);
                }
                IRuleAlgorithm algorithm;
                if (expression is IRuleAlgorithm)
                {
                    algorithm = (IRuleAlgorithm)expression;
                }
                else
                {
                    algorithm = new ExpressionAdapter(expression);
                }
                conf.RuleAlgorithm = algorithm;
            }
        }
Ejemplo n.º 5
0
        public virtual void Testdesc()
        {
            var           sql    = "desc tb1";
            var           lexer  = new MySqlLexer(sql);
            var           parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            ISqlStatement desc   = parser.Desc();

            parser.Match(MySqlToken.Eof);
            var output = Output2MySql(desc, sql);

            Assert.AreEqual("DESC tb1", output);
            sql    = "desc db.tb1";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            desc   = parser.Desc();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(desc, sql);
            Assert.AreEqual("DESC db.tb1", output);
            sql    = "describe db.tb1";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            desc   = parser.Desc();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(desc, sql);
            Assert.AreEqual("DESC db.tb1", output);
        }
Ejemplo n.º 6
0
            /// <exception cref="System.Exception" />
            public override string GetSql()
            {
                var sql   = new InsertLong().GetSql();
                var lexer = new MySqlLexer(sql);

                insert = new MySqlDmlInsertParser(lexer, new MySqlExprParser(lexer)).Insert();
                return(sql);
            }
Ejemplo n.º 7
0
 /// <exception cref="System.Exception" />
 public override void Route(SchemaConfig schema, int loop, string sql)
 {
     for (var i = 0; i < loop; ++i)
     {
         var lexer  = new MySqlLexer(sql);
         var insert = new MySqlDmlInsertParser(lexer, new MySqlExprParser(lexer)).Insert();
     }
 }
Ejemplo n.º 8
0
        public ISqlParser CreateSqlParser(string sql)
        {
            var charStream        = CharStreams.fromString(sql);
            var mySqlLexer        = new MySqlLexer(charStream);
            var commonTokenStream = new CommonTokenStream(mySqlLexer);

            return(new SqlParser.MySqlParser(commonTokenStream));
        }
Ejemplo n.º 9
0
 /// <exception cref="System.Exception" />
 public override void Route(SchemaConfig schema, int loop, string sql)
 {
     for (var i = 0; i < loop; ++i)
     {
         var lexer   = new MySqlLexer(sql);
         var select  = new MySqlDmlSelectParser(lexer, new MySqlExprParser(lexer)).Select();
         var visitor = new PartitionKeyVisitor(schema.Tables);
         select.Accept(visitor);
     }
 }
Ejemplo n.º 10
0
        public virtual void TestSelectChinese()
        {
            var sql    = "SELect t1.id , t2.* from t1, test.t2 where test.t1.id='中''‘文' and t1.id=test.t2.id";
            var lexer  = new MySqlLexer(sql);
            var parser = new MySqlDmlSelectParser(lexer, new MySqlExprParser(lexer));
            var select = parser.Select();

            Assert.IsNotNull(select);
            var output = Output2MySql(select, sql);

            Assert.AreEqual("SELECT t1.id, t2.* FROM t1, test.t2 WHERE test.t1.id = '中\\'‘文' AND t1.id = test.t2.id",
                            output);
        }
Ejemplo n.º 11
0
        public static Number String2Number(string str)
        {
            if (str == null)
            {
                return(0);
            }

            //TODO --ExprEvalUtils-String2Number
            try
            {
                return(Convert.ToInt32(str));
            }
            catch (Exception ex)
            {
                Console.WriteLine("String2Number-ToInt32-{0}-{1}", str, ex);
            }
            try
            {
                return(Convert.ToInt64(str));
            }
            catch (Exception ex)
            {
                Console.WriteLine("String2Number-ToInt64-{0}-{1}", str, ex);
            }
            try
            {
                var lexer = new MySqlLexer(str);
                switch (lexer.Token())
                {
                case MySqlToken.LiteralNumPureDigit:
                {
                    return(lexer.GetIntegerValue());
                }

                case MySqlToken.LiteralNumMixDigit:
                {
                    return(lexer.GetDecimalValue());
                }

                default:
                {
                    throw new ArgumentException("unrecognized number: " + str);
                }
                }
            }
            catch (SqlSyntaxErrorException e)
            {
                throw new ArgumentException("str", e);
            }
        }
Ejemplo n.º 12
0
        public override void Parse(FileInfo file)
        {
            Lexer lexer = new MySqlLexer(CharStreams.fromPath(file.FullName));

            CommonTokenStream tokens = new CommonTokenStream(lexer);

            MySqlParser parser = new MySqlParser(tokens);

            ParserRuleContext context = parser.root();

            var children = context.children;

            foreach (IParseTree child in children)
            {
                this.ParseNode(child);
            }
        }
Ejemplo n.º 13
0
        /// <exception cref="System.SqlSyntaxErrorException" />
        public static void Main(string[] args)
        {
            var sql =
                "   ( ( select union select union select)  as j join    (((select union (select)) as t    )   join t2 ) ,(select)as d), t3)";

            // String sql =
            // "((select) as s1, ((((   select  union select          ) as t2)) join (((t2),t4 as t))) ), t1 aS T1";
            // String sql =
            // "  (( select union select union select)  as j  ,(select)as d), t3";
            Console.Out.WriteLine(sql);
            var lexer = new MySqlLexer(sql);

            lexer.NextToken();
            var p    = new SoloParser(lexer);
            var refs = p.Refs();

            Console.Out.WriteLine(refs);
        }
Ejemplo n.º 14
0
        public virtual void TestTruncate()
        {
            var           sql    = "Truncate table tb1";
            var           lexer  = new MySqlLexer(sql);
            var           parser = new MySqlDdlParser(lexer, new MySqlExprParser(lexer));
            IDdlStatement trun   = parser.Truncate();

            parser.Match(MySqlToken.Eof);
            var output = Output2MySql(trun, sql);

            Assert.AreEqual("TRUNCATE TABLE tb1", output);
            sql    = "Truncate tb1";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDdlParser(lexer, new MySqlExprParser(lexer));
            trun   = parser.Truncate();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(trun, sql);
            Assert.AreEqual("TRUNCATE TABLE tb1", output);
        }
Ejemplo n.º 15
0
            /// <exception cref="System.Exception" />
            public override string GetSql()
            {
                var sb = new StringBuilder("insert into offer_detail (offer_id, gmt) values ");

                for (var i = 0; i < 8; ++i)
                {
                    if (i > 0)
                    {
                        sb.Append(", ");
                    }
                    sb.Append("(" + (i + 100) + ", now())");
                }
                var sql   = sb.ToString();
                var lexer = new MySqlLexer(sql);

                insert  = new MySqlDmlInsertParser(lexer, new MySqlExprParser(lexer)).Insert();
                sqlSize = new InsertLong().GetSql().Length;
                return(sql);
            }
        private static SqlVisitor?CreateVisitor(string query)
        {
            try
            {
                var lexer  = new MySqlLexer(new CaseChangingCharStream(new AntlrInputStream(query), true));
                var tokens = new CommonTokenStream(lexer);
                var parser = new MySqlParser(tokens);
                parser.BuildParseTree = true;
                parser.RemoveErrorListeners();

                var visitor = new SqlVisitor();
                visitor.Visit(parser.root());
                return(visitor);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return(null);
            }
        }
Ejemplo n.º 17
0
        public void Parse(string query, IParseTreeListener[] listeners)
        {
            ICharStream stream = CharStreams.fromstring(query);

            stream = new ToUpperStream(stream);
            ITokenSource lexer  = new MySqlLexer(stream);
            ITokenStream tokens = new CommonTokenStream(lexer);
            var          parser = new MySqlParser(tokens)
            {
                BuildParseTree = true,
            };

            // both is possible, let's detect every type of sql
            this.context = parser.sqlStatement();
            //var statement = parser.dmlStatement();
            //var statement = parser.selectStatement();

            // listener pattern
            RegisterListener(listeners);
        }
Ejemplo n.º 18
0
        private static string BuildErrorMsg(Exception e, MySqlLexer lexer, string sql)
        {
            var sb   = new StringBuilder("You have an error in your Sql syntax; Error occurs around this fragment: ");
            var ch   = lexer.CurrentIndex;
            var from = ch - 16;

            if (from < 0)
            {
                from = 0;
            }
            var to = ch + 9;

            if (to >= sql.Length)
            {
                to = sql.Length - 1;
            }
            var fragment = Runtime.Substring(sql, from, to + 1);

            sb.Append('{').Append(fragment).Append('}').Append(". Error cause: " + e.Message);
            return(sb.ToString());
        }
Ejemplo n.º 19
0
        public virtual void TestUpdate()
        {
            var sql    = "upDate LOw_PRIORITY IGNORE test.t1 sEt t1.col1=?, col2=DefaulT";
            var lexer  = new MySqlLexer(sql);
            var parser = new MySqlDmlUpdateParser(lexer, new MySqlExprParser(lexer));
            var update = parser.Update();
            var output = Output2MySql(update, sql);

            Assert.IsNotNull(update);
            Assert.AreEqual("UPDATE LOW_PRIORITY IGNORE test.t1 SET t1.col1 = ?, col2 = DEFAULT", output);
            sql    = "upDate  IGNORE (t1) set col2=DefaulT order bY t1.col2 ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlUpdateParser(lexer, new MySqlExprParser(lexer));
            update = parser.Update();
            output = Output2MySql(update, sql);
            Assert.AreEqual("UPDATE IGNORE t1 SET col2 = DEFAULT ORDER BY t1.col2", output);
            sql    = "upDate   (test.t1) SET col2=DefaulT order bY t1.col2 limit ? offset 1";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlUpdateParser(lexer, new MySqlExprParser(lexer));
            update = parser.Update();
            output = Output2MySql(update, sql);
            Assert.AreEqual("UPDATE test.t1 SET col2 = DEFAULT ORDER BY t1.col2 LIMIT 1, ?", output);
            sql    = "upDate LOW_PRIORITY  t1, test.t2 SET col2=DefaulT , col2='123''4'";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlUpdateParser(lexer, new MySqlExprParser(lexer));
            update = parser.Update();
            output = Output2MySql(update, sql);
            Assert.AreEqual("UPDATE LOW_PRIORITY t1, test.t2 SET col2 = DEFAULT, col2 = '123\\'4'", output);
            sql    = "upDate LOW_PRIORITY  t1, test.t2 SET col2:=DefaulT , col2='123''4' where id='a'";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlUpdateParser(lexer, new MySqlExprParser(lexer));
            update = parser.Update();
            output = Output2MySql(update, sql);
            Assert.AreEqual("UPDATE LOW_PRIORITY t1, test.t2 SET col2 = DEFAULT, col2 = '123\\'4' WHERE id = 'a'",
                            output);
        }
Ejemplo n.º 20
0
        public virtual void TestInsert()
        {
            var sql    = "insErt HIGH_PRIORITY intO test.t1 seT t1.id1=?, id2 := '123'";
            var lexer  = new MySqlLexer(sql);
            var parser = new MySqlDmlInsertParser(lexer, new MySqlExprParser(lexer));
            var insert = parser.Insert();

            parser.Match(MySqlToken.Eof);
            var output = Output2MySql(insert, sql);

            Assert.IsNotNull(insert);
            Assert.AreEqual("INSERT HIGH_PRIORITY INTO test.t1 (t1.id1, id2) VALUES (?, '123')", output);
            sql    = "insErt  IGNORE test.t1 seT t1.id1:=? oN dupLicatE key UPDATE ex.col1=?, col2=12";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlInsertParser(lexer, new MySqlExprParser(lexer));
            insert = parser.Insert();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(insert, sql);
            Assert.AreEqual(
                "INSERT IGNORE INTO test.t1 (t1.id1) VALUES (?) ON DUPLICATE KEY UPDATE ex.col1 = ?, col2 = 12", output);
            sql    = "insErt t1 value (123,?) oN dupLicatE key UPDATE ex.col1=?";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlInsertParser(lexer, new MySqlExprParser(lexer));
            insert = parser.Insert();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(insert, sql);
            Assert.AreEqual("INSERT INTO t1 VALUES (123, ?) ON DUPLICATE KEY UPDATE ex.col1 = ?", output);
            sql    = "insErt LOW_PRIORITY t1 valueS (12e-2,1,2), (?),(default)";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlInsertParser(lexer, new MySqlExprParser(lexer));
            insert = parser.Insert();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(insert, sql);
            Assert.AreEqual("INSERT LOW_PRIORITY INTO t1 VALUES (0.12, 1, 2), (?), (DEFAULT)", output);
            sql    = "insErt LOW_PRIORITY t1 select id from t1";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlInsertParser(lexer, new MySqlExprParser(lexer));
            insert = parser.Insert();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(insert, sql);
            Assert.AreEqual("INSERT LOW_PRIORITY INTO t1 SELECT id FROM t1",
                            output);
            sql    = "insErt delayed t1 select id from t1";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlInsertParser(lexer, new MySqlExprParser(lexer));
            insert = parser.Insert();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(insert, sql);
            Assert.AreEqual("INSERT DELAYED INTO t1 SELECT id FROM t1", output);
            sql    = "insErt LOW_PRIORITY t1 (select id from t1) oN dupLicatE key UPDATE ex.col1=?, col2=12";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlInsertParser(lexer, new MySqlExprParser(lexer));
            insert = parser.Insert();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(insert, sql);
            Assert.AreEqual(
                "INSERT LOW_PRIORITY INTO t1 SELECT id FROM t1 ON DUPLICATE KEY UPDATE ex.col1 = ?, col2 = 12", output);
            sql    = "insErt LOW_PRIORITY t1 (t1.col1) valueS (123),('12''34')";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlInsertParser(lexer, new MySqlExprParser(lexer));
            insert = parser.Insert();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(insert, sql);
            Assert.AreEqual("INSERT LOW_PRIORITY INTO t1 (t1.col1) VALUES (123), ('12\\'34')", output);
            sql    = "insErt LOW_PRIORITY t1 (col1, t1.col2) VALUE (123,'123\\'4') oN dupLicatE key UPDATE ex.col1=?";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlInsertParser(lexer, new MySqlExprParser(lexer));
            insert = parser.Insert();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(insert, sql);
            Assert.AreEqual(
                "INSERT LOW_PRIORITY INTO t1 (col1, t1.col2) VALUES (123, '123\\'4') ON DUPLICATE KEY UPDATE ex.col1 = ?",
                output);
            sql    = "insErt LOW_PRIORITY t1 (col1, t1.col2) select id from t3 oN dupLicatE key UPDATE ex.col1=?";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlInsertParser(lexer, new MySqlExprParser(lexer));
            insert = parser.Insert();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(insert, sql);
            Assert.AreEqual(
                "INSERT LOW_PRIORITY INTO t1 (col1, t1.col2) SELECT id FROM t3 ON DUPLICATE KEY UPDATE ex.col1 = ?",
                output);
            sql    = "insErt LOW_PRIORITY IGNORE intO t1 (col1) ( select id from t3) ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlInsertParser(lexer, new MySqlExprParser(lexer));
            insert = parser.Insert();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(insert, sql);
            Assert.AreEqual("INSERT LOW_PRIORITY IGNORE INTO t1 (col1) SELECT id FROM t3", output);
        }
Ejemplo n.º 21
0
 public MySqlDmlInsertParser(MySqlLexer lexer, MySqlExprParser exprParser)
     : base(lexer, exprParser)
 {
 }
Ejemplo n.º 22
0
 public MySqlDmlUpdateParser(MySqlLexer lexer, MySqlExprParser exprParser)
     : base(lexer, exprParser)
 {
 }
Ejemplo n.º 23
0
        public virtual void TestReplace()
        {
            var sql     = "ReplaCe LOW_PRIORITY intO test.t1 seT t1.id1:=?, id2='123'";
            var lexer   = new MySqlLexer(sql);
            var parser  = new MySqlDmlReplaceParser(lexer, new MySqlExprParser(lexer));
            var replace = parser.Replace();

            parser.Match(MySqlToken.Eof);
            Assert.IsNotNull(replace);
            var output = Output2MySql(replace, sql);

            Assert.AreEqual("REPLACE LOW_PRIORITY INTO test.t1 (t1.id1, id2) VALUES (?, '123')", output);
            sql     = "ReplaCe   test.t1 seT t1.id1:=? ";
            lexer   = new MySqlLexer(sql);
            parser  = new MySqlDmlReplaceParser(lexer, new MySqlExprParser(lexer));
            replace = parser.Replace();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(replace, sql);
            Assert.AreEqual("REPLACE INTO test.t1 (t1.id1) VALUES (?)", output);
            sql     = "ReplaCe t1 value (123,?) ";
            lexer   = new MySqlLexer(sql);
            parser  = new MySqlDmlReplaceParser(lexer, new MySqlExprParser(lexer));
            replace = parser.Replace();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(replace, sql);
            Assert.AreEqual("REPLACE INTO t1 VALUES (123, ?)", output);
            sql     = "ReplaCe LOW_PRIORITY t1 valueS (12e-2), (?)";
            lexer   = new MySqlLexer(sql);
            parser  = new MySqlDmlReplaceParser(lexer, new MySqlExprParser(lexer));
            replace = parser.Replace();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(replace, sql);
            Assert.AreEqual("REPLACE LOW_PRIORITY INTO t1 VALUES (0.12), (?)", output);
            sql     = "ReplaCe LOW_PRIORITY t1 select id from t1";
            lexer   = new MySqlLexer(sql);
            parser  = new MySqlDmlReplaceParser(lexer, new MySqlExprParser(lexer));
            replace = parser.Replace();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(replace, sql);
            Assert.AreEqual("REPLACE LOW_PRIORITY INTO t1 SELECT id FROM t1",
                            output);
            sql     = "ReplaCe delayed t1 select id from t1";
            lexer   = new MySqlLexer(sql);
            parser  = new MySqlDmlReplaceParser(lexer, new MySqlExprParser(lexer));
            replace = parser.Replace();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(replace, sql);
            Assert.AreEqual("REPLACE DELAYED INTO t1 SELECT id FROM t1", output);
            sql     = "ReplaCe LOW_PRIORITY t1 (select id from t1) ";
            lexer   = new MySqlLexer(sql);
            parser  = new MySqlDmlReplaceParser(lexer, new MySqlExprParser(lexer));
            replace = parser.Replace();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(replace, sql);
            Assert.AreEqual("REPLACE LOW_PRIORITY INTO t1 SELECT id FROM t1",
                            output);
            sql     = "ReplaCe LOW_PRIORITY t1 (t1.col1) valueS (123),('12''34')";
            lexer   = new MySqlLexer(sql);
            parser  = new MySqlDmlReplaceParser(lexer, new MySqlExprParser(lexer));
            replace = parser.Replace();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(replace, sql);
            Assert.AreEqual("REPLACE LOW_PRIORITY INTO t1 (t1.col1) VALUES (123), ('12\\'34')", output);
            sql     = "ReplaCe LOW_PRIORITY t1 (col1, t1.col2) VALUE (123,'123\\'4') ";
            lexer   = new MySqlLexer(sql);
            parser  = new MySqlDmlReplaceParser(lexer, new MySqlExprParser(lexer));
            replace = parser.Replace();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(replace, sql);
            Assert.AreEqual("REPLACE LOW_PRIORITY INTO t1 (col1, t1.col2) VALUES (123, '123\\'4')", output);
            sql     = "REPLACE LOW_PRIORITY t1 (col1, t1.col2) select id from t3 ";
            lexer   = new MySqlLexer(sql);
            parser  = new MySqlDmlReplaceParser(lexer, new MySqlExprParser(lexer));
            replace = parser.Replace();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(replace, sql);
            Assert.AreEqual("REPLACE LOW_PRIORITY INTO t1 (col1, t1.col2) SELECT id FROM t3", output);
            sql     = "replace LOW_PRIORITY  intO t1 (col1) ( select id from t3) ";
            lexer   = new MySqlLexer(sql);
            parser  = new MySqlDmlReplaceParser(lexer, new MySqlExprParser(lexer));
            replace = parser.Replace();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(replace, sql);
            Assert.AreEqual("REPLACE LOW_PRIORITY INTO t1 (col1) SELECT id FROM t3", output);
        }
Ejemplo n.º 24
0
 public SoloParser(MySqlLexer lexer)
     : base(lexer)
 {
 }
Ejemplo n.º 25
0
 public MySqlDmlParser(MySqlLexer lexer, MySqlExprParser exprParser)
     : base(lexer)
 {
     this.exprParser = exprParser;
 }
Ejemplo n.º 26
0
        public virtual void TestSet()
        {
            var           sql    = "seT sysVar1 = ? ";
            var           lexer  = new MySqlLexer(sql);
            var           parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            ISqlStatement set    = (DalSetStatement)parser.Set();

            parser.Match(MySqlToken.Eof);
            var output = Output2MySql(set, sql);

            Assert.AreEqual("SET @@sysVar1 = ?", output);
            sql    = "SET `sysVar1` = ?, @@gloBal . `var2` :=1 ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            set    = (DalSetStatement)parser.Set();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(set, sql);
            Assert.AreEqual("SET @@`sysVar1` = ?, @@global.`var2` = 1", output);
            sql    = "SET @usrVar1 := ?, @@`var2` =1, @@var3:=?, @'var\\'3'=? ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            set    = (DalSetStatement)parser.Set();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(set, sql);
            Assert.AreEqual("SET @usrVar1 = ?, @@`var2` = 1, @@var3 = ?, @'var\\'3' = ?", output);
            sql    = "SET GLOBAL var1=1, SESSION var2:=2";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            set    = (DalSetStatement)parser.Set();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(set, sql);
            Assert.AreEqual("SET @@global.var1 = 1, @@var2 = 2", output);
            sql    = "SET @@GLOBAL. var1=1, SESSION var2:=2";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            set    = (DalSetStatement)parser.Set();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(set, sql);
            Assert.AreEqual("SET @@global.var1 = 1, @@var2 = 2", output);
            sql    = "SET transaction ISOLATION LEVEL READ UNCOMMITTED ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            set    = (MTSSetTransactionStatement)parser.Set();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(set, sql);
            Assert.AreEqual("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED", output);
            sql    = "SET global transaction ISOLATION LEVEL READ COMMITTED ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            set    = (MTSSetTransactionStatement)parser.Set();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(set, sql);
            Assert.AreEqual("SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED", output);
            sql    = "SET transaction ISOLATION LEVEL REPEATABLE READ ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            set    = (MTSSetTransactionStatement)parser.Set();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(set, sql);
            Assert.AreEqual("SET TRANSACTION ISOLATION LEVEL REPEATABLE READ", output);
            sql    = "SET session transaction ISOLATION LEVEL SERIALIZABLE ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            set    = (MTSSetTransactionStatement)parser.Set();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(set, sql);
            Assert.AreEqual("SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE", output);
            sql    = "SET names default ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            set    = (DalSetNamesStatement)parser.Set();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(set, sql);
            Assert.AreEqual("SET NAMES DEFAULT", output);
            sql    = "SET NAMEs 'utf8' collatE \"latin1_danish_ci\" ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            set    = (DalSetNamesStatement)parser.Set();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(set, sql);
            Assert.AreEqual("SET NAMES utf8 COLLATE latin1_danish_ci", output);
            sql    = "SET NAMEs utf8  ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            set    = (DalSetNamesStatement)parser.Set();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(set, sql);
            Assert.AreEqual("SET NAMES utf8", output);
            sql    = "SET CHARACTEr SEt 'utf8'  ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            set    = (DalSetCharacterSetStatement)parser.Set();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(set, sql);
            Assert.AreEqual("SET CHARACTER SET utf8", output);
            sql    = "SET CHARACTEr SEt DEFaULT  ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            set    = (DalSetCharacterSetStatement)parser.Set();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(set, sql);
            Assert.AreEqual("SET CHARACTER SET DEFAULT", output);
        }
Ejemplo n.º 27
0
 public MySqlDmlSelectParser(MySqlLexer lexer, MySqlExprParser exprParser)
     : base(lexer, exprParser)
 {
     this.exprParser.SetSelectParser(this);
 }
Ejemplo n.º 28
0
        public virtual void TestShow()
        {
            var sql    = "shoW authors  ";
            var lexer  = new MySqlLexer(sql);
            var parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            var show   = parser.Show();

            parser.Match(MySqlToken.Eof);
            var output = Output2MySql(show, sql);

            Assert.AreEqual("SHOW AUTHORS", output);
            sql    = "SHOW BINARY LOGS  ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW BINARY LOGS", output);
            sql    = "SHOW MASTER LOGS  ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW BINARY LOGS", output);
            sql    = "SHOW binlog events in 'a' from 1 limit 1,2  ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW BINLOG EVENTS IN 'a' FROM 1 LIMIT 1, 2", output);
            sql    = "SHOW binlog events from 1 limit 1,2  ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW BINLOG EVENTS FROM 1 LIMIT 1, 2", output);
            sql    = "SHOW binlog events ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW BINLOG EVENTS", output);
            sql    = "SHOW CHARACTER SET like 'var' ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW CHARACTER SET LIKE 'var'", output);
            sql    = "SHOW CHARACTER SET where (select a from tb)in(a) ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW CHARACTER SET WHERE (SELECT a FROM tb) IN (a)", output);
            sql    = "SHOW CHARACTER SET ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW CHARACTER SET", output);
            sql    = "SHOW collation ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW COLLATION", output);
            sql    = "SHOW Collation like 'var1' ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW COLLATION LIKE 'var1'", output);
            sql    = "SHOW collation where avg((select * from (tb1,tb2)))!=100 ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW COLLATION WHERE AVG(SELECT * FROM tb1, tb2) != 100", output);
            sql    = "SHOW full columns from tb1 from db1 like 'var' ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW FULL COLUMNS FROM db1.tb1 LIKE 'var'", output);
            sql    = "SHOW full columns from tb1 from db1 where Count(col)>10 ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW FULL COLUMNS FROM db1.tb1 WHERE COUNT(col) > 10", output);
            sql    = "SHOW columns from tb1 from db1 like 'var' ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW COLUMNS FROM db1.tb1 LIKE 'var'", output);
            sql    = "SHOW columns from tb1 like 'var' ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW COLUMNS FROM tb1 LIKE 'var'", output);
            sql    = "SHOW full columns from tb1 from db1 ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW FULL COLUMNS FROM db1.tb1", output);
            sql    = "SHOW contributors ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW CONTRIBUTORS", output);
            sql    = "SHOW CREATE DATABASE db_name ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW CREATE DATABASE db_name", output);
            sql    = "SHOW create event expr ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW CREATE EVENT expr", output);
            sql    = "SHOW create function func ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW CREATE FUNCTION func", output);
            sql    = "SHOW create procedure pro ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW CREATE PROCEDURE pro", output);
            sql    = "SHOW create table tb ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW CREATE TABLE tb", output);
            sql    = "SHOW create trigger tri ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW CREATE TRIGGER tri", output);
            sql    = "SHOW create view view";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW CREATE VIEW view", output);
            sql    = "SHOW databases like 'var'";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW DATABASES LIKE 'var'", output);
            sql    = "SHOW databases where (select * from `select`)is not null";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW DATABASES WHERE (SELECT * FROM `select`) IS NOT NULL", output);
            sql    = "SHOW databases ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW DATABASES", output);
            sql    = "SHOW engine innodb status";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW ENGINE INNODB STATUS", output);
            sql    = "SHOW engine innodb mutex";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW ENGINE INNODB MUTEX", output);
            sql    = "SHOW engine performance_schema status";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW ENGINE PERFORMANCE SCHEMA STATUS", output);
            sql    = "SHOW engines";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW ENGINES", output);
            sql    = "SHOW storage engines";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW ENGINES", output);
            sql    = "SHOW errors";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW ERRORS", output);
            sql    = "SHOW errors limit 1 ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW ERRORS LIMIT 0, 1", output);
            sql    = "SHOW Count(*) errors";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW COUNT(*) ERRORS", output);
            sql    = "SHOW events";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW EVENTS", output);
            sql    = "SHOW events from expr like 'var' ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW EVENTS FROM expr LIKE 'var'", output);
            sql    = "SHOW events from expr where expr1";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW EVENTS FROM expr WHERE expr1", output);
            sql    = "SHOW function code expr";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW FUNCTION CODE expr", output);
            sql    = "SHOW function status like 'expr'";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW FUNCTION STATUS LIKE 'expr'", output);
            sql    = "SHOW function status where a is true";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW FUNCTION STATUS WHERE a IS TRUE", output);
            sql    = "SHOW function status ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW FUNCTION STATUS", output);
            sql    = "SHOW grants for 'expr'";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW GRANTS FOR 'expr'", output);
            sql    = "SHOW grants";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW GRANTS", output);
            sql    = "SHOW index from tb1 from db";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW INDEX IN db.tb1", output);
            sql    = "SHOW index from tb1 in db";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW INDEX IN db.tb1", output);
            sql    = "SHOW index in tb1 from db";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW INDEX IN db.tb1", output);
            sql    = "SHOW index in tb1 in db";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW INDEX IN db.tb1", output);
            sql    = "SHOW indexes from tb1";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW INDEXES IN tb1", output);
            sql    = "SHOW keys in tb1";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW KEYS IN tb1", output);
            sql    = "SHOW master status";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW MASTER STATUS", output);
            sql    = "SHOW open tables from db like 'expr'";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW OPEN TABLES FROM db LIKE 'expr'", output);
            sql    = "SHOW open tables from db where tb is not null";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW OPEN TABLES FROM db WHERE tb IS NOT NULL",
                            output);
            sql    = "SHOW open tables from db";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW OPEN TABLES FROM db", output);
            sql    = "SHOW open tables in db";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW OPEN TABLES FROM db", output);
            sql    = "SHOW open tables";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW OPEN TABLES", output);
            sql    = "SHOW plugins";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW PLUGINS", output);
            sql    = "SHOW privileges";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW PRIVILEGES", output);
            sql    = "SHOW procedure code proc";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW PROCEDURE CODE proc", output);
            sql    = "SHOW procedure status like 'expr'";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW PROCEDURE STATUS LIKE 'expr'", output);
            sql    = "SHOW procedure status where (a||b)*(a&&b)";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW PROCEDURE STATUS WHERE (a OR b) * (a AND b)", output);
            sql    = "SHOW procedure status";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW PROCEDURE STATUS", output);
            sql    = "SHOW processlist";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW PROCESSLIST", output);
            sql    = "SHOW full processlist";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW FULL PROCESSLIST", output);
            sql    = "SHOW profiles";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW PROFILES", output);
            sql = "SHOW profile all,block io,context switches,cpu,ipc,memory," +
                  "page faults,source,swaps for query 2 limit 1 offset 2";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW PROFILE ALL, BLOCK IO, CONTEXT SWITCHES, CPU, IPC, MEMORY, "
                            + "PAGE FAULTS, SOURCE, SWAPS FOR QUERY 2 LIMIT 2, 1", output);
            sql    = "SHOW profile";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW PROFILE", output);
            sql    = "SHOW profile all,block io,context switches,cpu,ipc," + "memory,page faults,source,swaps for query 2";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW PROFILE ALL, BLOCK IO, CONTEXT SWITCHES, CPU, IPC, "
                            + "MEMORY, PAGE FAULTS, SOURCE, SWAPS FOR QUERY 2", output);
            sql    = "SHOW profile all for query 2";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW PROFILE ALL FOR QUERY 2", output);
            sql    = "SHOW slave hosts";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW SLAVE HOSTS", output);
            sql    = "SHOW slave status";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW SLAVE STATUS", output);
            sql    = "SHOW global status like 'expr'";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW GLOBAL STATUS LIKE 'expr'", output);
            sql    = "SHOW global status where ${abc}";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW GLOBAL STATUS WHERE ${abc}", output);
            sql    = "SHOW session status like 'expr'";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW SESSION STATUS LIKE 'expr'", output);
            sql    = "SHOW session status where ?";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW SESSION STATUS WHERE ?", output);
            sql    = "SHOW status like 'expr'";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW SESSION STATUS LIKE 'expr'", output);
            sql    = "SHOW status where 0b10^b'11'";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW SESSION STATUS WHERE b'10' ^ b'11'", output);
            sql    = "SHOW status";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW SESSION STATUS", output);
            sql    = "SHOW global status";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW GLOBAL STATUS", output);
            sql    = "SHOW session status";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW SESSION STATUS", output);
            sql    = "SHOW table status from db like 'expr'";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW TABLE STATUS FROM db LIKE 'expr'", output);
            sql    = "SHOW table status in db where (select a)>(select b)";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW TABLE STATUS FROM db WHERE (SELECT a) > (SELECT b)", output);
            sql    = "SHOW table status from db where id1=a||b";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW TABLE STATUS FROM db WHERE id1 = a OR b", output);
            sql    = "SHOW table status ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW TABLE STATUS", output);
            sql    = "SHOW tables from db like 'expr'";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW TABLES FROM db LIKE 'expr'", output);
            sql    = "SHOW tables in db where !a";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW TABLES FROM db WHERE ! a", output);
            sql    = "SHOW tables like 'expr'";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW TABLES LIKE 'expr'", output);
            sql    = "SHOW tables where log((select a))=b";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW TABLES WHERE LOG(SELECT a) = b", output);
            sql    = "SHOW tables ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW TABLES", output);
            sql    = "SHOW full tables from db like 'expr'";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW FULL TABLES FROM db LIKE 'expr'", output);
            sql    = "SHOW full tables in db where id1=abs((select a))";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW FULL TABLES FROM db WHERE id1 = ABS(SELECT a)", output);
            sql    = "SHOW full tables ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW FULL TABLES", output);
            sql    = "SHOW triggers from db like 'expr'";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW TRIGGERS FROM db LIKE 'expr'", output);
            sql    = "SHOW triggers in db where strcmp('test1','test2')";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW TRIGGERS FROM db WHERE STRCMP('test1', 'test2')", output);
            sql    = "SHOW triggers ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW TRIGGERS", output);
            sql    = "SHOW global variables like 'expr'";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW GLOBAL VARIABLES LIKE 'expr'", output);
            sql    = "SHOW global variables where ~a is null";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW GLOBAL VARIABLES WHERE ~ a IS NULL", output);
            sql    = "SHOW session variables like 'expr'";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW SESSION VARIABLES LIKE 'expr'", output);
            sql    = "SHOW session variables where a*b+1=c";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW SESSION VARIABLES WHERE a * b + 1 = c", output);
            sql    = "SHOW variables like 'expr'";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW SESSION VARIABLES LIKE 'expr'", output);
            sql    = "SHOW variables where a&&b";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW SESSION VARIABLES WHERE a AND b", output);
            sql    = "SHOW variables";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW SESSION VARIABLES", output);
            sql    = "SHOW global variables";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW GLOBAL VARIABLES", output);
            sql    = "SHOW session variables";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW SESSION VARIABLES", output);
            sql    = "SHOW warnings limit 1,2 ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW WARNINGS LIMIT 1, 2", output);
            sql    = "SHOW warnings";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW WARNINGS", output);
            sql    = "SHOW Count(*) warnings";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDalParser(lexer, new MySqlExprParser(lexer));
            show   = parser.Show();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(show, sql);
            Assert.AreEqual("SHOW COUNT(*) WARNINGS", output);
        }
Ejemplo n.º 29
0
        public virtual void TestSelect()
        {
            var sql    = "SELect t1.id , t2.* from t1, test.t2 where test.t1.id=1 and t1.id=test.t2.id";
            var lexer  = new MySqlLexer(sql);
            var parser = new MySqlDmlSelectParser(lexer, new MySqlExprParser(lexer));
            var select = parser.Select();

            Assert.IsNotNull(select);
            var output = Output2MySql(select, sql);

            Assert.AreEqual("SELECT t1.id, t2.* FROM t1, test.t2 WHERE test.t1.id = 1 AND t1.id = test.t2.id", output);
            sql =
                "select * from  offer  a  straight_join wp_image b use key for join(t1,t2) on a.member_id=b.member_id inner join product_visit c where a.member_id=c.member_id and c.member_id='abc' ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlSelectParser(lexer, new MySqlExprParser(lexer));
            select = parser.Select();
            Assert.IsNotNull(select);
            output = Output2MySql(select, sql);
            Assert.AreEqual(
                "SELECT * FROM offer AS A STRAIGHT_JOIN wp_image AS B USE KEY FOR JOIN (t1, t2) ON a.member_id = b.member_id INNER JOIN product_visit AS C WHERE a.member_id = c.member_id AND c.member_id = 'abc'",
                output);
            sql    = "SELect all tb1.id,tb2.id from tb1,tb2 where tb1.id2=tb2.id2";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlSelectParser(lexer, new MySqlExprParser(lexer));
            select = parser.Select();
            Assert.IsNotNull(select);
            output = Output2MySql(select, sql);
            Assert.AreEqual("SELECT tb1.id, tb2.id FROM tb1, tb2 WHERE tb1.id2 = tb2.id2", output);
            sql    = "SELect distinct high_priority tb1.id,tb2.id from tb1,tb2 where tb1.id2=tb2.id2";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlSelectParser(lexer, new MySqlExprParser(lexer));
            select = parser.Select();
            Assert.IsNotNull(select);
            output = Output2MySql(select, sql);
            Assert.AreEqual("SELECT DISTINCT HIGH_PRIORITY tb1.id, tb2.id FROM tb1, tb2 WHERE tb1.id2 = tb2.id2", output);
            sql = "SELect distinctrow high_priority sql_small_result tb1.id,tb2.id " +
                  "from tb1,tb2 where tb1.id2=tb2.id2";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlSelectParser(lexer, new MySqlExprParser(lexer));
            select = parser.Select();
            Assert.IsNotNull(select);
            output = Output2MySql(select, sql);
            Assert.AreEqual(
                "SELECT DISTINCTROW HIGH_PRIORITY SQL_SMALL_RESULT tb1.id, tb2.id FROM tb1, tb2 WHERE tb1.id2 = tb2.id2",
                output);
            sql    = "SELect  sql_cache id1,id2 from tb1,tb2 where tb1.id1=tb2.id1 ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlSelectParser(lexer, new MySqlExprParser(lexer));
            select = parser.Select();
            Assert.IsNotNull(select);
            output = Output2MySql(select, sql);
            Assert.AreEqual("SELECT SQL_CACHE id1, id2 FROM tb1, tb2 WHERE tb1.id1 = tb2.id1", output);
            sql    = "SELect  sql_cache id1,max(id2) from tb1 group by id1 having id1>10 order by id3 desc";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlSelectParser(lexer, new MySqlExprParser(lexer));
            select = parser.Select();
            Assert.IsNotNull(select);
            output = Output2MySql(select, sql);
            Assert.AreEqual("SELECT SQL_CACHE id1, MAX(id2) FROM tb1 GROUP BY id1 HAVING id1 > 10 ORDER BY id3 DESC",
                            output);
            sql    = "SELect  SQL_BUFFER_RESULT tb1.id1,id2 from tb1";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlSelectParser(lexer, new MySqlExprParser(lexer));
            select = parser.Select();
            Assert.IsNotNull(select);
            output = Output2MySql(select, sql);
            Assert.AreEqual("SELECT SQL_BUFFER_RESULT tb1.id1, id2 FROM tb1", output);
            sql    = "SELect  SQL_no_cache tb1.id1,id2 from tb1";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlSelectParser(lexer, new MySqlExprParser(lexer));
            select = parser.Select();
            Assert.IsNotNull(select);
            output = Output2MySql(select, sql);
            Assert.AreEqual("SELECT SQL_NO_CACHE tb1.id1, id2 FROM tb1", output);
            sql    = "SELect  SQL_CALC_FOUND_ROWS tb1.id1,id2 from tb1";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlSelectParser(lexer, new MySqlExprParser(lexer));
            select = parser.Select();
            Assert.IsNotNull(select);
            output = Output2MySql(select, sql);
            Assert.AreEqual("SELECT SQL_CALC_FOUND_ROWS tb1.id1, id2 FROM tb1", output);
            sql    = "SELect 1+1 ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlSelectParser(lexer, new MySqlExprParser(lexer));
            select = parser.Select();
            Assert.IsNotNull(select);
            output = Output2MySql(select, sql);
            Assert.AreEqual("SELECT 1 + 1", output);
            sql    = "SELect t1.* from tb ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlSelectParser(lexer, new MySqlExprParser(lexer));
            select = parser.Select();
            Assert.IsNotNull(select);
            output = Output2MySql(select, sql);
            Assert.AreEqual("SELECT t1.* FROM tb", output);
            sql = "SELect distinct high_priority straight_join sql_big_result sql_cache tb1.id,tb2.id "
                  + "from tb1,tb2 where tb1.id2=tb2.id2";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlSelectParser(lexer, new MySqlExprParser(lexer));
            select = parser.Select();
            Assert.IsNotNull(select);
            output = Output2MySql(select, sql);
            Assert.AreEqual("SELECT DISTINCT HIGH_PRIORITY STRAIGHT_JOIN SQL_BIG_RESULT"
                            + " SQL_CACHE tb1.id, tb2.id FROM tb1, tb2 WHERE tb1.id2 = tb2.id2", output);
            sql    = "SELect distinct id1,id2 from tb1,tb2 where tb1.id1=tb2.id2 for update";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlSelectParser(lexer, new MySqlExprParser(lexer));
            select = parser.Select();
            Assert.IsNotNull(select);
            output = Output2MySql(select, sql);
            Assert.AreEqual("SELECT DISTINCT id1, id2 FROM tb1, tb2 WHERE tb1.id1 = tb2.id2 FOR UPDATE", output);
            sql    = "SELect distinct id1,id2 from tb1,tb2 where tb1.id1=tb2.id2 lock in share mode";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlSelectParser(lexer, new MySqlExprParser(lexer));
            select = parser.Select();
            Assert.IsNotNull(select);
            output = Output2MySql(select, sql);
            Assert.AreEqual("SELECT DISTINCT id1, id2 FROM tb1, tb2 WHERE tb1.id1 = tb2.id2 LOCK IN SHARE MODE", output);
        }
Ejemplo n.º 30
0
        public virtual void TestDelete1()
        {
            var sql    = "deLetE LOW_PRIORITY from id1.id , id using t1 a where col1 =? ";
            var lexer  = new MySqlLexer(sql);
            var parser = new MySqlDmlDeleteParser(lexer, new MySqlExprParser(lexer));
            var delete = parser.Delete();

            parser.Match(MySqlToken.Eof);
            var output = Output2MySql(delete, sql);

            Assert.AreEqual("DELETE LOW_PRIORITY id1.id, id FROM t1 AS A WHERE col1 = ?", output);
            sql    = "deLetE from id1.id  using t1  ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlDeleteParser(lexer, new MySqlExprParser(lexer));
            delete = parser.Delete();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(delete, sql);
            Assert.AreEqual("DELETE id1.id FROM t1", output);
            sql =
                "delete from offer.*,wp_image.* using offer a,wp_image b where a.member_id=b.member_id and a.member_id='abc' ";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlDeleteParser(lexer, new MySqlExprParser(lexer));
            delete = parser.Delete();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(delete, sql);
            Assert.AreEqual("DELETE offer.*, wp_image.* FROM offer AS A, wp_image AS B WHERE "
                            + "a.member_id = b.member_id AND a.member_id = 'abc'", output);
            sql    = "deLetE from id1.id where col1='adf' limit 1,?";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlDeleteParser(lexer, new MySqlExprParser(lexer));
            delete = parser.Delete();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(delete, sql);
            Assert.AreEqual("DELETE FROM id1.id WHERE col1 = 'adf' LIMIT 1, ?", output);
            sql    = "deLetE from id where col1='adf' ordEr by d liMit ? offset 2";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlDeleteParser(lexer, new MySqlExprParser(lexer));
            delete = parser.Delete();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(delete, sql);
            Assert.AreEqual("DELETE FROM id WHERE col1 = 'adf' ORDER BY d LIMIT 2, ?", output);
            sql    = "deLetE id.* from t1,t2 where col1='adf'            and col2=1";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlDeleteParser(lexer, new MySqlExprParser(lexer));
            delete = parser.Delete();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(delete, sql);
            Assert.AreEqual("DELETE id.* FROM t1, t2 WHERE col1 = 'adf' AND col2 = 1", output);
            sql    = "deLetE id,id.t from t1";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlDeleteParser(lexer, new MySqlExprParser(lexer));
            delete = parser.Delete();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(delete, sql);
            Assert.AreEqual("DELETE id, id.t FROM t1", output);
            sql    = "deLetE from t1 where t1.id1='abc' order by a limit 5";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlDeleteParser(lexer, new MySqlExprParser(lexer));
            delete = parser.Delete();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(delete, sql);
            Assert.AreEqual("DELETE FROM t1 WHERE t1.id1 = 'abc' ORDER BY a LIMIT 0, 5", output);
            sql    = "deLetE from t1";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlDeleteParser(lexer, new MySqlExprParser(lexer));
            delete = parser.Delete();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(delete, sql);
            Assert.AreEqual("DELETE FROM t1", output);
            sql    = "deLetE ignore tb1.*,id1.t from t1";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlDeleteParser(lexer, new MySqlExprParser(lexer));
            delete = parser.Delete();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(delete, sql);
            Assert.AreEqual("DELETE IGNORE tb1.*, id1.t FROM t1", output);
            sql    = "deLetE quick tb1.*,id1.t from t1";
            lexer  = new MySqlLexer(sql);
            parser = new MySqlDmlDeleteParser(lexer, new MySqlExprParser(lexer));
            delete = parser.Delete();
            parser.Match(MySqlToken.Eof);
            output = Output2MySql(delete, sql);
            Assert.AreEqual("DELETE QUICK tb1.*, id1.t FROM t1", output);
        }