Example #1
0
        public static CompiledQueryPlan BuildPlan <TDoc, TOut>(QuerySession session, ICompiledQuery <TDoc, TOut> query,
                                                               StoreOptions storeOptions)
        {
            eliminateStringNulls(query);

            var plan = new CompiledQueryPlan(query.GetType(), typeof(TOut));

            plan.FindMembers();

            assertValidityOfQueryType(plan, query.GetType());

            // This *could* throw
            var queryTemplate = plan.CreateQueryTemplate(query);

            var statistics = plan.GetStatisticsIfAny(query);
            var builder    = BuildDatabaseCommand(session, queryTemplate, statistics, out var command);

            plan.IncludePlans.AddRange(new List <IIncludePlan>());
            var handler = builder.BuildHandler <TOut>();

            if (handler is IIncludeQueryHandler <TOut> i)
            {
                handler = i.Inner;
            }

            plan.HandlerPrototype = handler;

            plan.ReadCommand(command, storeOptions);

            return(plan);
        }