supabase / supabase-js

An isomorphic Javascript client for Supabase. Query your Supabase database, subscribe to realtime events, upload and download files, browse typescript examples, invoke postgres functions via rpc, invoke supabase edge functions, query pgvector.
https://supabase.com
MIT License
2.86k stars 220 forks source link

Referencing missing column #930

Open ohrrkan opened 4 months ago

ohrrkan commented 4 months ago

@supabase/supabase-js": "^2.39.0" using Supabase CLI to [generate the types] "supabase": "^1.123.0"

Query the same referenced table multiple times work but give you a Typescript error as it expect an array.

to reproduce you can use the datasource (doc example)

create table
 users (id int8 primary key, name text);

 create table
   messages (
     sender_id int8 not null references users,
     receiver_id int8 not null references users,
     content text
   );

 insert into
   users (id, name)
 values
   (1, 'Kiran'),
   (2, 'Evan');

 insert into
   messages (sender_id, receiver_id, content)
 values
   (1, 2, '👋');

query :

const { data, error } = await supabase
  .from('messages')
  .select(`
    content,
    sender_id(name),
    receiver_id(name)
  `)

now using data[0].sender_id.name will work but will give you an typescript error. "sender_id: SelectQueryError<"Referencing missing column name">[];

Bypass temporary solution :

type patch = { content: text; sender_id: Tables<"users">; receiver_id: Tables<"users">}[];

const { data, error } = await supabase
  .from('messages')
  .select(`
    content,
    sender_id(name),
    receiver_id(name)
  `).returns<patch>()
dvsmc commented 3 months ago

Is there any PR which fixes those? I recently updated supabase-js version and generated new types and got similar issue, some database fields are not recognized anymore. I cant pinpoint the exact moment it stated to break tho.

Edit: For me this solved it - https://github.com/supabase/supabase-js/issues/974

nabilhayek commented 1 hour ago

Same problem for me even when switching to 2.39.3 image