Class: SQLGenerator::PostgresGenerator

Inherits:
SQLGenerator
  • Object
show all
Defined in:
lib/convergence/sql_generator/postgres_generator.rb

Constant Summary collapse

TYPE_MAPPING =

Convergence's DSL type names follow MySQL terminology (kept for cross-adapter DSL compatibility). Map them to their closest native PostgreSQL type.

{
  tinyint: 'smallint',
  smallint: 'smallint',
  mediumint: 'integer',
  int: 'integer',
  bigint: 'bigint',
  float: 'real',
  double: 'double precision',
  decimal: 'decimal',
  char: 'char',
  varchar: 'varchar',
  tinyblob: 'bytea',
  blob: 'bytea',
  mediumblob: 'bytea',
  longblob: 'bytea',
  tinytext: 'text',
  text: 'text',
  mediumtext: 'text',
  longtext: 'text',
  date: 'date',
  time: 'time',
  datetime: 'timestamp',
  timestamp: 'timestamp',
  year: 'integer',
  json: 'jsonb'
}.freeze
TYPES_WITH_LIMIT =
[:char, :varchar].freeze
UNSUPPORTED_TYPES =
[:enum, :set].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#original_tableObject (readonly)

Returns the value of attribute original_table.



35
36
37
# File 'lib/convergence/sql_generator/postgres_generator.rb', line 35

def original_table
  @original_table
end

Instance Method Details

#generate(to_table, delta, original_table, safe_migration: false) ⇒ Object



37
38
39
40
41
42
43
44
45
46
# File 'lib/convergence/sql_generator/postgres_generator.rb', line 37

def generate(to_table, delta, original_table, safe_migration: false)
  @original_table = original_table
  sqls = []
  sqls << rename_table_sqls(delta)
  sqls << change_table_sql(to_table, delta)
  sqls << (safe_migration ? [] : drop_table_sqls(delta))
  sqls << create_table_sqls(delta)
  sqls.reject!(&:empty?)
  sqls.join("\n")
end