export type DbFlavor = "postgresql" | "greenplum"; export interface ConnectResult { version: string; flavor: DbFlavor; } export interface ConnectionConfig { id: string; name: string; host: string; port: number; user: string; password: string; database: string; ssl_mode?: string; color?: string; environment?: string; } export interface QueryResult { columns: string[]; types: string[]; rows: unknown[][]; row_count: number; execution_time_ms: number; } export interface PaginatedQueryResult extends QueryResult { total_rows: number; page: number; page_size: number; } export interface SchemaObject { name: string; object_type: string; schema: string; row_count?: number; size_bytes?: number; } export interface ColumnDetail { column_name: string; data_type: string; is_nullable: boolean; column_default: string | null; is_identity: boolean; } export interface ColumnInfo { name: string; data_type: string; is_nullable: boolean; column_default: string | null; ordinal_position: number; character_maximum_length: number | null; is_primary_key: boolean; comment: string | null; } export interface ConstraintInfo { name: string; constraint_type: string; columns: string[]; referenced_schema: string | null; referenced_table: string | null; referenced_columns: string[] | null; update_rule: string | null; delete_rule: string | null; } export interface IndexInfo { name: string; definition: string; is_unique: boolean; is_primary: boolean; } export interface HistoryEntry { id: string; connection_id: string; connection_name: string; database: string; sql: string; status: string; error_message?: string; row_count?: number; execution_time_ms: number; executed_at: string; } export interface ExplainNode { "Node Type": string; "Relation Name"?: string; "Schema"?: string; "Alias"?: string; "Startup Cost": number; "Total Cost": number; "Plan Rows": number; "Plan Width": number; "Actual Startup Time"?: number; "Actual Total Time"?: number; "Actual Rows"?: number; "Actual Loops"?: number; "Shared Hit Blocks"?: number; "Shared Read Blocks"?: number; "Filter"?: string; "Join Type"?: string; "Index Name"?: string; "Index Cond"?: string; "Hash Cond"?: string; "Sort Key"?: string[]; Plans?: ExplainNode[]; [key: string]: unknown; } export interface ExplainResult { Plan: ExplainNode; "Planning Time": number; "Execution Time": number; } export interface DatabaseInfo { name: string; owner: string; encoding: string; collation: string; ctype: string; tablespace: string; connection_limit: number; size: string; description: string | null; } export interface CreateDatabaseParams { name: string; owner?: string; template?: string; encoding?: string; tablespace?: string; connection_limit?: number; } export interface RoleInfo { name: string; is_superuser: boolean; can_login: boolean; can_create_db: boolean; can_create_role: boolean; inherit: boolean; is_replication: boolean; connection_limit: number; password_set: boolean; valid_until: string | null; member_of: string[]; members: string[]; description: string | null; } export interface CreateRoleParams { name: string; password?: string; login: boolean; superuser: boolean; createdb: boolean; createrole: boolean; inherit: boolean; replication: boolean; connection_limit?: number; valid_until?: string; in_roles: string[]; } export interface AlterRoleParams { name: string; password?: string; login?: boolean; superuser?: boolean; createdb?: boolean; createrole?: boolean; inherit?: boolean; replication?: boolean; connection_limit?: number; valid_until?: string; rename_to?: string; } export interface TablePrivilege { grantee: string; table_schema: string; table_name: string; privilege_type: string; is_grantable: boolean; } export interface GrantRevokeParams { action: string; privileges: string[]; object_type: string; object_name: string; role_name: string; with_grant_option: boolean; } export interface RoleMembershipParams { action: string; role_name: string; member_name: string; } export interface SessionInfo { pid: number; usename: string | null; datname: string | null; state: string | null; query: string | null; query_start: string | null; wait_event_type: string | null; wait_event: string | null; client_addr: string | null; } export interface SavedQuery { id: string; name: string; sql: string; connection_id?: string; created_at: string; } export type AiProvider = "ollama" | "openai" | "anthropic"; export interface AiSettings { provider: AiProvider; ollama_url: string; openai_api_key?: string; anthropic_api_key?: string; model: string; } export interface OllamaModel { name: string; } // Entity Lookup export interface LookupTableMatch { schema: string; table: string; column_type: string; columns: string[]; types: string[]; rows: unknown[][]; row_count: number; total_count: number; } export interface LookupDatabaseResult { database: string; tables: LookupTableMatch[]; error: string | null; search_time_ms: number; } export interface EntityLookupResult { column_name: string; value: string; databases: LookupDatabaseResult[]; total_databases_searched: number; total_tables_matched: number; total_rows_found: number; total_time_ms: number; } export interface LookupProgress { lookup_id: string; database: string; status: string; tables_found: number; rows_found: number; error: string | null; completed: number; total: number; } export interface TriggerInfo { name: string; event: string; timing: string; orientation: string; function_name: string; is_enabled: boolean; definition: string; } export interface ErdColumn { name: string; data_type: string; is_nullable: boolean; is_primary_key: boolean; } export interface ErdTable { schema: string; name: string; columns: ErdColumn[]; } export interface ErdRelationship { constraint_name: string; source_schema: string; source_table: string; source_columns: string[]; target_schema: string; target_table: string; target_columns: string[]; update_rule: string; delete_rule: string; } export interface ErdData { tables: ErdTable[]; relationships: ErdRelationship[]; } // App Settings export type DockerHost = "local" | "remote"; export interface McpSettings { enabled: boolean; port: number; } export interface DockerSettings { host: DockerHost; remote_url?: string; } export interface AppSettings { mcp: McpSettings; docker: DockerSettings; } export interface McpStatus { enabled: boolean; port: number; running: boolean; } // Docker export interface DockerStatus { installed: boolean; daemon_running: boolean; version: string | null; error: string | null; } export type CloneMode = "schema_only" | "full_clone" | "sample_data"; export interface CloneToDockerParams { source_connection_id: string; source_database: string; container_name: string; pg_version: string; host_port: number | null; clone_mode: CloneMode; sample_rows: number | null; postgres_password: string | null; } export interface CloneProgress { clone_id: string; stage: string; percent: number; message: string; detail: string | null; } export interface TuskContainer { container_id: string; name: string; status: string; host_port: number; pg_version: string; source_database: string | null; source_connection: string | null; created_at: string | null; } export interface CloneResult { container: TuskContainer; connection_id: string; connection_url: string; } export type TabType = "query" | "table" | "structure" | "roles" | "sessions" | "lookup" | "erd"; export interface Tab { id: string; type: TabType; title: string; connectionId: string; database?: string; schema?: string; table?: string; sql?: string; roleName?: string; lookupColumn?: string; lookupValue?: string; }