drill-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Aman Sinha <asi...@maprtech.com>
Subject Re: Varchar without length in cast expression
Date Wed, 10 Dec 2014 00:19:05 GMT
Prior to DRILL-1470 fix we were not honoring the varchar length.  After
that fix we honor the length and that is why you are seeing the change in
behavior.  Drill gets the original logical plan from Optiq/Calcite which
inserts the VARCHAR(1) and so Drill just uses that value.  However,
VARCHAR(0) will give the intended behavior:

0: jdbc:drill:zk=local> select cast('1234' as varchar(0)) from
cp.`tpch/region.parquet`;
+------------+
|   EXPR$0   |
+------------+
| 1234       |
| 1234       |
| 1234       |
| 1234       |
| 1234       |
+------------+

This seems to be vendor specific. If we want Drill's behavior to be more
like Postgres,  you could file a JIRA and we can figure out what can be
done.

On Tue, Dec 9, 2014 at 3:55 PM, Hao Zhu <hzhu@maprtech.com> wrote:

> Probably a good point since Postgres shows expected result:
> postgres=# select '1234'::varchar(10);
>  varchar
> ---------
>  1234
> (1 row)
>
> postgres=# select '1234'::varchar(1);
>  varchar
> ---------
>  1
> (1 row)
>
> postgres=# select '1234'::varchar;
>  varchar
> ---------
>  1234
> (1 row)
>
> Thanks,
> Hao
>
>
>
>
>
> On Tue, Dec 9, 2014 at 3:43 PM, Xiao Meng <xiaom@cs.sfu.ca> wrote:
>
> > Hi,
> >
> > I noticed that the behavior of VARCHAR in cast expression changes in
> recent
> > drillbit server. In the cast expression, VARCHAR without length specifier
> > will be treated as  varchar(1) now.
> >
> > For example,  the following query:
> >
> > select (1234 as VARCHAR) from sys.drillbits
> >
> > returns '1' instead of '1234'.
> >
> > Is this change intended?
> >
> > As a reference, SQL server treated it differently:
> >
> > http://msdn.microsoft.com/en-CA/library/ms176089.aspx
> >
> > "(For char/varchar), when n is not specified in a data definition or
> > variable declaration statement, the default length is 1. When n is not
> > specified when using the CAST and CONVERT functions, the default length
> is
> > 30"
> > Best,
> >
> > Xiao
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message