You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by md...@apache.org on 2011/09/14 15:07:01 UTC

svn commit: r1170592 - in /jackrabbit/sandbox/jackrabbit-mk: jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/ jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/

Author: mduerig
Date: Wed Sep 14 13:07:01 2011
New Revision: 1170592

URL: http://svn.apache.org/viewvc?rev=1170592&view=rev
Log:
Microkernel based Jackrabbit prototype (WIP)  query: cleanup

Modified:
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractRepositoryService.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/QueryInfoImpl.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/QueryProcessor.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractRepositoryService.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractRepositoryService.java?rev=1170592&r1=1170591&r2=1170592&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractRepositoryService.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractRepositoryService.java Wed Sep 14 13:07:01 2011
@@ -309,8 +309,7 @@ public abstract class AbstractRepository
         if (sessionInfo instanceof SessionInfoImpl) {
             return;
         }
-        throw new RepositoryException("SessionInfo not of type "
-                + SessionInfoImpl.class.getName());
+        throw new RepositoryException("SessionInfo not of type " + SessionInfoImpl.class.getName());
     }
 
     //--------------------------< descriptors >---------------------------------

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/QueryInfoImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/QueryInfoImpl.java?rev=1170592&r1=1170591&r2=1170592&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/QueryInfoImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/QueryInfoImpl.java Wed Sep 14 13:07:01 2011
@@ -18,8 +18,6 @@
  */
 package org.apache.jackrabbit.spi2microkernel;
 
-import java.util.ArrayList;
-import javax.jcr.RangeIterator;
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.spi.NodeId;
 import org.apache.jackrabbit.spi.QValue;
