Module: SQLiteTypes::MigrationHelpers

Defined in:
lib/sqlite_types/migration_helpers.rb,
sig/sqlite_types.rbs

Constant Summary collapse

DEFAULT_NOT_PROVIDED =

Returns:

  • (Object)
Object.new.freeze
POSTGRESQL_IDENTIFIER_LIMIT =
63
SUPPORTED_ARRAY_SUBTYPES =

Returns:

  • (::Array[Symbol])
SQLiteTypes::Array::SUPPORTED_SUBTYPES

Instance Method Summary collapse

Instance Method Details

#change_array_to_json(table_name, column_name, subtype, nested: false, null: nil, default: [], constraint_name: nil) ⇒ Object

Parameters:

  • table_name (Symbol, String)
  • column_name (Symbol, String)
  • subtype (Symbol, String)
  • nested: (Boolean) (defaults to: false)
  • null: (Boolean) (defaults to: nil)
  • default: (Object) (defaults to: [])
  • constraint_name: (String, nil) (defaults to: nil)

Returns:

  • (Object)


41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/sqlite_types/migration_helpers.rb', line 41

def change_array_to_json(
  table_name,
  column_name,
  subtype,
  nested: false,
  null: nil,
  default: [],
  constraint_name: nil
)
  require_postgresql_adapter!

  subtype = normalize_array_subtype(subtype)
  constraint_name ||= default_array_constraint_name(table_name, column_name)
  sqlite_types_array_columns << [table_name, column_name, subtype, nested]

  reversible do |dir|
    dir.up do
      options = {}
      options[:null] = null unless null.nil?

      change_array_default table_name, column_name, from: default, to: nil
      change_column table_name, column_name, :jsonb, **options.merge(using: "to_jsonb(#{quote_column_name(column_name)})")
      change_array_default table_name, column_name, from: nil, to: default
      add_check_constraint table_name, "jsonb_typeof(#{quote_column_name(column_name)}) = 'array'", name: constraint_name
    end

    dir.down do
      validate_registered_postgresql_array_rollbacks!
      remove_check_constraint table_name, name: constraint_name
      restore_postgresql_array_column table_name, column_name, subtype, nested: nested, null: resolved_null(table_name, column_name, null), default: default
    end
  end
end

#change_inet_to_string(table_name, column_name, **options) ⇒ Object

Parameters:

  • table_name (Symbol, String)
  • column_name (Symbol, String)
  • options (Object)

Returns:

  • (Object)


13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/sqlite_types/migration_helpers.rb', line 13

def change_inet_to_string(table_name, column_name, **options)
  require_postgresql_adapter!

  reversible do |dir|
    dir.up do
      change_column table_name, column_name, :string, **options.merge(using: "#{quote_column_name(column_name)}::text")
    end

    dir.down do
      change_column table_name, column_name, :inet, **options.merge(using: "#{quote_column_name(column_name)}::inet")
    end
  end
end

#change_interval_to_string(table_name, column_name, **options) ⇒ Object

Parameters:

  • table_name (Symbol, String)
  • column_name (Symbol, String)
  • options (Object)

Returns:

  • (Object)


27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/sqlite_types/migration_helpers.rb', line 27

def change_interval_to_string(table_name, column_name, **options)
  require_postgresql_adapter!

  reversible do |dir|
    dir.up do
      change_column table_name, column_name, :string, **options.merge(using: "#{quote_column_name(column_name)}::text")
    end

    dir.down do
      change_column table_name, column_name, :interval, **options.merge(using: "#{quote_column_name(column_name)}::interval")
    end
  end
end