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 ju...@apache.org on 2013/05/22 09:14:35 UTC

svn commit: r1485097 - in /jackrabbit/oak/trunk/oak-jcr/src: main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java

Author: jukka
Date: Wed May 22 07:14:35 2013
New Revision: 1485097

URL: http://svn.apache.org/r1485097
Log:
OAK-510: Multivalued properties with array size 0 forget their type

Default to string when no other type hints are available

Modified:
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java?rev=1485097&r1=1485096&r2=1485097&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java Wed May 22 07:14:35 2013
@@ -430,8 +430,12 @@ abstract class ItemImpl<T extends ItemDe
         Value[] nonNullValues = compact(values);
         int targetType = getType(definition, type);
         if (nonNullValues.length == 0) {
+            if (targetType == PropertyType.UNDEFINED) {
+                // default to string when no other type hints are available
+                targetType = PropertyType.STRING;
+            }
             return MemoryPropertyBuilder
-                    .array(Type.fromTag(type, false), name)
+                    .array(Type.fromTag(targetType, false), name)
                     .getPropertyState();
         } else if (targetType == type) {
             return PropertyStates.createProperty(name, Arrays.asList(nonNullValues));

Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java?rev=1485097&r1=1485096&r2=1485097&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java Wed May 22 07:14:35 2013
@@ -787,6 +787,26 @@ public class RepositoryTest extends Abst
     }
 
     @Test
+    public void addEmptyMultiValue() throws RepositoryException {
+        Node parentNode = getNode(TEST_PATH);
+        Value[] values = new Value[0];
+
+        parentNode.setProperty("multi value", values);
+        parentNode.getSession().save();
+
+        Session session2 = createAnonymousSession();
+        try {
+            Property property = session2.getProperty(TEST_PATH + "/multi value");
+            assertTrue(property.isMultiple());
+            assertEquals(PropertyType.STRING, property.getType());
+            Value[] values2 = property.getValues();
+            assertEquals(0, values2.length);
+        } finally {
+            session2.logout();
+        }
+    }
+
+    @Test
     public void addEmptyMultiValueName() throws RepositoryException {
         Node parentNode = getNode(TEST_PATH);
         Value[] values = new Value[0];