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);
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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));
        }
Beispiel #4
0
        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));
        }
Beispiel #5
0
        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));
        }