Skip to main content

lib/quack_db/ecto/quote.ex

defmodule QuackDB.Ecto.Quote do
  @moduledoc false

  @spec name(atom() | String.t()) :: iodata()
  def name(name) when is_atom(name), do: name |> Atom.to_string() |> name()
  def name(name) when is_integer(name), do: name |> Integer.to_string() |> name()

  def name(name) when is_binary(name) do
    if String.contains?(name, "\"") do
      raise ArgumentError, "bad literal/field/table name #{inspect(name)} (\" is not permitted)"
    end

    [?\", name, ?\"]
  end

  @spec name(atom() | String.t() | nil, atom() | String.t()) :: iodata()
  def name(nil, name), do: name(name)
  def name(prefix, name), do: [name(prefix), ?., name(name)]
end