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);
        }
 public CompiledQuerySourceBuilder(CompiledQueryPlan plan, StoreOptions storeOptions,
                                   DocumentTracking documentTracking)
 {
     _plan             = plan;
     _storeOptions     = storeOptions;
     _documentTracking = documentTracking;
     _typeName         = documentTracking + plan.QueryType.ToSuffixedTypeName("CompiledQuerySource");
 }
Example #3
0
        public CompiledQueryCodeFile(Type compiledQueryType, DocumentStore store, CompiledQueryPlan plan, DocumentTracking documentTracking)
        {
            _plan = plan ?? throw new ArgumentNullException(nameof(plan));
            _compiledQueryType = compiledQueryType;
            _store             = store;

            _typeName         = documentTracking + compiledQueryType.ToSuffixedTypeName("CompiledQuerySource");
            _documentTracking = documentTracking;
        }
Example #4
0
 public HardCodedParameters(CompiledQueryPlan plan)
 {
     for (int i = 0; i < plan.Command.Parameters.Count; i++)
     {
         if (plan.Parameters.All(x => x.ParameterIndex != i))
         {
             Record(i, plan.Command.Parameters[i]);
         }
     }
 }
Example #5
0
        private static void assertValidityOfQueryType(CompiledQueryPlan plan, Type type)
        {
            if (plan.InvalidMembers.Any())
            {
                var members = plan.InvalidMembers.Select(x => $"{x.GetRawMemberType().NameInCode()} {x.Name}")
                              .Join(", ");
                var message = $"Members {members} cannot be used as parameters to a compiled query";

                throw new InvalidCompiledQueryException(message);
            }
        }
        public bool AreValuesUnique(object query, CompiledQueryPlan plan)
        {
            var members = findMembers(plan);

            if (!members.Any())
            {
                return(true);
            }

            return(members.Select(x => x.GetValue(query))
                   .Distinct().Count() == members.Length);
        }
        public HardCodedParameters(CompiledQueryPlan plan)
        {
            var parameters = plan.Command.Parameters;

            HasTenantId = parameters.Any(x => x.ParameterName == TenantIdArgument.ArgName);
            if (HasTenantId)
            {
                parameters.RemoveAll(x => x.ParameterName == TenantIdArgument.ArgName);
            }


            for (int i = 0; i < parameters.Count; i++)
            {
                if (plan.Parameters.All(x => !x.ParameterIndexes.Contains(i)))
                {
                    Record(i, parameters[i]);
                }
            }
        }
        public bool AreValuesUnique(object query, CompiledQueryPlan plan)
        {
            var groups = plan.Parameters.Where(x => x.Type.IsEnum)
                         .GroupBy(x => x.Type).Where(x => x.Count() > 1).ToArray();

            if (!groups.Any())
            {
                return(true);
            }

            foreach (var grouping in groups)
            {
                var distinctValueCount = grouping.Select(x => x.GetValueAsObject(query)).Distinct().Count();
                if (distinctValueCount != grouping.Count())
                {
                    return(false);
                }
            }

            return(true);
        }
 public CompiledQuerySourceBuilder(CompiledQueryPlan plan, StoreOptions storeOptions)
 {
     _plan         = plan;
     _storeOptions = storeOptions;
     _typeName     = _plan.QueryType.Name + "CompiledQuerySource";
 }
 private static IQueryMember <T>[] findMembers(CompiledQueryPlan plan)
 {
     return(plan.Parameters.OfType <IQueryMember <T> >().ToArray());
 }
Example #11
0
 public CompiledQuerySourceBuilder(CompiledQueryPlan plan, StoreOptions storeOptions)
 {
     _plan         = plan;
     _storeOptions = storeOptions;
 }