You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by al...@apache.org on 2014/05/26 13:49:07 UTC

svn commit: r1597569 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexQueryTest.java

Author: alexparvulescu
Date: Mon May 26 11:49:06 2014
New Revision: 1597569

URL: http://svn.apache.org/r1597569
Log:
OAK-1829 IllegalStateException while trying retrieve rows information from QueryResult

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexQueryTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java?rev=1597569&r1=1597568&r2=1597569&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java Mon May 26 11:49:06 2014
@@ -27,7 +27,11 @@ import org.apache.jackrabbit.oak.api.Pro
 import org.apache.jackrabbit.oak.query.index.FilterImpl;
 import org.apache.jackrabbit.oak.spi.query.PropertyValues;
 
+import com.google.common.base.Function;
+
+import static com.google.common.collect.Iterables.transform;
 import static org.apache.jackrabbit.oak.api.Type.STRING;
+import static org.apache.jackrabbit.oak.api.Type.STRINGS;
 
 /**
  * The function "lower(..)".
@@ -70,11 +74,20 @@ public class LowerCaseImpl extends Dynam
         if (p == null) {
             return null;
         }
-        // TODO what is the expected result of LOWER(x) for an array property?
-        // currently throws an exception
-        String value = p.getValue(STRING);
         // TODO toLowerCase(): document the Turkish locale problem
-        return PropertyValues.newString(value.toLowerCase());
+        if (p.getType().isArray()) {
+            Iterable<String> lowerCase = transform(p.getValue(STRINGS),
+                    new Function<String, String>() {
+                        @Override
+                        public String apply(String input) {
+                            return input.toLowerCase();
+                        }
+                    });
+            return PropertyValues.newString(lowerCase);
+        } else {
+            String value = p.getValue(STRING);
+            return PropertyValues.newString(value.toLowerCase());
+        }
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexQueryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexQueryTest.java?rev=1597569&r1=1597568&r2=1597569&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexQueryTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexQueryTest.java Mon May 26 11:49:06 2014
@@ -349,4 +349,14 @@ public class TraversingIndexQueryTest ex
         assertQuery("//*[*/@d < 3]", "xpath", Arrays.asList("/content"));
     }
 
+    @Test
+    public void testLowercaseOnArrays() throws Exception {
+        // OAK-1829
+        Tree content = root.getTree("/").addChild("content");
+        content.setProperty("array", Arrays.asList("X", "Y"), Type.STRINGS);
+        root.commit();
+        assertQuery("//*[jcr:like(fn:lower-case(@array), '%x%')]", "xpath",
+                Arrays.asList("/content"));
+    }
+
 }



Re: svn commit: r1597569 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexQueryTest.java

Posted by Alex Parvulescu <al...@gmail.com>.
This specific issue is about the IllegalStateException, so I would prefer
to not mix stuff.

I left the TODO about the locale in the code, so when OAK-260 gets fixed,
the fix it will probably get applied to both the old code and the new code.

alex




On Mon, May 26, 2014 at 1:56 PM, Chetan Mehrotra
<ch...@gmail.com>wrote:

> On Mon, May 26, 2014 at 5:19 PM,  <al...@apache.org> wrote:
> > +                        public String apply(String input) {
> > +                            return input.toLowerCase();
> > +                        }
>
> Do we need to take care of Turkish locale bug (OAK-260) and specify
> locale here also?
>
> Chetan Mehrotra
>

Re: svn commit: r1597569 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexQueryTest.java

Posted by Chetan Mehrotra <ch...@gmail.com>.
On Mon, May 26, 2014 at 5:19 PM,  <al...@apache.org> wrote:
> +                        public String apply(String input) {
> +                            return input.toLowerCase();
> +                        }

Do we need to take care of Turkish locale bug (OAK-260) and specify
locale here also?

Chetan Mehrotra