import { getViewDefinitionSql } from '@supabase/pg-meta' import { useQuery } from '@tanstack/react-query' import { databaseKeys } from './keys' import { executeSql } from '@/data/sql/execute-sql-mutation' import { ResponseError, UseCustomQueryOptions } from '@/types' type GetViewDefinitionArgs = { id?: number includeCreateStatement?: boolean } export type ViewDefinitionVariables = GetViewDefinitionArgs & { projectRef?: string connectionString?: string | null } export async function getViewDefinition( { projectRef, connectionString, id, includeCreateStatement }: ViewDefinitionVariables, signal?: AbortSignal ) { if (!id) throw new Error('View ID is required') const sql = getViewDefinitionSql({ id, includeCreateStatement }) const { result } = await executeSql( { projectRef, connectionString, sql, queryKey: ['view-definition', id, includeCreateStatement ?? false], }, signal ) return result[0].definition.trim() } export type ViewDefinitionData = string export type ViewDefinitionError = ResponseError export const useViewDefinitionQuery = ( { projectRef, connectionString, id, includeCreateStatement }: ViewDefinitionVariables, { enabled = true, ...options }: UseCustomQueryOptions = {} ) => useQuery({ queryKey: databaseKeys.viewDefinition(projectRef, id, includeCreateStatement), queryFn: ({ signal }) => getViewDefinition({ projectRef, connectionString, id, includeCreateStatement }, signal), enabled: enabled && typeof projectRef !== 'undefined' && typeof id !== 'undefined' && !isNaN(id), ...options, })