@Override public IndexEntry produce(NodeState indexHit, String pathName) { PropertyState s = indexHit.getProperty("entry"); return new IndexEntry(s.getValue(Type.STRING, 0), pathName); } });
private void check(Entry<Mount, NodeState> indexEntry, Entry<Mount, NodeState> indexEntry2, Context ctx, ErrorHolder errorHolder) { String indexName = rootIndexDef.getName(); // optimisation: sort strategies to ensuer that we query all the entries from the mount and check them // against the default. this way we'll run a significantly smaller number of checks. The assumption is // that the non-default mount will always hold a larger number of entries TreeSet<StrategyWrapper> wrappers = new TreeSet<>(); wrappers.add(getWrapper(indexEntry, indexName, ctx)); wrappers.add(getWrapper(indexEntry2, indexName, ctx)); StrategyWrapper wrapper = wrappers.first(); StrategyWrapper wrapper2 = wrappers.last(); LOG.info("Checking index definitions for {} between mounts {} and {}", indexName, wrapper.mount.getName(), wrapper2.mount.getName()); for ( IndexEntry hit : wrapper.queryAll() ) { Optional<IndexEntry> result = wrapper2.queryOne(hit.getPropertyValue()); if ( result.isPresent() ) { IndexEntry hit2 = result.get(); if ( reportedConflictingValues.add(hit.getPropertyValue())) { errorHolder.report(wrapper.nodeStore, hit.getPath(), wrapper2.nodeStore, hit2.getPath(), hit.getPropertyValue(), "duplicate unique index entry"); } } } }
@Override public IndexEntry produce(NodeState indexHit, String pathName) { PropertyState s = indexHit.getProperty("entry"); return new IndexEntry(s.getValue(Type.STRING, 0), pathName); } });
@Override public IndexEntry produce(NodeState indexHit, String pathName) { PropertyState s = indexHit.getProperty("entry"); return new IndexEntry(s.getValue(Type.STRING, 0), pathName); } });
@Test public void queryEntries_All() { Iterable<IndexEntry> hits = store.queryEntries(FilterImpl.newTestInstance(), indexName, indexMeta.getNodeState(), null); assertThat(hits, containsInAnyOrder(new IndexEntry("/some/node1", "key1"), new IndexEntry("/some/node2", "key2"))); }
@Test public void queryEntries_some() { Iterable<IndexEntry> hits = store.queryEntries(FilterImpl.newTestInstance(), indexName, indexMeta.getNodeState(), Arrays.asList("key1")); assertThat(hits, containsInAnyOrder(new IndexEntry("/some/node1", "key1"))); }