supabase / supabase-flutter

Flutter integration for Supabase. This package makes it simple for developers to build secure and scalable products.
https://supabase.com/
MIT License
656 stars 154 forks source link

single() returns Invalid media type: expected no more input. #921

Open Mykyta-Chernenko opened 1 month ago

Mykyta-Chernenko commented 1 month ago

Describe the bug When single() doesn't find anything, I get "Invalid media type: expected no more input."

full error flutter: Event: MatchError, Properties: {error: Error on line 1, column 32: Invalid media type: expected no more input. ╷ 1 │ application/json; charset=utf-8,application/vnd.pgrst.object+json; charset=utf-8 │ ^ ╵} flutter: Error fetching match: Error on line 1, column 32: Invalid media type: expected no more input. ╷ 1 │ application/json; charset=utf-8,application/vnd.pgrst.object+json; charset=utf-8 │ ^ ╵

To Reproduce Steps to reproduce the behavior:

  1. install supabase_flutter: ^2.5.1
  2. try to call do something as await supabase .from('profile') .select() .eq('id', 'gibberish') .single();
  3. See error

Expected behavior Some ordinary exception as "not found"

Version (please complete the following information): ├── supabase_flutter 2.5.1 │ ├── supabase 2.1.1 │ │ ├── functions_client 2.0.0 │ │ ├── gotrue 2.6.0 │ │ ├── postgrest 2.1.1 │ │ ├── realtime_client 2.0.4 │ │ ├── storage_client 2.0.1

allipiopereira commented 1 month ago

I'm also having the same error.

supabase: 1.11.11 supabase_flutter: 1.10.24

Vinzent03 commented 1 month ago

Is that all stacktrace you get? Shouldn't there be some info about in which file and line it occurs?

Mykyta-Chernenko commented 1 month ago

unfortunately and surprisingly, this is the whole stack, I don't get anything else. UPD

sorry, my bad, forgot to rethrow, here is the whole stack.

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Error on line 1, column 32: Invalid media type: expected no more input. ╷ 1 │ application/json; charset=utf-8,application/vnd.pgrst.object+json; charset=utf-8 │ ^ ╵

0 wrapFormatException (package:http_parser/src/utils.dart:15:5)

1 new MediaType.parse (package:http_parser/src/media_type.dart:46:7)

2 _contentTypeForHeaders (package:http/src/response.dart:79:45)

3 _encodingForHeaders (package:http/src/response.dart:72:24)

4 Response.body (package:http/src/response.dart:28:22)

5 PostgrestBuilder._parseResponse (package:postgrest/src/postgrest_builder.dart:269:31)

6 PostgrestBuilder._execute (package:postgrest/src/postgrest_builder.dart:164:14)

#7 PostgrestBuilder.then (package:postgrest/src/postgrest_builder.dart:372:24) > Is that all stacktrace you get? Shouldn't there be some info about in which file and line it occurs?
Smartiiez commented 1 month ago

I think you have to use : await supabase.from('profile').select().eq('id', 'gibberish').maybeSingle();

Mykyta-Chernenko commented 1 month ago

I think you have to use : await supabase.from('profile').select().eq('id', 'gibberish').maybeSingle();

It's possible temporary solution

but with 30 .single() queries in prod, it was almost impossible to debug the first time where the issue happened at/neither to catch it

dshukertjr commented 1 month ago

@Mykyta-Chernenko @allipiopereira Hmm, I am unable to reproduce this issue. When I use .single() and query in a way that it returns 0 rows, I get the following error.

PostgrestException(message: JSON object requested, multiple (or no) rows returned, code: PGRST116, details: The result contains 0 rows, hint: null).

Are you using the hosted version of Supabase? Does the same issue happen on a fresh Supabase instance?

Mykyta-Chernenko commented 3 weeks ago

@Mykyta-Chernenko @allipiopereira Hmm, I am unable to reproduce this issue. When I use .single() and query in a way that it returns 0 rows, I get the following error.

PostgrestException(message: JSON object requested, multiple (or no) rows returned, code: PGRST116, details: The result contains 0 rows, hint: null).

Are you using the hosted version of Supabase? Does the same issue happen on a fresh Supabase instance?

I get the error like this.

   final response = await supabase
        .from('app_settings')
        .select('review_version_ios, review_version_android')
        .single();

    id is non-existent

    I get 

    [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Error on line 1, column 32: Invalid media type: expected no more input.
  ╷
1 │ application/json; charset=utf-8,application/vnd.pgrst.object+json; charset=utf-8
  │                                ^
  ╵
#0      wrapFormatException (package:http_parser/src/utils.dart:15:5)
#1      new MediaType.parse (package:http_parser/src/media_type.dart:46:7)
#2      _contentTypeForHeaders (package:http/src/response.dart:79:45)
#3      _encodingForHeaders (package:http/src/response.dart:72:24)
#4      Response.body (package:http/src/response.dart:28:22)
#5      PostgrestBuilder._parseResponse (package:postgrest/src/postgrest_builder.dart:269:31)
#6      PostgrestBuilder._execute (package:postgrest/src/postgrest_builder.dart:164:14)
<asynchronous suspension>
#7      PostgrestBuilder.then (package:postgrest/src/postgrest_builder.dart:372:24)
<asynchronous suspension>

I use supabase hosted version.

I tried to restart the db, the issue is still there

I created a new db with the minimum migration, the issue is still there

here is the migration I applied to the fresh db

-- Migration for the app_settings table
create table if not exists app_settings
(
    id                     serial primary key,
    review_version         text not null,
    review_version_android text not null,
    review_version_ios     text not null,
    version                text not null
);

I use Frankfurt region.

Thanks for you help!

Dosenbiiir commented 3 weeks ago

I get the same error message, so I can confirm that. Also I get the same message if .single() is used and multiple results are returned. I tested supabase_flutter: ^2.3.4 and ^2.5.3.

blank124 commented 1 week ago

Having same issue

dshukertjr commented 1 week ago

Anyone facing this issue, would you be able to let me know what version of PostgREST you are running on the Supabase instance?

Mykyta-Chernenko commented 1 week ago

Anyone facing this issue, would you be able to let me know what version of PostgREST you are running on the Supabase instance?

Auth version 2.152.1 PostgREST version 12.0.2 Postgres version 15.1.1.44

dshukertjr commented 1 week ago

Hmm, I aligned the PostgREST version, but am still unable to reproduce the issue.

Is anyone willing to share their Supabase URL and Anon key so that I can make the query on my end to dig into this issue? Feel free to DM me on Twitter if you are not comfortable sharing them here. https://x.com/dshukertjr

Mykyta-Chernenko commented 1 week ago

Hmm, I aligned the PostgREST version, but am still unable to reproduce the issue.

Is anyone willing to share their Supabase URL and Anon key so that I can make the query on my end to dig into this issue? Feel free to DM me on Twitter if you are not comfortable sharing them here. https://x.com/dshukertjr

sent over twitter

dshukertjr commented 1 week ago

@Mykyta-Chernenko Still unable to reproduce this issue. I am getting the following response performing the following sample query that you have shared on an iOS simulator.

PostgrestException(message: JSON object requested, multiple (or no) rows returned, code: PGRST116, details: The result contains 0 rows, hint: null)
final response = await supabase
        .from('app_settings')
        .select('review_version_ios, review_version_android')
        .single();

I wonder what the difference between your environment and my environment could be. What platform have you tried? I have tried iOS and web, and didn't get the error that you are facing on either one of them.