Module: TemporalTables::TemporalAdapterSixOh
- Defined in:
- lib/temporal_tables/temporal_adapter_six_oh.rb
Overview
The main difference here is the add_index method, which still uses the old options={} syntax
Instance Method Summary collapse
- #add_column(table_name, column_name, type, **options) ⇒ Object
- #add_index(table_name, column_name, options = {}) ⇒ Object
-
#add_temporal_table(table_name, **options) ⇒ Object
rubocop:disable Metrics/MethodLength, Metrics/AbcSize.
- #change_column(table_name, column_name, type, **options) ⇒ Object
-
#create_table(table_name, **options, &block) ⇒ Object
rubocop:disable Metrics/ModuleLength.
-
#create_temporal_indexes(table_name) ⇒ Object
rubocop:disable Metrics/MethodLength.
- #create_temporal_triggers(_table_name) ⇒ Object
- #drop_table(table_name, **options) ⇒ Object
- #drop_temporal_triggers(_table_name) ⇒ Object
- #remove_column(table_name, column_name, type = nil, **options) ⇒ Object
- #remove_columns(table_name, *column_names, **options) ⇒ Object
- #remove_index(table_name, options = {}) ⇒ Object
- #remove_temporal_table(table_name) ⇒ Object
- #rename_column(table_name, column_name, new_column_name) ⇒ Object
- #rename_table(name, new_name) ⇒ Object
- #temporal_index_exists?(table_name, index_name) ⇒ Boolean
-
#temporal_index_name(index_name) ⇒ Object
It’s important not to increase the length of the returned string.
- #temporal_name(table_name) ⇒ Object
Instance Method Details
#add_column(table_name, column_name, type, **options) ⇒ Object
83 84 85 86 87 88 89 90 |
# File 'lib/temporal_tables/temporal_adapter_six_oh.rb', line 83 def add_column(table_name, column_name, type, **) super(table_name, column_name, type, **) return unless table_exists?(temporal_name(table_name)) super temporal_name(table_name), column_name, type, ** create_temporal_triggers table_name end |
#add_index(table_name, column_name, options = {}) ⇒ Object
128 129 130 131 132 133 134 135 136 |
# File 'lib/temporal_tables/temporal_adapter_six_oh.rb', line 128 def add_index(table_name, column_name, = {}) super(table_name, column_name, ) return unless table_exists?(temporal_name(table_name)) column_names = Array.wrap(column_name) idx_name = temporal_index_name([:name] || index_name(table_name, column: column_names)) super temporal_name(table_name), column_name, .except(:unique).merge(name: idx_name) end |
#add_temporal_table(table_name, **options) ⇒ Object
rubocop:disable Metrics/MethodLength, Metrics/AbcSize
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/temporal_tables/temporal_adapter_six_oh.rb', line 32 def add_temporal_table(table_name, **) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize create_table( temporal_name(table_name), **.merge(id: false, primary_key: 'history_id', temporal_bypass: true) ) do |t| t.column :id, .fetch(:id, :integer) if [:id] != false t.datetime :eff_from, null: false, limit: 6 t.datetime :eff_to, null: false, limit: 6, default: '9999-12-31' columns(table_name).each do |c| next if c.name == 'id' t.send c.type, c.name, limit: c.limit end end if TemporalTables.add_updated_by_field && !column_exists?(table_name, :updated_by) change_table table_name do |t| t.column :updated_by, TemporalTables.updated_by_type end end add_index temporal_name(table_name), [:id, :eff_to] create_temporal_triggers table_name create_temporal_indexes table_name end |
#change_column(table_name, column_name, type, **options) ⇒ Object
110 111 112 113 114 115 116 117 |
# File 'lib/temporal_tables/temporal_adapter_six_oh.rb', line 110 def change_column(table_name, column_name, type, **) super(table_name, column_name, type, **) return unless table_exists?(temporal_name(table_name)) super temporal_name(table_name), column_name, type, ** # Don't need to update triggers here... end |
#create_table(table_name, **options, &block) ⇒ Object
rubocop:disable Metrics/ModuleLength
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/temporal_tables/temporal_adapter_six_oh.rb', line 7 def create_table(table_name, **, &block) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity if [:temporal_bypass] super(table_name, **, &block) else skip_table = TemporalTables.skipped_temporal_tables.include?(table_name.to_sym) || table_name.to_s =~ /_h$/ super(table_name, **) do |t| block.call t if TemporalTables.add_updated_by_field && !skip_table updated_by_already_exists = t.columns.any? { |c| c.name == 'updated_by' } if updated_by_already_exists puts "consider adding #{table_name} to TemporalTables skip_table" # rubocop:disable Rails/Output else t.column(:updated_by, TemporalTables.updated_by_type) end end end if [:temporal] || (TemporalTables.create_by_default && !skip_table) add_temporal_table table_name, ** end end end |
#create_temporal_indexes(table_name) ⇒ Object
rubocop:disable Metrics/MethodLength
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
# File 'lib/temporal_tables/temporal_adapter_six_oh.rb', line 148 def create_temporal_indexes(table_name) # rubocop:disable Metrics/MethodLength indexes = ActiveRecord::Base.connection.indexes(table_name) indexes.each do |index| index_name = temporal_index_name(index.name) next if temporal_index_exists?(table_name, index_name) add_index( temporal_name(table_name), index.columns, # exclude unique constraints for temporal tables name: index_name, length: index.lengths, order: index.orders ) end end |
#create_temporal_triggers(_table_name) ⇒ Object
171 172 173 |
# File 'lib/temporal_tables/temporal_adapter_six_oh.rb', line 171 def create_temporal_triggers(_table_name) raise NotImplementedError, 'create_temporal_triggers is not implemented' end |
#drop_table(table_name, **options) ⇒ Object
66 67 68 69 70 |
# File 'lib/temporal_tables/temporal_adapter_six_oh.rb', line 66 def drop_table(table_name, **) super(table_name, **) super(temporal_name(table_name), **) if table_exists?(temporal_name(table_name)) end |
#drop_temporal_triggers(_table_name) ⇒ Object
175 176 177 |
# File 'lib/temporal_tables/temporal_adapter_six_oh.rb', line 175 def drop_temporal_triggers(_table_name) raise NotImplementedError, 'drop_temporal_triggers is not implemented' end |
#remove_column(table_name, column_name, type = nil, **options) ⇒ Object
101 102 103 104 105 106 107 108 |
# File 'lib/temporal_tables/temporal_adapter_six_oh.rb', line 101 def remove_column(table_name, column_name, type = nil, **) super(table_name, column_name, type, **) return unless table_exists?(temporal_name(table_name)) super temporal_name(table_name), column_name, type, ** create_temporal_triggers table_name end |
#remove_columns(table_name, *column_names, **options) ⇒ Object
92 93 94 95 96 97 98 99 |
# File 'lib/temporal_tables/temporal_adapter_six_oh.rb', line 92 def remove_columns(table_name, *column_names, **) super(table_name, *column_names, **) return unless table_exists?(temporal_name(table_name)) super temporal_name(table_name), *column_names, ** create_temporal_triggers table_name end |
#remove_index(table_name, options = {}) ⇒ Object
138 139 140 141 142 143 144 145 146 |
# File 'lib/temporal_tables/temporal_adapter_six_oh.rb', line 138 def remove_index(table_name, = {}) original_index_name = index_name_for_remove(table_name, ) super(table_name, ) return unless table_exists?(temporal_name(table_name)) idx_name = temporal_index_name(original_index_name) super temporal_name(table_name), name: idx_name end |
#remove_temporal_table(table_name) ⇒ Object
59 60 61 62 63 64 |
# File 'lib/temporal_tables/temporal_adapter_six_oh.rb', line 59 def remove_temporal_table(table_name) return unless table_exists?(temporal_name(table_name)) drop_temporal_triggers table_name drop_table_without_temporal temporal_name(table_name) end |
#rename_column(table_name, column_name, new_column_name) ⇒ Object
119 120 121 122 123 124 125 126 |
# File 'lib/temporal_tables/temporal_adapter_six_oh.rb', line 119 def rename_column(table_name, column_name, new_column_name) super(table_name, column_name, new_column_name) return unless table_exists?(temporal_name(table_name)) super temporal_name(table_name), column_name, new_column_name create_temporal_triggers table_name end |
#rename_table(name, new_name) ⇒ Object
72 73 74 75 76 77 78 79 80 81 |
# File 'lib/temporal_tables/temporal_adapter_six_oh.rb', line 72 def rename_table(name, new_name) drop_temporal_triggers name if table_exists?(temporal_name(name)) super name, new_name return unless table_exists?(temporal_name(name)) super(temporal_name(name), temporal_name(new_name)) create_temporal_triggers new_name end |
#temporal_index_exists?(table_name, index_name) ⇒ Boolean
184 185 186 |
# File 'lib/temporal_tables/temporal_adapter_six_oh.rb', line 184 def temporal_index_exists?(table_name, index_name) index_name_exists?(temporal_name(table_name), index_name) end |
#temporal_index_name(index_name) ⇒ Object
It’s important not to increase the length of the returned string.
180 181 182 |
# File 'lib/temporal_tables/temporal_adapter_six_oh.rb', line 180 def temporal_index_name(index_name) index_name.to_s.sub(/^index/, 'ind_h').sub(/_ix(\d+)$/, '_hi\1') end |
#temporal_name(table_name) ⇒ Object
167 168 169 |
# File 'lib/temporal_tables/temporal_adapter_six_oh.rb', line 167 def temporal_name(table_name) "#{table_name}_h" end |