ptupitsyn commented on a change in pull request #8999:
URL: https://github.com/apache/ignite/pull/8999#discussion_r613964196



##########
File path: modules/platforms/dotnet/Apache.Ignite.Linq/Impl/MethodVisitor.cs
##########
@@ -329,6 +331,56 @@ private static void 
AppendAdjustment(CacheQueryExpressionVisitor visitor, int[]
             visitor.Parameters.Add(paramValue);
         }
 
+        /// <summary>
+        /// Get IgnoreCase parameter for string.Compare method
+        /// </summary>
+        /// <param name="expression"></param>
+        /// <returns></returns>
+        private static bool GetStringCompareIgnoreCaseParameter(Expression 
expression)
+        {
+            var constant = expression as ConstantExpression;
+            if (constant != null)
+            {
+                if (constant.Value is bool)
+                {
+                    return (bool)constant.Value;
+                }
+            }
+
+            throw new NotSupportedException(
+                "Parameter 'ignoreCase' from 'string.Compare method should be 
specified as a constant expression");
+        }
+
+        /// <summary>
+        /// Visits string.Compare method
+        /// </summary>
+        /// <param name="expression"></param>
+        /// <param name="visitor"></param>
+        private static void VisitStringCompare(MethodCallExpression 
expression, CacheQueryExpressionVisitor visitor, bool ignoreCase)
+        {
+            visitor.ResultBuilder.Append("nvl2(");
+            visitor.Visit(expression.Arguments[1]);
+            visitor.ResultBuilder.Append(", ");
+            visitor.ResultBuilder.Append("casewhen(");
+            if (ignoreCase) visitor.ResultBuilder.Append("lower(");
+            visitor.Visit(expression.Arguments[0]);
+            if (ignoreCase) visitor.ResultBuilder.Append(")");
+            visitor.ResultBuilder.Append(" = ");
+            if (ignoreCase) visitor.ResultBuilder.Append("lower(");
+            visitor.Visit(expression.Arguments[1]);
+            if (ignoreCase) visitor.ResultBuilder.Append(")");
+            visitor.ResultBuilder.Append(", 0, casewhen(");
+            if (ignoreCase) visitor.ResultBuilder.Append("lower(");
+            visitor.Visit(expression.Arguments[0]);
+            if (ignoreCase) visitor.ResultBuilder.Append(")");
+            visitor.ResultBuilder.Append(" >= ");
+            if (ignoreCase) visitor.ResultBuilder.Append("lower(");
+            visitor.Visit(expression.Arguments[1]);
+            if (ignoreCase) visitor.ResultBuilder.Append(")");
+            visitor.ResultBuilder.Append(", 1, -1))");
+            visitor.ResultBuilder.Append(", 1)");
+        }
+

Review comment:
       I tried to make this a bit easier to read:
   
   ```suggestion
               // Ex: nvl2(?, casewhen(_T0.NAME = ?, 0, casewhen(_T0.NAME >= ?, 
1, -1)), 1)
               visitor.ResultBuilder.Append("nvl2(");
               visitor.Visit(expression.Arguments[1]);
               visitor.ResultBuilder.Append(", casewhen(");
               VisitArg(visitor, expression, 0, ignoreCase);
               visitor.ResultBuilder.Append(" = ");
               VisitArg(visitor, expression, 1, ignoreCase);
               visitor.ResultBuilder.Append(", 0, casewhen(");
               VisitArg(visitor, expression, 0, ignoreCase);
               visitor.ResultBuilder.Append(" >= ");
               VisitArg(visitor, expression, 1, ignoreCase);
               visitor.ResultBuilder.Append(", 1, -1)), 1)");
           }
   
           /// <summary>
           /// Visits member expression argument.
           /// </summary>
           private static void VisitArg(CacheQueryExpressionVisitor visitor, 
MethodCallExpression expression, int idx,
               bool lower)
           {
               if (lower)
                   visitor.ResultBuilder.Append("lower(");
   
               visitor.Visit(expression.Arguments[idx]);
   
               if (lower)
                   visitor.ResultBuilder.Append(")");
           }
   
   ```




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to