Module: CoreExtensions::ActiveRecord::Relation

Defined in:
lib/core_extensions/active_record/relation.rb

Instance Method Summary collapse

Instance Method Details

#finalObject

When FINAL is specified, ClickHouse fully merges the data before returning the result and thus performs all data transformations that happen during merges for the given table engine. For example:

users = User.final.all
# SELECT users.* FROM users FINAL

An ActiveRecord::ActiveRecordError will be raised if database not ClickHouse.



41
42
43
# File 'lib/core_extensions/active_record/relation.rb', line 41

def final
  spawn.final!
end

#final!Object



45
46
47
48
49
50
# File 'lib/core_extensions/active_record/relation.rb', line 45

def final!
  assert_mutability!
  check_command('FINAL')
  @values[:final] = true
  self
end

#reverse_order!Object



4
5
6
7
8
9
10
11
12
# File 'lib/core_extensions/active_record/relation.rb', line 4

def reverse_order!
  return super unless connection.is_a?(::ActiveRecord::ConnectionAdapters::ClickhouseAdapter)

  orders = order_values.uniq.reject(&:blank?)
  return super unless orders.empty? && !primary_key

  self.order_values = (column_names & %w[date created_at]).map { |c| arel_table[c].desc }
  self
end

#settings(**opts) ⇒ Object

Define settings in the SETTINGS clause of the SELECT query. The setting value is applied only to that query and is reset to the default or previous value after the query is executed. For example:

users = User.settings(optimize_read_in_order: 1, cast_keep_nullable: 1).where(name: 'John')
# SELECT users.* FROM users WHERE users.name = 'John' SETTINGS optimize_read_in_order = 1, cast_keep_nullable = 1

An ActiveRecord::ActiveRecordError will be raised if database not ClickHouse.

Parameters:

  • opts (Hash)


22
23
24
# File 'lib/core_extensions/active_record/relation.rb', line 22

def settings(**opts)
  spawn.settings!(**opts)
end

#settings!(**opts) ⇒ Object

Parameters:

  • opts (Hash)


27
28
29
30
31
32
# File 'lib/core_extensions/active_record/relation.rb', line 27

def settings!(**opts)
  assert_mutability!
  check_command('SETTINGS')
  @values[:settings] = (@values[:settings] || {}).merge opts
  self
end

#using(*opts) ⇒ Object

The USING clause specifies one or more columns to join, which establishes the equality of these columns. For example:

users = User.joins(:joins).using(:event_name, :date)
# SELECT users.* FROM users INNER JOIN joins USING event_name,date

An ActiveRecord::ActiveRecordError will be raised if database not ClickHouse.

Parameters:

  • opts (Array)


59
60
61
# File 'lib/core_extensions/active_record/relation.rb', line 59

def using(*opts)
  spawn.using!(*opts)
end

#using!(*opts) ⇒ Object

Parameters:

  • opts (Array)


64
65
66
67
68
# File 'lib/core_extensions/active_record/relation.rb', line 64

def using!(*opts)
  assert_mutability!
  @values[:using] = opts
  self
end