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.sysolya...@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?
>

Reply via email to