/* * ToroDB * Copyright © 2014 8Kdata Technology (www.8kdata.com) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.torodb.metainfo.cache.mvcc; import static org.mockito.Mockito.spy; import com.torodb.core.TableRefFactory; import com.torodb.core.impl.TableRefFactoryImpl; import com.torodb.core.transaction.metainf.FieldIndexOrdering; import com.torodb.core.transaction.metainf.FieldType; import com.torodb.core.transaction.metainf.ImmutableMetaCollection; import com.torodb.core.transaction.metainf.ImmutableMetaDatabase; import com.torodb.core.transaction.metainf.ImmutableMetaDocPart; import com.torodb.core.transaction.metainf.ImmutableMetaDocPartIndexColumn; import com.torodb.core.transaction.metainf.ImmutableMetaField; import com.torodb.core.transaction.metainf.ImmutableMetaIdentifiedDocPartIndex; import com.torodb.core.transaction.metainf.ImmutableMetaIndex; import com.torodb.core.transaction.metainf.ImmutableMetaIndexField; import com.torodb.core.transaction.metainf.ImmutableMetaScalar; import com.torodb.core.transaction.metainf.ImmutableMetaSnapshot; import com.torodb.core.transaction.metainf.MutableMetaSnapshot; import com.torodb.core.transaction.metainf.UnmergeableException; import com.torodb.core.transaction.metainf.WrapperMutableMetaSnapshot; import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.mockito.MockSettings; import org.mockito.internal.creation.MockSettingsImpl; /** * * Index merging: * * Definitions: - List of fields match: same size and at equal position in the list: none field * table ref that differ and none field names that differ and none field ordering that differ and no * index options that differ. - Sublist of fields for a table ref match: all fields have same table * ref and same size and at equal position in the sublist: none field names that differ and none * field ordering that differ. - Index match: indexes have equal names or, they have no index * options that differ and their lists of fields match - "old new", "old renmoved", "new", "removed" * and "old" adjectives: - "new" is used to refer to an index or field added with last change. - * "removed" is used to refer to an index removed with last change - "old new" and "old removed" are * used to refer to, respectively, the added or removed index of the change previous to the last * one. - "old" is used to refer to an index or field that was present before the last one - Field * complete an index match: a field alone or together with other fields in some combination is part * of a doc part index that match an index. * * Operations: * * 1. Create index 2. Remove index 3. Create field * * Merge combinations or operations: * * 1&1: Create an index in parallel but after to another 1&1.OK1: new index and old new index does * not match 1&1.KO1: new index and old new index match (Can not create same index twice) * * 1&2: Create index in parallel but after to remove another 1&2.OK1: no new index and old removed * index sublist of fields match for any table ref 1&2.KO1: any new index and old removed index * sublist of fields match for any table ref (Missing doc part index when a doc part index needed by * new index has been removed) * * 1&3: Create an index in parallel but after to create a field 1&3.OK1: old new field does not * complete a new index match 1&3.OK2: old new field hit an index match for new index and for * another old index 1&3.KO1: old new field hit an index match (Missing doc part index needed by a * index) * * 2&1: Remove an index in parallel but after to create an index 2&1.OK1: removed index and old new * index does not match 2&1.OK2: removed index is associated with old doc part index. Removed index * and old new index does not match 2&1.KO1: removed index and old new index does match * * 2&2: Remove an index in parallel but after to remove an index 2&2.OK1: removed index and old * removed index does not have the same names 2&2.OK2: removed index is associated with old doc part * index. Removed index and old removed index does not have the same names 2&2.OK3: removed index * and old removed index have the same names * * 2&3: Remove an index in parallel but after to create a field 2&3.OK1: old new field does not * complete an index match for removed index 2&3.OK2: removed index is associated with old doc part * index. old new field does not complete an index match for removed index 2&3.OK3: old new field * hit an index match for removed index and for another old index 2&3.KO1: old new field hit an * index match (Orphan doc part index that no index use) * * 3&1: Create field in parallel but after to create an index 3&1.OK1: new field does not complete * an index match with old new index 3&1.OK2: new field complete an index match with old new index * but also complete an index match with another old index 3&1.KO1: new field complete an index * match with old new index (Missing doc part index needed by an index) * * 3&2: Create field in parallel but after to remove an index 3&2.OK1: new field does not complete * an index match with old removed index 3&2.OK2: new field complete an index match with old removed * index but also complete an index match with another old index 3&2.KO1: new field complete an * index match with old removed index (Orphan doc part index needed by an index) * * 3&3: Create field in parallel but after to create a field 3&3.OK1: new field and old new field * does not complete an index match with an old index 3&3.KO1: new field and old new field complete * an index match with an old index * * Each combination should be repeated with: 1 index of 1 field 2 index of 2 fields on same table * ref 3 index of 4 fields with each 2 fields on a different table ref - In this combination there * could be two variant when, respectively, one or two index sublists of fields for each table ref * participate actively in the merge (this seem a bit paranoid test but we added it just in case). */ @SuppressWarnings({"unused", "rawtypes"}) public class SnapshotMergerForIndexTest { private static final TableRefFactory tableRefFactory = new TableRefFactoryImpl(); private static ImmutableMetaSnapshot currentSnapshot; private ImmutableMetaSnapshot.Builder snapshotBuilder; private static final MockSettings SETTINGS = new MockSettingsImpl().defaultAnswer((t) -> { throw new AssertionError("Method " + t.getMethod() + " was not expected to be called"); }); public SnapshotMergerForIndexTest() { } @BeforeClass public static void setUpClass() throws Exception { currentSnapshot = new ImmutableMetaSnapshot.Builder() .put(new ImmutableMetaDatabase.Builder("dbName1", "dbId1") .put(new ImmutableMetaCollection.Builder("colName1", "colId1") .put(new ImmutableMetaDocPart.Builder(tableRefFactory.createRoot(), "docPartId1") .put(new ImmutableMetaField("fieldName1", "fieldId1", FieldType.INTEGER)) .put(new ImmutableMetaScalar("scalarId1", FieldType.INTEGER)) .put(new ImmutableMetaIdentifiedDocPartIndex.Builder("idxId1", false) .add(new ImmutableMetaDocPartIndexColumn(0, "fieldId1", FieldIndexOrdering.ASC)) ) ) .put(new ImmutableMetaIndex.Builder("idxName1", false) .add(new ImmutableMetaIndexField(0, tableRefFactory.createRoot(), "fieldName1", FieldIndexOrdering.ASC)) ) .build() ).build() ).build(); } @Before public void setup() { snapshotBuilder = spy(new ImmutableMetaSnapshot.Builder(currentSnapshot)); } /** * Test a new index Case [1&1.OK1|1&2.OK1].1 * * @throws Exception */ @Test public void testNewIndex() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test a new index with multiple fields Case [1&1.OK1|1&2.OK1].2 * * @throws Exception */ @Test public void testNewIndexMultiField() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName4", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName5", FieldIndexOrdering.ASC); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test a new index with multiple fields in multiple doc parts Case [1&1.OK1|1&2.OK1].3 * * @throws Exception */ @Test public void testNewIndexMultiFieldInMultiDocParts() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName4", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName5", FieldIndexOrdering.ASC); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test an exception is thrown when a new index has same name as an old index Case 1&1.KO1.1 * * @throws Exception */ @Test public void testNewIndexWithSameNameAsOldIndexConflict() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", true) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.DESC); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); try { new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); Assert.fail("A " + UnmergeableException.class.getSimpleName() + " was expected to be thrown"); } catch (UnmergeableException ex) { } } /** * Test an exception is thrown when a new index match an old index Case 1&1.KO1.1a * * @throws Exception */ @Test public void testNewIndexWhichMatchOldIndexConflict() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName3", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); try { new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); Assert.fail("A " + UnmergeableException.class.getSimpleName() + " was expected to be thrown"); } catch (UnmergeableException ex) { } } /** * Test an exception is thrown when a new index with multiple fields match an old index Case * 1&1.KO1.2 * * @throws Exception */ @Test public void testNewIndexMultiFielWhichdMatchOldIndexConflict() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName5", FieldIndexOrdering.ASC); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName3", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName3") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName3") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName4", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName3") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName5", FieldIndexOrdering.ASC); try { new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); Assert.fail("A " + UnmergeableException.class.getSimpleName() + " was expected to be thrown"); } catch (UnmergeableException ex) { } } /** * Test an exception is thrown when a new index with multiple fields in multiple doc parts match * an old index Case 1&1.KO1.3 * * @throws Exception */ @Test public void testNewIndexMultiFieldInMultiDocPartsWhichMatchOldIndexConflict() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName5", FieldIndexOrdering.ASC); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName4", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName5", FieldIndexOrdering.ASC); try { new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); Assert.fail("A " + UnmergeableException.class.getSimpleName() + " was expected to be thrown"); } catch (UnmergeableException ex) { } } /** * Test an exception is thrown when a new index has same doc part index as an old remove index * Case 1&2.KO1.1 * * @throws Exception */ @Test public void testNewIndexWithOldIndexWithSameDocPartIndexRemovedConflict() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", true) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.DESC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName3", FieldIndexOrdering.DESC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName2"); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .removeMetaDocPartIndexByIdentifier("idxId2"); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName3", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); try { new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); Assert.fail("A " + UnmergeableException.class.getSimpleName() + " was expected to be thrown"); } catch (UnmergeableException ex) { } } /** * Test an exception is thrown when a new index with multiple fields has same doc part index as an * old remove index Case 1&2.KO1.2 * * @throws Exception */ @Test public void testNewIndexWithMultiFieldsWithOldIndexWithSameDocPartIndexRemovedConflict() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", true) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.DESC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.DESC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName4", FieldIndexOrdering.DESC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName2"); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .removeMetaDocPartIndexByIdentifier("idxId2"); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName3", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName3") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); try { new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); Assert.fail("A " + UnmergeableException.class.getSimpleName() + " was expected to be thrown"); } catch (UnmergeableException ex) { } } /** * Test an exception is thrown when a new index with multiple fields in multiple doc parts has * same doc part index as an old remove index Case 1&2.KO1.3 * * @throws Exception */ @Test public void testNewIndexWithMultiFieldsInMultiDocPartsWithOldIndexWithSameDocPartIndexRemovedConflict() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", true) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.DESC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.DESC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName3"), "fieldName6", FieldIndexOrdering.DESC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName2"); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .removeMetaDocPartIndexByIdentifier("idxId2"); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName3", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName3") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName4", FieldIndexOrdering.DESC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName5", FieldIndexOrdering.DESC); try { new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); Assert.fail("A " + UnmergeableException.class.getSimpleName() + " was expected to be thrown"); } catch (UnmergeableException ex) { } } /** * Test a new index and new doc part index Case 1&3.OK1.1 * * @throws Exception */ @Test public void testNewIndexAndNewDocPartIndex() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test a new index with multiple fields and new doc part index Case 1&3.OK1.2 * * @throws Exception */ @Test public void testNewIndexMultiFieldsAndNewDocPartIndex() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName4", "fieldId4", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName5", "fieldId5", FieldType.STRING); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName4", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName5", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId4", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId5", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test a new index with multiple fields in multiple doc parts and new doc part index Case * 1&3.OK1.3 * * @throws Exception */ @Test public void testNewIndexMultiFieldsInMultiDocPartsAndNewDocPartIndex() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName4", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName5", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test a new index with multiple fields in multiple doc parts and new doc part indexes Case * 1&3.OK1.3b * * @throws Exception */ @Test public void testNewIndexMultiFieldsInMultiDocPartsAndNewDocPartIndexes() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaDocPart(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "docPartId2"); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .addMetaField("fieldName4", "fieldId4", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .addMetaField("fieldName5", "fieldId5", FieldType.STRING); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName4", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName5", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId4", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId5", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId3"); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test a new index and old doc part index Case 1&3.OK2.1 * * @throws Exception */ @Test public void testNewIndexWithOldDocPartIndex() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName3"), "fieldName6", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName3", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test a new index with multiple fields and old doc part index Case 1&3.OK2.2 * * @throws Exception */ @Test public void testNewIndexMultiFieldsAndWithOldDocPartIndex() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName4", "fieldId4", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName5", "fieldId5", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName3", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName3") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName3") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName3") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName5", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName3") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName3"), "fieldName6", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId5", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName4", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName5", FieldIndexOrdering.ASC); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test a new index with multiple fields and old doc part index and a new one Case 1&3.OK2.3 * * @throws Exception */ @Test public void testNewIndexMultiFieldsInMultiDocPartsWithOldDocPartIndexAndNewDocPartIndex() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaDocPart(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "docPartId2"); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .addMetaField("fieldName4", "fieldId4", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .addMetaField("fieldName5", "fieldId5", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName3", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName3") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName3") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName3") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName5", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName3") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName3"), "fieldName6", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName4", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName5", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId4", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId5", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId3"); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test a new index with multiple fields and old doc part indexes Case 1&3.OK2.3b * * @throws Exception */ @Test public void testNewIndexMultiFieldsInMultiDocPartsWithOldDocPartIndexes() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaDocPart(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "docPartId2"); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .addMetaField("fieldName4", "fieldId4", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .addMetaField("fieldName5", "fieldId5", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId5", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId3"); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName4", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName5", FieldIndexOrdering.ASC); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test a new field and new doc part index Case 3&1.OK1.1 * * @throws Exception */ @Test public void testNewFieldAndNewDocPartIndex() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test a new fields and new doc part index with multiple columns Case 3&1.OK1.2 * * @throws Exception */ @Test public void testNewFieldsAndNewDocPartIndexMultiColumns() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName5", FieldIndexOrdering.ASC); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName4", "fieldId4", FieldType.STRING); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName5", "fieldId5", FieldType.STRING); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId4", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId5", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test a new fields and new doc part index with multiple columns in multiple doc parts Case * 3&1.OK1.3 * * @throws Exception */ @Test public void testNewFieldsAndNewDocPartIndexMultiColumnsInMultiDocParts() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaDocPart(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "docPartId2"); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName5", FieldIndexOrdering.ASC); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .addMetaField("fieldName4", "fieldId4", FieldType.STRING); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .addMetaField("fieldName5", "fieldId5", FieldType.STRING); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId4", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId5", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId3"); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test a new field and new doc part index with old removed index Case 3&2.OK1.1 * * @throws Exception */ @Test public void testNewFieldAndNewDocPartIndexWithOldRemovedIndex() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName3", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName3"); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test a new fields and new doc part index with multiple columns with old removed index Case * 3&2.OK1.2 * * @throws Exception */ @Test public void testNewFieldsAndNewDocPartIndexMultiColumnsWithOldRemovedIndex() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName3", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName3") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName5", FieldIndexOrdering.ASC); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName3"); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test a new fields and new doc part index with multiple columns in multiple doc parts with old * removed index Case 3&2.OK1.3 * * @throws Exception */ @Test public void testNewFieldsAndNewDocPartIndexMultiColumnsInMultiDocPartsWithOldRemovedIndex() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaDocPart(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "docPartId2"); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName5", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName3", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName6", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName3") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName7", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName3") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName8", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName3") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName9", FieldIndexOrdering.ASC); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName2"); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .addMetaField("fieldName4", "fieldId4", FieldType.STRING); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .addMetaField("fieldName5", "fieldId5", FieldType.STRING); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId4", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId5", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId3"); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test remove an index Case [2&1.OK1|2&2.OK1|2&3.OK1].1 * * @throws Exception */ @Test public void testRemoveIndex() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName2"); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test remove an index with multiple fields Case [2&1.OK1|2&2.OK1|2&3.OK1].2 * * @throws Exception */ @Test public void testRemoveIndexWithMuliFields() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName5", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName4", "fieldId4", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName5", "fieldId5", FieldType.STRING); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName2"); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test remove an index with multiple fields in multiple doc parts Case * [2&1.OK1|2&2.OK1|2&3.OK1].3 * * @throws Exception */ @Test public void testRemoveIndexWithMuliFieldsInMultiDocParts() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaDocPart(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "docPartId2"); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName5", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .addMetaField("fieldName4", "fieldId4", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .addMetaField("fieldName5", "fieldId5", FieldType.STRING); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName2"); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test remove an index and remove a doc part index Case [2&1.OK2|2&2.OK2|2&3.OK2].1 * * @throws Exception */ @Test public void testRemoveIndexAndRemoveDocPartIndex() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName1"); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .removeMetaDocPartIndexByIdentifier("idxId1"); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test remove an index with multiple fields and remove a doc part index Case * [2&1.OK2|2&2.OK2|2&3.OK2].2 * * @throws Exception */ @Test public void testRemoveIndexWithMultiFieldsAndRemoveDocPartIndex() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName5", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName4", "fieldId4", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName5", "fieldId5", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId5", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName2"); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .removeMetaDocPartIndexByIdentifier("idxId2"); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test remove an index with multiple fields in multiple doc parts and remove multiple doc part * indexes Case [2&1.OK2|2&2.OK2|2&3.OK2].3 * * @throws Exception */ @Test public void testRemoveIndexWithMultiFieldsInMultiDocPartsAndRemoveDocPartIndexes() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaDocPart(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "docPartId2"); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName5", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .addMetaField("fieldName4", "fieldId4", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .addMetaField("fieldName5", "fieldId5", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId5", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId3"); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName2"); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .removeMetaDocPartIndexByIdentifier("idxId2"); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .removeMetaDocPartIndexByIdentifier("idxId3"); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test remove an index that relates to a doc part index that also relate to another index Case * 2&1.OK1.1 * * @throws Exception */ @Test public void testRemoveIndexWithDocPartIndexIncludedByOtherIndex() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName1", FieldIndexOrdering.ASC); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName2"); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test remove an index with multiple fields that relates to a doc part index that also relate to * another index Case 2&1.OK1.2 * * @throws Exception */ @Test public void testRemoveIndexWithMultiFieldsWithDocPartIndexIncludedByOtherIndex() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName5", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName4", "fieldId4", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName5", "fieldId5", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId5", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName3", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName3") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName3") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName3") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName5", FieldIndexOrdering.ASC); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName2"); new SnapshotMerger(currentSnapshot, changedSnapshot).merge(); } /** * Test an exception is thrown when an index is removed and has same doc part index as an old * added index Case 2&1.KO1.1 * * @throws Exception */ @Test public void testRemoveIndexWithOldIndexWithSameDocPartIndexAddedConflict() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", true) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName3", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName2"); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .removeMetaDocPartIndexByIdentifier("idxId2"); try { new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); Assert.fail("A " + UnmergeableException.class.getSimpleName() + " was expected to be thrown"); } catch (UnmergeableException ex) { } } /** * Test an exception is thrown when an index with multiple fields is removed and has same doc part * index as an old added index Case 2&1.KO1.2 * * @throws Exception */ @Test public void testRemoveIndexWithMultiFieldsWithOldIndexWithSameDocPartIndexAddedConflict() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", true) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName3", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName3") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName2"); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .removeMetaDocPartIndexByIdentifier("idxId2"); try { new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); Assert.fail("A " + UnmergeableException.class.getSimpleName() + " was expected to be thrown"); } catch (UnmergeableException ex) { } } /** * Test an exception is thrown when an index with multiple fields in multiple doc parts is removed * and has same doc part index as an old added index Case 2&1.KO1.3 * * @throws Exception */ @Test public void testRemoveIndexWithMultiFieldsInMultiDocPartsWithOldIndexWithSameDocPartIndexAddedConflict() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", true) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName3"), "fieldName6", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName3", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName3") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName3") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName3") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName5", FieldIndexOrdering.ASC); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName2"); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .removeMetaDocPartIndexByIdentifier("idxId2"); try { new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); Assert.fail("A " + UnmergeableException.class.getSimpleName() + " was expected to be thrown"); } catch (UnmergeableException ex) { } } /** * Test when an index is removed and has same old removed index Case 2&2.OK3.1 * * @throws Exception */ @Test public void testRemoveIndexWithSameOldRemovedIndex() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", true) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName2"); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .removeMetaDocPartIndexByIdentifier("idxId2"); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName2"); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .removeMetaDocPartIndexByIdentifier("idxId2"); new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); } /** * Test when an index with multiple fields is removed and has same old removed index Case * 2&2.OK3.2 * * @throws Exception */ @Test public void testRemoveIndexWithMultiFieldsWithOldIndexWithSameDocPartIndexRemoved() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", true) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName2"); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .removeMetaDocPartIndexByIdentifier("idxId2"); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName2"); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .removeMetaDocPartIndexByIdentifier("idxId2"); new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); } /** * Test when an index with multiple fields in multiple doc parts is removed and has same old * removed index Case 2&2.OK3.3 * * @throws Exception */ @Test public void testRemoveIndexWithMultiFieldsInMultiDocPartsWithOldIndexWithSameDocPartIndexRemoved() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", true) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName3"), "fieldName6", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName2"); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .removeMetaDocPartIndexByIdentifier("idxId2"); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName2"); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .removeMetaDocPartIndexByIdentifier("idxId2"); new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); } /** * Test that an exception is thrown on new index with missing doc part index conflicts Case * 1&3.KO1.1 * * @throws Exception */ @Test public void testIndexWithOldMissingDocPartIndexConflict() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); try { new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); Assert.fail("A " + UnmergeableException.class.getSimpleName() + " was expected to be thrown"); } catch (UnmergeableException ex) { } } /** * Test that an exception is thrown on new index with multiple fields with missing doc part index * conflicts Case 1&3.KO1.2 * * @throws Exception */ @Test public void testIndexWithMultiFieldsWithOldMissingDocPartIndexConflict() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); try { new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); Assert.fail("A " + UnmergeableException.class.getSimpleName() + " was expected to be thrown"); } catch (UnmergeableException ex) { } } /** * Test that an exception is thrown on new index with multiple fields in multiple doc parts with * missing doc part index conflicts Case 1&3.KO1.3 * * @throws Exception */ @Test public void testIndexWithMultiFieldsInMultiDocPartsWithOldMissingDocPartIndexConflict() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName4", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName5", FieldIndexOrdering.ASC); try { new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); Assert.fail("A " + UnmergeableException.class.getSimpleName() + " was expected to be thrown"); } catch (UnmergeableException ex) { } } /** * Test that an exception is thrown on new field with missing doc part index conflicts Case * 3&1.KO1.1 * * @throws Exception */ @Test public void testIndexWithMissingDocPartIndexConflict() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); try { new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); Assert.fail("A " + UnmergeableException.class.getSimpleName() + " was expected to be thrown"); } catch (UnmergeableException ex) { } } /** * Test that an exception is thrown on new field with missing doc part index with multiple fields * conflicts Case 3&1.KO1.2 * * @throws Exception */ @Test public void testIndexWithMultiFieldsWithMissingDocPartIndexConflict() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); try { new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); Assert.fail("A " + UnmergeableException.class.getSimpleName() + " was expected to be thrown"); } catch (UnmergeableException ex) { } } /** * Test that an exception is thrown on new field with missing doc part index with multiple fields * in multiple doc parts conflicts Case 3&1.KO1.3 * * @throws Exception */ @Test public void testIndexWithMultiFieldsInMultiDocPartsWithMissingDocPartIndexConflict() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaDocPart(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "docPartId2"); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName5", FieldIndexOrdering.ASC); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); try { new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); Assert.fail("A " + UnmergeableException.class.getSimpleName() + " was expected to be thrown"); } catch (UnmergeableException ex) { } } /** * Test that an exception is thrown on removed index with orphan doc part index conflicts Case * 2&3.KO1.1 * * @throws Exception */ @Test public void testIndexWithOldOrphanDocPartIndexConflict() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName1", "fieldId2", FieldType.BINARY); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName1"); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .removeMetaDocPartIndexByIdentifier("idxId1"); try { new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); Assert.fail("A " + UnmergeableException.class.getSimpleName() + " was expected to be thrown"); } catch (UnmergeableException ex) { } } /** * Test that an exception is thrown on removed index with multiple fields with orphan doc part * index conflicts Case 2&3.KO1.2 * * @throws Exception */ @Test public void testIndexWithMultiFieldsWithOldOrphanDocPartIndexConflict() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId12", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId13", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId12", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId13", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.BINARY); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.BINARY); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId3"); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName2"); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .removeMetaDocPartIndexByIdentifier("idxId2"); try { new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); Assert.fail("A " + UnmergeableException.class.getSimpleName() + " was expected to be thrown"); } catch (UnmergeableException ex) { } } /** * Test that an exception is thrown on removed index with multiple fields in multiple doc parts * with orphan doc part index conflicts Case 2&3.KO1.3 * * @throws Exception */ @Test public void testIndexWithMultiFieldsInMultiDocPartsWithOldOrphanDocPartIndexConflict() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId12", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId13", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaDocPart(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "docPartId2"); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .addMetaField("fieldName4", "fieldId14", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .addMetaField("fieldName5", "fieldId15", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName5", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId12", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId13", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.BINARY); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.BINARY); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId3"); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName2"); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .removeMetaDocPartIndexByIdentifier("idxId2"); try { new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); Assert.fail("A " + UnmergeableException.class.getSimpleName() + " was expected to be thrown"); } catch (UnmergeableException ex) { } } /** * Test that an exception is thrown on new doc part index with missing index conflicts Case * 3&2.KO1.1 * * @throws Exception */ @Test public void testIndexWithNewOrphanDocPartIndexConflict() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName1"); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .removeMetaDocPartIndexByIdentifier("idxId1"); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName1", "fieldId2", FieldType.BINARY); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); try { new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); Assert.fail("A " + UnmergeableException.class.getSimpleName() + " was expected to be thrown"); } catch (UnmergeableException ex) { } } /** * Test that an exception is thrown on new doc part index with missing index with multiple fields * conflicts Case 3&2.KO1.2 * * @throws Exception */ @Test public void testIndexWithMultiFieldsWithNewOrphanDocPartIndexConflict() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId12", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId13", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId12", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId13", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName2"); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .removeMetaDocPartIndexByIdentifier("idxId2"); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.BINARY); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.BINARY); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId3"); try { new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); Assert.fail("A " + UnmergeableException.class.getSimpleName() + " was expected to be thrown"); } catch (UnmergeableException ex) { } } /** * Test that an exception is thrown on new doc part index with missing index with multiple fields * in multiple doc parts conflicts Case 3&2.KO1.2 * * @throws Exception */ @Test public void testIndexWithMultiFieldsInMultiDocPartsWithNewOrphanDocPartIndexConflict() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId12", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId13", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaDocPart(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "docPartId2"); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .addMetaField("fieldName4", "fieldId14", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2")) .addMetaField("fieldName5", "fieldId15", FieldType.STRING); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName5", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId12", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId13", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .removeMetaIndexByName("idxName2"); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .removeMetaDocPartIndexByIdentifier("idxId2"); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.BINARY); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.BINARY); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId3"); try { new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); Assert.fail("A " + UnmergeableException.class.getSimpleName() + " was expected to be thrown"); } catch (UnmergeableException ex) { } } /** * Test new field with new doc part index for existing index with multiple fields conflicts Case * 3&3.OK1.2 * * @throws Exception */ @Test public void testIndexWithMultiFieldsWithNewFieldAndNewDocPartIndex() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentModifiedSnapshot .immutableCopy()); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); } /** * Test new field with new doc part index for existing index with multiple fields in multiple doc * parts Case 3&3.OK1.3 * * @throws Exception */ @Test public void testIndexWithMultiFieldsInMultiDocPartsWithNewFieldAndNewDocPartIndex() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaDocPart(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "docPartId2"); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName5", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentModifiedSnapshot .immutableCopy()); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaDocPartIndex(false) .addMetaDocPartIndexColumn("fieldId2", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .addMetaDocPartIndexColumn("fieldId3", FieldIndexOrdering.ASC); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .getAddedMutableMetaDocPartIndexes().iterator().next() .immutableCopy("idxId2"); new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); } /** * Test that an exception is thrown on new field with missing doc part index for existing index * with multiple fields conflicts Case 3&3.KO1.2 * * @throws Exception */ @Test public void testIndexWithMultiFieldsWithNewFieldAndMissingDocPartIndexConflict() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); try { new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); Assert.fail("A " + UnmergeableException.class.getSimpleName() + " was expected to be thrown"); } catch (UnmergeableException ex) { } } /** * Test that an exception is thrown on new field with missing doc part index for existing index * with multiple fields in multiple doc parts conflicts Case 3&3.KO1.3 * * @throws Exception */ @Test public void testIndexWithMultiFieldsInMultiDocPartsWithNewFieldAndMissingDocPartIndexConflict() throws Exception { MutableMetaSnapshot currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaIndex("idxName2", false) .addMetaIndexField(tableRefFactory.createRoot(), "fieldName2", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createRoot(), "fieldName3", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .addMetaDocPart(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "docPartId2"); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName4", FieldIndexOrdering.ASC); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaIndexByName("idxName2") .addMetaIndexField(tableRefFactory.createChild(tableRefFactory.createRoot(), "docPartName2"), "fieldName5", FieldIndexOrdering.ASC); ImmutableMetaSnapshot currentSnapshot = currentModifiedSnapshot.immutableCopy(); currentModifiedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); currentModifiedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName2", "fieldId2", FieldType.STRING); MutableMetaSnapshot changedSnapshot = new WrapperMutableMetaSnapshot(currentSnapshot); changedSnapshot .getMetaDatabaseByName("dbName1") .getMetaCollectionByName("colName1") .getMetaDocPartByTableRef(tableRefFactory.createRoot()) .addMetaField("fieldName3", "fieldId3", FieldType.STRING); try { new SnapshotMerger(currentModifiedSnapshot.immutableCopy(), changedSnapshot).merge(); Assert.fail("A " + UnmergeableException.class.getSimpleName() + " was expected to be thrown"); } catch (UnmergeableException ex) { } } }