public void RebindElasticFieldsToHitProperties() { var source = new FakeQuery <Sample>(new FakeQueryProvider()).Select(f => ElasticFields.Score); var rebound = ElasticFieldsProjectionExpressionVisitor.Rebind(hitParameter, "prefix", validMapping, source.Expression); var flattened = FlatteningExpressionVisitor.Flatten(rebound); Assert.Single(flattened.OfType <MemberExpression>(), e => e.Expression == hitParameter && e.Member.Name == "_score"); }
public void RebindElasticFieldsToHitProperties() { var source = new FakeQuery <Sample>(new FakeQueryProvider()).Select(f => ElasticFields.Score); var rebound = ElasticFieldsExpressionVisitor.Rebind(typeof(Sample), validMapping, source.Expression); var flattened = FlatteningExpressionVisitor.Flatten(rebound.Item1); Assert.Single(flattened.OfType <MemberExpression>(), e => e.Expression == rebound.Item2 && e.Member.Name == "_score"); }
public void RebindTupleCreateMethodElasticFieldsToHitProperties() { var source = new FakeQuery <Sample>(new FakeQueryProvider()).Select(f => Tuple.Create(ElasticFields.Score)); var rebound = ElasticFieldsExpressionVisitor.Rebind("prefix", validMapping, source.Expression); var flattened = FlatteningExpressionVisitor.Flatten(rebound.Item1); Assert.Single(flattened.OfType <MemberExpression>(), e => e.Expression == rebound.Item2 && e.Member.Name == "_score"); Assert.Contains(rebound.Item2, flattened); }
public void EvaluateReplacesExpressionsWithConstantExpressions() { Expression <Func <DateTime> > call = () => DateTime.Now.Subtract(TimeSpan.FromHours(5)); var nodeToEvaluate = FlatteningExpressionVisitor.Flatten(call).OfType <MethodCallExpression>().Single(s => s.Method.Name == "FromHours"); var evaluation = EvaluatingExpressionVisitor.Evaluate(call, new HashSet <Expression>(new[] { nodeToEvaluate })); var constantNodes = FlatteningExpressionVisitor.Flatten(evaluation).OfType <ConstantExpression>().ToArray(); Assert.Equal(1, constantNodes.Length); Assert.Equal(TimeSpan.FromHours(5), constantNodes.Single().Value); }
public void RebindWithNonElasticMemberIsUnchanged() { var source = new FakeQuery <Sample>(new FakeQueryProvider()).Select(f => f.Name); var rebound = ElasticFieldsProjectionExpressionVisitor.Rebind(hitParameter, "prefix", validMapping, source.Expression); var memberExpression = FlatteningExpressionVisitor.Flatten(rebound).OfType <MemberExpression>().FirstOrDefault(); Assert.NotNull(memberExpression); Assert.Equal(memberExpression.Member.Name, "Name"); Assert.IsAssignableFrom <ParameterExpression>(memberExpression.Expression); Assert.Equal("f", ((ParameterExpression)memberExpression.Expression).Name); }
public void RebindAnonymousProjectionEntityAndElasticFieldsToMaterializationAndHitProperty() { var source = new FakeQuery <Sample>(new FakeQueryProvider()).Select(f => new { f, ElasticFields.Score }); var rebound = ElasticFieldsProjectionExpressionVisitor.Rebind(hitParameter, "prefix", validMapping, source.Expression); var flattened = FlatteningExpressionVisitor.Flatten(rebound); Assert.Single(flattened.OfType <MemberExpression>(), m => m.Expression == hitParameter && m.Member.Name == "_score"); Assert.Contains(hitParameter, flattened); var entityParameter = flattened.OfType <ParameterExpression>().FirstOrDefault(p => p.Name == "f" && p.Type == typeof(Sample)); Assert.NotNull(entityParameter); Assert.Single(flattened.OfType <NewExpression>(), e => e.Arguments.Contains(entityParameter)); }
public void RebindTupleCreateMethodEntityAndElasticFieldsToMaterializationAndHitProperty() { var source = new FakeQuery <Sample>(new FakeQueryProvider()).Select(f => Tuple.Create(ElasticFields.Id, f)); var rebound = ElasticFieldsExpressionVisitor.Rebind("prefix", validMapping, source.Expression); var flattened = FlatteningExpressionVisitor.Flatten(rebound.Item1); Assert.Single(flattened.OfType <MemberExpression>(), e => e.Expression == rebound.Item2 && e.Member.Name == "_id"); Assert.Contains(rebound.Item2, flattened); var entityParameter = flattened.OfType <ParameterExpression>().FirstOrDefault(p => p.Name == "f" && p.Type == typeof(Sample)); Assert.NotNull(entityParameter); Assert.Single(flattened.OfType <MethodCallExpression>(), e => e.Arguments.Contains(entityParameter)); }