I created this stored function to retrieve my data
CREATE OR REPLACE FUNCTION generate_word_data(word_input VARCHAR(255))
RETURNS JSONB AS
$$
DECLARE
word_record RECORD;
phonetic_record RECORD;
meaning_record RECORD;
synonym_record RECORD;
antonym_record RECORD;
word_data JSON;
phonetics_array JSON[];
meanings_array JSON[];
synonyms_array JSON[] := '{}'; -- Initialize the array
antonyms_array JSON[] := '{}'; -- Initialize the array
BEGIN
-- Error handling
BEGIN
-- Fetch word details
SELECT w.word, w.phonetic
INTO word_record
FROM public.word w
WHERE w.word = word_input;
-- Fetch phonetic details
FOR phonetic_record IN SELECT p.text, p.audio FROM public.phonetics p WHERE p.word_id = (SELECT word_id FROM public.word WHERE word = word_input)
LOOP
IF phonetic_record.text IS NOT NULL OR phonetic_record.audio IS NOT NULL THEN
phonetics_array := array_append(phonetics_array, json_build_object('text', phonetic_record.text, 'audio', phonetic_record.audio)::JSON);
END IF;
END LOOP;
-- Fetch meanings details
FOR meaning_record IN SELECT partofspeech, definition, example FROM public.meanings WHERE word_id = (SELECT word_id FROM public.word WHERE word = word_input)
LOOP
-- Reset arrays for synonyms and antonyms
synonyms_array := '{}';
antonyms_array := '{}';
-- Fetch synonyms for each meaning
FOR synonym_record IN SELECT s.synonym FROM public.synonyms s WHERE s.meaning_id IN (SELECT meaning_id FROM public.meanings WHERE word_id = (SELECT word_id FROM public.word WHERE word = word_input))
LOOP
IF synonym_record.synonym IS NOT NULL THEN
synonyms_array := array_append(synonyms_array, json_build_object('synonym', synonym_record.synonym)::JSON);
END IF;
END LOOP;
-- Fetch antonyms for each meaning
FOR antonym_record IN SELECT a.antonym FROM public.antonyms a WHERE a.meaning_id IN (SELECT meaning_id FROM public.meanings WHERE word_id = (SELECT word_id FROM public.word WHERE word = word_input))
LOOP
IF antonym_record.antonym IS NOT NULL THEN
antonyms_array := array_append(antonyms_array, json_build_object('antonym', antonym_record.antonym)::JSON);
END IF;
END LOOP;
-- Construct JSON object for each meaning
IF meaning_record.partofspeech IS NOT NULL OR meaning_record.definition IS NOT NULL OR meaning_record.example IS NOT NULL THEN
meanings_array := array_append(meanings_array, json_build_object(
'partOfSpeech', meaning_record.partofspeech,
'definitions', json_build_array(
json_build_object('definition', meaning_record.definition, 'synonyms', synonyms_array, 'antonyms', antonyms_array)
)
));
END IF;
END LOOP;
-- Construct final JSON object
word_data := json_build_object(
'word', word_record.word,
'phonetic', word_record.phonetic,
'phonetics', phonetics_array,
'meanings', meanings_array
);
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE EXCEPTION 'Word not found: %', word_input;
WHEN TOO_MANY_ROWS THEN
RAISE EXCEPTION 'Multiple entries found for word: %', word_input;
WHEN OTHERS THEN
RAISE EXCEPTION 'Error fetching data for word: %', word_input;
END;
RETURN word_data;
END;
$$
LANGUAGE plpgsql;
when i execute this stored function in supabase sql editor using
SELECT generate_word_data ('mobile');
i get this output
{"word":"mobile","meanings":[{"definitions":[{"antonyms":[{"antonym":"fixed"},{"antonym":"immobile"},{"antonym":"sessile"},{"antonym":"stationary"}],"synonyms":[{"synonym":"excitable"},{"synonym":"fickle"},{"synonym":"cell"},{"synonym":"cell phone"},{"synonym":"cellphone"},{"synonym":"cellular"},{"synonym":"cellular mobile"},{"synonym":"cellular phone"},{"synonym":"cellular telephone"},{"synonym":"handphone"}],"definition":"A kinetic sculpture or decorative arrangement made of items hanging so that they can move independently from each other."}],"partOfSpeech":"noun"},{"definitions":[{"antonyms":[{"antonym":"fixed"},{"antonym":"immobile"},{"antonym":"sessile"},{"antonym":"stationary"}],"synonyms":[{"synonym":"excitable"},{"synonym":"fickle"},{"synonym":"cell"},{"synonym":"cell phone"},{"synonym":"cellphone"},{"synonym":"cellular"},{"synonym":"cellular mobile"},{"synonym":"cellular phone"},{"synonym":"cellular telephone"},{"synonym":"handphone"}],"definition":"The internet accessed via mobile devices."}],"partOfSpeech":"noun"},{"definitions":[{"antonyms":[{"antonym":"fixed"},{"antonym":"immobile"},{"antonym":"sessile"},{"antonym":"stationary"}],"synonyms":[{"synonym":"excitable"},{"synonym":"fickle"},{"synonym":"cell"},{"synonym":"cell phone"},{"synonym":"cellphone"},{"synonym":"cellular"},{"synonym":"cellular mobile"},{"synonym":"cellular phone"},{"synonym":"cellular telephone"},{"synonym":"handphone"}],"definition":"Something that can move."}],"partOfSpeech":"noun"},{"definitions":[{"antonyms":[{"antonym":"fixed"},{"antonym":"immobile"},{"antonym":"sessile"},{"antonym":"stationary"}],"synonyms":[{"synonym":"excitable"},{"synonym":"fickle"},{"synonym":"cell"},{"synonym":"cell phone"},{"synonym":"cellphone"},{"synonym":"cellular"},{"synonym":"cellular mobile"},{"synonym":"cellular phone"},{"synonym":"cellular telephone"},{"synonym":"handphone"}],"definition":"Capable of being moved, especially on wheels."}],"partOfSpeech":"adjective"},{"definitions":[{"antonyms":[{"antonym":"fixed"},{"antonym":"immobile"},{"antonym":"sessile"},{"antonym":"stationary"}],"synonyms":[{"synonym":"excitable"},{"synonym":"fickle"},{"synonym":"cell"},{"synonym":"cell phone"},{"synonym":"cellphone"},{"synonym":"cellular"},{"synonym":"cellular mobile"},{"synonym":"cellular phone"},{"synonym":"cellular telephone"},{"synonym":"handphone"}],"definition":"Pertaining to or by agency of mobile phones."}],"partOfSpeech":"adjective"},{"definitions":[{"antonyms":[{"antonym":"fixed"},{"antonym":"immobile"},{"antonym":"sessile"},{"antonym":"stationary"}],"synonyms":[{"synonym":"excitable"},{"synonym":"fickle"},{"synonym":"cell"},{"synonym":"cell phone"},{"synonym":"cellphone"},{"synonym":"cellular"},{"synonym":"cellular mobile"},{"synonym":"cellular phone"},{"synonym":"cellular telephone"},{"synonym":"handphone"}],"definition":"Characterized by an extreme degree of fluidity; moving or flowing with great freedom."}],"partOfSpeech":"adjective"},{"definitions":[{"antonyms":[{"antonym":"fixed"},{"antonym":"immobile"},{"antonym":"sessile"},{"antonym":"stationary"}],"synonyms":[{"synonym":"excitable"},{"synonym":"fickle"},{"synonym":"cell"},{"synonym":"cell phone"},{"synonym":"cellphone"},{"synonym":"cellular"},{"synonym":"cellular mobile"},{"synonym":"cellular phone"},{"synonym":"cellular telephone"},{"synonym":"handphone"}],"definition":"Easily moved in feeling, purpose, or direction; excitable; changeable; fickle."}],"partOfSpeech":"adjective"},{"definitions":[{"antonyms":[{"antonym":"fixed"},{"antonym":"immobile"},{"antonym":"sessile"},{"antonym":"stationary"}],"synonyms":[{"synonym":"excitable"},{"synonym":"fickle"},{"synonym":"cell"},{"synonym":"cell phone"},{"synonym":"cellphone"},{"synonym":"cellular"},{"synonym":"cellular mobile"},{"synonym":"cellular phone"},{"synonym":"cellular telephone"},{"synonym":"handphone"}],"definition":"Changing in appearance and expression under the influence of the mind."}],"partOfSpeech":"adjective"},{"definitions":[{"antonyms":[{"antonym":"fixed"},{"antonym":"immobile"},{"antonym":"sessile"},{"antonym":"stationary"}],"synonyms":[{"synonym":"excitable"},{"synonym":"fickle"},{"synonym":"cell"},{"synonym":"cell phone"},{"synonym":"cellphone"},{"synonym":"cellular"},{"synonym":"cellular mobile"},{"synonym":"cellular phone"},{"synonym":"cellular telephone"},{"synonym":"handphone"}],"definition":"Capable of being moved, aroused, or excited; capable of spontaneous movement."}],"partOfSpeech":"adjective"},{"definitions":[{"antonyms":[{"antonym":"fixed"},{"antonym":"immobile"},{"antonym":"sessile"},{"antonym":"stationary"}],"synonyms":[{"synonym":"excitable"},{"synonym":"fickle"},{"synonym":"cell"},{"synonym":"cell phone"},{"synonym":"cellphone"},{"synonym":"cellular"},{"synonym":"cellular mobile"},{"synonym":"cellular phone"},{"synonym":"cellular telephone"},{"synonym":"handphone"}],"definition":"A portable telephone that connects with the telephone network over radio wave transmission."}],"partOfSpeech":"noun"}],"phonetic":"/ˈməʊbaɪl/","phonetics":[{"text":"/ˈməʊbaɪl/","audio":"https://api.dictionaryapi.dev/media/pronunciations/en/mobile-uk.mp3"},{"text":"/ˈmoʊbaɪl/","audio":null}]}
but when i run it in my code in flutter
import 'dart:convert';
import 'package:dictionary/models/response_model.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
class API {
static Future<ResponseModel> fetchMeaning(String word) async {
// Call the Supabase function using the client provided by supabase_flutter
final response = await Supabase.instance.client
.rpc('generate_word_data', params: {'word_input': word});
print(response);
// Check if the response is successful
if (response.error == null) {
final data = response.data as List<dynamic>;
return ResponseModel.fromJson(data[0]);
} else {
// Throw an exception if the response is not successful
throw Exception('Failed to load meaning: ${response.error}');
}
}
}
i get this output {word: null, meanings: null, phonetic: null, phonetics: null}
why is it that am getting null values when there is data in my tables, please help me.
I have tried running the rpc using postman, but i still get this:
{
"word": null,
"meanings": null,
"phonetic": null,
"phonetics": null
}
but there is data in my tables