Packages
electric
1.2.2
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/env/explicit_casts.ex
defmodule Electric.Replication.Eval.Env.ExplicitCasts do
@moduledoc """
Postgres has explicit casts, achievable via `::type` calls.
This module defines implementations for a subset of known ones.
"function name" column here is a function name in this module.
## List of explicit casts
| source | target | function name |
| --------- | -------------- | ------------- |
| bool | int4 | bool_to_int4 |
| char | int4 | |
| int8 | bit | |
| int4 | bit | |
| int4 | bool | int4_to_bool |
| int4 | char | |
| text | xml | |
| lseg | point | |
| box | point | |
| box | lseg | |
| box | circle | |
| polygon | box | |
| polygon | circle | |
| polygon | point | |
| circle | box | |
| circle | point | |
| circle | polygon | |
| bpchar | xml | |
| varchar | xml | |
| bit | int4 | |
| bit | int8 | |
| jsonb | bool | |
| jsonb | int8 | |
| jsonb | int2 | |
| jsonb | int4 | |
| jsonb | float4 | |
| jsonb | float8 | |
| jsonb | numeric | |
| int4range | int4multirange | |
| numrange | nummultirange | |
| tsrange | tsmultirange | |
| tstzrange | tstzmultirange | |
| daterange | datemultirange | |
| int8range | int8multirange | |
| xid8 | xid | |
"""
def bool_to_int4(true), do: 1
def bool_to_int4(false), do: 0
def int4_to_bool(0), do: false
def int4_to_bool(x) when is_integer(x) and x > 0, do: true
# Convert the table from moduledoc into a map
@explicit_casts @moduledoc
|> Electric.Utils.parse_md_table(after: "## List of explicit casts")
|> Enum.flat_map(fn
[_, _, ""] ->
[]
[from, to, function_name] ->
[
{{String.to_atom(from), String.to_atom(to)},
{__MODULE__, String.to_existing_atom(function_name)}}
]
end)
|> Map.new()
def known, do: @explicit_casts
end