private Optional<Index> resolveIndex(ObjectId canonicalTreeId, IndexInfo indexInfo, IndexDatabase db) { Index index = null; if (EMPTY_TREE_ID.equals(canonicalTreeId)) { index = new Index(indexInfo, EMPTY_TREE_ID, db); } else { ObjectId indexedTree = db.resolveIndexedTree(indexInfo, canonicalTreeId).orNull(); if (indexedTree != null) { index = new Index(indexInfo, indexedTree, db); } } return Optional.ofNullable(index); }
@Then("^the response should contain the index ID for tree \"([^\"]*)\"$") public void the_response_contains_indexID(String tree) throws Throwable { GeoGIG gig = localRepo.geogigCLI.getGeogig(); ObjectId canonicalTreeId = gig.command(ResolveTreeish.class).setTreeish("HEAD:" + tree).call().get(); Optional<IndexInfo> indexInfo = gig.getRepository().indexDatabase().getIndexInfo(tree,"pp"); Optional<ObjectId> indexedTree = gig.getRepository().indexDatabase().resolveIndexedTree(indexInfo.get(),canonicalTreeId); if (!indexedTree.isPresent()) { fail(); } String indexId = indexedTree.get().toString(); String actual = localRepo.stdOut.toString().replaceAll(LINE_SEPARATOR, "") .replaceAll("\\\\", "/"); assertTrue("'" + actual + "' does not contain ID '" + indexId.substring(0,8), actual.contains(indexId.toString().substring(0,8))); }
@Then("^the response should contain the index ID for tree \"([^\"]*)\"$") public void the_response_contains_indexID(String tree) throws Throwable { GeoGIG gig = localRepo.geogigCLI.getGeogig(); ObjectId canonicalTreeId = gig.command(ResolveTreeish.class).setTreeish("HEAD:" + tree).call().get(); Optional<IndexInfo> indexInfo = gig.getRepository().indexDatabase().getIndexInfo(tree,"pp"); Optional<ObjectId> indexedTree = gig.getRepository().indexDatabase().resolveIndexedTree(indexInfo.get(),canonicalTreeId); if (!indexedTree.isPresent()) { fail(); } String indexId = indexedTree.get().toString(); String actual = localRepo.stdOut.toString().replaceAll(LINE_SEPARATOR, "") .replaceAll("\\\\", "/"); assertTrue("'" + actual + "' does not contain ID '" + indexId.substring(0,8), actual.contains(indexId.toString().substring(0,8))); }
private Optional<ObjectId> resolveIndexTreeId(String repositoryName, String headRef, @Nullable String attributeName) { Repository repo = context.getRepo(repositoryName); final NodeRef typeTreeRef = IndexUtils.resolveTypeTreeRef(repo.context(), headRef); if (typeTreeRef == null) { return Optional.absent(); } String treeName = typeTreeRef.path(); List<IndexInfo> indexInfos = IndexUtils.resolveIndexInfo(repo.indexDatabase(), treeName, attributeName); if (indexInfos.isEmpty()) { return Optional.absent(); } Preconditions.checkState(indexInfos.size() == 1, "Multiple indexes found for given tree ref."); Optional<ObjectId> indexTreeId = repo.indexDatabase().resolveIndexedTree(indexInfos.get(0), typeTreeRef.getObjectId()); return indexTreeId; }
private Optional<ObjectId> resolveIndexTreeId(String headRef, @Nullable String attributeName) { Repository repo = localRepo.geogigCLI.getGeogig().getRepository(); final NodeRef typeTreeRef = IndexUtils.resolveTypeTreeRef(repo.context(), headRef); if (typeTreeRef == null) { return Optional.absent(); } String treeName = typeTreeRef.path(); List<IndexInfo> indexInfos = IndexUtils.resolveIndexInfo(repo.indexDatabase(), treeName, attributeName); if (indexInfos.isEmpty()) { return Optional.absent(); } Preconditions.checkState(indexInfos.size() == 1, "Multiple indexes found for given tree ref."); Optional<ObjectId> indexTreeId = repo.indexDatabase().resolveIndexedTree(indexInfos.get(0), typeTreeRef.getObjectId()); return indexTreeId; }
@Test public void testIndexTreeMappings() { String treeName = "tree"; String attributeName = "attribute"; IndexInfo index = indexDb.createIndexInfo(treeName, attributeName, IndexType.QUADTREE, null); ObjectId originalTreeId = RevObjectTestSupport.hashString("fake1"); ObjectId indexedTreeId = RevObjectTestSupport.hashString("fake2"); ObjectId notIndexedId = RevObjectTestSupport.hashString("fake3"); indexDb.addIndexedTree(index, originalTreeId, indexedTreeId); Optional<ObjectId> resolvedId = indexDb.resolveIndexedTree(index, originalTreeId); assertTrue(resolvedId.isPresent()); assertEquals(indexedTreeId, resolvedId.get()); resolvedId = indexDb.resolveIndexedTree(index, notIndexedId); assertFalse(resolvedId.isPresent()); }
private Optional<ObjectId> resolveIndexTreeId(String headRef, @Nullable String attributeName) { Repository repo = localRepo.geogigCLI.getGeogig().getRepository(); final NodeRef typeTreeRef = IndexUtils.resolveTypeTreeRef(repo.context(), headRef); if (typeTreeRef == null) { return Optional.absent(); } String treeName = typeTreeRef.path(); List<IndexInfo> indexInfos = IndexUtils.resolveIndexInfo(repo.indexDatabase(), treeName, attributeName); if (indexInfos.isEmpty()) { return Optional.absent(); } Preconditions.checkState(indexInfos.size() == 1, "Multiple indexes found for given tree ref."); Optional<ObjectId> indexTreeId = repo.indexDatabase().resolveIndexedTree(indexInfos.get(0), typeTreeRef.getObjectId()); return indexTreeId; }
private Optional<ObjectId> resolveIndexTreeId(String headRef, @Nullable String attributeName) { Repository repo = localRepo.geogigCLI.getGeogig().getRepository(); final NodeRef typeTreeRef = IndexUtils.resolveTypeTreeRef(repo.context(), headRef); if (typeTreeRef == null) { return Optional.absent(); } String treeName = typeTreeRef.path(); List<IndexInfo> indexInfos = IndexUtils.resolveIndexInfo(repo.indexDatabase(), treeName, attributeName); if (indexInfos.isEmpty()) { return Optional.absent(); } Preconditions.checkState(indexInfos.size() == 1, "Multiple indexes found for given tree ref."); Optional<ObjectId> indexTreeId = repo.indexDatabase().resolveIndexedTree(indexInfos.get(0), typeTreeRef.getObjectId()); return indexTreeId; }
@Then("^the response should contain the index ID for tree \"([^\"]*)\"$") public void the_response_contains_indexID(String tree) throws Throwable { GeoGIG gig = localRepo.geogigCLI.getGeogig(); ObjectId canonicalTreeId = gig.command(ResolveTreeish.class).setTreeish("HEAD:" + tree) .call().get(); Optional<IndexInfo> indexInfo = gig.getRepository().indexDatabase().getIndexInfo(tree, "pp"); Optional<ObjectId> indexedTree = gig.getRepository().indexDatabase() .resolveIndexedTree(indexInfo.get(), canonicalTreeId); if (!indexedTree.isPresent()) { fail(); } String indexId = indexedTree.get().toString(); String actual = localRepo.stdOut.toString().replaceAll(LINE_SEPARATOR, "") .replaceAll("\\\\", "/"); assertTrue("'" + actual + "' does not contain ID '" + indexId.substring(0, 8), actual.contains(indexId.toString().substring(0, 8))); }
@Test public void testIndexTreeMappings() { String treeName = "tree"; String attributeName = "attribute"; IndexInfo index = indexDb.createIndexInfo(treeName, attributeName, IndexType.QUADTREE, null); ObjectId originalTreeId = RevObjectTestSupport.hashString("fake1"); ObjectId indexedTreeId = RevObjectTestSupport.hashString("fake2"); ObjectId notIndexedId = RevObjectTestSupport.hashString("fake3"); indexDb.addIndexedTree(index, originalTreeId, indexedTreeId); Optional<ObjectId> resolvedId = indexDb.resolveIndexedTree(index, originalTreeId); assertTrue(resolvedId.isPresent()); assertEquals(indexedTreeId, resolvedId.get()); resolvedId = indexDb.resolveIndexedTree(index, notIndexedId); assertFalse(resolvedId.isPresent()); }
@Test public void testUpdatesMaterializedNodes() { indexInfo = createIndex("x", "y", "xystr"); RevTree newCanonicalTree = checkUpdatesNodes(); Optional<ObjectId> indexId = indexdb.resolveIndexedTree(indexInfo, newCanonicalTree.getId()); assertTrue(indexId.isPresent()); IndexTestSupport.verifyIndex(geogig, indexId.get(), newCanonicalTree.getId(), "x", "y", "xystr"); }
@Test public void testUpdatesNodes() { indexInfo = createIndex(); RevTree newCanonicalTree = checkUpdatesNodes(); Optional<ObjectId> indexId = indexdb.resolveIndexedTree(indexInfo, newCanonicalTree.getId()); assertTrue(indexId.isPresent()); IndexTestSupport.verifyIndex(geogig, indexId.get(), newCanonicalTree.getId()); }
@Test public void testUpdatesNodes() { indexInfo = createIndex(); RevTree newCanonicalTree = checkUpdatesNodes(); Optional<ObjectId> indexId = indexdb.resolveIndexedTree(indexInfo, newCanonicalTree.getId()); assertTrue(indexId.isPresent()); IndexTestSupport.verifyIndex(geogig, indexId.get(), newCanonicalTree.getId()); }
@Test public void testUpdatesMaterializedNodes() { indexInfo = createIndex("x", "y", "xystr"); RevTree newCanonicalTree = checkUpdatesNodes(); Optional<ObjectId> indexId = indexdb.resolveIndexedTree(indexInfo, newCanonicalTree.getId()); assertTrue(indexId.isPresent()); IndexTestSupport.verifyIndex(geogig, indexId.get(), newCanonicalTree.getId(), "x", "y", "xystr"); }
@Test public void testDropIndex() { createIndex(); Optional<IndexInfo> indexInfo = indexdb.getIndexInfo(worldPointsLayer.getName(), "geom"); assertTrue(indexInfo.isPresent()); IndexInfo oldIndexInfo = indexInfo.get(); Optional<ObjectId> indexedTreeId = indexdb.resolveIndexedTree(oldIndexInfo, worldPointsTree.getId()); assertTrue(indexedTreeId.isPresent()); IndexInfo droppedIndex = geogig.command(DropIndexOp.class)// .setTreeRefSpec(worldPointsLayer.getName())// .call(); assertEquals(oldIndexInfo, droppedIndex); indexInfo = indexdb.getIndexInfo(worldPointsLayer.getName(), "geom"); assertFalse(indexInfo.isPresent()); indexedTreeId = indexdb.resolveIndexedTree(droppedIndex, worldPointsTree.getId()); assertFalse(indexedTreeId.isPresent()); }
@Test public void testDropIndex() { createIndex(); Optional<IndexInfo> indexInfo = indexdb.getIndexInfo(worldPointsLayer.getName(), "geom"); assertTrue(indexInfo.isPresent()); IndexInfo oldIndexInfo = indexInfo.get(); Optional<ObjectId> indexedTreeId = indexdb.resolveIndexedTree(oldIndexInfo, worldPointsTree.getId()); assertTrue(indexedTreeId.isPresent()); IndexInfo droppedIndex = geogig.command(DropIndexOp.class)// .setTreeRefSpec(worldPointsLayer.getName())// .call(); assertEquals(oldIndexInfo, droppedIndex); indexInfo = indexdb.getIndexInfo(worldPointsLayer.getName(), "geom"); assertFalse(indexInfo.isPresent()); indexedTreeId = indexdb.resolveIndexedTree(droppedIndex, worldPointsTree.getId()); assertFalse(indexedTreeId.isPresent()); }
private RevTree updateIndex(IndexInfo indexInfo, ObjectId featureTypeId, final RevTree oldCanonicalTree, final RevTree newCanonicalTree) { Repository repo = getRepository(); BuildIndexOp command = repo.command(BuildIndexOp.class); command.setIndex(indexInfo); command.setOldCanonicalTree(oldCanonicalTree); command.setNewCanonicalTree(newCanonicalTree); command.setRevFeatureTypeId(featureTypeId); RevTree indexTree = command.call(); assertEquals(newCanonicalTree.size(), indexTree.size()); Optional<ObjectId> resolveIndexedTree = indexdb.resolveIndexedTree(indexInfo, newCanonicalTree.getId()); assertTrue(resolveIndexedTree.isPresent()); assertEquals(indexTree.getId(), resolveIndexedTree.get()); return indexTree; } }
private RevTree updateIndex(IndexInfo indexInfo, ObjectId featureTypeId, final RevTree oldCanonicalTree, final RevTree newCanonicalTree) { Repository repo = getRepository(); BuildIndexOp command = repo.command(BuildIndexOp.class); command.setIndex(indexInfo); command.setOldCanonicalTree(oldCanonicalTree); command.setNewCanonicalTree(newCanonicalTree); command.setRevFeatureTypeId(featureTypeId); RevTree indexTree = command.call(); assertEquals(newCanonicalTree.size(), indexTree.size()); Optional<ObjectId> resolveIndexedTree = indexdb.resolveIndexedTree(indexInfo, newCanonicalTree.getId()); assertTrue(resolveIndexedTree.isPresent()); assertEquals(indexTree.getId(), resolveIndexedTree.get()); return indexTree; } }
@Test public void testUpdateIndexesHook() { IndexInfo indexInfo = createIndex(true, "x"); String fid = IndexTestSupport.getPointFid(5, 5); geogig.command(RemoveOp.class) .addPathToRemove(NodeRef.appendChild(worldPointsLayer.getName(), fid)).call(); add(); RevCommit commit = commit("deleted 5, 5"); NodeRef featureTree = IndexUtils.resolveTypeTreeRef(geogig.getContext(), commit.getId() + ":" + worldPointsLayer.getName()); // New index tree should be automatically created for pre-exising index. Optional<ObjectId> commitIndex = indexdb.resolveIndexedTree(indexInfo, featureTree.getObjectId()); assertTrue(commitIndex.isPresent()); IndexTestSupport.verifyIndex(geogig, commitIndex.get(), featureTree.getObjectId(), "x"); }
@Test public void testUpdateIndexesHook() { IndexInfo indexInfo = createIndex(true, "x"); String fid = IndexTestSupport.getPointFid(5, 5); geogig.command(RemoveOp.class) .addPathToRemove(NodeRef.appendChild(worldPointsLayer.getName(), fid)).call(); add(); RevCommit commit = commit("deleted 5, 5"); NodeRef featureTree = IndexUtils.resolveTypeTreeRef(geogig.getContext(), commit.getId() + ":" + worldPointsLayer.getName()); // New index tree should be automatically created for pre-exising index. Optional<ObjectId> commitIndex = indexdb.resolveIndexedTree(indexInfo, featureTree.getObjectId()); assertTrue(commitIndex.isPresent()); IndexTestSupport.verifyIndex(geogig, commitIndex.get(), featureTree.getObjectId(), "x"); }