mmkal / pgkit

PostgreSQL🤝TypeScript monorepo. SQL client/admin UI/smart migrator/type generator/schema inspector
https://pgkit.dev
190 stars 25 forks source link

Typegen fails on unnest #413

Open tbillington opened 2 years ago

tbillington commented 2 years ago

Typegen fails on call with unnest. The output is Query is not typeable.

I would expect that in this case the types in the where clause should not matter to the typegen, since the columns are pulled straight from a table, not based on anything to do with the unpacked rows.

When I remove the where clause, the query typegens successfully.

slonik

const pairs: [string, string][] = ...;
sql`
select
  col_a,
  col_b,
  col_c
from
  data_table
where
  (col_a, col_b)
  = ANY(select col_a, col_b from ${sql.unnest(pairs, [
    'text',
    'text',
  ])})
`

generated sql

select
    col_a,
    col_b,
    col_c
from
    data_table
where
    (col_a, col_b)
    = ANY(select col_a, col_b from unnest($1::"text"[], $2::"text"[]))
mmkal commented 11 months ago

There's some logic that (tries to) convert all wheres into where true since where doesn't make a difference to the output type. But clearly it's tripping up on where clauses with complex values (even if they're not relevant).

I'll look into fixing that logic, but I also would like to add some kind of -- typegen-ignore-next-line directive which basically tells the tool to act as though the following line doesn't exist. That might be a workable escape hatch for this kind of thing too.