Exemplo n.º 1
0
        public SqlCompileResult Compile(SqlCompileContext context)
        {
            if (context == null)
                throw new ArgumentNullException("context");

            var compiler = SqlParsers.Default;
            var compileResult = new SqlCompileResult(context);

            try {
                var sqlSource = context.SourceText;
                var result = compiler.Parse(sqlSource);

                foreach (var error in result.Errors) {
                    var location = new SourceLocation(error.Line, error.Column);
                    compileResult.Messages.Add(new SqlCompileMessage(CompileMessageLevel.Error, error.Message, location));
                }

                var builder = new StatementBuilder();
                var statements = builder.Build(result.RootNode, sqlSource);

                foreach (var statement in statements) {
                    compileResult.Statements.Add(statement);
                }
            } catch (SqlParseException ex) {
                compileResult.Messages.Add(new SqlCompileMessage(CompileMessageLevel.Error, ex.Message));
            } catch (Exception ex) {
                compileResult.Messages.Add(new SqlCompileMessage(CompileMessageLevel.Error, ex.Message));
            }

            return compileResult;
        }
Exemplo n.º 2
0
        public SqlCompileResult(SqlCompileContext compileContext)
        {
            if (compileContext == null)
                throw new ArgumentNullException("compileContext");

            CompileContext = compileContext;
            Messages = new List<SqlCompileMessage>();
            Statements = new List<SqlStatement>();
        }
        public SqlCompileResult(SqlCompileContext compileContext)
        {
            if (compileContext == null)
            {
                throw new ArgumentNullException("compileContext");
            }

            CompileContext = compileContext;
            Messages       = new List <SqlCompileMessage>();
            Statements     = new List <SqlStatement>();
        }
Exemplo n.º 4
0
        public SqlCompileResult(SqlCompileContext compileContext)
        {
            if (compileContext == null)
            {
                throw new ArgumentNullException("compileContext");
            }

            CompileContext = compileContext;
            Messages       = new List <SqlCompileMessage>();
            ((SqlCompileResult)this).CodeObjects = new List <ISqlCodeObject>();
        }
Exemplo n.º 5
0
        public SqlCompileResult Compile(SqlCompileContext context)
        {
            var result = new SqlCompileResult(context);

            try {
                SetInput(context.SourceText);

                // plSqlParser = MakeParser(context.SourceText, message => result.Messages.Add(message));
                var parseResult = plSqlParser.compilationUnit();

                if (parseResult == null)
                {
                    throw new InvalidOperationException();
                }

                if (messages.Count > 0)
                {
                    foreach (var message in messages)
                    {
                        result.Messages.Add(message);
                    }
                }

                if (result.HasErrors)
                {
                    return(result);
                }

                var visitor   = new SqlStatementVisitor();
                var statement = visitor.Visit(parseResult);

                if (statement is SequenceOfStatements)
                {
                    var sequence = ((SequenceOfStatements)statement).Statements;
                    foreach (var child in sequence)
                    {
                        result.Statements.Add(child);
                    }
                }
                else
                {
                    result.Statements.Add(statement);
                }
            } catch (Exception ex) {
                result.Messages.Add(new SqlCompileMessage(CompileMessageLevel.Error, ex.Message));
            }

            return(result);
        }
Exemplo n.º 6
0
        public SqlCompileResult Compile(SqlCompileContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            var compileResult = new SqlCompileResult(context);

            try {
                var sqlSource = context.SourceText;
                var result    = SqlParsers.Default.Parse(sqlSource);

                foreach (var error in result.Errors)
                {
                    var location = new SourceLocation(error.Line, error.Column);
                    compileResult.Messages.Add(new SqlCompileMessage(CompileMessageLevel.Error, error.Message, location));
                }

                ITypeResolver typeResolver = null;
                if (context.Context != null)
                {
                    typeResolver = context.Context.TypeResolver();
                }

                var builder = new SqlCodeObjectBuilder(typeResolver);
                var objects = builder.Build(result.RootNode);

                foreach (var statement in objects)
                {
                    compileResult.CodeObjects.Add(statement);
                }
            } catch (SqlParseException ex) {
                compileResult.Messages.Add(new SqlCompileMessage(CompileMessageLevel.Error, ex.Message));
            } catch (Exception ex) {
                compileResult.Messages.Add(new SqlCompileMessage(CompileMessageLevel.Error, ex.Message));
            }

            return(compileResult);
        }
