Class: Convergence::Dumper::PostgresSchemaDumper

Inherits:
Object
  • Object
show all
Defined in:
lib/convergence/dumper/postgres_schema_dumper.rb

Constant Summary collapse

TYPE_MAPPING =

Convergence's DSL type names follow MySQL terminology. Map PostgreSQL's internal type name (udt_name) back to the closest DSL type.

{
  'int2' => :smallint,
  'int4' => :int,
  'int8' => :bigint,
  'varchar' => :varchar,
  'bpchar' => :char,
  'text' => :text,
  'bytea' => :blob,
  'timestamp' => :datetime,
  'timestamptz' => :datetime,
  'date' => :date,
  'time' => :time,
  'numeric' => :decimal,
  'float4' => :float,
  'float8' => :double,
  'json' => :json,
  'jsonb' => :json,
  # Convergence has no native boolean DSL type; store it as tinyint(1), the same
  # representation Convergence::Table#boolean produces for the MySQL adapter.
  'bool' => :tinyint
}.freeze
DEFAULT_VALUE_PATTERN =
/\A'(?<value>(?:[^']|'')*)'(?:::[\w. ]+)?\z/.freeze

Instance Method Summary collapse

Constructor Details

#initialize(connector) ⇒ PostgresSchemaDumper

Returns a new instance of PostgresSchemaDumper.



30
31
32
33
34
# File 'lib/convergence/dumper/postgres_schema_dumper.rb', line 30

def initialize(connector)
  @connector = connector
  @target_database = connector.config.database
  @tables = {}
end

Instance Method Details

#dumpObject



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/convergence/dumper/postgres_schema_dumper.rb', line 36

def dump
  table_definitions = select_table_definitions
  column_definitions = select_column_definitions.group_by { |r| r['table_name'] }
  index_definitions = select_index_definitions.group_by { |r| r['table_name'] }
  foreign_key_definitions = select_foreign_key_definitions.group_by { |r| r['table_name'] }
  table_definitions.map { |r| r['table_name'] }.each do |table_name|
    table = Convergence::Table.new(table_name)
    parse_table_options(table, table_definitions.find { |r| r['table_name'] == table_name })
    parse_columns(table, column_definitions[table_name])
    parse_indexes(table, index_definitions[table_name])
    parse_foreign_keys(table, foreign_key_definitions[table_name])
    @tables[table_name] = table
  end
  @tables
end