Class: ActiveRecord::Materialized::ViewDefinition Private

Inherits:
Object
  • Object
show all
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

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_columnsObject

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.

Returns:

  • (Boolean)


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