O sistema estava gerando queries SQL corretas via IA, mas não as executava diretamente. Em vez disso, tentava fazer agrupamento manual, o que não funcionava para queries complexas com CASE WHEN, DATE_TRUNC, etc.
Foi criada uma função RPC no Supabase (execute_dynamic_sql) que permite executar queries SQL dinâmicas com segurança:
- ✅ Apenas permite queries SELECT
- ✅ Bloqueia comandos perigosos (DROP, DELETE, UPDATE, etc.)
- ✅ Respeita RLS (Row Level Security)
- ✅ Retorna resultados como JSON
-
Acesse o SQL Editor do Supabase:
-
IMPORTANTE: Se a função já existir, você precisa removê-la primeiro:
DROP FUNCTION IF EXISTS execute_dynamic_sql(TEXT);
-
Abra o arquivo
create_execute_dynamic_sql_rpc.sqle copie todo o conteúdo -
Cole no SQL Editor e clique em Run (ou pressione Ctrl+Enter)
-
Verifique se a função foi criada com sucesso:
SELECT proname, prosrc FROM pg_proc WHERE proname = 'execute_dynamic_sql';
Execute uma query de teste:
SELECT execute_dynamic_sql(
'SELECT CASE WHEN EXTRACT(MONTH FROM created_at) <= 6 THEN ''1º Semestre'' ELSE ''2º Semestre'' END AS semestre, COUNT(*) AS quantidade FROM companies GROUP BY semestre ORDER BY semestre'
);Deve retornar um JSON com os resultados agrupados por semestre.
A função usa SECURITY DEFINER, o que significa que executa com os privilégios do criador, mas ainda respeita RLS das tabelas. Isso garante que:
- Usuários só veem dados que têm permissão (via RLS)
- A função não pode ser usada para modificar dados
- Apenas queries SELECT são permitidas
O DatabaseQueryAgent agora:
- Prioriza a execução direta da SQL query gerada pela IA via RPC
- Usa fallback para métodos dinâmicos apenas se a RPC falhar
- Formata corretamente os resultados para visualizações
Agora, quando você perguntar:
"Compare o número de empresas cadastradas no primeiro semestre com o segundo semestre"
O sistema irá:
- ✅ A IA gerar a SQL query correta
- ✅ Executar a SQL diretamente via RPC
- ✅ Retornar os dados corretos agrupados por semestre
- ✅ Gerar visualizações apropriadas
- ✅ Responder de forma natural e interpretada
- Execute o script SQL no Supabase
- Verifique se está no schema correto (
public)
- Verifique se o usuário está autenticado
- Verifique as políticas RLS das tabelas
- A função bloqueia comandos perigosos (DROP, DELETE, etc.)
- Verifique se a query gerada pela IA é apenas SELECT
- Verifique se há dados na tabela
- Verifique se as políticas RLS permitem acesso aos dados
- Verifique os logs do console para ver a query SQL gerada