Selecto.Executor (Selecto v0.3.15)
Query execution engine for Selecto.
Handles the execution of generated SQL queries against Postgrex connections or Ecto repositories, 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 Ecto.Adapters.SQL is not available.
Execute query using an Ecto repository.
Execute a query and return results with metadata including SQL, params, and execution time.
Execute query using direct Postgrex connection or connection pool.
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:
- PostgreSQL direct connections (
pidor registered name) via server-side cursors - 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 Ecto.Adapters.SQL is not available.
Creates a temporary Postgrex connection using Ecto repo configuration.
execute_with_ecto_repo(repo, query, params, aliases)
Execute query using an Ecto repository.
Attempts to use Ecto.Adapters.SQL.query first, falling back to direct Postgrex connection if Ecto is not available.
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 direct Postgrex connection or connection pool.
validate_connection(selecto)
Validate connection before executing query.
Returns :ok if connection is valid, {:error, reason} otherwise.