Current section
Files
Jump to
Current section
Files
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
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)))
{: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 %>(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