sabiql 1.6.2

A fast, driver-less TUI for browsing and editing PostgreSQL databases
Documentation
//! Side effects returned by the reducer, executed by EffectRunner.

use crate::app::action::Action;
use crate::domain::Table;
use crate::domain::connection::{ConnectionId, SslMode};

#[derive(Debug, Clone)]
pub enum Effect {
    Render,

    SaveAndConnect {
        id: Option<ConnectionId>,
        name: String,
        host: String,
        port: u16,
        database: String,
        user: String,
        password: String,
        ssl_mode: SslMode,
    },

    LoadConnectionForEdit {
        id: ConnectionId,
    },

    LoadConnections,

    DeleteConnection {
        id: ConnectionId,
    },

    CacheInvalidate {
        dsn: String,
    },

    FetchMetadata {
        dsn: String,
    },

    /// Updates state.table_detail on completion
    FetchTableDetail {
        dsn: String,
        schema: String,
        table: String,
        generation: u64,
    },
    /// Only caches in completion_engine, does NOT update state.table_detail
    PrefetchTableDetail {
        dsn: String,
        schema: String,
        table: String,
    },
    ProcessPrefetchQueue,
    DelayedProcessPrefetchQueue {
        delay_secs: u64,
    },

    ExecutePreview {
        dsn: String,
        schema: String,
        table: String,
        generation: u64,
        limit: usize,
        offset: usize,
        target_page: usize,
    },
    ExecuteAdhoc {
        dsn: String,
        query: String,
    },
    ExecuteWrite {
        dsn: String,
        query: String,
    },

    CacheTableInCompletionEngine {
        qualified_name: String,
        table: Box<Table>,
    },
    SmartErRefresh {
        dsn: String,
        run_id: u64,
    },
    EvictTablesFromCompletionCache {
        tables: Vec<String>,
    },
    ClearCompletionEngineCache,
    ResizeCompletionCache {
        capacity: usize,
    },

    CopyToClipboard {
        content: String,
        on_success: Option<Action>,
        on_failure: Option<Action>,
    },

    GenerateErDiagramFromCache {
        total_tables: usize,
        project_name: String,
        target_tables: Vec<String>,
    },
    WriteErFailureLog {
        failed_tables: Vec<(String, String)>,
    },
    ExtractFkNeighbors {
        seed_tables: Vec<String>,
    },

    /// Triggers completion: fetches missing tables and updates candidates
    TriggerCompletion,

    /// Executes effects in order. Each effect awaits before starting the next,
    /// but spawned async tasks (e.g., FetchMetadata) may complete out of order.
    Sequence(Vec<Effect>),

    /// Dispatch actions to be processed by the reducer
    DispatchActions(Vec<Action>),

    SwitchConnection {
        connection_index: usize,
    },

    SwitchToService {
        service_index: usize,
    },
}