Class: ActiveRecord::Materialized::ViewDefinition Private
- Inherits:
-
Object
- Object
- ActiveRecord::Materialized::ViewDefinition
- Extended by:
- T::Sig
- Defined in:
- lib/activerecord/materialized/view_definition.rb
Overview
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Inspects a source relation for its GROUP BY maintenance keys and builds partition scopes.
Instance Method Summary collapse
- #group_key_columns ⇒ Object private
- #incrementally_maintainable? ⇒ Boolean private
-
#initialize(source, explicit_group_keys: nil) ⇒ ViewDefinition
constructor
private
A new instance of ViewDefinition.
- #partition_scope(key_tuples) ⇒ Object private
- #partition_scope_on(model, key_tuples) ⇒ Object private
Constructor Details
#initialize(source, explicit_group_keys: nil) ⇒ ViewDefinition
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.
Returns a new instance of ViewDefinition.
18 19 20 21 |
# File 'lib/activerecord/materialized/view_definition.rb', line 18 def initialize(source, explicit_group_keys: nil) @source = source @explicit_group_keys = explicit_group_keys end |
Instance Method Details
#group_key_columns ⇒ 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.
29 30 31 32 |
# File 'lib/activerecord/materialized/view_definition.rb', line 29 def group_key_columns @group_key_columns = T.let(@group_key_columns, T.nilable(T::Array[String])) @group_key_columns ||= resolve_group_key_columns end |
#incrementally_maintainable? ⇒ Boolean
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.
24 25 26 |
# File 'lib/activerecord/materialized/view_definition.rb', line 24 def incrementally_maintainable? group_key_columns.any? end |
#partition_scope(key_tuples) ⇒ 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 |
# File 'lib/activerecord/materialized/view_definition.rb', line 52 def partition_scope(key_tuples) validate_partition_keys!(key_tuples) base = T.unsafe(source).klass.arel_table attributes = group_key_columns.map { |column| group_attributes[column] || base[column] } filter_partitions(source, attributes, key_tuples) end |
#partition_scope_on(model, key_tuples) ⇒ 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.
42 43 44 45 46 |
# File 'lib/activerecord/materialized/view_definition.rb', line 42 def partition_scope_on(model, key_tuples) validate_partition_keys!(key_tuples) attributes = group_key_columns.map { |column| T.unsafe(model).arel_table[column] } filter_partitions(model.unscoped, attributes, key_tuples) end |