public static ITable[] Execute(this IRequest request, SqlQuery query) { if (query == null) throw new ArgumentNullException("query"); var sqlSouce = query.Text; // TODO: find it from the cache... var statements = SqlStatement.Parse(sqlSouce); // TODO: set it in cache ... var preparer = new QueryPreparer(query); bool statementSeen = false; var results = new List<ITable>(); foreach (var statement in statements) { // TODO: query.RegisterQuery(statement); // TODO: Invoke diagnostics for the preparation... var prepared = statement.Prepare(preparer, request); ITable result; try { var exeContext = new ExecutionContext(request); prepared.Execute(exeContext); if (exeContext.HasResult) { result = exeContext.Result; } else { result = FunctionTable.ResultTable(request, 0); } } catch (StatementException ex) { request.OnError(ex); throw; } catch (Exception ex) { var sex = new StatementException("An unhanded error occurred while executing the statement.", ex); request.OnError(sex); throw sex; } finally { statementSeen = true; } results.Add(result); } if (!statementSeen) throw new SqlParseException("The input query was not parsed in any statements that could be executed."); return results.ToArray(); }
public static ITable[] Execute(this IRequest request, SqlQuery query) { if (query == null) { throw new ArgumentNullException("query"); } var sqlSouce = query.Text; // TODO: find it from the cache... var statements = SqlStatement.Parse(sqlSouce); // TODO: set it in cache ... var preparer = new QueryPreparer(query); bool statementSeen = false; var results = new List <ITable>(); foreach (var statement in statements) { // TODO: query.RegisterQuery(statement); // TODO: Invoke diagnostics for the preparation... var prepared = statement.Prepare(preparer, request); ITable result; try { var exeContext = new ExecutionContext(request); prepared.Execute(exeContext); if (exeContext.HasResult) { result = exeContext.Result; } else { result = FunctionTable.ResultTable(request, 0); } } catch (StatementException ex) { request.OnError(ex); throw; } catch (Exception ex) { var sex = new StatementException("An unhanded error occurred while executing the statement.", ex); request.OnError(sex); throw sex; } finally { statementSeen = true; } results.Add(result); } if (!statementSeen) { throw new SqlParseException("The input query was not parsed in any statements that could be executed."); } return(results.ToArray()); }
public static StatementResult[] ExecuteQuery(this IQuery query, SqlQuery sqlQuery) { if (sqlQuery == null) { throw new ArgumentNullException("sqlQuery"); } SqlStatement[] statements = null; bool cacheGet = false; var cache = query.Context.ResolveService <IStatementCache>(); if (cache != null) { if (cache.TryGet(sqlQuery.Text, out statements)) { cacheGet = true; } } if (statements == null) { var sqlSouce = sqlQuery.Text; var compiler = query.Context.SqlCompiler(); if (compiler == null) { compiler = new PlSqlCompiler(); } var compileResult = compiler.Compile(new SqlCompileContext(query.Context, sqlSouce)); if (compileResult.HasErrors) { // TODO: throw a specialized exception... throw new InvalidOperationException("The compilation of the query thrown errors."); } statements = compileResult.Statements.ToArray(); } if (statements.Length == 0) { return(new StatementResult[0]); } if (cache != null && !cacheGet) { cache.Set(sqlQuery.Text, statements); } query.Context.RegisterEvent(new QueryEvent(sqlQuery, QueryEventType.BeforeExecute, null)); var paramStyle = sqlQuery.ParameterStyle; if (paramStyle == QueryParameterStyle.Default) { paramStyle = query.ParameterStyle(); } var preparer = new QueryPreparer(sqlQuery, paramStyle); var result = query.ExecuteStatements(preparer, statements); query.Context.RegisterEvent(new QueryEvent(sqlQuery, QueryEventType.AfterExecute, result)); return(result); }