You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by al...@apache.org on 2012/09/10 11:01:56 UTC

svn commit: r1382707 - 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/

Author: alexparvulescu
Date: Mon Sep 10 09:01:56 2012
New Revision: 1382707

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

Added:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/JsopUtil.java   (with props)
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/JsopUtilTest.java   (with props)
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

Added: 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/main/java/org/apache/jackrabbit/oak/util/JsopUtil.java?rev=1382707&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/JsopUtil.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/JsopUtil.java Mon Sep 10 09:01:56 2012
@@ -0,0 +1,137 @@
+/*
+ * 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.util;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.jackrabbit.mk.json.JsopTokenizer;
+import org.apache.jackrabbit.oak.api.CoreValue;
+import org.apache.jackrabbit.oak.api.CoreValueFactory;
+import org.apache.jackrabbit.oak.api.Root;
+import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.commons.PathUtils;
+
+/**
+ * Utility class for working with jsop string diffs
+ * 
+ */
+public class JsopUtil {
+
+    private JsopUtil() {
+
+    }
+
+    /**
+     * Applies the commit string to a given Root instance
+     * 
+     * 
+     * The commit string represents a sequence of operations, jsonp style:
+     * 
+     * <p>
+     * / + "test": { "a": { "id": "ref:123" }, "b": { "id" : "str:123" }}
+     * <p>
+     * or
+     * <p>
+     * "/ - "test"
+     * </p>
+     * 
+     * @param root
+     * @param commit
+     *            - the commit string
+     */
+    public static void apply(Root root, String commit, CoreValueFactory vf)
+            throws Exception {
+        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);
+        }
+        if (isAdd) {
+            addTree(c, commit, vf);
+        } else {
+            removeTree(c, commit);
+        }
+    }
+
+    private static void removeTree(Tree t, String pathIn) {
+        String path = new JsopTokenizer(pathIn).readString();
+
+        Iterator<String> pathIterator = PathUtils.elements(path).iterator();
+        while (pathIterator.hasNext()) {
+            String p = pathIterator.next();
+            if (!t.hasChild(p)) {
+                return;
+            }
+            t = t.getChild(p);
+        }
+        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(']'));
+                        List<CoreValue> mvp = new ArrayList<CoreValue>();
+                        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())));
+                    }
+                }
+            } while (tokenizer.matches(','));
+            if (tokenizer.getPos() != tokenizer.getLastPos()) {
+                tokenizer.read('}');
+            }
+        }
+    }
+}

Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/JsopUtil.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

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=1382707&r1=1382706&r2=1382707&view=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 Mon Sep 10 09:01:56 2012
@@ -16,14 +16,16 @@
  */
 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;
 import org.apache.jackrabbit.oak.api.CoreValueFactory;
+import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.api.SessionQueryEngine;
 import org.apache.jackrabbit.oak.core.ContentRepositoryImpl;
+import org.apache.jackrabbit.oak.plugins.index.Indexer;
 import org.apache.jackrabbit.oak.plugins.index.PropertyIndexer;
 import org.apache.jackrabbit.oak.spi.QueryIndexProvider;
 import org.apache.jackrabbit.oak.spi.commit.CompositeHook;
@@ -35,15 +37,17 @@ import org.junit.Before;
  */
 public abstract class AbstractQueryTest extends AbstractOakTest {
 
-    protected IndexWrapper mk;
     protected CoreValueFactory vf;
     protected SessionQueryEngine qe;
     protected ContentSession session;
+    protected Root root;
 
     @Override
     protected ContentRepository createRepository() {
-        mk = new IndexWrapper(new MicroKernelImpl());
-        PropertyIndexer pi = new PropertyIndexer(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);
@@ -56,6 +60,7 @@ public abstract class AbstractQueryTest 
         session = createAdminSession();
         vf = session.getCoreValueFactory();
         qe = session.getQueryEngine();
+        root = session.getCurrentRoot();
     }
 
 }
\ No newline at end of file

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=1382707&r1=1382706&r2=1382707&view=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 Mon Sep 10 09:01:56 2012
@@ -16,6 +16,7 @@ package org.apache.jackrabbit.oak.query;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+
 import java.io.FileOutputStream;
 import java.io.InputStream;
 import java.io.InputStreamReader;
