You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by Dmitry Sysolyatin <dm...@gmail.com> on 2022/01/28 10:59:40 UTC
Calcite can't generate code for one of the query
Hi!
I am implementing a wrapper over calcite in order to use it like Postgres
server. But I have a problem with one of a query that Postgres driver sends
to the server.
The query:
````
SELECT NULL AS TABLE_CAT, n.nspname AS TABLE_SCHEM, c.relname AS
TABLE_NAME, CASE n.nspname ~ '^pg_' OR n.nspname = 'information_schema'
WHEN true THEN CASE WHEN n.nspname = 'pg_catalog' OR n.nspname =
'information_schema' THEN CASE c.relkind WHEN 'r' THEN 'SYSTEM TABLE'
WHEN 'v' THEN 'SYSTEM VIEW' WHEN 'i' THEN 'SYSTEM INDEX' ELSE NULL
END WHEN n.nspname = 'pg_toast' THEN CASE c.relkind WHEN 'r' THEN
'SYSTEM TOAST TABLE' WHEN 'i' THEN 'SYSTEM TOAST INDEX' ELSE NULL END
ELSE CASE c.relkind WHEN 'r' THEN 'TEMPORARY TABLE' WHEN 'p' THEN
'TEMPORARY TABLE' WHEN 'i' THEN 'TEMPORARY INDEX' WHEN 'S' THEN
'TEMPORARY SEQUENCE' WHEN 'v' THEN 'TEMPORARY VIEW' ELSE NULL END
END WHEN false THEN CASE c.relkind WHEN 'r' THEN 'TABLE' WHEN 'p' THEN
'PARTITIONED TABLE' WHEN 'i' THEN 'INDEX' WHEN 'S' THEN 'SEQUENCE' WHEN
'v' THEN 'VIEW' WHEN 'c' THEN 'TYPE' WHEN 'f' THEN 'FOREIGN TABLE' WHEN
'm' THEN 'MATERIALIZED VIEW' ELSE NULL END ELSE NULL END AS
TABLE_TYPE, d.description AS REMARKS, '' as TYPE_CAT, '' as TYPE_SCHEM, ''
as TYPE_NAME, '' AS SELF_REFERENCING_COL_NAME, '' AS REF_GENERATION FROM
pg_catalog.pg_namespace n, pg_catalog.pg_class c LEFT JOIN
pg_catalog.pg_description d ON (c.oid = d.objoid AND d.objsubid = 0) LEFT
JOIN pg_catalog.pg_class dc ON (d.classoid=dc.oid AND
dc.relname='pg_class') LEFT JOIN pg_catalog.pg_namespace dn ON
(dn.oid=dc.relnamespace AND dn.nspname='pg_catalog') WHERE c.relnamespace
= n.oid ORDER BY TABLE_TYPE,TABLE_SCHEM,TABLE_NAME
```
The problem is that calcite can't generate code for WHEN CASE block (The
query works if remove WHEN CASE block).
```
Caused by: java.lang.NoSuchMethodException:
org.apache.calcite.runtime.SqlFunctions.toChar(java.lang.Object)
```
I wrote down the full exception description inside gist:
https://gist.github.com/dssysolyatin/168c97f6033dd68b96822ce0ab48f84c
Can someone point me to how to resolve this issue?
Re: Calcite can't generate code for one of the query
Posted by Dmitry Sysolyatin <dm...@gmail.com>.
I don't use ReflectiveSchema. I created RelProtoDataType using
RelDataTypeImpl.*proto *directly.
Is there any documentation where I can find a list of supported types ?
On Fri, Jan 28, 2022 at 6:51 PM Julian Hyde <jh...@gmail.com> wrote:
> I guess you’re using ReflectiveSchema. I don’t think we support columns of
> (Java) type Character or char. You should convert relkind to a String and I
> think things will be better.
>
> > On Jan 28, 2022, at 4:44 AM, Dmitry Sysolyatin <dm...@gmail.com>
> wrote:
> >
> > I found a way how to make the query work. But I don't understand the
> reason:
> > If `relkind` is JavaType(char) (primitive type) then the query does not
> work
> > If `relkind` is JavaType(java.lang.Character) then the query works.
> >
> >
> > On Fri, Jan 28, 2022 at 12:59 PM Dmitry Sysolyatin <
> dm.sysolyatin@gmail.com>
> > wrote:
> >
> >> Hi!
> >>
> >> I am implementing a wrapper over calcite in order to use it like
> Postgres
> >> server. But I have a problem with one of a query that Postgres driver
> sends
> >> to the server.
> >>
> >> The query:
> >> ````
> >> SELECT NULL AS TABLE_CAT, n.nspname AS TABLE_SCHEM, c.relname AS
> >> TABLE_NAME, CASE n.nspname ~ '^pg_' OR n.nspname = 'information_schema'
> >> WHEN true THEN CASE WHEN n.nspname = 'pg_catalog' OR n.nspname =
> >> 'information_schema' THEN CASE c.relkind WHEN 'r' THEN 'SYSTEM TABLE'
> >> WHEN 'v' THEN 'SYSTEM VIEW' WHEN 'i' THEN 'SYSTEM INDEX' ELSE NULL
> >> END WHEN n.nspname = 'pg_toast' THEN CASE c.relkind WHEN 'r' THEN
> >> 'SYSTEM TOAST TABLE' WHEN 'i' THEN 'SYSTEM TOAST INDEX' ELSE NULL
> END
> >> ELSE CASE c.relkind WHEN 'r' THEN 'TEMPORARY TABLE' WHEN 'p' THEN
> >> 'TEMPORARY TABLE' WHEN 'i' THEN 'TEMPORARY INDEX' WHEN 'S' THEN
> >> 'TEMPORARY SEQUENCE' WHEN 'v' THEN 'TEMPORARY VIEW' ELSE NULL END
> >> END WHEN false THEN CASE c.relkind WHEN 'r' THEN 'TABLE' WHEN 'p'
> THEN
> >> 'PARTITIONED TABLE' WHEN 'i' THEN 'INDEX' WHEN 'S' THEN 'SEQUENCE'
> WHEN
> >> 'v' THEN 'VIEW' WHEN 'c' THEN 'TYPE' WHEN 'f' THEN 'FOREIGN TABLE'
> WHEN
> >> 'm' THEN 'MATERIALIZED VIEW' ELSE NULL END ELSE NULL END AS
> >> TABLE_TYPE, d.description AS REMARKS, '' as TYPE_CAT, '' as
> TYPE_SCHEM, ''
> >> as TYPE_NAME, '' AS SELF_REFERENCING_COL_NAME, '' AS REF_GENERATION
> FROM
> >> pg_catalog.pg_namespace n, pg_catalog.pg_class c LEFT JOIN
> >> pg_catalog.pg_description d ON (c.oid = d.objoid AND d.objsubid = 0)
> LEFT
> >> JOIN pg_catalog.pg_class dc ON (d.classoid=dc.oid AND
> >> dc.relname='pg_class') LEFT JOIN pg_catalog.pg_namespace dn ON
> >> (dn.oid=dc.relnamespace AND dn.nspname='pg_catalog') WHERE
> c.relnamespace
> >> = n.oid ORDER BY TABLE_TYPE,TABLE_SCHEM,TABLE_NAME
> >> ```
> >>
> >> The problem is that calcite can't generate code for WHEN CASE block (The
> >> query works if remove WHEN CASE block).
> >>
> >> ```
> >> Caused by: java.lang.NoSuchMethodException:
> >> org.apache.calcite.runtime.SqlFunctions.toChar(java.lang.Object)
> >> ```
> >>
> >> I wrote down the full exception description inside gist:
> >> https://gist.github.com/dssysolyatin/168c97f6033dd68b96822ce0ab48f84c
> >>
> >> Can someone point me to how to resolve this issue?
> >>
>
>
Re: Calcite can't generate code for one of the query
Posted by Julian Hyde <jh...@gmail.com>.
I guess you’re using ReflectiveSchema. I don’t think we support columns of (Java) type Character or char. You should convert relkind to a String and I think things will be better.
> On Jan 28, 2022, at 4:44 AM, Dmitry Sysolyatin <dm...@gmail.com> wrote:
>
> I found a way how to make the query work. But I don't understand the reason:
> If `relkind` is JavaType(char) (primitive type) then the query does not work
> If `relkind` is JavaType(java.lang.Character) then the query works.
>
>
> On Fri, Jan 28, 2022 at 12:59 PM Dmitry Sysolyatin <dm...@gmail.com>
> wrote:
>
>> Hi!
>>
>> I am implementing a wrapper over calcite in order to use it like Postgres
>> server. But I have a problem with one of a query that Postgres driver sends
>> to the server.
>>
>> The query:
>> ````
>> SELECT NULL AS TABLE_CAT, n.nspname AS TABLE_SCHEM, c.relname AS
>> TABLE_NAME, CASE n.nspname ~ '^pg_' OR n.nspname = 'information_schema'
>> WHEN true THEN CASE WHEN n.nspname = 'pg_catalog' OR n.nspname =
>> 'information_schema' THEN CASE c.relkind WHEN 'r' THEN 'SYSTEM TABLE'
>> WHEN 'v' THEN 'SYSTEM VIEW' WHEN 'i' THEN 'SYSTEM INDEX' ELSE NULL
>> END WHEN n.nspname = 'pg_toast' THEN CASE c.relkind WHEN 'r' THEN
>> 'SYSTEM TOAST TABLE' WHEN 'i' THEN 'SYSTEM TOAST INDEX' ELSE NULL END
>> ELSE CASE c.relkind WHEN 'r' THEN 'TEMPORARY TABLE' WHEN 'p' THEN
>> 'TEMPORARY TABLE' WHEN 'i' THEN 'TEMPORARY INDEX' WHEN 'S' THEN
>> 'TEMPORARY SEQUENCE' WHEN 'v' THEN 'TEMPORARY VIEW' ELSE NULL END
>> END WHEN false THEN CASE c.relkind WHEN 'r' THEN 'TABLE' WHEN 'p' THEN
>> 'PARTITIONED TABLE' WHEN 'i' THEN 'INDEX' WHEN 'S' THEN 'SEQUENCE' WHEN
>> 'v' THEN 'VIEW' WHEN 'c' THEN 'TYPE' WHEN 'f' THEN 'FOREIGN TABLE' WHEN
>> 'm' THEN 'MATERIALIZED VIEW' ELSE NULL END ELSE NULL END AS
>> TABLE_TYPE, d.description AS REMARKS, '' as TYPE_CAT, '' as TYPE_SCHEM, ''
>> as TYPE_NAME, '' AS SELF_REFERENCING_COL_NAME, '' AS REF_GENERATION FROM
>> pg_catalog.pg_namespace n, pg_catalog.pg_class c LEFT JOIN
>> pg_catalog.pg_description d ON (c.oid = d.objoid AND d.objsubid = 0) LEFT
>> JOIN pg_catalog.pg_class dc ON (d.classoid=dc.oid AND
>> dc.relname='pg_class') LEFT JOIN pg_catalog.pg_namespace dn ON
>> (dn.oid=dc.relnamespace AND dn.nspname='pg_catalog') WHERE c.relnamespace
>> = n.oid ORDER BY TABLE_TYPE,TABLE_SCHEM,TABLE_NAME
>> ```
>>
>> The problem is that calcite can't generate code for WHEN CASE block (The
>> query works if remove WHEN CASE block).
>>
>> ```
>> Caused by: java.lang.NoSuchMethodException:
>> org.apache.calcite.runtime.SqlFunctions.toChar(java.lang.Object)
>> ```
>>
>> I wrote down the full exception description inside gist:
>> https://gist.github.com/dssysolyatin/168c97f6033dd68b96822ce0ab48f84c
>>
>> Can someone point me to how to resolve this issue?
>>
Re: Calcite can't generate code for one of the query
Posted by Dmitry Sysolyatin <dm...@gmail.com>.
I found a way how to make the query work. But I don't understand the reason:
If `relkind` is JavaType(char) (primitive type) then the query does not work
If `relkind` is JavaType(java.lang.Character) then the query works.
On Fri, Jan 28, 2022 at 12:59 PM Dmitry Sysolyatin <dm...@gmail.com>
wrote:
> Hi!
>
> I am implementing a wrapper over calcite in order to use it like Postgres
> server. But I have a problem with one of a query that Postgres driver sends
> to the server.
>
> The query:
> ````
> SELECT NULL AS TABLE_CAT, n.nspname AS TABLE_SCHEM, c.relname AS
> TABLE_NAME, CASE n.nspname ~ '^pg_' OR n.nspname = 'information_schema'
> WHEN true THEN CASE WHEN n.nspname = 'pg_catalog' OR n.nspname =
> 'information_schema' THEN CASE c.relkind WHEN 'r' THEN 'SYSTEM TABLE'
> WHEN 'v' THEN 'SYSTEM VIEW' WHEN 'i' THEN 'SYSTEM INDEX' ELSE NULL
> END WHEN n.nspname = 'pg_toast' THEN CASE c.relkind WHEN 'r' THEN
> 'SYSTEM TOAST TABLE' WHEN 'i' THEN 'SYSTEM TOAST INDEX' ELSE NULL END
> ELSE CASE c.relkind WHEN 'r' THEN 'TEMPORARY TABLE' WHEN 'p' THEN
> 'TEMPORARY TABLE' WHEN 'i' THEN 'TEMPORARY INDEX' WHEN 'S' THEN
> 'TEMPORARY SEQUENCE' WHEN 'v' THEN 'TEMPORARY VIEW' ELSE NULL END
> END WHEN false THEN CASE c.relkind WHEN 'r' THEN 'TABLE' WHEN 'p' THEN
> 'PARTITIONED TABLE' WHEN 'i' THEN 'INDEX' WHEN 'S' THEN 'SEQUENCE' WHEN
> 'v' THEN 'VIEW' WHEN 'c' THEN 'TYPE' WHEN 'f' THEN 'FOREIGN TABLE' WHEN
> 'm' THEN 'MATERIALIZED VIEW' ELSE NULL END ELSE NULL END AS
> TABLE_TYPE, d.description AS REMARKS, '' as TYPE_CAT, '' as TYPE_SCHEM, ''
> as TYPE_NAME, '' AS SELF_REFERENCING_COL_NAME, '' AS REF_GENERATION FROM
> pg_catalog.pg_namespace n, pg_catalog.pg_class c LEFT JOIN
> pg_catalog.pg_description d ON (c.oid = d.objoid AND d.objsubid = 0) LEFT
> JOIN pg_catalog.pg_class dc ON (d.classoid=dc.oid AND
> dc.relname='pg_class') LEFT JOIN pg_catalog.pg_namespace dn ON
> (dn.oid=dc.relnamespace AND dn.nspname='pg_catalog') WHERE c.relnamespace
> = n.oid ORDER BY TABLE_TYPE,TABLE_SCHEM,TABLE_NAME
> ```
>
> The problem is that calcite can't generate code for WHEN CASE block (The
> query works if remove WHEN CASE block).
>
> ```
> Caused by: java.lang.NoSuchMethodException:
> org.apache.calcite.runtime.SqlFunctions.toChar(java.lang.Object)
> ```
>
> I wrote down the full exception description inside gist:
> https://gist.github.com/dssysolyatin/168c97f6033dd68b96822ce0ab48f84c
>
> Can someone point me to how to resolve this issue?
>