Exemple #1
0
        private async Task <IQuery <ContentItem> > FilterWhereArguments(
            IQuery <ContentItem, ContentItemIndex> query,
            JObject where,
            ResolveFieldContext fieldContext,
            ISession session,
            GraphQLContext context)
        {
            if (where == null)
            {
                return(query);
            }

            var transaction = await session.DemandAsync();

            IPredicateQuery predicateQuery = new PredicateQuery(SqlDialectFactory.For(transaction.Connection), context.ServiceProvider.GetService <ShellSettings>());

            // Create the default table alias
            predicateQuery.CreateAlias("", nameof(ContentItemIndex));

            // Add all provided table alias to the current predicate query
            var providers    = context.ServiceProvider.GetServices <IIndexAliasProvider>();
            var indexes      = new Dictionary <string, IndexAlias>(StringComparer.OrdinalIgnoreCase);
            var indexAliases = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase);

            foreach (var aliasProvider in providers)
            {
                foreach (var alias in aliasProvider.GetAliases())
                {
                    predicateQuery.CreateAlias(alias.Alias, alias.Index);
                    indexAliases.Add(alias.Alias, alias.Alias);

                    if (!indexes.ContainsKey(alias.Index))
                    {
                        indexes.Add(alias.Index, alias);
                    }
                }
            }

            var expressions = Expression.Conjunction();

            BuildWhereExpressions(where, expressions, null, fieldContext, indexAliases);

            var whereSqlClause = expressions.ToSqlString(predicateQuery);

            query = query.Where(whereSqlClause);

            // Add all parameters that were used in the predicate query
            foreach (var parameter in predicateQuery.Parameters)
            {
                query = query.WithParameter(parameter.Key, parameter.Value);
            }

            // Add all Indexes that were used in the predicate query
            IQuery <ContentItem> contentQuery = query;

            foreach (var usedAlias in predicateQuery.GetUsedAliases())
            {
                if (indexes.ContainsKey(usedAlias))
                {
                    contentQuery = indexes[usedAlias].With(contentQuery);
                }
            }

            return(contentQuery);
        }
 public PersonRepository(GraphQLContext context) : base(context)
 {
 }
Exemple #3
0
        private IQuery <ContentItem> PageQuery(IQuery <ContentItem> contentItemsQuery, ResolveFieldContext context, GraphQLContext graphQLContext)
        {
            var first = context.GetArgument <int>("first");

            if (first == 0)
            {
                first = _defaultNumberOfItems;
            }

            contentItemsQuery = contentItemsQuery.Take(first);

            if (context.HasPopulatedArgument("skip"))
            {
                var skip = context.GetArgument <int>("skip");

                contentItemsQuery = contentItemsQuery.Skip(skip);
            }

            return(contentItemsQuery);
        }
 public PersonController(GraphQLContext context)
 {
     this.context = context;
 }
 public SkillRepository(GraphQLContext context) : base(context)
 {
 }
 public PaymentRepository(GraphQLContext dbContext)
 {
     _dbContext = dbContext;
 }
Exemple #7
0
 public PropertyRepository(GraphQLContext dbContext)
 {
     _dbContext = dbContext;
 }
 public GraphQLVisitor(GraphQLContext graphQLContext)
 {
     this.graphQLContext = graphQLContext;
 }