Selecto.Executor (Selecto v0.4.3)
Query execution engine for Selecto.
Handles execution of generated SQL queries through configured adapter or repo contexts, with proper error handling and connection management.
Link to this section Summary
Functions
Get connection statistics for monitoring.
Execute a query and return results with standardized error handling.
Execute a query expecting exactly one row, returning {:ok, row} or {:error, reason}.
Execute a query as a stream of {row, columns, aliases} tuples.
Execute query using a database adapter.
Execute query using connection pool.
Fallback execution when adapter-native repo execution is unavailable.
Execute query using an Ecto repository.
Execute a query and return results with metadata including SQL, params, and execution time.
Execute query using the default PostgreSQL adapter.
Validate connection before executing query.
Link to this section Functions
connection_info(selecto)
Get connection statistics for monitoring.
Returns information about the current connection state.
execute(selecto, opts \\ [])
@spec execute(Selecto.Types.t(), Selecto.Types.execute_options()) :: Selecto.Types.safe_execute_result()
Execute a query and return results with standardized error handling.
parameters
Parameters
selecto- The Selecto struct containing connection and query infoopts- Execution options (currently unused but reserved for future use)
returns
Returns
{:ok, {rows, columns, aliases}}- Successful execution with results{:error, %Selecto.Error{}}- Execution failure with detailed error
examples
Examples
case Selecto.Executor.execute(selecto) do
{:ok, {rows, columns, aliases}} ->
# Process successful results
handle_results(rows, columns, aliases)
{:error, error} ->
# Handle database error
Logger.error("Query failed: #{inspect(error)}")
end
execute_one(selecto, opts \\ [])
@spec execute_one(Selecto.Types.t(), Selecto.Types.execute_options()) :: Selecto.Types.safe_execute_one_result()
Execute a query expecting exactly one row, returning {:ok, row} or {:error, reason}.
Useful for queries that should return a single record (e.g., with LIMIT 1 or aggregate functions). Returns an error if zero rows or multiple rows are returned.
examples
Examples
case Selecto.Executor.execute_one(selecto) do
{:ok, row} ->
# Handle single row result
process_single_result(row)
{:error, :no_results} ->
# Handle case where no rows were found
{:error, :multiple_results} ->
# Handle case where multiple rows were found
{:error, error} ->
# Handle database or other errors
end
execute_stream(selecto, opts \\ [])
@spec execute_stream( Selecto.Types.t(), keyword() ) :: Selecto.Types.safe_execute_stream_result()
Execute a query as a stream of {row, columns, aliases} tuples.
Current stream support:
- The default PostgreSQL adapter via adapter-owned stream hooks
- Custom adapters that implement
stream/4
execute_with_adapter(adapter, connection, query, params, aliases)
Execute query using a database adapter.
This function delegates to the adapter's execute/4 function, allowing for different database types like SQLite, MySQL, etc.
execute_with_connection_pool(pool_ref, query, params, aliases)
Execute query using connection pool.
execute_with_ecto_fallback(repo, query, params, aliases)
Fallback execution when adapter-native repo execution is unavailable.
Creates a temporary adapter-managed connection from repo configuration.
execute_with_ecto_repo(repo, query, params, aliases)
Execute query using an Ecto repository.
Routes repository execution through the configured adapter.
execute_with_metadata(selecto, opts \\ [])
@spec execute_with_metadata(Selecto.Types.t(), Selecto.Types.execute_options()) :: {:ok, Selecto.Types.execute_result(), map()} | {:error, Selecto.Error.t()}
Execute a query and return results with metadata including SQL, params, and execution time.
parameters
Parameters
selecto- The Selecto struct containing connection and query infoopts- Execution options
returns
Returns
{:ok, result, metadata}- Successful execution with results and metadata{:error, error}- Execution failure with detailed error
The metadata map includes:
:sql- The generated SQL query string:params- The query parameters:execution_time- Query execution time in milliseconds
examples
Examples
case Selecto.Executor.execute_with_metadata(selecto) do
{:ok, {rows, columns, aliases}, _meta} ->
# Process successful results with metadata
handle_results(rows, columns, aliases)
{:error, error} ->
# Handle database error
Logger.error("Query failed: #{inspect(error)}")
end
execute_with_postgrex(conn, query, params, aliases)
Execute query using the default PostgreSQL adapter.
validate_connection(selecto)
Validate connection before executing query.
Returns :ok if connection is valid, {:error, reason} otherwise.