Unlike Java, whose strings are always in the UNICODE character set,
SQL's strings can be in a variety of character sets. When you perform
the '=' operation, both arguments need to be the same type. The
character literal 'bluejoe' implicitly has character set  "ISO-8859-1"
and collation "ISO-8859-1$en_US$primary", and I guess the NAME column
has something else, so Calcite adds a cast to allow them to be
compared.

On Tue, Sep 6, 2016 at 8:30 PM, bluejoe <[email protected]> wrote:
> Hi, all
> I wrote a custom ScannableTable and override the scan(context, filters) 
> method to implement the searching function.
> When I sent a SQL command like
>
> select * from PERSONS where NAME=‘bluejoe’ and AGE>30
>
> In the filters parameter, I found the filter on column `AGE` is parsed 
> properly like `>($2, 30)`
>
> While the filter on column `NAME` is parsed as:
>
> =(CAST($1):CHAR(7) CHARACTER SET "ISO-8859-1" COLLATE 
> "ISO-8859-1$en_US$primary" NOT NULL, 'bluejoe’)
>
> Why the column identifier`NAME` is transformed? How can I get the real column 
> $1? Or is there anyway to prevent the transformation?
>
> Many thanks!
>
> Best regards,
> Zhihong SHEN
> ———————————————
> Zhihong SHEN, Ph. D., Senior Engineer
> Big Data Application Service Technology Laboratory,
> Computer Network Information Center, Chinese Academy of Sciences
> office phone:+86-10-58812516
> mobile:+86-13671116520
>

Reply via email to