It's just a matter of splitting out equality predicates. What I would do is 
create a Filter rule that splits the filter based on whether a predicate is an 
equality. If the Filter is split, the rule returns a Filter with the equality 
predicates as inputs to the non-equality predicates. That should allow the 
CassandraFilterRule to convert the Filter with equality predicates and for the 
rest of the predicates above to be implemented in Enumerable convention.

You can look at the rules in core for some examples of splitting expressions. 
Just ensure equality predicates are pushed down or you can implement a rule for 
pushing them down past other filters.

> On Aug 3, 2016, at 10:57 AM, Shuyi Chen <[email protected]> wrote:
> 
> Hi,
> 
> I am working on improving the cassandra adapter. Right now, I found that if
> my filter contains non-primary keys, calcite will just reject the filter
> and just execute a no-filter cql query  which is bad. I am wondering how I
> can split the filter into cassandra supported part and
> cassandra-non-supported part, and push down the cassandra supported part to
> cql. Below is an example.
> 
> Assuming the cassandra table contains field: a, b, c, and a is the only
> primary key.
> 
> calcite sql is:  select a, b, c from table1 where a = 'xxx' and b < 3223;
> 
> I want to push down cql: select a, b, c from table1 where a = 'xxx' to
> cassandra,
> 
> But right now, the cassandra adapter will only push down: select a, b, c
> from table1, which is bad for cassandra.
> 
> Thanks a lot.
> Shuyi
> 
> -- 
> "So you have to trust that the dots will somehow connect in your future."

Reply via email to