コード例 #1
0
ファイル: EqlBuilder.cs プロジェクト: wdr1990123/WebVella-ERP
        private ParseTree Parse(string source, List <EqlError> errors)
        {
            if (string.IsNullOrWhiteSpace(source))
            {
                throw new EqlException("Source is empty.");
            }

            if (errors == null)
            {
                errors = new List <EqlError>();
            }

            var grammar  = new EqlGrammar();
            var language = new LanguageData(grammar);
            var parser   = new Parser(language);
            var tree     = parser.Parse(source);

            if (tree.HasErrors())
            {
                foreach (var error in tree.ParserMessages.Where(x => x.Level == Irony.ErrorLevel.Error))
                {
                    EqlError err = new EqlError {
                        Message = error.Message
                    };
                    err.Line   = error.Location.Line;
                    err.Column = error.Location.Column;
                    errors.Add(err);
                }
            }

            return(tree);
        }
コード例 #2
0
ファイル: EqlBuilder.cs プロジェクト: wdr1990123/WebVella-ERP
        /// <summary>
        /// Build EQL to SQL
        /// </summary>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public EqlBuildResult Build(List <EqlParameter> parameters = null)
        {
            if (parameters != null)
            {
                Parameters = parameters;
            }

            var grammar  = new EqlGrammar();
            var language = new LanguageData(grammar);
            var parser   = new Parser(language);

            List <EqlError> errors    = new List <EqlError>();
            var             parseTree = Parse(Text, errors);

            EqlBuildResult result = new EqlBuildResult();

            try
            {
                if (errors.Count == 0)
                {
                    result.Tree = BuildAbstractTree(parseTree);
                }

                if (errors.Count == 0)
                {
                    Entity fromEntity = null;
                    result.Sql        = BuildSql(result.Tree, errors, result.Meta, out fromEntity);
                    result.FromEntity = fromEntity;
                }

                result.Errors.AddRange(errors);
                result.Parameters.AddRange(Parameters);
                result.ExpectedParameters.AddRange(ExpectedParameters);
            }
            catch (EqlException)
            {
                throw;
            }
            catch (Exception ex)
            {
                result.Errors.Add(new EqlError {
                    Message = ex.Message
                });
            }

            return(result);
        }