public static Parse ( IContext context, SqlQuery query ) : IEnumerable |
||
context | IContext | |
query | SqlQuery | |
Результат | IEnumerable |
public void ParseWithColumnAndTableConstraints() { const string sql = "CREATE TABLE test (id INT PRIMARY KEY, name VARCHAR NOT NULL, CONSTRAINT uk_test UNIQUE(name))"; IEnumerable <SqlStatement> statements = null; Assert.DoesNotThrow(() => statements = SqlStatement.Parse(sql)); Assert.IsNotNull(statements); var list = statements.ToList(); Assert.AreEqual(3, list.Count); }
public void ExecuteSimpleCreateView() { const string sql = "CREATE VIEW text_view1 AS SELECT * FROM test_table WHERE a = 1"; IEnumerable <SqlStatement> statements = null; Assert.DoesNotThrow(() => statements = SqlStatement.Parse(sql)); Assert.IsNotNull(statements); var list = statements.ToList(); Assert.AreEqual(1, list.Count); var statement = list[0]; Assert.IsNotNull(statement); Assert.IsInstanceOf <CreateViewStatement>(statement); ITable result = null; Assert.DoesNotThrow(() => result = statement.Execute(Query)); Assert.IsNotNull(result); Assert.AreEqual(1, result.RowCount); }
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()); }