Skip to main content

ForeignDataWrapper

Trait ForeignDataWrapper 

Source
pub trait ForeignDataWrapper: Send + Sync {
    // Required methods
    fn kind(&self) -> &'static str;
    fn scan(
        &self,
        server_state: Option<&Arc<dyn WrapperState>>,
        table_options: &FdwOptions,
    ) -> Result<Vec<UnifiedRecord>, FdwError>;

    // Provided methods
    fn build_server_state(
        &self,
        _options: &FdwOptions,
    ) -> Result<Option<Arc<dyn WrapperState>>, FdwError> { ... }
    fn supports_pushdown(&self) -> bool { ... }
    fn estimated_row_count(
        &self,
        _server_state: Option<&Arc<dyn WrapperState>>,
        _table_options: &FdwOptions,
    ) -> Option<usize> { ... }
}
Expand description

Core trait every FDW implements.

Phase 3.2 is read-only — scan is mandatory; insert / delete are defaulted to “not supported” so wrappers can opt-in. Filter pushdown is also opt-in via supports_pushdown; the runtime checks that before handing the wrapper the predicate AST.

Required Methods§

Source

fn kind(&self) -> &'static str

Unique identifier for the wrapper kind (e.g. “csv”, “postgres”). Matches the FOREIGN DATA WRAPPER <name> clause in DDL.

Source

fn scan( &self, server_state: Option<&Arc<dyn WrapperState>>, table_options: &FdwOptions, ) -> Result<Vec<UnifiedRecord>, FdwError>

Stream rows from the foreign table. table_options merges the server’s options with the table’s options (table takes priority on conflicts). filter is opaque to the wrapper unless it advertises pushdown via supports_pushdown.

Provided Methods§

Source

fn build_server_state( &self, _options: &FdwOptions, ) -> Result<Option<Arc<dyn WrapperState>>, FdwError>

Validate + materialise a server’s options. Called once on CREATE SERVER and cached on ForeignServer. Wrappers that don’t need per-server state return Ok(None).

Source

fn supports_pushdown(&self) -> bool

Whether the wrapper can evaluate a SQL WHERE predicate natively. When true, the planner will hand the AST to scan_with_filter; when false, the runtime applies the filter after the scan.

Source

fn estimated_row_count( &self, _server_state: Option<&Arc<dyn WrapperState>>, _table_options: &FdwOptions, ) -> Option<usize>

Estimated row count — drives planner cost. None means the wrapper has no cheap way to estimate and the planner falls back to its default assumption.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§