@@ -28,16 +26,18 @@ import org.apache.jackrabbit.spi.QueryRe
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.jcr.RangeIterator;
+import java.util.ArrayList;
+
 /**
  * A query result.
  */
 public class QueryInfoImpl implements QueryInfo {
-
-    static final Logger log = LoggerFactory.getLogger(QueryInfoImpl.class);
+    private static final Logger log = LoggerFactory.getLogger(QueryInfoImpl.class);
 
     private final String[] columnNames;
     private final Name[] selectorNames;
-    final ArrayList<QueryResultRow> result = new ArrayList<QueryResultRow>();
+    private final ArrayList<QueryResultRow> result = new ArrayList<QueryResultRow>();
 
     QueryInfoImpl(String[] columnNames, Name[] selectorNames) {
         this.columnNames = columnNames;
@@ -62,7 +62,7 @@ public class QueryInfoImpl implements Qu
     public RangeIterator getRows() {
         return new RangeIterator() {
 
-            int pos = 0;
+            int pos;
 
             @Override
             public long getPosition() {
@@ -98,7 +98,6 @@ public class QueryInfoImpl implements Qu
     }
 
     static class QueryResultRowImpl implements QueryResultRow {
-
         private final NodeId node;
         private final QValue[] values;
 

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/QueryProcessor.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/QueryProcessor.java?rev=1170592&r1=1170591&r2=1170592&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/QueryProcessor.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/QueryProcessor.java Wed Sep 14 13:07:01 2011
@@ -18,19 +18,6 @@
  */
 package org.apache.jackrabbit.spi2microkernel;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.LineNumberReader;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
 import org.apache.jackrabbit.mk.api.MicroKernel;
 import org.apache.jackrabbit.mk.index.Indexer;
 import org.apache.jackrabbit.mk.index.PrefixIndex;
@@ -49,6 +36,20 @@ import org.apache.jackrabbit.spi.commons
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.LineNumberReader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
 /**
  * A tool to run a list of hardcoded queries.
  */
@@ -62,43 +63,47 @@ public class QueryProcessor {
     final IdFactory idFactory;
     final QValueFactory vf;
 
-    private final String QUERY_PLANS = "queryPlans.txt";
+    private static final String QUERY_PLANS = "queryPlans.txt";
     private long lastModified;
 
-    private ArrayList<QueryPlan> queryPlans = new ArrayList<QueryPlan>();
-    private HashMap<String, Index> indexes = new HashMap<String, Index>();
+    private final ArrayList<QueryPlan> queryPlans = new ArrayList<QueryPlan>();
+    private final HashMap<String, Index> indexes = new HashMap<String, Index>();
 
     public QueryProcessor(MicroKernel microKernel, Indexer indexer, RepositoryServiceImpl rep) throws RepositoryException {
         this.rep = rep;
         this.microKernel = microKernel;
         this.indexer = indexer;
-        this.idFactory = rep.getIdFactory();
-        this.vf = rep.getQValueFactory();
+        idFactory = rep.getIdFactory();
+        vf = rep.getQValueFactory();
     }
 
-    public String[] checkQueryStatement(String language, String statement, Map<String, String> namespaces) {
-        log.info("checkQueryStatement " + language + " " + statement);
+    public String[] checkQueryStatement(String language, String statement, Map<String, String> namespaces)
+            throws RepositoryException {
+        
+        log.info("checkQueryStatement " + language + ' ' + statement);
         loadQueryPlans();
         return new String[0];
     }
 
     public QueryInfo executeQuery(SessionInfo sessionInfo, String statement, String language,
-            Map<String, String> namespaces, long limit, long offset, Map<String, QValue> values) throws RepositoryException {
+            Map<String, String> namespaces, long limit, long offset, Map<String, QValue> values)
+            throws RepositoryException {
+        
         loadQueryPlans();
-        log.info("executeQuery " + language + " " + statement);
+        log.info("executeQuery " + language + ' ' + statement);
         for (QueryPlan plan : queryPlans) {
             if (plan.matches(language, statement)) {
                 log.info("using plan " + plan.toString());
                 return plan.execute(sessionInfo);
             }
         }
-        log.warn("unknown query " + language + " " + statement);
+        log.warn("unknown query " + language + ' ' + statement);
         return new QueryInfoImpl(new String[0], new Name[0]);
     }
 
-    private void loadQueryPlans() {
+    private void loadQueryPlans() throws RepositoryException {
         long last = new File(QUERY_PLANS).lastModified();
-        if (queryPlans.size() != 0 && last == lastModified) {
+        if (!queryPlans.isEmpty() && last == lastModified) {
             return;
         }
         queryPlans.clear();
@@ -154,8 +159,8 @@ public class QueryProcessor {
             }
             r.close();
         } catch (IOException e) {
-            e.printStackTrace();
-            log.warn("loadQueryPlans", e);
+            log.warn(e.getMessage(), e);
+            throw new RepositoryException(e.getMessage(), e);
         }
     }
 

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java?rev=1170592&r1=1170591&r2=1170592&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java Wed Sep 14 13:07:01 2011
@@ -112,6 +112,7 @@ import static javax.jcr.Repository.OPTIO
 import static javax.jcr.Repository.OPTION_QUERY_SQL_SUPPORTED;
 import static javax.jcr.Repository.OPTION_UPDATE_MIXIN_NODE_TYPES_SUPPORTED;
 import static javax.jcr.Repository.OPTION_WORKSPACE_MANAGEMENT_SUPPORTED;
+import static javax.jcr.Repository.QUERY_LANGUAGES;
 import static javax.jcr.Repository.QUERY_XPATH_DOC_ORDER;
 import static javax.jcr.Repository.QUERY_XPATH_POS_INDEX;
 import static javax.jcr.Repository.REP_NAME_DESC;
@@ -173,13 +174,22 @@ public class RepositoryServiceImpl exten
             put(QUERY_XPATH_POS_INDEX, FALSE);
             put(LEVEL_1_SUPPORTED, TRUE);
             put(LEVEL_2_SUPPORTED, TRUE);
-            put(OPTION_QUERY_SQL_SUPPORTED, FALSE);
+            put(OPTION_QUERY_SQL_SUPPORTED, TRUE);
+            put(QUERY_LANGUAGES, toQValues(SUPPORTED_LANGUAGES));
         }
         catch (RepositoryException e) {
             throw new IllegalStateException(e); // should not happen
         }
     }};
 
+    private static QValue[] toQValues(String[] strings) throws RepositoryException { // fixme generalize to array map
+        QValue[] qValues = new QValue[strings.length];
+        for (int k = 0; k < strings.length; k++) {
+            qValues[k] = Values.objectToValue(strings[k]);
+        }
+        return qValues;
+    }
+
     private final MicroKernel microKernel;
     private final Indexer indexer;
     private final PropertyIndex jcrUuidIndex;
@@ -561,6 +571,32 @@ public class RepositoryServiceImpl exten
         subscription(subscription).dispose();
     }
 
+    //------------------------------------------< Query >---
+
+    @Override
+    public String[] getSupportedQueryLanguages(SessionInfo sessionInfo) throws RepositoryException {
+            checkSessionInfo(sessionInfo);
+
+        return SUPPORTED_LANGUAGES;
+    }
+
+    @Override
+    public String[] checkQueryStatement(SessionInfo sessionInfo, String statement,
+            String language, Map<String, String> namespaces) throws InvalidQueryException, RepositoryException {
+
+        checkSessionInfo(sessionInfo);
+        return queryProcessor.checkQueryStatement(statement, language, namespaces);
+    }
+
+    @Override
+    public QueryInfo executeQuery(SessionInfo sessionInfo, String statement,
+            String language, Map<String, String> namespaces, long limit, long offset, Map<String, QValue> values)
+            throws RepositoryException {
+        
+        checkSessionInfo(sessionInfo);
+        return queryProcessor.executeQuery(sessionInfo, statement, language, namespaces, limit, offset, values);
+    }
+
     //------------------------------------------< private >---
 
     private Path getPath(ItemId itemId, String wspName) throws RepositoryException {
@@ -868,26 +904,4 @@ public class RepositoryServiceImpl exten
         }
     }
 
-
-    public String[] getSupportedQueryLanguages(SessionInfo sessionInfo) throws RepositoryException {
-        checkSessionInfo(sessionInfo);
-        return SUPPORTED_LANGUAGES;
-        // throw new UnsupportedRepositoryOperationException();
-    }
-
-    public String[] checkQueryStatement(SessionInfo sessionInfo, String statement,
-                                    String language, Map<String, String> namespaces) throws
-            InvalidQueryException, RepositoryException {
-        checkSessionInfo(sessionInfo);
-        return queryProcessor.checkQueryStatement(statement, language, namespaces);
-    }
-
-    public QueryInfo executeQuery(SessionInfo sessionInfo, String statement,
-                                  String language, Map<String, String> namespaces, long limit,
-                                  long offset, Map<String, QValue> values) throws RepositoryException {
-        checkSessionInfo(sessionInfo);
-        return queryProcessor.executeQuery(sessionInfo, statement, language, namespaces, limit,
-                                  offset, values);
-    }
-
 }