You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by je...@apache.org on 2013/02/10 19:30:19 UTC

svn commit: r1444580 - in /chemistry/opencmis/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src: main/java/org/apache/chemistry/opencmis/query/example/ test/java/org/apache/chemistry/opencmis/query/example/

Author: jens
Date: Sun Feb 10 18:30:19 2013
New Revision: 1444580

URL: http://svn.apache.org/r1444580
Log:
Query Parser example: add support for ORDER BY

Modified:
    chemistry/opencmis/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/main/java/org/apache/chemistry/opencmis/query/example/ExampleQueryProcessor.java
    chemistry/opencmis/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/test/java/org/apache/chemistry/opencmis/query/example/ExampleQueryProcessorTest.java

Modified: chemistry/opencmis/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/main/java/org/apache/chemistry/opencmis/query/example/ExampleQueryProcessor.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/main/java/org/apache/chemistry/opencmis/query/example/ExampleQueryProcessor.java?rev=1444580&r1=1444579&r2=1444580&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/main/java/org/apache/chemistry/opencmis/query/example/ExampleQueryProcessor.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/main/java/org/apache/chemistry/opencmis/query/example/ExampleQueryProcessor.java Sun Feb 10 18:30:19 2013
@@ -27,6 +27,7 @@ import org.apache.chemistry.opencmis.ser
 import org.apache.chemistry.opencmis.server.support.query.CmisSelector;
 import org.apache.chemistry.opencmis.server.support.query.FunctionReference;
 import org.apache.chemistry.opencmis.server.support.query.QueryObject;
+import org.apache.chemistry.opencmis.server.support.query.QueryObject.SortSpec;
 import org.apache.chemistry.opencmis.server.support.query.QueryUtilStrict;
 
 public class ExampleQueryProcessor {
@@ -56,6 +57,7 @@ public class ExampleQueryProcessor {
             
             String whereClause = walker.getResult();
             generatedResponse.append(whereClause);
+            generatedResponse.append(getOrderBy(qo));
             
             return generatedResponse.toString();
             
@@ -78,14 +80,7 @@ public class ExampleQueryProcessor {
             } else 
                 result.append(", ");
 
-            result.append(sel.getName());
-            if (sel instanceof FunctionReference)
-                result.append("()");
-            
-            if (null != sel.getAliasName()) {
-                result.append(" AS ");
-                result.append(sel.getAliasName());
-            }                
+            appendSelector(result, sel);                
         }
         
         result.append(" FROM");
@@ -102,4 +97,38 @@ public class ExampleQueryProcessor {
         result.append(" ");
         return result.toString();
     }
+
+    private void appendSelector(StringBuffer result, CmisSelector sel) {
+        result.append(sel.getName());
+        if (sel instanceof FunctionReference)
+            result.append("()");
+        
+        if (null != sel.getAliasName()) {
+            result.append(" AS ");
+            result.append(sel.getAliasName());
+        }
+    }
+    
+    private String getOrderBy(QueryObject qo) {
+        List<SortSpec> orderBys = qo.getOrderBys();
+        if (null == orderBys || orderBys.size() == 0) 
+            return "";
+        
+        StringBuffer result = new StringBuffer();
+        result.append(" ORDER BY");
+        boolean first = true;
+        for (SortSpec sp : orderBys) {
+            if (first) {
+                first = false;
+                result.append(" ");
+            } else 
+                result.append(", ");
+
+            CmisSelector sel = sp.getSelector();
+            appendSelector(result, sel);
+            if (!sp.ascending)
+                result.append(" DESC");
+        }
+        return result.toString();
+    }
 }

Modified: chemistry/opencmis/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/test/java/org/apache/chemistry/opencmis/query/example/ExampleQueryProcessorTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/test/java/org/apache/chemistry/opencmis/query/example/ExampleQueryProcessorTest.java?rev=1444580&r1=1444579&r2=1444580&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/test/java/org/apache/chemistry/opencmis/query/example/ExampleQueryProcessorTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/src/test/java/org/apache/chemistry/opencmis/query/example/ExampleQueryProcessorTest.java Sun Feb 10 18:30:19 2013
@@ -262,4 +262,16 @@ public class ExampleQueryProcessorTest {
         assertEquals(expected, response);        
     }
 
+    @Test 
+    public void testOrderBy() {
+        String queryString = queryPrefix + "cmis:name = 'MyDocument' ORDER BY cmis:objectId";
+        String response = queryProcessor.parseQuery(queryString);
+        String expected = expectedPrefix + "(cmis:name = 'MyDocument') ORDER BY cmis:objectId";
+        assertEquals(expected, response);
+        
+        queryString = queryPrefix + "cmis:name = 'MyDocument' ORDER BY cmis:name ASC, cmis:objectId DESC";
+        response = queryProcessor.parseQuery(queryString);
+        expected = expectedPrefix + "(cmis:name = 'MyDocument') ORDER BY cmis:name, cmis:objectId DESC";
+        assertEquals(expected, response);
+    }
 }