Thanks a lot Julian, this is very helpful!

On Tue, Jan 17, 2017 at 10:35 PM, Julian Hyde <jhyde.apa...@gmail.com>
wrote:

> I think what you’re after is how to convert a predicate, say
>
>   select * from emp
>   where (empno = 100 or empno between 200 and 1000)
>     and empno not between 150 and 400
>
> into a set of ranges
>
>   [100], (400, 1000]
>
> Actually we don’t have that in Calcite, but note that literal values of
> all data types are Comparable and that Guava has an excellent RangeSet
> class.
>
> For the Druid adapter we needed to convert expressions like
>
>   EXTRACT(YEAR FROM t) = 2016
>  AND EXTRACT(MONTH FROM t) BETWEEN 5 and 7
>
> into
>
>   t BETWEEN ‘2016-05-01’ AND ‘2016-07-31’
>
> and for that we created DateRangeRules (see https://issues.apache.org/
> jira/browse/CALCITE-1334 <https://issues.apache.org/
> jira/browse/CALCITE-1334>). You’ll notice that DateRangeRules also makes
> extensive use of RangeSet internally.
>
> Julian
>
>
> > On Jan 16, 2017, at 5:21 PM, Ambud Sharma <asharma52...@gmail.com>
> wrote:
> >
> > Hi,
> >
> > I am trying use calcite and develop a custom adapter. I have implemented
> > the SPI and able to get basic enumerator to work with a simple select
> query
> > and no where clause.
> >
> > Trying to understand how to convert operators to range scan and push them
> > to the underlying data source.
> >
> > Should it be a rule or a visitor if yes how do you subset the nodes so
> that
> > only the range scannable entity is delivered to the converter. A link to
> a
> > working example would help.
> >
> > The data source has range scan capability and I can make a method call to
> > it.
> >
> > Thanks and regards,
> > Ambud
>
>

Reply via email to