예제 #1
0
 private ProjectionExpression Translate(Expression expression)
 {
     expression = Evaluator.PartialEval(expression, CanBeEvaluatedLocally);
     expression = QueryBinder.Bind(this, expression);
     expression = SubstringExpressionRewriter.Rewrite(expression);
     expression = SubstringEmptyClauseRemover.Rewrite(expression);
     expression = BinaryExpressionRewriter.Rewrite(expression);
     expression = AttributeComparisonReorderingRewriter.Rewrite(expression);
     expression = NullComparisonRewriter.Rewrite(expression);
     expression = AndOrExpressionCollector.Rewrite(expression);
     expression = RedundantExpressionRemover.Rewrite(expression);
     return((ProjectionExpression)expression);
 }
예제 #2
0
        public void empty_string_with_no_wildcard_doesnt_become_constant()
        {
            // Arrange
            string     value     = string.Empty;
            var        substring = CreateSubstring(value, false, false);
            Expression result;

            // Act
            result = SubstringEmptyClauseRemover.Rewrite(substring);

            // Assert
            Assert.IsFalse(result.IsConstant(value));
        }
예제 #3
0
        public void single_string_with_no_wildcard_becomes_constant()
        {
            // Arrange
            string     value     = "X";
            var        substring = CreateSubstring(value, false, false);
            Expression result;

            // Act
            result = SubstringEmptyClauseRemover.Rewrite(substring);

            // Assert
            Assert.IsTrue(result.IsConstant(value));
        }
예제 #4
0
        public void simple_substring_is_unchanged_1()
        {
            // Arrange
            string     value     = "X";
            var        substring = CreateSubstring(value, true, true);
            Expression result;

            // Act
            result = SubstringEmptyClauseRemover.Rewrite(substring);

            // Assert
            Assert.IsInstanceOfType(result, typeof(SubstringExpression));
            Assert.AreEqual(substring, (SubstringExpression)result);
        }
예제 #5
0
        public void simple_substring_is_unchanged_2()
        {
            // Arrange
            string     value1    = "X";
            string     value2    = "Y";
            string     value3    = "Z";
            var        substring = CreateSubstring(new string[] { value1, value2, value3 }, true, true);
            Expression result;

            // Act
            result = SubstringEmptyClauseRemover.Rewrite(substring);

            // Assert
            Assert.IsInstanceOfType(result, typeof(SubstringExpression));
            //Assert.AreEqual(substring.WildcardAtStart, result.
            Assert.AreEqual(substring, (SubstringExpression)result);
        }
예제 #6
0
        public void empty_string_at_start_is_removed()
        {
            // Arrange
            string              value     = "X";
            var                 substring = CreateSubstring(new string[] { string.Empty, value }, true, true);
            Expression          result;
            SubstringExpression substringResult;

            // Act
            result = SubstringEmptyClauseRemover.Rewrite(substring);

            // Assert
            Assert.IsInstanceOfType(result, typeof(SubstringExpression));
            substringResult = (SubstringExpression)result;
            Assert.AreEqual(1, substringResult.Parts.Count);
            Assert.IsTrue(substringResult.Parts[0].IsConstant(value));
            Assert.AreEqual(true, substringResult.WildcardAtStart);
        }
예제 #7
0
        public void empty_strings_in_middle_are_removed()
        {
            // Arrange
            string[]            strings   = { "X", string.Empty, "Y", string.Empty, string.Empty, "Z" };
            var                 substring = CreateSubstring(strings, true, true);
            Expression          result;
            SubstringExpression substringResult;

            // Act
            result = SubstringEmptyClauseRemover.Rewrite(substring);

            // Assert
            Assert.IsInstanceOfType(result, typeof(SubstringExpression));
            substringResult = (SubstringExpression)result;
            Assert.AreEqual(3, substringResult.Parts.Count);
            Assert.IsTrue(substringResult.Parts[0].IsConstant("X"));
            Assert.IsTrue(substringResult.Parts[1].IsConstant("Y"));
            Assert.IsTrue(substringResult.Parts[2].IsConstant("Z"));
        }
예제 #8
0
        public void null_strings_treated_the_same()
        {
            // Arrange
            string              value1    = "X";
            string              value2    = "Y";
            var                 substring = CreateSubstring(new string[] { value1, null, value2 }, true, true);
            Expression          result;
            SubstringExpression substringResult;

            // Act
            result = SubstringEmptyClauseRemover.Rewrite(substring);

            // Assert
            Assert.IsInstanceOfType(result, typeof(SubstringExpression));
            substringResult = (SubstringExpression)result;
            Assert.AreEqual(2, substringResult.Parts.Count);
            Assert.IsTrue(substringResult.Parts[0].IsConstant(value1));
            Assert.IsTrue(substringResult.Parts[1].IsConstant(value2));
        }