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) { }
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; }
public PropertyRepository(GraphQLContext dbContext) { _dbContext = dbContext; }
public GraphQLVisitor(GraphQLContext graphQLContext) { this.graphQLContext = graphQLContext; }