Packages
electric
1.4.8
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.1
1.5.0
1.4.16
1.4.16-beta-1
1.4.15
1.4.14
1.4.13
1.4.12
1.4.11
1.4.10
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.4
1.3.3
1.3.2
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.14
1.1.13
1.1.12
1.1.11
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
retired
1.1.5
retired
1.1.4
retired
1.1.3
retired
1.1.2
1.1.1
1.1.0
1.0.24
1.0.23
1.0.22
1.0.21
1.0.20
1.0.19
1.0.18
1.0.17
1.0.15
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-beta.23
1.0.0-beta.22
1.0.0-beta.20
1.0.0-beta.19
1.0.0-beta.18
1.0.0-beta.17
1.0.0-beta.16
1.0.0-beta.15
1.0.0-beta.14
1.0.0-beta.13
1.0.0-beta.12
1.0.0-beta.11
1.0.0-beta.10
1.0.0-beta.9
1.0.0-beta.8
1.0.0-beta.7
1.0.0-beta.6
1.0.0-beta.5
1.0.0-beta.4
1.0.0-beta.3
1.0.0-beta.2
1.0.0-beta.1
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.1
0.8.0
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.5.2
0.4.4
Postgres sync engine. Sync little subsets of your Postgres data into local apps and services.
Current section
Files
Jump to
Current section
Files
lib/electric/replication/eval.ex
defmodule Electric.Replication.Eval do
@moduledoc """
Utilities for evaluating and converting replication-related types.
"""
@doc """
Converts a type specification to a PostgreSQL cast string.
## Parameters
- `type` - A type specification, which can be:
- An atom representing a basic PostgreSQL type
- A tuple `{:array, type}` for array types
- A tuple `{:enum, name}` for enum types
## Returns
A string representation of the PostgreSQL cast type.
## Examples
Basic types:
iex> Electric.Replication.Eval.type_to_pg_cast(:int4)
"int4"
iex> Electric.Replication.Eval.type_to_pg_cast(:text)
"text"
iex> Electric.Replication.Eval.type_to_pg_cast(:bool)
"bool"
Array types:
iex> Electric.Replication.Eval.type_to_pg_cast({:array, :int4})
"int4[]"
iex> Electric.Replication.Eval.type_to_pg_cast({:array, :text})
"text[]"
Nested array types:
iex> Electric.Replication.Eval.type_to_pg_cast({:array, {:array, :int4}})
"int4[]"
Enum types:
iex> Electric.Replication.Eval.type_to_pg_cast({:enum, :my_enum})
"my_enum"
iex> Electric.Replication.Eval.type_to_pg_cast({:enum, "custom_enum"})
"custom_enum"
Unsupported types raise errors:
iex> Electric.Replication.Eval.type_to_pg_cast({:row, []})
** (RuntimeError) Unsupported type: row
iex> Electric.Replication.Eval.type_to_pg_cast({:internal, :something})
** (RuntimeError) Unsupported type: internal
"""
def type_to_pg_cast(type, is_in_array? \\ false)
def type_to_pg_cast({:array, type}, true), do: "#{type_to_pg_cast(type, true)}"
def type_to_pg_cast({:array, type}, false), do: "#{type_to_pg_cast(type, true)}[]"
def type_to_pg_cast({:enum, name}, _), do: to_string(name)
def type_to_pg_cast({:row, _}, _), do: raise("Unsupported type: row")
def type_to_pg_cast({:internal, _}, _), do: raise("Unsupported type: internal")
def type_to_pg_cast(type, _) when is_atom(type), do: to_string(type)
end