Exemple #1
0
    protected override void Complete(IConventionContext context)
    {
        if (Definition.Provider is null)
        {
            throw ProjectionConvention_NoProviderFound(GetType(), Definition.Scope);
        }

        if (Definition.ProviderInstance is null)
        {
            _provider =
                context.Services.GetOrCreateService <IProjectionProvider>(Definition.Provider) ??
                throw ProjectionConvention_NoProviderFound(GetType(), Definition.Scope);
        }
        else
        {
            _provider = Definition.ProviderInstance;
        }

        if (_provider is IProjectionProviderConvention init)
        {
            IReadOnlyList <IProjectionProviderExtension> extensions =
                CollectExtensions(context.Services, Definition);
            init.Initialize(context);
            MergeExtensions(context, init, extensions);
            init.Complete(context);
        }
    }
Exemple #2
0
 public static ISchemaError ProjectionConvention_UnableToCreateFieldHandler(
     IProjectionProvider convention,
     Type fieldHandler) =>
 SchemaErrorBuilder.New()
 .SetMessage(
     DataResources.FilterProvider_UnableToCreateFieldHandler,
     fieldHandler.FullName ?? fieldHandler.Name,
     convention.GetType().FullName ?? convention.GetType().Name)
 .SetExtension(nameof(convention), convention)
 .SetExtension(nameof(fieldHandler), fieldHandler)
 .Build();
Exemple #3
0
 private void GenerateQueryResult()
 {
     if (this.description.CountOption == RequestQueryCountOption.ValueOnly)
     {
         this.description.VerifyProtocolVersion(RequestDescription.Version2Dot0, this.service);
         this.description.VerifyRequestVersion(RequestDescription.Version2Dot0, this.service);
         this.description.VerifyAndRaiseResponseVersion(RequestDescription.Version2Dot0, this.service);
         this.queryExpression = this.queryExpression.QueryableLongCount();
     }
     else if (this.rootProjectionNode != null)
     {
         IExpandProvider service = this.service.Provider.GetService <IExpandProvider>();
         if (service != null)
         {
             if (this.IsStandardPaged)
             {
                 throw new DataServiceException(500, System.Data.Services.Strings.DataService_SDP_TopLevelPagedResultWithOldExpandProvider);
             }
             if (this.rootProjectionNode.ProjectionsSpecified)
             {
                 throw new DataServiceException(500, System.Data.Services.Strings.DataService_Projections_ProjectionsWithOldExpandProvider);
             }
             if (this.rootProjectionNode.ExpansionOnDerivedTypesSpecified)
             {
                 throw new DataServiceException(500, System.Data.Services.Strings.DataService_DerivedExpansions_OldExpandProvider);
             }
             this.ProcessOrderBy();
             this.ProcessSkipAndTop();
             this.queryExpression = Expression.Call(Expression.Constant(service), ApplyExpansionsMethodInfo, this.queryExpression, Expression.Constant(this.rootProjectionNode.ExpandPaths));
             this.rootProjectionNode.UseExpandPathsForSerialization = true;
         }
         else
         {
             IProjectionProvider projectionProvider = this.service.Provider.ProjectionProvider;
             if (projectionProvider == null)
             {
                 projectionProvider = new BasicExpandProvider(this.service.Provider, false, true);
             }
             this.queryExpression = Expression.Call(null, DataServiceExecutionProviderMethods.ApplyProjectionsMethodInfo, Expression.Constant(projectionProvider, typeof(object)), this.queryExpression, Expression.Constant(this.rootProjectionNode, typeof(object)));
         }
     }
     else if (!string.IsNullOrEmpty(this.service.OperationContext.Host.GetQueryStringItem("$expand")))
     {
         this.ProjectSkipTokenForNonExpand();
         this.ProcessOrderBy();
         this.ProcessSkipAndTop();
     }
 }
        protected override void OnComplete(IConventionContext context)
        {
            if (Definition.Provider is null)
            {
                throw ProjectionConvention_NoProviderFound(GetType(), Definition.Scope);
            }

            if (Definition.ProviderInstance is null)
            {
                _provider =
                    context.Services.GetOrCreateService <IProjectionProvider>(Definition.Provider) ??
                    throw ProjectionConvention_NoProviderFound(GetType(), Definition.Scope);
            }
            else
            {
                _provider = Definition.ProviderInstance;
            }

            if (_provider is IProjectionProviderConvention init)
            {
                init.Initialize(context);
                init.OnComplete(context);
            }
        }
 public ProjectionOptimizer(IProjectionProvider provider)
 {
     _provider = provider;
 }