@@ -28,9 +29,13 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+
 import org.apache.jackrabbit.oak.api.CoreValue;
 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;
 
 /**
@@ -44,11 +49,13 @@ public class QueryTest extends AbstractQ
     }
 
     @Test
+    @Ignore("OAK-288")
     public void sql2() throws Exception {
         test("sql2.txt");
     }
 
     @Test
+    @Ignore("OAK-288")
     public void sql2Explain() throws Exception {
         test("sql2_explain.txt");
     }
@@ -60,8 +67,12 @@ public class QueryTest extends AbstractQ
 
     @Test
     public void bindVariableTest() throws Exception {
-        mk.commit("/", "+ \"test\": { \"hello\": {\"id\": \"1\"}, \"world\": {\"id\": \"2\"}}",
-                null, null);
+        JsopUtil.apply(
+                root,
+                "/ + \"test\": { \"hello\": {\"id\": \"1\"}, \"world\": {\"id\": \"2\"}}",
+                vf);
+        root.commit(DefaultConflictHandler.OURS);
+
         HashMap<String, CoreValue> sv = new HashMap<String, CoreValue>();
         sv.put("id", vf.createValue("1"));
         Iterator<? extends ResultRow> result;
@@ -167,10 +178,8 @@ public class QueryTest extends AbstractQ
                 } else if (line.startsWith("commit")) {
                     w.println(line);
                     line = line.substring("commit".length()).trim();
-                    int spaceIndex = line.indexOf(' ');
-                    String path = line.substring(0, spaceIndex).trim();
-                    String diff = line.substring(spaceIndex).trim();
-                    mk.commit(path, diff, mk.getHeadRevision(), "");
+                    JsopUtil.apply(root, line, vf);
+                    root.commit(DefaultConflictHandler.OURS);
                 }
                 w.flush();
             }

Added: 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=1382707&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/JsopUtilTest.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/JsopUtilTest.java Mon Sep 10 09:01:56 2012
@@ -0,0 +1,85 @@
+/*
+ * 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.util;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+
+import org.apache.jackrabbit.oak.AbstractOakTest;
+import org.apache.jackrabbit.oak.api.ContentRepository;
+import org.apache.jackrabbit.oak.api.ContentSession;
+import org.apache.jackrabbit.oak.api.CoreValueFactory;
+import org.apache.jackrabbit.oak.api.Root;
+import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.core.DefaultConflictHandler;
+import org.junit.Before;
+import org.junit.Test;
+
+public class JsopUtilTest extends AbstractOakTest {
+
+    protected ContentSession session;
+    protected Root root;
+    protected CoreValueFactory vf;
+
+    @Override
+    @Before
+    public void before() throws Exception {
+        super.before();
+        session = createAdminSession();
+        root = session.getCurrentRoot();
+        vf = session.getCoreValueFactory();
+    }
+
+    @Override
+    protected ContentRepository createRepository() {
+        return createEmptyRepository();
+    }
+
+    @Test
+    public void test() throws Exception {
+        Tree t = root.getTree("/");
+        assertFalse(t.hasChild("test"));
+
+        String add = "/ + \"test\": { \"a\": { \"id\": \"123\" }, \"b\": {} }";
+        JsopUtil.apply(root, add, vf);
+        root.commit(DefaultConflictHandler.OURS);
+
+        t = root.getTree("/");
+        assertTrue(t.hasChild("test"));
+
+        t = t.getChild("test");
+        assertEquals(2, t.getChildrenCount());
+        assertTrue(t.hasChild("a"));
+        assertTrue(t.hasChild("b"));
+
+        assertEquals(0, t.getChild("b").getChildrenCount());
+
+        t = t.getChild("a");
+        assertEquals(0, t.getChildrenCount());
+        assertTrue(t.hasProperty("id"));
+        assertEquals("123", t.getProperty("id").getValue().getString());
+
+        String rm = "/ - \"test\"";
+        JsopUtil.apply(root, rm, vf);
+        root.commit(DefaultConflictHandler.OURS);
+
+        t = root.getTree("/");
+        assertFalse(t.hasChild("test"));
+    }
+
+}

Propchange: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/JsopUtilTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain