Thanks Julian for detailed explanation.
I filed issues CALCITE-1386
<https://issues.apache.org/jira/browse/CALCITE-1386> and CALCITE-1387
<https://issues.apache.org/jira/browse/CALCITE-1387> for 1 and 2
respectively.

Btw, could you link which you referred the page? I can't find it.

Thanks,
Jungtaek Lim (HeartSaVioR)

2016년 9월 27일 (화) 오후 12:50, Julian Hyde <jh...@apache.org>님이 작성:

> Regarding 1 and 2: these sound like bugs. Can you please log a JIRA case
> for each? If you can supply a test case, even better.
>
> Regarding 3. I checked the SQL standard, and the required behavior is to
> throw an exception. (Maybe ArrayIndexOutOfBoundsException isn’t the best
> exception to throw.)
>
> Julian
>
>
>
> From SQL:2014...
>
> 6.24 <array element reference> Function
>
> Return an element of an array.
>
> Format
>
> <array element reference> ::=
>   <array value expression>
>       <left bracket or trigraph> <numeric value expression> <right bracket
> or trigraph>
> Syntax Rules
>
> 1)  The declared type of an <array element reference> is the element type
> of the speci ed <array value expression>.
>
> 2)  The declared type of <numeric value expression> shall be exact numeric
> with scale 0 (zero).
>
> Access Rules
>
> None.
>
> General Rules
>
> 1)  If the value of <array value expression> or <numeric value expression>
> is the null value, then the result of <array element reference> is the null
> value.
>
> 2)  Let i be the value of <numeric value expression>. Case:
>
> a)  If i is greater than zero and less than or equal to the cardinality of
> <array value expression>, then the result of <array element reference> is
> the value of the i-th element of the value of <array value expression>.
>
> b)  Otherwise, an exception condition is raised: data exception — array
> element error.
>
>
>
>
> > On Sep 25, 2016, at 5:24 PM, Jungtaek Lim <kabh...@gmail.com> wrote:
> >
> > Hi devs,
> >
> > I'm experimenting with ARRAY and MAP type with Calcite's
> JaninoRexCompiler.
> > (with Calcite 1.9.0)
> >
> > While testing I found some behaviors, so would like to see they're
> > intentional
> > or bugs we want to resolve.
> >
> > 1. Even though I set map's key/value type or array's type explicitly,
> > compiler ignores the value type and create assignment to Object.
> >
> > This makes extracting value from nested collection not possible. Also
> > comparing extracted value with numeric constant, too.
> > (For example, suppose there's a row which MAPFIELD['a'] has 1 as value.
> > Writing MAPFIELD['a'] = 1 on where statement throwing an Exception saying
> > there's no SqlFunctions.eq(Object, int).
> >
> > Btw, I took a breakpoint on BinaryImplementor.implement() to see
> variables
> > just
> > before compiler finds SqlFunctions.eq().
> > The type of expression is Object which is not generic, but seems like
> > matching
> > RexCall operand have value type information. We might create a quick fix
> > from
> > here (handling type conversion) but I'm not sure this can clearly resolve
> > this.
> >
> > 2. I just replace their type to ANY, and wrap expression with CAST like
> > MAPFIELD['a'] -> CAST(MAPFIELD['a'] AS INTEGER) = 1 and succeed.
> > (While using MAP type even I wrap to CAST, above error happens.)
> >
> > But it doesn't work when MAPFIELD['a'] is null because CAST AS INTEGER
> > calls
> > SqlFunctions.toInt(null) which throws RuntimeException.
> > (It happens MAPFIELD['a'] doesn't have item which has 'a' as key. I guess
> > same
> > applies to null value. And also same applies to ARRAY, and
> > ARRAYFIELD[<non integer>].)
> >
> > CAST(COALESCE(MAPFIELD['a'], -1) AS INTEGER) also throws Exception since
> > MAPFIELD['a'] is Object and -1 is int.
> > (CompileException : Incompatible expression types "java.lang.Object" and
> > "int")
> >
> > 3. ArrayOutOfIndexException is thrown when query is trying to access the
> > array
> > with out of index. I don't know there's a standard rule on this, but at
> > least
> > PostgreSQL doesn't throw an Exception but just treats it as null.
> > https://www.postgresql.org/docs/9.1/static/arrays.html
> > (This means the result of ITEM operator is nullable.)
> >
> > Any ideas on these behaviors?
> >
> > Thanks,
> > Jungtaek Lim (HeartSaVioR)
>
>

Reply via email to