/** * Get the specific index name (the path of the index definition, or the * index type if that one is unique). * * @return the index name */ default String getIndexName(Filter filter, NodeState rootState) { return getIndexName(); }
@Override public int compare(QueryIndex left, QueryIndex right) { return Double.compare(left.getMinimumCost(), right.getMinimumCost()); } };
for (int i = 0; i < queryIndexes.size(); i++) { QueryIndex index = queryIndexes.get(i); double minCost = index.getMinimumCost(); if (minCost > bestCost) { String indexName = index.getIndexName(); IndexPlan indexPlan = null; if (index instanceof AdvancedQueryIndex) { cost = index.getCost(filter, rootState);
@Override public Iterable<String> getIndexPaths() { NodeState nodeType = NodeStateUtils.getNode(nodeStore.getRoot(), "/oak:index/nodetype"); checkState("property".equals(nodeType.getString("type")), "nodetype index at " + "/oak:index/nodetype is found to be disabled. Cannot determine the paths of all indexes"); //Check if oak:QueryIndexDefinition is indexed as part of nodetype index boolean indxDefnTypeIndexed = Iterables.contains(nodeType.getNames(DECLARING_NODE_TYPES), INDEX_DEFINITIONS_NODE_TYPE); if (!indxDefnTypeIndexed) { log.warn("{} is not found to be indexed as part of nodetype index. Non root indexes would " + "not be listed", INDEX_DEFINITIONS_NODE_TYPE); NodeState oakIndex = nodeStore.getRoot().getChildNode("oak:index"); return transform(filter(oakIndex.getChildNodeEntries(), cne -> INDEX_DEFINITIONS_NODE_TYPE.equals(cne.getNodeState().getName(JCR_PRIMARYTYPE))), cne -> PathUtils.concat("/oak:index", cne.getName())); } return () -> { Iterator<IndexRow> itr = getIndex().query(createFilter(INDEX_DEFINITIONS_NODE_TYPE), nodeStore.getRoot()); return transform(itr, input -> input.getPath()); }; }
private void executeInternal(NodeState rootState) { QueryIndex index = plan.getIndex(); timerDuration = null; if (index == null) { cursor = Cursors.newPathCursor(new ArrayList<String>(), query.getSettings()); planIndexName = "traverse"; return; } IndexPlan p = plan.getIndexPlan(); if (p != null) { planIndexName = p.getPlanName(); p.setFilter(createFilter(false)); AdvancedQueryIndex adv = (AdvancedQueryIndex) index; cursor = adv.query(p, rootState); } else { FilterImpl f = createFilter(false); planIndexName = index.getIndexName(f, rootState); cursor = index.query(f, rootState); } }
@Override public String getIndexCostInfo(NodeState rootState) { StringBuilder buff = new StringBuilder(); buff.append(quoteJson(selectorName)).append(": "); QueryIndex index = getIndex(); if (index != null) { if (index instanceof AdvancedQueryIndex) { IndexPlan p = plan.getIndexPlan(); buff.append("{ perEntry: ").append(p.getCostPerEntry()); buff.append(", perExecution: ").append(p.getCostPerExecution()); buff.append(", count: ").append(p.getEstimatedEntryCount()); buff.append(" }"); } else { buff.append(index.getCost(createFilter(true), rootState)); } } return buff.toString(); }
@Override public String getPlan(NodeState rootState) { StringBuilder buff = new StringBuilder(); buff.append(toString()); buff.append(" /* "); QueryIndex index = getIndex(); if (index != null) { if (index instanceof AdvancedQueryIndex) { AdvancedQueryIndex adv = (AdvancedQueryIndex) index; IndexPlan p = plan.getIndexPlan(); buff.append(adv.getPlanDescription(p, rootState)); } else { buff.append(index.getPlan(createFilter(true), rootState)); } } else { buff.append("no-index"); } if (!selectorConstraints.isEmpty()) { buff.append(" where ").append(new AndImpl(selectorConstraints).toString()); } buff.append(" */"); return buff.toString(); }
for (int i = 0; i < queryIndexes.size(); i++) { QueryIndex index = queryIndexes.get(i); double minCost = index.getMinimumCost(); if (minCost > bestCost) { String indexName = index.getIndexName(); IndexPlan indexPlan = null; if (index instanceof AdvancedQueryIndex) { cost = index.getCost(filter, rootState);
@Override public Iterable<String> getIndexPaths() { NodeState nodeType = NodeStateUtils.getNode(nodeStore.getRoot(), "/oak:index/nodetype"); checkState("property".equals(nodeType.getString("type")), "nodetype index at " + "/oak:index/nodetype is found to be disabled. Cannot determine the paths of all indexes"); //Check if oak:QueryIndexDefinition is indexed as part of nodetype index boolean indxDefnTypeIndexed = Iterables.contains(nodeType.getNames(DECLARING_NODE_TYPES), INDEX_DEFINITIONS_NODE_TYPE); if (!indxDefnTypeIndexed) { log.warn("{} is not found to be indexed as part of nodetype index. Non root indexes would " + "not be listed", INDEX_DEFINITIONS_NODE_TYPE); NodeState oakIndex = nodeStore.getRoot().getChildNode("oak:index"); return transform(filter(oakIndex.getChildNodeEntries(), cne -> INDEX_DEFINITIONS_NODE_TYPE.equals(cne.getNodeState().getName(JCR_PRIMARYTYPE))), cne -> PathUtils.concat("/oak:index", cne.getName())); } return () -> { Iterator<IndexRow> itr = getIndex().query(createFilter(INDEX_DEFINITIONS_NODE_TYPE), nodeStore.getRoot()); return transform(itr, input -> input.getPath()); }; }
@Override public String getIndexCostInfo(NodeState rootState) { StringBuilder buff = new StringBuilder(); buff.append(quoteJson(selectorName)).append(": "); QueryIndex index = getIndex(); if (index != null) { if (index instanceof AdvancedQueryIndex) { IndexPlan p = plan.getIndexPlan(); buff.append("{ perEntry: ").append(p.getCostPerEntry()); buff.append(", perExecution: ").append(p.getCostPerExecution()); buff.append(", count: ").append(p.getEstimatedEntryCount()); buff.append(" }"); } else { buff.append(index.getCost(createFilter(true), rootState)); } } return buff.toString(); }
@Override public String getPlan(NodeState rootState) { StringBuilder buff = new StringBuilder(); buff.append(toString()); buff.append(" /* "); QueryIndex index = getIndex(); if (index != null) { if (index instanceof AdvancedQueryIndex) { AdvancedQueryIndex adv = (AdvancedQueryIndex) index; IndexPlan p = plan.getIndexPlan(); buff.append(adv.getPlanDescription(p, rootState)); } else { buff.append(index.getPlan(createFilter(true), rootState)); } } else { buff.append("no-index"); } if (!selectorConstraints.isEmpty()) { buff.append(" where ").append(new AndImpl(selectorConstraints).toString()); } buff.append(" */"); return buff.toString(); }
for (int i = 0; i < queryIndexes.size(); i++) { QueryIndex index = queryIndexes.get(i); double minCost = index.getMinimumCost(); if (minCost > bestCost) { String indexName = index.getIndexName(); IndexPlan indexPlan = null; if (index instanceof AdvancedQueryIndex) { cost = index.getCost(filter, rootState);
@Override public Iterable<String> getIndexPaths() { NodeState nodeType = NodeStateUtils.getNode(nodeStore.getRoot(), "/oak:index/nodetype"); checkState("property".equals(nodeType.getString("type")), "nodetype index at " + "/oak:index/nodetype is found to be disabled. Cannot determine the paths of all indexes"); //Check if oak:QueryIndexDefinition is indexed as part of nodetype index boolean indxDefnTypeIndexed = Iterables.contains(nodeType.getNames(DECLARING_NODE_TYPES), INDEX_DEFINITIONS_NODE_TYPE); if (!indxDefnTypeIndexed) { log.warn("{} is not found to be indexed as part of nodetype index. Non root indexes would " + "not be listed", INDEX_DEFINITIONS_NODE_TYPE); NodeState oakIndex = nodeStore.getRoot().getChildNode("oak:index"); return transform(filter(oakIndex.getChildNodeEntries(), cne -> INDEX_DEFINITIONS_NODE_TYPE.equals(cne.getNodeState().getName(JCR_PRIMARYTYPE))), cne -> PathUtils.concat("/oak:index", cne.getName())); } return () -> { Iterator<IndexRow> itr = getIndex().query(createFilter(INDEX_DEFINITIONS_NODE_TYPE), nodeStore.getRoot()); return transform(itr, input -> input.getPath()); }; }
@Override public int compare(QueryIndex left, QueryIndex right) { return Double.compare(left.getMinimumCost(), right.getMinimumCost()); } };
@Override public String getIndexCostInfo(NodeState rootState) { StringBuilder buff = new StringBuilder(); buff.append(quoteJson(selectorName)).append(": "); QueryIndex index = getIndex(); if (index != null) { if (index instanceof AdvancedQueryIndex) { IndexPlan p = plan.getIndexPlan(); buff.append("{ perEntry: ").append(p.getCostPerEntry()); buff.append(", perExecution: ").append(p.getCostPerExecution()); buff.append(", count: ").append(p.getEstimatedEntryCount()); buff.append(" }"); } else { buff.append(index.getCost(createFilter(true), rootState)); } } return buff.toString(); }
@Override public String getPlan(NodeState rootState) { StringBuilder buff = new StringBuilder(); buff.append(toString()); buff.append(" /* "); QueryIndex index = getIndex(); if (index != null) { if (index instanceof AdvancedQueryIndex) { AdvancedQueryIndex adv = (AdvancedQueryIndex) index; IndexPlan p = plan.getIndexPlan(); buff.append(adv.getPlanDescription(p, rootState)); } else { buff.append(index.getPlan(createFilter(true), rootState)); } } else { buff.append("no-index"); } if (!selectorConstraints.isEmpty()) { buff.append(" where ").append(new AndImpl(selectorConstraints).toString()); } buff.append(" */"); return buff.toString(); }
private static List<String> assertFilter(Filter filter, QueryIndex queryIndex, NodeState indexed, List<String> expected) { Cursor cursor = queryIndex.query(filter, indexed); List<String> paths = newArrayList(); while (cursor.hasNext()) { paths.add(cursor.next().getPath()); } Collections.sort(paths); for (String p : expected) { assertTrue("Expected path " + p + " not found", paths.contains(p)); } assertEquals("Result set size is different \nExpected: " + expected + "\nActual: " + paths, expected.size(), paths.size()); return paths; }
@Override public int compare(QueryIndex left, QueryIndex right) { return Double.compare(left.getMinimumCost(), right.getMinimumCost()); } };
@Override public void execute(NodeState rootState) { QueryIndex index = plan.getIndex(); if (index == null) { cursor = Cursors.newPathCursor(new ArrayList<String>(), query.getSettings()); return; } IndexPlan p = plan.getIndexPlan(); if (p != null) { p.setFilter(createFilter(false)); AdvancedQueryIndex adv = (AdvancedQueryIndex) index; cursor = adv.query(p, rootState); } else { cursor = index.query(createFilter(false), rootState); } }
@Override public void execute(NodeState rootState) { QueryIndex index = plan.getIndex(); if (index == null) { cursor = Cursors.newPathCursor(new ArrayList<String>(), query.getSettings()); return; } IndexPlan p = plan.getIndexPlan(); if (p != null) { p.setFilter(createFilter(false)); AdvancedQueryIndex adv = (AdvancedQueryIndex) index; cursor = adv.query(p, rootState); } else { cursor = index.query(createFilter(false), rootState); } }