[ 
https://issues.apache.org/jira/browse/CASSANDRA-4476?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Oded Peer updated CASSANDRA-4476:
---------------------------------
    Attachment: 4476-5.patch

[~blerer]

Added 4476-5.patch

I updated the code to scan a restricted range if there are two expressions on 
the same column.


{quote}I think that you should use isRange or isSlice instead of 
isRelationalOrderOperator as it is clearer.{quote}
I renamed the method.

{quote}The name of test class: SecondaryIndexNonEqTest is misleading. CONTAINS 
an CONTAINS KEY operator are also non eq tests.{quote}
I renamed the test.

{quote}In getRelationalOrderEstimatedSize I do not understand why you do not 
return 0 if estimatedKeysForRange return 0. Could you explain?{quote}
I added comments to the code since I think it should documented in the code and 
not in Jira.
I hope it is understandable.

{quote}Instead of doing some dangerous casting in 
getRelationalOrderEstimatedSize, you should change the type from bestMeanCount 
from int to long.{quote}
I changed the type of bestMeanCount

{quote}In computeNext I do not understand why you do not check for stale data 
for range queries? Could you explain?{quote}
I added comments to the code.

{quote}I think it would be nicer to have also an iterator for EQ and use 
polymorphism instead of if else.{quote}
Generally I agree polymorphism is good practice, however I think in this case 
it would make the code less readable.

{quote}The close method of the AbstractScanIterator returned by 
getSequentialIterator should be called from the close method.{quote}
Thanks. I wasn't aware the iterator is closeable, they usually aren't.

{quote}The Unit tests are only covering a subset of the possible queries. Could 
you add more (a > 3 and a <4, a < 3 and a > 4 ...){quote}
Added.

{quote}When testing for InvalidRequestException you should use 
assertInvalidMessage{quote}
Thanks, I wanted to use such a method but couldn't find it on my own.

[~jjordan]

I don't understand the problem in your example. The query result seems valid to 
me.
In addition, can you please explain how a query using only secondary indexes 
such as {{select k from my_table where index1 = 5 and index2 > 10 allow 
filtering}} retains token order?

> Support 2ndary index queries with only inequality clauses (LT, LTE, GT, GTE)
> ----------------------------------------------------------------------------
>
>                 Key: CASSANDRA-4476
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-4476
>             Project: Cassandra
>          Issue Type: Improvement
>          Components: API, Core
>            Reporter: Sylvain Lebresne
>            Assignee: Oded Peer
>            Priority: Minor
>              Labels: cql
>             Fix For: 3.0
>
>         Attachments: 4476-2.patch, 4476-3.patch, 4476-5.patch, 
> cassandra-trunk-4476.patch
>
>
> Currently, a query that uses 2ndary indexes must have at least one EQ clause 
> (on an indexed column). Given that indexed CFs are local (and use 
> LocalPartitioner that order the row by the type of the indexed column), we 
> should extend 2ndary indexes to allow querying indexed columns even when no 
> EQ clause is provided.
> As far as I can tell, the main problem to solve for this is to update 
> KeysSearcher.highestSelectivityPredicate(). I.e. how do we estimate the 
> selectivity of non-EQ clauses? I note however that if we can do that estimate 
> reasonably accurately, this might provide better performance even for index 
> queries that both EQ and non-EQ clauses, because some non-EQ clauses may have 
> a much better selectivity than EQ ones (say you index both the user country 
> and birth date, for SELECT * FROM users WHERE country = 'US' AND birthdate > 
> 'Jan 2009' AND birtdate < 'July 2009', you'd better use the birthdate index 
> first).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to