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