Module: ActiveRecord::Materialized::Metadata::Schema Private
- Defined in:
- lib/activerecord/materialized/metadata/schema.rb
Overview
This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.
Lazily provisions and migrates the materialized-view metadata table.
Class Method Summary collapse
- .create_metadata_table!(connection) ⇒ Object private
- .ensure_column!(connection, name, type, default: nil, null: true) ⇒ Object private
-
.ensure_columns!(connection) ⇒ Object
private
Lazily add columns introduced after a table was first provisioned, so an app migrated from an earlier version picks them up without a new migration.
- .ensure_table!(view_class) ⇒ Object private
Class Method Details
.create_metadata_table!(connection) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/activerecord/materialized/metadata/schema.rb', line 19 def (connection) table = ::ActiveRecord::Materialized. connection.create_table(table, force: :cascade) do |t| t.string :view_name, null: false t.datetime :last_refreshed_at t.boolean :refreshing, null: false, default: false t.boolean :dirty, null: false, default: true t.boolean :warm, null: false, default: false t.integer :row_count t.integer :refresh_duration_ms t.text :last_error t.text :maintenance_payload t.datetime :last_reconciled_at t.integer :reconciled_partition_count t.integer :fresh_set_generation, null: false, default: 0 t. end connection.add_index(table, :view_name, unique: true) end |
.ensure_column!(connection, name, type, default: nil, null: true) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
52 53 54 55 56 57 58 |
# File 'lib/activerecord/materialized/metadata/schema.rb', line 52 def ensure_column!(connection, name, type, default: nil, null: true) return if MetadataRecord.column_names.include?(name.to_s) connection.add_column( ::ActiveRecord::Materialized., name, type, default: default, null: null ) end |
.ensure_columns!(connection) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Lazily add columns introduced after a table was first provisioned, so an app migrated from an earlier version picks them up without a new migration.
41 42 43 44 45 46 47 48 49 50 |
# File 'lib/activerecord/materialized/metadata/schema.rb', line 41 def ensure_columns!(connection) return unless MetadataRecord.table_exists? ensure_column!(connection, :dirty, :boolean, default: true, null: false) ensure_column!(connection, :warm, :boolean, default: false, null: false) ensure_column!(connection, :maintenance_payload, :text) ensure_column!(connection, :last_reconciled_at, :datetime) ensure_column!(connection, :reconciled_partition_count, :integer) ensure_column!(connection, :fresh_set_generation, :integer, default: 0, null: false) end |
.ensure_table!(view_class) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
12 13 14 15 16 17 |
# File 'lib/activerecord/materialized/metadata/schema.rb', line 12 def ensure_table!(view_class) connection = view_class.connection (connection) unless MetadataRecord.table_exists? ensure_columns!(connection) MetadataRecord.reset_column_information end |