Packages

EctoRawSQLHelpers aims to improve raw SQL support in Ecto by providing helper functions, such as: - Named parameters support - Response parsing (getting query results as lists of maps, number of rows affected on statements, etc) - Stream support for dealing with big result sets

Current section

Files

Jump to
Raw

lib/SQL.ex

defmodule EctoRawSQLHelpers.SQL do
import PipeOperators.SkipOnErrorPipe
alias EctoRawSQLHelpers.DatabaseResponseParser
alias EctoRawSQLHelpers.AdapterSQLExecutor
def query(repo_or_pid, sql, params \\ [], options \\ []) do
AdapterSQLExecutor.adapter_query(repo_or_pid, sql, params, options)
~> DatabaseResponseParser.rows_as_maps(options)
~> Enum.to_list()
end
def query_get_single_result(repo_or_pid, sql, params \\ [], options \\ []) do
query(repo_or_pid, sql, params, options)
~> case do
[first | []] -> first
[_first | tail] -> {:error, "query_get_single_result_as_map returned more than one row, #{Enum.count(tail) + 1} rows returned"}
_ -> nil
end
end
def affecting_statement(repo_or_pid, sql, params \\ [], options \\ []) do
AdapterSQLExecutor.adapter_query(repo_or_pid, sql, params, options)
~> DatabaseResponseParser.number_of_affected_rows
end
def affecting_statement_and_return_rows(repo_or_pid, sql, params \\ [], options \\ []) do
AdapterSQLExecutor.adapter_query(repo_or_pid, sql, params, options)
~> DatabaseResponseParser.rows_as_maps(options)
~> Enum.to_list()
end
def affecting_statement_and_return_single_row(repo_or_pid, sql, params \\ [], options \\ []) do
affecting_statement_and_return_rows(repo_or_pid, sql, params, options)
~> case do
[first | []] -> first
[_first | tail] -> {:error, "affecting_statement_and_return_single_row returned more than one row, #{Enum.count(tail) + 1} rows returned"}
_ -> nil
end
end
end