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; }
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>(); }
public SqlCompileResult(SqlCompileContext compileContext) { if (compileContext == null) { throw new ArgumentNullException("compileContext"); } CompileContext = compileContext; Messages = new List <SqlCompileMessage>(); ((SqlCompileResult)this).CodeObjects = new List <ISqlCodeObject>(); }
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); }
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); }
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; }
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); } }
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); } }