This is an automated email from the ASF dual-hosted git repository. bdeggleston pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/cassandra.git
commit 69b36a54f764a852ae707597f984b0fd8ae0f6b9 Merge: 2117e2a 6b0b792 Author: Blake Eggleston <bdeggles...@gmail.com> AuthorDate: Tue Aug 6 10:22:29 2019 -0700 Merge branch 'cassandra-3.11' into trunk CHANGES.txt | 1 + .../org/apache/cassandra/db/ColumnFamilyStore.java | 13 ++++++++++ .../cassandra/index/internal/CassandraIndex.java | 2 +- test/unit/org/apache/cassandra/SchemaLoader.java | 29 ++++++++++++++++++++++ .../apache/cassandra/db/SecondaryIndexTest.java | 26 +++++++++++++++++++ 5 files changed, 70 insertions(+), 1 deletion(-) diff --cc src/java/org/apache/cassandra/db/ColumnFamilyStore.java index 5414f23,41b5e73..981bc05 --- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java +++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java @@@ -2410,6 -2471,6 +2410,19 @@@ public class ColumnFamilyStore implemen return count > 0 ? sum * 1.0 / count : 0; } ++ public int getMeanRowCount() ++ { ++ long totalRows = 0; ++ long totalPartitions = 0; ++ for (SSTableReader sstable : getSSTables(SSTableSet.CANONICAL)) ++ { ++ totalPartitions += sstable.getEstimatedPartitionSize().count(); ++ totalRows += sstable.getTotalRows(); ++ } ++ ++ return totalPartitions > 0 ? (int) (totalRows / totalPartitions) : 0; ++ } ++ public long estimateKeys() { long n = 0; diff --cc src/java/org/apache/cassandra/index/internal/CassandraIndex.java index ecd25fd,e23882f..58056b9 --- a/src/java/org/apache/cassandra/index/internal/CassandraIndex.java +++ b/src/java/org/apache/cassandra/index/internal/CassandraIndex.java @@@ -270,7 -270,26 +270,7 @@@ public abstract class CassandraIndex im public long getEstimatedResultRows() { - return indexCfs.getMeanColumns(); - long totalRows = 0; - long totalPartitions = 0; - for (SSTableReader sstable : indexCfs.getSSTables(SSTableSet.CANONICAL)) - { - if (sstable.descriptor.version.storeRows()) - { - totalPartitions += sstable.getEstimatedPartitionSize().count(); - totalRows += sstable.getTotalRows(); - } else - { - // for legacy sstables we don't have a total row count so we approximate it - // using estimated column count (which is the same logic as pre-3.0 - // see CASSANDRA-15259 - long colCount = sstable.getEstimatedColumnCount().count(); - totalPartitions += colCount; - totalRows += sstable.getEstimatedColumnCount().mean() * colCount; - } - } - - return totalPartitions > 0 ? (int) (totalRows / totalPartitions) : 0; ++ return indexCfs.getMeanRowCount(); } /** diff --cc test/unit/org/apache/cassandra/SchemaLoader.java index 41f8095,48b8af3..2bc9bda --- a/test/unit/org/apache/cassandra/SchemaLoader.java +++ b/test/unit/org/apache/cassandra/SchemaLoader.java @@@ -461,183 -446,225 +461,212 @@@ public class SchemaLoade if (withStaticIndex) { - cfm.indexes( - cfm.getIndexes() - .with(IndexMetadata.fromIndexTargets(cfm, - Collections.singletonList( - new IndexTarget(new ColumnIdentifier("static", true), - IndexTarget.Type.VALUES)), - "static_index", - IndexMetadata.Kind.COMPOSITES, - Collections.EMPTY_MAP))); + indexes.add(IndexMetadata.fromIndexTargets( + Collections.singletonList( + new IndexTarget(new ColumnIdentifier("static", true), + IndexTarget.Type.VALUES)), + cfName + "_static_index", + IndexMetadata.Kind.COMPOSITES, + Collections.EMPTY_MAP)); } - return cfm.compression(getCompressionParameters()); + return builder.indexes(indexes.build()); + } + - public static CFMetaData compositeMultipleIndexCFMD(String ksName, String cfName) throws ConfigurationException ++ public static TableMetadata.Builder compositeMultipleIndexCFMD(String ksName, String cfName) throws ConfigurationException + { - // the withIndex flag exists to allow tests index creation - // on existing columns - CFMetaData cfm = CFMetaData.Builder.create(ksName, cfName) - .addPartitionKey("key", AsciiType.instance) - .addClusteringColumn("c1", AsciiType.instance) - .addRegularColumn("birthdate", LongType.instance) - .addRegularColumn("notbirthdate", LongType.instance) - .build(); - - cfm.indexes( - cfm.getIndexes() - .with(IndexMetadata.fromIndexTargets(cfm, - Collections.singletonList( - new IndexTarget(new ColumnIdentifier("birthdate", true), - IndexTarget.Type.VALUES)), - "birthdate_key_index", - IndexMetadata.Kind.COMPOSITES, - Collections.EMPTY_MAP)) - .with(IndexMetadata.fromIndexTargets(cfm, - Collections.singletonList( - new IndexTarget(new ColumnIdentifier("notbirthdate", true), - IndexTarget.Type.VALUES)), - "notbirthdate_key_index", - IndexMetadata.Kind.COMPOSITES, - Collections.EMPTY_MAP)) - ); - - - return cfm.compression(getCompressionParameters()); - } - - public static CFMetaData keysIndexCFMD(String ksName, String cfName, boolean withIndex) throws ConfigurationException - { - CFMetaData cfm = CFMetaData.Builder.createDense(ksName, cfName, false, false) - .addPartitionKey("key", AsciiType.instance) - .addClusteringColumn("c1", AsciiType.instance) - .addStaticColumn("birthdate", LongType.instance) - .addStaticColumn("notbirthdate", LongType.instance) - .addRegularColumn("value", LongType.instance) - .build(); ++ TableMetadata.Builder builder = TableMetadata.builder(ksName, cfName) ++ .addPartitionKeyColumn("key", AsciiType.instance) ++ .addClusteringColumn("c1", AsciiType.instance) ++ .addRegularColumn("birthdate", LongType.instance) ++ .addRegularColumn("notbirthdate", LongType.instance) ++ .compression(getCompressionParameters()); ++ ++ ++ Indexes.Builder indexes = Indexes.builder(); ++ ++ indexes.add(IndexMetadata.fromIndexTargets(Collections.singletonList( ++ new IndexTarget(new ColumnIdentifier("birthdate", true), ++ IndexTarget.Type.VALUES)), ++ "birthdate_key_index", ++ IndexMetadata.Kind.COMPOSITES, ++ Collections.EMPTY_MAP)); ++ indexes.add(IndexMetadata.fromIndexTargets(Collections.singletonList( ++ new IndexTarget(new ColumnIdentifier("notbirthdate", true), ++ IndexTarget.Type.VALUES)), ++ "notbirthdate_key_index", ++ IndexMetadata.Kind.COMPOSITES, ++ Collections.EMPTY_MAP)); ++ ++ ++ return builder.indexes(indexes.build()); + } + + public static TableMetadata.Builder keysIndexCFMD(String ksName, String cfName, boolean withIndex) + { + TableMetadata.Builder builder = + TableMetadata.builder(ksName, cfName) + .isCompound(false) + .isDense(true) + .addPartitionKeyColumn("key", AsciiType.instance) + .addClusteringColumn("c1", AsciiType.instance) + .addStaticColumn("birthdate", LongType.instance) + .addStaticColumn("notbirthdate", LongType.instance) + .addRegularColumn("value", LongType.instance) + .compression(getCompressionParameters()); if (withIndex) - cfm.indexes( - cfm.getIndexes() - .with(IndexMetadata.fromIndexTargets(cfm, - Collections.singletonList( - new IndexTarget(new ColumnIdentifier("birthdate", true), - IndexTarget.Type.VALUES)), - "birthdate_composite_index", - IndexMetadata.Kind.KEYS, - Collections.EMPTY_MAP))); - - - return cfm.compression(getCompressionParameters()); - } - - public static CFMetaData customIndexCFMD(String ksName, String cfName) throws ConfigurationException - { - CFMetaData cfm = CFMetaData.Builder.createDense(ksName, cfName, false, false) - .addPartitionKey("key", AsciiType.instance) - .addClusteringColumn("c1", AsciiType.instance) - .addRegularColumn("value", LongType.instance) - .build(); - - cfm.indexes( - cfm.getIndexes() - .with(IndexMetadata.fromIndexTargets(cfm, - Collections.singletonList( - new IndexTarget(new ColumnIdentifier("value", true), - IndexTarget.Type.VALUES)), - "value_index", - IndexMetadata.Kind.CUSTOM, - Collections.singletonMap( - IndexTarget.CUSTOM_INDEX_OPTION_NAME, - StubIndex.class.getName())))); - - - return cfm.compression(getCompressionParameters()); - } - - public static CFMetaData jdbcCFMD(String ksName, String cfName, AbstractType comp) - { - return CFMetaData.Builder.create(ksName, cfName).addPartitionKey("key", BytesType.instance) - .build() - .compression(getCompressionParameters()); - } - - public static CFMetaData sasiCFMD(String ksName, String cfName) - { - CFMetaData cfm = CFMetaData.Builder.create(ksName, cfName) - .addPartitionKey("id", UTF8Type.instance) - .addRegularColumn("first_name", UTF8Type.instance) - .addRegularColumn("last_name", UTF8Type.instance) - .addRegularColumn("age", Int32Type.instance) - .addRegularColumn("height", Int32Type.instance) - .addRegularColumn("timestamp", LongType.instance) - .addRegularColumn("address", UTF8Type.instance) - .addRegularColumn("score", DoubleType.instance) - .addRegularColumn("comment", UTF8Type.instance) - .addRegularColumn("comment_suffix_split", UTF8Type.instance) - .addRegularColumn("/output/full-name/", UTF8Type.instance) - .addRegularColumn("/data/output/id", UTF8Type.instance) - .addRegularColumn("first_name_prefix", UTF8Type.instance) - .build(); - - cfm.indexes(cfm.getIndexes() - .with(IndexMetadata.fromSchemaMetadata("first_name", IndexMetadata.Kind.CUSTOM, new HashMap<String, String>() - {{ - put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); - put(IndexTarget.TARGET_OPTION_NAME, "first_name"); - put("mode", OnDiskIndexBuilder.Mode.CONTAINS.toString()); - }})) - .with(IndexMetadata.fromSchemaMetadata("last_name", IndexMetadata.Kind.CUSTOM, new HashMap<String, String>() - {{ - put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); - put(IndexTarget.TARGET_OPTION_NAME, "last_name"); - put("mode", OnDiskIndexBuilder.Mode.CONTAINS.toString()); - }})) - .with(IndexMetadata.fromSchemaMetadata("age", IndexMetadata.Kind.CUSTOM, new HashMap<String, String>() - {{ - put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); - put(IndexTarget.TARGET_OPTION_NAME, "age"); - - }})) - .with(IndexMetadata.fromSchemaMetadata("timestamp", IndexMetadata.Kind.CUSTOM, new HashMap<String, String>() - {{ - put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); - put(IndexTarget.TARGET_OPTION_NAME, "timestamp"); - put("mode", OnDiskIndexBuilder.Mode.SPARSE.toString()); - - }})) - .with(IndexMetadata.fromSchemaMetadata("address", IndexMetadata.Kind.CUSTOM, new HashMap<String, String>() - {{ - put("analyzer_class", "org.apache.cassandra.index.sasi.analyzer.NonTokenizingAnalyzer"); - put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); - put(IndexTarget.TARGET_OPTION_NAME, "address"); - put("mode", OnDiskIndexBuilder.Mode.PREFIX.toString()); - put("case_sensitive", "false"); - }})) - .with(IndexMetadata.fromSchemaMetadata("score", IndexMetadata.Kind.CUSTOM, new HashMap<String, String>() - {{ - put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); - put(IndexTarget.TARGET_OPTION_NAME, "score"); - }})) - .with(IndexMetadata.fromSchemaMetadata("comment", IndexMetadata.Kind.CUSTOM, new HashMap<String, String>() - {{ - put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); - put(IndexTarget.TARGET_OPTION_NAME, "comment"); - put("mode", OnDiskIndexBuilder.Mode.CONTAINS.toString()); - put("analyzed", "true"); - }})) - .with(IndexMetadata.fromSchemaMetadata("comment_suffix_split", IndexMetadata.Kind.CUSTOM, new HashMap<String, String>() - {{ - put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); - put(IndexTarget.TARGET_OPTION_NAME, "comment_suffix_split"); - put("mode", OnDiskIndexBuilder.Mode.CONTAINS.toString()); - put("analyzed", "false"); - }})) - .with(IndexMetadata.fromSchemaMetadata("output_full_name", IndexMetadata.Kind.CUSTOM, new HashMap<String, String>() - {{ - put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); - put(IndexTarget.TARGET_OPTION_NAME, "/output/full-name/"); - put("analyzed", "true"); - put("analyzer_class", "org.apache.cassandra.index.sasi.analyzer.NonTokenizingAnalyzer"); - put("case_sensitive", "false"); - }})) - .with(IndexMetadata.fromSchemaMetadata("data_output_id", IndexMetadata.Kind.CUSTOM, new HashMap<String, String>() - {{ - put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); - put(IndexTarget.TARGET_OPTION_NAME, "/data/output/id"); - put("mode", OnDiskIndexBuilder.Mode.CONTAINS.toString()); - }})) - .with(IndexMetadata.fromSchemaMetadata("first_name_prefix", IndexMetadata.Kind.CUSTOM, new HashMap<String, String>() - {{ - put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); - put(IndexTarget.TARGET_OPTION_NAME, "first_name_prefix"); - put("analyzed", "true"); - put("tokenization_normalize_lowercase", "true"); - }}))); - - return cfm; - } - - public static CFMetaData clusteringSASICFMD(String ksName, String cfName) - { - return clusteringSASICFMD(ksName, cfName, "location", "age", "height", "score"); - } - - public static CFMetaData clusteringSASICFMD(String ksName, String cfName, String...indexedColumns) - { - CFMetaData cfm = CFMetaData.Builder.create(ksName, cfName) - .addPartitionKey("name", UTF8Type.instance) - .addClusteringColumn("location", UTF8Type.instance) - .addClusteringColumn("age", Int32Type.instance) - .addRegularColumn("height", Int32Type.instance) - .addRegularColumn("score", DoubleType.instance) - .addStaticColumn("nickname", UTF8Type.instance) - .build(); - - Indexes indexes = cfm.getIndexes(); + { + IndexMetadata index = + IndexMetadata.fromIndexTargets( + Collections.singletonList(new IndexTarget(new ColumnIdentifier("birthdate", true), + IndexTarget.Type.VALUES)), + cfName + "_birthdate_composite_index", + IndexMetadata.Kind.KEYS, + Collections.EMPTY_MAP); + builder.indexes(Indexes.builder().add(index).build()); + } + + return builder; + } + + public static TableMetadata.Builder customIndexCFMD(String ksName, String cfName) + { + TableMetadata.Builder builder = + TableMetadata.builder(ksName, cfName) + .isCompound(false) + .isDense(true) + .addPartitionKeyColumn("key", AsciiType.instance) + .addClusteringColumn("c1", AsciiType.instance) + .addRegularColumn("value", LongType.instance) + .compression(getCompressionParameters()); + + IndexMetadata index = + IndexMetadata.fromIndexTargets( + Collections.singletonList(new IndexTarget(new ColumnIdentifier("value", true), IndexTarget.Type.VALUES)), + cfName + "_value_index", + IndexMetadata.Kind.CUSTOM, + Collections.singletonMap(IndexTarget.CUSTOM_INDEX_OPTION_NAME, StubIndex.class.getName())); + + builder.indexes(Indexes.of(index)); + + return builder; + } + + public static TableMetadata.Builder jdbcCFMD(String ksName, String cfName, AbstractType comp) + { + return TableMetadata.builder(ksName, cfName) + .addPartitionKeyColumn("key", BytesType.instance) + .compression(getCompressionParameters()); + } + + public static TableMetadata.Builder sasiCFMD(String ksName, String cfName) + { + TableMetadata.Builder builder = + TableMetadata.builder(ksName, cfName) + .addPartitionKeyColumn("id", UTF8Type.instance) + .addRegularColumn("first_name", UTF8Type.instance) + .addRegularColumn("last_name", UTF8Type.instance) + .addRegularColumn("age", Int32Type.instance) + .addRegularColumn("height", Int32Type.instance) + .addRegularColumn("timestamp", LongType.instance) + .addRegularColumn("address", UTF8Type.instance) + .addRegularColumn("score", DoubleType.instance) + .addRegularColumn("comment", UTF8Type.instance) + .addRegularColumn("comment_suffix_split", UTF8Type.instance) + .addRegularColumn("/output/full-name/", UTF8Type.instance) + .addRegularColumn("/data/output/id", UTF8Type.instance) + .addRegularColumn("first_name_prefix", UTF8Type.instance); + + Indexes.Builder indexes = Indexes.builder(); + + indexes.add(IndexMetadata.fromSchemaMetadata(cfName + "_first_name", IndexMetadata.Kind.CUSTOM, new HashMap<String, String>() + {{ + put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); + put(IndexTarget.TARGET_OPTION_NAME, "first_name"); + put("mode", OnDiskIndexBuilder.Mode.CONTAINS.toString()); + }})) + .add(IndexMetadata.fromSchemaMetadata(cfName + "_last_name", IndexMetadata.Kind.CUSTOM, new HashMap<String, String>() + {{ + put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); + put(IndexTarget.TARGET_OPTION_NAME, "last_name"); + put("mode", OnDiskIndexBuilder.Mode.CONTAINS.toString()); + }})) + .add(IndexMetadata.fromSchemaMetadata(cfName + "_age", IndexMetadata.Kind.CUSTOM, new HashMap<String, String>() + {{ + put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); + put(IndexTarget.TARGET_OPTION_NAME, "age"); + }})) + .add(IndexMetadata.fromSchemaMetadata(cfName + "_timestamp", IndexMetadata.Kind.CUSTOM, new HashMap<String, String>() + {{ + put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); + put(IndexTarget.TARGET_OPTION_NAME, "timestamp"); + put("mode", OnDiskIndexBuilder.Mode.SPARSE.toString()); + + }})) + .add(IndexMetadata.fromSchemaMetadata(cfName + "_address", IndexMetadata.Kind.CUSTOM, new HashMap<String, String>() + {{ + put("analyzer_class", "org.apache.cassandra.index.sasi.analyzer.NonTokenizingAnalyzer"); + put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); + put(IndexTarget.TARGET_OPTION_NAME, "address"); + put("mode", OnDiskIndexBuilder.Mode.PREFIX.toString()); + put("case_sensitive", "false"); + }})) + .add(IndexMetadata.fromSchemaMetadata(cfName + "_score", IndexMetadata.Kind.CUSTOM, new HashMap<String, String>() + {{ + put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); + put(IndexTarget.TARGET_OPTION_NAME, "score"); + }})) + .add(IndexMetadata.fromSchemaMetadata(cfName + "_comment", IndexMetadata.Kind.CUSTOM, new HashMap<String, String>() + {{ + put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); + put(IndexTarget.TARGET_OPTION_NAME, "comment"); + put("mode", OnDiskIndexBuilder.Mode.CONTAINS.toString()); + put("analyzed", "true"); + }})) + .add(IndexMetadata.fromSchemaMetadata(cfName + "_comment_suffix_split", IndexMetadata.Kind.CUSTOM, new HashMap<String, String>() + {{ + put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); + put(IndexTarget.TARGET_OPTION_NAME, "comment_suffix_split"); + put("mode", OnDiskIndexBuilder.Mode.CONTAINS.toString()); + put("analyzed", "false"); + }})) + .add(IndexMetadata.fromSchemaMetadata(cfName + "_output_full_name", IndexMetadata.Kind.CUSTOM, new HashMap<String, String>() + {{ + put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); + put(IndexTarget.TARGET_OPTION_NAME, "/output/full-name/"); + put("analyzed", "true"); + put("analyzer_class", "org.apache.cassandra.index.sasi.analyzer.NonTokenizingAnalyzer"); + put("case_sensitive", "false"); + }})) + .add(IndexMetadata.fromSchemaMetadata(cfName + "_data_output_id", IndexMetadata.Kind.CUSTOM, new HashMap<String, String>() + {{ + put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); + put(IndexTarget.TARGET_OPTION_NAME, "/data/output/id"); + put("mode", OnDiskIndexBuilder.Mode.CONTAINS.toString()); + }})) + .add(IndexMetadata.fromSchemaMetadata(cfName + "_first_name_prefix", IndexMetadata.Kind.CUSTOM, new HashMap<String, String>() + {{ + put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); + put(IndexTarget.TARGET_OPTION_NAME, "first_name_prefix"); + put("analyzed", "true"); + put("tokenization_normalize_lowercase", "true"); + }})); + + return builder.indexes(indexes.build()); +} + +public static TableMetadata.Builder clusteringSASICFMD(String ksName, String cfName) +{ + return clusteringSASICFMD(ksName, cfName, "location", "age", "height", "score"); +} + + public static TableMetadata.Builder clusteringSASICFMD(String ksName, String cfName, String...indexedColumns) + { + Indexes.Builder indexes = Indexes.builder(); for (String indexedColumn : indexedColumns) { - indexes = indexes.with(IndexMetadata.fromSchemaMetadata(indexedColumn, IndexMetadata.Kind.CUSTOM, new HashMap<String, String>() + indexes.add(IndexMetadata.fromSchemaMetadata(cfName + "_" + indexedColumn, IndexMetadata.Kind.CUSTOM, new HashMap<String, String>() {{ put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); put(IndexTarget.TARGET_OPTION_NAME, indexedColumn); diff --cc test/unit/org/apache/cassandra/db/SecondaryIndexTest.java index 5dadc11,e9a0db6..c09b16c --- a/test/unit/org/apache/cassandra/db/SecondaryIndexTest.java +++ b/test/unit/org/apache/cassandra/db/SecondaryIndexTest.java @@@ -523,6 -513,29 +526,29 @@@ public class SecondaryIndexTes assertIndexedCount(cfs, ByteBufferUtil.bytes("birthdate"), 1l, 10); } + @Test + public void testSelectivityWithMultipleIndexes() + { + ColumnFamilyStore cfs = Keyspace.open(KEYSPACE1).getColumnFamilyStore(WITH_MULTIPLE_COMPOSITE_INDEX); + + // creates rows such that birthday_index has 1 partition (key = 1L) with 4 rows -- mean row count = 4, and notbirthdate_index has 2 partitions with 2 rows each -- mean row count = 2 - new RowUpdateBuilder(cfs.metadata, 0, "k1").clustering("c").add("birthdate", 1L).add("notbirthdate", 2L).build().applyUnsafe(); - new RowUpdateBuilder(cfs.metadata, 0, "k2").clustering("c").add("birthdate", 1L).add("notbirthdate", 2L).build().applyUnsafe(); - new RowUpdateBuilder(cfs.metadata, 0, "k3").clustering("c").add("birthdate", 1L).add("notbirthdate", 3L).build().applyUnsafe(); - new RowUpdateBuilder(cfs.metadata, 0, "k4").clustering("c").add("birthdate", 1L).add("notbirthdate", 3L).build().applyUnsafe(); ++ new RowUpdateBuilder(cfs.metadata(), 0, "k1").clustering("c").add("birthdate", 1L).add("notbirthdate", 2L).build().applyUnsafe(); ++ new RowUpdateBuilder(cfs.metadata(), 0, "k2").clustering("c").add("birthdate", 1L).add("notbirthdate", 2L).build().applyUnsafe(); ++ new RowUpdateBuilder(cfs.metadata(), 0, "k3").clustering("c").add("birthdate", 1L).add("notbirthdate", 3L).build().applyUnsafe(); ++ new RowUpdateBuilder(cfs.metadata(), 0, "k4").clustering("c").add("birthdate", 1L).add("notbirthdate", 3L).build().applyUnsafe(); + + cfs.forceBlockingFlush(); + ReadCommand rc = Util.cmd(cfs) + .fromKeyIncl("k1") + .toKeyIncl("k3") + .columns("birthdate") + .filterOn("birthdate", Operator.EQ, 1L) + .filterOn("notbirthdate", Operator.EQ, 0L) + .build(); + + assertEquals("notbirthdate_key_index", rc.indexMetadata().name); + } + private void assertIndexedNone(ColumnFamilyStore cfs, ByteBuffer col, Object val) { assertIndexedCount(cfs, col, val, 0); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org