/** * SQL builder utilities for bulk mutations. * * Provides parameterized SQL generation for VALUES clauses, ON CONFLICT * clauses, and SET patches. Handles auto-batching when the parameter * count would exceed PostgreSQL's 32K limit. * * IMPORTANT: All mutation queries use `RETURNING ` instead of * `RETURNING *` to respect column-level SELECT grants. The caller is * responsible for doing a follow-up SELECT using the returned PKs to * resolve the full row through PostGraphile's grant-aware query pipeline. * See: https://github.com/pyramation/graphile-column-privileges-mutations */ export interface ColumnSpec { name: string; sqlType: string; } export interface InsertBatch { text: string; values: unknown[]; } /** * Builds parameterized INSERT ... VALUES SQL with optional ON CONFLICT clause. * Auto-splits into multiple batches when parameter count exceeds PG_MAX_PARAMS. * * Uses `RETURNING ` (typically primary key columns) instead * of `RETURNING *` to avoid permission errors with column-level SELECT grants. */ export declare function buildBulkInsertSQL(tableName: string, columns: ColumnSpec[], rows: Record[], returningColumns: string[], onConflict?: { conflictColumns?: string[]; action: 'IGNORE'; } | { conflictColumns: string[]; action: 'UPDATE'; updateColumns?: string[]; }): InsertBatch[]; /** * Builds a parameterized UPDATE ... SET ... WHERE SQL statement. * * Uses `RETURNING ` (typically primary key columns) instead * of `RETURNING *` to avoid permission errors with column-level SELECT grants. */ export declare function buildBulkUpdateSQL(tableName: string, patch: Record, columns: ColumnSpec[], returningColumns: string[], whereClause: string, whereParams: unknown[]): { text: string; values: unknown[]; }; /** * Builds a parameterized DELETE ... WHERE SQL statement. * * Uses `RETURNING ` (typically primary key columns) instead * of `RETURNING *` to avoid permission errors with column-level SELECT grants. */ export declare function buildBulkDeleteSQL(tableName: string, returningColumns: string[], whereClause: string, whereParams: unknown[]): { text: string; values: unknown[]; };