svn commit: r1303334 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/query/ main/java/org/apache/jackrabbit/oak/query/ast/ test/java/org/apache/jackrabbit/oak/query/

2012-03-21 Thread thomasm
Author: thomasm
Date: Wed Mar 21 09:53:10 2012
New Revision: 1303334

URL: http://svn.apache.org/viewvc?rev=1303334view=rev
Log:
OAK-28 Query implementation (bind variables)

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngine.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Row.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/BindVariableValueImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LengthImpl.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java?rev=1303334r1=130r2=1303334view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 Wed Mar 21 09:53:10 2012
@@ -182,6 +182,7 @@ public class Query {
 
 @Override
 public boolean visit(SelectorImpl node) {
+selectors.add(node);
 node.setQuery(query);
 return true;
 }
@@ -284,18 +285,15 @@ public class Query {
 for (int i = 0, size = orderings.length; i  size; i++) {
 Value a = orderValues[i];
 Value b = orderValues2[i];
-// TODO order by: currently use string compare
-String as = a == null ? null : a.getString();
-String bs = b == null ? null : b.getString();
-if (as == null || bs == null) {
-if (as == bs) {
+if (a == null || b == null) {
+if (a == b) {
 comp = 0;
-} else if (as == null) {
+} else if (a == null) {
 // TODO order by: nulls first, last, low or high?
 comp = 1;
 }
 } else {
-comp = as.compareTo(bs);
+comp = a.compareTo(b);
 }
 if (comp != 0) {
 if (orderings[i].isDescending()) {
@@ -430,4 +428,12 @@ public class Query {
 return offset;
 }
 
+public Value getBindVariableValue(String bindVariableName) {
+Value v = bindVariableMap.get(bindVariableName);
+if (v == null) {
+throw new RuntimeException(Bind variable value not set:  + 
bindVariableName);
+}
+return v;
+}
+
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngine.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngine.java?rev=1303334r1=130r2=1303334view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngine.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngine.java
 Wed Mar 21 09:53:10 2012
@@ -40,7 +40,7 @@ public class QueryEngine {
 return new QueryEngine(mk);
 }
 
-public IteratorRow executeQuery(String language, String query, 
MapString, String bindings) throws ParseException {
+public IteratorRow executeQuery(String language, String query, 
MapString, Value bindings) throws ParseException {
 Query q;
 if (SQL2.equals(language)) {
 q = parserSQL2.parse(query);
@@ -53,8 +53,8 @@ public class QueryEngine {
 }
 q.setMicroKernel(mk);
 if (bindings != null) {
-for (EntryString, String e : bindings.entrySet()) {
-q.bindValue(e.getKey(), vf.createValue(e.getValue()));
+for (EntryString, Value e : bindings.entrySet()) {
+q.bindValue(e.getKey(), e.getValue());
 }
 }
 return q.executeQuery(mk.getHeadRevision());

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Row.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Row.java?rev=1303334r1=130r2=1303334view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Row.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Row.java
 Wed Mar 21 09:53:10 2012
@@ -34,7 +34,7 @@ public class Row implements ComparableR

svn commit: r1303863 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query: ScalarFactory.java ScalarImpl.java ScalarType.java

2012-03-22 Thread thomasm
Author: thomasm
Date: Thu Mar 22 16:04:27 2012
New Revision: 1303863

URL: http://svn.apache.org/viewvc?rev=1303863view=rev
Log:
OAK-33 Values in oak-core (within the query engine)

Added:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ScalarFactory.java
  - copied, changed from r1302981, 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ValueFactory.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ScalarImpl.java
  - copied, changed from r1303394, 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Value.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ScalarType.java
  - copied, changed from r1302981, 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/PropertyType.java

Copied: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ScalarFactory.java
 (from r1302981, 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ValueFactory.java)
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ScalarFactory.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ScalarFactory.javap1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ValueFactory.javar1=1302981r2=1303863rev=1303863view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ValueFactory.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ScalarFactory.java
 Thu Mar 22 16:04:27 2012
@@ -18,30 +18,30 @@ package org.apache.jackrabbit.oak.query;
 
 import java.math.BigDecimal;
 
-public class ValueFactory {
+public class ScalarFactory {
 
-public Value createValue(String value) {
-return new Value(value, PropertyType.STRING);
+public ScalarImpl createValue(String value) {
+return new ScalarImpl(value, ScalarType.STRING);
 }
 
-public Value createValue(BigDecimal value) {
-return new Value(value, PropertyType.DECIMAL);
+public ScalarImpl createValue(BigDecimal value) {
+return new ScalarImpl(value, ScalarType.DECIMAL);
 }
 
-public Value createValue(double value) {
-return new Value(value, PropertyType.DOUBLE);
+public ScalarImpl createValue(double value) {
+return new ScalarImpl(value, ScalarType.DOUBLE);
 }
 
-public Value createValue(long value) {
-return new Value(value, PropertyType.DECIMAL);
+public ScalarImpl createValue(long value) {
+return new ScalarImpl(value, ScalarType.LONG);
 }
 
-public Value createValue(boolean value) {
-return new Value(value, PropertyType.BOOLEAN);
+public ScalarImpl createValue(boolean value) {
+return new ScalarImpl(value, ScalarType.BOOLEAN);
 }
 
-public Value createValue(String value, int type) {
-return new Value(value, type);
+public ScalarImpl createValue(String value, int type) {
+return new ScalarImpl(value, type);
 }
 
 }

Copied: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ScalarImpl.java
 (from r1303394, 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Value.java)
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ScalarImpl.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ScalarImpl.javap1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Value.javar1=1303394r2=1303863rev=1303863view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Value.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ScalarImpl.java
 Thu Mar 22 16:04:27 2012
@@ -16,17 +16,14 @@
  */
 package org.apache.jackrabbit.oak.query;
 
-import java.io.InputStream;
 import java.math.BigDecimal;
 
-import org.apache.jackrabbit.oak.api.Scalar;
-
-public class Value implements Scalar, ComparableValue {
+public class ScalarImpl implements ComparableScalarImpl {
 
 private final Object value;
 private final int type;
 
-public Value(Object value, int type) {
+public ScalarImpl(Object value, int type) {
 this.value = value;
 this.type = type;
 }
@@ -64,10 +61,6 @@ public class Value implements Scalar, Co
 return value.toString();
 }
 
-public InputStream getInputStream() {
-throw new UnsupportedOperationException(); // TODO
-}
-
 public String getDate() {
 // TODO convert?
 return value.toString();
@@ -83,15 +76,15 @@ public class Value implements Scalar, Co

svn commit: r1325270 - /jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/blobs/DbBlobStoreTest.java

2012-04-12 Thread thomasm
Author: thomasm
Date: Thu Apr 12 14:08:56 2012
New Revision: 1325270

URL: http://svn.apache.org/viewvc?rev=1325270view=rev
Log:
OAK-58 connection leak in test case
OAK-60 occasional test case failure DbBlobStoreTest#testGarbageCollection

Modified:

jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/blobs/DbBlobStoreTest.java

Modified: 
jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/blobs/DbBlobStoreTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/blobs/DbBlobStoreTest.java?rev=1325270r1=1325269r2=1325270view=diff
==
--- 
jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/blobs/DbBlobStoreTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/blobs/DbBlobStoreTest.java
 Thu Apr 12 14:08:56 2012
@@ -44,10 +44,11 @@ public class DbBlobStoreTest extends Tes
 
 protected AbstractBlobStore store;
 private Connection sentinel;
+private JdbcConnectionPool cp;
 
 public void setUp() throws Exception {
 Class.forName(org.h2.Driver);
-JdbcConnectionPool cp = JdbcConnectionPool.create(jdbc:h2:mem:, , 
);
+cp = JdbcConnectionPool.create(jdbc:h2:mem:, , );
 sentinel = cp.getConnection();
 DbBlobStore blobStore = new DbBlobStore();
 blobStore.setConnectionPool(cp);
@@ -61,6 +62,7 @@ public class DbBlobStoreTest extends Tes
 sentinel.close();
 }
 store.close();
+cp.dispose();
 }
 
 public void testAddFile() throws Exception {
@@ -213,10 +215,11 @@ public class DbBlobStoreTest extends Tes
 store.clearCache();
 
 // https://issues.apache.org/jira/browse/OAK-60
+// endure there is at least one old entry (with age 1 ms)
 try {
 Thread.sleep(1);
 } catch (InterruptedException e) {
-
+// ignore
 }
 
 store.startMark();




svn commit: r1325841 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java test/resources/org/apache/jackrabbit/oak/query/queryXpathTest.txt

2012-04-13 Thread thomasm
Author: thomasm
Date: Fri Apr 13 16:53:28 2012
New Revision: 1325841

URL: http://svn.apache.org/viewvc?rev=1325841view=rev
Log:
OAK-36 Implement a query parser (XPath to SQL-2 converter)

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryXpathTest.txt

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java?rev=1325841r1=1325840r2=1325841view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java
 Fri Apr 13 16:53:28 2012
@@ -56,6 +56,10 @@ public class XPathToSQL2Converter {
  * @throws ParseException if parsing fails
  */
 public String convert(String query) throws ParseException {
+// TODO verify this is correct
+if (!query.startsWith(/)) {
+query = /jcr:root/ + query;
+}
 initialize(query);
 expected = new ArrayListString();
 read();
@@ -126,15 +130,10 @@ public class XPathToSQL2Converter {
 }
 if (path.isEmpty()) {
 // no condition
-} else if (path.equals(%)) {
-// ignore
 } else {
 if (descendants) {
-Function f1 = new Function(issamenode);
-f1.params.add(Literal.newString(path));
-Function f2 = new Function(isdescendantnode);
-f2.params.add(Literal.newString(path));
-Condition c = new Condition(f1, or, f2);
+Function c = new Function(isdescendantnode);
+c.params.add(Literal.newString(path));
 condition = add(condition, c);
 } else if (children) {
 Function f = new Function(ischildnode);

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryXpathTest.txt
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryXpathTest.txt?rev=1325841r1=1325840r2=1325841view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryXpathTest.txt
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryXpathTest.txt
 Fri Apr 13 16:53:28 2012
@@ -3,53 +3,71 @@
 # * lines starting with xpath are xpath queries, followed by expected sql2 
query
 # * use ascii character only
 
-xpath /jcr:root//*[jcr:contains(., 'test')] order by @jcr:score
-select * from [nt:base] where contains(*, 'test') and (issamenode('/') or 
isdescendantnode('/')) order by [jcr:score]
+xpath //*[@name='Hello']
+select * from [nt:base] where [name] = 'Hello'
 
-xpath /jcr:root//element(*, test)
-select * from [test] where issamenode('/') or isdescendantnode('/')
+xpath /jcr:root//*[@name='Hello']
+select * from [nt:base] where ([name] = 'Hello') and isdescendantnode('/')
+
+xpath content/*
+select * from [nt:base] where ischildnode('/content')
+
+xpath content//*
+select * from [nt:base] where isdescendantnode('/content')
+
+xpath content//*[@name='Hello']
+select * from [nt:base] where ([name] = 'Hello') and 
isdescendantnode('/content')
+
+xpath /jcr:root/content//*[@name='Hello']
+select * from [nt:base] where ([name] = 'Hello') and 
isdescendantnode('/content')
+
+xpath //*[jcr:contains(., 'test')] order by @jcr:score
+select * from [nt:base] where contains(*, 'test') order by [jcr:score]
+
+xpath /jcr:root//*[jcr:contains(., 'test')] order by @jcr:score
+select * from [nt:base] where contains(*, 'test') and isdescendantnode('/') 
order by [jcr:score]
 
 xpath /jcr:root//element(*, test)
-select * from [test] where issamenode('/') or isdescendantnode('/')
+select * from [test] where isdescendantnode('/')
 
 xpath /jcr:root//element(*, user)[test/@jcr:primaryType]
-select * from [user] where ([test/jcr:primaryType] is not null) and 
(issamenode('/') or isdescendantnode('/'))
+select * from [user] where ([test/jcr:primaryType] is not null) and 
isdescendantnode('/')
 
 xpath /jcr:root/content//*[(@sling:resourceType = 'start')]
-select * from [nt:base] where ([sling:resourceType] = 'start') and 
(issamenode('/content') or isdescendantnode('/content'))
+select * from [nt:base] where ([sling:resourceType] = 'start') and 
isdescendantnode('/content')
 
 xpath /jcr:root/content//*[(@sling:resourceType = 'page')]
-select * from [nt:base] where ([sling:resourceType] = 'page') and 
(issamenode

svn commit: r1329600 - in /jackrabbit/oak/trunk/oak-mk/src: main/java/org/apache/jackrabbit/mk/util/MicroKernelInputStream.java test/java/org/apache/jackrabbit/mk/util/MicroKernelInputStreamTest.java

2012-04-24 Thread thomasm
Author: thomasm
Date: Tue Apr 24 09:05:24 2012
New Revision: 1329600

URL: http://svn.apache.org/viewvc?rev=1329600view=rev
Log:
OAK-70 MicroKernelInputStream test and optimization

Added:

jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/util/MicroKernelInputStreamTest.java
Modified:

jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/util/MicroKernelInputStream.java

Modified: 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/util/MicroKernelInputStream.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/util/MicroKernelInputStream.java?rev=1329600r1=1329599r2=1329600view=diff
==
--- 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/util/MicroKernelInputStream.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/util/MicroKernelInputStream.java
 Tue Apr 24 09:05:24 2012
@@ -17,19 +17,20 @@
 package org.apache.jackrabbit.mk.util;
 
 import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.mk.util.IOUtils;
 
 import java.io.IOException;
 import java.io.InputStream;
 
 /**
- * An input stream to simplify reading a blob from the micro kernel.
- * See also BlobStoreInputStream.
+ * An input stream to simplify reading a blob from a {@code MicroKernel}.
  */
 public class MicroKernelInputStream extends InputStream {
 
 private final MicroKernel mk;
 private final String id;
 private long pos;
+private long length = -1;
 private byte[] oneByteBuff;
 
 public MicroKernelInputStream(MicroKernel mk, String id) {
@@ -37,6 +38,20 @@ public class MicroKernelInputStream exte
 this.id = id;
 }
 
+@Override
+public long skip(long n) {
+if (n  0) {
+return 0;
+}
+if (length == -1) {
+length = mk.getLength(id);
+}
+n = Math.min(n, length - pos);
+pos += n;
+return n;
+}
+
+@Override
 public int read(byte[] b, int off, int len) {
 int l = mk.read(id, pos, b, off, len);
 if (l  0) {
@@ -46,6 +61,7 @@ public class MicroKernelInputStream exte
 return l;
 }
 
+@Override
 public int read() throws IOException {
 if (oneByteBuff == null) {
 oneByteBuff = new byte[1];

Added: 
jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/util/MicroKernelInputStreamTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/util/MicroKernelInputStreamTest.java?rev=1329600view=auto
==
--- 
jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/util/MicroKernelInputStreamTest.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/util/MicroKernelInputStreamTest.java
 Tue Apr 24 09:05:24 2012
@@ -0,0 +1,146 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to You under the Apache License, Version 2.0 (the
+ * License); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law
+ * or agreed to in writing, software distributed under the License is
+ * distributed on an AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */
+package org.apache.jackrabbit.mk.util;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Random;
+import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.mk.core.MicroKernelImpl;
+import org.junit.Test;
+
+/**
+ * Tests the {@code MicroKernelInputStream}.
+ */
+public class MicroKernelInputStreamTest {
+
+MicroKernel mk = new MicroKernelImpl();
+
+@Test
+public void small() throws IOException {
+doTest(10, 10);
+}
+
+@Test
+public void medium() throws IOException {
+doTest(1000, 10);
+}
+
+@Test
+public void large() throws IOException {
+doTest(10, 1);
+}
+
+private void doTest(int maxLength, int count) throws IOException {
+String[] s = new String[count * 2];
+Random r = new Random(0);
+for (int i = 0; i  s.length;) {
+int len = count == 1 ? maxLength : r.nextInt(maxLength);
+byte[] data

svn commit: r1329667 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/mk/index/ main/java/org/apache/jackrabbit/oak/api/ main/java/org/apache/jackrabbit/oak/core/ main/java/org

2012-04-24 Thread thomasm
Author: thomasm
Date: Tue Apr 24 12:17:27 2012
New Revision: 1329667

URL: http://svn.apache.org/viewvc?rev=1329667view=rev
Log:
OAK-28 Query implementation (index provider, property index)

Added:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/PropertyContentIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/QueryIndexProvider.java
Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTree.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Index.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/PrefixIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/PropertyIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/KernelContentRepository.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/Filter.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/QueryIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingIndex.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/IndexTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/PrefixIndexTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/PropertyIndexTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/FilterTest.java

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryTest.txt

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTree.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTree.java?rev=1329667r1=1329666r2=1329667view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTree.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTree.java
 Tue Apr 24 12:17:27 2012
@@ -288,4 +288,8 @@ public class BTree {
 return minSize + minSize + 1;
 }
 
+boolean isUnique() {
+return unique;
+}
+
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Index.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Index.java?rev=1329667r1=1329666r2=1329667view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Index.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Index.java
 Tue Apr 24 12:17:27 2012
@@ -16,6 +16,7 @@
  */
 package org.apache.jackrabbit.mk.index;
 
+import java.util.Iterator;
 import org.apache.jackrabbit.mk.simple.NodeImpl;
 
 /**
@@ -51,4 +52,21 @@ public interface Index {
 void addOrRemoveProperty(String nodePath, String propertyName,
 String value, boolean add);
 
+/**
+ * Get an iterator over the paths for the given value. For unique
+ * indexes, the iterator will contain at most one element.
+ *
+ * @param value the value, or null to return all indexed rows
+ * @param revision the revision
+ * @return an iterator of the paths (an empty iterator if not found)
+ */
+IteratorString getPaths(String value, String revision);
+
+/**
+ * Whether each value may only appear once in the index.
+ *
+ * @return true if unique
+ */
+boolean isUnique();
+
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java?rev=1329667r1=1329666r2=1329667view=diff

svn commit: r1330854 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit: mk/index/Indexer.java oak/api/QueryEngine.java oak/core/ContentRepositoryImpl.java oak/query/QueryEngineIm

2012-04-26 Thread thomasm
Author: thomasm
Date: Thu Apr 26 13:52:25 2012
New Revision: 1330854

URL: http://svn.apache.org/viewvc?rev=1330854view=rev
Log:
OAK-28 Query implementation (simplify index provider)

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/QueryIndexProvider.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java?rev=1330854r1=1330853r2=1330854view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java
 Thu Apr 26 13:52:25 2012
@@ -31,6 +31,7 @@ import org.apache.jackrabbit.oak.query.i
 import org.apache.jackrabbit.oak.query.index.QueryIndexProvider;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -52,7 +53,6 @@ public class Indexer implements QueryInd
 private HashMapString, BTreePage modified = new HashMapString, 
BTreePage();
 private SimpleLRUCacheString, BTreePage cache = 
SimpleLRUCache.newInstance(100);
 private String readRevision;
-private ArrayListQueryIndexListener listeners = new 
ArrayListQueryIndexListener();
 
 public Indexer(MicroKernel mk, String indexRootNode) {
 this.mk = mk;
@@ -115,9 +115,6 @@ public class Indexer implements QueryInd
 return existing;
 }
 buildAndAddIndex(index);
-for (QueryIndexListener l : listeners) {
-l.added(new PropertyContentIndex(mk, index));
-}
 return index;
 }
 
@@ -324,7 +321,7 @@ public class Indexer implements QueryInd
 public void updateIndex(String rootPath, JsopReader t, String 
lastRevision) {
 while (true) {
 int r = t.read();
-if (r == JsopTokenizer.END) {
+if (r == JsopReader.END) {
 break;
 }
 String path = PathUtils.concat(rootPath, t.readString());
@@ -361,7 +358,7 @@ public class Indexer implements QueryInd
 case '^': {
 removeProperty(path, lastRevision);
 t.read(':');
-if (t.matches(JsopTokenizer.NULL)) {
+if (t.matches(JsopReader.NULL)) {
 // ignore
 } else {
 String value = t.readRawValue().trim();
@@ -508,7 +505,11 @@ public class Indexer implements QueryInd
 }
 }
 
-public ListQueryIndex getQueryIndexes() {
+@Override
+public ListQueryIndex getQueryIndexes(MicroKernel mk) {
+if (mk != this.mk) {
+return Collections.emptyList();
+}
 ArrayListQueryIndex list = new ArrayListQueryIndex();
 for (Index index : indexes.values()) {
 QueryIndex qi = null;
@@ -522,14 +523,4 @@ public class Indexer implements QueryInd
 return list;
 }
 
-@Override
-public void addListener(QueryIndexListener listener) {
-listeners.add(listener);
-}
-
-@Override
-public void removeListener(QueryIndexListener listener) {
-listeners.remove(listener);
-}
-
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java?rev=1330854r1=1330853r2=1330854view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java
 Thu Apr 26 13:52:25 2012
@@ -53,9 +53,4 @@ public interface QueryEngine {
  */
 Result executeQuery(String statement, String language, MapString, 
CoreValue bindings) throws ParseException;
 
-/**
- * Close the query engine.
- */
-void close();
-
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java?rev=1330854r1=1330853r2=1330854view=diff

svn commit: r1330887 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/core/ main/java/org/apache/jackrabbit/oak/osgi/ test/java/org/apache/jackrabbit/oak/plugins/name/

2012-04-26 Thread thomasm
Author: thomasm
Date: Thu Apr 26 14:47:47 2012
New Revision: 1330887

URL: http://svn.apache.org/viewvc?rev=1330887view=rev
Log:
OAK-28 Query implementation (make index provider osgiable)

Added:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexProvider.java
Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/Activator.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/name/NamespaceMappingsTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java?rev=1330887r1=1330886r2=1330887view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
 Thu Apr 26 14:47:47 2012
@@ -62,11 +62,14 @@ public class ContentRepositoryImpl imple
 this(new MicroKernelImpl());
 }
 
-public ContentRepositoryImpl(MicroKernel mk) {
+private ContentRepositoryImpl(MicroKernel mk) {
+this(mk, new Indexer(mk));
+}
+
+public ContentRepositoryImpl(MicroKernel mk, QueryIndexProvider 
indexProvider) {
 microKernel = mk;
 valueFactory = new CoreValueFactoryImpl(microKernel);
 nodeStore = new KernelNodeStore(microKernel, valueFactory);
-QueryIndexProvider indexProvider = new Indexer(mk);
 queryEngine = new QueryEngineImpl(microKernel, valueFactory, 
indexProvider);
 
 // FIXME: workspace setup must be done elsewhere...

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/Activator.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/Activator.java?rev=1330887r1=1330886r2=1330887view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/Activator.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/Activator.java
 Thu Apr 26 14:47:47 2012
@@ -36,6 +36,8 @@ public class Activator implements Bundle
 
 private ServiceTracker tracker;
 
+private OsgiIndexProvider indexProvider;
+
 private final MapServiceReference, ServiceRegistration services =
 new HashMapServiceReference, ServiceRegistration();
 
@@ -47,11 +49,14 @@ public class Activator implements Bundle
 tracker = new ServiceTracker(
 context, MicroKernel.class.getName(), this);
 tracker.open();
+indexProvider = new OsgiIndexProvider();
+indexProvider.start(bundleContext);
 }
 
 @Override
 public void stop(BundleContext bundleContext) throws Exception {
-tracker.open();
+tracker.close();
+indexProvider.stop();
 }
 
 //--- ServiceTrackerCustomizer 
---
@@ -63,7 +68,7 @@ public class Activator implements Bundle
 MicroKernel kernel = (MicroKernel) service;
 services.put(reference, context.registerService(
 ContentRepository.class.getName(),
-new ContentRepositoryImpl(kernel),
+new ContentRepositoryImpl(kernel, indexProvider),
 new Properties()));
 return service;
 } else {
@@ -74,11 +79,12 @@ public class Activator implements Bundle
 
 @Override
 public void modifiedService(ServiceReference reference, Object service) {
+// nothing to do
 }
 
 @Override
 public void removedService(ServiceReference reference, Object service) {
-ServiceRegistration registration = services.get(reference);
+ServiceRegistration registration = services.remove(reference);
 registration.unregister();
 context.ungetService(reference);
 }

Added: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexProvider.java?rev=1330887view=auto
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexProvider.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexProvider.java
 Thu Apr 26 14:47:47 2012
@@ -0,0 +1,76 @@
+package org.apache.jackrabbit.oak.osgi;
+
+import

svn commit: r1333504 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/mk/index/ main/java/org/apache/jackrabbit/oak/api/ main/java/org/apache/jackrabbit/oak/core/ main/java/org

2012-05-03 Thread thomasm
Author: thomasm
Date: Thu May  3 15:29:42 2012
New Revision: 1333504

URL: http://svn.apache.org/viewvc?rev=1333504view=rev
Log:
OAK-28 Query implementation (removed QueryIndexProvider.init(); and 
implementation)

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/PropertyIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexProvider.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/PropertyContentIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingCursor.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/QueryIndexProvider.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/PrefixIndexTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/PropertyIndexTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/wrapper/IndexWrapperTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryTest.txt

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java?rev=1333504r1=1333503r2=1333504view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java
 Thu May  3 15:29:42 2012
@@ -29,13 +29,13 @@ import org.apache.jackrabbit.mk.util.Exc
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.mk.wrapper.MicroKernelWrapper;
 import org.apache.jackrabbit.mk.wrapper.MicroKernelWrapperBase;
+import org.apache.jackrabbit.oak.spi.QueryIndexProvider;
 
 /**
  * The index mechanism, as a wrapper.
  */
 public class IndexWrapper extends MicroKernelWrapperBase implements 
MicroKernel {
 
-private static final String INDEX_PATH = /index;
 private static final String TYPE_PREFIX = prefix:;
 private static final String TYPE_PROPERTY = property:;
 private static final String UNIQUE = unique;
@@ -48,10 +48,14 @@ public class IndexWrapper extends MicroK
 
 public IndexWrapper(MicroKernel mk) {
 this.mk = MicroKernelWrapperBase.wrap(mk);
-this.indexer = new Indexer(mk);
+this.indexer = new Indexer(this, mk, Indexer.INDEX_CONFIG_ROOT);
 indexer.init();
 }
 
+public QueryIndexProvider getIndexer() {
+return indexer;
+}
+
 @Override
 public String getHeadRevision() {
 return mk.getHeadRevision();
@@ -64,6 +68,10 @@ public class IndexWrapper extends MicroK
 
 @Override
 public boolean nodeExists(String path, String revisionId) {
+String indexRoot = indexer.getIndexRootNode();
+if (path.startsWith(indexRoot)) {
+return false;
+}
 return mk.nodeExists(path, revisionId);
 }
 
@@ -99,7 +107,8 @@ public class IndexWrapper extends MicroK
 
 @Override
 public String commitStream(String rootPath, JsopReader jsonDiff, String 
revisionId, String message) {
-if (!rootPath.startsWith(INDEX_PATH)) {
+String indexRoot = indexer.getIndexRootNode();
+if (!rootPath.startsWith(indexRoot)) {
 String rev = mk.commitStream(rootPath, jsonDiff, revisionId, 
message);
 jsonDiff.resetReader();
 indexer.updateIndex(rootPath, jsonDiff, rev);
@@ -125,7 +134,7 @@ public class IndexWrapper extends MicroK
 t.read('{');
 // parse but ignore
 NodeImpl.parse(map, t, 0);
-path = PathUtils.relativize(INDEX_PATH, path);
+path = PathUtils.relativize(indexRoot, path);
 if (path.startsWith(TYPE_PREFIX)) {
 String prefix = path.substring(TYPE_PREFIX.length

svn commit: r1333911 - in /jackrabbit/oak/trunk/oak-mk: pom.xml src/main/java/org/apache/jackrabbit/mk/osgi/Activator.java src/main/java/org/apache/jackrabbit/mk/osgi/MicroKernelService.java

2012-05-04 Thread thomasm
Author: thomasm
Date: Fri May  4 12:37:04 2012
New Revision: 1333911

URL: http://svn.apache.org/viewvc?rev=1333911view=rev
Log:
OAK-67 OSGi Bundle Setup - add an OSGi service for (in-memory and persisted) 
MicroKernel instances

Added:

jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/osgi/MicroKernelService.java
  - copied, changed from r1333794, 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/osgi/Activator.java
Removed:

jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/osgi/Activator.java
Modified:
jackrabbit/oak/trunk/oak-mk/pom.xml

Modified: jackrabbit/oak/trunk/oak-mk/pom.xml
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/pom.xml?rev=1333911r1=1333910r2=1333911view=diff
==
--- jackrabbit/oak/trunk/oak-mk/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-mk/pom.xml Fri May  4 12:37:04 2012
@@ -47,12 +47,22 @@
   org.apache.jackrabbit.mk.client,
   org.apache.jackrabbit.mk.blobs
 /Export-Package
-Bundle-Activator
-  org.apache.jackrabbit.mk.osgi.Activator
-/Bundle-Activator
   /instructions
 /configuration
   /plugin
+  plugin
+groupIdorg.apache.felix/groupId
+artifactIdmaven-scr-plugin/artifactId
+version1.7.2/version
+executions
+  execution
+idgenerate-scr-scrdescriptor/id
+goals
+  goalscr/goal
+/goals
+  /execution
+/executions
+  /plugin  
 /plugins
 pluginManagement
   plugins
@@ -78,10 +88,22 @@
   optionaltrue/optional
 /dependency
 dependency
+  groupIdorg.osgi/groupId
+  artifactIdorg.osgi.compendium/artifactId
+  scopeprovided/scope
+  optionaltrue/optional
+/dependency
+dependency
   groupIdbiz.aQute/groupId
   artifactIdbndlib/artifactId
   scopeprovided/scope
 /dependency
+dependency
+groupIdorg.apache.felix/groupId
+artifactIdorg.apache.felix.scr.annotations/artifactId
+scopeprovided/scope
+/dependency
+
 
 !-- commons dependency --
 dependency

Copied: 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/osgi/MicroKernelService.java
 (from r1333794, 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/osgi/Activator.java)
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/osgi/MicroKernelService.java?p2=jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/osgi/MicroKernelService.javap1=jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/osgi/Activator.javar1=1333794r2=1333911rev=1333911view=diff
==
--- 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/osgi/Activator.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/osgi/MicroKernelService.java
 Fri May  4 12:37:04 2012
@@ -16,31 +16,44 @@
  */
 package org.apache.jackrabbit.mk.osgi;
 
-import java.util.Properties;
-
+import org.osgi.service.component.ComponentContext;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.felix.scr.annotations.Activate;
 import org.apache.jackrabbit.mk.api.MicroKernel;
 import org.apache.jackrabbit.mk.core.MicroKernelImpl;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceRegistration;
 
-public class Activator implements BundleActivator {
+@Component
+@Service(MicroKernel.class)
+public class MicroKernelService extends MicroKernelImpl {
+
+@Property(description=The unique name of this instance)
+public static final String NAME = name;
 
-private ServiceRegistration registration;
+@Property(description=The home directory (in-memory if not set))
+public static final String HOME_DIR = homeDir;
 
-//- BundleActivator 
--
+private String name;
 
 @Override
-public void start(BundleContext context) throws Exception {
-registration = context.registerService(
-MicroKernel.class.getName(),
-new MicroKernelImpl(),
-new Properties());
+public String toString() {
+return name;
 }
 
-@Override
-public void stop(BundleContext context) throws Exception {
-registration.unregister();
+@Activate
+public void activate(ComponentContext context) {
+Object homeDir = context.getProperties().get(HOME_DIR);
+name =  + context.getProperties().get(NAME);
+if (homeDir != null

svn commit: r1335513 - /jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java

2012-05-08 Thread thomasm
Author: thomasm
Date: Tue May  8 13:39:01 2012
New Revision: 1335513

URL: http://svn.apache.org/viewvc?rev=1335513view=rev
Log:
OAK-15   Clean up oak-jcr

Modified:

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java?rev=1335513r1=1335512r2=1335513view=diff
==
--- 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java
 Tue May  8 13:39:01 2012
@@ -108,7 +108,7 @@ public class SessionImpl extends Abstrac
 @Override
 public Node getNodeByIdentifier(String id) throws RepositoryException {
 ensureIsAlive();
-
+// TODO following line throws IndexOutOfBoundsException if id is empty
 if (id.charAt(0) == '/') {
 return getNode(id);
 } else {
@@ -253,7 +253,7 @@ public class SessionImpl extends Abstrac
 }
 
 // private 
---
-
+
 /**
  * Ensure that this session is alive and throw an exception otherwise.
  *




svn commit: r1336717 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/api/ oak-core/src/main/java/org/apache/jackrabbit/oak/query/ oak-core/src/main/java/org/apache/jackrab

2012-05-10 Thread thomasm
Author: thomasm
Date: Thu May 10 14:30:40 2012
New Revision: 1336717

URL: http://svn.apache.org/viewvc?rev=1336717view=rev
Log:
OAK-34 Define query API - support workspaces and access rights in queries

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElement.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ChildNodeImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DescendantNodeImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SameNodeImpl.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryManagerImpl.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java?rev=1336717r1=1336716r2=1336717view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java
 Thu May 10 14:30:40 2012
@@ -49,12 +49,13 @@ public interface QueryEngine {
  *
  * @param statement the query statement
  * @param language the language
+ * @param session the content session to use
  * @param bindings the bind variable value bindings
  * @return the result
  * @throws ParseException if the statement could not be parsed
  * @throws IllegalArgumentException if there was an error executing the 
query
  */
-Result executeQuery(String statement, String language, MapString, 
CoreValue bindings) throws ParseException;
+Result executeQuery(String statement, String language, ContentSession 
session, MapString, CoreValue bindings) throws ParseException;
 
 // TODO pass namespace mapping
 // TODO pass node type information (select * from [xyz] is supposed to 
return at least the mandatory columns for xyz)

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java?rev=1336717r1=1336716r2=1336717view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 Thu May 10 14:30:40 2012
@@ -20,6 +20,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.oak.api.ContentSession;
 import org.apache.jackrabbit.oak.api.CoreValue;
 import org.apache.jackrabbit.oak.api.CoreValueFactory;
 import org.apache.jackrabbit.oak.query.ast.AstVisitorBase;
@@ -69,6 +70,7 @@ public class Query {
 private long offset;
 private boolean prepared;
 private final CoreValueFactory valueFactory;
+private ContentSession session;
 
 Query(SourceImpl source, ConstraintImpl constraint, OrderingImpl[] 
orderings,
   ColumnImpl[] columns, CoreValueFactory valueFactory) {
@@ -461,6 +463,10 @@ public class Query {
 return new ArrayListString(bindVariableMap.keySet());
 }
 
+public String getWorkspaceName() {
+return session.getWorkspaceName();
+}
+
 public void setQueryEngine(QueryEngineImpl queryEngine) {
 this.queryEngine = queryEngine;
 }
@@ -469,4 +475,8 @@ public class Query {
 return queryEngine.getBestIndex(filter);
 }
 
+public void setSession(ContentSession session) {
+this.session = session;
+}
+
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java?rev=1336717r1=1336716r2=1336717view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query

svn commit: r1336718 - /jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/value/ValueImpl.java

2012-05-10 Thread thomasm
Author: thomasm
Date: Thu May 10 14:33:29 2012
New Revision: 1336718

URL: http://svn.apache.org/viewvc?rev=1336718view=rev
Log:
OAK-16 Proper ValueFactory implementation and Value handling (toString, reduce 
noise)

Modified:

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/value/ValueImpl.java

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/value/ValueImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/value/ValueImpl.java?rev=1336718r1=1336717r2=1336718view=diff
==
--- 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/value/ValueImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/value/ValueImpl.java
 Thu May 10 14:33:29 2012
@@ -37,7 +37,7 @@ import java.util.Calendar;
 import java.util.TimeZone;
 
 /**
- * ValueImpl...
+ * The implementation of JCR values.
  */
 class ValueImpl implements Value {
 
@@ -48,7 +48,7 @@ class ValueImpl implements Value {
 
 private final CoreValue value;
 private final NamePathMapper namePathMapper;
-
+
 private InputStream stream = null;
 
 /**
@@ -67,17 +67,12 @@ class ValueImpl implements Value {
 }
 
 //-- Value 
---
-/**
- * @see javax.jcr.Value#getType()
- */
+
 @Override
 public int getType() {
 return value.getType();
 }
 
-/**
- * @see javax.jcr.Value#getBoolean()
- */
 @Override
 public boolean getBoolean() throws RepositoryException {
 if (getType() == PropertyType.STRING || getType() == 
PropertyType.BINARY || getType() == PropertyType.BOOLEAN) {
@@ -87,9 +82,6 @@ class ValueImpl implements Value {
 }
 }
 
-/**
- * @see javax.jcr.Value#getDate()
- */
 @Override
 public Calendar getDate() throws RepositoryException {
 Calendar cal;
@@ -109,9 +101,6 @@ class ValueImpl implements Value {
 return cal;
 }
 
-/**
- * @see javax.jcr.Value#getDecimal()
- */
 @Override
 public BigDecimal getDecimal() throws RepositoryException {
 try {
@@ -127,9 +116,6 @@ class ValueImpl implements Value {
 }
 }
 
-/**
- * @see javax.jcr.Value#getDouble()
- */
 @Override
 public double getDouble() throws RepositoryException {
 try {
@@ -145,9 +131,6 @@ class ValueImpl implements Value {
 }
 }
 
-/**
- * @see javax.jcr.Value#getLong()
- */
 @Override
 public long getLong() throws RepositoryException {
 try {
@@ -163,9 +146,6 @@ class ValueImpl implements Value {
 }
 }
 
-/**
- * @see javax.jcr.Value#getString()
- */
 @Override
 public String getString() throws RepositoryException {
 switch (getType()) {
@@ -187,10 +167,6 @@ class ValueImpl implements Value {
 }
 }
 
-
-/**
- * @see javax.jcr.Value#getStream()
- */
 @Override
 public InputStream getStream() throws IllegalStateException, 
RepositoryException {
 if (stream == null) {
@@ -207,22 +183,17 @@ class ValueImpl implements Value {
 stream = value.getNewStream();
 }
 }
-
+
 return stream;
 }
 
-/**
- * @see javax.jcr.Value#getBinary()
- */
 @Override
 public Binary getBinary() throws RepositoryException {
 return new BinaryImpl(this);
 }
 
 //- Object 
---
-/**
- * @see Object#equals(Object)
- */
+
 @Override
 public boolean equals(Object obj) {
 if (obj instanceof ValueImpl) {
@@ -232,11 +203,14 @@ class ValueImpl implements Value {
 }
 }
 
-/**
- * @see Object#hashCode()
- */
-@Override
+ @Override
 public int hashCode() {
 return value.hashCode();
 }
+
+@Override
+public String toString() {
+return value.toString();
+}
+
 }
\ No newline at end of file




svn commit: r1338599 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/query/Query.java main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java test/java/org/a

2012-05-15 Thread thomasm
Author: thomasm
Date: Tue May 15 08:47:06 2012
New Revision: 1338599

URL: http://svn.apache.org/viewvc?rev=1338599view=rev
Log:
OAK-28 Query implementation (support parsing and evaluating fulltext search 
conditions)

Added:

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/FullTextTest.java
Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java?rev=1338599r1=1338598r2=1338599view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 Tue May 15 08:47:06 2012
@@ -33,6 +33,7 @@ import org.apache.jackrabbit.oak.query.a
 import org.apache.jackrabbit.oak.query.ast.DescendantNodeImpl;
 import org.apache.jackrabbit.oak.query.ast.DescendantNodeJoinConditionImpl;
 import org.apache.jackrabbit.oak.query.ast.EquiJoinConditionImpl;
+import org.apache.jackrabbit.oak.query.ast.FullTextSearchImpl;
 import org.apache.jackrabbit.oak.query.ast.FullTextSearchScoreImpl;
 import org.apache.jackrabbit.oak.query.ast.LengthImpl;
 import org.apache.jackrabbit.oak.query.ast.LiteralImpl;
@@ -136,8 +137,16 @@ public class Query {
 }
 
 @Override
+public boolean visit(FullTextSearchImpl node) {
+node.setQuery(query);
+node.bindSelector(source);
+return true;
+}
+
+@Override
 public boolean visit(FullTextSearchScoreImpl node) {
 node.setQuery(query);
+node.bindSelector(source);
 return true;
 }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java?rev=1338599r1=1338598r2=1338599view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java
 Tue May 15 08:47:06 2012
@@ -18,6 +18,10 @@
  */
 package org.apache.jackrabbit.oak.query.ast;
 
+import java.text.ParseException;
+import java.util.ArrayList;
+import org.apache.jackrabbit.mk.simple.NodeImpl;
+import org.apache.jackrabbit.oak.api.CoreValue;
 import org.apache.jackrabbit.oak.query.index.FilterImpl;
 
 public class FullTextSearchImpl extends ConstraintImpl {
@@ -25,6 +29,8 @@ public class FullTextSearchImpl extends 
 private final String selectorName;
 private final String propertyName;
 private final StaticOperandImpl fullTextSearchExpression;
+private SelectorImpl selector;
+private FullTextExpression expr;
 
 public FullTextSearchImpl(String selectorName, String propertyName,
 StaticOperandImpl fullTextSearchExpression) {
@@ -68,15 +74,229 @@ public class FullTextSearchImpl extends 
 return builder.toString();
 }
 
+private boolean evaluateContains(CoreValue value) {
+String v = value.getString();
+return expr.evaluate(v);
+}
+
 @Override
 public boolean evaluate() {
-// TODO support evaluating fulltext conditions
+if (propertyName != null) {
+CoreValue v = selector.currentProperty(propertyName);
+if (v == null) {
+return false;
+}
+return evaluateContains(v);
+}
+NodeImpl n = selector.currentNode();
+for (int i = 0; i  n.getPropertyCount(); i++) {
+String p = n.getProperty(i);
+if (p == null) {
+break;
+}
+CoreValue v = selector.currentProperty(p);
+if (evaluateContains(v)) {
+return true;
+}
+}
 return false;
 }
 
+public void bindSelector(SourceImpl source) {
+selector = source.getSelector(selectorName);
+if (selector == null) {
+throw new IllegalArgumentException(Unknown selector:  + 
selectorName);
+}
+CoreValue v = fullTextSearchExpression.currentValue();
+try {
+expr = FullTextParser.parse(v.getString());
+} catch (ParseException e) {
+throw new IllegalArgumentException(Invalid expression:  + 
fullTextSearchExpression, e

svn commit: r1340908 - in /jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit: mk/fs/ mk/server/ oak/util/

2012-05-21 Thread thomasm
Author: thomasm
Date: Mon May 21 07:13:47 2012
New Revision: 1340908

URL: http://svn.apache.org/viewvc?rev=1340908view=rev
Log:
OAK-13 Cleanup org.apache.jackrabbit.mk (remove empty directories)

Removed:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/fs/
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/server/
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/



svn commit: r1341503 - /jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java

2012-05-22 Thread thomasm
Author: thomasm
Date: Tue May 22 14:50:13 2012
New Revision: 1341503

URL: http://svn.apache.org/viewvc?rev=1341503view=rev
Log:
OAK-16 Proper ValueFactory implementation and Value handling - don't call 
Value.getStream() and then Value.getString() in a test, as this is not allowed

Modified:

jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java

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=1341503r1=1341502r2=1341503view=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
 Tue May 22 14:50:13 2012
@@ -1719,8 +1719,11 @@ public class RepositoryTest extends Abst
 assertTrue(session2.propertyExists(propertyPath));
 Value value2 = session2.getProperty(propertyPath).getValue();
 assertEquals(value.getType(), value2.getType());
-assertEqualStream(value.getStream(), value2.getStream());
-assertEquals(value.getString(), value2.getString());
+if (value.getType() == PropertyType.BINARY) {
+assertEqualStream(value.getStream(), value2.getStream());
+} else {
+assertEquals(value.getString(), value2.getString());
+}
 
 if (value2.getType() == PropertyType.REFERENCE || value2.getType() 
== PropertyType.WEAKREFERENCE) {
 String ref = value2.getString();




svn commit: r1341505 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/api/ oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/ oak-core/src/main/java/org/apache/jackra

2012-05-22 Thread thomasm
Author: thomasm
Date: Tue May 22 14:58:07 2012
New Revision: 1341505

URL: http://svn.apache.org/viewvc?rev=1341505view=rev
Log:
OAK-28 Query implementation - implement missing features

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/CoreValueImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElement.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryTest.txt

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryXpathTest.txt

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryImpl.java

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryManagerImpl.java

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/RowImpl.java

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/QueryObjectModelImpl.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java?rev=1341505r1=1341504r2=1341505view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java
 Tue May 22 14:58:07 2012
@@ -50,12 +50,15 @@ public interface QueryEngine {
  * @param statement the query statement
  * @param language the language
  * @param session the content session to use
+ * @param limit the maximum result set size
+ * @param offset the number of rows to skip
  * @param bindings the bind variable value bindings
  * @return the result
  * @throws ParseException if the statement could not be parsed
  * @throws IllegalArgumentException if there was an error executing the 
query
  */
-Result executeQuery(String statement, String language, ContentSession 
session, MapString, CoreValue bindings) throws ParseException;
+Result executeQuery(String statement, String language, ContentSession 
session,
+long limit, long offset, MapString, CoreValue bindings) throws 
ParseException;
 
 // TODO pass namespace mapping
 // TODO pass node type information (select * from [xyz] is supposed to 
return at least the mandatory columns for xyz)

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/CoreValueImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/CoreValueImpl.java?rev=1341505r1=1341504r2=1341505view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/CoreValueImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/CoreValueImpl.java
 Tue May 22 14:58:07 2012
@@ -17,12 +17,14 @@
 package org.apache.jackrabbit.oak.kernel;
 
 import org.apache.jackrabbit.oak.api.CoreValue;
+import org.apache.jackrabbit.util.ISO8601;
 
 import javax.jcr.PropertyType;
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
 import java.math.BigDecimal;
+import java.util.Calendar;
 
 /**
  * {@code CoreValueImpl} is the default implementation of the {@code CoreValue}
@@ -304,6 +306,10 @@ class CoreValueImpl implements CoreValue
 return ((BigDecimal) value).compareTo(o.getDecimal());
 case PropertyType.BOOLEAN:
 return ((Boolean) value).compareTo(o.getBoolean());
+case PropertyType.DATE:
+Calendar d1 = ISO8601.parse(getString());
+Calendar d2 = ISO8601.parse(o.getString());
+return d1.compareTo(d2);
 default:
 return value.toString().compareTo(o.toString

svn commit: r1344746 - /jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/api/MicroKernel.java

2012-05-31 Thread thomasm
Author: thomasm
Date: Thu May 31 14:34:20 2012
New Revision: 1344746

URL: http://svn.apache.org/viewvc?rev=1344746view=rev
Log:
OAK-120 MicroKernel API: specific retention policy of binaries

Modified:

jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/api/MicroKernel.java

Modified: 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/api/MicroKernel.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/api/MicroKernel.java?rev=1344746r1=1344745r2=1344746view=diff
==
--- 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/api/MicroKernel.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/api/MicroKernel.java
 Thu May 31 14:34:20 2012
@@ -19,7 +19,7 @@ package org.apache.jackrabbit.mk.api;
 import java.io.InputStream;
 
 /**
- * The MicroKernel bdesign goals/principles/b:
+ * The MicroKernel bDesign Goals and Principles/b:
  * ul
  * limanage huge trees of nodes and properties efficiently/li
  * liMVCC-based concurrency control
@@ -32,8 +32,9 @@ import java.io.InputStream;
  * liintegrated API for efficiently storing/retrieving large binaries/li
  * lihuman-readable data serialization (JSON)/li
  * /ul
- * p/
+ * p
  * The MicroKernel bData Model/b:
+ * /p
  * ul
  * lisimple JSON-inspired data model: just nodes and properties/li
  * lia node consists of an unordered set of name -gt; item mappings. each
@@ -43,7 +44,27 @@ import java.io.InputStream;
  * lisupported property types: string, number, boolean, array/li
  * lia property value is stored and used as an opaque, unparsed character 
sequence/li
  * /ul
+ * p
+ * The bRetention Policy for Revisions/b:
+ * p
  * TODO specify retention policy for old revisions, i.e. minimal guaranteed 
retention period (OAK-114)
+ * /p
+ * p
+ * The bRetention Policy for Binaries/b:
+ * /p
+ * p
+ * The MicroKernel implementation is free to remove binaries if both of the
+ * following conditions are met:
+ * /p
+ * ul
+ * liIf the binary is not references as a property value of the
+ * format :blobId:lt;blobIdgt; where lt;blobIdgt; is the id returned by
+ * {@link write(InputStream in)}. This includes simple property values such as
+ * {bin: :blobId:1234} as well as array property values such as
+ * {array: [:blobId:1234, :blobId:5678]}./li
+ * liIf the binary was stored before the last retained revision (this is to
+ * keep temporary binaries, and binaries that are not yet referenced)./li
+ * /ul
  */
 public interface MicroKernel {
 




svn commit: r1344748 - /jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/fs/FilePathDisk.java

2012-05-31 Thread thomasm
Author: thomasm
Date: Thu May 31 14:36:06 2012
New Revision: 1344748

URL: http://svn.apache.org/viewvc?rev=1344748view=rev
Log:
Remove unused code.

Modified:

jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/fs/FilePathDisk.java

Modified: 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/fs/FilePathDisk.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/fs/FilePathDisk.java?rev=1344748r1=1344747r2=1344748view=diff
==
--- 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/fs/FilePathDisk.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/fs/FilePathDisk.java
 Thu May 31 14:36:06 2012
@@ -299,24 +299,6 @@ public class FilePathDisk extends FilePa
 return in;
 }
 
-/**
- * Call the garbage collection and run finalization. This close all files 
that
- * were not closed, and are no longer referenced.
- */
-static void freeMemoryAndFinalize() {
-Runtime rt = Runtime.getRuntime();
-long mem = rt.freeMemory();
-for (int i = 0; i  16; i++) {
-rt.gc();
-long now = rt.freeMemory();
-rt.runFinalization();
-if (now == mem) {
-break;
-}
-mem = now;
-}
-}
-
 @Override
 public FileChannel open(String mode) throws IOException {
 return new FileDisk(name, mode);




svn commit: r1344750 - in /jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs: AbstractBlobStore.java DbBlobStore.java FileBlobStore.java

2012-05-31 Thread thomasm
Author: thomasm
Date: Thu May 31 14:41:56 2012
New Revision: 1344750

URL: http://svn.apache.org/viewvc?rev=1344750view=rev
Log:
OAK-123 Data store improvements

Modified:

jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java

jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/DbBlobStore.java

jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/FileBlobStore.java

Modified: 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java?rev=1344750r1=1344749r2=1344750view=diff
==
--- 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java
 Thu May 31 14:41:56 2012
@@ -392,6 +392,9 @@ public abstract class AbstractBlobStore 
 if (this == other) {
 return true;
 }
+if (other == null || !(other instanceof BlockId)) {
+return false;
+}
 BlockId o = (BlockId) other;
 return Arrays.equals(digest, o.digest) 
 pos == o.pos;

Modified: 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/DbBlobStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/DbBlobStore.java?rev=1344750r1=1344749r2=1344750view=diff
==
--- 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/DbBlobStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/DbBlobStore.java
 Thu May 31 14:41:56 2012
@@ -43,6 +43,7 @@ public class DbBlobStore extends Abstrac
 (id varchar primary key, level int, lastMod bigint));
 stat.execute(create table if not exists datastore_data +
 (id varchar primary key, data binary));
+stat.close();
 conn.close();
 }
 
@@ -154,6 +155,7 @@ public class DbBlobStore extends Abstrac
 prep.setString(2, id);
 prep.setLong(3, minLastModified);
 prep.executeUpdate();
+prep.close();
 } finally {
 conn.close();
 }
@@ -183,6 +185,8 @@ public class DbBlobStore extends Abstrac
 prepData.execute();
 count++;
 }
+prepData.close();
+prep.close();
 } finally {
 conn.close();
 }

Modified: 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/FileBlobStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/FileBlobStore.java?rev=1344750r1=1344749r2=1344750view=diff
==
--- 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/FileBlobStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/FileBlobStore.java
 Thu May 31 14:41:56 2012
@@ -40,6 +40,8 @@ public class FileBlobStore extends Abstr
 private final byte[] buffer = new byte[16 * 1024];
 private boolean mark;
 
+// TODO file operations are not secure (return values not checked, no 
retry,...)
+
 public FileBlobStore(String dir) throws IOException {
 baseDir = new File(dir);
 baseDir.mkdirs();




svn commit: r1344752 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/api/ main/java/org/apache/jackrabbit/oak/query/ main/java/org/apache/jackrabbit/oak/query/ast/ test/ja

2012-05-31 Thread thomasm
Author: thomasm
Date: Thu May 31 14:43:30 2012
New Revision: 1344752

URL: http://svn.apache.org/viewvc?rev=1344752view=rev
Log:
OAK-28 Query implementation

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElement.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SameNodeImpl.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryXpathTest.txt

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java?rev=1344752r1=1344751r2=1344752view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java
 Thu May 31 14:43:30 2012
@@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.api;
 import java.text.ParseException;
 import java.util.List;
 import java.util.Map;
+import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 
 /**
  * The query engine allows to parse and execute queries.
@@ -53,12 +54,14 @@ public interface QueryEngine {
  * @param limit the maximum result set size
  * @param offset the number of rows to skip
  * @param bindings the bind variable value bindings
+ * @param namePathMapper the name and path mapper to use
  * @return the result
  * @throws ParseException if the statement could not be parsed
  * @throws IllegalArgumentException if there was an error executing the 
query
  */
 Result executeQuery(String statement, String language, ContentSession 
session,
-long limit, long offset, MapString, CoreValue bindings) throws 
ParseException;
+long limit, long offset, MapString, CoreValue bindings,
+NamePathMapper namePathMapper) throws ParseException;
 
 // TODO pass namespace mapping
 // TODO pass node type information (select * from [xyz] is supposed to 
return at least the mandatory columns for xyz)

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java?rev=1344752r1=1344751r2=1344752view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 Thu May 31 14:43:30 2012
@@ -23,6 +23,7 @@ import org.apache.jackrabbit.mk.api.Micr
 import org.apache.jackrabbit.oak.api.ContentSession;
 import org.apache.jackrabbit.oak.api.CoreValue;
 import org.apache.jackrabbit.oak.api.CoreValueFactory;
+import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 import org.apache.jackrabbit.oak.query.ast.AstVisitorBase;
 import org.apache.jackrabbit.oak.query.ast.BindVariableValueImpl;
 import org.apache.jackrabbit.oak.query.ast.ChildNodeImpl;
@@ -73,6 +74,7 @@ public class Query {
 private boolean prepared;
 private final CoreValueFactory valueFactory;
 private ContentSession session;
+private NamePathMapper namePathMapper;
 
 Query(SourceImpl source, ConstraintImpl constraint, OrderingImpl[] 
orderings,
   ColumnImpl[] columns, CoreValueFactory valueFactory) {
@@ -496,4 +498,12 @@ public class Query {
 this.session = session;
 }
 
+public void setNamePathMapper(NamePathMapper namePathMapper) {
+this.namePathMapper = namePathMapper;
+}
+
+public NamePathMapper getNamePathMapper() {
+return namePathMapper;
+}
+
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java?rev=1344752r1=1344751r2=1344752view=diff

svn commit: r1344753 - in /jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr: SessionDelegate.java query/QueryManagerImpl.java query/qom/QueryObjectModelImpl.java

2012-05-31 Thread thomasm
Author: thomasm
Date: Thu May 31 14:44:09 2012
New Revision: 1344753

URL: http://svn.apache.org/viewvc?rev=1344753view=rev
Log:
OAK-28 Query implementation

Modified:

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryManagerImpl.java

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/QueryObjectModelImpl.java

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java?rev=1344753r1=1344752r2=1344753view=diff
==
--- 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java
 Thu May 31 14:44:09 2012
@@ -362,7 +362,7 @@ public class SessionDelegate {
 .createValue(id));
 
 Result result = getQueryEngine().executeQuery(SELECT * FROM 
[nt:base] WHERE [jcr:uuid] = $id, Query.JCR_SQL2,
-getContentSession(), Long.MAX_VALUE, 0, bindings);
+getContentSession(), Long.MAX_VALUE, 0, bindings, 
namePathMapper);
 
 String path = null;
 

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryManagerImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryManagerImpl.java?rev=1344753r1=1344752r2=1344753view=diff
==
--- 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryManagerImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryManagerImpl.java
 Thu May 31 14:44:09 2012
@@ -39,6 +39,7 @@ import org.apache.jackrabbit.oak.api.Que
 import org.apache.jackrabbit.oak.api.Result;
 import org.apache.jackrabbit.oak.jcr.SessionDelegate;
 import org.apache.jackrabbit.oak.jcr.query.qom.QueryObjectModelFactoryImpl;
+import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 
 /**
  * The implementation of the corresponding JCR interface.
@@ -105,7 +106,8 @@ public class QueryManagerImpl implements
 try {
 HashMapString, CoreValue bindMap = convertMap(bindVariableMap);
 ContentSession s = sessionDelegate.getContentSession();
-Result r = queryEngine.executeQuery(statement, language, s, limit, 
offset, bindMap);
+NamePathMapper namePathMapper = 
sessionDelegate.getNamePathMapper();
+Result r = queryEngine.executeQuery(statement, language, s, limit, 
offset, bindMap, namePathMapper);
 return new QueryResultImpl(sessionDelegate, r);
 } catch (IllegalArgumentException e) {
 throw new InvalidQueryException(e);

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/QueryObjectModelImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/QueryObjectModelImpl.java?rev=1344753r1=1344752r2=1344753view=diff
==
--- 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/QueryObjectModelImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/QueryObjectModelImpl.java
 Thu May 31 14:44:09 2012
@@ -185,7 +185,7 @@ public class QueryObjectModelImpl implem
 
 @Override
 public Node storeAsNode(String absPath) throws RepositoryException {
-Node n = queryManager.createQuery(getStatement(), Query.JCR_SQL2).
+Node n = queryManager.createQuery(getStatement(), Query.JCR_JQOM).
 storeAsNode(absPath);
 storedQueryPath = n.getPath();
 return n;




svn commit: r1344754 - /jackrabbit/oak/trunk/oak-it/jcr/pom.xml

2012-05-31 Thread thomasm
Author: thomasm
Date: Thu May 31 14:45:17 2012
New Revision: 1344754

URL: http://svn.apache.org/viewvc?rev=1344754view=rev
Log:
OAK-6 update test exclusions

Modified:
jackrabbit/oak/trunk/oak-it/jcr/pom.xml

Modified: jackrabbit/oak/trunk/oak-it/jcr/pom.xml
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-it/jcr/pom.xml?rev=1344754r1=1344753r2=1344754view=diff
==
--- jackrabbit/oak/trunk/oak-it/jcr/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-it/jcr/pom.xml Thu May 31 14:45:17 2012
@@ -86,13 +86,10 @@ org.apache.jackrabbit.test.api.nodetype.
 org.apache.jackrabbit.test.api.nodetype.CanRemoveItemTest
 org.apache.jackrabbit.test.api.LifecycleTest
 org.apache.jackrabbit.test.api.query.GetPropertyNamesTest#testGetPropertyNames
-org.apache.jackrabbit.test.api.query.OrderByMultiTypeTest#testMultipleOrder
 org.apache.jackrabbit.test.api.query.SaveTest#testConstraintViolationException
 org.apache.jackrabbit.test.api.query.SimpleSelectionTest#testSingleProperty
 org.apache.jackrabbit.test.api.query.XPathQueryLevel2Test#testMultiValueSearch
 
org.apache.jackrabbit.test.api.query.qom.ColumnTest#testExpandColumnsForNodeType
-org.apache.jackrabbit.test.api.query.qom.GetQueryTest#testGetQuery
-org.apache.jackrabbit.test.api.query.qom.NodeNameTest#testURILiteral
 org.apache.jackrabbit.test.api.query.qom.SelectorTest#testUnknownNodeType
 org.apache.jackrabbit.test.api.util
 org.apache.jackrabbit.test.api.observation




svn commit: r1346301 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java test/resources/org/apache/jackrabbit/oak/query/queryXpathTest.txt

2012-06-05 Thread thomasm
Author: thomasm
Date: Tue Jun  5 08:58:34 2012
New Revision: 1346301

URL: http://svn.apache.org/viewvc?rev=1346301view=rev
Log:
OAK-28 Query implementation - support explain for XPath queries

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryXpathTest.txt

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java?rev=1346301r1=1346300r2=1346301view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java
 Tue Jun  5 08:58:34 2012
@@ -57,6 +57,10 @@ public class XPathToSQL2Converter {
  */
 public String convert(String query) throws ParseException {
 // TODO verify this is correct
+boolean explain = query.startsWith(explain );
+if (explain) {
+query = query.substring(explain .length());
+}
 if (!query.startsWith(/)) {
 query = /jcr:root/ + query;
 }
@@ -196,7 +200,11 @@ public class XPathToSQL2Converter {
 if (!currentToken.isEmpty()) {
 throw getSyntaxError(end);
 }
-StringBuilder buff = new StringBuilder(select );
+StringBuilder buff = new StringBuilder();
+if (explain) {
+buff.append(explain );
+}
+buff.append(select );
 buff.append([jcr:path], [jcr:score], );
 if (columnList.isEmpty()) {
 buff.append('*');

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryXpathTest.txt
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryXpathTest.txt?rev=1346301r1=1346300r2=1346301view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryXpathTest.txt
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryXpathTest.txt
 Tue Jun  5 08:58:34 2012
@@ -36,6 +36,9 @@ select [jcr:path], [jcr:score], * from [
 xpath /jcr:root/test/text()
 select [jcr:path], [jcr:score], * from [nt:base] where 
issamenode('/test/jcr:xmltext')
 
+xpath explain //*[@*='x']
+explain select [jcr:path], [jcr:score], * from [nt:base] where [*] = 'x'
+
 xpath //*[@*='x']
 select [jcr:path], [jcr:score], * from [nt:base] where [*] = 'x'
 




svn commit: r1346307 - /jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java

2012-06-05 Thread thomasm
Author: thomasm
Date: Tue Jun  5 09:23:39 2012
New Revision: 1346307

URL: http://svn.apache.org/viewvc?rev=1346307view=rev
Log:
OAK-28 Query implementation - support explain, simplify filtering

Modified:

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java?rev=1346307r1=1346306r2=1346307view=diff
==
--- 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java
 Tue Jun  5 09:23:39 2012
@@ -66,6 +66,17 @@ public class QueryResultImpl implements 
 return result.getSelectorNames();
 }
 
+boolean includeRow(String path) {
+if (path == null) {
+// a row without path (explain,...)
+return true;
+} else if (PathUtils.isAncestor(pathFilter, path)) {
+// a row within this workspace
+return true;
+}
+return false;
+}
+
 @Override
 public RowIterator getRows() throws RepositoryException {
 IteratorRowImpl it = new IteratorRowImpl() {
@@ -83,7 +94,7 @@ public class QueryResultImpl implements 
 ResultRow r = it.next();
 for (String s : getSelectorNames()) {
 String path = r.getPath(s);
-if (PathUtils.isAncestor(pathFilter, path)) {
+if (includeRow(path)) {
 current = new RowImpl(QueryResultImpl.this, r);
 return;
 }
@@ -145,7 +156,7 @@ public class QueryResultImpl implements 
 while(it.hasNext()) {
 ResultRow r = it.next();
 String path = r.getPath();
-if (PathUtils.isAncestor(pathFilter, path)) {
+if (includeRow(path)) {
 current = getNode(getLocalPath(path));
 break;
 }




svn commit: r1346402 - in /jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons: ArrayUtils.java PathUtils.java

2012-06-05 Thread thomasm
Author: thomasm
Date: Tue Jun  5 14:48:40 2012
New Revision: 1346402

URL: http://svn.apache.org/viewvc?rev=1346402view=rev
Log:
OAK-77: Consolidate Utilities - remove unused code, cleanup

Modified:

jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/ArrayUtils.java

jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/PathUtils.java

Modified: 
jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/ArrayUtils.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/ArrayUtils.java?rev=1346402r1=1346401r2=1346402view=diff
==
--- 
jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/ArrayUtils.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/ArrayUtils.java
 Tue Jun  5 14:48:40 2012
@@ -31,6 +31,7 @@ public class ArrayUtils {
 public static final int[] EMPTY_INTEGER_ARRAY = new int[0];
 
 private ArrayUtils() {
+// utility class
 }
 
 /**

Modified: 
jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/PathUtils.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/PathUtils.java?rev=1346402r1=1346401r2=1346402view=diff
==
--- 
jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/PathUtils.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/PathUtils.java
 Tue Jun  5 14:48:40 2012
@@ -17,7 +17,6 @@
 package org.apache.jackrabbit.oak.commons;
 
 import javax.annotation.Nonnull;
-import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.NoSuchElementException;
 
@@ -30,7 +29,6 @@ import java.util.NoSuchElementException;
  * the the result of this method is undefined.
  */
 public class PathUtils {
-private static final String[] EMPTY_ARRAY = new String[0];
 
 private PathUtils() {
 // utility class




svn commit: r1347648 - in /jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/json/fast: JsopArray.java JsopObject.java JsopObjectTest.java

2012-06-07 Thread thomasm
Author: thomasm
Date: Thu Jun  7 14:45:26 2012
New Revision: 1347648

URL: http://svn.apache.org/viewvc?rev=1347648view=rev
Log:
OAK-19 JSON utilities (code cleanup)

Modified:

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/json/fast/JsopArray.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/json/fast/JsopObject.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/json/fast/JsopObjectTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/json/fast/JsopArray.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/json/fast/JsopArray.java?rev=1347648r1=1347647r2=1347648view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/json/fast/JsopArray.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/json/fast/JsopArray.java
 Thu Jun  7 14:45:26 2012
@@ -100,6 +100,7 @@ public class JsopArray extends Jsop impl
 return list.size();
 }
 
+@Override
 public String toString() {
 if (jsop == null) {
 JsopBuilder w = new JsopBuilder();

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/json/fast/JsopObject.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/json/fast/JsopObject.java?rev=1347648r1=1347647r2=1347648view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/json/fast/JsopObject.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/json/fast/JsopObject.java
 Thu Jun  7 14:45:26 2012
@@ -136,6 +136,7 @@ public class JsopObject extends Jsop imp
 jsop = null;
 }
 
+@Override
 public String toString() {
 if (jsop == null) {
 JsopBuilder w = new JsopBuilder();

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/json/fast/JsopObjectTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/json/fast/JsopObjectTest.java?rev=1347648r1=1347647r2=1347648view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/json/fast/JsopObjectTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/json/fast/JsopObjectTest.java
 Thu Jun  7 14:45:26 2012
@@ -103,7 +103,7 @@ public class JsopObjectTest extends Test
 // expected
 }
 String s = ;
-for(Object o : a) {
+for (Object o : a) {
 s += o + ;;
 }
 assertEquals(1;null;Hello;[];{};, s);




svn commit: r1347985 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/mk/index/ main/java/org/apache/jackrabbit/oak/query/index/ test/java/org/apache/jackrabbit/mk/index/ test/

2012-06-08 Thread thomasm
Author: thomasm
Date: Fri Jun  8 09:49:56 2012
New Revision: 1347985

URL: http://svn.apache.org/viewvc?rev=1347985view=rev
Log:
OAK-137 Query: content index (improved robustness, moved code away from the 
index wrapper to the indexer, don't use a colon in the node name for JCR 
compatibility)

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTree.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTreeLeaf.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTreeNode.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTreePage.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Index.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/PrefixIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/PropertyIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/PropertyContentIndex.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/IndexTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/PrefixIndexTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/PropertyIndexTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/wrapper/IndexWrapperTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryTest.txt

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTree.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTree.java?rev=1347985r1=1347984r2=1347985view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTree.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTree.java
 Fri Jun  8 09:49:56 2012
@@ -129,7 +129,7 @@ public class BTree {
 JsopBuilder jsop = new JsopBuilder();
 path = PathUtils.concat(name, path);
 jsop.tag('^').key(PathUtils.concat(path, propertyName));
-if (data.length == 0) {
+if (data == null) {
 jsop.value(null);
 } else {
 jsop.array();
@@ -208,7 +208,6 @@ public class BTree {
 break;
 }
 }
-commit();
 return true;
 }
 
@@ -240,8 +239,6 @@ public class BTree {
 // other node now)
 n = parent;
 }
-// subsequent operations are based on the new structure
-commit();
 }
 if (n instanceof BTreeNode) {
 BTreeNode page = (BTreeNode) n;
@@ -269,11 +266,6 @@ public class BTree {
 break;
 }
 }
-commit();
-}
-
-void commit() {
-indexer.commit();
 }
 
 String getName() {

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTreeLeaf.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTreeLeaf.java?rev=1347985r1=1347984r2=1347985view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTreeLeaf.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTreeLeaf.java
 Fri Jun  8 09:49:56 2012
@@ -29,6 +29,7 @@ class BTreeLeaf extends BTreePage {
 
 BTreeLeaf(BTree tree, BTreeNode parent, String name, String[] data, 
String[] paths) {
 super(tree, parent, name, data, paths);
+verify();
 }
 
 BTreeLeaf nextLeaf() {
@@ -56,22 +57,27 @@ class BTreeLeaf extends BTreePage {
 tree.modified(this);
 keys = ArrayUtils.arrayInsert(keys, pos, key);
 values = ArrayUtils.arrayInsert(values, pos, value);
+verify();
 }
 
 void delete(int pos) {
 tree.modified(this);
 keys = ArrayUtils.arrayRemove(keys, pos);
 values = ArrayUtils.arrayRemove(values, pos);
+verify();
 }
 
 void writeData() {
+verify();
 tree.modified(this);
+tree.bufferSetArray(getPath(), children, null);
 tree.bufferSetArray(getPath(), keys, keys);
 tree.bufferSetArray(getPath(), values, values);
 }
 
 @Override
 void writeCreate

svn commit: r1347991 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/LogWrapper.java

2012-06-08 Thread thomasm
Author: thomasm
Date: Fri Jun  8 09:55:42 2012
New Revision: 1347991

URL: http://svn.apache.org/viewvc?rev=1347991view=rev
Log:
OAK-126 remove unused code

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/LogWrapper.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/LogWrapper.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/LogWrapper.java?rev=1347991r1=1347990r2=1347991view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/LogWrapper.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/LogWrapper.java
 Fri Jun  8 09:55:42 2012
@@ -264,10 +264,6 @@ public class LogWrapper implements Micro
 log(//  + quote(result));
 }
 
-private void logResult() {
-// ignored
-}
-
 private void log(String message) {
 if (DEBUG) {
 System.out.println(message);




svn commit: r1349882 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/mk/index/ test/java/org/apache/jackrabbit/mk/index/

2012-06-13 Thread thomasm
Author: thomasm
Date: Wed Jun 13 14:42:22 2012
New Revision: 1349882

URL: http://svn.apache.org/viewvc?rev=1349882view=rev
Log:
OAK-137 Query: content index (simplify the API a bit)

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/IndexTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/PrefixIndexTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/PropertyIndexTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java?rev=1349882r1=1349881r2=1349882view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java
 Wed Jun 13 14:42:22 2012
@@ -39,7 +39,7 @@ public class IndexWrapper extends MicroK
 
 public IndexWrapper(MicroKernel mk) {
 this.mk = MicroKernelWrapperBase.wrap(mk);
-this.indexer = new Indexer(this, mk, Indexer.INDEX_CONFIG_ROOT);
+this.indexer = new Indexer(mk);
 indexer.init();
 }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java?rev=1349882r1=1349881r2=1349882view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java
 Wed Jun 13 14:42:22 2012
@@ -17,6 +17,7 @@
 package org.apache.jackrabbit.mk.index;
 
 import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.mk.api.MicroKernelException;
 import org.apache.jackrabbit.mk.json.JsopBuilder;
 import org.apache.jackrabbit.mk.json.JsopReader;
 import org.apache.jackrabbit.mk.json.JsopTokenizer;
@@ -30,7 +31,6 @@ import org.apache.jackrabbit.oak.spi.Que
 import org.apache.jackrabbit.oak.spi.QueryIndexProvider;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -63,9 +63,8 @@ public class Indexer implements QueryInd
 private static final boolean DISABLED = 
Boolean.getBoolean(mk.indexDisabled);
 
 private MicroKernel mk;
-private MicroKernel mkWrapper;
 private String revision;
-private String indexRootNode;
+private String indexRootNode = INDEX_CONFIG_ROOT;
 private int indexRootNodeDepth;
 private StringBuilder buffer;
 private ArrayListQueryIndex queryIndexList;
@@ -89,18 +88,25 @@ public class Indexer implements QueryInd
  */
 private final HashMapString, PropertyIndex propertyIndexes = new 
HashMapString, PropertyIndex();
 
-public Indexer(MicroKernel mkWrapper, MicroKernel mk, String 
indexRootNode) {
-this.mkWrapper = mkWrapper;
-if (mkWrapper instanceof IndexWrapper) {
-this.mk = ((IndexWrapper) mkWrapper).getBaseKernel();
-} else {
-this.mk = mk;
-}
-this.indexRootNode = indexRootNode;
+Indexer(MicroKernel mk) {
+this.mk = mk;
 }
 
-public Indexer(MicroKernel mk) {
-this(mk, mk, INDEX_CONFIG_ROOT);
+/**
+ * Get the indexer for the given MicroKernel. This will either create a 
new instance,
+ * or (if the MicroKernel is an IndexWrapper), return the existing indexer.
+ *
+ * @param mk the MicroKernel instance
+ * @return an indexer
+ */
+public static Indexer getInstance(MicroKernel mk) {
+if (mk instanceof IndexWrapper) {
+Indexer indexer = ((IndexWrapper) mk).getIndexer();
+if (indexer != null) {
+return indexer;
+}
+}
+return new Indexer(mk);
 }
 
 public String getIndexRootNode() {
@@ -371,7 +377,18 @@ public class Indexer implements QueryInd
 JsopBuilder jsop = new JsopBuilder();
 jsop.tag('^').key(rev).value(readRevision);
 buffer(jsop.toString());
-commitChanges();
+try {
+commitChanges();
+} catch (MicroKernelException e) {
+if (!mk.nodeExists(indexRootNode, revision)) {
+// the index node itself was removed, which is
+// unexpected but possible - re-create it
+init = false;
+init

svn commit: r1349886 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/core/ main/java/org/apache/jackrabbit/oak/query/ main/java/org/apache/jackrabbit/oak/query/ast/ main/j

2012-06-13 Thread thomasm
Author: thomasm
Date: Wed Jun 13 14:43:56 2012
New Revision: 1349886

URL: http://svn.apache.org/viewvc?rev=1349886view=rev
Log:
OAK-34 Define query API (simplify the Cursor interface; use the oak-core Tree 
implementation)

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElement.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/JoinImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SourceImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/PropertyContentIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingCursor.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/Cursor.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryTest.txt

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java?rev=1349886r1=1349885r2=1349886view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
 Wed Jun 13 14:43:56 2012
@@ -71,6 +71,7 @@ public class ContentRepositoryImpl imple
  */
 public ContentRepositoryImpl() {
 this(new MicroKernelImpl(), null, null);
+// this(new IndexWrapper(new MicroKernelImpl()), null, null);
 }
 
 /**
@@ -79,6 +80,7 @@ public class ContentRepositoryImpl imple
  *
  * @param microKernel underlying kernel instance
  * @param indexProvider index provider
+ * @param validatorProvider the validation provider
  */
 public ContentRepositoryImpl(MicroKernel microKernel, QueryIndexProvider 
indexProvider,
 ValidatorProvider validatorProvider) {
@@ -112,7 +114,7 @@ public class ContentRepositoryImpl imple
 }
 
 private static QueryIndexProvider getDefaultIndexProvider(MicroKernel mk) {
-return new Indexer(mk);
+return Indexer.getInstance(mk);
 }
 
 @Nonnull

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java?rev=1349886r1=1349885r2=1349886view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 Wed Jun 13 14:43:56 2012
@@ -23,6 +23,7 @@ import org.apache.jackrabbit.mk.api.Micr
 import org.apache.jackrabbit.oak.api.ContentSession;
 import org.apache.jackrabbit.oak.api.CoreValue;
 import org.apache.jackrabbit.oak.api.CoreValueFactory;
+import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 import org.apache.jackrabbit.oak.query.ast.AstVisitorBase;
 import org.apache.jackrabbit.oak.query.ast.BindVariableValueImpl;
@@ -506,4 +507,8 @@ public class Query {
 return namePathMapper;
 }
 
+public Tree getTree(String path) {
+return session.getCurrentRoot().getTree(path);
+}
+
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElement.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElement.java?rev=1349886r1=1349885r2=1349886view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElement.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElement.java
 Wed Jun 13 14:43:56 2012
@@ -22,6 +22,7 @@ import org.apache.jackrabbit.mk.json.Jso
 import org.apache.jackrabbit.mk.json.JsopTokenizer;
 import

svn commit: r1358172 - in /jackrabbit/oak/trunk/oak-jcr: ./ src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/ src/test/java/org/apache/jackrabbit/oak/jcr/query/

2012-07-06 Thread thomasm
Author: thomasm
Date: Fri Jul  6 12:51:10 2012
New Revision: 1358172

URL: http://svn.apache.org/viewvc?rev=1358172view=rev
Log:
OAK-155 Query: limited support for the deprecated JCR 1.0 query language 
Query.SQL

Modified:
jackrabbit/oak/trunk/oak-jcr/pom.xml

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/ColumnImpl.java

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/Operator.java

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/OrderingImpl.java

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/QOMNode.java

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/SelectorImpl.java

jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryTest.java

Modified: jackrabbit/oak/trunk/oak-jcr/pom.xml
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/pom.xml?rev=1358172r1=1358171r2=1358172view=diff
==
--- jackrabbit/oak/trunk/oak-jcr/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-jcr/pom.xml Fri Jul  6 12:51:10 2012
@@ -82,7 +82,6 @@ org.apache.jackrabbit.test.api.Lifecycle
 org.apache.jackrabbit.test.api.query.GetPropertyNamesTest#testGetPropertyNames
 org.apache.jackrabbit.test.api.query.SaveTest#testConstraintViolationException
 org.apache.jackrabbit.test.api.query.SimpleSelectionTest#testSingleProperty
-org.apache.jackrabbit.test.api.query.XPathQueryLevel2Test#testMultiValueSearch
 
org.apache.jackrabbit.test.api.query.qom.ColumnTest#testExpandColumnsForNodeType
 org.apache.jackrabbit.test.api.query.qom.SelectorTest#testUnknownNodeType
 org.apache.jackrabbit.test.api.util

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/ColumnImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/ColumnImpl.java?rev=1358172r1=1358171r2=1358172view=diff
==
--- 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/ColumnImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/ColumnImpl.java
 Fri Jul  6 12:51:10 2012
@@ -53,9 +53,8 @@ public class ColumnImpl extends QOMNode 
 if (propertyName != null) {
 return getSelectorName() + '.' + getPropertyName()
 +  AS [ + columnName + ];
-} else {
-return getSelectorName() + .*;
 }
+return getSelectorName() + .*;
 }
 
 }

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/Operator.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/Operator.java?rev=1358172r1=1358171r2=1358172view=diff
==
--- 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/Operator.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/Operator.java
 Fri Jul  6 12:51:10 2012
@@ -97,9 +97,8 @@ public enum Operator {
 public String formatXpath(String a, String b) {
 if (this == LIKE) {
 return jcr:like( + a + ,  + b + ')';
-} else {
-return a + ' ' + xpath + ' ' + b;
 }
+return a + ' ' + xpath + ' ' + b;
 }
 
 /**

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/OrderingImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/OrderingImpl.java?rev=1358172r1=1358171r2=1358172view=diff
==
--- 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/OrderingImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/OrderingImpl.java
 Fri Jul  6 12:51:10 2012
@@ -47,9 +47,8 @@ public class OrderingImpl extends QOMNod
 public String toString() {
 if (order == Order.ASCENDING) {
 return operand +  ASC;
-} else {
-return operand +  DESC;
 }
+return operand +  DESC;
 }
 
 }

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/QOMNode.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/QOMNode.java?rev=1358172r1=1358171r2=1358172view=diff
==
--- 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak

svn commit: r1360570 - /jackrabbit/oak/trunk/oak-core/src/main/resources/org/

2012-07-12 Thread thomasm
Author: thomasm
Date: Thu Jul 12 08:02:04 2012
New Revision: 1360570

URL: http://svn.apache.org/viewvc?rev=1360570view=rev
Log:
OAK-57 Cleanup o.a.j.mk from oak-core (remove empty directory)

Removed:
jackrabbit/oak/trunk/oak-core/src/main/resources/org/



svn commit: r1360591 - /jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java

2012-07-12 Thread thomasm
Author: thomasm
Date: Thu Jul 12 09:11:38 2012
New Revision: 1360591

URL: http://svn.apache.org/viewvc?rev=1360591view=rev
Log:
OAK-179 Tests should not fail if there is a jcr:system node

Modified:

jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java

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=1360591r1=1360590r2=1360591view=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
 Thu Jul 12 09:11:38 2012
@@ -223,9 +223,13 @@ public class RepositoryTest extends Abst
 root.getNode(bar).remove();  // transiently removed and...
 root.addNode(bar);   // ... added again
 NodeIterator nodes = root.getNodes();
-assertEquals(3, nodes.getSize());
+int expected = 3 + (root.hasNode(jcr:system) ? 1 : 0);
+assertEquals(expected, nodes.getSize());
 while (nodes.hasNext()) {
-assertTrue(nodeNames.remove(nodes.nextNode().getName()));
+   String name = nodes.nextNode().getName();
+   if (!name.equals(jcr:system)) {
+   assertTrue(nodeNames.remove(name));
+   }
 }
 
 assertTrue(nodeNames.isEmpty());
@@ -1491,29 +1495,34 @@ public class RepositoryTest extends Abst
 while (events.hasNext()) {
 Event event = events.nextEvent();
 try {
+String path = event.getPath();
+if (path.startsWith(/jcr:system)) {
+   // ignore changes in jcr:system
+   continue;
+}
 switch (event.getType()) {
 case Event.NODE_ADDED:
-if (!addNodes.remove(event.getPath())) {
+if (!addNodes.remove(path)) {
 failedEvents.add(event);
 }
 break;
 case Event.NODE_REMOVED:
-if (!removeNodes.remove(event.getPath())) {
+if (!removeNodes.remove(path)) {
 failedEvents.add(event);
 }
 break;
 case Event.PROPERTY_ADDED:
-if 
(!addProperties.remove(event.getPath())) {
+if (!addProperties.remove(path)) {
 failedEvents.add(event);
 }
 break;
 case Event.PROPERTY_CHANGED:
-if 
(!setProperties.remove(event.getPath())) {
+if (!setProperties.remove(path)) {
 failedEvents.add(event);
 }
 break;
 case Event.PROPERTY_REMOVED:
-if 
(!removeProperties.remove(event.getPath())) {
+if (!removeProperties.remove(path)) {
 failedEvents.add(event);
 }
 break;
@@ -1584,24 +1593,29 @@ public class RepositoryTest extends Abst
 while (events.hasNext()) {
 Event event = events.nextEvent();
 try {
+String path = event.getPath();
+if (path.startsWith(/jcr:system)) {
+   // ignore changes in jcr:system
+   continue;
+}
 switch (event.getType()) {
 case Event.NODE_ADDED:
-if (!addNodes.remove(event.getPath())) {
+if (!addNodes.remove(path)) {
 failedEvents.add(event);
 }
 break;
 case Event.NODE_REMOVED

svn commit: r1361938 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/mk/index/ test/java/org/apache/jackrabbit/mk/index/ test/resources/org/apache/jackrabbit/oak/query/

2012-07-16 Thread thomasm
Author: thomasm
Date: Mon Jul 16 08:46:48 2012
New Revision: 1361938

URL: http://svn.apache.org/viewvc?rev=1361938view=rev
Log:
OAK-181 Observation / indexing: don't create events for index updates - store 
the index content in a child node

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTree.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTreeLeaf.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTreeNode.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTreePage.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/PrefixIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/PropertyIndex.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/PrefixIndexTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/PropertyIndexTest.java

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryTest.txt

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTree.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTree.java?rev=1361938r1=1361937r2=1361938view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTree.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTree.java
 Mon Jul 16 08:46:48 2012
@@ -37,11 +37,7 @@ public class BTree {
 this.indexer = indexer;
 this.name = name;
 this.unique = unique;
-if (!indexer.nodeExists(name)) {
-JsopBuilder jsop = new JsopBuilder();
-jsop.tag('+').key(name).object().endObject();
-indexer.commit(jsop.toString());
-}
+indexer.createNodes(PathUtils.concat(name, Indexer.INDEX_CONTENT));
 }
 
 public void setMinSize(int minSize) {
@@ -127,7 +123,7 @@ public class BTree {
 
 void bufferSetArray(String path, String propertyName, String[] data) {
 JsopBuilder jsop = new JsopBuilder();
-path = PathUtils.concat(name, path);
+path = PathUtils.concat(name, Indexer.INDEX_CONTENT, path);
 jsop.tag('^').key(PathUtils.concat(path, propertyName));
 if (data == null) {
 jsop.value(null);
@@ -151,7 +147,7 @@ public class BTree {
 
 void bufferDelete(String path) {
 JsopBuilder jsop = new JsopBuilder();
-jsop.tag('-').value(PathUtils.concat(name, path));
+jsop.tag('-').value(PathUtils.concat(name, Indexer.INDEX_CONTENT, 
path));
 jsop.newline();
 indexer.buffer(jsop.toString());
 }
@@ -164,7 +160,7 @@ public class BTree {
 indexer.modified(this, page, false);
 }
 
-public void moveCache(String oldPath) {
+void moveCache(String oldPath) {
 indexer.moveCache(this, oldPath);
 }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTreeLeaf.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTreeLeaf.java?rev=1361938r1=1361937r2=1361938view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTreeLeaf.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/BTreeLeaf.java
 Mon Jul 16 08:46:48 2012
@@ -79,8 +79,20 @@ class BTreeLeaf extends BTreePage {
 void writeCreate() {
 verify();
 tree.modified(this);
+tree.buffer(getJsop());
+}
+
+private void verify() {
+if (values.length != keys.length) {
+throw new IllegalArgumentException(
+Number of values doesn't match number of keys:  +
+Arrays.toString(values) +   + Arrays.toString(keys));
+}
+}
+
+private String getJsop() {
 JsopBuilder jsop = new JsopBuilder();
-jsop.tag('+').key(PathUtils.concat(tree.getName(), 
getPath())).object();
+jsop.tag('+').key(PathUtils.concat(tree.getName(), 
Indexer.INDEX_CONTENT, getPath())).object();
 jsop.key(keys).array();
 for (String k : keys) {
 jsop.value(k);
@@ -93,15 +105,12 @@ class BTreeLeaf extends BTreePage {
 jsop.endArray();
 jsop.endObject();
 jsop.newline();
-tree.buffer(jsop.toString());
+return jsop.toString();
 }
 
-void verify() {
-if (values.length != keys.length) {
-throw new IllegalArgumentException(
-Number

svn commit: r1364616 - in /jackrabbit/oak/trunk/oak-mk/src: main/java/org/apache/jackrabbit/mk/blobs/ test/java/org/apache/jackrabbit/mk/json/ test/java/org/apache/jackrabbit/mk/util/

2012-07-23 Thread thomasm
Author: thomasm
Date: Mon Jul 23 12:58:30 2012
New Revision: 1364616

URL: http://svn.apache.org/viewvc?rev=1364616view=rev
Log:
OAK-202 Simplify the code when possible

Modified:

jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java

jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/json/JsopStreamTest.java

jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/json/JsopTest.java

jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/util/IOUtilsTest.java

jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/util/MicroKernelInputStreamTest.java

Modified: 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java?rev=1364616r1=1364615r2=1364616view=diff
==
--- 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java
 Mon Jul 23 12:58:30 2012
@@ -331,7 +331,7 @@ public abstract class AbstractBlobStore 
 return;
 } else if (type == TYPE_DATA) {
 int len = IOUtils.readVarInt(idStream);
-IOUtils.skipFully(idStream, (int) len);
+IOUtils.skipFully(idStream, len);
 } else if (type == TYPE_HASH) {
 int level = IOUtils.readVarInt(idStream);
 // totalLength

Modified: 
jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/json/JsopStreamTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/json/JsopStreamTest.java?rev=1364616r1=1364615r2=1364616view=diff
==
--- 
jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/json/JsopStreamTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/json/JsopStreamTest.java
 Mon Jul 23 12:58:30 2012
@@ -19,8 +19,6 @@ package org.apache.jackrabbit.mk.json;
 import junit.framework.TestCase;
 import org.apache.jackrabbit.mk.util.StopWatch;
 
-import java.io.IOException;
-
 public class JsopStreamTest extends TestCase {
 
 // run the micro-benchmark
@@ -57,7 +55,7 @@ public class JsopStreamTest extends Test
 testRawValue(new JsopTokenizer(s.toString()));
 }
 
-private void testRawValue(JsopReader s) {
+private static void testRawValue(JsopReader s) {
 for (int i = 0; i  3; i++) {
 assertFalse(s.matches('-'));
 assertTrue(s.matches('+'));
@@ -193,7 +191,7 @@ public class JsopStreamTest extends Test
 }
 }
 
-public void testBuilder() throws IOException {
+public static void testBuilder() {
 
 JsopWriter buff = new JsopStream();
 buff.tag('+').object().

Modified: 
jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/json/JsopTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/json/JsopTest.java?rev=1364616r1=1364615r2=1364616view=diff
==
--- 
jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/json/JsopTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/json/JsopTest.java
 Mon Jul 23 12:58:30 2012
@@ -19,8 +19,6 @@ package org.apache.jackrabbit.mk.json;
 import junit.framework.TestCase;
 import org.apache.jackrabbit.mk.util.StopWatch;
 
-import java.io.IOException;
-
 /**
  * Test the Jsop tokenizer and builder.
  */
@@ -36,7 +34,7 @@ public class JsopTest extends TestCase {
 for (int i = 0; i  1000; i++) {
 t2 += JsopBuilder.encode(s).length();
 }
-System.out.println(timer.seconds());
+System.out.println(timer.seconds() +  dummy:  + t2);
 }
 // old: not escaped: 5691 ms; escaped: 10609 ms
 // new: not escaped: 3931 ms; escaped: 11001 ms
@@ -290,7 +288,7 @@ public class JsopTest extends TestCase {
 }
 }
 
-public void testBuilder() throws IOException {
+public void testBuilder() {
 
 JsopBuilder buff = new JsopBuilder();
 buff.tag('+').object().
@@ -334,7 +332,7 @@ public class JsopTest extends TestCase {
 
 }
 
-public void testEscape() throws IOException {
+public void testEscape() {
 assertEquals(null, JsopBuilder.encode(null));
 JsopBuilder buff = new JsopBuilder().
 key(back\\slash).value(\\).

Modified: 
jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/util/IOUtilsTest.java
URL

svn commit: r1364960 - in /jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/large: CreateRandomNodesTraverseTest.java DescendantCountTest.java NodeCreator.java RandomNodeCreator.ja

2012-07-24 Thread thomasm
Author: thomasm
Date: Tue Jul 24 10:12:42 2012
New Revision: 1364960

URL: http://svn.apache.org/viewvc?rev=1364960view=rev
Log:
OAK-122 Performance test suite (RandomNodeCreator from Mete)

Added:

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/large/CreateRandomNodesTraverseTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/large/RandomNodeCreator.java
Modified:

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/large/DescendantCountTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/large/NodeCreator.java

Added: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/large/CreateRandomNodesTraverseTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/large/CreateRandomNodesTraverseTest.java?rev=1364960view=auto
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/large/CreateRandomNodesTraverseTest.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/large/CreateRandomNodesTraverseTest.java
 Tue Jul 24 10:12:42 2012
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to You under the Apache License, Version 2.0 (the
+ * License); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law
+ * or agreed to in writing, software distributed under the License is
+ * distributed on an AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */
+package org.apache.jackrabbit.mk.large;
+
+import org.apache.jackrabbit.mk.MultiMkTestBase;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+/**
+ * Creates and then reads nodes distributed in a tree with random width at each
+ * level.
+ */
+@RunWith(Parameterized.class)
+public class CreateRandomNodesTraverseTest extends MultiMkTestBase {
+
+public CreateRandomNodesTraverseTest(String url) {
+super(url);
+}
+
+@Test
+public void test() throws Exception {
+RandomNodeCreator c = new RandomNodeCreator(mk, 1);
+c.setTotalCount(200);
+c.setMaxWidth(10);
+// c.setLogToSystemOut(true);
+
+// 1 million node test
+// c.setLogToSystemOut(true);
+// c.setTotalCount(100);
+
+// 20 million node test
+// c.setTotalCount(2000);
+
+c.create();
+c.traverse();
+}
+}
\ No newline at end of file

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/large/DescendantCountTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/large/DescendantCountTest.java?rev=1364960r1=1364959r2=1364960view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/large/DescendantCountTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/large/DescendantCountTest.java
 Tue Jul 24 10:12:42 2012
@@ -56,7 +56,7 @@ public class DescendantCountTest extends
 
 NodeCreator c = new NodeCreator(mk);
 for (int i = 1; i  20; i++) {
-c.setNodeName(test + i);
+c.setTestRoot(test + i);
 c.setWidth(2);
 c.setTotalCount(i);
 c.setData(null);

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/large/NodeCreator.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/large/NodeCreator.java?rev=1364960r1=1364959r2=1364960view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/large/NodeCreator.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/large/NodeCreator.java
 Tue Jul 24 10:12:42 2012
@@ -23,11 +23,16 @@ import org.apache.jackrabbit.mk.api.Micr
  */
 public class NodeCreator {
 
+private static final String DEFAULT_TEST_ROOT = test;
+private static final int DEFAULT_COUNT = 200;
+private static final int DEFAULT_WIDTH = 30;
+
 private final MicroKernel mk;
+private String testRoot = DEFAULT_TEST_ROOT;
+private int totalCount = DEFAULT_COUNT;
+private int width = DEFAULT_WIDTH;
 private String

svn commit: r1364999 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/ oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/ oak-jcr/src/main/java/org/

2012-07-24 Thread thomasm
Author: thomasm
Date: Tue Jul 24 12:10:33 2012
New Revision: 1364999

URL: http://svn.apache.org/viewvc?rev=1364999view=rev
Log:
OAK-182 Support for invisible internal content

Added:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeStateUtils.java
Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneEditor.java

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ChangeProcessor.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneEditor.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneEditor.java?rev=1364999r1=1364998r2=1364999view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneEditor.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneEditor.java
 Tue Jul 24 12:10:33 2012
@@ -27,6 +27,7 @@ import org.apache.jackrabbit.oak.spi.com
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.spi.state.NodeStateDiff;
+import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.analysis.standard.StandardAnalyzer;
@@ -123,6 +124,9 @@ public class LuceneEditor implements Com
 
 @Override
 public void childNodeAdded(String name, NodeState after) {
+if (NodeStateUtils.isHidden(name)) {
+return;
+}
 if (exception == null) {
 try {
 addSubtree(path + / + name, after);
@@ -135,6 +139,9 @@ public class LuceneEditor implements Com
 @Override
 public void childNodeChanged(
 String name, NodeState before, NodeState after) {
+if (NodeStateUtils.isHidden(name)) {
+return;
+}
 if (exception == null) {
 try {
 LuceneDiff diff = new LuceneDiff(writer, path + / + 
name);
@@ -148,6 +155,9 @@ public class LuceneEditor implements Com
 
 @Override
 public void childNodeDeleted(String name, NodeState before) {
+if (NodeStateUtils.isHidden(name)) {
+return;
+}
 if (exception == null) {
 try {
 deleteSubtree(path + / + name, before);

Added: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeStateUtils.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeStateUtils.java?rev=1364999view=auto
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeStateUtils.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeStateUtils.java
 Tue Jul 24 12:10:33 2012
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the License); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.spi.state;
+
+/**
+ * Utility method for code that deals with node states.
+ */
+public class NodeStateUtils {
+
+/**
+ * Check whether the node or property with the given name is hidden, that
+ * is, if the node name starts with a :.
+ *
+ * @param name the node or property name
+ * @return true if the item is hidden
+ */
+public static boolean isHidden(String name) {
+return name.startsWith(:);
+}
+
+}

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ChangeProcessor.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ChangeProcessor.java?rev=1364999r1=1364998r2=1364999view=diff

svn commit: r1365000 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/mk/simple/ main/java/org/apache/jackrabbit/mk/wrapper/ main/java/org/apache/jackrabbit/oak/query/index/ te

2012-07-24 Thread thomasm
Author: thomasm
Date: Tue Jul 24 12:16:11 2012
New Revision: 1365000

URL: http://svn.apache.org/viewvc?rev=1365000view=rev
Log:
OAK-202 Simplify the code when possible

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeListTrie.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeMap.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/SimpleKernelImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/LogWrapper.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/MicroKernelWrapperBase.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/SecurityWrapper.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/VirtualRepositoryWrapper.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingCursor.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingIndex.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/MultiMkTestBase.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/simple/AscendingClockTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/wrapper/SecurityWrapperTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/FullTextTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/LikePatternTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeImpl.java?rev=1365000r1=1364999r2=1365000view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeImpl.java
 Tue Jul 24 12:16:11 2012
@@ -198,11 +198,11 @@ public class NodeImpl implements Cache.V
 throw ExceptionFactory.get(Node not found:  + path);
 }
 long diffDescendant = -n.descendantCount;
-long diffInline = -n.descendantInlineCount;
+// long diffInline = -n.descendantInlineCount;
 NodeImpl n2 = n.cloneAndAddChildNode(path.substring(index + 1), 
before, position, newNode, revId);
 NodeImpl clone = setChild(child, n2, revId);
 diffDescendant += n2.descendantCount;
-diffInline += n2.descendantInlineCount;
+// diffInline += n2.descendantInlineCount;
 clone.descendantCount += diffDescendant;
 clone.descendantInlineCount += diffDescendant;
 return clone;
@@ -625,17 +625,14 @@ public class NodeImpl implements Cache.V
 String key = t.readString();
 t.read(':');
 String value = t.readRawValue();
-if (key.length()  0  key.charAt(0) == ':') {
-if (key.equals(CHILDREN)) {
-node.childNodes = NodeListTrie.read(t, map, value);
-} else if (key.equals(DESCENDANT_COUNT)) {
-node.descendantCount = Long.parseLong(value);
-descendantCountSet = true;
-} else if (key.equals(HASH)) {
-
node.id.setHash(StringUtils.convertHexToBytes(JsopTokenizer.decodeQuoted(value)));
-} else {
-node.setProperty(key, value);
-}
+boolean hidden = key.length()  0  key.charAt(0) == ':';
+if (hidden  key.equals(CHILDREN)) {
+node.childNodes = NodeListTrie.read(t, map, value);
+} else if (hidden  key.equals(DESCENDANT_COUNT)) {
+node.descendantCount = Long.parseLong(value);
+descendantCountSet = true;
+} else if (hidden  key.equals(HASH)) {
+
node.id.setHash(StringUtils.convertHexToBytes(JsopTokenizer.decodeQuoted(value)));
 } else if (map.isId(value)) {
 if (node.childNodes == null) {
 node.childNodes = new NodeListSmall();
@@ -691,6 +688,9 @@ public class NodeImpl implements Cache.V
 }
 }
 
+/**
+ * A visitor over the child nodes.
+ */
 interface ChildVisitor {
 void accept(NodeId childId);
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeListTrie.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache

svn commit: r1365002 - in /jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query: ./ qom/

2012-07-24 Thread thomasm
Author: thomasm
Date: Tue Jul 24 12:17:17 2012
New Revision: 1365002

URL: http://svn.apache.org/viewvc?rev=1365002view=rev
Log:
OAK-202 Simplify the code when possible

Removed:

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/QOMVisitor.java
Modified:

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/DynamicOperandImpl.java

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/JoinConditionImpl.java

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/LiteralImpl.java

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/QOMNode.java

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/QueryObjectModelImpl.java

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/SourceImpl.java

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/StaticOperandImpl.java

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java?rev=1365002r1=1365001r2=1365002view=diff
==
--- 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java
 Tue Jul 24 12:17:17 2012
@@ -79,7 +79,7 @@ public class QueryResultImpl implements 
 
 @Override
 public RowIterator getRows() throws RepositoryException {
-IteratorRowImpl it = new IteratorRowImpl() {
+IteratorRowImpl rowIterator = new IteratorRowImpl() {
 
 private final Iterator? extends ResultRow it = 
result.getRows().iterator();
 private RowImpl current;
@@ -90,7 +90,7 @@ public class QueryResultImpl implements 
 
 private void fetch() {
 current = null;
-while(it.hasNext()) {
+while (it.hasNext()) {
 ResultRow r = it.next();
 for (String s : getSelectorNames()) {
 String path = r.getPath(s);
@@ -123,7 +123,7 @@ public class QueryResultImpl implements 
 }
 
 };
-return new RowIteratorAdapter(it);
+return new RowIteratorAdapter(rowIterator);
 }
 
 @CheckForNull
@@ -142,7 +142,7 @@ public class QueryResultImpl implements 
 throw new RepositoryException(Query contains more than one 
selector:  +
 Arrays.toString(getSelectorNames()));
 }
-IteratorNodeImpl it = new IteratorNodeImpl() {
+IteratorNodeImpl nodeIterator = new IteratorNodeImpl() {
 
 private final Iterator? extends ResultRow it = 
result.getRows().iterator();
 private NodeImpl current;
@@ -153,7 +153,7 @@ public class QueryResultImpl implements 
 
 private void fetch() {
 current = null;
-while(it.hasNext()) {
+while (it.hasNext()) {
 ResultRow r = it.next();
 String path = r.getPath();
 if (includeRow(path)) {
@@ -184,7 +184,7 @@ public class QueryResultImpl implements 
 }
 
 };
-return new NodeIteratorAdapter(it);
+return new NodeIteratorAdapter(nodeIterator);
 }
 
 Value createValue(CoreValue value) {

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/DynamicOperandImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/DynamicOperandImpl.java?rev=1365002r1=1365001r2=1365002view=diff
==
--- 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/DynamicOperandImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/DynamicOperandImpl.java
 Tue Jul 24 12:17:17 2012
@@ -18,6 +18,9 @@ package org.apache.jackrabbit.oak.jcr.qu
 
 import javax.jcr.query.qom.DynamicOperand;
 
+/**
+ * The base class for dynamic operands.
+ */
 public abstract class DynamicOperandImpl extends QOMNode implements 
DynamicOperand {
 
 // base class without methods

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/JoinConditionImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/JoinConditionImpl.java?rev=1365002r1

svn commit: r1365006 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query: ./ ast/

2012-07-24 Thread thomasm
Author: thomasm
Date: Tue Jul 24 12:24:30 2012
New Revision: 1365006

URL: http://svn.apache.org/viewvc?rev=1365006view=rev
Log:
OAK-28 Query implementation (mainly Javadocs)

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ResultRowImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AndImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElement.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstVisitor.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstVisitorBase.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/BindVariableValueImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ChildNodeImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ChildNodeJoinConditionImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ColumnImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ConstraintImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DescendantNodeImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DescendantNodeJoinConditionImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DynamicOperandImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/EquiJoinConditionImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchScoreImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/JoinConditionImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/JoinImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LengthImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LiteralImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NotImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/OrImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/OrderingImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyExistenceImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SameNodeImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SameNodeJoinConditionImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SourceImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/StaticOperandImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/UpperCaseImpl.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java?rev=1365006r1=1365005r2=1365006view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 Tue Jul 24 12:24:30 2012
@@ -349,6 +349,9 @@ public class Query {
 source.prepare(mk);
 }
 
+/**
+ * An iterator over result rows.
+ */
 class RowIterator implements IteratorResultRowImpl {
 
 private final String revisionId;

Modified

svn commit: r1365072 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene: LuceneEditor.java LuceneIndex.java LuceneIndexProvider.java OakDirectory.java

2012-07-24 Thread thomasm
Author: thomasm
Date: Tue Jul 24 14:13:17 2012
New Revision: 1365072

URL: http://svn.apache.org/viewvc?rev=1365072view=rev
Log:
OAK-154 Full text search index - javadocs

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneEditor.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndexProvider.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/OakDirectory.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneEditor.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneEditor.java?rev=1365072r1=1365071r2=1365072view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneEditor.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneEditor.java
 Tue Jul 24 14:13:17 2012
@@ -42,6 +42,9 @@ import static org.apache.jackrabbit.oak.
 import static 
org.apache.jackrabbit.oak.plugins.lucene.FieldFactory.newPropertyField;
 import static org.apache.jackrabbit.oak.plugins.lucene.TermFactory.newPathTerm;
 
+/**
+ * This class updates a Lucene index when node content is changed.
+ */
 public class LuceneEditor implements CommitEditor {
 
 private static final Tika TIKA = new Tika();

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndex.java?rev=1365072r1=1365071r2=1365072view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndex.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndex.java
 Tue Jul 24 14:13:17 2012
@@ -46,6 +46,9 @@ import org.apache.lucene.search.TermRang
 import org.apache.lucene.search.TopDocs;
 import org.apache.lucene.store.Directory;
 
+/**
+ * This index uses internally runs a query against a Lucene index.
+ */
 public class LuceneIndex implements QueryIndex {
 
 private final NodeStore store;

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndexProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndexProvider.java?rev=1365072r1=1365071r2=1365072view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndexProvider.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndexProvider.java
 Tue Jul 24 14:13:17 2012
@@ -25,6 +25,10 @@ import org.apache.jackrabbit.oak.spi.Que
 import org.apache.jackrabbit.oak.spi.QueryIndexProvider;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 
+/**
+ * A provider for Lucene indexes. There is exactly one Lucene index instance 
per
+ * MicroKernel.
+ */
 public class LuceneIndexProvider implements QueryIndexProvider {
 
 @Override

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/OakDirectory.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/OakDirectory.java?rev=1365072r1=1365071r2=1365072view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/OakDirectory.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/OakDirectory.java
 Tue Jul 24 14:13:17 2012
@@ -37,6 +37,10 @@ import org.apache.lucene.store.NoLockFac
 
 import com.google.common.collect.Iterables;
 
+/**
+ * An implementation of the Lucene directory (a flat list of files) that allows
+ * to store Lucene index content in an Oak repository.
+ */
 class OakDirectory extends Directory {
 
 private final CoreValueFactory factory;




svn commit: r1368520 - in /jackrabbit/oak/trunk/oak-mk/src: main/java/org/apache/jackrabbit/mk/blobs/ test/java/org/apache/jackrabbit/mk/blobs/

2012-08-02 Thread thomasm
Author: thomasm
Date: Thu Aug  2 15:17:26 2012
New Revision: 1368520

URL: http://svn.apache.org/viewvc?rev=1368520view=rev
Log:
OAK-209 BlobStore: use SHA-256 instead of SHA-1, and use two directory levels 
for FileBlobStore

Modified:

jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java

jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/BlobStore.java

jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/FileBlobStore.java

jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/MemoryBlobStore.java

jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStoreTest.java

jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/blobs/DbBlobStoreTest.java

jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/blobs/FileBlobStoreTest.java

jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/blobs/MemoryBlobStoreTest.java

Modified: 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java?rev=1368520r1=1368519r2=1368520view=diff
==
--- 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java
 Thu Aug  2 15:17:26 2012
@@ -65,11 +65,13 @@ import java.util.WeakHashMap;
  */
 public abstract class AbstractBlobStore implements Closeable, BlobStore, 
Cache.BackendAbstractBlobStore.BlockId, AbstractBlobStore.Data {
 
-protected static final String HASH_ALGORITHM = SHA-1;
+protected static final String HASH_ALGORITHM = SHA-256;
 
 protected static final int TYPE_DATA = 0;
 protected static final int TYPE_HASH = 1;
 protected static final int TYPE_HASH_COMPRESSED = 2;
+
+protected static final int BLOCK_SIZE_LIMIT = 48;
 
 protected MapString, WeakReferenceString inUse =
 Collections.synchronizedMap(new WeakHashMapString, 
WeakReferenceString());
@@ -78,7 +80,7 @@ public abstract class AbstractBlobStore 
  * The minimum size of a block. Smaller blocks are inlined (the data store 
id
  * is the data itself).
  */
-private int blockSizeMin = 256;
+private int blockSizeMin = 4096;
 
 /**
  * The size of a block. 128 KB has been found to be as fast as larger
@@ -89,6 +91,7 @@ public abstract class AbstractBlobStore 
 private CacheAbstractBlobStore.BlockId, Data cache = 
Cache.newInstance(this, 8 * 1024 * 1024);
 
 public void setBlockSizeMin(int x) {
+validateBlockSize(x);
 this.blockSizeMin = x;
 }
 
@@ -97,14 +100,23 @@ public abstract class AbstractBlobStore 
 }
 
 public void setBlockSize(int x) {
+validateBlockSize(x);
 this.blockSize = x;
 }
+
+private static void validateBlockSize(int x) {
+if (x  BLOCK_SIZE_LIMIT) {
+throw new IllegalArgumentException(
+The minimum size must be bigger  + 
+than a content hash itself; limit =  + BLOCK_SIZE_LIMIT);
+}
+}
 
 public int getBlockSize() {
 return blockSize;
 }
 
-public String addBlob(String tempFilePath) throws Exception {
+public String writeBlob(String tempFilePath) throws Exception {
 File file = new File(tempFilePath);
 InputStream in = null;
 try {
@@ -273,13 +285,25 @@ public abstract class AbstractBlobStore 
 }
 
 public Data load(BlockId id) {
+byte[] data;
 try {
-return new Data(readBlockFromBackend(id));
+data = readBlockFromBackend(id);
 } catch (Exception e) {
-throw new RuntimeException(failed to read block from backend, e);
+throw new RuntimeException(failed to read block from backend, id 
 + id, e);
+}
+if (data == null) {
+throw new IllegalArgumentException(The block with id  + id +  
was not found);
 }
+return new Data(data);
 }
 
+/**
+ * Load the block from the storage backend. Returns null if the block was
+ * not found.
+ * 
+ * @param id the block id
+ * @return the block data, or null
+ */
 protected abstract byte[] readBlockFromBackend(BlockId id) throws 
Exception;
 
 public long getBlobLength(String blobId) throws IOException {

Modified: 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/BlobStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/BlobStore.java?rev=1368520r1=1368519r2=1368520view=diff

svn commit: r1368542 - in /jackrabbit/oak/trunk/oak-mk/src: main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java main/java/org/apache/jackrabbit/mk/blobs/BlobStore.java test/java/org/apache

2012-08-02 Thread thomasm
Author: thomasm
Date: Thu Aug  2 15:32:28 2012
New Revision: 1368542

URL: http://svn.apache.org/viewvc?rev=1368542view=rev
Log:
OAK-209 BlobStore: remove BlobStore.close() and writeBlob(String tempFilePath) 
as they don't seem to be needed currently

Modified:

jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java

jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/BlobStore.java

jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStoreTest.java

Modified: 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java?rev=1368542r1=1368541r2=1368542view=diff
==
--- 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java
 Thu Aug  2 15:32:28 2012
@@ -22,7 +22,6 @@ import org.apache.jackrabbit.mk.util.Str
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
-import java.io.Closeable;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -63,7 +62,7 @@ import java.util.WeakHashMap;
  * long), size of data store id (variable size long), hash code length 
(variable
  * size int), hash code.
  */
-public abstract class AbstractBlobStore implements Closeable, BlobStore, 
Cache.BackendAbstractBlobStore.BlockId, AbstractBlobStore.Data {
+public abstract class AbstractBlobStore implements BlobStore, 
Cache.BackendAbstractBlobStore.BlockId, AbstractBlobStore.Data {
 
 protected static final String HASH_ALGORITHM = SHA-256;
 
@@ -116,6 +115,14 @@ public abstract class AbstractBlobStore 
 return blockSize;
 }
 
+/**
+ * Write a blob from a temporary file. The temporary file is removed
+ * afterwards. A file based blob stores might simply rename the file, so
+ * that no additional writes are necessary.
+ *
+ * @param tempFilePath the temporary file
+ * @return the blob id
+ */
 public String writeBlob(String tempFilePath) throws Exception {
 File file = new File(tempFilePath);
 InputStream in = null;
@@ -380,10 +387,6 @@ public abstract class AbstractBlobStore 
 }
 }
 
-public void close() {
-// ignore
-}
-
 /**
  * A block id. Blocks are small enough to fit in memory, so they can be
  * cached.

Modified: 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/BlobStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/BlobStore.java?rev=1368542r1=1368541r2=1368542view=diff
==
--- 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/BlobStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/BlobStore.java
 Thu Aug  2 15:32:28 2012
@@ -24,16 +24,6 @@ import java.io.InputStream;
 public interface BlobStore {
 
 /**
- * Write a blob from a temporary file. The temporary file is removed
- * afterwards. A file based blob stores might simply rename the file, so
- * that no additional writes are necessary.
- *
- * @param tempFilePath the temporary file
- * @return the blob id
- */
-String writeBlob(String tempFilePath) throws Exception;
-
-/**
  * Write a blob from an input stream.
  * This method closes the input stream.
  *
@@ -62,11 +52,4 @@ public interface BlobStore {
  */
 long getBlobLength(String blobId) throws Exception;
 
-/**
- * Close all internally used resources, such as file handles. This method
- * should be called at the end of the components lifecycle. After calling
- * this method, the blob store should no longer be used.
- */
-void close();
-
 }

Modified: 
jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStoreTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStoreTest.java?rev=1368542r1=1368541r2=1368542view=diff
==
--- 
jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStoreTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStoreTest.java
 Thu Aug  2 15:32:28 2012
@@ -47,10 +47,10 @@ public abstract class AbstractBlobStoreT
 public abstract void setUp() throws Exception;
 
 public void tearDown() throws Exception {
-store.close

svn commit: r1371198 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/BranchMergeMicroKernel.java

2012-08-09 Thread thomasm
Author: thomasm
Date: Thu Aug  9 13:18:57 2012
New Revision: 1371198

URL: http://svn.apache.org/viewvc?rev=1371198view=rev
Log:
OAK-45 Add support for branching and merging - wrapper to simplify testing with 
MicroKernel implementations that don't support branch and merge

Added:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/BranchMergeMicroKernel.java

Added: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/BranchMergeMicroKernel.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/BranchMergeMicroKernel.java?rev=1371198view=auto
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/BranchMergeMicroKernel.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/BranchMergeMicroKernel.java
 Thu Aug  9 13:18:57 2012
@@ -0,0 +1,216 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the License); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.mk.wrapper;
+
+import java.io.InputStream;
+import java.util.HashSet;
+import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.mk.api.MicroKernelException;
+
+/**
+ * A MicroKernel wrapper that provides limited support for branch and merge 
even
+ * if the underlying implementation does not support it.
+ */
+public class BranchMergeMicroKernel implements MicroKernel {
+
+private static final String TRUNK = trunk;
+
+private final MicroKernel base;
+private final HashSetString knownBranches = new HashSetString();
+private int nextBranch;
+private String trunkHeadRevision;
+private String busyBranch;
+
+public BranchMergeMicroKernel(MicroKernel base) {
+this.base = base;
+}
+
+@Override
+public synchronized String branch(String trunkRevisionId) {
+if (trunkRevisionId == null) {
+trunkRevisionId = getHeadRevision();
+}
+String head = base.getHeadRevision();
+String branchId = getBranchId(trunkRevisionId);
+if (!TRUNK.equals(branchId)) {
+throw new MicroKernelException(Cannot branch off a branch: 
++ trunkRevisionId);
+}
+trunkHeadRevision = head;
+String branch = b + nextBranch++;
+knownBranches.add(branch);
+String branchRev = branch + - + getHeadRevision();
+busyBranch = null;
+return branchRev;
+}
+
+private synchronized boolean isKnownBranch(String branchId) {
+if (TRUNK.equals(branchId)) {
+return false;
+}
+return knownBranches.contains(branchId);
+}
+
+private static String getBranchId(String revisionId) {
+int idx = revisionId.indexOf('-');
+if (idx = 0) {
+return TRUNK;
+}
+return revisionId.substring(0, idx);
+}
+
+private static String getRevisionId(String branchId, String revisionId) {
+if (TRUNK.equals(branchId)) {
+return revisionId;
+}
+return revisionId.substring(branchId.length() + 1);
+}
+
+private static String getCombinedRevisionId(String branchId,
+String revisionId) {
+if (TRUNK.equals(branchId)) {
+return revisionId;
+}
+return branchId + - + revisionId;
+}
+
+@Override
+public synchronized String commit(String path, String jsonDiff,
+String revisionId, String message) {
+if (revisionId == null) {
+revisionId = getHeadRevision();
+}
+String branchId = getBranchId(revisionId);
+// if another branch is active, wait until it's changes are merged
+while (true) {
+if (!TRUNK.equals(branchId)  !isKnownBranch(branchId)) {
+throw new MicroKernelException(Unknown branch:  + 
revisionId);
+}
+if (busyBranch == null || branchId.equals(busyBranch)) {
+break;
+}
+try {
+wait(1000);
+} catch (InterruptedException e) {
+// ignore

svn commit: r1371637 - in /jackrabbit/oak/trunk/oak-mk/src: main/java/org/apache/jackrabbit/mk/json/JsopTokenizer.java test/java/org/apache/jackrabbit/mk/json/JsopTest.java

2012-08-10 Thread thomasm
Author: thomasm
Date: Fri Aug 10 10:12:20 2012
New Revision: 1371637

URL: http://svn.apache.org/viewvc?rev=1371637view=rev
Log:
OAK-19 Consolidate JSON utilities - bugfix in readRawValue()

Modified:

jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/json/JsopTokenizer.java

jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/json/JsopTest.java

Modified: 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/json/JsopTokenizer.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/json/JsopTokenizer.java?rev=1371637r1=1371636r2=1371637view=diff
==
--- 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/json/JsopTokenizer.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/json/JsopTokenizer.java
 Fri Aug 10 10:12:20 2012
@@ -373,7 +373,7 @@ public class JsopTokenizer implements Js
  * Add an asterisk ('[*]') at the given position. This format is used to
  * show where parsing failed in a statement.
  *
- * @param s the text
+ * @param s the text
  * @param index the position
  * @return the text with asterisk
  */
@@ -386,13 +386,14 @@ public class JsopTokenizer implements Js
 }
 
 /**
- * Read a value and return the raw Json representation.
+ * Read a value and return the raw Json representation. This includes 
arrays
+ * and nested arrays.
  *
  * @return the Json representation of the value
  */
 public String readRawValue() {
 int start = lastPos;
-while (jsop.charAt(start) = ' ') {
+while (start  length  jsop.charAt(start) = ' ') {
 start++;
 }
 skipRawValue();
@@ -402,13 +403,16 @@ public class JsopTokenizer implements Js
 private void skipRawValue() {
 switch (currentType) {
 case '[': {
-read();
 int level = 0;
 while (true) {
-if (matches(']')  level-- == 0) {
-break;
+if (matches(']')) {
+if (--level == 0) {
+break;
+}
 } else if (matches('[')) {
 level++;
+} else if (matches(JsopReader.END)) {
+throw getFormatException(jsop, pos, value);
 } else {
 read();
 }

Modified: 
jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/json/JsopTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/json/JsopTest.java?rev=1371637r1=1371636r2=1371637view=diff
==
--- 
jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/json/JsopTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-mk/src/test/java/org/apache/jackrabbit/mk/json/JsopTest.java
 Fri Aug 10 10:12:20 2012
@@ -31,7 +31,7 @@ public class JsopTest extends TestCase {
 String s = Hello \World\ Hello \World\ Hello \World\ Hello 
\World\ Hello \World\ Hello \World\ ;
 StopWatch timer = new StopWatch();
 int t2 = 0;
-for (int i = 0; i  1000; i++) {
+for (int i = 0; i  100; i++) {
 t2 += JsopBuilder.encode(s).length();
 }
 System.out.println(timer.seconds() +  dummy:  + t2);
@@ -61,8 +61,9 @@ public class JsopTest extends TestCase {
 assertEquals(\\/Date(0)\\/, t.getEscapedToken());
 }
 
-public void testNull() {
-JsopTokenizer t = new JsopTokenizer(null, 1, null, true, false);
+public void testNullTrueFalse() {
+JsopTokenizer t;
+t = new JsopTokenizer(null, 1, null, true, false);
 assertEquals(null, t.read(JsopReader.NULL));
 assertEquals(,, t.read(','));
 assertEquals(1, t.read(JsopReader.NUMBER));
@@ -72,6 +73,14 @@ public class JsopTest extends TestCase {
 assertEquals(true, t.read(JsopReader.TRUE));
 assertEquals(,, t.read(','));
 assertEquals(false, t.read(JsopReader.FALSE));
+t = new JsopTokenizer(true, false);
+assertEquals(true, t.read(JsopReader.TRUE));
+assertEquals(,, t.read(','));
+assertEquals(false, t.read(JsopReader.FALSE));
+t = new JsopTokenizer(false, true);
+assertEquals(false, t.read(JsopReader.FALSE));
+assertEquals(,, t.read(','));
+assertEquals(true, t.read(JsopReader.TRUE));
 }
 
 public void testLineLength() {
@@ -103,7 +112,22 @@ public class JsopTest extends TestCase {
 }
 
 public void testRawValue() {
-JsopTokenizer t = new JsopTokenizer({\x\: [1], null, true, {\y\: 
1}, error

svn commit: r1373280 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/api/ main/java/org/apache/jackrabbit/oak/core/ main/java/org/apache/jackrabbit/oak/plugins/identifier/

2012-08-15 Thread thomasm
Author: thomasm
Date: Wed Aug 15 09:21:05 2012
New Revision: 1373280

URL: http://svn.apache.org/viewvc?rev=1373280view=rev
Log:
OAK-241 QueryEngine.executeQuery needs a session parameter (partial)

Added:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/SessionQueryEngine.java
  - copied, changed from r1372376, 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SessionQueryEngineImpl.java
Removed:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java
Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/ContentSession.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentSessionImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/IdentifierManager.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/lucene/AbstractLuceneQueryTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/ContentSession.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/ContentSession.java?rev=1373280r1=1373279r2=1373280view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/ContentSession.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/ContentSession.java
 Wed Aug 15 09:21:05 2012
@@ -82,7 +82,7 @@ public interface ContentSession extends 
  * @return the query engine
  */
 @Nonnull
-QueryEngine getQueryEngine();
+SessionQueryEngine getQueryEngine();
 
 /**
  * Returns the internal value factory.

Copied: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/SessionQueryEngine.java
 (from r1372376, 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java)
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/SessionQueryEngine.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/SessionQueryEngine.javap1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.javar1=1372376r2=1373280rev=1373280view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/SessionQueryEngine.java
 Wed Aug 15 09:21:05 2012
@@ -26,7 +26,7 @@ import org.apache.jackrabbit.oak.namepat
  * p
  * What query languages are supported depends on the registered query parsers.
  */
-public interface QueryEngine {
+public interface SessionQueryEngine {
 
 /**
  * Get the list of supported query languages.
@@ -59,7 +59,7 @@ public interface QueryEngine {
  * @throws ParseException if the statement could not be parsed
  * @throws IllegalArgumentException if there was an error executing the 
query
  */
-Result executeQuery(String statement, String language, ContentSession 
session,
+Result executeQuery(String statement, String language,
 long limit, long offset, MapString, CoreValue bindings,
 NamePathMapper namePathMapper) throws ParseException;
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java?rev=1373280r1=1373279r2=1373280view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
 Wed Aug 15 09:21:05 2012
@@ -29,7 +29,6 @@ import org.apache.jackrabbit.mk.core.Mic
 import org.apache.jackrabbit.mk.index.Indexer;
 import org.apache.jackrabbit.oak.api.ContentRepository;
 import org.apache.jackrabbit.oak.api.ContentSession;
-import org.apache.jackrabbit.oak.api.QueryEngine;
 import org.apache.jackrabbit.oak.kernel.KernelNodeStore;
 import

svn commit: r1373282 - in /jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr: SessionDelegate.java query/QueryManagerImpl.java

2012-08-15 Thread thomasm
Author: thomasm
Date: Wed Aug 15 09:22:01 2012
New Revision: 1373282

URL: http://svn.apache.org/viewvc?rev=1373282view=rev
Log:
OAK-241 QueryEngine.executeQuery needs a session parameter (partial)

Modified:

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryManagerImpl.java

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java?rev=1373282r1=1373281r2=1373282view=diff
==
--- 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java
 Wed Aug 15 09:22:01 2012
@@ -39,7 +39,7 @@ import org.apache.jackrabbit.oak.api.Cha
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.ConflictHandler;
 import org.apache.jackrabbit.oak.api.ContentSession;
-import org.apache.jackrabbit.oak.api.QueryEngine;
+import org.apache.jackrabbit.oak.api.SessionQueryEngine;
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.commons.PathUtils;
@@ -396,7 +396,7 @@ public class SessionDelegate {
 }
 
 @Nonnull
-public QueryEngine getQueryEngine() {
+public SessionQueryEngine getQueryEngine() {
 return contentSession.getQueryEngine();
 }
 

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryManagerImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryManagerImpl.java?rev=1373282r1=1373281r2=1373282view=diff
==
--- 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryManagerImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryManagerImpl.java
 Wed Aug 15 09:22:01 2012
@@ -33,9 +33,8 @@ import javax.jcr.query.Query;
 import javax.jcr.query.QueryManager;
 import javax.jcr.query.QueryResult;
 import javax.jcr.query.qom.QueryObjectModelFactory;
-import org.apache.jackrabbit.oak.api.ContentSession;
 import org.apache.jackrabbit.oak.api.CoreValue;
-import org.apache.jackrabbit.oak.api.QueryEngine;
+import org.apache.jackrabbit.oak.api.SessionQueryEngine;
 import org.apache.jackrabbit.oak.api.Result;
 import org.apache.jackrabbit.oak.jcr.SessionDelegate;
 import org.apache.jackrabbit.oak.jcr.query.qom.QueryObjectModelFactoryImpl;
@@ -47,7 +46,7 @@ import org.apache.jackrabbit.oak.namepat
 public class QueryManagerImpl implements QueryManager {
 
 private final QueryObjectModelFactoryImpl qomFactory;
-private final QueryEngine queryEngine;
+private final SessionQueryEngine queryEngine;
 private final SessionDelegate sessionDelegate;
 private final HashSetString supportedQueryLanguages = new 
HashSetString();
 
@@ -105,9 +104,8 @@ public class QueryManagerImpl implements
 long limit, long offset, HashMapString, Value bindVariableMap) 
throws RepositoryException {
 try {
 HashMapString, CoreValue bindMap = convertMap(bindVariableMap);
-ContentSession s = sessionDelegate.getContentSession();
 NamePathMapper namePathMapper = 
sessionDelegate.getNamePathMapper();
-Result r = queryEngine.executeQuery(statement, language, s, limit, 
offset, bindMap, namePathMapper);
+Result r = queryEngine.executeQuery(statement, language, limit, 
offset, bindMap, namePathMapper);
 return new QueryResultImpl(sessionDelegate, r);
 } catch (IllegalArgumentException e) {
 throw new InvalidQueryException(e);




svn commit: r1373283 - /jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/qom/QomTest.java

2012-08-15 Thread thomasm
Author: thomasm
Date: Wed Aug 15 09:22:39 2012
New Revision: 1373283

URL: http://svn.apache.org/viewvc?rev=1373283view=rev
Log:
OAK-28 Query implementation

Modified:

jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/qom/QomTest.java

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/qom/QomTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/qom/QomTest.java?rev=1373283r1=1373282r2=1373283view=diff
==
--- 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/qom/QomTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/qom/QomTest.java
 Wed Aug 15 09:22:39 2012
@@ -293,7 +293,7 @@ public class QomTest extends AbstractRep
 PropertyValue p = f.propertyValue(x, propertyName);
 c = f.and(f.comparison(p, 
QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, b), c);
 Ordering o = f.ascending(p);
-Column col = f.column(selectorName, propertyName, columnName);
+Column col = f.column(x, propertyName, columnName);
 Ordering[] ords = new Ordering[]{o};
 Column[] cols = new Column[]{col};
 QueryObjectModel q = f.createQuery(s, c, ords, cols);




svn commit: r1373284 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/mk/index/ main/java/org/apache/jackrabbit/oak/query/ main/java/org/apache/jackrabbit/oak/query/ast/ main/j

2012-08-15 Thread thomasm
Author: thomasm
Date: Wed Aug 15 09:23:38 2012
New Revision: 1373284

URL: http://svn.apache.org/viewvc?rev=1373284view=rev
Log:
OAK-28 Query implementation

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ChildNodeImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ChildNodeJoinConditionImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ColumnImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DescendantNodeImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DescendantNodeJoinConditionImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/EquiJoinConditionImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchScoreImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyExistenceImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SameNodeImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SameNodeJoinConditionImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SourceImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/FilterImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingCursor.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/Filter.java

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryTest.txt

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryXpathTest.txt

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java?rev=1373284r1=1373283r2=1373284view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java
 Wed Aug 15 09:23:38 2012
@@ -529,7 +529,6 @@ public class Indexer implements QueryInd
 
 // TODO allow creating multiple indexes in one step
 // (buffer indexes to be created; traverse the repository only once)
-// TODO re-organize the index structure
 // TODO allow filters (only index a certain path; exclude a list of 
paths)
 
 if (PathUtils.getDepth(path) == indexRootNodeDepth + 1) {
@@ -675,7 +674,7 @@ public class Indexer implements QueryInd
 if (index instanceof PropertyIndex) {
 qi = new PropertyContentIndex((PropertyIndex) index);
 } else if (index instanceof PrefixIndex) {
-// TODO support prefix indexes?
+// TODO support prefix indexes in the query engine?
 }
 queryIndexList.add(qi);
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java?rev=1373284r1=1373283r2=1373284view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
 Wed Aug 15 09:23:38 2012
@@ -43,6 +43,7 @@ import java.util.HashMap;
 
 /**
  * The SQL2 parser can convert a JCR-SQL2 query to a query.
+ * The 'old' SQL query language is also supported if
  */
 public class SQL2Parser {
 
@@ -151,7 +152,12 @@ public class SQL2Parser {
 list.add(column

svn commit: r1373305 - in /jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance: DescendantSearchTest.java IndexManager.java SimpleSearchTest.java

2012-08-15 Thread thomasm
Author: thomasm
Date: Wed Aug 15 10:11:11 2012
New Revision: 1373305

URL: http://svn.apache.org/viewvc?rev=1373305view=rev
Log:
OAK-178 Query: index definition documentation and tooling

Added:

jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/IndexManager.java
Modified:

jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/DescendantSearchTest.java

jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/SimpleSearchTest.java

Modified: 
jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/DescendantSearchTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/DescendantSearchTest.java?rev=1373305r1=1373304r2=1373305view=diff
==
--- 
jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/DescendantSearchTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/DescendantSearchTest.java
 Wed Aug 15 10:11:11 2012
@@ -36,7 +36,9 @@ public class DescendantSearchTest extend
 
 protected Query createQuery(QueryManager manager, int i)
 throws RepositoryException {
-return 
manager.createQuery(/jcr:root/testroot//element(*,nt:base)[@testcount= + i + 
], Query.XPATH);
+@SuppressWarnings(deprecation)
+String xpath = Query.XPATH;
+return 
manager.createQuery(/jcr:root/testroot//element(*,nt:base)[@testcount= + i + 
], xpath);
 }
 
 @Override
@@ -52,6 +54,9 @@ public class DescendantSearchTest extend
 }
 session.save();
 }
+
+IndexManager.createPropertyIndex(session, testcount);
+
 }
 
 @Override

Added: 
jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/IndexManager.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/IndexManager.java?rev=1373305view=auto
==
--- 
jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/IndexManager.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/IndexManager.java
 Wed Aug 15 10:11:11 2012
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the License); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.performance;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import org.apache.jackrabbit.mk.index.Indexer;
+import org.apache.jackrabbit.oak.commons.PathUtils;
+
+/**
+ * A utility class to manage indexes in Oak.
+ */
+public class IndexManager {
+
+/**
+ * The root node of the index definition (configuration) nodes.
+ */
+public static final String INDEX_CONFIG_PATH = Indexer.INDEX_CONFIG_PATH;
+
+/**
+ * Creates a property index for the given property if such an index doesn't
+ * exist yet, and if the repository supports property indexes. The session
+ * may not have pending changes.
+ * 
+ * @param session the session
+ * @param propertyName the property name
+ * @return true if the index was created or already existed
+ */
+public static boolean createPropertyIndex(Session session,
+String propertyName) throws RepositoryException {
+return createIndex(session, property@ + propertyName);
+}
+
+private static Node getIndexNode(Session session)
+throws RepositoryException {
+Node n = session.getRootNode();
+for (String e : PathUtils.elements(INDEX_CONFIG_PATH)) {
+if (!n.hasNode(e)) {
+return null;
+}
+n = n.getNode(e);
+}
+return n;
+}
+
+private static boolean createIndex(Session session, String indexNodeName)
+throws RepositoryException {
+if (session.hasPendingChanges()) {
+throw new RepositoryException(The session

svn commit: r1373371 - in /jackrabbit/oak/trunk/oak-bench: base/ base/src/main/java/org/apache/jackrabbit/oak/performance/ latest/src/test/java/org/apache/jackrabbit/oak/performance/

2012-08-15 Thread thomasm
Author: thomasm
Date: Wed Aug 15 12:40:47 2012
New Revision: 1373371

URL: http://svn.apache.org/viewvc?rev=1373371view=rev
Log:
OAK-122 Performance test suite - (avoid out of memory, make them reasonably 
fast to run by default but allow configuring longer running test using system 
properties)

Modified:
jackrabbit/oak/trunk/oak-bench/base/pom.xml

jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/AbstractPerformanceTest.java

jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/AbstractTest.java

jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/TransientManyChildNodesTest.java

jackrabbit/oak/trunk/oak-bench/latest/src/test/java/org/apache/jackrabbit/oak/performance/PerformanceBenchmark.java

Modified: jackrabbit/oak/trunk/oak-bench/base/pom.xml
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-bench/base/pom.xml?rev=1373371r1=1373370r2=1373371view=diff
==
--- jackrabbit/oak/trunk/oak-bench/base/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-bench/base/pom.xml Wed Aug 15 12:40:47 2012
@@ -48,6 +48,11 @@
   scopeprovided/scope
 /dependency
 dependency
+  groupIdcom.h2database/groupId
+  artifactIdh2/artifactId
+  version1.3.158/version
+/dependency  
+dependency
   groupIdcommons-io/groupId
   artifactIdcommons-io/artifactId
   version1.4/version

Modified: 
jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/AbstractPerformanceTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/AbstractPerformanceTest.java?rev=1373371r1=1373370r2=1373371view=diff
==
--- 
jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/AbstractPerformanceTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/AbstractPerformanceTest.java
 Wed Aug 15 12:40:47 2012
@@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.perfor
 import java.io.File;
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.util.Collections;
 import java.util.regex.Pattern;
 
 import javax.jcr.Credentials;
@@ -28,13 +29,31 @@ import javax.jcr.SimpleCredentials;
 
 import org.apache.commons.io.output.FileWriterWithEncoding;
 import org.apache.commons.math.stat.descriptive.DescriptiveStatistics;
+import org.apache.jackrabbit.mk.MicroKernelFactory;
+import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.mk.core.MicroKernelImpl;
+import org.apache.jackrabbit.mk.index.IndexWrapper;
+import org.apache.jackrabbit.oak.api.ContentRepository;
+import org.apache.jackrabbit.oak.core.ContentRepositoryImpl;
 import org.apache.jackrabbit.oak.jcr.RepositoryImpl;
-
+import org.apache.jackrabbit.oak.spi.commit.CompositeValidatorProvider;
+import org.apache.jackrabbit.oak.spi.commit.ValidatingEditor;
+import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider;
+
+/**
+ * This class calls all known performance tests.
+ */
 public abstract class AbstractPerformanceTest {
 
-private final int warmup = 1;
-
-private final int runtime = 10;
+/**
+ * The warmup time, in ms.
+ */
+private final int warmup = 
Integer.getInteger(oak.performanceTest.warmup, 0);
+
+/**
+ * How long each test is repeated, in ms.
+ */
+private final int runtime = 
Integer.getInteger(oak.performanceTest.runtime, 100);
 
 private final Credentials credentials = new SimpleCredentials(admin,
 admin.toCharArray());
@@ -69,9 +88,12 @@ public abstract class AbstractPerformanc
 if (microKernelPattern.matcher(microKernel).matches()
  testPattern.matcher(test.toString()).matches()) {
 
+MicroKernel mk = null;
 RepositoryImpl repository;
 try {
-repository = createRepository(microKernel);
+
+mk = createMicroKernel(microKernel);
+repository = createRepository(mk);
 
 // Run the test
 DescriptiveStatistics statistics = runTest(test, repository);
@@ -82,6 +104,10 @@ public abstract class AbstractPerformanc
 re.printStackTrace();
 } catch (Exception e) {
 e.printStackTrace();
+} finally {
+if (mk != null) {
+MicroKernelFactory.disposeInstance(mk);
+}
 }
 }
 }
@@ -93,13 +119,15 @@ public abstract class AbstractPerformanc
 test.setUp(repository, credentials);
 try {
 // Run a few iterations to warm up the system
-long warmupEnd = System.currentTimeMillis() + warmup * 1000

svn commit: r1373373 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java

2012-08-15 Thread thomasm
Author: thomasm
Date: Wed Aug 15 12:45:14 2012
New Revision: 1373373

URL: http://svn.apache.org/viewvc?rev=1373373view=rev
Log:
OAK-122 Performance test suite - (allow concurrent branching)

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java?rev=1373373r1=1373372r2=1373373view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java
 Wed Aug 15 12:45:14 2012
@@ -17,8 +17,10 @@
 package org.apache.jackrabbit.mk.index;
 
 import java.io.InputStream;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.Set;
 
 import org.apache.jackrabbit.mk.ExceptionFactory;
 import org.apache.jackrabbit.mk.api.MicroKernel;
@@ -36,7 +38,7 @@ public class IndexWrapper extends MicroK
 
 private final MicroKernelWrapper mk;
 private final Indexer indexer;
-private final HashSetString branchRevisions = new HashSetString();
+private final SetString branchRevisions = 
Collections.synchronizedSet(new HashSetString());
 
 public IndexWrapper(MicroKernel mk) {
 this.mk = MicroKernelWrapperBase.wrap(mk);




svn commit: r1375025 - /jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/util/

2012-08-20 Thread thomasm
Author: thomasm
Date: Mon Aug 20 13:59:49 2012
New Revision: 1375025

URL: http://svn.apache.org/viewvc?rev=1375025view=rev
Log:
OAK-57 Remove empty directory

Removed:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/util/



svn commit: r1375028 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/CoreValueMapper.java

2012-08-20 Thread thomasm
Author: thomasm
Date: Mon Aug 20 14:01:13 2012
New Revision: 1375028

URL: http://svn.apache.org/viewvc?rev=1375028view=rev
Log:
OAK-260 Avoid the Turkish Locale Problem

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/CoreValueMapper.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/CoreValueMapper.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/CoreValueMapper.java?rev=1375028r1=1375027r2=1375028view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/CoreValueMapper.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/CoreValueMapper.java
 Mon Aug 20 14:01:13 2012
@@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.kernel
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 
 import javax.jcr.PropertyType;
@@ -39,7 +40,7 @@ public class CoreValueMapper {
 
 static {
 for (int type = PropertyType.UNDEFINED; type = PropertyType.DECIMAL; 
type++) {
-String hint = PropertyType.nameFromValue(type).substring(0, 
3).toLowerCase();
+String hint = PropertyType.nameFromValue(type).substring(0, 
3).toLowerCase(Locale.ENGLISH);
 TYPE2HINT.put(type, hint);
 HINT2TYPE.put(hint, type);
 }




svn commit: r1375060 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/plugins/lucene/ main/java/org/apache/jackrabbit/oak/query/ main/java/org/apache/jackrabbit/oak/query/a

2012-08-20 Thread thomasm
Author: thomasm
Date: Mon Aug 20 15:29:56 2012
New Revision: 1375060

URL: http://svn.apache.org/viewvc?rev=1375060view=rev
Log:
OAK-262 Query: support pseudo properties like jcr:score() and rep:excerpt()

Added:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/IndexRowImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/IndexRow.java
Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/JoinImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/PropertyContentIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingCursor.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/Cursor.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/Filter.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneEditorTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingCursorTest.java

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryTest.txt

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryXpathTest.txt

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndex.java?rev=1375060r1=1375059r2=1375060view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndex.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndex.java
 Mon Aug 20 15:29:56 2012
@@ -27,9 +27,11 @@ import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 
+import org.apache.jackrabbit.oak.query.index.IndexRowImpl;
 import org.apache.jackrabbit.oak.spi.Cursor;
 import org.apache.jackrabbit.oak.spi.Filter;
 import org.apache.jackrabbit.oak.spi.Filter.PropertyRestriction;
+import org.apache.jackrabbit.oak.spi.IndexRow;
 import org.apache.jackrabbit.oak.spi.QueryIndex;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
@@ -125,7 +127,8 @@ public class LuceneIndex implements Quer
 qs.add(new PrefixQuery(newPathTerm(path + /)));
 break;
 case DIRECT_CHILDREN:
-qs.add(new PrefixQuery(newPathTerm(path + /))); // FIXME
+// FIXME
+qs.add(new PrefixQuery(newPathTerm(path + /)));
 break;
 case EXACT:
 qs.add(new TermQuery(newPathTerm(path)));
@@ -136,7 +139,8 @@ public class LuceneIndex implements Quer
 String parent = path.substring(0, slash);
 qs.add(new TermQuery(newPathTerm(parent)));
 } else {
-return null; // there's no parent of the root node
+// there's no parent of the root node
+return null;
 }
 break;
 }
@@ -172,6 +176,9 @@ public class LuceneIndex implements Quer
 }
 }
 
+/**
+ * A cursor over the resulting paths.
+ */
 private static class PathCursor implements Cursor {
 
 private final IteratorString iterator;
@@ -194,8 +201,9 @@ public class LuceneIndex implements Quer
 }
 
 @Override
-public String currentPath() {
-return path;
+public IndexRow currentRow() {
+// TODO support jcr:score and possibly rep:exceprt
+return new IndexRowImpl(path);
 }
 
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java?rev=1375060r1=1375059r2=1375060view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 Mon Aug 20 15:29:56 2012
@@ -535,7 +535,7 @@ public class Query {
 }
 buff.append( from ).append(source);
 if (constraint

svn commit: r1375546 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingCursor.java

2012-08-21 Thread thomasm
Author: thomasm
Date: Tue Aug 21 13:52:22 2012
New Revision: 1375546

URL: http://svn.apache.org/viewvc?rev=1375546view=rev
Log:
OAK-233 Query should use the NodeStore abstraction - property restrictions are 
anyway checked in the query engine, so the traversing cursor doesn't have to 
check it. Remove unneeded code (also because it doesn't support the new '*' 
property)

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingCursor.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingCursor.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingCursor.java?rev=1375546r1=1375545r2=1375546view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingCursor.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingCursor.java
 Tue Aug 21 13:52:22 2012
@@ -16,15 +16,10 @@ package org.apache.jackrabbit.oak.query.
 import static 
org.apache.jackrabbit.oak.spi.Filter.PathRestriction.ALL_CHILDREN;
 import java.util.Deque;
 import java.util.Iterator;
-import javax.jcr.PropertyType;
-import org.apache.jackrabbit.oak.api.CoreValue;
-import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.plugins.memory.MemoryChildNodeEntry;
-import org.apache.jackrabbit.oak.plugins.memory.StringValue;
 import org.apache.jackrabbit.oak.spi.Cursor;
 import org.apache.jackrabbit.oak.spi.Filter;
-import org.apache.jackrabbit.oak.spi.Filter.PropertyRestriction;
 import org.apache.jackrabbit.oak.spi.IndexRow;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -109,10 +104,7 @@ public class TraversingCursor implements
 nodes.addLast(node.getChildNodeEntries().iterator());
 parentPath = currentPath;
 }
-
-if (matchesFilter(node, currentPath)) {
-return true;
-}
+return true;
 } else {
 nodes.removeLast();
 parentPath = PathUtils.getParentPath(parentPath);
@@ -122,78 +114,4 @@ public class TraversingCursor implements
 return false;
 }
 
-private boolean matchesFilter(NodeState node, String path) {
-for (PropertyRestriction pr : filter.getPropertyRestrictions()) {
-if (jcr:path.equals(pr.propertyName)) {
-if (!matchesValue(new StringValue(path), pr)) {
-return false;
-}
-} else {
-PropertyState property = getProperty(node, pr.propertyName);
-if (property == null) {
-return false;
-} else if (pr.first != null || pr.last != null) {
-boolean matches = false;
-for (CoreValue value : property.getValues()) {
-if (matchesValue(value, pr)) {
-matches = true;
-}
-}
-if (!matches) {
-return false;
-}
-}
-}
-}
-return true;
-}
-
-private static PropertyState getProperty(NodeState node, String path) {
-int slash = path.indexOf('/');
-while (slash != -1) {
-node = node.getChildNode(path.substring(0, slash));
-if (node == null) {
-return null;
-}
-path = path.substring(slash + 1);
-slash = path.indexOf('/');
-}
-return node.getProperty(path);
-}
-
-private static boolean matchesValue(CoreValue value, PropertyRestriction 
pr) {
-int first = -1;
-if (pr.first != null) {
-first = compareValues(pr.first, value, pr.first.getType());
-}
-if (first  0 || (first == 0  !pr.firstIncluding)) {
-return false;
-}
-
-int last = -1;
-if (pr.last != null) {
-last = compareValues(value, pr.last, pr.last.getType());
-}
-if (last  0 || (last == 0  !pr.lastIncluding)) {
-return false;
-}
-
-return true;
-}
-
-private static int compareValues(CoreValue a, CoreValue b, int type) {
-if (type == PropertyType.BOOLEAN) {
-return Boolean.valueOf(a.getBoolean()).compareTo(
-Boolean.valueOf(b.getBoolean()));
-} else if (type == PropertyType.DECIMAL) {
-return a.getDecimal().compareTo(b.getDecimal());
-} else if (type == PropertyType.DOUBLE) {
-return Double.compare

svn commit: r1375567 - /jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/tree/DiffBuilder.java

2012-08-21 Thread thomasm
Author: thomasm
Date: Tue Aug 21 14:22:50 2012
New Revision: 1375567

URL: http://svn.apache.org/viewvc?rev=1375567view=rev
Log:
OAK-264 MicroKernel.diff for depth limited, unspecified changes - add {}

Modified:

jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/tree/DiffBuilder.java

Modified: 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/tree/DiffBuilder.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/tree/DiffBuilder.java?rev=1375567r1=1375566r2=1375567view=diff
==
--- 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/tree/DiffBuilder.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/tree/DiffBuilder.java
 Tue Aug 21 14:22:50 2012
@@ -145,6 +145,7 @@ public class DiffBuilder {
 } else {
 buff.tag('^');
 buff.key(p);
+buff.object().endObject();
 buff.newline();
 }
 ++levels;




svn commit: r1375612 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java

2012-08-21 Thread thomasm
Author: thomasm
Date: Tue Aug 21 15:38:01 2012
New Revision: 1375612

URL: http://svn.apache.org/viewvc?rev=1375612view=rev
Log:
OAK-261 Support querying on property types

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java?rev=1375612r1=1375611r2=1375612view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java
 Tue Aug 21 15:38:01 2012
@@ -126,6 +126,9 @@ public class PropertyValueImpl extends D
 }
 
 private boolean matchesPropertyType(PropertyState state) {
+if (state == null) {
+return false;
+}
 if (propertyType == PropertyType.UNDEFINED) {
 return true;
 }




svn commit: r1376003 - in /jackrabbit/oak/trunk/oak-core/src/test: java/org/apache/jackrabbit/oak/query/ resources/org/apache/jackrabbit/oak/query/

2012-08-22 Thread thomasm
Author: thomasm
Date: Wed Aug 22 11:44:45 2012
New Revision: 1376003

URL: http://svn.apache.org/viewvc?rev=1376003view=rev
Log:
OAK-28 Query implementation - split tests into sql1, sql2, sql2 explain, and 
xpath

Added:

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql1.txt

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt
  - copied, changed from r1375949, 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryTest.txt

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2_explain.txt

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt
  - copied, changed from r1375949, 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryXpathTest.txt
Removed:

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryTest.txt

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/queryXpathTest.txt
Modified:

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java?rev=1376003r1=1376002r2=1376003view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java
 Wed Aug 22 11:44:45 2012
@@ -38,13 +38,23 @@ import org.junit.Test;
 public class QueryTest extends AbstractQueryTest {
 
 @Test
-public void script() throws Exception {
-test(queryTest.txt);
+public void sql1() throws Exception {
+test(sql1.txt);
+}
+
+@Test
+public void sql2() throws Exception {
+test(sql2.txt);
+}
+
+@Test
+public void sql2Explain() throws Exception {
+test(sql2_explain.txt);
 }
 
 @Test
 public void xpath() throws Exception {
-test(queryXpathTest.txt);
+test(xpath.txt);
 }
 
 @Test
@@ -88,9 +98,9 @@ public class QueryTest extends AbstractQ
 line = line.trim();
 if (line.startsWith(#) || line.length() == 0) {
 w.println(line);
-} else if (line.startsWith(xpath)) {
-line = line.substring(xpath.length()).trim();
-w.println(xpath  + line);
+} else if (line.startsWith(xpath2sql)) {
+line = line.substring(xpath2sql.length()).trim();
+w.println(xpath2sql  + line);
 XPathToSQL2Converter c = new XPathToSQL2Converter();
 String got;
 try {

Added: 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql1.txt
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql1.txt?rev=1376003view=auto
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql1.txt
 (added)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql1.txt
 Wed Aug 22 11:44:45 2012
@@ -0,0 +1,40 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the License); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Syntax:
+# * lines starting with # are remarks.
+# * lines starting with select are queries, followed by expected results and 
an empty line
+# * lines starting with explain are followed by expected query plan and an 
empty line
+# * lines starting with sql1 are run using the sql1 language
+# * lines starting with xpath2sql are just converted from xpath to sql2
+# * all other lines are are committed into the microkernel (line by line)
+# * new tests are typically be added on top, after the syntax docs
+# * use ascii character only
+
+# sql-1 query (nt:unstructured needs

svn commit: r1376004 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/PrefixContentIndex.java

2012-08-22 Thread thomasm
Author: thomasm
Date: Wed Aug 22 11:45:42 2012
New Revision: 1376004

URL: http://svn.apache.org/viewvc?rev=1376004view=rev
Log:
OAK-261 Support querying on property types

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/PrefixContentIndex.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/PrefixContentIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/PrefixContentIndex.java?rev=1376004r1=1376003r2=1376004view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/PrefixContentIndex.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/PrefixContentIndex.java
 Wed Aug 22 11:45:42 2012
@@ -44,29 +44,36 @@ public class PrefixContentIndex implemen
 
 @Override
 public double getCost(Filter filter) {
-Filter.PropertyRestriction restriction = 
filter.getPropertyRestriction(*);
-if (restriction == null) {
-return Double.MAX_VALUE;
+if (getPropertyTypeRestriction(filter) != null) {
+return 100;
 }
-if (restriction.first != restriction.last) {
-// only support equality matches (for now)
-return Double.MAX_VALUE;
-}
-if (restriction.propertyType == PropertyType.UNDEFINED) {
-return Double.MAX_VALUE;
-}
-String hint = CoreValueMapper.getHintForType(restriction.propertyType);
-String prefix = hint + :;
-if (!prefix.equals(index.getPrefix())) {
-// wrong prefix (wrong property type)
-return Double.MAX_VALUE;
+return Double.MAX_VALUE;
+}
+
+private Filter.PropertyRestriction getPropertyTypeRestriction(Filter 
filter) {
+for (Filter.PropertyRestriction restriction : 
filter.getPropertyRestrictions()) {
+if (restriction == null) {
+continue;
+}
+if (restriction.first != restriction.last) {
+// only support equality matches (for now)
+continue;
+}
+if (restriction.propertyType == PropertyType.UNDEFINED) {
+continue;
+}
+String hint = 
CoreValueMapper.getHintForType(restriction.propertyType);
+String prefix = hint + :;
+if (prefix.equals(index.getPrefix())) {
+return restriction;
+}
 }
-return 100;
+return null;
 }
 
 @Override
 public String getPlan(Filter filter) {
-Filter.PropertyRestriction restriction = 
filter.getPropertyRestriction(*);
+Filter.PropertyRestriction restriction = 
getPropertyTypeRestriction(filter);
 if (restriction == null) {
 throw new IllegalArgumentException(No restriction for *);
 }
@@ -78,7 +85,7 @@ public class PrefixContentIndex implemen
 
 @Override
 public Cursor query(Filter filter, String revisionId, NodeState root) {
-Filter.PropertyRestriction restriction = 
filter.getPropertyRestriction(*);
+Filter.PropertyRestriction restriction = 
getPropertyTypeRestriction(filter);
 if (restriction == null) {
 throw new IllegalArgumentException(No restriction for *);
 }




svn commit: r1376118 - /jackrabbit/oak/trunk/oak-jcr/pom.xml

2012-08-22 Thread thomasm
Author: thomasm
Date: Wed Aug 22 16:12:25 2012
New Revision: 1376118

URL: http://svn.apache.org/viewvc?rev=1376118view=rev
Log:
OAK-262 Query: support pseudo properties like jcr:score() and rep:excerpt() - 
re-enable tests

Modified:
jackrabbit/oak/trunk/oak-jcr/pom.xml

Modified: jackrabbit/oak/trunk/oak-jcr/pom.xml
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/pom.xml?rev=1376118r1=1376117r2=1376118view=diff
==
--- jackrabbit/oak/trunk/oak-jcr/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-jcr/pom.xml Wed Aug 22 16:12:25 2012
@@ -91,12 +91,6 @@ org.apache.jackrabbit.test.api.query.Sav
 org.apache.jackrabbit.test.api.query.SimpleSelectionTest#testSingleProperty
 
org.apache.jackrabbit.test.api.query.qom.ColumnTest#testExpandColumnsForNodeType
 org.apache.jackrabbit.test.api.query.qom.SelectorTest#testUnknownNodeType
-
-org.apache.jackrabbit.test.api.query.XPathQueryLevel2Test#testFullTextSearch
-org.apache.jackrabbit.test.api.query.XPathQueryLevel2Test#testScoreColumn
-org.apache.jackrabbit.test.api.query.XPathQueryLevel2Test#testPathColumn
-org.apache.jackrabbit.test.api.query.TextNodeTest#testTextNodeTestContains
-
 org.apache.jackrabbit.test.api.util
 org.apache.jackrabbit.test.api.observation.EventTest#testGetUserId
 org.apache.jackrabbit.test.api.observation.NodeMovedTest#testMoveNode




svn commit: r1376131 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/query/ test/java/org/apache/jackrabbit/oak/query/ test/resources/org/apache/jackrabbit/oak/query/

2012-08-22 Thread thomasm
Author: thomasm
Date: Wed Aug 22 16:29:30 2012
New Revision: 1376131

URL: http://svn.apache.org/viewvc?rev=1376131view=rev
Log:
OAK-262 Query: support pseudo properties like jcr:score() and rep:excerpt()

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java?rev=1376131r1=1376130r2=1376131view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
 Wed Aug 22 16:29:30 2012
@@ -133,7 +133,13 @@ public class SQL2Parser {
 }
 Query q = new Query(source, constraint, orderings, columnArray, 
valueFactory);
 q.setExplain(explain);
-q.init();
+try {
+q.init();
+} catch (Exception e) {
+ParseException e2 = new ParseException(query + :  + 
e.getMessage(), 0);
+e2.initCause(e);
+throw e2;
+}
 return q;
 }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java?rev=1376131r1=1376130r2=1376131view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java
 Wed Aug 22 16:29:30 2012
@@ -430,7 +430,8 @@ public class XPathToSQL2Converter {
 } else if (fn:name.equals(functionName)) {
 Function f = new Function(name);
 if (!readIf())) {
-f.params.add(parseExpression());
+// only name(.) and name() are currently supported
+read(.);
 read());
 }
 return f;
@@ -837,6 +838,9 @@ public class XPathToSQL2Converter {
 
 @Override
 public String toString() {
+if (name.equals(*)) {
+return name;
+}
 return '[' + name + ']';
 }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java?rev=1376131r1=1376130r2=1376131view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java
 Wed Aug 22 16:29:30 2012
@@ -103,16 +103,22 @@ public class QueryTest extends AbstractQ
 w.println(xpath2sql  + line);
 XPathToSQL2Converter c = new XPathToSQL2Converter();
 String got;
+boolean failed;
 try {
 got = c.convert(line);
+failed = false;
 } catch (ParseException e) {
 got = invalid:  + e.getMessage().replace('\n', ' ');
+failed = true;
 }
 line = r.readLine().trim();
 w.println(got);
 if (!line.equals(got)) {
 errors = true;
 }
+if (!failed) {
+executeQuery(got, QueryEngineImpl.SQL2, null);
+}
 } else if (line.startsWith(select) || 
line.startsWith(explain) || line.startsWith(sql1)) {
 w.println(line);
 String language = QueryEngineImpl.SQL2;

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt?rev=1376131r1=1376130r2=1376131view=diff

svn commit: r1379373 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak: osgi/OsgiIndexProvider.java plugins/index/Indexer.java

2012-08-31 Thread thomasm
Author: thomasm
Date: Fri Aug 31 09:02:26 2012
New Revision: 1379373

URL: http://svn.apache.org/viewvc?rev=1379373view=rev
Log:
OAK-28 Query implementation

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexProvider.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/Indexer.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexProvider.java?rev=1379373r1=1379372r2=1379373view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexProvider.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexProvider.java
 Fri Aug 31 09:02:26 2012
@@ -84,7 +84,7 @@ public class OsgiIndexProvider implement
 if (providers.isEmpty()) {
 return Collections.emptyList();
 } else if (providers.size() == 1) {
-return providers.get(0).getQueryIndexes(mk);
+return 
providers.entrySet().iterator().next().getValue().getQueryIndexes(mk);
 } else {
 // TODO combine indexes
 return null;

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/Indexer.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/Indexer.java?rev=1379373r1=1379372r2=1379373view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/Indexer.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/Indexer.java
 Fri Aug 31 09:02:26 2012
@@ -416,6 +416,8 @@ public class Indexer implements QueryInd
 // unexpected but possible
 // this will cause all indexes to be removed, so
 // it can be ignored here
+} else {
+throw e;
 }
 }
 }




svn commit: r1383866 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/util/ test/java/org/apache/jackrabbit/oak/query/ test/java/org/apache/jackrabbit/oak/util/

2012-09-12 Thread thomasm
Author: thomasm
Date: Wed Sep 12 09:29:38 2012
New Revision: 1383866

URL: http://svn.apache.org/viewvc?rev=1383866view=rev
Log:
OAK-288 QueryTests should use the NodeStore apis - move JsopUtils to test folder

Added:

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/JsopUtil.java
  - copied, changed from r1383426, 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/JsopUtil.java
Removed:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/JsopUtil.java
Modified:

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/JsopUtilTest.java

Copied: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/JsopUtil.java
 (from r1383426, 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/JsopUtil.java)
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/JsopUtil.java?p2=jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/JsopUtil.javap1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/JsopUtil.javar1=1383426r2=1383866rev=1383866view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/JsopUtil.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/JsopUtil.java
 Wed Sep 12 09:29:38 2012
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.jackrabbit.oak.util;
+package org.apache.jackrabbit.oak.query;
 
 import java.util.ArrayList;
 import java.util.Iterator;

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java?rev=1383866r1=1383865r2=1383866view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java
 Wed Sep 12 09:29:38 2012
@@ -35,7 +35,6 @@ import org.apache.jackrabbit.oak.api.Cor
 import org.apache.jackrabbit.oak.api.Result;
 import org.apache.jackrabbit.oak.api.ResultRow;
 import org.apache.jackrabbit.oak.core.DefaultConflictHandler;
-import org.apache.jackrabbit.oak.util.JsopUtil;
 import org.junit.Ignore;
 import org.junit.Test;
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/JsopUtilTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/JsopUtilTest.java?rev=1383866r1=1383865r2=1383866view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/JsopUtilTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/JsopUtilTest.java
 Wed Sep 12 09:29:38 2012
@@ -27,6 +27,7 @@ import org.apache.jackrabbit.oak.api.Cor
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.core.DefaultConflictHandler;
+import org.apache.jackrabbit.oak.query.JsopUtil;
 import org.junit.Before;
 import org.junit.Test;
 




svn commit: r1383873 - /jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/JsopUtil.java

2012-09-12 Thread thomasm
Author: thomasm
Date: Wed Sep 12 10:02:30 2012
New Revision: 1383873

URL: http://svn.apache.org/viewvc?rev=1383873view=rev
Log:
OAK-288 QueryTests should use the NodeStore apis - simplify JsopUtils

Modified:

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/JsopUtil.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/JsopUtil.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/JsopUtil.java?rev=1383873r1=1383872r2=1383873view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/JsopUtil.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/JsopUtil.java
 Wed Sep 12 10:02:30 2012
@@ -52,42 +52,34 @@ public class JsopUtil {
  * /p
  * 
  * @param root
- * @param commit
- *- the commit string
+ * @param commit the commit string
+ * @param vf the value factory
+ * @throws UnsupportedOperationException if the operation is not supported
  */
 public static void apply(Root root, String commit, CoreValueFactory vf)
-throws Exception {
+throws UnsupportedOperationException {
 int index = commit.indexOf(' ');
 String path = commit.substring(0, index).trim();
-commit = commit.substring(index).trim();
-
-index = commit.indexOf(' ');
-String op = commit.substring(0, index).trim();
-commit = commit.substring(index).trim();
-
-if (!+.equals(op)  !-.equals(op)) {
-throw new Exception(Unknown operation  + op
-+ . This should be either '+' or '-'.);
-}
-if (commit.length() == 0) {
-return;
-}
-boolean isAdd = +.equals(op);
 Tree c = root.getTree(path);
 if (c == null) {
 // TODO create intermediary?
-throw new Exception(non existing path  + path);
+throw new UnsupportedOperationException(Non existing path  + 
path);
 }
-if (isAdd) {
-addTree(c, commit, vf);
+commit = commit.substring(index);
+JsopTokenizer tokenizer = new JsopTokenizer(commit);
+if (tokenizer.matches('-')) {
+removeTree(c, tokenizer);
+} else if (tokenizer.matches('+')) {
+addTree(c, tokenizer, vf);
 } else {
-removeTree(c, commit);
+throw new UnsupportedOperationException(
+Unsupported  + (char) tokenizer.read() + 
+. This should be either '+' or '-'.);
 }
 }
 
-private static void removeTree(Tree t, String pathIn) {
-String path = new JsopTokenizer(pathIn).readString();
-
+private static void removeTree(Tree t, JsopTokenizer tokenizer) {
+String path = tokenizer.readString();
 IteratorString pathIterator = PathUtils.elements(path).iterator();
 while (pathIterator.hasNext()) {
 String p = pathIterator.next();
@@ -99,39 +91,26 @@ public class JsopUtil {
 t.remove();
 }
 
-private static void addTree(Tree t, String pathIn, CoreValueFactory vf)
-throws Exception {
-addTree(t, new JsopTokenizer(pathIn), vf);
-}
-
-private static void addTree(Tree t, JsopTokenizer tokenizer,
-CoreValueFactory vf) throws Exception {
-if (!tokenizer.matches('}')) {
-do {
-String key = tokenizer.readString();
-tokenizer.read(':');
-if (tokenizer.matches('{')) {
-addTree(t.addChild(key), tokenizer, vf);
-} else {
-String val = tokenizer.readRawValue();
-if (val.startsWith([)) {
-val = val.substring(val.indexOf('[') + 1,
-val.indexOf(']'));
-ListCoreValue mvp = new ArrayListCoreValue();
-for (String v : val.split(,)) {
-mvp.add(vf.createValue(JsopTokenizer.decodeQuoted(v
-.trim(;
-}
-t.setProperty(key, mvp);
-} else {
-t.setProperty(key, vf.createValue(JsopTokenizer
-.decodeQuoted(val.trim(;
-}
+private static void addTree(Tree t, JsopTokenizer tokenizer, 
CoreValueFactory vf) {
+do {
+String key = tokenizer.readString();
+tokenizer.read(':');
+if (tokenizer.matches('{')) {
+Tree c = t.addChild(key);
+if (!tokenizer.matches('}')) {
+addTree(c, tokenizer, vf);
+tokenizer.read

svn commit: r1384300 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/QueryIndex.java

2012-09-13 Thread thomasm
Author: thomasm
Date: Thu Sep 13 12:21:33 2012
New Revision: 1384300

URL: http://svn.apache.org/viewvc?rev=1384300view=rev
Log:
OAK-34 Define query API (javadocs)

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/QueryIndex.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/QueryIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/QueryIndex.java?rev=1384300r1=1384299r2=1384300view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/QueryIndex.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/QueryIndex.java
 Thu Sep 13 12:21:33 2012
@@ -23,6 +23,21 @@ import org.apache.jackrabbit.oak.spi.sta
 /**
  * Represents an index. The index should use the data in the filter if possible
  * to speed up reading.
+ * p
+ * The query engine will pick the index that returns the lowest cost for the
+ * given filter conditions.
+ * p
+ * The index should only use that part of the filter that speeds up data 
lookup.
+ * All other filter conditions should be ignored and not evaluated within this
+ * index, because the query engine will in any case evaluate the condition (and
+ * join condition), so that evaluating the conditions within the index would
+ * actually slow down processing. For example, an index on the property
+ * lastName should not try to evaluate any other restrictions than those on
+ * the property lastName, even if the query contains other restrictions. For
+ * the query where lastName = 'x' and firstName = 'y', the query engine will
+ * set two filter conditions, one for lastName and another for firstName.
+ * The index on lastName should not evaluate the condition on firstName,
+ * even thought it will be set in the filter.
  */
 public interface QueryIndex {
 




svn commit: r1384309 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Cursor.java

2012-09-13 Thread thomasm
Author: thomasm
Date: Thu Sep 13 12:44:52 2012
New Revision: 1384309

URL: http://svn.apache.org/viewvc?rev=1384309view=rev
Log:
OAK-34 Define query API (javadocs)

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Cursor.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Cursor.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Cursor.java?rev=1384309r1=1384308r2=1384309view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Cursor.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Cursor.java
 Thu Sep 13 12:44:52 2012
@@ -31,11 +31,26 @@ public interface Cursor {
 boolean next();
 
 /**
- * The current row within this index. The row usually only contains the
- * path, but it may additionally contain so-called 'pseudo-properties' such
- * as jcr:score and rep:excerpt, in case the index supports those
- * properties and if the properties were requested when running the query.
- *
+ * The current row within this index.
+ * p
+ * The row may only contains the path, if a path is available. It may also
+ * (or just) contain so-called pseudo-properties such as jcr:score and
+ * rep:excerpt, in case the index supports those properties and if the
+ * properties were requested when running the query. The query engine will
+ * indicate that those pseudo properties were requested by setting an
+ * appropriate (possibly unrestricted) filter condition.
+ * p
+ * The index should return a row with those properties that are stored in
+ * the index itself, so that the query engine doesn't have to load the 
whole
+ * row / node unnecessarily (avoiding to load the whole row is sometimes
+ * called index only scan), specially for rows that are anyway skipped. 
If
+ * the index does not have an (efficient) way to return some (or any) of 
the
+ * properties, it doesn't have to provide those values. In this case, the
+ * query engine will load the node itself if required. If all conditions
+ * match, the query engine will sometimes load the node to do access 
checks,
+ * but this is not always the case, and it is not the case if any of the
+ * (join) conditions do not match.
+ * 
  * @return the row
  */
 IndexRow currentRow();




svn commit: r1384344 - in /jackrabbit/oak/trunk/oak-core/src/test: java/org/apache/jackrabbit/oak/query/ resources/org/apache/jackrabbit/oak/query/

2012-09-13 Thread thomasm
Author: thomasm
Date: Thu Sep 13 14:29:59 2012
New Revision: 1384344

URL: http://svn.apache.org/viewvc?rev=1384344view=rev
Log:
OAK-288 QueryTests should use the NodeStore apis - re-enable the sql2_explain 
test

Modified:

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2_explain.txt

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java?rev=1384344r1=1384343r2=1384344view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java
 Thu Sep 13 14:29:59 2012
@@ -16,8 +16,8 @@
  */
 package org.apache.jackrabbit.oak.query;
 
-import org.apache.jackrabbit.mk.api.MicroKernel;
 import org.apache.jackrabbit.mk.core.MicroKernelImpl;
+import org.apache.jackrabbit.mk.index.IndexWrapper;
 import org.apache.jackrabbit.oak.AbstractOakTest;
 import org.apache.jackrabbit.oak.api.ContentRepository;
 import org.apache.jackrabbit.oak.api.ContentSession;
@@ -44,10 +44,15 @@ public abstract class AbstractQueryTest 
 
 @Override
 protected ContentRepository createRepository() {
-MicroKernel mk = new MicroKernelImpl();
-Indexer indexer = new Indexer(mk);
-PropertyIndexer pi = new PropertyIndexer(indexer);
+
+// the property and prefix index currently require the index wrapper
+IndexWrapper mk = new IndexWrapper(new MicroKernelImpl());
+Indexer indexer = mk.getIndexer();
+
+// MicroKernel mk = new MicroKernelImpl();
+// Indexer indexer = new Indexer(mk);
 
+PropertyIndexer pi = new PropertyIndexer(indexer);
 QueryIndexProvider qip = new CompositeQueryIndexProvider(pi);
 CompositeHook hook = new CompositeHook(pi);
 return new ContentRepositoryImpl(mk, qip, hook);

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java?rev=1384344r1=1384343r2=1384344view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java
 Thu Sep 13 14:29:59 2012
@@ -211,7 +211,7 @@ public class QueryTest extends AbstractQ
 lines.add(e.toString());
 }
 time = System.currentTimeMillis() - time;
-if (time  3000) {
+if (time  3000  !isDebugModeEnabled()) {
 fail(Query took too long:  + query +  took  + time +  ms);
 }
 return lines;
@@ -234,4 +234,14 @@ public class QueryTest extends AbstractQ
 return qe.executeQuery(statement, language, Long.MAX_VALUE, 0, sv, 
null);
 }
 
+/**
+ * Check whether the test is running in debug mode.
+ * 
+ * @return true if debug most is (most likely) enabled
+ */
+private static boolean isDebugModeEnabled() {
+return java.lang.management.ManagementFactory.getRuntimeMXBean().
+getInputArguments().toString().indexOf(-agentlib:jdwp)  0;
+}
+
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt?rev=1384344r1=1384343r2=1384344view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt
 Thu Sep 13 14:29:59 2012
@@ -116,6 +116,8 @@ select * from [nt:base] as b where local
 
 select * from [nt:base] as x where isdescendantnode(x, '/') and not 
isdescendantnode(x, '/jcr:system')
 /jcr:system
+/oak-index
+/oak-index/indexes
 /test
 /test/jcr:resource
 /test/resource
@@ -139,6 +141,7 @@ select * from [nt:base] as [p] where [p]
 select * from [nt:base] as p inner join [nt:base] as p2 on ischildnode(p2, p) 
where p.[jcr:path] = '/'
 /, /children
 /, /jcr:system
+/, /oak-index
 /, /parents
 
 select * from [nt:base] as p inner join

svn commit: r1387100 - /jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/

2012-09-18 Thread thomasm
Author: thomasm
Date: Tue Sep 18 11:49:47 2012
New Revision: 1387100

URL: http://svn.apache.org/viewvc?rev=1387100view=rev
Log:
OAK-144 Remove empty directory

Removed:

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/



svn commit: r1387515 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java test/resources/org/apache/jackrabbit/oak/query/xpath.txt

2012-09-19 Thread thomasm
Author: thomasm
Date: Wed Sep 19 10:37:27 2012
New Revision: 1387515

URL: http://svn.apache.org/viewvc?rev=1387515view=rev
Log:
OAK-36 Implement a query parser - XPath: rep:spellcheck parsed but not supported

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java?rev=1387515r1=1387514r2=1387515view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/XPathToSQL2Converter.java
 Wed Sep 19 10:37:27 2012
@@ -575,7 +575,8 @@ public class XPathToSQL2Converter {
 
 private Expression parseFunction(String functionName) throws 
ParseException {
 if (jcr:like.equals(functionName)) {
-Condition c = new Condition(parseExpression(), like, null, 
Expression.PRECEDENCE_CONDITION);
+Condition c = new Condition(parseExpression(), 
+like, null, Expression.PRECEDENCE_CONDITION);
 read(,);
 c.right = parseExpression();
 read());
@@ -602,6 +603,11 @@ public class XPathToSQL2Converter {
 f.params.add(parseExpression());
 read());
 return f;
+} else if (fn:upper-case.equals(functionName)) {
+Function f = new Function(upper);
+f.params.add(parseExpression());
+read());
+return f;
 } else if (fn:name.equals(functionName)) {
 Function f = new Function(name);
 if (!readIf())) {
@@ -611,19 +617,19 @@ public class XPathToSQL2Converter {
 }
 f.params.add(new SelectorExpr(currentSelector));
 return f;
-} else if (fn:upper-case.equals(functionName)) {
-Function f = new Function(upper);
-f.params.add(parseExpression());
-read());
-return f;
 } else if (jcr:deref.equals(functionName)) {
- // TODO support jcr:deref
+ // TODO maybe support jcr:deref
  throw getSyntaxError(jcr:deref is not supported);
 } else if (rep:similar.equals(functionName)) {
- // TODO support rep:similar
+ // TODO maybe support rep:similar
  throw getSyntaxError(rep:similar is not supported);
+} else if (rep:spellcheck.equals(functionName)) {
+// TODO maybe support rep:spellcheck as in
+// /jcr:root[rep:spellcheck('${query}')]/(rep:spellcheck())

+throw getSyntaxError(rep:spellcheck is not supported);
 } else {
-throw getSyntaxError(jcr:like | jcr:contains | jcr:score | 
jcr:deref | fn:lower-case | fn:upper-case);
+throw getSyntaxError(jcr:like | jcr:contains | jcr:score | 
xs:dateTime |  + 
+fn:lower-case | fn:upper-case | fn:name);
 }
 }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt?rev=1387515r1=1387514r2=1387515view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt
 Wed Sep 19 10:37:27 2012
@@ -367,7 +367,7 @@ xpath2sql //element(*, my:type)[@my:valu
 invalid: Query: //element(*, my:type)[@my:value = [(*)'x']; expected: @, true, 
false, -, +, *, ., @, (
 
 xpath2sql //element(*, my:type)[jcr:strike(@title,'%Java%')]
-invalid: Query: //element(*, my:type)[jcr:strike(@(*)title,'%Java%')]; 
expected: jcr:like | jcr:contains | jcr:score | jcr:deref | fn:lower-case | 
fn:upper-case
+invalid: Query: //element(*, my:type)[jcr:strike(@(*)title,'%Java%')]; 
expected: jcr:like | jcr:contains | jcr:score | xs:dateTime | fn:lower-case | 
fn:upper-case | fn:name
 
 xpath2sql //element(*, my:type)[
 invalid: Query: //element(*, my:type)(*)[; expected: fn:not, not, (, @, true, 
false, -, +, *, ., @, (




svn commit: r1387516 - in /jackrabbit/oak/trunk/oak-jcr/src: main/java/org/apache/jackrabbit/oak/jcr/query/ test/java/org/apache/jackrabbit/oak/jcr/query/

2012-09-19 Thread thomasm
Author: thomasm
Date: Wed Sep 19 10:39:03 2012
New Revision: 1387516

URL: http://svn.apache.org/viewvc?rev=1387516view=rev
Log:
OAK-300 Query: QueryResult.getRows().getSize()

Added:

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/PrefetchIterator.java

jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/PrefetchIteratorTest.java
Modified:

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java

Added: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/PrefetchIterator.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/PrefetchIterator.java?rev=1387516view=auto
==
--- 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/PrefetchIterator.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/PrefetchIterator.java
 Wed Sep 19 10:39:03 2012
@@ -0,0 +1,132 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * License); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.jackrabbit.oak.jcr.query;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+/**
+ * An iterator that pre-fetches a number of items in order to calculate the 
size
+ * of the result if possible. This iterator loads at least a number of items,
+ * and then tries to load some more items until the timeout is reached or the
+ * maximum number of entries are read.
+ * p
+ * Prefeching is only done when size() is called.
+ * 
+ * @param K the iterator data type
+ */
+public class PrefetchIteratorK implements IteratorK {
+
+private final IteratorK it;
+private final long minPrefetch, timeout, maxPrefetch;
+private boolean prefetchDone;
+private IteratorK prefetchIterator;
+private long size, position;
+
+/**
+ * Create a new iterator.
+ * 
+ * @param it the base iterator
+ * @param min the minimum number of items to pre-fetch
+ * @param timeout the maximum time to pre-fetch in milliseconds
+ * @param max the maximum number of items to pre-fetch
+ * @param size the size (prefetching is only required if -1)
+ */
+PrefetchIterator(IteratorK it, long min, long timeout, long max, long 
size) {
+this.it = it;
+this.minPrefetch = min;
+this.timeout = timeout;
+this.maxPrefetch = max;
+this.size = size;
+}
+
+@Override
+public boolean hasNext() {
+if (prefetchIterator != null) {
+if (prefetchIterator.hasNext()) {
+return true;
+}
+prefetchIterator = null;
+}
+boolean result = it.hasNext();
+if (!result) {
+size = position;
+}
+return result;
+}
+
+@Override
+public K next() {
+if (!hasNext()) {
+throw new NoSuchElementException();
+}
+if (prefetchIterator != null) {
+return prefetchIterator.next();
+}
+position++;
+return it.next();
+}
+
+@Override
+public void remove() {
+throw new UnsupportedOperationException();
+}
+
+/**
+ * Get the size if known. This call might pre-fetch data. The returned 
value
+ * is unknown if the actual size is larger than the number of pre-fetched
+ * elements, unless the end of the iterator has been reached already.
+ * 
+ * @return the size, or -1 if unknown
+ */
+public long size() {
+if (size != -1 || prefetchDone || position  maxPrefetch) {
+return size;
+}
+prefetchDone = true;
+ArrayListK list = new ArrayListK();
+long end;
+if (timeout = 0) {
+end = 0;
+} else {
+long nanos = System.nanoTime();
+end = nanos + timeout * 1000 * 1000;
+}
+while (position = maxPrefetch) {
+if (position  minPrefetch) {
+if (end == 0 || System.nanoTime()  end) {
+break

svn commit: r1387999 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast: LengthImpl.java NodeNameImpl.java

2012-09-20 Thread thomasm
Author: thomasm
Date: Thu Sep 20 12:50:24 2012
New Revision: 1387999

URL: http://svn.apache.org/viewvc?rev=1387999view=rev
Log:
OAK-28 Query implementation: upper(x) / lower(x) / length(x) implies x is not 
null (prevent NPE)

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LengthImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LengthImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LengthImpl.java?rev=1387999r1=1387998r2=1387999view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LengthImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LengthImpl.java
 Thu Sep 20 12:50:24 2012
@@ -66,22 +66,24 @@ public class LengthImpl extends DynamicO
 
 @Override
 public void restrict(FilterImpl f, Operator operator, CoreValue v) {
-switch (v.getType()) {
-case PropertyType.LONG:
-case PropertyType.DECIMAL:
-case PropertyType.DOUBLE:
-// ok - comparison with a number
-break;
-case PropertyType.BINARY:
-case PropertyType.STRING:
-case PropertyType.DATE:
-// ok - compare with a string literal
-break;
-default:
-throw new IllegalArgumentException(
-Can not compare the length with a constant of type 
-+ PropertyType.nameFromValue(v.getType()) +
- and value  + v.toString());
+if (v != null) {
+switch (v.getType()) {
+case PropertyType.LONG:
+case PropertyType.DECIMAL:
+case PropertyType.DOUBLE:
+// ok - comparison with a number
+break;
+case PropertyType.BINARY:
+case PropertyType.STRING:
+case PropertyType.DATE:
+// ok - compare with a string literal
+break;
+default:
+throw new IllegalArgumentException(
+Can not compare the length with a constant of type 
++ PropertyType.nameFromValue(v.getType()) +
+ and value  + v.toString());
+}
 }
 // LENGTH(x) implies x is not null
 propertyValue.restrict(f, Operator.NOT_EQUAL, null);

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java?rev=1387999r1=1387998r2=1387999view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java
 Thu Sep 20 12:50:24 2012
@@ -68,6 +68,9 @@ public class NodeNameImpl extends Dynami
 
 @Override
 public void restrict(FilterImpl f, Operator operator, CoreValue v) {
+if (v == null) {
+return;
+}
 if (!isName(v)) {
 throw new IllegalArgumentException(Invalid name value:  + 
v.toString());
 }




svn commit: r1388000 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java test/java/org/apache/jackrabbit/oak/query/QueryTest.java test/resources/org

2012-09-20 Thread thomasm
Author: thomasm
Date: Thu Sep 20 12:51:57 2012
New Revision: 1388000

URL: http://svn.apache.org/viewvc?rev=1388000view=rev
Log:
OAK-322 XPath query is included in the exception message

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java?rev=1388000r1=1387999r2=1388000view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java
 Thu Sep 20 12:51:57 2012
@@ -86,7 +86,11 @@ public class QueryEngineImpl {
 XPathToSQL2Converter converter = new XPathToSQL2Converter();
 String sql2 = converter.convert(statement);
 SQL2Parser parser = new SQL2Parser(vf);
-q = parser.parse(sql2);
+try {
+q = parser.parse(sql2);
+} catch (ParseException e) {
+throw new ParseException(statement +  converted to SQL-2  + 
e.getMessage(), 0);
+}
 } else {
 throw new ParseException(Unsupported language:  + language, 0);
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java?rev=1388000r1=1387999r2=1388000view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java
 Thu Sep 20 12:51:57 2012
@@ -134,12 +134,16 @@ public class QueryTest extends AbstractQ
 } else if (line.startsWith(select) ||
 line.startsWith(explain) ||
 line.startsWith(measure) ||
-line.startsWith(sql1)) {
+line.startsWith(sql1) ||
+line.startsWith(xpath)) {
 w.println(line);
 String language = QueryEngineImpl.SQL2;
-if (line.startsWith(sql1)) {
+if (line.startsWith(sql1 )) {
 language = QueryEngineImpl.SQL;
 line = line.substring(sql1 .length());
+} else if (line.startsWith(xpath )) {
+language = QueryEngineImpl.XPATH;
+line = line.substring(xpath .length());
 }
 boolean readEnd = true;
 for (String resultLine : executeQuery(line, language)) {

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt?rev=1388000r1=1387999r2=1388000view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt
 Thu Sep 20 12:51:57 2012
@@ -25,6 +25,9 @@
 
 # jackrabbit test queries
 
+xpath /jcr:root/testroot//*[0]
+java.text.ParseException: /jcr:root/testroot//*[0] converted to SQL-2 Query: 
select [jcr:path], [jcr:score], * from [nt:base] as a where 0(*)is not null and 
isdescendantnode(a, '/testroot'); expected: NOT, (
+
 xpath2sql /test
 select [jcr:path], [jcr:score], * from [nt:base] as a where name(a) = 'test' 
and issamenode(a, '/')
 




svn commit: r1388002 - /jackrabbit/oak/trunk/oak-jcr/pom.xml

2012-09-20 Thread thomasm
Author: thomasm
Date: Thu Sep 20 12:53:49 2012
New Revision: 1388002

URL: http://svn.apache.org/viewvc?rev=1388002view=rev
Log:
OAK-28 Query implementation: upper(x) / lower(x) / length(x) implies x is not 
null (prevent NPE)

Modified:
jackrabbit/oak/trunk/oak-jcr/pom.xml

Modified: jackrabbit/oak/trunk/oak-jcr/pom.xml
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/pom.xml?rev=1388002r1=1388001r2=1388002view=diff
==
--- jackrabbit/oak/trunk/oak-jcr/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-jcr/pom.xml Thu Sep 20 12:53:49 2012
@@ -33,8 +33,6 @@
 
   properties
 known.issues
-org.apache.jackrabbit.test.api.query.qom.UpperLowerCaseTest#testLength
-org.apache.jackrabbit.test.api.query.qom.UpperLowerCaseTest#testNodeName
 org.apache.jackrabbit.test.api.AddNodeTest#testSameNameSiblings!-- OAK-203 --
 
org.apache.jackrabbit.test.api.SessionTest#testMoveConstraintViolationExceptionSrc!--OAK-132--
 
org.apache.jackrabbit.test.api.SessionTest#testMoveConstraintViolationExceptionDest!--OAK-132--




svn commit: r1401633 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java

2012-10-24 Thread thomasm
Author: thomasm
Date: Wed Oct 24 11:50:54 2012
New Revision: 1401633

URL: http://svn.apache.org/viewvc?rev=1401633view=rev
Log:
OAK-308 NodeIterator limit and offset don't work as expected

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java?rev=1401633r1=1401632r2=1401633view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 Wed Oct 24 11:50:54 2012
@@ -308,7 +308,13 @@ public class Query {
 null);
 it = Arrays.asList(r).iterator();
 } else {
-it = new RowIterator(root, limit, offset);
+if (orderings == null) {
+// can apply limit and offset directly
+it = new RowIterator(root, limit, offset);
+} else {
+// read and order first; skip and limit afterwards
+it = new RowIterator(root, Long.MAX_VALUE, 0);
+}
 long resultCount = 0;
 if (orderings != null) {
 // TODO order by is not necessary if the used index returns
@@ -318,9 +324,25 @@ public class Query {
 ResultRowImpl r = it.next();
 list.add(r);
 }
-resultCount = size = list.size();
 Collections.sort(list);
+// if limit is set, possibly remove the tailing entries
+// for list size 10, offset 2, limit 5: remove 3
+resultCount = list.size();
+// avoid overflow (both offset and limit could be 
Long.MAX_VALUE)
+long keep = Math.min(list.size(), offset) + 
Math.min(list.size(), limit);
+while (list.size()  keep) {
+// remove tail entries right now, to save memory (don't 
copy)
+// remove the entries starting at the end, 
+// to avoid n^2 performance
+list.remove(list.size() - 1);
+}
 it = list.iterator();
+// skip the head (this is more efficient than removing
+// if there are many entries)
+for (int i = 0; i  offset  it.hasNext(); i++) {
+it.next();
+}
+size = list.size() - offset;
 } else if (measure) {
 while (it.hasNext()) {
 resultCount++;




svn commit: r1401651 - in /jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query: ast/FullTextTest.java ast/LikePatternTest.java index/TraversingIndexTest.java

2012-10-24 Thread thomasm
Author: thomasm
Date: Wed Oct 24 12:37:58 2012
New Revision: 1401651

URL: http://svn.apache.org/viewvc?rev=1401651view=rev
Log:
OAK-28 Query: remove unused imports, document program flow

Modified:

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/ast/FullTextTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/ast/LikePatternTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/ast/FullTextTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/ast/FullTextTest.java?rev=1401651r1=1401650r2=1401651view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/ast/FullTextTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/ast/FullTextTest.java
 Wed Oct 24 12:37:58 2012
@@ -23,7 +23,6 @@ import static org.junit.Assert.fail;
 
 import java.text.ParseException;
 
-import org.apache.jackrabbit.oak.query.ast.FullTextSearchImpl;
 import org.junit.Test;
 
 /**

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/ast/LikePatternTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/ast/LikePatternTest.java?rev=1401651r1=1401650r2=1401651view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/ast/LikePatternTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/ast/LikePatternTest.java
 Wed Oct 24 12:37:58 2012
@@ -21,7 +21,6 @@ package org.apache.jackrabbit.oak.query.
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.assertFalse;
-import org.apache.jackrabbit.oak.query.ast.ComparisonImpl;
 import org.junit.Test;
 
 /**

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexTest.java?rev=1401651r1=1401650r2=1401651view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexTest.java
 Wed Oct 24 12:37:58 2012
@@ -48,9 +48,19 @@ public class TraversingIndexTest {
 int slash = key.indexOf('/');
 String revision = key.substring(0, slash);
 String path = key.substring(slash);
-return new KernelNodeState(mk, path, revision, cache);
+// this method is strictly called _after_ the cache is 
initialized,
+// when the fields are set
+return new KernelNodeState(getMicroKernel(), path, 
revision, getCache());
 }
 });
+
+MicroKernel getMicroKernel() {
+return mk;
+}
+
+LoadingCacheString, KernelNodeState getCache() {
+return cache;
+}
 
 @Test
 public void traverse() throws Exception {




svn commit: r1401716 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast: ComparisonImpl.java PropertyValueImpl.java SelectorImpl.java SourceImpl.java

2012-10-24 Thread thomasm
Author: thomasm
Date: Wed Oct 24 14:53:16 2012
New Revision: 1401716

URL: http://svn.apache.org/viewvc?rev=1401716view=rev
Log:
OAK-361 QueryEngine JCR-SQL 'ESCAPE' parsing  support
OAK-347 QueryEngine 'like' interpretation error for paths

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SourceImpl.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java?rev=1401716r1=1401715r2=1401716view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java
 Wed Oct 24 14:53:16 2012
@@ -136,28 +136,35 @@ public class ComparisonImpl extends Cons
 public void restrict(FilterImpl f) {
 PropertyValue v = operand2.currentValue();
 if (v != null) {
-operand1.restrict(f, operator, v);
+   // operand1.restrict(f, operator, v);
 // TODO OAK-347
-//if (operator == Operator.LIKE) {
-//String pattern;
-//pattern = v.getString();
-//LikePattern p = new LikePattern(pattern);
-//String lowerBound = p.getLowerBound();
-//String upperBound = p.getUpperBound();
-//if (lowerBound == null  upperBound == null) {
-//// ignore
-//} else if (operand1.supportsRangeConditions()) {
-//CoreValueFactory vf = query.getValueFactory();
-//if (lowerBound != null) {
-//operand1.restrict(f, Operator.GREATER_OR_EQUAL, 
vf.createValue(lowerBound));
-//}
-//if (upperBound != null) {
-//operand1.restrict(f, Operator.LESS_OR_EQUAL, 
vf.createValue(upperBound));
-//}
-//}
-//} else {
-//operand1.restrict(f, operator, v);
-//}
+if (operator == Operator.LIKE) {
+String pattern;
+pattern = v.getValue(Type.STRING);
+LikePattern p = new LikePattern(pattern);
+String lowerBound = p.getLowerBound();
+String upperBound = p.getUpperBound();
+if (lowerBound == null  upperBound == null) {
+// ignore
+} else if (lowerBound.equals(upperBound)) {
+// no wildcards
+operand1.restrict(f, Operator.EQUAL, v);
+} else if (operand1.supportsRangeConditions()) {
+if (lowerBound != null) {
+PropertyValue pv = 
PropertyValues.newString(lowerBound);
+operand1.restrict(f, Operator.GREATER_OR_EQUAL, pv);
+}
+if (upperBound != null) {
+PropertyValue pv = 
PropertyValues.newString(upperBound);
+operand1.restrict(f, Operator.LESS_OR_EQUAL, pv);
+}
+} else {
+// path conditions
+operand1.restrict(f, operator, v);
+}
+} else {
+operand1.restrict(f, operator, v);
+}
 }
 }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java?rev=1401716r1=1401715r2=1401716view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java
 Wed Oct 24 14:53:16 2012
@@ -29,6 +29,7 @@ import org.apache.jackrabbit.oak.api.Pro
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.query.Query;
 import org.apache.jackrabbit.oak.query.SQL2Parser;
 import org.apache.jackrabbit.oak.query.index.FilterImpl;
 import org.apache.jackrabbit.oak.spi.query.PropertyValues;
@@ -80,6 +81,14

svn commit: r1402137 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java

2012-10-25 Thread thomasm
Author: thomasm
Date: Thu Oct 25 13:04:56 2012
New Revision: 1402137

URL: http://svn.apache.org/viewvc?rev=1402137view=rev
Log:
OAK-400 The query engine should pick the index with the lowest cost

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java?rev=1402137r1=1402136r2=1402137view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java
 Thu Oct 25 13:04:56 2012
@@ -115,6 +115,7 @@ public class QueryEngineImpl {
 for (QueryIndex index : getIndexes()) {
 double cost = index.getCost(filter);
 if (cost  bestCost) {
+bestCost = cost;
 best = index;
 }
 }




svn commit: r1402144 - /jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java

2012-10-25 Thread thomasm
Author: thomasm
Date: Thu Oct 25 13:25:16 2012
New Revision: 1402144

URL: http://svn.apache.org/viewvc?rev=1402144view=rev
Log:
OAK-402 Refactor query and index tests

Modified:

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java?rev=1402144r1=1402143r2=1402144view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java
 Thu Oct 25 13:25:16 2012
@@ -120,7 +120,7 @@ public abstract class AbstractQueryTest 
 
 @Test
 @Ignore(OAK-336)
-public void sql2_measure() throws Exception {
+public void sql2Measure() throws Exception {
 test(sql2_measure.txt);
 }
 




svn commit: r1404899 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak: plugins/index/old/ query/ spi/query/

2012-11-02 Thread thomasm
Author: thomasm
Date: Fri Nov  2 09:08:59 2012
New Revision: 1404899

URL: http://svn.apache.org/viewvc?rev=1404899view=rev
Log:
OAK-404 Log (slow) queries (log all queries and query plans with log level 
'debug')

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PrefixIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyContentIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/CompositeQueryIndexProvider.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PrefixIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PrefixIndex.java?rev=1404899r1=1404898r2=1404899view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PrefixIndex.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PrefixIndex.java
 Fri Nov  2 09:08:59 2012
@@ -132,5 +132,10 @@ public class PrefixIndex implements PInd
 public boolean isUnique() {
 return tree.isUnique();
 }
+
+@Override
+public String toString() {
+return getIndexNodeName();
+}
 
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyContentIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyContentIndex.java?rev=1404899r1=1404898r2=1404899view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyContentIndex.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyContentIndex.java
 Fri Nov  2 09:08:59 2012
@@ -112,5 +112,10 @@ public class PropertyContentIndex implem
 return false;
 }
 }
+
+@Override
+public String toString() {
+return index.toString();
+}
 
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyIndex.java?rev=1404899r1=1404898r2=1404899view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyIndex.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyIndex.java
 Fri Nov  2 09:08:59 2012
@@ -136,5 +136,10 @@ public class PropertyIndex implements PI
 public boolean isUnique() {
 return tree.isUnique();
 }
+
+@Override
+public String toString() {
+return getIndexNodeName();
+}
 
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java?rev=1404899r1=1404898r2=1404899view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 Fri Nov  2 09:08:59 2012
@@ -53,6 +53,8 @@ import org.apache.jackrabbit.oak.spi.que
 import org.apache.jackrabbit.oak.spi.query.PropertyValues;
 import org.apache.jackrabbit.oak.spi.query.QueryIndex;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Represents a parsed query. Lifecycle: use the constructor to create a new
@@ -72,6 +74,8 @@ public class Query {
  */
 public static final String JCR_SCORE = jcr:score;
 
+private static final Logger LOG = 
LoggerFactory.getLogger(QueryEngineImpl.class);
+
 final SourceImpl source;
 final ConstraintImpl constraint;
 final HashMapString, PropertyValue bindVariableMap = new HashMapString, 
PropertyValue();
@@ -308,6 +312,9 @@ public class Query {
 null);
 it = Arrays.asList(r).iterator();
 } else {
+if (LOG.isDebugEnabled

svn commit: r1404926 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/query/ast/ test/java/org/apache/jackrabbit/oak/plugins/index/lucene/ test/java/org/apache/jackrabbit/o

2012-11-02 Thread thomasm
Author: thomasm
Date: Fri Nov  2 11:23:07 2012
New Revision: 1404926

URL: http://svn.apache.org/viewvc?rev=1404926view=rev
Log:
OAK-419 Query: Conditions are not pushed to outer join selectors
OAK-420 Query: Lucene index problem with isdescendantnode

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NotImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2_measure.txt

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NotImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NotImpl.java?rev=1404926r1=1404925r2=1404926view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NotImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NotImpl.java
 Fri Nov  2 11:23:07 2012
@@ -52,6 +52,21 @@ public class NotImpl extends ConstraintI
 
 @Override
 public void restrict(FilterImpl f) {
+if (f.getSelector().outerJoin) {
+// we need to be careful with the condition 
+// NOT (property IS NOT NULL)
+// (which is the same as 
+// property IS NULL) because
+// this might cause an index to ignore
+// the join condition property = x
+// for example in:
+// select * from a left outer join b on a.x = b.y
+// where not b.y is not null
+// must not result in the index to check for
+// b.y is null, because that would alter the
+// result
+return;
+}
 // ignore
 // TODO convert NOT conditions
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java?rev=1404926r1=1404925r2=1404926view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
 Fri Nov  2 11:23:07 2012
@@ -126,13 +126,20 @@ public class SelectorImpl extends Source
 if (joinCondition != null) {
 joinCondition.restrict(f);
 }
-if (!outerJoin) {
-// for outer joins, query constraints can't be applied to the
-// filter, because that would alter the result
-if (queryConstraint != null) {
-queryConstraint.restrict(f);
-}
+
+// all conditions can be pushed to the selectors -
+// except in some cases to outer joined selectors,
+// but the exceptions are handled in the condition
+// itself.
+// An example where it *is* a problem:
+//  select * from a left outer join b on a.x = b.y
+// where b.y is null - in this case the selector b
+// must not use an index condition on y is null
+// (.. is null must be written as not .. is not null).
+if (queryConstraint != null) {
+queryConstraint.restrict(f);
 }
+
 return f;
 }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java?rev=1404926r1=1404925r2=1404926view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java
 Fri Nov  2 11:23:07 2012
@@ -22,6 +22,8 @@ import org.apache.jackrabbit.oak.api.Tre
 import org.apache.jackrabbit.oak.plugins.index.IndexHookManager;
 import org.apache.jackrabbit.oak.plugins.nodetype.InitialContent;
 import org.apache.jackrabbit.oak.query.AbstractQueryTest;
+import org.junit.Ignore;
+import org.junit.Test;
 
 /**
  * Tests the query engine using the default index implementation

svn commit: r1405746 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/plugins/index/old/ main/java/org/apache/jackrabbit/oak/plugins/index/property/ main/java/org/apache/ja

2012-11-05 Thread thomasm
Author: thomasm
Date: Mon Nov  5 11:08:46 2012
New Revision: 1405746

URL: http://svn.apache.org/viewvc?rev=1405746view=rev
Log:
OAK-404 Log (slow) queries (log queries with level warn if more than 100 
nodes are traversed)

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PrefixContentIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingCursor.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingIndex.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PrefixContentIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PrefixContentIndex.java?rev=1405746r1=1405745r2=1405746view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PrefixContentIndex.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PrefixContentIndex.java
 Mon Nov  5 11:08:46 2012
@@ -134,5 +134,10 @@ public class PrefixContentIndex implemen
 return false;
 }
 }
+
+@Override
+public String toString() {
+return index.toString();
+}
 
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java?rev=1405746r1=1405745r2=1405746view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java
 Mon Nov  5 11:08:46 2012
@@ -138,7 +138,7 @@ public class PropertyIndex implements Qu
 if (paths != null) {
 return new PathCursor(paths);
 } else {
-return new TraversingCursor(filter, root);
+return new TraversingCursor(?, filter, root);
 }
 }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java?rev=1405746r1=1405745r2=1405746view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 Mon Nov  5 11:08:46 2012
@@ -77,6 +77,7 @@ public class Query {
 private static final Logger LOG = 
LoggerFactory.getLogger(QueryEngineImpl.class);
 
 final SourceImpl source;
+final String statement;
 final ConstraintImpl constraint;
 final HashMapString, PropertyValue bindVariableMap = new HashMapString, 
PropertyValue();
 final HashMapString, Integer selectorIndexes = new HashMapString, 
Integer();
@@ -93,8 +94,9 @@ public class Query {
 private Root root;
 private NamePathMapper namePathMapper;
 
-Query(SourceImpl source, ConstraintImpl constraint, OrderingImpl[] 
orderings,
+Query(String statement, SourceImpl source, ConstraintImpl constraint, 
OrderingImpl[] orderings,
   ColumnImpl[] columns) {
+this.statement = statement;
 this.source = source;
 this.constraint = constraint;
 this.orderings = orderings;
@@ -566,7 +568,7 @@ public class Query {
 }
 
 public QueryIndex getBestIndex(Filter filter) {
-return queryEngine.getBestIndex(filter);
+return queryEngine.getBestIndex(this, filter);
 }
 
 public void setRoot(Root root) {
@@ -617,4 +619,8 @@ public class Query {
 return size;
 }
 
+public String getStatement() {
+return statement;
+}
+
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java?rev

svn commit: r1406124 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast: DescendantNodeImpl.java SelectorImpl.java

2012-11-06 Thread thomasm
Author: thomasm
Date: Tue Nov  6 13:17:11 2012
New Revision: 1406124

URL: http://svn.apache.org/viewvc?rev=1406124view=rev
Log:
OAK-423 Query: org.apache.jackrabbit.oak.spi.query.Cursor.currentRow called too 
late

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DescendantNodeImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DescendantNodeImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DescendantNodeImpl.java?rev=1406124r1=1406123r2=1406124view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DescendantNodeImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DescendantNodeImpl.java
 Tue Nov  6 13:17:11 2012
@@ -39,8 +39,11 @@ public class DescendantNodeImpl extends 
 @Override
 public boolean evaluate() {
 String p = selector.currentPath();
+if (p == null) {
+return false;
+}
 String path = getAbsolutePath(ancestorPath);
-if (p == null || path == null) {
+if (path == null) {
 return false;
 }
 return PathUtils.isAncestor(path, p);

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java?rev=1406124r1=1406123r2=1406124view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
 Tue Nov  6 13:17:11 2012
@@ -164,6 +164,7 @@ public class SelectorImpl extends Source
 }
 return true;
 }
+cursor = null;
 return false;
 }
 




svn commit: r1406128 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Cursors.java

2012-11-06 Thread thomasm
Author: thomasm
Date: Tue Nov  6 13:29:45 2012
New Revision: 1406128

URL: http://svn.apache.org/viewvc?rev=1406128view=rev
Log:
OAK-423 Query: org.apache.jackrabbit.oak.spi.query.Cursor.currentRow called too 
late (prevent future bugs)

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Cursors.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Cursors.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Cursors.java?rev=1406128r1=1406127r2=1406128view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Cursors.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Cursors.java
 Tue Nov  6 13:29:45 2012
@@ -121,6 +121,8 @@ public class Cursors {
 
 private long readCount;
 
+private boolean closed;
+
 public TraversingCursor(String statement, Filter filter, NodeState 
root) {
 this.statement = statement;
 this.filter = filter;
@@ -170,6 +172,9 @@ public class Cursors {
 
 @Override
 public IndexRow currentRow() {
+if (closed) {
+throw new IllegalStateException(This cursor is closed);
+}
 return new IndexRowImpl(currentPath);
 }
 
@@ -204,6 +209,7 @@ public class Cursors {
 }
 }
 currentPath = null;
+closed = true;
 return false;
 }
 




svn commit: r1406676 - /jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java

2012-11-07 Thread thomasm
Author: thomasm
Date: Wed Nov  7 15:30:25 2012
New Revision: 1406676

URL: http://svn.apache.org/viewvc?rev=1406676view=rev
Log:
OAK-123 Data store improvements

Modified:

jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java

Modified: 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java?rev=1406676r1=1406675r2=1406676view=diff
==
--- 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/blobs/AbstractBlobStore.java
 Wed Nov  7 15:30:25 2012
@@ -218,6 +218,17 @@ public abstract class AbstractBlobStore 
 in.close();
 }
 
+/**
+ * Store a block of data.
+ * 
+ * @param digest the content hash
+ * @param level the indirection level (0 is for user data, 1 is a list of
+ *digests that point to user data, 2 is a list of digests that
+ *point to digests, and so on). This parameter is for
+ *informational use only, and it is not required to store it
+ *unless that's easy to achieve
+ * @param data the data to be stored
+ */
 protected abstract void storeBlock(byte[] digest, int level, byte[] data) 
throws Exception;
 
 public abstract void startMark() throws Exception;
@@ -421,6 +432,14 @@ public abstract class AbstractBlobStore 
 public String toString() {
 return StringUtils.convertBytesToHex(digest) + @ + pos;
 }
+
+public byte[] getDigest() {
+return digest;
+}
+
+public long getPos() {
+return pos;
+}
 
 }
 




svn commit: r1408729 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/ oak-c

2012-11-13 Thread thomasm
Author: thomasm
Date: Tue Nov 13 14:05:32 2012
New Revision: 1408729

URL: http://svn.apache.org/viewvc?rev=1408729view=rev
Log:
OAK-425 Query Index: pass the query statement to the index for logging purposes

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/FilterImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Cursors.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Filter.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/FilterTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexTest.java

jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndex.java?rev=1408729r1=1408728r2=1408729view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndex.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndex.java
 Tue Nov 13 14:05:32 2012
@@ -28,7 +28,6 @@ import org.apache.jackrabbit.JcrConstant
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.core.ReadOnlyTree;
-import org.apache.jackrabbit.oak.plugins.index.property.PropertyIndexLookup;
 import org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants;
 import org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager;
 import org.apache.jackrabbit.oak.spi.query.Cursor;
@@ -68,7 +67,7 @@ class NodeTypeIndex implements QueryInde
 public Cursor query(Filter filter, NodeState root) {
 NodeTypeIndexLookup lookup = new NodeTypeIndexLookup(root);
 if (!hasNodeTypeRestriction(filter) || 
!lookup.isIndexed(filter.getPath())) {
-return Cursors.newTraversingCursor(?, filter, root);
+return Cursors.newTraversingCursor(filter, root);
 }
 return Cursors.newPathCursor(lookup.find(
 resolveNodeType(root, filter.getNodeType(;
@@ -97,7 +96,7 @@ class NodeTypeIndex implements QueryInde
 SetString ntNames = Sets.newHashSet();
 try {
 NodeType nt = ntMgr.getNodeType(nodeType);
-for (NodeTypeIterator types = nt.getSubtypes(); types.hasNext(); ) 
{
+for (NodeTypeIterator types = nt.getSubtypes(); types.hasNext();) {
 ntNames.add(types.nextNodeType().getName());
 }
 ntNames.add(nodeType);

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java?rev=1408729r1=1408728r2=1408729view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java
 Tue Nov 13 14:05:32 2012
@@ -142,7 +142,7 @@ public class PropertyIndex implements Qu
 if (paths != null) {
 return Cursors.newPathCursor(paths);
 } else {
-return Cursors.newTraversingCursor(?, filter, root);
+return Cursors.newTraversingCursor(filter, root);
 }
 }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java?rev=1408729r1=1408728r2=1408729view=diff

svn commit: r1409171 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak: plugins/index/old/PrefixContentIndex.java plugins/index/old/PropertyContentIndex.java spi/query/Cursor

2012-11-14 Thread thomasm
Author: thomasm
Date: Wed Nov 14 11:47:48 2012
New Revision: 1409171

URL: http://svn.apache.org/viewvc?rev=1409171view=rev
Log:
OAK-423 Query: org.apache.jackrabbit.oak.spi.query.Cursor.currentRow called too 
late - refactor the Cursor interface to extend IteratorIndexRow

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PrefixContentIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyContentIndex.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Cursor.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Cursors.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PrefixContentIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PrefixContentIndex.java?rev=1409171r1=1409170r2=1409171view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PrefixContentIndex.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PrefixContentIndex.java
 Wed Nov 14 11:47:48 2012
@@ -30,6 +30,7 @@ import org.apache.jackrabbit.oak.spi.que
 import org.apache.jackrabbit.oak.spi.query.Filter;
 import org.apache.jackrabbit.oak.spi.query.IndexRow;
 import org.apache.jackrabbit.oak.spi.query.QueryIndex;
+import org.apache.jackrabbit.oak.spi.query.Cursors.AbstractCursor;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
 /**
@@ -108,7 +109,7 @@ public class PrefixContentIndex implemen
 /**
  * The cursor to for this index.
  */
-static class ContentCursor implements Cursor {
+static class ContentCursor extends AbstractCursor {
 
 private final IteratorString it;
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyContentIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyContentIndex.java?rev=1409171r1=1409170r2=1409171view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyContentIndex.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/old/PropertyContentIndex.java
 Wed Nov 14 11:47:48 2012
@@ -27,6 +27,7 @@ import org.apache.jackrabbit.oak.spi.que
 import org.apache.jackrabbit.oak.spi.query.Filter;
 import org.apache.jackrabbit.oak.spi.query.IndexRow;
 import org.apache.jackrabbit.oak.spi.query.QueryIndex;
+import org.apache.jackrabbit.oak.spi.query.Cursors.AbstractCursor;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
 /**
@@ -88,7 +89,7 @@ public class PropertyContentIndex implem
 /**
  * The cursor to for this index.
  */
-static class ContentCursor implements Cursor {
+static class ContentCursor extends AbstractCursor {
 
 private final IteratorString it;
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Cursor.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Cursor.java?rev=1409171r1=1409170r2=1409171view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Cursor.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Cursor.java
 Wed Nov 14 11:47:48 2012
@@ -18,10 +18,12 @@
  */
 package org.apache.jackrabbit.oak.spi.query;
 
+import java.util.Iterator;
+
 /**
  * A cursor to read a number of nodes sequentially.
  */
-public interface Cursor {
+public interface Cursor extends IteratorIndexRow {
 
 /**
  * The next row within this index.
@@ -46,8 +48,7 @@ public interface Cursor {
  * 
  * @return the row
  */
+@Override
 IndexRow next();
 
-boolean hasNext();
-
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Cursors.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Cursors.java?rev=1409171r1=1409170r2=1409171view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Cursors.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Cursors.java
 Wed Nov 14 11:47:48 2012
@@ -65,12 +65,25 @@ public class Cursors

svn commit: r1412128 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/query/ oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ oak-core/src/test/resources/org/apa

2012-11-21 Thread thomasm
Author: thomasm
Date: Wed Nov 21 14:34:36 2012
New Revision: 1412128

URL: http://svn.apache.org/viewvc?rev=1412128view=rev
Log:
OAK-295 Jackrabbit query with spaces in node names

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElement.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ChildNodeImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DescendantNodeImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SameNodeImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java

jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/QOMNode.java

jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/qom/QomTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java?rev=1412128r1=1412127r2=1412128view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 Wed Nov 21 14:34:36 2012
@@ -23,6 +23,7 @@ import java.util.List;
 import org.apache.jackrabbit.oak.api.PropertyValue;
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.namepath.JcrPathParser;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 import org.apache.jackrabbit.oak.query.ast.AstVisitorBase;
 import org.apache.jackrabbit.oak.query.ast.BindVariableValueImpl;
@@ -605,6 +606,17 @@ public class Query {
 public Tree getTree(String path) {
 return root.getTree(path);
 }
+
+/**
+ * Validate a path is syntactically correct.
+ * 
+ * @param path the path to validate
+ */
+public void validatePath(String path) {
+if (!JcrPathParser.validate(path)) {
+throw new IllegalArgumentException(Invalid path:  + path);
+}
+}
 
 @Override
 public String toString() {

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java?rev=1412128r1=1412127r2=1412128view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
 Wed Nov 21 14:34:36 2012
@@ -43,15 +43,15 @@ import java.util.ArrayList;
 import java.util.HashMap;
 
 /**
- * The SQL2 parser can convert a JCR-SQL2 query to a query.
- * The 'old' SQL query language is also supported if
+ * The SQL2 parser can convert a JCR-SQL2 query to a query. The 'old' SQL query
+ * language (here named SQL-1) is also supported.
  */
 public class SQL2Parser {
 
 // Character types, used during the tokenizer phase
 private static final int CHAR_END = -1, CHAR_VALUE = 2, CHAR_QUOTED = 3;
 private static final int CHAR_NAME = 4, CHAR_SPECIAL_1 = 5, CHAR_SPECIAL_2 
= 6;
-private static final int CHAR_STRING = 7, CHAR_DECIMAL = 8;
+private static final int CHAR_STRING = 7, CHAR_DECIMAL = 8, CHAR_BRACKETED 
= 9;
 
 // Token types
 private static final int KEYWORD = 1, IDENTIFIER = 2, PARAMETER = 3, END = 
4, VALUE = 5;
@@ -182,30 +182,17 @@ public class SQL2Parser {
 }
 
 private String readName() throws ParseException {
-if (readIf([)) {
-if (currentTokenType == VALUE) {
-PropertyValue value = readString();
-read(]);
-return value.getValue(Type.STRING);
-} else {
-int level = 1;
-StringBuilder buff = new StringBuilder();
-while (true) {
-if (isToken(])) {
-if (--level = 0) {
-read();
-break;
-}
-} else if (isToken([)) {
-level++;
-}
-buff.append(readAny());
-}
-return buff.toString();
-}
+if (currentTokenType

svn commit: r1412513 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java

2012-11-22 Thread thomasm
Author: thomasm
Date: Thu Nov 22 11:59:39 2012
New Revision: 1412513

URL: http://svn.apache.org/viewvc?rev=1412513view=rev
Log:
JCR-3460 PropertyIndex uses TraversingCursor but should not

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java?rev=1412513r1=1412512r2=1412513view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java
 Thu Nov 22 11:59:39 2012
@@ -139,11 +139,10 @@ public class PropertyIndex implements Qu
 }
 }
 
-if (paths != null) {
-return Cursors.newPathCursor(paths);
-} else {
-return Cursors.newTraversingCursor(filter, root);
+if (paths == null) {
+throw new IllegalStateException(Property index is used even when 
no index is available for filter  + filter);
 }
+return Cursors.newPathCursor(paths);
 }
 
 @Override




svn commit: r1412514 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndex.java

2012-11-22 Thread thomasm
Author: thomasm
Date: Thu Nov 22 12:04:53 2012
New Revision: 1412514

URL: http://svn.apache.org/viewvc?rev=1412514view=rev
Log:
JCR-3460 PropertyIndex uses TraversingCursor but should not

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndex.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndex.java?rev=1412514r1=1412513r2=1412514view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndex.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndex.java
 Thu Nov 22 12:04:53 2012
@@ -67,7 +67,8 @@ class NodeTypeIndex implements QueryInde
 public Cursor query(Filter filter, NodeState root) {
 NodeTypeIndexLookup lookup = new NodeTypeIndexLookup(root);
 if (!hasNodeTypeRestriction(filter) || 
!lookup.isIndexed(filter.getPath())) {
-return Cursors.newTraversingCursor(filter, root);
+throw new IllegalStateException(
+NodeType index is used even when no index is available 
for filter  + filter);
 }
 return Cursors.newPathCursor(lookup.find(
 resolveNodeType(root, filter.getNodeType(;




svn commit: r1412572 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java

2012-11-22 Thread thomasm
Author: thomasm
Date: Thu Nov 22 14:56:20 2012
New Revision: 1412572

URL: http://svn.apache.org/viewvc?rev=1412572view=rev
Log:
OAK-308 NodeIterator limit and offset don't work as expected

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java?rev=1412572r1=1412571r2=1412572view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
 Thu Nov 22 14:56:20 2012
@@ -331,7 +331,8 @@ public class Query {
 // rows in the same order
 
 // avoid overflow (both offset and limit could be 
Long.MAX_VALUE)
-int keep = (int) (Math.min(Integer.MAX_VALUE, offset) + 
+int keep = (int) Math.min(Integer.MAX_VALUE, 
+Math.min(Integer.MAX_VALUE, offset) + 
 Math.min(Integer.MAX_VALUE, limit));
 
 ArrayListResultRowImpl list = new ArrayListResultRowImpl();




svn commit: r1412613 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property: PropertyIndexDiff.java PropertyIndexHookProvider.java PropertyIndexLookup.java

2012-11-22 Thread thomasm
Author: thomasm
Date: Thu Nov 22 16:38:20 2012
New Revision: 1412613

URL: http://svn.apache.org/viewvc?rev=1412613view=rev
Log:
JCR-3462 Documentation for the PropertyIndex

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexDiff.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexHookProvider.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexLookup.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexProvider.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexUpdate.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexDiff.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexDiff.java?rev=1412613r1=1412612r2=1412613view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexDiff.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexDiff.java
 Thu Nov 22 16:38:20 2012
@@ -41,7 +41,10 @@ import org.apache.jackrabbit.oak.spi.sta
 
 /**
  * {@link IndexHook} implementation that is responsible for keeping the
- * {@link PropertyIndex} up to date
+ * {@link PropertyIndex} up to date.
+ * p
+ * There is a tree of PropertyIndexDiff objects, each object represents the
+ * changes at a given node.
  * 
  * @see PropertyIndex
  * @see PropertyIndexLookup
@@ -49,14 +52,30 @@ import org.apache.jackrabbit.oak.spi.sta
  */
 class PropertyIndexDiff implements IndexHook {
 
+/**
+ * The parent (null if this is the root node).
+ */
 private final PropertyIndexDiff parent;
 
+/**
+ * The node (never null).
+ */
 private final NodeBuilder node;
 
+/**
+ * The node name (the path element). Null for the root node.
+ */
 private final String name;
 
+/**
+ * The path of the changed node (built lazily).
+ */
 private String path;
 
+/**
+ * Key: the property name. Value: the list of indexes (it is possible to
+ * have multiple indexes for the same property name).
+ */
 private final MapString, ListPropertyIndexUpdate updates;
 
 private PropertyIndexDiff(
@@ -98,13 +117,21 @@ class PropertyIndexDiff implements Index
 }
 }
 
+@Override
 public String getPath() {
-if (path == null) { // = parent != null
+// build the path lazily
+if (path == null) {
 path = concat(parent.getPath(), name);
 }
 return path;
 }
 
+/**
+ * Get all the indexes for the given property name.
+ * 
+ * @param name the property name
+ * @return the indexes
+ */
 private IterablePropertyIndexUpdate getIndexes(String name) {
 ListPropertyIndexUpdate indexes = updates.get(name);
 if (indexes != null) {

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexHookProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexHookProvider.java?rev=1412613r1=1412612r2=1412613view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexHookProvider.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexHookProvider.java
 Thu Nov 22 16:38:20 2012
@@ -29,7 +29,7 @@ import org.apache.jackrabbit.oak.spi.sta
 import com.google.common.collect.ImmutableList;
 
 /**
- * Service that provides PropertyIndex based IndexHooks
+ * Service that provides PropertyIndex based IndexHooks.
  * 
  * @see PropertyIndexDiff
  * @see IndexHookProvider

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexLookup.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexLookup.java?rev=1412613r1=1412612r2=1412613view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexLookup.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexLookup.java
 Thu Nov 22 16:38:20 2012

svn commit: r1416548 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak: query/ast/ spi/query/

2012-12-03 Thread thomasm
Author: thomasm
Date: Mon Dec  3 14:42:25 2012
New Revision: 1416548

URL: http://svn.apache.org/viewvc?rev=1416548view=rev
Log:
OAK-473 Query tck test NodeNameTest fix

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/BindVariableValueImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DynamicOperandImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchScoreImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LengthImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LiteralImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/StaticOperandImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/UpperCaseImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/PropertyValues.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/BindVariableValueImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/BindVariableValueImpl.java?rev=1416548r1=1416547r2=1416548view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/BindVariableValueImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/BindVariableValueImpl.java
 Mon Dec  3 14:42:25 2012
@@ -18,6 +18,8 @@
  */
 package org.apache.jackrabbit.oak.query.ast;
 
+import javax.jcr.PropertyType;
+
 import org.apache.jackrabbit.oak.api.PropertyValue;
 
 
@@ -50,5 +52,11 @@ public class BindVariableValueImpl exten
 PropertyValue currentValue() {
 return query.getBindVariableValue(bindVariableName);
 }
+
+@Override
+int getPropertyType() {
+PropertyValue v = currentValue();
+return v == null ? PropertyType.UNDEFINED : v.getType().tag();
+}
 
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java?rev=1416548r1=1416547r2=1416548view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java
 Mon Dec  3 14:42:25 2012
@@ -18,6 +18,8 @@
  */
 package org.apache.jackrabbit.oak.query.ast;
 
+import javax.jcr.PropertyType;
+
 import org.apache.jackrabbit.oak.api.PropertyValue;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.query.index.FilterImpl;
@@ -135,9 +137,16 @@ public class ComparisonImpl extends Cons
 @Override
 public void restrict(FilterImpl f) {
 PropertyValue v = operand2.currentValue();
+if (!PropertyValues.canConvert(
+operand2.getPropertyType(), 
+operand1.getPropertyType())) {
+throw new IllegalArgumentException(
+Unsupported conversion from property type  + 
+
PropertyType.nameFromValue(operand2.getPropertyType()) + 
+ to property type  +
+
PropertyType.nameFromValue(operand1.getPropertyType()));
+}
 if (v != null) {
-   // operand1.restrict(f, operator, v);
-// TODO OAK-347
 if (operator == Operator.LIKE) {
 String pattern;
 pattern = v.getValue(Type.STRING);

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DynamicOperandImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DynamicOperandImpl.java?rev=1416548r1=1416547r2=1416548view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DynamicOperandImpl.java
 (original)
+++ 
jackrabbit/oak

svn commit: r1416970 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SameNodeJoinCondition

2012-12-04 Thread thomasm
Author: thomasm
Date: Tue Dec  4 14:47:10 2012
New Revision: 1416970

URL: http://svn.apache.org/viewvc?rev=1416970view=rev
Log:
OAK-475 Query tck test SameNodeJoinConditionTest failing with ParseException

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SameNodeJoinConditionImpl.java
jackrabbit/oak/trunk/oak-jcr/pom.xml

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java?rev=1416970r1=1416969r2=1416970view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
 Tue Dec  4 14:47:10 2012
@@ -232,9 +232,8 @@ public class SQL2Parser {
 read(,);
 String selector2 = readName();
 if (readIf(,)) {
-c = factory.sameNodeJoinCondition(selector1, selector2, 
readAbsolutePath());
+c = factory.sameNodeJoinCondition(selector1, selector2, 
readPath());
 } else {
-// TODO verify . is correct
 c = factory.sameNodeJoinCondition(selector1, selector2, 
.);
 }
 } else if (ISCHILDNODE.equalsIgnoreCase(name)) {

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SameNodeJoinConditionImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SameNodeJoinConditionImpl.java?rev=1416970r1=1416969r2=1416970view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SameNodeJoinConditionImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SameNodeJoinConditionImpl.java
 Tue Dec  4 14:47:10 2012
@@ -18,6 +18,7 @@
  */
 package org.apache.jackrabbit.oak.query.ast;
 
+import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.query.index.FilterImpl;
 import org.apache.jackrabbit.oak.spi.query.Filter;
 
@@ -68,18 +69,33 @@ public class SameNodeJoinConditionImpl e
 public boolean evaluate() {
 String p1 = selector1.currentPath();
 String p2 = selector2.currentPath();
-return p1.equals(p2);
+// TODO normalize paths; support more complex relative path (.. and 
so on)
+if (selector2Path.equals(.)) {
+return p1.equals(p2);
+}
+String p = PathUtils.concat(p2, selector2Path);
+return p.equals(p1);
 }
 
 @Override
 public void restrict(FilterImpl f) {
 if (f.getSelector() == selector1) {
 String p2 = selector2.currentPath();
-f.restrictPath(p2, Filter.PathRestriction.EXACT);
+if (selector2Path.equals(.)) {
+f.restrictPath(p2, Filter.PathRestriction.EXACT);
+} else {
+// TODO normalize paths; support more complex relative path 
(.. and so on)
+String p = PathUtils.concat(p2, selector2Path);
+f.restrictPath(p, Filter.PathRestriction.EXACT);
+}
 }
 if (f.getSelector() == selector2) {
-String p1 = selector1.currentPath();
-f.restrictPath(p1, Filter.PathRestriction.EXACT);
+if (selector2Path.equals(.)) {
+String p1 = selector1.currentPath();
+f.restrictPath(p1, Filter.PathRestriction.EXACT);
+} else {
+// TODO normalize paths; support relative path (.. and so on)
+}
 }
 }
 

Modified: jackrabbit/oak/trunk/oak-jcr/pom.xml
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/pom.xml?rev=1416970r1=1416969r2=1416970view=diff
==
--- jackrabbit/oak/trunk/oak-jcr/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-jcr/pom.xml Tue Dec  4 14:47:10 2012
@@ -202,12 +202,6 @@
   
org.apache.jackrabbit.test.api.query.qom.ColumnTest#testExpandColumnsForNodeType
   !-- OAK-323 --
   
org.apache.jackrabbit.test.api.query.GetPropertyNamesTest#testGetPropertyNames  
   !-- OAK-323 --
   
org.apache.jackrabbit.test.api.query.qom.SelectorTest#testUnknownNodeType   
   !-- OAK-476 --
-  
org.apache.jackrabbit.test.api.query.qom.SameNodeJoinConditionTest#testInnerJoin
   !-- OAK-475

svn commit: r1417002 - /jackrabbit/oak/trunk/oak-jcr/pom.xml

2012-12-04 Thread thomasm
Author: thomasm
Date: Tue Dec  4 15:49:46 2012
New Revision: 1417002

URL: http://svn.apache.org/viewvc?rev=1417002view=rev
Log:
OAK-475 Query tck test SameNodeJoinConditionTest failing with ParseException

Modified:
jackrabbit/oak/trunk/oak-jcr/pom.xml

Modified: jackrabbit/oak/trunk/oak-jcr/pom.xml
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/pom.xml?rev=1417002r1=1417001r2=1417002view=diff
==
--- jackrabbit/oak/trunk/oak-jcr/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-jcr/pom.xml Tue Dec  4 15:49:46 2012
@@ -202,6 +202,7 @@
   
org.apache.jackrabbit.test.api.query.qom.ColumnTest#testExpandColumnsForNodeType
   !-- OAK-323 --
   
org.apache.jackrabbit.test.api.query.GetPropertyNamesTest#testGetPropertyNames  
   !-- OAK-323 --
   
org.apache.jackrabbit.test.api.query.qom.SelectorTest#testUnknownNodeType   
   !-- OAK-476 --
+  
org.apache.jackrabbit.test.api.query.qom.SameNodeJoinConditionTest#testRightOuterJoinWithPath
  !-- OAK-475 --
   org.apache.jackrabbit.test.api.observation.EventTest#testGetUserId
   org.apache.jackrabbit.test.api.observation.NodeMovedTest#testMoveNode
   org.apache.jackrabbit.test.api.observation.NodeMovedTest#testMoveTree




svn commit: r1417349 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SameNodeJoinConditionImpl.java oak-jcr/pom.xml

2012-12-05 Thread thomasm
Author: thomasm
Date: Wed Dec  5 10:50:09 2012
New Revision: 1417349

URL: http://svn.apache.org/viewvc?rev=1417349view=rev
Log:
OAK-475 Query tck test SameNodeJoinConditionTest failing with ParseException

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SameNodeJoinConditionImpl.java
jackrabbit/oak/trunk/oak-jcr/pom.xml

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SameNodeJoinConditionImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SameNodeJoinConditionImpl.java?rev=1417349r1=1417348r2=1417349view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SameNodeJoinConditionImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SameNodeJoinConditionImpl.java
 Wed Dec  5 10:50:09 2012
@@ -81,20 +81,24 @@ public class SameNodeJoinConditionImpl e
 public void restrict(FilterImpl f) {
 if (f.getSelector() == selector1) {
 String p2 = selector2.currentPath();
-if (selector2Path.equals(.)) {
-f.restrictPath(p2, Filter.PathRestriction.EXACT);
-} else {
-// TODO normalize paths; support more complex relative path 
(.. and so on)
-String p = PathUtils.concat(p2, selector2Path);
-f.restrictPath(p, Filter.PathRestriction.EXACT);
+if (p2 != null) {
+if (selector2Path.equals(.)) {
+f.restrictPath(p2, Filter.PathRestriction.EXACT);
+} else {
+// TODO normalize paths; support more complex relative 
path (.. and so on)
+String p = PathUtils.concat(p2, selector2Path);
+f.restrictPath(p, Filter.PathRestriction.EXACT);
+}
 }
 }
 if (f.getSelector() == selector2) {
-if (selector2Path.equals(.)) {
-String p1 = selector1.currentPath();
-f.restrictPath(p1, Filter.PathRestriction.EXACT);
-} else {
-// TODO normalize paths; support relative path (.. and so on)
+String p1 = selector1.currentPath();
+if (p1 != null) {
+if (selector2Path.equals(.)) {
+f.restrictPath(p1, Filter.PathRestriction.EXACT);
+} else {
+// TODO normalize paths; support relative path (.. and 
so on)
+}
 }
 }
 }

Modified: jackrabbit/oak/trunk/oak-jcr/pom.xml
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/pom.xml?rev=1417349r1=1417348r2=1417349view=diff
==
--- jackrabbit/oak/trunk/oak-jcr/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-jcr/pom.xml Wed Dec  5 10:50:09 2012
@@ -202,7 +202,6 @@
   
org.apache.jackrabbit.test.api.query.qom.ColumnTest#testExpandColumnsForNodeType
   !-- OAK-323 --
   
org.apache.jackrabbit.test.api.query.GetPropertyNamesTest#testGetPropertyNames  
   !-- OAK-323 --
   
org.apache.jackrabbit.test.api.query.qom.SelectorTest#testUnknownNodeType   
   !-- OAK-476 --
-  
org.apache.jackrabbit.test.api.query.qom.SameNodeJoinConditionTest#testRightOuterJoinWithPath
  !-- OAK-475 --
   org.apache.jackrabbit.test.api.observation.EventTest#testGetUserId
   org.apache.jackrabbit.test.api.observation.NodeMovedTest#testMoveNode
   org.apache.jackrabbit.test.api.observation.NodeMovedTest#testMoveTree




svn commit: r1417455 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak: query/index/IndexRowImpl.java spi/query/IndexRow.java

2012-12-05 Thread thomasm
Author: thomasm
Date: Wed Dec  5 14:48:33 2012
New Revision: 1417455

URL: http://svn.apache.org/viewvc?rev=1417455view=rev
Log:
OAK-376 Internal class PropertyValue exposed through Oak API (PropertyValue is 
now in the oak API)

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/IndexRowImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/IndexRow.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/IndexRowImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/IndexRowImpl.java?rev=1417455r1=1417454r2=1417455view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/IndexRowImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/IndexRowImpl.java
 Wed Dec  5 14:48:33 2012
@@ -18,8 +18,8 @@
  */
 package org.apache.jackrabbit.oak.query.index;
 
+import org.apache.jackrabbit.oak.api.PropertyValue;
 import org.apache.jackrabbit.oak.spi.query.IndexRow;
-import org.apache.jackrabbit.oak.spi.query.PropertyStateValue;
 
 /**
  * A simple index row implementation.
@@ -38,7 +38,7 @@ public class IndexRowImpl implements Ind
 }
 
 @Override
-public PropertyStateValue getValue(String columnName) {
+public PropertyValue getValue(String columnName) {
 return null;
 }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/IndexRow.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/IndexRow.java?rev=1417455r1=1417454r2=1417455view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/IndexRow.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/IndexRow.java
 Wed Dec  5 14:48:33 2012
@@ -18,8 +18,7 @@
  */
 package org.apache.jackrabbit.oak.spi.query;
 
-
-import org.apache.jackrabbit.oak.spi.query.PropertyStateValue;
+import org.apache.jackrabbit.oak.api.PropertyValue;
 
 /**
  * A row returned by the index.
@@ -41,6 +40,6 @@ public interface IndexRow {
  * @param columnName the column name
  * @return the value, or null if not available
  */
-PropertyStateValue getValue(String columnName);
+PropertyValue getValue(String columnName);
 
 }




svn commit: r1417488 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/query/ oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/

2012-12-05 Thread thomasm
Author: thomasm
Date: Wed Dec  5 15:40:04 2012
New Revision: 1417488

URL: http://svn.apache.org/viewvc?rev=1417488view=rev
Log:
OAK-320 Query: ability to disable/enable literals in queries to protect against 
code injection

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java

jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java?rev=1417488r1=1417487r2=1417488view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java
 Wed Dec  5 15:40:04 2012
@@ -42,6 +42,8 @@ public class QueryEngineImpl {
 static final String SQL = sql;
 static final String XPATH = xpath;
 static final String JQOM = JCR-JQOM;
+
+static final String NO_LITERALS = -noLiterals;
 
 private static final Logger LOG = 
LoggerFactory.getLogger(QueryEngineImpl.class);
 
@@ -54,7 +56,8 @@ public class QueryEngineImpl {
 }
 
 public ListString getSupportedQueryLanguages() {
-return Arrays.asList(SQL2, SQL, XPATH, JQOM);
+return Arrays.asList(SQL2, SQL, XPATH, JQOM,
+SQL2 + NO_LITERALS, SQL + NO_LITERALS, XPATH + NO_LITERALS);
 }
 
 /**
@@ -75,17 +78,20 @@ public class QueryEngineImpl {
 if (LOG.isDebugEnabled()) {
 LOG.debug(language + :  + statement);
 }
+SQL2Parser parser = new SQL2Parser();
+if (language.endsWith(NO_LITERALS)) {
+language = language.substring(0, language.length() - 
NO_LITERALS.length());
+parser.setAllowNumberLiterals(false);
+parser.setAllowTextLiterals(false);
+}
 if (SQL2.equals(language) || JQOM.equals(language)) {
-SQL2Parser parser = new SQL2Parser();
 q = parser.parse(statement);
 } else if (SQL.equals(language)) {
-SQL2Parser parser = new SQL2Parser();
 parser.setSupportSQL1(true);
 q = parser.parse(statement);
 } else if (XPATH.equals(language)) {
 XPathToSQL2Converter converter = new XPathToSQL2Converter();
 String sql2 = converter.convert(statement);
-SQL2Parser parser = new SQL2Parser();
 if (LOG.isDebugEnabled()) {
 LOG.debug(XPath  SQL2:  + sql2);
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java?rev=1417488r1=1417487r2=1417488view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
 Wed Dec  5 15:40:04 2012
@@ -35,6 +35,8 @@ import org.apache.jackrabbit.oak.query.a
 import org.apache.jackrabbit.oak.query.ast.SourceImpl;
 import org.apache.jackrabbit.oak.query.ast.StaticOperandImpl;
 import org.apache.jackrabbit.oak.spi.query.PropertyValues;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.PropertyType;
 import java.math.BigDecimal;
@@ -47,6 +49,8 @@ import java.util.HashMap;
  * language (here named SQL-1) is also supported.
  */
 public class SQL2Parser {
+
+private static final Logger LOG = 
LoggerFactory.getLogger(SQL2Parser.class);
 
 // Character types, used during the tokenizer phase
 private static final int CHAR_END = -1, CHAR_VALUE = 2, CHAR_QUOTED = 3;
@@ -1031,13 +1035,18 @@ public class SQL2Parser {
 i++;
 }
 currentToken = ';
-checkLiterals(false);
+if (end != ']') {
+checkLiterals(false);
+}
 currentValue = PropertyValues.newString(result);
 parseIndex = i;
 currentTokenType = VALUE;
 }
 
 private void checkLiterals(boolean text) throws ParseException {
+if (LOG.isDebugEnabled()) {
+LOG.debug(Literal used in query:  + statement);
+}
 if (text  !allowTextLiterals || !text  !allowNumberLiterals) {
 throw getSyntaxError(bind variable (literals of this type not 
allowed));
 }

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryTest.java
URL: 
http

svn commit: r1417514 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/PropertyStateValue.java

2012-12-05 Thread thomasm
Author: thomasm
Date: Wed Dec  5 16:32:07 2012
New Revision: 1417514

URL: http://svn.apache.org/viewvc?rev=1417514view=rev
Log:
OAK-484 QueryResultTest failing

Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/PropertyStateValue.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/PropertyStateValue.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/PropertyStateValue.java?rev=1417514r1=1417513r2=1417514view=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/PropertyStateValue.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/PropertyStateValue.java
 Wed Dec  5 16:32:07 2012
@@ -91,10 +91,16 @@ public class PropertyStateValue implemen
 return Integer.signum(p2.getType().tag() - getType().tag());
 }
 switch (getType().tag()) {
-case PropertyType.BINARY:
-return compare(getValue(Type.BINARIES), 
p2.getValue(Type.BINARIES));
+case PropertyType.BOOLEAN:
+return compare(getValue(Type.BOOLEANS), 
p2.getValue(Type.BOOLEANS));
+case PropertyType.DECIMAL:
+return compare(getValue(Type.DECIMALS), 
p2.getValue(Type.DECIMALS));
 case PropertyType.DOUBLE:
 return compare(getValue(Type.DOUBLES), p2.getValue(Type.DOUBLES));
+case PropertyType.LONG:
+return compare(getValue(Type.LONGS), p2.getValue(Type.LONGS));
+case PropertyType.BINARY:
+return compare(getValue(Type.BINARIES), 
p2.getValue(Type.BINARIES));
 case PropertyType.DATE:
 return compareAsDate(getValue(Type.STRINGS),
 p2.getValue(Type.STRINGS));




  1   2   3   4   5   6   7   8   9   10   >