//[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"); }
//[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); }
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); }
protected internal virtual MySqlDmlParser GetDmlParser(MySqlLexer lexer) { var exp = new MySqlExprParser(lexer); MySqlDmlParser parser = new MySqlDmlSelectParser(lexer, exp); return parser; }
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 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); }
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 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); }
/// <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 SetSelectParser(MySqlDmlSelectParser selectParser) { this.selectParser = selectParser; }
/// <summary> /// first token is /// <see cref="MySqlToken.KwSelect" /> /// </summary> /// <exception cref="System.SqlSyntaxErrorException" /> private IQueryExpression SubQuery() { if (selectParser == null) { selectParser = new MySqlDmlSelectParser(lexer, this); } return selectParser.Select(); }
/// <exception cref="System.SqlSyntaxErrorException" /> public static ISqlStatement Parse(string sql, MySqlLexer lexer, string charset) { try { ISqlStatement stmt = null; var isEof = true; var exprParser = new MySqlExprParser(lexer, charset); switch (lexer.Token()) { case MySqlToken.KwDesc: case MySqlToken.KwDescribe: { stmt = new MySqlDalParser(lexer, exprParser).Desc(); goto stmtSwitch_break; } case MySqlToken.KwSelect: case MySqlToken.PuncLeftParen: { stmt = new MySqlDmlSelectParser(lexer, exprParser).SelectUnion(); goto stmtSwitch_break; } case MySqlToken.KwDelete: { stmt = new MySqlDmlDeleteParser(lexer, exprParser).Delete(); goto stmtSwitch_break; } case MySqlToken.KwInsert: { stmt = new MySqlDmlInsertParser(lexer, exprParser).Insert(); goto stmtSwitch_break; } case MySqlToken.KwReplace: { stmt = new MySqlDmlReplaceParser(lexer, exprParser).Replace(); goto stmtSwitch_break; } case MySqlToken.KwUpdate: { stmt = new MySqlDmlUpdateParser(lexer, exprParser).Update(); goto stmtSwitch_break; } case MySqlToken.KwCall: { stmt = new MySqlDmlCallParser(lexer, exprParser).Call(); goto stmtSwitch_break; } case MySqlToken.KwSet: { stmt = new MySqlDalParser(lexer, exprParser).Set(); goto stmtSwitch_break; } case MySqlToken.KwShow: { stmt = new MySqlDalParser(lexer, exprParser).Show(); goto stmtSwitch_break; } case MySqlToken.KwAlter: case MySqlToken.KwCreate: case MySqlToken.KwDrop: case MySqlToken.KwRename: { stmt = new MySqlDdlParser(lexer, exprParser).DdlStmt(); isEof = IsEOFedDdl(stmt); goto stmtSwitch_break; } case MySqlToken.KwRelease: { stmt = new MySqlMtsParser(lexer).Release(); goto stmtSwitch_break; } case MySqlToken.Identifier: { var si = SpecialIdentifier.None; if ((si = SpecialIdentifiers[lexer.GetStringValueUppercase()]) != SpecialIdentifier.None) { switch (si) { case SpecialIdentifier.Truncate: { stmt = new MySqlDdlParser(lexer, exprParser).Truncate(); goto stmtSwitch_break; } case SpecialIdentifier.Savepoint: { stmt = new MySqlMtsParser(lexer).Savepoint(); goto stmtSwitch_break; } case SpecialIdentifier.Rollback: { stmt = new MySqlMtsParser(lexer).Rollback(); goto stmtSwitch_break; } } } goto default; } default: { throw new SqlSyntaxErrorException("sql is not a supported statement"); } } stmtSwitch_break: ; if (isEof) { while (lexer.Token() == MySqlToken.PuncSemicolon) { lexer.NextToken(); } if (lexer.Token() != MySqlToken.Eof) { throw new SqlSyntaxErrorException("Sql syntax error!"); } } return stmt; } catch (Exception e) { throw new SqlSyntaxErrorException(BuildErrorMsg(e, lexer, sql), e); } }
/// <summary><code>TABLE</code> has been consumed</summary> /// <exception cref="System.SqlSyntaxErrorException" /> private DdlCreateTableStatement CreateTable(bool temp) { var ifNotExists = false; if (lexer.Token() == MySqlToken.KwIf) { lexer.NextToken(); Match(MySqlToken.KwNot); Match(MySqlToken.KwExists); ifNotExists = true; } var table = Identifier(); var stmt = new DdlCreateTableStatement(temp, ifNotExists, table); CreateTableDefs(stmt); var options = new DdlTableOptions(); stmt.SetTableOptions(options); TableOptions(options); var selectOpt = CreateTableSelectOption.None; switch (lexer.Token()) { case MySqlToken.KwIgnore: { selectOpt = CreateTableSelectOption.Ignored; if (lexer.NextToken() == MySqlToken.KwAs) { lexer.NextToken(); } break; } case MySqlToken.KwReplace: { selectOpt = CreateTableSelectOption.Replace; if (lexer.NextToken() == MySqlToken.KwAs) { lexer.NextToken(); } break; } case MySqlToken.KwAs: { lexer.NextToken(); goto case MySqlToken.KwSelect; } case MySqlToken.KwSelect: { break; } case MySqlToken.Eof: { return stmt; } default: { throw new SqlSyntaxErrorException("Ddl CREATE TABLE statement not end properly"); } } var select = new MySqlDmlSelectParser(lexer, exprParser).Select(); stmt.SetSelect(selectOpt, select); Match(MySqlToken.Eof); return stmt; }