chemistry-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From j...@apache.org
Subject svn commit: r1782965 - in /chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src: main/java/org/apache/chemistry/opencmis/inmemory/types/ test/java/org/apache/chemistry/opencmis/inmemory/query/
Date Tue, 14 Feb 2017 13:51:54 GMT
Author: jens
Date: Tue Feb 14 13:51:53 2017
New Revision: 1782965

URL: http://svn.apache.org/viewvc?rev=1782965&view=rev
Log:
InMemory server process queries according to CMIS-1012
Fix bug: https://issues.apache.org/jira/browse/CMIS-1012

Modified:
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/EvalQueryTest.java
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTypesTest.java

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java?rev=1782965&r1=1782964&r2=1782965&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java
(original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java
Tue Feb 14 13:51:53 2017
@@ -270,7 +270,7 @@ public final class PropertyCreationHelpe
         return props;
     }
 
-    public static Properties getPropertiesFromObject(StoredObject so, ObjectStore objectStore,
+    public static Properties getPropertiesFromObject(TypeManager tm, StoredObject so, ObjectStore
objectStore,
             TypeDefinition primaryType, List<TypeDefinition> secondaryTypes, Map<String,
String> requestedIds,
             Map<String, String> requestedFuncs) {
         // build properties collection
@@ -347,6 +347,20 @@ public final class PropertyCreationHelpe
                 }
             }
         }
+        
+        // add secondary properties that are not part of a JOIN in a query, e.g.
+        // SELECT cmis:name, mySecondaryProp FROM cmis:document ...
+        // we do not have an exact type definition in this case mySecondaryProp can be part
of multiple
+        // type definitions, take the first one found.
+        if (!requestedIds.containsValue("*")) {
+			for (Map.Entry<String, String> prop : requestedIds.entrySet()) {
+				if (!mappedProperties.containsKey(prop.getValue())) {
+					PropertyData<?> pd = properties.get(prop.getValue());
+					TypeDefinition typeDef = findFirstTypeDefHavingProperty(tm, so, pd);
+					addPropertyToMap(mappedProperties, typeDef, pd, prop.getKey());
+				}
+			}
+        }
 
         // add functions:
         for (Entry<String, String> funcEntry : requestedFuncs.entrySet()) {
@@ -372,7 +386,19 @@ public final class PropertyCreationHelpe
         return props;
     }
 
-    private static void addNotSetPropertyToMap(Map<String, PropertyData<?>> mappedProperties,
TypeDefinition typeDef,
+    private static TypeDefinition findFirstTypeDefHavingProperty(TypeManager tm, StoredObject
so, PropertyData<?> pd) {
+    	List<String> typeIds = so.getSecondaryTypeIds();
+    	for (String typeId : typeIds) {
+    		TypeDefinition typeDef = tm.getTypeById(typeId).getTypeDefinition();
+    		Map<String, PropertyDefinition<?>> propMap = typeDef.getPropertyDefinitions();
+    		if (propMap.containsKey(pd.getId())) {
+    			return typeDef;
+    		}
+    	}
+		return null;
+	}
+
+	private static void addNotSetPropertyToMap(Map<String, PropertyData<?>> mappedProperties,
TypeDefinition typeDef,
             String propId, String queryNameOrAlias) {
         PropertyDefinition<?> propDef = typeDef.getPropertyDefinitions().get(propId);
         if (null != propDef) {
@@ -468,7 +494,7 @@ public final class PropertyCreationHelpe
         ObjectDataImpl od = new ObjectDataImpl();
 
         // build properties collection
-        Properties props = getPropertiesFromObject(so, objectStore, primaryType, secondaryTypes,
requestedProperties,
+        Properties props = getPropertiesFromObject(tm, so, objectStore, primaryType, secondaryTypes,
requestedProperties,
                 requestedFuncs);
 
         // fill output object

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/EvalQueryTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/EvalQueryTest.java?rev=1782965&r1=1782964&r2=1782965&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/EvalQueryTest.java
(original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/EvalQueryTest.java
Tue Feb 14 13:51:53 2017
@@ -1099,7 +1099,23 @@ public class EvalQueryTest extends Abstr
 
         log.debug("...Stop testSecondaryJoin.");
     }
-
+    
+    @Test
+    public void testAskForSecondaryPropertyOnSimpleQuery() {
+        log.debug("Start testAskForSecondaryPropertyOnSimpleQuery...");
+        dataCreator.createSecondaryTestDocuments();
+        String statement = "SELECT cmis:name, cmis:objectId, " + UnitTestTypeSystemCreator.SECONDARY_INTEGER_PROP
+        		+ " AS SecInt, " + UnitTestTypeSystemCreator.SECONDARY_STRING_PROP + " FROM " +
COMPLEX_TYPE + 
+        		" WHERE cmis:name LIKE 'docwithsecondary%'";
+        ObjectList res = doQuery(statement);
+        assertEquals(2, res.getObjects().size());
+        assertTrue(resultContainsProperty(PropertyIds.NAME, res));
+        assertTrue(resultContainsProperty(PropertyIds.OBJECT_ID, res));
+        assertTrue(resultContainsProperty(UnitTestTypeSystemCreator.SECONDARY_STRING_PROP,
res));
+        assertTrue(resultContainsQueryName("SecInt", res));
+        log.debug("...Stop testAskForSecondaryPropertyOnSimpleQuery.");
+    }
+    
     @Test
     public void testMultipleContains() {
         log.debug("Start testMultipleContains...");
@@ -1201,5 +1217,16 @@ public class EvalQueryTest extends Abstr
         }
         return true;
     }
+    
+    private static boolean resultContainsQueryName(String queryName, ObjectList results)
{
+        for (ObjectData od : results.getObjects()) {
+        	for (PropertyData<?> propData : od.getProperties().getProperties().values())
{
+        		if (queryName.equals(propData.getQueryName())) {
+        			return true;
+        		}
+        	}
+        }
+        return false;
+    }
 
 }

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTypesTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTypesTest.java?rev=1782965&r1=1782964&r2=1782965&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTypesTest.java
(original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTypesTest.java
Tue Feb 14 13:51:53 2017
@@ -127,14 +127,22 @@ public class QueryTypesTest extends Abst
     }
 
     @Test
-    public void resolveTypesTest7() {
+    public void resolveTypesTest7() throws Exception {
         String statement = "SELECT UnknownProperty FROM BookType WHERE ISBN = '100'";
-        try {
-            verifyResolveSelect(statement);
-            fail("Select of unknown property in type should fail.");
-        } catch (Exception e) {
-            assertTrue(e instanceof CmisInvalidArgumentException);
-            assertTrue(e.toString().contains("is not a property query name in any"));
+
+        CmisQueryWalker walker = getWalker(statement);
+        assertNotNull(queryObj);
+        assertNotNull(walker);
+        Map<String, String> types = queryObj.getTypes();
+        assertTrue(1 == types.size());
+        List<CmisSelector> selects = queryObj.getSelectReferences();
+        assertTrue(1 == selects.size());
+        for (CmisSelector select : selects) {
+            assertTrue(select instanceof ColumnReference);
+            ColumnReference colRef = ((ColumnReference) select);
+            assertTrue(null == colRef.getTypeDefinition());
+            assertTrue(colRef.getPropertyQueryName().equals("UnknownProperty"));
+            assertTrue(null == colRef.getPropertyId());
         }
     }
 



Mime
View raw message