I hit a similar issue and filed a JIRA to track this. https://issues.apache.org/jira/browse/DRILL-1836
On Wed, Dec 10, 2014 at 8:40 AM, Xiao Meng <xi...@cs.sfu.ca> wrote: > As far as we know, most apps will specify a length when using the CAST > expression. So I think this should be Okay for us. > > Best, > > Xiao > > On Tue, Dec 9, 2014 at 4:19 PM, Aman Sinha <asi...@maprtech.com> wrote: > > > 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 <h...@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 <xi...@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 > > > > > > > > > >