Current section

Files

Jump to
ecto_gen priv eex_templates routine_parser.ex.eex
Raw

priv/eex_templates/routine_parser.ex.eex

# This code has been auto-generated
# Changes to this file will be lost on next generation
defmodule <%= @module_name %> do
@moduledoc """
This module contains functions to parse output from db's stored procedure's calls
"""
require Logger
@spec <%= @parse_function_name %>({:ok, Postgrex.Result.t()} | {:error, any()}) :: {:ok, [
<%= if @routine_has_complex_data do %>
<%= @routine_result_item_module_name %>.t()
<% else %>
<%= @routine_result_item_type %>
<% end %>]}
| {:error, any()}
def <%= @parse_function_name %>({:error, reason} = err) do
Logger.error("Error occured while calling stored procedure", procedure: "<%= @function_name %>", reason: inspect(reason))
err
end
def <%= @parse_function_name %>({:ok, %Postgrex.Result{rows: rows}}) do
Logger.debug("Parsing successful response from database")
parsed_results =
rows
|> Enum.map(&<%= @parse_function_name_result_row %>/1)
# todo: Handle rows that could not be parsed
successful_results =
parsed_results
|> Enum.filter(&(elem(&1, 0) == :ok))
|> Enum.map(&(elem(&1, 1)))
Logger.debug("Parsed response")
{:ok, successful_results}
end
def <%= @parse_function_name_result_row %>([<%= @output_params %>]) do
{
:ok,
<%= if @routine_has_complex_data do %>
%<%= @routine_result_item_module_name %>{
<%= for {%{name: param}, index} <- @output_routine_params |> Enum.with_index() do %>
<%= param %>: <%= param %><%= if index != Enum.count(@output_routine_params) do %>, <% end %>
<% end %>
}
<% else %>
<%= @output_params %>
<% end %>
}
end
def <%= @parse_function_name_result_row %>(<%= unless @include_sensitive_data, do: "_" %>unknown_row) do
Logger.warn("Found result row that does not have valid number of columns"
<%= if @include_sensitive_data do %>
, unknown_row: unknown_row
<% end %>
)
{:error, :einv_columns}
end
end