/** * Resolves a given tree and attribute name into one or more {@link IndexInfo} objects * * @param indexdb the index database * @param treeName the name of the feature tree * @param attributeName the name of the indexed attribute. If {@code null}, this function will * return the index infos associated with the given tree name * @return the resolved {@link IndexInfo} objects */ public static List<IndexInfo> resolveIndexInfo(IndexDatabase indexdb, String treeName, @Nullable String attributeName) { if (attributeName == null) { return indexdb.getIndexInfos(treeName); } else { Optional<IndexInfo> indexInfoOpt = indexdb.getIndexInfo(treeName, attributeName); if (indexInfoOpt.isPresent()) { return Lists.newArrayList(indexInfoOpt.get()); } } return Lists.newArrayList(); }
/** * Resolves a given tree and attribute name into one or more {@link IndexInfo} objects * * @param indexdb the index database * @param treeName the name of the feature tree * @param attributeName the name of the indexed attribute. If {@code null}, this function will * return the index infos associated with the given tree name * @return the resolved {@link IndexInfo} objects */ public static List<IndexInfo> resolveIndexInfo(IndexDatabase indexdb, String treeName, @Nullable String attributeName) { if (attributeName == null) { return indexdb.getIndexInfos(treeName); } else { Optional<IndexInfo> indexInfoOpt = indexdb.getIndexInfo(treeName, attributeName); if (indexInfoOpt.isPresent()) { return Lists.newArrayList(indexInfoOpt.get()); } } return Lists.newArrayList(); }
private List<IndexInfo> loadIndexes(RepositoryInfo repo) { String repoId = repo.getId(); if (null == repoId) { return Lists.newArrayList(); } Repository geogig; try { geogig = RepositoryManager.get().getRepository(repoId); return geogig.indexDatabase().getIndexInfos(); } catch (Exception e) { LOGGER.warn("Failed to load indexes for repository", e); } return Lists.newArrayList(); }
public void run() { List<ForkJoinTask<?>> tasks = new ArrayList<>(); List<IndexInfo> indexInfos = index == null ? srcIndex.getIndexInfos() : Collections.singletonList(index); for (IndexInfo index : indexInfos) { ForkJoinTask<Void> task = FORK_JOIN_POOL .submit(new IndexCopyTask(index, srcIndex, targetIndex)); tasks.add(task); } RuntimeException err = null; for (ForkJoinTask<?> t : tasks) { try { if (err == null) { t.join(); } else { t.cancel(true); } } catch (RuntimeException e) { err = e; } } if (err != null) { throw err; } }
public static Map<String, IndexInfo> getIndexes(Repository repo, String featureTreePath) { List<IndexInfo> indexInfos; indexInfos = repo.indexDatabase().getIndexInfos(featureTreePath); Map<String, IndexInfo> typeIndexes = indexInfos.stream() .collect(Collectors.toMap(i -> i.getTreeName(), i -> i)); return typeIndexes; }
@Test public void testGetIndexesNone() { List<IndexInfo> indexes = indexDb.getIndexInfos(); assertTrue(indexes.isEmpty()); }
@Test public void testGetIndexesNoneTreeName() { String treeName = "tree"; List<IndexInfo> indexes = indexDb.getIndexInfos(treeName); assertTrue(indexes.isEmpty()); indexDb.createIndexInfo("otherTree", "someAttribute", IndexType.QUADTREE, null); indexes = indexDb.getIndexInfos(treeName); assertTrue(indexes.isEmpty()); }
@Test public void testGetIndexesNone() { List<IndexInfo> indexes = indexDb.getIndexInfos(); assertTrue(indexes.isEmpty()); }
final List<IndexInfo> indexInfos; if (treeName != null) { indexInfos = geogig.indexDatabase().getIndexInfos(treeName); if (indexInfos.size() == 0) { NodeRef treeRef = IndexUtils.resolveTypeTreeRef(geogig, treeName); indexInfos = geogig.indexDatabase().getIndexInfos();
@Test public void testGetIndexesNoneTreeName() { String treeName = "tree"; List<IndexInfo> indexes = indexDb.getIndexInfos(treeName); assertTrue(indexes.isEmpty()); indexDb.createIndexInfo("otherTree", "someAttribute", IndexType.QUADTREE, null); indexes = indexDb.getIndexInfos(treeName); assertTrue(indexes.isEmpty()); }
@Test public void testGetIndexesTreeName() { Map<String, Object> metadata = new HashMap<String, Object>(); metadata.put("meta1", 5L); metadata.put("meta2", "someValue"); String treeName = "tree"; String attributeName = "attribute"; IndexInfo index1 = indexDb.createIndexInfo(treeName, attributeName, IndexType.QUADTREE, metadata); String attributeName2 = "attribute2"; IndexInfo index2 = indexDb.createIndexInfo(treeName, attributeName2, IndexType.QUADTREE, null); IndexInfo index3 = indexDb.createIndexInfo("otherTree", "someAttribute", IndexType.QUADTREE, null); List<IndexInfo> indexes = indexDb.getIndexInfos(treeName); assertEquals(2, indexes.size()); assertTrue(indexes.contains(index1)); assertTrue(indexes.contains(index2)); assertFalse(indexes.contains(index3)); }
@Test public void testGetIndexes() { Map<String, Object> metadata = new HashMap<String, Object>(); metadata.put("meta1", 5L); metadata.put("meta2", "someValue"); String treeName = "tree"; String attributeName = "attribute"; IndexInfo index1 = indexDb.createIndexInfo(treeName, attributeName, IndexType.QUADTREE, metadata); String attributeName2 = "attribute2"; IndexInfo index2 = indexDb.createIndexInfo(treeName, attributeName2, IndexType.QUADTREE, null); IndexInfo index3 = indexDb.createIndexInfo("otherTree", "someAttribute", IndexType.QUADTREE, null); List<IndexInfo> indexes = indexDb.getIndexInfos(); assertEquals(3, indexes.size()); assertTrue(indexes.contains(index1)); assertTrue(indexes.contains(index2)); assertTrue(indexes.contains(index3)); }
@Test public void testGetIndexesTreeName() { Map<String, Object> metadata = new HashMap<String, Object>(); metadata.put("meta1", 5L); metadata.put("meta2", "someValue"); String treeName = "tree"; String attributeName = "attribute"; IndexInfo index1 = indexDb.createIndexInfo(treeName, attributeName, IndexType.QUADTREE, metadata); String attributeName2 = "attribute2"; IndexInfo index2 = indexDb.createIndexInfo(treeName, attributeName2, IndexType.QUADTREE, null); IndexInfo index3 = indexDb.createIndexInfo("otherTree", "someAttribute", IndexType.QUADTREE, null); List<IndexInfo> indexes = indexDb.getIndexInfos(treeName); assertEquals(2, indexes.size()); assertTrue(indexes.contains(index1)); assertTrue(indexes.contains(index2)); assertFalse(indexes.contains(index3)); }
@Test public void testGetIndexes() { Map<String, Object> metadata = new HashMap<String, Object>(); metadata.put("meta1", 5L); metadata.put("meta2", "someValue"); String treeName = "tree"; String attributeName = "attribute"; IndexInfo index1 = indexDb.createIndexInfo(treeName, attributeName, IndexType.QUADTREE, metadata); String attributeName2 = "attribute2"; IndexInfo index2 = indexDb.createIndexInfo(treeName, attributeName2, IndexType.QUADTREE, null); IndexInfo index3 = indexDb.createIndexInfo("otherTree", "someAttribute", IndexType.QUADTREE, null); List<IndexInfo> indexes = indexDb.getIndexInfos(); assertEquals(3, indexes.size()); assertTrue(indexes.contains(index1)); assertTrue(indexes.contains(index2)); assertTrue(indexes.contains(index3)); }
private Optional<IndexInfo> createOrUpdateIndexAndVerify(String layerName, String... extraAttributes) throws Exception { Optional<ObjectId> createOrUpdateIndex = dataStore.createOrUpdateIndex(layerName, extraAttributes); assertTrue("IndexInfo ObjectId should be present", createOrUpdateIndex.isPresent()); ObjectId id = createOrUpdateIndex.get(); Context resolveContext = dataStore.resolveContext(Transaction.AUTO_COMMIT); List<IndexInfo> indexInfos = resolveContext.indexDatabase().getIndexInfos(); assertNotNull("No IndexInfo objects found", indexInfos); assertEquals("Expected exactly 1 IndexInfo", 1, indexInfos.size()); IndexInfo index = indexInfos.get(0); assertEquals("Unexpected ObjectID for IndexInfo", id, index.getId()); // verify the index contains all the extra Attributes Set<String> materializedAttributeNames = IndexInfo.getMaterializedAttributeNames(index); for (String attribute : extraAttributes) { assertTrue("Index should have contained " + attribute, materializedAttributeNames.contains(attribute)); } return Optional.of(index); }
private Optional<IndexInfo> createOrUpdateIndexAndVerify(String layerName, String... extraAttributes) throws Exception { Optional<ObjectId> createOrUpdateIndex = dataStore.createOrUpdateIndex(layerName, extraAttributes); assertTrue("IndexInfo ObjectId should be present", createOrUpdateIndex.isPresent()); ObjectId id = createOrUpdateIndex.get(); Context resolveContext = dataStore.resolveContext(Transaction.AUTO_COMMIT); List<IndexInfo> indexInfos = resolveContext.indexDatabase().getIndexInfos(); assertNotNull("No IndexInfo objects found", indexInfos); assertEquals("Expected exactly 1 IndexInfo", 1, indexInfos.size()); IndexInfo index = indexInfos.get(0); assertEquals("Unexpected ObjectID for IndexInfo", id, index.getId()); // verify the index contains all the extra Attributes Set<String> materializedAttributeNames = IndexInfo.getMaterializedAttributeNames(index); for (String attribute : extraAttributes) { assertTrue("Index should have contained " + attribute, materializedAttributeNames.contains(attribute)); } return Optional.of(index); }
@When("^I create a spatial index on \"([^\"]*)\"$") public void i_create_a_spatial_index_on(String storeName) throws Throwable { GeoGigDataStore store = datastoreMap.get(storeName); Optional<ObjectId> createOrUpdateIndex = store.createOrUpdateIndex(currentLayer.getTypeName()); assertTrue("Expected an Index to be created", createOrUpdateIndex.isPresent()); IndexDatabase indexDatabase = store.resolveContext(Transaction.AUTO_COMMIT).indexDatabase(); List<IndexInfo> resolveIndexInfo = indexDatabase.getIndexInfos(currentLayer.getTypeName()); assertEquals("Expected exactly 1 IndexInfo", 1, resolveIndexInfo.size()); IndexInfo info = resolveIndexInfo.get(0); assertEquals("Unexpected Index type", IndexType.QUADTREE, info.getIndexType()); assertEquals("Unexpected Index spatial attribute", "the_geom", info.getAttributeName()); assertEquals("Unexpected Index Path name", currentLayer.getTypeName(), info.getTreeName()); }
@When("^I create a spatial index on \"([^\"]*)\" with extra attributes \"([^\"]*)\"$") public void i_create_a_spatial_index_with_extra_Attributes(String storeName, String attributes) throws Throwable { assertNotNull(attributes); assertFalse(attributes.isEmpty()); final String[] attributeArray = attributes.split(" "); final List<String> attributeList = Arrays.asList(attributeArray); GeoGigDataStore store = datastoreMap.get(storeName); Optional<ObjectId> createOrUpdateIndex = store.createOrUpdateIndex(currentLayer.getTypeName(), attributeArray); assertTrue("Expected an Index to be created", createOrUpdateIndex.isPresent()); IndexDatabase indexDatabase = store.resolveContext(Transaction.AUTO_COMMIT).indexDatabase(); List<IndexInfo> resolveIndexInfo = indexDatabase.getIndexInfos(currentLayer.getTypeName()); assertEquals("Expected exactly 1 IndexInfo", 1, resolveIndexInfo.size()); IndexInfo info = resolveIndexInfo.get(0); assertEquals("Unexpected Index type", IndexType.QUADTREE, info.getIndexType()); assertEquals("Unexpected Index spatial attribute", "the_geom", info.getAttributeName()); assertTrue("Extra Attribute list missing expected attributes", attributeList.containsAll( IndexInfo.getMaterializedAttributeNames(info))); assertEquals("Unexpected Index Path name", currentLayer.getTypeName(), info.getTreeName()); }
@When("^I create a spatial index on \"([^\"]*)\"$") public void i_create_a_spatial_index_on(String storeName) throws Throwable { GeoGigDataStore store = datastoreMap.get(storeName); Optional<ObjectId> createOrUpdateIndex = store.createOrUpdateIndex(currentLayer.getTypeName()); assertTrue("Expected an Index to be created", createOrUpdateIndex.isPresent()); IndexDatabase indexDatabase = store.resolveContext(Transaction.AUTO_COMMIT).indexDatabase(); List<IndexInfo> resolveIndexInfo = indexDatabase.getIndexInfos(currentLayer.getTypeName()); assertEquals("Expected exactly 1 IndexInfo", 1, resolveIndexInfo.size()); IndexInfo info = resolveIndexInfo.get(0); assertEquals("Unexpected Index type", IndexType.QUADTREE, info.getIndexType()); assertEquals("Unexpected Index spatial attribute", "the_geom", info.getAttributeName()); assertEquals("Unexpected Index Path name", currentLayer.getTypeName(), info.getTreeName()); }
@When("^I create a spatial index on \"([^\"]*)\" with extra attributes \"([^\"]*)\"$") public void i_create_a_spatial_index_with_extra_Attributes(String storeName, String attributes) throws Throwable { assertNotNull(attributes); assertFalse(attributes.isEmpty()); final String[] attributeArray = attributes.split(" "); final List<String> attributeList = Arrays.asList(attributeArray); GeoGigDataStore store = datastoreMap.get(storeName); Optional<ObjectId> createOrUpdateIndex = store.createOrUpdateIndex(currentLayer.getTypeName(), attributeArray); assertTrue("Expected an Index to be created", createOrUpdateIndex.isPresent()); IndexDatabase indexDatabase = store.resolveContext(Transaction.AUTO_COMMIT).indexDatabase(); List<IndexInfo> resolveIndexInfo = indexDatabase.getIndexInfos(currentLayer.getTypeName()); assertEquals("Expected exactly 1 IndexInfo", 1, resolveIndexInfo.size()); IndexInfo info = resolveIndexInfo.get(0); assertEquals("Unexpected Index type", IndexType.QUADTREE, info.getIndexType()); assertEquals("Unexpected Index spatial attribute", "the_geom", info.getAttributeName()); assertTrue("Extra Attribute list missing expected attributes", attributeList.containsAll( IndexInfo.getMaterializedAttributeNames(info))); assertEquals("Unexpected Index Path name", currentLayer.getTypeName(), info.getTreeName()); }