You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rya.apache.org by mi...@apache.org on 2016/10/15 20:06:46 UTC
[26/69] [abbrv] [partial] incubator-rya git commit: RYA-198 Renaming
Files
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/TupleReArranger.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/TupleReArranger.java b/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/TupleReArranger.java
deleted file mode 100644
index 089ef5d..0000000
--- a/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/TupleReArranger.java
+++ /dev/null
@@ -1,348 +0,0 @@
-package mvm.rya.indexing.IndexPlanValidator;
-
-/*
- * 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.
- */
-
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
-
-import mvm.rya.indexing.external.tupleSet.ExternalTupleSet;
-import mvm.rya.rdftriplestore.inference.DoNotExpandSP;
-import mvm.rya.rdftriplestore.utils.FixedStatementPattern;
-
-import org.openrdf.query.algebra.Filter;
-import org.openrdf.query.algebra.Join;
-import org.openrdf.query.algebra.StatementPattern;
-import org.openrdf.query.algebra.TupleExpr;
-import org.openrdf.query.algebra.helpers.QueryModelVisitorBase;
-
-import com.beust.jcommander.internal.Lists;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.Maps;
-
-
-//A given TupleExpr can be broken up into "join segments", which are sections of the TupleExpr where nodes can
-//be freely exchanged. This class creates a list of permuted TupleExpr from a specified TupleExpr by permuting the nodes
-//in each join segment.
-public class TupleReArranger {
-
- private static Map<Join, List<List<TupleExpr>>> joinArgs;
- private static Map<Join, List<Filter>> filterArgs;
-
-
- public static Iterator<TupleExpr> getPlans(Iterator<TupleExpr> indexPlans) {
-
- final Iterator<TupleExpr> iter = indexPlans;
-
- return new Iterator<TupleExpr>() {
-
- private TupleExpr next = null;
- private boolean hasNextCalled = false;
- private boolean isEmpty = false;
- Iterator<TupleExpr> tuples = null;
-
- @Override
- public boolean hasNext() {
-
- if (!hasNextCalled && !isEmpty) {
- if (tuples != null && tuples.hasNext()) {
- next = tuples.next();
- hasNextCalled = true;
- return true;
- } else {
- while (iter.hasNext()) {
- tuples = getTupleReOrderings(iter.next()).iterator();
- if (tuples == null) {
- throw new IllegalStateException("Plans cannot be null!");
- }
- next = tuples.next();
- hasNextCalled = true;
- return true;
- }
- isEmpty = true;
- return false;
- }
- } else if (isEmpty) {
- return false;
- } else {
- return true;
- }
- }
-
- @Override
- public TupleExpr next() {
-
- if (hasNextCalled) {
- hasNextCalled = false;
- return next;
- } else if (isEmpty) {
- throw new NoSuchElementException();
- } else {
- if (this.hasNext()) {
- hasNextCalled = false;
- return next;
- } else {
- throw new NoSuchElementException();
- }
- }
- }
-
- @Override
- public void remove() {
- throw new UnsupportedOperationException("Cannot delete from iterator!");
- }
- };
- }
-
-
- //Give a TupleExpr, return list of join segment permuted TupleExpr
- public static List<TupleExpr> getTupleReOrderings(TupleExpr te) {
-
- joinArgs = Maps.newHashMap();
- filterArgs = Maps.newHashMap();
-
- NodeCollector nc = new NodeCollector();
- te.visit(nc);
- joinArgs = nc.getPerms();
- List<Join> joins = Lists.newArrayList(joinArgs.keySet());
-
- return getPlans(getReOrderings(joins), te);
-
- }
-
-
- //iterates through the reOrder maps, and for each reOrder map builds a new, reordered tupleExpr
- private static List<TupleExpr> getPlans(List<Map<Join, List<TupleExpr>>> reOrderings, TupleExpr te) {
-
- List<TupleExpr> queryPlans = Lists.newArrayList();
- PermInserter pm = new PermInserter();
-
- for (Map<Join, List<TupleExpr>> order : reOrderings) {
- TupleExpr clone = te.clone();
- pm.setReOrderMap(order);
- clone.visit(pm);
- queryPlans.add(clone);
- }
-
- return queryPlans;
- }
-
-
-
- //recursive method which produces a list of maps. Each map associates a join with
- //a list of the non-join arguments below it contained in same join segment. The list
- //represents an ordering of the
- //non-join arguments and creating a TupleExpr from this map yields a new TupleExpr
- //whose non-join arguments are permuted
- private static List<Map<Join, List<TupleExpr>>> getReOrderings(List<Join> joins) {
- Map<Join, List<TupleExpr>> reOrder = Maps.newHashMap();
- List<Map<Join, List<TupleExpr>>> reOrderings = Lists.newArrayList();
- getReOrderings(joins, reOrder, reOrderings);
- return reOrderings;
-
- }
-
- private static void getReOrderings(List<Join> joins, Map<Join, List<TupleExpr>> reOrder,
- List<Map<Join, List<TupleExpr>>> reOrderings) {
-
- if (joins.isEmpty()) {
- reOrderings.add(reOrder);
- return;
- }
-
- List<Join> joinsCopy = Lists.newArrayList(joins);
- Join join = joinsCopy.remove(0);
- List<List<TupleExpr>> joinArgPerms = joinArgs.get(join);
- for (List<TupleExpr> tupList : joinArgPerms) {
- Map<Join, List<TupleExpr>> newReOrder = Maps.newHashMap(reOrder);
- newReOrder.put(join, tupList);
- getReOrderings(joinsCopy, newReOrder, reOrderings);
- }
-
- return;
-
- }
-
-
- //creates a map which associates each first join of a TupleExpr join segment with all permutations of
- //the non-join nodes after it. More specifically, each join is associated with a list of TupleExpr
- //lists, where each list represents an ordering of the non-join nodes following the associated join
- private static class NodeCollector extends QueryModelVisitorBase<RuntimeException> {
-
- private static List<Filter> filterList;
-
- public Map<Join, List<List<TupleExpr>>> getPerms() {
- return joinArgs;
- }
-
- @Override
- public void meet(Join node) {
-
- filterList = Lists.newArrayList();
-
- List<TupleExpr> args = Lists.newArrayList();
- args = getJoinArgs(node, args);
- List<List<TupleExpr>> argPerms = Lists.newArrayList(Collections2.permutations(args));
- joinArgs.put(node, argPerms);
- filterArgs.put(node, filterList);
-
- for (TupleExpr te : args) {
- if (!(te instanceof StatementPattern) && !(te instanceof ExternalTupleSet)) {
- te.visit(this);
- }
- }
-
- }
-
-
- //get all non-join nodes below tupleExpr in same join segment
- private static List<TupleExpr> getJoinArgs(TupleExpr tupleExpr, List<TupleExpr> joinArgs) {
- if (tupleExpr instanceof Join) {
- if (!(((Join) tupleExpr).getLeftArg() instanceof FixedStatementPattern)
- && !(((Join) tupleExpr).getRightArg() instanceof DoNotExpandSP)) {
- Join join = (Join) tupleExpr;
- getJoinArgs(join.getLeftArg(), joinArgs);
- getJoinArgs(join.getRightArg(), joinArgs);
- } // assumes all filter occur above first join of segment --
- // this should be the state
- // after PrecompJoinOptimizer is called
- } else if (tupleExpr instanceof Filter) {
- filterList.add((Filter) tupleExpr);
- getJoinArgs(((Filter) tupleExpr).getArg(), joinArgs);
- } else {
- joinArgs.add(tupleExpr);
- }
-
- return joinArgs;
- }
-
- }
-
-
-
- //for a given reOrder map, searches through TupleExpr and places each reordered collection
- //of nodes at appropriate join
- private static class PermInserter extends QueryModelVisitorBase<RuntimeException> {
-
- private Map<Join, List<TupleExpr>> reOrderMap = Maps.newHashMap();
-
- public void setReOrderMap(Map<Join, List<TupleExpr>> reOrderMap) {
- this.reOrderMap = reOrderMap;
- }
-
- @Override
- public void meet(Join node) {
-
- List<TupleExpr> reOrder = reOrderMap.get(node);
- if (reOrder != null) {
- List<Filter> filterList = Lists.newArrayList(filterArgs.get(node));
- node.replaceWith(getNewJoin(reOrder, getFilterChain(filterList)));
-
- for (TupleExpr te : reOrder) {
- if (!(te instanceof StatementPattern) && !(te instanceof ExternalTupleSet)) {
- te.visit(this);
- }
- }
- }
- super.meet(node);
- }
- }
-
-
- // chain filters together and return front and back of chain
- private static List<TupleExpr> getFilterChain(List<Filter> filters) {
- List<TupleExpr> filterTopBottom = Lists.newArrayList();
- Filter filterChainTop = null;
- Filter filterChainBottom = null;
-
- for (Filter filter : filters) {
- if (filterChainTop == null) {
- filterChainTop = filter.clone();
- } else if (filterChainBottom == null) {
- filterChainBottom = filter.clone();
- filterChainTop.setArg(filterChainBottom);
- } else {
- Filter newFilter = filter.clone();
- filterChainBottom.setArg(newFilter);
- filterChainBottom = newFilter;
- }
- }
- if (filterChainTop != null) {
- filterTopBottom.add(filterChainTop);
- }
- if (filterChainBottom != null) {
- filterTopBottom.add(filterChainBottom);
- }
- return filterTopBottom;
- }
-
- // build newJoin node given remaining joinArgs and chain of filters
- private static TupleExpr getNewJoin(List<TupleExpr> args, List<TupleExpr> filterChain) {
- TupleExpr newJoin;
- List<TupleExpr> joinArgs = Lists.newArrayList(args);
-
- if (joinArgs.size() > 1) {
- if (filterChain.size() > 0) {
- TupleExpr finalJoinArg = joinArgs.remove(0).clone();
- TupleExpr tempJoin;
- TupleExpr temp = filterChain.get(0);
-
- if (joinArgs.size() > 1) {
- tempJoin = new Join(joinArgs.remove(0).clone(), joinArgs.remove(0).clone());
- for (TupleExpr te : joinArgs) {
- tempJoin = new Join(tempJoin, te.clone());
- }
- } else {
- tempJoin = joinArgs.remove(0).clone();
- }
-
- if (filterChain.size() == 1) {
- ((Filter) temp).setArg(tempJoin);
- } else {
- ((Filter) filterChain.get(1)).setArg(tempJoin);
- }
- newJoin = new Join(temp, finalJoinArg);
- } else {
- newJoin = new Join(joinArgs.remove(0).clone(), joinArgs.remove(0).clone());
-
- for (TupleExpr te : joinArgs) {
- newJoin = new Join(newJoin, te.clone());
- }
- }
- } else if (joinArgs.size() == 1) {
- if (filterChain.size() > 0) {
- newJoin = filterChain.get(0);
- if (filterChain.size() == 1) {
- ((Filter) newJoin).setArg(joinArgs.get(0).clone());
- } else {
- ((Filter) filterChain.get(1)).setArg(joinArgs.get(0).clone());
- }
- } else {
- newJoin = joinArgs.get(0).clone();
- }
- } else {
- throw new IllegalStateException("JoinArgs size cannot be zero.");
- }
- return newJoin;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/TupleValidator.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/TupleValidator.java b/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/TupleValidator.java
deleted file mode 100644
index 4960d78..0000000
--- a/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/TupleValidator.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package mvm.rya.indexing.IndexPlanValidator;
-
-/*
- * 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.
- */
-
-
-import java.util.Iterator;
-
-import org.openrdf.query.algebra.TupleExpr;
-
-public interface TupleValidator {
-
- public boolean isValid(TupleExpr te);
-
- public Iterator<TupleExpr> getValidTuples(Iterator<TupleExpr> tupleList);
-
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/ValidIndexCombinationGenerator.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/ValidIndexCombinationGenerator.java b/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/ValidIndexCombinationGenerator.java
deleted file mode 100644
index 483457f..0000000
--- a/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/ValidIndexCombinationGenerator.java
+++ /dev/null
@@ -1,461 +0,0 @@
-package mvm.rya.indexing.IndexPlanValidator;
-
-/*
- * 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.
- */
-
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.Set;
-
-import mvm.rya.indexing.external.tupleSet.ExternalTupleSet;
-
-import org.openrdf.query.algebra.Filter;
-import org.openrdf.query.algebra.QueryModelNode;
-import org.openrdf.query.algebra.StatementPattern;
-import org.openrdf.query.algebra.TupleExpr;
-import org.openrdf.query.algebra.helpers.QueryModelVisitorBase;
-
-import com.google.common.base.Joiner;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-
-public class ValidIndexCombinationGenerator {
-
- private TupleExpr query;
- private Set<String> invalidCombos = Sets.newTreeSet();
- private Set<QueryModelNode> spFilterSet;
-
- public ValidIndexCombinationGenerator(TupleExpr query) {
- this.query = query;
- SpFilterCollector sfc = new SpFilterCollector();
- query.visit(sfc);
- spFilterSet = sfc.getSpFilterSet();
- }
-
- public Iterator<List<ExternalTupleSet>> getValidIndexCombos(
- List<ExternalTupleSet> indexSet) {
-
- Collections.shuffle(indexSet);
- final List<ExternalTupleSet> list = indexSet;
- final Iterator<List<Integer>> iter = getValidCombos(list);
-
- return new Iterator<List<ExternalTupleSet>>() {
-
- private List<ExternalTupleSet> next = null;
- private List<Integer> nextCombo = null;
- private boolean hasNextCalled = false;
- private boolean isEmpty = false;
-
- @Override
- public boolean hasNext() {
-
- if (!hasNextCalled && !isEmpty) {
- if (!iter.hasNext()) {
- isEmpty = true;
- return false;
- } else {
- nextCombo = iter.next();
- List<ExternalTupleSet> indexCombo = Lists
- .newArrayList();
- for (Integer i : nextCombo) {
- indexCombo.add(list.get(i));
- }
- next = indexCombo;
- hasNextCalled = true;
- return true;
-
- }
-
- } else if (isEmpty) {
- return false;
- } else {
- return true;
- }
- }
-
- @Override
- public List<ExternalTupleSet> next() {
-
- if (hasNextCalled) {
- hasNextCalled = false;
- return next;
- } else if (isEmpty) {
- throw new NoSuchElementException();
- } else {
- if (this.hasNext()) {
- hasNextCalled = false;
- return next;
- } else {
- throw new NoSuchElementException();
- }
- }
- }
-
- @Override
- public void remove() {
-
- throw new UnsupportedOperationException(
- "Cannot delete from iterator!");
-
- }
-
- };
-
- }
-
- private Iterator<List<Integer>> getValidCombos(
- List<ExternalTupleSet> indexList) {
-
- final List<ExternalTupleSet> list = indexList;
- final int indexSize = list.size();
- final Iterator<List<Integer>> iter = getCombos(indexSize);
-
- return new Iterator<List<Integer>>() {
-
- private List<Integer> next = null;
- private boolean hasNextCalled = false;
- private boolean isEmpty = false;
-
- @Override
- public boolean hasNext() {
- if (!hasNextCalled && !isEmpty) {
-
- while (iter.hasNext()) {
- List<Integer> tempNext = iter.next();
- if (isValid(tempNext, list)) {
- next = tempNext;
- hasNextCalled = true;
- return true;
- }
-
- }
-
- isEmpty = true;
- return false;
-
- } else if (isEmpty) {
- return false;
- } else {
- return true;
- }
- }
-
- @Override
- public List<Integer> next() {
-
- if (hasNextCalled) {
- hasNextCalled = false;
- return next;
- } else if (isEmpty) {
- throw new NoSuchElementException();
- } else {
- if (this.hasNext()) {
- hasNextCalled = false;
- return next;
- } else {
- throw new NoSuchElementException();
- }
-
- }
-
- }
-
- @Override
- public void remove() {
-
- throw new UnsupportedOperationException(
- "Cannot delete from iterator!");
-
- }
-
- };
- }
-
- private Iterator<List<Integer>> getCombos(int indexListSize) {
-
- final int indexSize = indexListSize;
- final int maxSubListSize = spFilterSet.size() / 2;
-
- return new Iterator<List<Integer>>() {
-
- private List<Integer> next = null;
- private boolean hasNextCalled = false;
- private boolean isEmpty = false;
- private int subListSize = Math.min(maxSubListSize, indexSize) + 1;
- Iterator<List<Integer>> subList = null;
-
- @Override
- public boolean hasNext() {
-
- if (!hasNextCalled && !isEmpty) {
- if (subList != null && subList.hasNext()) {
- next = subList.next();
- hasNextCalled = true;
- return true;
- } else {
- subListSize--;
- if (subListSize == 0) {
- isEmpty = true;
- return false;
- }
- subList = getCombos(subListSize, indexSize);
- if (subList == null) {
- throw new IllegalStateException(
- "Combos cannot be null!");
- }
- next = subList.next();
- hasNextCalled = true;
- return true;
-
- }
- } else if (isEmpty) {
- return false;
- } else {
- return true;
- }
- }
-
- @Override
- public List<Integer> next() {
-
- if (hasNextCalled) {
- hasNextCalled = false;
- return next;
- } else if (isEmpty) {
- throw new NoSuchElementException();
- } else {
- if (this.hasNext()) {
- hasNextCalled = false;
- return next;
- } else {
- throw new NoSuchElementException();
- }
-
- }
-
- }
-
- @Override
- public void remove() {
- throw new UnsupportedOperationException(
- "Cannot delete from iterator!");
- }
-
- };
-
- }
-
- private Iterator<List<Integer>> getCombos(int subListSize, int indexListSize) {
-
- if (subListSize > indexListSize) {
- throw new IllegalArgumentException(
- "Sublist size must be less than or equal to list size!");
- }
-
- final int subSize = subListSize;
- final int indexSize = indexListSize;
-
- return new Iterator<List<Integer>>() {
-
- private List<Integer> next = null;
- private List<Integer> tempList = Lists.newArrayList();
- private boolean calledHasNext = false;
- private boolean isEmpty = false;
-
- @Override
- public boolean hasNext() {
-
- if (!calledHasNext && !isEmpty) {
- if (next == null) {
- for (int i = 0; i < subSize; i++) {
- tempList.add(i);
- }
- next = tempList;
- calledHasNext = true;
- return true;
- } else {
- next = getNext(next, indexSize - 1);
- if (next == null) {
- isEmpty = true;
- return false;
- } else {
- calledHasNext = true;
- return true;
- }
-
- }
- } else if (isEmpty) {
- return false;
- } else {
- return true;
- }
-
- }
-
- @Override
- public List<Integer> next() {
-
- if (calledHasNext) {
- calledHasNext = false;
- return next;
- } else if (isEmpty) {
- throw new NoSuchElementException();
- } else {
- if (this.hasNext()) {
- calledHasNext = false;
- return next;
- } else {
- throw new NoSuchElementException();
- }
- }
- }
-
- @Override
- public void remove() {
- throw new UnsupportedOperationException();
-
- }
-
- };
- }
-
- private List<Integer> getNext(List<Integer> prev, int maxInt) {
-
- List<Integer> returnList = Lists.newArrayList();
- int size = prev.size();
- int incrementPos = -1;
- int incrementVal = 0;
-
- for (int i = 0; i < size; i++) {
- if (prev.get(size - (i + 1)) != maxInt - i) {
- incrementPos = size - (i + 1);
- break;
- }
- }
-
- if (incrementPos == -1) {
- return null;
- } else {
-
- incrementVal = prev.get(incrementPos);
- for (int i = 0; i < incrementPos; i++) {
- returnList.add(prev.get(i));
- }
-
- for (int j = incrementPos; j < size; j++) {
- returnList.add(++incrementVal);
- }
-
- return returnList;
- }
- }
-
- private boolean isValid(List<Integer> combo,
- List<ExternalTupleSet> indexList) {
-
- String s1 = Joiner.on("\u0000").join(combo).trim();
-
- if (invalidCombos.contains(s1)) {
- return false;
- } else {
- int valid = indicesDisjoint(combo, indexList);
-
- if (valid >= 0) {
- String s2 = "";
- for (int i = 0; i < valid + 1; i++) {
- if (s2.length() == 0) {
- s2 = s2 + combo.get(i);
- } else {
- s2 = s2 + "\u0000" + combo.get(i);
- }
- }
- invalidCombos.add(s2);
-
- for (int i = valid + 1; i < combo.size(); i++) {
- s2 = s2 + "\u0000" + combo.get(i);
- invalidCombos.add(s2);
- }
-
- return false;
- } else {
- return true;
- }
- }
-
- }
-
- private int indicesDisjoint(List<Integer> combo,
- List<ExternalTupleSet> indexList) {
-
- Set<QueryModelNode> indexNodes = Sets.newHashSet();
- Set<QueryModelNode> tempNodes;
- TupleExpr temp;
-
- int j = 0;
- for (Integer i : combo) {
- temp = indexList.get(i).getTupleExpr();
- SpFilterCollector spf = new SpFilterCollector();
- temp.visit(spf);
- tempNodes = spf.getSpFilterSet();
- if (Sets.intersection(indexNodes, tempNodes).size() == 0) {
- indexNodes = Sets.union(indexNodes, tempNodes);
- if (indexNodes.size() > spFilterSet.size()) {
- return j;
- }
- } else {
- return j;
- }
- j++;
- }
-
- return -1;
- }
-
- private static class SpFilterCollector extends
- QueryModelVisitorBase<RuntimeException> {
-
- private Set<QueryModelNode> spFilterSet = Sets.newHashSet();
-
- public int getNodeNumber() {
- return spFilterSet.size();
- }
-
- public Set<QueryModelNode> getSpFilterSet() {
- return spFilterSet;
- }
-
- @Override
- public void meet(StatementPattern node) {
-
- spFilterSet.add(node);
- return;
-
- }
-
- @Override
- public void meet(Filter node) {
-
- spFilterSet.add(node.getCondition());
- node.getArg().visit(this);
- }
-
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/VarConstantIndexListPruner.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/VarConstantIndexListPruner.java b/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/VarConstantIndexListPruner.java
deleted file mode 100644
index 577663b..0000000
--- a/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/VarConstantIndexListPruner.java
+++ /dev/null
@@ -1,174 +0,0 @@
-package mvm.rya.indexing.IndexPlanValidator;
-
-/*
- * 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.
- */
-
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import mvm.rya.indexing.external.tupleSet.ExternalTupleSet;
-
-import org.openrdf.query.algebra.Filter;
-import org.openrdf.query.algebra.StatementPattern;
-import org.openrdf.query.algebra.TupleExpr;
-import org.openrdf.query.algebra.ValueConstant;
-import org.openrdf.query.algebra.Var;
-import org.openrdf.query.algebra.helpers.QueryModelVisitorBase;
-
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-
-
-
-
-public class VarConstantIndexListPruner implements IndexListPruner {
-
- private Map<String, Integer> queryConstantMap;
- private int querySpCount;
- private int queryFilterCount;
-
- public VarConstantIndexListPruner(TupleExpr te) {
-
- ConstantCollector cc = new ConstantCollector();
- te.visit(cc);
- this.queryConstantMap = cc.getConstantMap();
- querySpCount = cc.getSpCount();
- queryFilterCount = cc.getFilterCount();
- }
-
- @Override
- public List<ExternalTupleSet> getRelevantIndices(List<ExternalTupleSet> indexList) {
-
- List<ExternalTupleSet> relIndexSet = new ArrayList<>();
-
- for (ExternalTupleSet e : indexList) {
-
- if (isRelevant(e.getTupleExpr())) {
- relIndexSet.add(e);
- }
-
- }
-
- return relIndexSet;
- }
-
- private boolean isRelevant(TupleExpr index) {
-
- ConstantCollector cc = new ConstantCollector();
- index.visit(cc);
-
- Map<String, Integer> indexConstantMap = cc.getConstantMap();
- int indexSpCount = cc.getSpCount();
- int indexFilterCount = cc.getFilterCount();
- Set<String> indexConstants = indexConstantMap.keySet();
-
- if (indexSpCount > querySpCount || indexFilterCount > queryFilterCount
- || !Sets.intersection(indexConstants, queryConstantMap.keySet()).equals(indexConstants)) {
- return false;
- }
-
- for (String s : indexConstants) {
- if (indexConstantMap.get(s) > queryConstantMap.get(s)) {
- return false;
- }
- }
-
- return true;
- }
-
-
- private static class ConstantCollector extends QueryModelVisitorBase<RuntimeException> {
-
- private Map<String, Integer> constantMap = Maps.newHashMap();
- private int spCount = 0;
- private int filterCount = 0;
-
-
- @Override
- public void meet(StatementPattern node) throws RuntimeException {
-
- spCount++;
- super.meet(node);
-
- }
-
-
- @Override
- public void meet(Filter node) throws RuntimeException {
-
- filterCount++;
- super.meet(node);
-
- }
-
-
-
-
- @Override
- public void meet(Var node) throws RuntimeException {
-
- if (node.isConstant()) {
- String key = node.getValue().toString();
- if(constantMap.containsKey(key)){
- int count = constantMap.get(key);
- count += 1;
- constantMap.put(key, count);
- } else {
- constantMap.put(key, 1);
- }
- }
-
- }
-
-
- @Override
- public void meet(ValueConstant node) throws RuntimeException {
-
- String key = node.getValue().toString();
-
- if(constantMap.containsKey(key)) {
- int count = constantMap.get(key);
- count += 1;
- constantMap.put(key, count);
- } else {
- constantMap.put(key,1);
- }
-
- }
-
-
- public Map<String, Integer> getConstantMap() {
- return constantMap;
- }
-
- public int getSpCount(){
- return spCount;
- }
-
-
- public int getFilterCount() {
- return filterCount;
- }
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/extras/indexing/src/main/java/mvm/rya/indexing/IndexingExpr.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/main/java/mvm/rya/indexing/IndexingExpr.java b/extras/indexing/src/main/java/mvm/rya/indexing/IndexingExpr.java
deleted file mode 100644
index 1d4c4bb..0000000
--- a/extras/indexing/src/main/java/mvm/rya/indexing/IndexingExpr.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package mvm.rya.indexing;
-
-/*
- * 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.
- */
-
-
-import java.util.Set;
-
-import org.openrdf.model.URI;
-import org.openrdf.model.Value;
-import org.openrdf.query.algebra.StatementPattern;
-import org.openrdf.query.algebra.Var;
-
-import com.google.common.collect.Sets;
-
-public class IndexingExpr {
-
- private final URI function;
- private final Value[] arguments;
- private final StatementPattern spConstraint;
-
- public IndexingExpr(URI function, StatementPattern spConstraint, Value... arguments) {
- this.function = function;
- this.arguments = arguments;
- this.spConstraint = spConstraint;
- }
-
- public URI getFunction() {
- return function;
- }
-
- public Value[] getArguments() {
- return arguments;
- }
-
- public StatementPattern getSpConstraint() {
- return spConstraint;
- }
-
-
- public Set<String> getBindingNames() {
- //resource and match variable for search are already included as standard result-bindings
- Set<String> bindings = Sets.newHashSet();
-
- for(Var v: spConstraint.getVarList()) {
- if(!v.isConstant()) {
- bindings.add(v.getName());
- }
- }
- return bindings;
- }
-
-
- @Override
- public boolean equals(Object other) {
- if (!(other instanceof IndexingExpr)) {
- return false;
- }
- IndexingExpr arg = (IndexingExpr) other;
- return (this.function.equals(arg.function)) && (this.spConstraint.equals(arg.spConstraint))
- && (this.arguments.equals(arg.arguments));
- }
-
-
- @Override
- public int hashCode() {
- int result = 17;
- result = 31*result + function.hashCode();
- result = 31*result + spConstraint.hashCode();
- result = 31*result + arguments.hashCode();
-
- return result;
- }
-
-}
-
-
-
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/extras/indexing/src/main/java/mvm/rya/indexing/IndexingFunctionRegistry.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/main/java/mvm/rya/indexing/IndexingFunctionRegistry.java b/extras/indexing/src/main/java/mvm/rya/indexing/IndexingFunctionRegistry.java
deleted file mode 100644
index 2f2c486..0000000
--- a/extras/indexing/src/main/java/mvm/rya/indexing/IndexingFunctionRegistry.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package mvm.rya.indexing;
-
-/*
- * 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.
- */
-
-
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.openrdf.model.URI;
-import org.openrdf.model.impl.URIImpl;
-import org.openrdf.query.algebra.ValueConstant;
-import org.openrdf.query.algebra.ValueExpr;
-import org.openrdf.query.algebra.Var;
-
-import com.google.common.collect.Maps;
-
-public class IndexingFunctionRegistry {
-
-
- private static final Map<URI, FUNCTION_TYPE> SEARCH_FUNCTIONS = Maps.newHashMap();
-
- static {
-
- String TEMPORAL_NS = "tag:rya-rdf.org,2015:temporal#";
-
- SEARCH_FUNCTIONS.put(new URIImpl(TEMPORAL_NS+"after"),FUNCTION_TYPE.TEMPORAL);
- SEARCH_FUNCTIONS.put(new URIImpl(TEMPORAL_NS+"before"), FUNCTION_TYPE.TEMPORAL);
- SEARCH_FUNCTIONS.put(new URIImpl(TEMPORAL_NS+"equals"), FUNCTION_TYPE.TEMPORAL);
- SEARCH_FUNCTIONS.put(new URIImpl(TEMPORAL_NS+"beforeInterval"), FUNCTION_TYPE.TEMPORAL);
- SEARCH_FUNCTIONS.put(new URIImpl(TEMPORAL_NS+"afterInterval"), FUNCTION_TYPE.TEMPORAL);
- SEARCH_FUNCTIONS.put(new URIImpl(TEMPORAL_NS+"insideInterval"), FUNCTION_TYPE.TEMPORAL);
- SEARCH_FUNCTIONS.put(new URIImpl(TEMPORAL_NS+"hasBeginningInterval"), FUNCTION_TYPE.TEMPORAL);
- SEARCH_FUNCTIONS.put(new URIImpl(TEMPORAL_NS+"hasEndInterval"), FUNCTION_TYPE.TEMPORAL);
-
-
- SEARCH_FUNCTIONS.put(new URIImpl("http://rdf.useekm.com/fts#text"), FUNCTION_TYPE.FREETEXT);
-
- SEARCH_FUNCTIONS.put(GeoConstants.GEO_SF_EQUALS, FUNCTION_TYPE.GEO);
- SEARCH_FUNCTIONS.put(GeoConstants.GEO_SF_DISJOINT, FUNCTION_TYPE.GEO);
- SEARCH_FUNCTIONS.put(GeoConstants.GEO_SF_INTERSECTS, FUNCTION_TYPE.GEO);
- SEARCH_FUNCTIONS.put(GeoConstants.GEO_SF_TOUCHES, FUNCTION_TYPE.GEO);
- SEARCH_FUNCTIONS.put(GeoConstants.GEO_SF_WITHIN, FUNCTION_TYPE.GEO);
- SEARCH_FUNCTIONS.put(GeoConstants.GEO_SF_CONTAINS, FUNCTION_TYPE.GEO);
- SEARCH_FUNCTIONS.put(GeoConstants.GEO_SF_OVERLAPS, FUNCTION_TYPE.GEO);
- SEARCH_FUNCTIONS.put(GeoConstants.GEO_SF_CROSSES, FUNCTION_TYPE.GEO);
-
- }
-
- public enum FUNCTION_TYPE {GEO, TEMPORAL, FREETEXT};
-
-
- public static Set<URI> getFunctions() {
- return SEARCH_FUNCTIONS.keySet();
- }
-
-
- public static Var getResultVarFromFunctionCall(URI function, List<ValueExpr> args) {
-
- FUNCTION_TYPE type = SEARCH_FUNCTIONS.get(function);
-
- switch(type) {
- case GEO:
- return findBinaryResultVar(args);
- case FREETEXT:
- return findLiteralResultVar(args);
- case TEMPORAL:
- return findBinaryResultVar(args);
- default:
- return null;
- }
-
- }
-
-
- public static FUNCTION_TYPE getFunctionType(URI func) {
- return SEARCH_FUNCTIONS.get(func);
- }
-
-
-
- private static boolean isUnboundVariable(ValueExpr expr) {
- return expr instanceof Var && !((Var)expr).hasValue();
- }
-
- private static boolean isConstant(ValueExpr expr) {
- return expr instanceof ValueConstant || (expr instanceof Var && ((Var)expr).hasValue());
- }
-
-
- private static Var findBinaryResultVar(List<ValueExpr> args) {
-
- if (args.size() >= 2) {
- ValueExpr arg1 = args.get(0);
- ValueExpr arg2 = args.get(1);
- if (isUnboundVariable(arg1) && isConstant(arg2))
- return (Var) arg1;
- else if (isUnboundVariable(arg2) && isConstant(arg1))
- return (Var) arg2;
- }
- return null;
- }
-
-
- private static Var findLiteralResultVar(List<ValueExpr> args) {
- if (args.size() >= 2) {
- ValueExpr arg1 = args.get(0);
- ValueExpr arg2 = args.get(1);
- if (isUnboundVariable(arg1) && isConstant(arg2))
- return (Var)arg1;
- }
- return null;
- }
-
-
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/extras/indexing/src/main/java/mvm/rya/indexing/IteratorFactory.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/main/java/mvm/rya/indexing/IteratorFactory.java b/extras/indexing/src/main/java/mvm/rya/indexing/IteratorFactory.java
deleted file mode 100644
index eb88d99..0000000
--- a/extras/indexing/src/main/java/mvm/rya/indexing/IteratorFactory.java
+++ /dev/null
@@ -1,159 +0,0 @@
-package mvm.rya.indexing;
-
-/*
- * 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.
- */
-
-
-import info.aduna.iteration.CloseableIteration;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.NoSuchElementException;
-import java.util.Set;
-
-import org.openrdf.model.Resource;
-import org.openrdf.model.Statement;
-import org.openrdf.model.URI;
-import org.openrdf.query.BindingSet;
-import org.openrdf.query.QueryEvaluationException;
-import org.openrdf.query.algebra.QueryModelNode;
-import org.openrdf.query.algebra.StatementPattern;
-import org.openrdf.query.algebra.Var;
-import org.openrdf.query.impl.MapBindingSet;
-
-
-//Given StatementPattern constraint and SearchFunction associated with an Indexing Node,
-//creates appropriate StatementConstraints object from StatementPattern constraint and
-//binding set and then uses SearchFunction to delegate query to appropriate index.
-//Resulting iterator over statements is then converted to an iterator over binding sets
-public class IteratorFactory {
-
- public static CloseableIteration<BindingSet, QueryEvaluationException> getIterator(final StatementPattern match,
- final BindingSet bindings, final String queryText, final SearchFunction searchFunction) {
- return new CloseableIteration<BindingSet, QueryEvaluationException>() {
-
- private boolean isClosed = false;
- private CloseableIteration<Statement, QueryEvaluationException> statementIt = null;
-
- private String subjectBinding = match.getSubjectVar().getName();
- private String predicateBinding = match.getPredicateVar().getName();
- private String objectBinding = match.getObjectVar().getName();
- private String contextBinding = null;
-
- private void performQuery() throws QueryEvaluationException {
-
- StatementConstraints contraints = new StatementConstraints();
-
- // get the context (i.e. named graph) of the statement and use that in the query
- QueryModelNode parentNode = match.getSubjectVar().getParentNode();
- if (parentNode instanceof StatementPattern) {
- StatementPattern parentStatement = (StatementPattern) parentNode;
- Var contextVar = parentStatement.getContextVar();
- if (contextVar != null) {
- contextBinding = contextVar.getName();
- Resource context = (Resource) contextVar.getValue();
- contraints.setContext(context);
- }
- }
-
- // get the subject constraint
- if (match.getSubjectVar().isConstant()) {
- // get the subject binding from the filter/statement pair
- Resource subject = (Resource) match.getSubjectVar().getValue();
- contraints.setSubject(subject);
- } else if (bindings.hasBinding(subjectBinding)) {
- // get the subject binding from the passed in bindings (eg from other statements/parts of the tree)
- Resource subject = (Resource) bindings.getValue(subjectBinding);
- contraints.setSubject(subject);
- }
-
- // get the predicate constraint
- if (match.getPredicateVar().isConstant()) {
- // get the predicate binding from the filter/statement pair
- Set<URI> predicates = new HashSet<URI>(getPredicateRestrictions(match.getPredicateVar()));
- contraints.setPredicates(predicates);
- } else if (bindings.hasBinding(predicateBinding)) {
- // get the predicate binding from the passed in bindings (eg from other statements/parts of the tree)
- URI predicateUri = (URI) bindings.getValue(predicateBinding);
- Set<URI> predicates = Collections.singleton(predicateUri);
- contraints.setPredicates(predicates);
- }
-
- statementIt = searchFunction.performSearch(queryText, contraints);
- }
-
- @Override
- public boolean hasNext() throws QueryEvaluationException {
- if (statementIt == null) {
- performQuery();
- }
- return statementIt.hasNext();
- }
-
- @Override
- public BindingSet next() throws QueryEvaluationException {
- if (!hasNext() || isClosed) {
- throw new NoSuchElementException();
- }
-
- Statement statment = statementIt.next();
-
- MapBindingSet bset = new MapBindingSet();
- if (!subjectBinding.startsWith("-const"))
- bset.addBinding(subjectBinding, statment.getSubject());
- if (!predicateBinding.startsWith("-const"))
- bset.addBinding(predicateBinding, statment.getPredicate());
- if (!objectBinding.startsWith("-const"))
- bset.addBinding(objectBinding, statment.getObject());
- if (contextBinding != null && !contextBinding.startsWith("-const"))
- bset.addBinding(contextBinding, statment.getContext());
-
- // merge with other bindings.
- for (String name : bindings.getBindingNames()) {
- bset.addBinding(name, bindings.getValue(name));
- }
-
- return bset;
- }
-
- @Override
- public void remove() throws QueryEvaluationException {
- throw new UnsupportedOperationException();
-
- }
-
- @Override
- public void close() throws QueryEvaluationException {
- if (statementIt != null) {
- statementIt.close();
- }
- isClosed = true;
- }
-
- };
-
- }
-
- public static Collection<URI> getPredicateRestrictions(Var predicate) {
- if (predicate.hasValue())
- return Collections.singleton((URI) predicate.getValue());
- return Collections.emptyList();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/extras/indexing/src/main/java/mvm/rya/indexing/KeyParts.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/main/java/mvm/rya/indexing/KeyParts.java b/extras/indexing/src/main/java/mvm/rya/indexing/KeyParts.java
deleted file mode 100644
index 2dd7a73..0000000
--- a/extras/indexing/src/main/java/mvm/rya/indexing/KeyParts.java
+++ /dev/null
@@ -1,333 +0,0 @@
-package mvm.rya.indexing;
-
-/*
- * 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.
- */
-
-
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.apache.accumulo.core.data.Value;
-import org.apache.commons.codec.binary.StringUtils;
-import org.apache.hadoop.io.Text;
-import org.openrdf.model.Resource;
-import org.openrdf.model.Statement;
-import org.openrdf.model.URI;
-import org.openrdf.model.impl.ContextStatementImpl;
-import org.openrdf.model.impl.StatementImpl;
-import org.openrdf.model.impl.URIImpl;
-
-/**
- * Store and format the various temporal index keys.
- * Row Keys are in these two forms, where [x] denotes x is optional:
- * rowkey = contraintPrefix datetime
- * rowkey = datetime 0x/00 uniquesuffix
- * contraintPrefix = 0x/00 hash([subject][predicate])
- * uniquesuffix = some bytes to make it unique, like hash(statement).
- *
- * The instance is in one of two modes depending on the constructor:
- * storage mode -- construct with a triple statement, get an iterator of keys to store.
- * query mode -- construct with a statement and query constraints, get the key prefix to search.
- *
- * this has the flavor of an immutable object
- * This is independent of the underlying database engine
- *
- * @author David.Lotts
- *
- */
-public class KeyParts implements Iterable<KeyParts> {
- private static final String CQ_S_P_AT = "spo";
- private static final String CQ_P_AT = "po";
- private static final String CQ_S_AT = "so";
- private static final String CQ_O_AT = "o";
- public static final String CQ_BEGIN = "begin";
- public static final String CQ_END = "end";
-
- public static final byte[] HASH_PREFIX = new byte[] {0};
- public static final byte[] HASH_PREFIX_FOLLOWING = new byte[] {1};
-
- public final Text cf;
- public final Text cq;
- public final Text constraintPrefix; // subject and/or predicate
- final Text storeKey; // subject and/or predicate
- final private TemporalInstant instant;
- final private Statement statement;
- final private boolean queryMode;
- KeyParts(final Text constraintPrefix, final TemporalInstant instant, final String cf, final String cq) {
- queryMode = true; // query mode
- storeKey = null;
- statement = null;
- this.constraintPrefix = constraintPrefix;
- this.instant = instant;
- this.cf = new Text(cf);
- this.cq = new Text(cq);
- }
-
- /**
- * this is the value to index.
- * @return
- */
- public Value getValue() {
- assert statement!=null;
- return new Value(StringUtils.getBytesUtf8(StatementSerializer.writeStatement(statement)));
- }
-
- public KeyParts(final Statement statement, final TemporalInstant instant2) {
- queryMode = false; // store mode
- storeKey = null;
- constraintPrefix = null;
- this.statement = statement;
- instant = instant2;
- cf = null;
- cq = null;
- }
-
- private KeyParts(final Text keyText, final Text cf, final Text cq, final Statement statement) {
- queryMode = false; // store mode
- constraintPrefix = null;
- this.statement = statement;
- instant = null;
- storeKey = keyText;
- this.cf = cf;
- this.cq = cq;
- }
-
- @Override
- public Iterator<KeyParts> iterator() {
- final String[] strategies = new String[] {
- CQ_O_AT, CQ_S_P_AT, CQ_P_AT, CQ_S_AT
- } ; // CQ_END?
- assert !queryMode : "iterator for queryMode is not immplemented" ;
- if (queryMode) {
- return null;
- }
-
- // if (!queryMode)
- return new Iterator<KeyParts>() {
- int nextStrategy = 0;
-
- @Override
- public boolean hasNext() {
- return nextStrategy < strategies.length;
- }
-
- @Override
- public KeyParts next() {
- assert(statement!=null);
- Text keyText = new Text();
- // increment++ the next strategy AFTER getting the value
- switch (nextStrategy++) {
- case 0: // index o+hash(p+s)
- assert (CQ_O_AT.equals(strategies[0]));
- keyText = new Text(instant.getAsKeyBytes());
- KeyParts.appendUniqueness(statement, keyText);
- return new KeyParts(keyText, new Text(StatementSerializer.writeContext(statement)), new Text(CQ_O_AT), statement);
- case 1:// index hash(s+p)+o
- assert (CQ_S_P_AT.equals(strategies[1]));
- KeyParts.appendSubjectPredicate(statement, keyText);
- KeyParts.appendInstant(instant, keyText);
- // appendUniqueness -- Not needed since it is already unique.
- return new KeyParts(keyText, new Text(StatementSerializer.writeContext(statement)), new Text(CQ_S_P_AT), statement);
- case 2: // index hash(p)+o
- assert (CQ_P_AT.equals(strategies[2]));
- KeyParts.appendPredicate(statement, keyText);
- KeyParts.appendInstant(instant, keyText);
- KeyParts.appendUniqueness(statement, keyText);
- return new KeyParts(keyText, new Text(StatementSerializer.writeContext(statement)), new Text(CQ_P_AT), statement);
- case 3: // index hash(s)+o
- assert (CQ_S_AT.equals(strategies[3]));
- KeyParts.appendSubject(statement, keyText);
- KeyParts.appendInstant(instant, keyText);
- KeyParts.appendUniqueness(statement, keyText);
- return new KeyParts(keyText, new Text(StatementSerializer.writeContext(statement)), new Text(CQ_S_AT), statement);
- }
- throw new Error("Next passed end? No such nextStrategy="+(nextStrategy-1));
-
- }
-
- @Override
- public void remove() {
- throw new Error("Remove not Implemented.");
- }
- };
- }
-
- public byte[] getStoreKey() {
- assert !queryMode : "must be in store Mode, store keys are not initialized.";
- return storeKey.copyBytes();
- }
-
- /**
- * Query key is the prefix plus the datetime, but no uniqueness at the end.
- * @return the row key for range queries.
- */
- public Text getQueryKey() {
- return getQueryKey(instant);
- };
-
- /**
- * Query key is the prefix plus the datetime, but no uniqueness at the end.
- *
- * @return the row key for range queries.
- */
- public Text getQueryKey(final TemporalInstant theInstant) {
- assert queryMode : "must be in query Mode, query keys are not initialized.";
- final Text keyText = new Text();
- if (constraintPrefix != null) {
- appendBytes(constraintPrefix.copyBytes(), keyText);
- }
- appendInstant(theInstant, keyText);
- return keyText;
- };
-
- @Override
- public String toString() {
- return "KeyParts [contraintPrefix=" + toHumanString(constraintPrefix) + ", instant=" + toHumanString(instant.getAsKeyBytes()) + ", cf=" + cf + ", cq=" + cq + "]";
- }
- private static void appendSubject(final Statement statement, final Text keyText) {
- final Value statementValue = new Value(StatementSerializer.writeSubject(statement).getBytes());
- final byte[] hashOfValue = uniqueFromValueForKey(statementValue);
- appendBytes(HASH_PREFIX, keyText); // prefix the hash with a zero byte.
- appendBytes(hashOfValue, keyText);
- }
-
- private static void appendPredicate(final Statement statement, final Text keyText) {
- final Value statementValue = new Value(StringUtils.getBytesUtf8(StatementSerializer.writePredicate(statement)));
- final byte[] hashOfValue = uniqueFromValueForKey(statementValue);
- appendBytes(HASH_PREFIX, keyText); // prefix the hash with a zero byte.
- appendBytes(hashOfValue, keyText);
- }
-
- private static void appendInstant(final TemporalInstant instant, final Text keyText) {
- final byte[] bytes = instant.getAsKeyBytes();
- appendBytes(bytes, keyText);
- }
-
- private static void appendSubjectPredicate(final Statement statement, final Text keyText) {
- final Value statementValue = new Value(StringUtils.getBytesUtf8(StatementSerializer.writeSubjectPredicate(statement)));
- final byte[] hashOfValue = uniqueFromValueForKey(statementValue);
- appendBytes(HASH_PREFIX, keyText); // prefix the hash with a zero byte.
- appendBytes(hashOfValue, keyText);
- }
-
- /**
- * Append any byte array to a row key.
- * @param bytes append this
- * @param keyText text to append to
- */
- private static void appendBytes(final byte[] bytes, final Text keyText) {
- keyText.append(bytes, 0, bytes.length);
- }
-
- /**
- * Get a collision unlikely hash string and append to the key,
- * so that if two keys have the same value, then they will be the same,
- * if two different values that occur at the same time there keys are different.
- * If the application uses a very large number of statements at the exact same time,
- * the md5 value might be upgraded to for example sha-1 to avoid collisions.
- * @param statement
- * @param keyText
- */
- public static void appendUniqueness(final Statement statement, final Text keyText) {
- keyText.append(HASH_PREFIX, 0, 1); // delimiter
- final Value statementValue = new Value(StringUtils.getBytesUtf8(StatementSerializer.writeStatement(statement)));
- final byte[] hashOfValue = Md5Hash.md5Binary(statementValue);
- keyText.append(hashOfValue, 0, hashOfValue.length);
- }
- /**
- * Get a collision unlikely hash string to append to the key,
- * so that if two keys have the same value, then they will be the same,
- * if two different values that occur at the same time there keys are different.
- * @param value
- * @return
- */
- private static byte[] uniqueFromValueForKey(final Value value) {
- return Md5Hash.md5Binary(value);
- }
-
- /**
- * List all the index keys to find for any query. Set the strategy via the column qualifier, ex: CQ_S_P_AT.
- * Column Family (CF) is the context/named-graph.
- * @param queryInstant
- * @param contraints
- * @return
- */
- static public List<KeyParts> keyPartsForQuery(final TemporalInstant queryInstant, final StatementConstraints contraints) {
- final List<KeyParts> keys = new LinkedList<KeyParts>();
- final URI urlNull = new URIImpl("urn:null");
- final Resource currentContext = contraints.getContext();
- final boolean hasSubj = contraints.hasSubject();
- if (contraints.hasPredicates()) {
- for (final URI nextPredicate : contraints.getPredicates()) {
- final Text contraintPrefix = new Text();
- final Statement statement = new ContextStatementImpl(hasSubj ? contraints.getSubject() : urlNull, nextPredicate, urlNull, contraints.getContext());
- if (hasSubj) {
- appendSubjectPredicate(statement, contraintPrefix);
- } else {
- appendPredicate(statement, contraintPrefix);
- }
- keys.add(new KeyParts(contraintPrefix, queryInstant, (currentContext==null)?"":currentContext.toString(), hasSubj?CQ_S_P_AT:CQ_P_AT ));
- }
- }
- else if (contraints.hasSubject()) { // and no predicates
- final Text contraintPrefix = new Text();
- final Statement statement = new StatementImpl(contraints.getSubject(), urlNull, urlNull);
- appendSubject(statement, contraintPrefix);
- keys.add( new KeyParts(contraintPrefix, queryInstant, (currentContext==null)?"":currentContext.toString(), CQ_S_AT) );
- }
- else {
- // No constraints except possibly a context/named-graph, handled by the CF
- keys.add( new KeyParts(null, queryInstant, (currentContext==null)?"":currentContext.toString(), CQ_O_AT) );
- }
- return keys;
- }
- /**
- * convert a non-utf8 byte[] and text and value to string and show unprintable bytes as {xx} where x is hex.
- * @param value
- * @return Human readable representation.
- */
- public static String toHumanString(final Value value) {
- return toHumanString(value==null?null:value.get());
- }
- public static String toHumanString(final Text text) {
- return toHumanString(text==null?null:text.copyBytes());
- }
- public static String toHumanString(final byte[] bytes) {
- if (bytes==null) {
- return "{null}";
- }
- final StringBuilder sb = new StringBuilder();
- for (final byte b : bytes) {
- if ((b > 0x7e) || (b < 32)) {
- sb.append("{");
- sb.append(Integer.toHexString( b & 0xff )); // Lop off the sign extended ones.
- sb.append("}");
- } else if (b == '{'||b == '}') { // Escape the literal braces.
- sb.append("{");
- sb.append((char)b);
- sb.append("}");
- } else {
- sb.append((char)b);
- }
- }
- return sb.toString();
- }
-
- }
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/extras/indexing/src/main/java/mvm/rya/indexing/Md5Hash.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/main/java/mvm/rya/indexing/Md5Hash.java b/extras/indexing/src/main/java/mvm/rya/indexing/Md5Hash.java
deleted file mode 100644
index 0e83822..0000000
--- a/extras/indexing/src/main/java/mvm/rya/indexing/Md5Hash.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package mvm.rya.indexing;
-
-import org.apache.accumulo.core.data.Value;
-
-/*
- * 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.
- */
-
-import org.apache.commons.codec.binary.Base64;
-import org.apache.commons.codec.binary.StringUtils;
-import org.apache.commons.codec.digest.DigestUtils;
-
-/**
- * Utility methods for generating hashes. Note that MD5 is 16 bytes, or 32 Hex chars. To make it smaller (but still printable), this class
- * Base64 encodes those 16 bytes into 22 chars.
- */
-public class Md5Hash {
- public static String md5Base64(final byte[] data) {
- return Base64.encodeBase64URLSafeString(DigestUtils.md5(data));
- }
-
- public static String md5Base64(final String string) {
- return md5Base64(StringUtils.getBytesUtf8(string));
- }
-
- public static byte[] md5Binary(final Value value) {
- return DigestUtils.md5(value.get());
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/extras/indexing/src/main/java/mvm/rya/indexing/SearchFunction.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/main/java/mvm/rya/indexing/SearchFunction.java b/extras/indexing/src/main/java/mvm/rya/indexing/SearchFunction.java
deleted file mode 100644
index 6a19ee0..0000000
--- a/extras/indexing/src/main/java/mvm/rya/indexing/SearchFunction.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package mvm.rya.indexing;
-
-/*
- * 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.
- */
-
-
-import info.aduna.iteration.CloseableIteration;
-import org.openrdf.model.Statement;
-import org.openrdf.query.QueryEvaluationException;
-
-/**
- * A function used to perform a search.
- */
-public interface SearchFunction {
-
- /**
- * Search the indices for the given terms and return {@link Statement}s that meet the {@link StatementConstraints}
- *
- * @param searchTerms
- * the search terms
- * @param contraints
- * the constraints on the returned {@link Statement}s
- * @return
- * @throws QueryEvaluationException
- */
- public abstract CloseableIteration<Statement, QueryEvaluationException> performSearch(String searchTerms, StatementConstraints contraints)
- throws QueryEvaluationException;
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/extras/indexing/src/main/java/mvm/rya/indexing/SearchFunctionFactory.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/main/java/mvm/rya/indexing/SearchFunctionFactory.java b/extras/indexing/src/main/java/mvm/rya/indexing/SearchFunctionFactory.java
deleted file mode 100644
index 719cc2f..0000000
--- a/extras/indexing/src/main/java/mvm/rya/indexing/SearchFunctionFactory.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package mvm.rya.indexing;
-
-/*
- * 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.
- */
-
-
-import java.util.Map;
-
-import org.apache.log4j.Logger;
-import org.openrdf.model.URI;
-import org.openrdf.query.QueryEvaluationException;
-
-import com.google.common.collect.Maps;
-
-public abstract class SearchFunctionFactory {
-
- private static final Logger logger = Logger.getLogger(SearchFunctionFactory.class);
-
- private final Map<URI, SearchFunction> SEARCH_FUNCTION_MAP = Maps.newHashMap();
-
-
- /**
- * Get a {@link GeoSearchFunction} for a give URI.
- *
- * @param searchFunction
- * @return
- */
- public SearchFunction getSearchFunction(final URI searchFunction) {
-
- SearchFunction geoFunc = null;
-
- try {
- geoFunc = getSearchFunctionInternal(searchFunction);
- } catch (QueryEvaluationException e) {
- e.printStackTrace();
- }
-
- return geoFunc;
- }
-
- private SearchFunction getSearchFunctionInternal(final URI searchFunction) throws QueryEvaluationException {
- SearchFunction sf = SEARCH_FUNCTION_MAP.get(searchFunction);
-
- if (sf != null) {
- return sf;
- } else {
- throw new QueryEvaluationException("Unknown Search Function: " + searchFunction.stringValue());
- }
-
-
- }
-
-
-}
-
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/extras/indexing/src/main/java/mvm/rya/indexing/StatementConstraints.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/main/java/mvm/rya/indexing/StatementConstraints.java b/extras/indexing/src/main/java/mvm/rya/indexing/StatementConstraints.java
deleted file mode 100644
index e8f1d4e..0000000
--- a/extras/indexing/src/main/java/mvm/rya/indexing/StatementConstraints.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package mvm.rya.indexing;
-
-/*
- * 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.
- */
-
-
-
-import java.util.Set;
-
-import org.openrdf.model.Resource;
-import org.openrdf.model.URI;
-
-public class StatementConstraints {
- private Resource context = null;
- private Resource subject = null;
- private Set<URI> predicates = null;
-
- public StatementConstraints setContext(Resource context) {
- this.context = context;
- return this;
- }
-
- public StatementConstraints setPredicates(Set<URI> predicates) {
- this.predicates = predicates;
- return this;
- }
-
- public StatementConstraints setSubject(Resource subject) {
- this.subject = subject;
- return this;
- }
-
- public Resource getContext() {
- return context;
- }
-
- public Set<URI> getPredicates() {
- return predicates;
- }
-
- public Resource getSubject() {
- return subject;
- }
-
- public boolean hasSubject() {
- return subject != null;
- }
-
- public boolean hasPredicates() {
- return predicates != null && !predicates.isEmpty();
- }
-
- public boolean hasContext() {
- return context != null;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/extras/indexing/src/main/java/mvm/rya/indexing/StatementSerializer.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/main/java/mvm/rya/indexing/StatementSerializer.java b/extras/indexing/src/main/java/mvm/rya/indexing/StatementSerializer.java
deleted file mode 100644
index 107f69d..0000000
--- a/extras/indexing/src/main/java/mvm/rya/indexing/StatementSerializer.java
+++ /dev/null
@@ -1,225 +0,0 @@
-package mvm.rya.indexing;
-
-/*
- * 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.
- */
-
-
-
-import java.io.IOException;
-import java.util.Set;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.Validate;
-import org.openrdf.model.Literal;
-import org.openrdf.model.Resource;
-import org.openrdf.model.Statement;
-import org.openrdf.model.URI;
-import org.openrdf.model.Value;
-import org.openrdf.model.ValueFactory;
-import org.openrdf.model.impl.ContextStatementImpl;
-import org.openrdf.model.impl.StatementImpl;
-import org.openrdf.model.impl.ValueFactoryImpl;
-
-/**
- * A set of Utilities to serialize {@link Statement}s to/from {@link String}s.
- */
-public class StatementSerializer {
- private static String SEP = "\u0000";
-
- private static ValueFactory VALUE_FACTORY = new ValueFactoryImpl();
-
- /**
- * Read a {@link Statement} from a {@link String}
- *
- * @param in
- * the {@link String} to parse
- * @return a {@link Statement}
- */
- public static Statement readStatement(String in) throws IOException {
- String[] parts = in.split(SEP);
-
- if (parts.length != 4) {
- throw new IOException("Not a valid statement: " + in);
- }
-
- String contextString = parts[0];
- String subjectString = parts[1];
- String predicateString = parts[2];
- String objectString = parts[3];
- return readStatement(subjectString, predicateString, objectString, contextString);
- }
-
- public static Statement readStatement(String subjectString, String predicateString, String objectString) {
- return readStatement(subjectString, predicateString, objectString, "");
- }
-
- public static Statement readStatement(String subjectString, String predicateString, String objectString, String contextString) {
- Resource subject = createResource(subjectString);
- URI predicate = VALUE_FACTORY.createURI(predicateString);
-
- boolean isObjectLiteral = objectString.startsWith("\"");
-
- Value object = null;
- if (isObjectLiteral) {
- object = parseLiteral(objectString);
- } else {
- object = createResource(objectString);
- }
-
- if (contextString == null || contextString.isEmpty()) {
- return new StatementImpl(subject, predicate, object);
- } else {
- Resource context = VALUE_FACTORY.createURI(contextString);
- return new ContextStatementImpl(subject, predicate, object, context);
- }
- }
-
- private static Resource createResource(String str) {
- if (str.startsWith("_")) {
- return VALUE_FACTORY.createBNode(str.substring(2));
- }
- return VALUE_FACTORY.createURI(str);
-
- }
-
- private static Literal parseLiteral(String fullLiteralString) {
- Validate.notNull(fullLiteralString);
- Validate.isTrue(fullLiteralString.length() > 1);
-
- if (fullLiteralString.endsWith("\"")) {
- String fullLiteralWithoutQuotes = fullLiteralString.substring(1, fullLiteralString.length() - 1);
- return VALUE_FACTORY.createLiteral(fullLiteralWithoutQuotes, (String) null);
- } else {
-
- // find the closing quote
- int labelEnd = fullLiteralString.lastIndexOf("\"");
-
- String label = fullLiteralString.substring(1, labelEnd);
-
- String data = fullLiteralString.substring(labelEnd + 1);
-
- if (data.startsWith("@")) {
- // the data is "language"
- String lang = data.substring(1);
- return VALUE_FACTORY.createLiteral(label, lang);
- } else if (data.startsWith("^^<")) {
- // the data is a "datatype"
- String datatype = data.substring(3, data.length() - 1);
- URI datatypeUri = VALUE_FACTORY.createURI(datatype);
- return VALUE_FACTORY.createLiteral(label, datatypeUri);
- }
- }
- return null;
-
- }
-
- public static String writeSubject(Statement statement) {
- return statement.getSubject().toString();
- }
-
- public static String writeObject(Statement statement) {
- return statement.getObject().toString();
- }
-
- public static String writePredicate(Statement statement) {
- return statement.getPredicate().toString();
- }
-
- public static String writeSubjectPredicate(Statement statement) {
- Validate.notNull(statement);
- Validate.notNull(statement.getSubject());
- Validate.notNull(statement.getPredicate());
- return statement.getSubject().toString() + SEP + statement.getPredicate().toString();
- }
-
- public static String writeContext(Statement statement) {
- if (statement.getContext() == null) {
- return "";
- }
- return statement.getContext().toString();
- }
-
- /**
- * Write a {@link Statement} to a {@link String}
- *
- * @param statement
- * the {@link Statement} to write
- * @return a {@link String} representation of the statement
- */
- public static String writeStatement(Statement statement) {
- Resource subject = statement.getSubject();
- Resource context = statement.getContext();
- URI predicate = statement.getPredicate();
- Value object = statement.getObject();
-
- Validate.notNull(subject);
- Validate.notNull(predicate);
- Validate.notNull(object);
-
- String s = "";
- if (context == null) {
- s = SEP + subject.toString() + SEP + predicate.toString() + SEP + object.toString();
- } else {
- s = context.toString() + SEP + subject.toString() + SEP + predicate.toString() + SEP + object.toString();
- }
- return s;
- }
-
- /**
- * Creates a Regular Expression to match serialized statements meeting these constraints. A <code>null</code> or empty parameters imply
- * no constraint. A <code>null</code> return value implies no constraints.
- *
- * @param context
- * context constraint
- * @param subject
- * subject constraint
- * @param predicates
- * list of predicate constraints
- * @return a regular expression that can be used to match serialized statements. A <code>null</code> return value implies no
- * constraints.
- */
- public static String createStatementRegex(StatementConstraints contraints) {
- Resource context = contraints.getContext();
- Resource subject = contraints.getSubject();
- Set<URI> predicates = contraints.getPredicates();
- if (context == null && subject == null && (predicates == null || predicates.isEmpty())) {
- return null;
- }
-
- // match on anything but a separator
- String anyReg = "[^" + SEP + "]*";
-
- // if context is empty, match on any context
- String contextReg = (context == null) ? anyReg : context.stringValue();
-
- // if subject is empty, match on any subject
- String subjectReg = (subject == null) ? anyReg : subject.stringValue();
-
- // if the predicates are empty, match on any predicate. Otherwise, "or" the predicates.
- String predicateReg = "";
- if (predicates == null || predicates.isEmpty()) {
- predicateReg = anyReg;
- } else {
- predicateReg = "(" + StringUtils.join(predicates, "|") + ")";
- }
-
- return "^" + contextReg + SEP + subjectReg + SEP + predicateReg + SEP + ".*";
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/extras/indexing/src/main/java/mvm/rya/indexing/TemporalIndexer.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/main/java/mvm/rya/indexing/TemporalIndexer.java b/extras/indexing/src/main/java/mvm/rya/indexing/TemporalIndexer.java
deleted file mode 100644
index 3f6858c..0000000
--- a/extras/indexing/src/main/java/mvm/rya/indexing/TemporalIndexer.java
+++ /dev/null
@@ -1,166 +0,0 @@
-package mvm.rya.indexing;
-
-import org.openrdf.model.Statement;
-import org.openrdf.query.QueryEvaluationException;
-
-/*
- * 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.
- */
-
-
-import info.aduna.iteration.CloseableIteration;
-import mvm.rya.api.persist.index.RyaSecondaryIndexer;
-
-/**
- * A repository to store, index, and retrieve {@link Statement}s based on time.
- * Instants:
- * Instant {before, equals, after} Instant
- * Instant {before, after, inside} Interval
- * Instant {hasBeginning, hasEnd} Interval
- *
- * OWL-Time provides the interval relations:
- * <pre>
- * intervalEquals,
- * intervalBefore,
- * intervalMeets,
- * intervalOverlaps,
- * intervalStarts,
- * intervalDuring,
- * intervalFinishes,
- *
- * and their reverse interval relations:
- * intervalAfter,
- * intervalMetBy,
- * intervalOverlappedBy,
- * intervalStartedBy,
- * intervalContains,
- * intervalFinishedBy.
- *
- * from Allen paper in 1983
- *
- * Relation Y Symbol Inverse Y
- * before Y < > X
- * equal Y = = X
- * meets Y m mi X
- * overlaps Y o oi X
- * during Y d di X
- * starts Y s si X
- * finishes Y f fi X
- * </pre>
- *
- */
-
-public interface TemporalIndexer extends RyaSecondaryIndexer {
-
- /* consider ParseException here */
-
- /*-
- *
- * And Now, what you you've all been waiting for, the queries:
- * the instant versions:
- * format: x {relation} y
- * read: Given literal y, find all statements where the date object x is ( x relation y )
- * Instant {before, equals, after} Instant
- * Instant {before, after, inside} Interval
- * Instant {hasBeginning, hasEnd} Interval
- *
- * the Allen interval relations, as described above.
- * intervalEquals,
- * intervalBefore,
- * intervalMeets,
- * intervalOverlaps,
- * intervalStarts,
- * intervalDuring,
- * intervalFinishes
- * and then the inverses, including after.
- */
-
- public abstract CloseableIteration<Statement, QueryEvaluationException> queryInstantEqualsInstant(
- TemporalInstant queryInstant, StatementConstraints contraints)
- throws QueryEvaluationException;;
-
- public abstract CloseableIteration<Statement, QueryEvaluationException> queryInstantBeforeInstant(
- TemporalInstant queryInstant, StatementConstraints contraints)
- throws QueryEvaluationException;;
-
- public abstract CloseableIteration<Statement, QueryEvaluationException> queryInstantAfterInstant(
- TemporalInstant queryInstant, StatementConstraints contraints)
- throws QueryEvaluationException;;
-
- public abstract CloseableIteration<Statement, QueryEvaluationException> queryInstantBeforeInterval(
- TemporalInterval givenInterval, StatementConstraints contraints)
- throws QueryEvaluationException;;
-
- public abstract CloseableIteration<Statement, QueryEvaluationException> queryInstantAfterInterval(
- TemporalInterval givenInterval, StatementConstraints contraints)
- throws QueryEvaluationException;
-
- public abstract CloseableIteration<Statement, QueryEvaluationException> queryInstantInsideInterval(
- TemporalInterval givenInterval, StatementConstraints contraints)
- throws QueryEvaluationException;
-
- public abstract CloseableIteration<Statement, QueryEvaluationException> queryInstantHasBeginningInterval(
- TemporalInterval queryInterval, StatementConstraints contraints)
- throws QueryEvaluationException;
-
- public abstract CloseableIteration<Statement, QueryEvaluationException> queryInstantHasEndInterval(
- TemporalInterval queryInterval, StatementConstraints contraints)
- throws QueryEvaluationException;
-
- /**
- * Returns statements that contain a time instance that is equal to the
- * queried time and meet the {@link StatementConstraints}.
- *
- * @param query
- * the queried time instance
- * @param contraints
- * the {@link StatementConstraints}
- * @return
- * @throws QueryEvaluationException
- */
- public abstract CloseableIteration<Statement, QueryEvaluationException> queryIntervalEquals(
- TemporalInterval query, StatementConstraints contraints)
- throws QueryEvaluationException;
-
- /**
- * Returns statements that contain a time instances that are before the
- * queried {@link TemporalInterval} and meet the {@link StatementConstraints}
- *
- * @param query
- * the queried time instance
- * @param contraints
- * the {@link StatementConstraints}
- * @return
- */
- public abstract CloseableIteration<Statement, QueryEvaluationException> queryIntervalBefore(
- TemporalInterval query, StatementConstraints contraints)
- throws QueryEvaluationException;
-
- /**
- * Returns statements that contain a time instance that is after the queried {@link TemporalInterval} and meet the {@link StatementConstraints}.
- *
- * @param query
- * the queried time instance
- * @param contraints
- * the {@link StatementConstraints}
- * @return
- */
- public abstract CloseableIteration<Statement, QueryEvaluationException> queryIntervalAfter(
- TemporalInterval query, StatementConstraints contraints)
- throws QueryEvaluationException;
-}