Current section

Files

Jump to
snowflex lib snowflex query.ex
Raw

lib/snowflex/query.ex

defmodule Snowflex.Query do
@moduledoc false
import Ecto.Changeset
defmacro __using__(_opts) do
quote do
import Snowflex.Query
end
end
defmacro snowflake_query(query) do
quote do
def sql_query, do: unquote(query)
def execute_query do
sql_query(sql_query())
end
def execute_query(binding_params) do
param_query(sql_query(), binding_params)
end
end
end
def cast_results(data, schema) do
Enum.map(data, &cast_row(&1, schema))
end
def int_param(val), do: {:sql_integer, val}
def string_param(val, length \\ 250), do: {{:sql_varchar, length}, val}
def sql_query(query, post_process \\ fn x -> x end) do
case Snowflex.sql_query(query) do
{:error, err} -> {:error, err}
results -> results |> post_process.()
end
end
def param_query(query, params, post_process \\ fn x -> x end) do
case Snowflex.param_query(query, params) do
{:error, err} -> {:error, err}
results -> results |> post_process.()
end
end
defp cast_row(row, schema) do
schema
|> struct()
|> cast(row, schema.__schema__(:fields))
|> apply_changes()
end
end