diff --git a/lib/code0/zero_track/database/migration.rb b/lib/code0/zero_track/database/migration.rb index a86b323..26be5e7 100644 --- a/lib/code0/zero_track/database/migration.rb +++ b/lib/code0/zero_track/database/migration.rb @@ -9,6 +9,7 @@ class V1_0 < ::ActiveRecord::Migration[7.1] include Database::MigrationHelpers::AddColumnEnhancements include Database::MigrationHelpers::ConstraintHelpers include Database::MigrationHelpers::IndexHelpers + include Database::MigrationHelpers::RemoveColumnEnhancements include Database::MigrationHelpers::TableEnhancements end # rubocop:enable Naming/ClassAndModuleCamelCase diff --git a/lib/code0/zero_track/database/migration_helpers/remove_column_enhancements.rb b/lib/code0/zero_track/database/migration_helpers/remove_column_enhancements.rb new file mode 100644 index 0000000..86635dd --- /dev/null +++ b/lib/code0/zero_track/database/migration_helpers/remove_column_enhancements.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +module Code0 + module ZeroTrack + module Database + module MigrationHelpers + module RemoveColumnEnhancements + def remove_column(table_name, column_name, type = nil, **kwargs) + if type == :text + limit = kwargs.delete(:limit) + unique = kwargs.delete(:unique) + + if limit + quoted_column_name = quote_column_name(column_name) + name = text_limit_name(table_name, column_name) + definition = "char_length(#{quoted_column_name}) <= #{limit}" + + remove_check_constraint(table_name, definition, name: name) + end + + if unique.is_a?(Hash) + quoted_column_name ||= quote_column_name(column_name) + index_column = column_name + unique[:where] = "#{column_name} IS NOT NULL" if unique.delete(:allow_nil_duplicate) + index_column = "LOWER(#{quoted_column_name})" if unique.delete(:case_insensitive) + + remove_index table_name, index_column, unique: true, **unique + elsif unique + remove_index table_name, column_name, unique: unique + end + end + + super + end + end + end + end + end +end