Beispiel #1
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;
            }
        }
Beispiel #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");
        }
Beispiel #3
0
 public MySqlDmlInsertParser(MySqlLexer lexer, MySqlExprParser exprParser)
     : base(lexer, exprParser)
 {
 }
Beispiel #4
0
 public MySqlDmlUpdateParser(MySqlLexer lexer, MySqlExprParser exprParser)
     : base(lexer, exprParser)
 {
 }
Beispiel #5
0
 public MySqlDmlParser(MySqlLexer lexer, MySqlExprParser exprParser)
     : base(lexer)
 {
     this.exprParser = exprParser;
 }
Beispiel #6
0
 public MySqlDmlSelectParser(MySqlLexer lexer, MySqlExprParser exprParser)
     : base(lexer, exprParser)
 {
     this.exprParser.SetSelectParser(this);
 }
Beispiel #7
0
 public MySqlDmlReplaceParser(MySqlLexer lexer, MySqlExprParser exprParser)
     : base(lexer, exprParser)
 {
 }
Beispiel #8
0
        /// <exception cref="System.SqlSyntaxErrorException" />
        public static ISqlStatement Parse(string sql, MySqlLexer lexer, string charset)
        {
            try
            {
                ISqlStatement stmt       = null;
                var           isEof      = true;
                var           exprParser = new MySqlExprParser(lexer, charset);
                switch (lexer.Token())
                {
                case MySqlToken.KwDesc:
                case MySqlToken.KwDescribe:
                {
                    stmt = new MySqlDalParser(lexer, exprParser).Desc();
                    goto stmtSwitch_break;
                }

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

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

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

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

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

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

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

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

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

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

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

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

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

                default:
                {
                    throw new SqlSyntaxErrorException("sql is not a supported statement");
                }
                }
stmtSwitch_break:
                ;
                if (isEof)
                {
                    while (lexer.Token() == MySqlToken.PuncSemicolon)
                    {
                        lexer.NextToken();
                    }
                    if (lexer.Token() != MySqlToken.Eof)
                    {
                        throw new SqlSyntaxErrorException("Sql syntax error!");
                    }
                }
                return(stmt);
            }
            catch (Exception e)
            {
                throw new SqlSyntaxErrorException(BuildErrorMsg(e, lexer, sql), e);
            }
        }