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); }
//[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"); }
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); }
/// <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; } }
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); }
/// <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); }
/// <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(); } }
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)); }
/// <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); } }
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); }
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); } }
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); } }
/// <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); }
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); }
/// <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); } }
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); }
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()); }
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); }
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); }
public MySqlDmlInsertParser(MySqlLexer lexer, MySqlExprParser exprParser) : base(lexer, exprParser) { }
public MySqlDmlUpdateParser(MySqlLexer lexer, MySqlExprParser exprParser) : base(lexer, exprParser) { }
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); }
public SoloParser(MySqlLexer lexer) : base(lexer) { }
public MySqlDmlParser(MySqlLexer lexer, MySqlExprParser exprParser) : base(lexer) { this.exprParser = exprParser; }
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); }
public MySqlDmlSelectParser(MySqlLexer lexer, MySqlExprParser exprParser) : base(lexer, exprParser) { this.exprParser.SetSelectParser(this); }
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); }
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); }
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); }