Exemplo n.º 7
0
        public SqlCompileResult Compile(SqlCompileContext context)
        {
            var result = new SqlCompileResult(context);

            try {
                SetInput(context.SourceText);

                // plSqlParser = MakeParser(context.SourceText, message => result.Messages.Add(message));
                var parseResult = plSqlParser.compilationUnit();

                if (parseResult == null)
                    throw new InvalidOperationException();

                if (messages.Count > 0) {
                    foreach (var message in messages) {
                        result.Messages.Add(message);
                    }
                }

                if (result.HasErrors)
                    return result;

                var visitor = new SqlStatementVisitor();
                var statement = visitor.Visit(parseResult);

                if (statement is SequenceOfStatements) {
                    var sequence = ((SequenceOfStatements) statement).Statements;
                    foreach (var child in sequence) {
                        result.Statements.Add(child);
                    }
                } else {
                    result.Statements.Add(statement);
                }
            } catch (Exception ex) {
                result.Messages.Add(new SqlCompileMessage(CompileMessageLevel.Error, ex.Message));
            }

            return result;
        }
Exemplo n.º 8
0
        public static IEnumerable<SqlStatement> Parse(IQueryContext context, SqlQuery query)
        {
            if (query == null)
                throw new ArgumentNullException("query");

            var compiler = DefaultCompiler;

            ISystemContext systemContext = null;

            if (context != null) {
                systemContext = context.SystemContext();
                compiler = systemContext.SqlCompiler();
            }

            try {
                var compileContext = new SqlCompileContext(systemContext, query.Text);
                var result = compiler.Compile(compileContext);
                if (result.HasErrors)
                    throw new SqlParseException();

                var statements = result.Statements;

                foreach (var statement in statements) {
                    if (statement != null)
                        statement.SetSource(query);
                }

                return statements;
            } catch (SqlParseException) {
                throw;
            } catch (Exception ex) {
                throw new SqlParseException("The input string cannot be parsed into SQL Statements", ex);
            }
        }
Exemplo n.º 9
0
        public static IEnumerable<SqlStatement> Parse(IContext context, SqlQuery query)
        {
            if (query == null)
                throw new ArgumentNullException("query");

            var compiler = DefaultCompiler;

            if (context != null) {
                compiler = context.ResolveService<ISqlCompiler>();
            }

            try {
                var compileContext = new SqlCompileContext(context, query.Text);
                var result = compiler.Compile(compileContext);
                if (result.HasErrors)
                {
                    var messages = new StringBuilder();
                    messages.AppendFormat("SqlParseException for '{0}'" + Environment.NewLine, query.Text);
                    foreach (var m in result.Messages)
                    {
                        messages.AppendFormat("Level: {0}", m.Level);
                        if (null != m.Location)
                        {
                            messages.AppendFormat(", Line: {0}, Column: {1}", m.Location.Line, m.Location.Column);
                        }
                        messages.AppendFormat(", Message: {0}", m.Text);
                        messages.AppendLine();
                    }
                    throw new SqlParseException(messages.ToString());
                }

                var statements = result.Statements.Cast<SqlStatement>();

                foreach (var statement in statements) {
                    if (statement != null)
                        statement.SetSource(query);
                }

                return statements;
            } catch (SqlParseException) {
                throw;
            } catch (Exception ex) {
                var messages = new StringBuilder();
                messages.AppendFormat ("The input string '{0}'" + Environment.NewLine, query.Text);
                messages.AppendFormat (" cannot be parsed into SQL Statements, because of {0}" + Environment.NewLine, ex.ToString());
                throw new SqlParseException(messages.ToString(), ex);
            }
        }