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? >