[
https://issues.apache.org/jira/browse/CASSANDRA-7525?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Tuukka Mustonen updated CASSANDRA-7525:
---------------------------------------
Description:
Querying by:
* non-primary key column with secondary index + collection with secondary index
* primary key column with secondary index + non-primary key column with
secondary index
gives {{<ErrorMessage code=0000 [Server error]
message="java.lang.IllegalArgumentException: expected one element but was:
<org.apache.cassandra.db.index.composites.CompositesSearcher@156b5576,
org.apache.cassandra.db.index.composites.CompositesSearcher@39b7c0f6>">}}
Steps to reproduce:
{code}
cqlsh:cs> CREATE TABLE test (
... id1 text,
... id2 text,
... column1 text,
... column2 text,
... collection set<text>,
... PRIMARY KEY (id1, id2)
... );
cqlsh:cs>
{code}
Simple query by primary key works as should:
{code}
cqlsh:cs> SELECT * FROM test WHERE id1 = 'foo';
(0 rows)
cqlsh:cs> SELECT * FROM test WHERE id1 = 'foo' AND id2 = 'bar';
(0 rows)
{code}
Query by secondary index + non-indexed column:
{code}
cqlsh:cs> CREATE INDEX test_column1s ON test(column1);
cqlsh:cs> SELECT * FROM test WHERE column1 = 'foo';
(0 rows)
cqlsh:cs> SELECT * FROM test WHERE column1 = 'foo' AND column2 = 'bar' ALLOW
FILTERING;
(0 rows)
{code}
Add secondary index also for the second column:
{code}
cqlsh:cs> CREATE INDEX test_column2s ON test(column2);
cqlsh:cs> SELECT * FROM test WHERE column1 = 'foo' AND column2 = 'bar' ALLOW
FILTERING;
(0 rows)
{code}
Doesn't matter if we bring primary key or the collection there as well:
{code}
cqlsh:cs> SELECT * FROM test WHERE id1 = 'blah' AND column1 = 'foo' AND column2
= 'bar' ALLOW FILTERING;
(0 rows)
cqlsh:cs> SELECT * FROM test WHERE column1 = 'foo' AND collection CONTAINS
'bar' ALLOW FILTERING;
(0 rows)
{code}
Let's add index for the collection:
{code}
cqlsh:cs> CREATE INDEX test_collections ON test(collection);
cqlsh:cs> SELECT * FROM test WHERE collection CONTAINS 'bar';
(0 rows)
{code}
But then combine secondary index column and collection with secondary index:
{code}
cqlsh:cs> SELECT * FROM test WHERE column1 = 'foo' AND collection CONTAINS
'bar' ALLOW FILTERING;
<ErrorMessage code=0000 [Server error]
message="java.lang.IllegalArgumentException: expected one element but was:
<org.apache.cassandra.db.index.composites.CompositesSearcher@68e37722,
org.apache.cassandra.db.index.composites.CompositesSearcher@2da28efa>">
{code}
Furthermore, query by primary key field with secondary index + non-primary key
column with secondary index:
{code}
cqlsh:cs> CREATE INDEX test_id2s ON test(id2);
cqlsh:cs> SELECT * FROM test WHERE id2 = 'foo' AND column1 = 'bar' ALLOW
FILTERING;
<ErrorMessage code=0000 [Server error]
message="java.lang.IllegalArgumentException: expected one element but was:
<org.apache.cassandra.db.index.composites.CompositesSearcher@3ca899f1,
org.apache.cassandra.db.index.composites.CompositesSearcher@6112bc53>">
{code}
I'm a cassandra noob so maybe I'm trying to do things the db is not meant to do?
was:
Querying by:
* non-primary key column with secondary index + collection with secondary index
* primary key column with secondary index + non-primary key column with
secondary index
gives {{<ErrorMessage code=0000 [Server error]
message="java.lang.IllegalArgumentException: expected one element but was:
<org.apache.cassandra.db.index.composites.CompositesSearcher@156b5576,
org.apache.cassandra.db.index.composites.CompositesSearcher@39b7c0f6>">}}
Steps to reproduce:
{code}
cqlsh:cs> CREATE TABLE test (
... id1 text,
... id2 text,
... column1 text,
... column2 text,
... collection set<text>,
... PRIMARY KEY (id1, id2)
... );
cqlsh:cs>
{code}
Simple query by primary key works as should:
{code}
cqlsh:cs> SELECT * FROM test WHERE id1 = 'foo';
(0 rows)
cqlsh:cs> SELECT * FROM test WHERE id1 = 'foo' AND id2 = 'bar';
(0 rows)
{code}
Query by secondary index + non-indexed column:
{code}
cqlsh:cs> CREATE INDEX test_column1s ON test(column1);
cqlsh:cs> SELECT * FROM test WHERE column1 = 'foo';
(0 rows)
cqlsh:cs> SELECT * FROM test WHERE column1 = 'foo' AND column2 = 'bar' ALLOW
FILTERING;
(0 rows)
{code}
Add secondary index also for the second column:
{code}
cqlsh:cs> CREATE INDEX test_column2s ON test(column2);
cqlsh:cs> SELECT * FROM test WHERE column1 = 'foo' AND column2 = 'bar' ALLOW
FILTERING;
(0 rows)
{code}
Doesn't matter if we bring primary key or the collection there as well:
{code}
cqlsh:cs> SELECT * FROM test WHERE id1 = 'blah' AND column1 = 'foo' AND column2
= 'bar' ALLOW FILTERING;
(0 rows)
cqlsh:cs> SELECT * FROM test WHERE column1 = 'foo' AND collection CONTAINS
'bar' ALLOW FILTERING;
(0 rows)
{code}
Let's add index for the collection:
{code}
cqlsh:cs> CREATE INDEX test_collections ON test(collection);
cqlsh:cs> SELECT * FROM test WHERE collection CONTAINS 'bar';
(0 rows)
{code}
But then combine secondary index column and collection with secondary index:
{code}
cqlsh:cs> SELECT * FROM test WHERE column1 = 'foo' AND collection CONTAINS
'bar' ALLOW FILTERING;
<ErrorMessage code=0000 [Server error]
message="java.lang.IllegalArgumentException: expected one element but was:
<org.apache.cassandra.db.index.composites.CompositesSearcher@68e37722,
org.apache.cassandra.db.index.composites.CompositesSearcher@2da28efa>">
{code}
Furthermore, query by primary key field with secondary index + non-primary key
column with secondary index:
{code}
cqlsh:cs> CREATE INDEX test_id2s ON test(id2);
cqlsh:cs> SELECT * FROM test WHERE id2 = 'foo' AND column1 = 'bar' ALLOW
FILTERING;
<ErrorMessage code=0000 [Server error]
message="java.lang.IllegalArgumentException: expected one element but was:
<org.apache.cassandra.db.index.composites.CompositesSearcher@3ca899f1,
org.apache.cassandra.db.index.composites.CompositesSearcher@6112bc53>">
{code}
I'm a cassandra noob so maybe I'm trying to do things the db was not meant to
do?
> Querying by multiple secondary indexes gives
> java.lang.IllegalArgumentException on some cases
> ---------------------------------------------------------------------------------------------
>
> Key: CASSANDRA-7525
> URL: https://issues.apache.org/jira/browse/CASSANDRA-7525
> Project: Cassandra
> Issue Type: Bug
> Reporter: Tuukka Mustonen
>
> Querying by:
> * non-primary key column with secondary index + collection with secondary
> index
> * primary key column with secondary index + non-primary key column with
> secondary index
> gives {{<ErrorMessage code=0000 [Server error]
> message="java.lang.IllegalArgumentException: expected one element but was:
> <org.apache.cassandra.db.index.composites.CompositesSearcher@156b5576,
> org.apache.cassandra.db.index.composites.CompositesSearcher@39b7c0f6>">}}
> Steps to reproduce:
> {code}
> cqlsh:cs> CREATE TABLE test (
> ... id1 text,
> ... id2 text,
> ... column1 text,
> ... column2 text,
> ... collection set<text>,
> ... PRIMARY KEY (id1, id2)
> ... );
> cqlsh:cs>
> {code}
> Simple query by primary key works as should:
> {code}
> cqlsh:cs> SELECT * FROM test WHERE id1 = 'foo';
> (0 rows)
> cqlsh:cs> SELECT * FROM test WHERE id1 = 'foo' AND id2 = 'bar';
> (0 rows)
> {code}
> Query by secondary index + non-indexed column:
> {code}
> cqlsh:cs> CREATE INDEX test_column1s ON test(column1);
> cqlsh:cs> SELECT * FROM test WHERE column1 = 'foo';
> (0 rows)
> cqlsh:cs> SELECT * FROM test WHERE column1 = 'foo' AND column2 = 'bar' ALLOW
> FILTERING;
> (0 rows)
> {code}
> Add secondary index also for the second column:
> {code}
> cqlsh:cs> CREATE INDEX test_column2s ON test(column2);
> cqlsh:cs> SELECT * FROM test WHERE column1 = 'foo' AND column2 = 'bar' ALLOW
> FILTERING;
> (0 rows)
> {code}
> Doesn't matter if we bring primary key or the collection there as well:
> {code}
> cqlsh:cs> SELECT * FROM test WHERE id1 = 'blah' AND column1 = 'foo' AND
> column2 = 'bar' ALLOW FILTERING;
> (0 rows)
> cqlsh:cs> SELECT * FROM test WHERE column1 = 'foo' AND collection CONTAINS
> 'bar' ALLOW FILTERING;
> (0 rows)
> {code}
> Let's add index for the collection:
> {code}
> cqlsh:cs> CREATE INDEX test_collections ON test(collection);
> cqlsh:cs> SELECT * FROM test WHERE collection CONTAINS 'bar';
> (0 rows)
> {code}
> But then combine secondary index column and collection with secondary index:
> {code}
> cqlsh:cs> SELECT * FROM test WHERE column1 = 'foo' AND collection CONTAINS
> 'bar' ALLOW FILTERING;
> <ErrorMessage code=0000 [Server error]
> message="java.lang.IllegalArgumentException: expected one element but was:
> <org.apache.cassandra.db.index.composites.CompositesSearcher@68e37722,
> org.apache.cassandra.db.index.composites.CompositesSearcher@2da28efa>">
> {code}
> Furthermore, query by primary key field with secondary index + non-primary
> key column with secondary index:
> {code}
> cqlsh:cs> CREATE INDEX test_id2s ON test(id2);
> cqlsh:cs> SELECT * FROM test WHERE id2 = 'foo' AND column1 = 'bar' ALLOW
> FILTERING;
> <ErrorMessage code=0000 [Server error]
> message="java.lang.IllegalArgumentException: expected one element but was:
> <org.apache.cassandra.db.index.composites.CompositesSearcher@3ca899f1,
> org.apache.cassandra.db.index.composites.CompositesSearcher@6112bc53>">
> {code}
> I'm a cassandra noob so maybe I'm trying to do things the db is not meant to
> do?
--
This message was sent by Atlassian JIRA
(v6.2#6252)