protected override ShapedQueryExpression?TranslateCast( ShapedQueryExpression source, Type resultType) => null;
protected override ShapedQueryExpression TranslateGroupJoin(ShapedQueryExpression outer, ShapedQueryExpression inner, LambdaExpression outerKeySelector, LambdaExpression innerKeySelector, LambdaExpression resultSelector) => null;
protected override ShapedQueryExpression TranslateJoin(ShapedQueryExpression outer, ShapedQueryExpression inner, LambdaExpression outerKeySelector, LambdaExpression innerKeySelector, LambdaExpression resultSelector) { outerKeySelector = TranslateLambdaExpression(outer, outerKeySelector); innerKeySelector = TranslateLambdaExpression(inner, innerKeySelector); if (outerKeySelector == null || innerKeySelector == null) { return(null); } (outerKeySelector, innerKeySelector) = AlignKeySelectorTypes(outerKeySelector, innerKeySelector); var transparentIdentifierType = TransparentIdentifierFactory.Create( resultSelector.Parameters[0].Type, resultSelector.Parameters[1].Type); ((InMemoryQueryExpression)outer.QueryExpression).AddInnerJoin( (InMemoryQueryExpression)inner.QueryExpression, outerKeySelector, innerKeySelector, transparentIdentifierType); return(TranslateResultSelectorForJoin( outer, resultSelector, inner.ShaperExpression, transparentIdentifierType)); }
protected override ShapedQueryExpression TranslateCast(ShapedQueryExpression source, Type resultType) => throw new NotImplementedException();
protected override ShapedQueryExpression TranslateAverage(ShapedQueryExpression source, LambdaExpression selector, Type resultType) => TranslateScalarAggregate(source, selector, nameof(Enumerable.Average));
protected override ShapedQueryExpression TranslateLeftJoin(ShapedQueryExpression outer, ShapedQueryExpression inner, LambdaExpression outerKeySelector, LambdaExpression innerKeySelector, LambdaExpression resultSelector) { throw new NotImplementedException(); }
protected override ShapedQueryExpression TranslateSelectMany(ShapedQueryExpression source, LambdaExpression selector) => throw new NotImplementedException();
protected override ShapedQueryExpression TranslateLeftJoin(ShapedQueryExpression outer, ShapedQueryExpression inner, LambdaExpression outerKeySelector, LambdaExpression innerKeySelector, LambdaExpression resultSelector) { outerKeySelector = TranslateLambdaExpression(outer, outerKeySelector); innerKeySelector = TranslateLambdaExpression(inner, innerKeySelector); var transparentIdentifierType = TransparentIdentifierFactory.Create( resultSelector.Parameters[0].Type, resultSelector.Parameters[1].Type); ((InMemoryQueryExpression)outer.QueryExpression).AddLeftJoin( (InMemoryQueryExpression)inner.QueryExpression, outerKeySelector, innerKeySelector, transparentIdentifierType); return(TranslateResultSelectorForJoin( outer, resultSelector, MarkShaperNullable(inner.ShaperExpression), transparentIdentifierType)); }
protected override ShapedQueryExpression TranslateGroupJoin(ShapedQueryExpression outer, ShapedQueryExpression inner, LambdaExpression outerKeySelector, LambdaExpression innerKeySelector, LambdaExpression resultSelector) { //var outerSelectExpression = (SelectExpression)outer.QueryExpression; //if (outerSelectExpression.Limit != null // || outerSelectExpression.Offset != null // || outerSelectExpression.IsDistinct) //{ // outerSelectExpression.PushdownIntoSubQuery(); //} //var innerSelectExpression = (SelectExpression)inner.QueryExpression; //if (innerSelectExpression.Orderings.Any() // || innerSelectExpression.Limit != null // || innerSelectExpression.Offset != null // || innerSelectExpression.IsDistinct // || innerSelectExpression.Predicate != null // || innerSelectExpression.Tables.Count > 1) //{ // innerSelectExpression.PushdownIntoSubQuery(); //} //var joinPredicate = CreateJoinPredicate(outer, outerKeySelector, inner, innerKeySelector); //if (joinPredicate != null) //{ // outer = TranslateThenBy(outer, outerKeySelector, true); // var innerTransparentIdentifierType = CreateTransparentIdentifierType( // resultSelector.Parameters[0].Type, // resultSelector.Parameters[1].Type.TryGetSequenceType()); // outerSelectExpression.AddLeftJoin( // innerSelectExpression, joinPredicate, innerTransparentIdentifierType); // return TranslateResultSelectorForGroupJoin( // outer, // inner.ShaperExpression, // outerKeySelector, // innerKeySelector, // resultSelector, // innerTransparentIdentifierType); //} throw new NotImplementedException(); }
protected override ShapedQueryExpression?TranslateDefaultIfEmpty( ShapedQueryExpression source, Expression defaultValue) => null;
protected override ShapedQueryExpression?TranslateDistinct( ShapedQueryExpression source) => null;
protected override ShapedQueryExpression?TranslateCount( ShapedQueryExpression source, LambdaExpression predicate) => null;
protected override ShapedQueryExpression?TranslateContains( ShapedQueryExpression source, Expression item) => null;
protected override ShapedQueryExpression?TranslateConcat( ShapedQueryExpression source1, ShapedQueryExpression source2) => null;
protected override ShapedQueryExpression TranslateElementAtOrDefault(ShapedQueryExpression source, Expression index, bool returnDefault) => throw new NotImplementedException();
protected override ShapedQueryExpression TranslateLeftJoin(ShapedQueryExpression outer, ShapedQueryExpression inner, LambdaExpression outerKeySelector, LambdaExpression innerKeySelector, LambdaExpression resultSelector) { var joinPredicate = CreateJoinPredicate(outer, outerKeySelector, inner, innerKeySelector); if (joinPredicate != null) { var transparentIdentifierType = CreateTransparentIdentifierType( resultSelector.Parameters[0].Type, resultSelector.Parameters[1].Type); ((SelectExpression)outer.QueryExpression).AddLeftJoin( (SelectExpression)inner.QueryExpression, joinPredicate, transparentIdentifierType); return(TranslateResultSelectorForJoin( outer, resultSelector, inner.ShaperExpression, transparentIdentifierType, true)); } throw new NotImplementedException(); }
protected override ShapedQueryExpression TranslateGroupBy(ShapedQueryExpression source, LambdaExpression keySelector, LambdaExpression elementSelector, LambdaExpression resultSelector) => throw new NotImplementedException();
protected override ShapedQueryExpression TranslateUnion(ShapedQueryExpression source1, ShapedQueryExpression source2) { var operand1 = (SelectExpression)source1.QueryExpression; var operand2 = (SelectExpression)source2.QueryExpression; source1.ShaperExpression = operand1.ApplySetOperation(SetOperationType.Union, operand2, source1.ShaperExpression); return(source1); }
protected override ShapedQueryExpression TranslateReverse(ShapedQueryExpression source) => throw new NotImplementedException();
/// <summary> /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// the same compatibility standards as public APIs. It may be changed or removed without notice in /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// </summary> protected override ShapedQueryExpression TranslateContains(ShapedQueryExpression source, Expression item) { throw new NotImplementedException(); }
protected override ShapedQueryExpression TranslateTakeWhile(ShapedQueryExpression source, LambdaExpression predicate) => throw new NotImplementedException();
/// <summary> /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// the same compatibility standards as public APIs. It may be changed or removed without notice in /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// </summary> protected override ShapedQueryExpression TranslateDistinct(ShapedQueryExpression source) { ((SelectExpression)source.QueryExpression).ApplyDistinct(); return(source); }
protected override ShapedQueryExpression TranslateConcat(ShapedQueryExpression source1, ShapedQueryExpression source2) => throw new NotImplementedException();
/// <summary> /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// the same compatibility standards as public APIs. It may be changed or removed without notice in /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// </summary> protected override ShapedQueryExpression TranslateIntersect(ShapedQueryExpression source1, ShapedQueryExpression source2) { throw new NotImplementedException(); }
protected override ShapedQueryExpression TranslateElementAtOrDefault(ShapedQueryExpression source, Expression index, bool returnDefault) => null;
/// <summary> /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// the same compatibility standards as public APIs. It may be changed or removed without notice in /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// </summary> protected override ShapedQueryExpression TranslateSelectMany(ShapedQueryExpression source, LambdaExpression collectionSelector, LambdaExpression resultSelector) { throw new NotImplementedException(); }
protected override ShapedQueryExpression TranslateIntersect(ShapedQueryExpression source1, ShapedQueryExpression source2) => TranslateSetOperation(InMemoryLinqOperatorProvider.Intersect, source1, source2);
protected override ShapedQueryExpression TranslateDefaultIfEmpty(ShapedQueryExpression source, Expression defaultValue) => throw new NotImplementedException();
protected override Expression VisitShapedQuery(ShapedQueryExpression shapedQueryExpression) { Check.NotNull(shapedQueryExpression, nameof(shapedQueryExpression)); var jObjectParameter = Expression.Parameter(typeof(JObject), "jObject"); var shaperBody = shapedQueryExpression.ShaperExpression; shaperBody = new JObjectInjectingExpressionVisitor().Visit(shaperBody); shaperBody = InjectEntityMaterializers(shaperBody); switch (shapedQueryExpression.QueryExpression) { case SelectExpression selectExpression: shaperBody = new CosmosProjectionBindingRemovingExpressionVisitor( selectExpression, jObjectParameter, QueryCompilationContext.QueryTrackingBehavior == QueryTrackingBehavior.TrackAll) .Visit(shaperBody); var shaperLambda = Expression.Lambda( shaperBody, QueryCompilationContext.QueryContextParameter, jObjectParameter); return(Expression.New( typeof(QueryingEnumerable <>).MakeGenericType(shaperLambda.ReturnType).GetConstructors()[0], Expression.Convert( QueryCompilationContext.QueryContextParameter, typeof(CosmosQueryContext)), Expression.Constant(_sqlExpressionFactory), Expression.Constant(_querySqlGeneratorFactory), Expression.Constant(selectExpression), Expression.Constant(shaperLambda.Compile()), Expression.Constant(_contextType), Expression.Constant(_partitionKeyFromExtension, typeof(string)), Expression.Constant( QueryCompilationContext.QueryTrackingBehavior == QueryTrackingBehavior.NoTrackingWithIdentityResolution), Expression.Constant(_threadSafetyChecksEnabled))); case ReadItemExpression readItemExpression: shaperBody = new CosmosProjectionBindingRemovingReadItemExpressionVisitor( readItemExpression, jObjectParameter, QueryCompilationContext.QueryTrackingBehavior == QueryTrackingBehavior.TrackAll) .Visit(shaperBody); var shaperReadItemLambda = Expression.Lambda( shaperBody, QueryCompilationContext.QueryContextParameter, jObjectParameter); return(Expression.New( typeof(ReadItemQueryingEnumerable <>).MakeGenericType(shaperReadItemLambda.ReturnType).GetConstructors()[0], Expression.Convert( QueryCompilationContext.QueryContextParameter, typeof(CosmosQueryContext)), Expression.Constant(readItemExpression), Expression.Constant(shaperReadItemLambda.Compile()), Expression.Constant(_contextType), Expression.Constant( QueryCompilationContext.QueryTrackingBehavior == QueryTrackingBehavior.NoTrackingWithIdentityResolution), Expression.Constant(_threadSafetyChecksEnabled))); default: throw new NotSupportedException(CoreStrings.UnhandledExpressionNode(shapedQueryExpression.QueryExpression)); } }
protected override ShapedQueryExpression?TranslateAverage( ShapedQueryExpression source, LambdaExpression selector, Type resultType) => null;