You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by "Jungtaek Lim (JIRA)" <ji...@apache.org> on 2016/09/27 05:09:22 UTC
[jira] [Created] (CALCITE-1386) ITEM operator seems to ignore the
value type of collection and assign the value to Object
Jungtaek Lim created CALCITE-1386:
-------------------------------------
Summary: ITEM operator seems to ignore the value type of collection and assign the value to Object
Key: CALCITE-1386
URL: https://issues.apache.org/jira/browse/CALCITE-1386
Project: Calcite
Issue Type: Bug
Components: core
Affects Versions: 1.9.0
Reporter: Jungtaek Lim
Assignee: Julian Hyde
Suppose we're defining the following table:
{code}
.field("ID", SqlTypeName.INTEGER)
.field("MAPFIELD",
typeFactory.createMapType(
typeFactory.createSqlType(SqlTypeName.VARCHAR),
typeFactory.createTypeWithNullability(
typeFactory.createSqlType(SqlTypeName.ANY), true)))
.field("NESTEDMAPFIELD",
typeFactory.createMapType(
typeFactory.createSqlType(SqlTypeName.VARCHAR),
typeFactory.createTypeWithNullability(
typeFactory.createMapType(
typeFactory.createSqlType(SqlTypeName.VARCHAR),
typeFactory.createTypeWithNullability(
typeFactory.createSqlType(SqlTypeName.ANY), true))
, true)))
.field("ARRAYFIELD", typeFactory.createArrayType(
typeFactory.createTypeWithNullability(
typeFactory.createSqlType(SqlTypeName.INTEGER), true), -1L))
{code}
and query like this:
{code}
SELECT * FROM <TBL> WHERE MAPFIELD['a'] = 1
{code}
When we evaluate that query, JaninoRexCompiler throws an Exception saying there's no SqlFunctions.eq(Object, int).
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.
(I mean type mismatch occurs.)
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)