internal LinqHandlerBuilder(MartenLinqQueryProvider provider, IMartenSession session, Expression expression, ResultOperatorBase additionalOperator = null, bool forCompiled = false) { _session = session; _provider = provider; Model = forCompiled ? MartenQueryParser.TransformQueryFlyweight.GetParsedQuery(expression) : MartenQueryParser.Flyweight.GetParsedQuery(expression); if (additionalOperator != null) { Model.ResultOperators.Add(additionalOperator); } var storage = session.StorageFor(Model.MainFromClause.ItemType); TopStatement = CurrentStatement = new DocumentStatement(storage); // TODO -- this probably needs to get fancier later when this goes n-deep if (Model.MainFromClause.FromExpression is SubQueryExpression sub) { readQueryModel(Model, storage, false, storage.Fields); readQueryModel(sub.QueryModel, storage, true, _session.Options.ChildTypeMappingFor(sub.QueryModel.MainFromClause.ItemType)); } else { readQueryModel(Model, storage, true, storage.Fields); } wrapIncludes(_provider.AllIncludes); }
public Task <IReadOnlyList <T> > QueryAsync <T>(string sql, CancellationToken token, params object[] parameters) { assertNotDisposed(); var handler = new UserSuppliedQueryHandler <T>(this, sql, parameters); var provider = new MartenLinqQueryProvider(this); return(provider.ExecuteHandlerAsync(handler, token)); }
public IReadOnlyList <T> Query <T>(string sql, params object[] parameters) { assertNotDisposed(); var handler = new UserSuppliedQueryHandler <T>(this, sql, parameters); var provider = new MartenLinqQueryProvider(this); return(provider.ExecuteHandler(handler)); }
public async Task <IReadOnlyList <T> > QueryAsync <T>(string sql, CancellationToken token, params object[] parameters) { assertNotDisposed(); var handler = new UserSuppliedQueryHandler <T>(this, sql, parameters); if (!handler.SqlContainsCustomSelect) { await Database.EnsureStorageExistsAsync(typeof(T), token).ConfigureAwait(false); } var provider = new MartenLinqQueryProvider(this); return(await provider.ExecuteHandlerAsync(handler, token).ConfigureAwait(false)); }
public IReadOnlyList <T> Query <T>(string sql, params object[] parameters) { assertNotDisposed(); var handler = new UserSuppliedQueryHandler <T>(this, sql, parameters); if (!handler.SqlContainsCustomSelect) { Database.EnsureStorageExists(typeof(T)); } var provider = new MartenLinqQueryProvider(this); return(provider.ExecuteHandler(handler)); }