Module: ActiveHouse::Querying::Where

Extended by:
ActiveSupport::Concern
Included in:
ActiveHouse::QueryBuilder
Defined in:
lib/active_house/querying/where.rb

Instance Method Summary collapse

Instance Method Details

#build_where_query_partObject



16
17
18
# File 'lib/active_house/querying/where.rb', line 16

def build_where_query_part
  "WHERE\n" + values[:where].join(" AND\n") unless values[:where].empty?
end

#format_where_clauses(conditions) ⇒ Object

Raises:

  • (ArgumentError)


41
42
43
44
45
46
47
# File 'lib/active_house/querying/where.rb', line 41

def format_where_clauses(conditions)
  raise ArgumentError, 'wrong number of arguments' if conditions.empty?

  return [ActiveHouse::PreparedStatement.prepare_sql(*conditions)] if conditions.size > 1

  ActiveHouse::PreparedStatement.build_condition(conditions.first)
end

#initial_valuesObject



12
13
14
# File 'lib/active_house/querying/where.rb', line 12

def initial_values
  super.merge where: []
end

#where(*conditions) ⇒ Object



33
34
35
# File 'lib/active_house/querying/where.rb', line 33

def where(*conditions)
  dup.where!(*conditions)
end

#where!(*conditions) ⇒ Object



20
21
22
23
24
# File 'lib/active_house/querying/where.rb', line 20

def where!(*conditions)
  formatted_conditions = format_where_clauses(conditions)
  values[:where] = (values[:where] + formatted_conditions).uniq
  self
end

#where_not(*conditions) ⇒ Object



37
38
39
# File 'lib/active_house/querying/where.rb', line 37

def where_not(*conditions)
  dup.where_not!(*conditions)
end

#where_not!(*conditions) ⇒ Object



26
27
28
29
30
31
# File 'lib/active_house/querying/where.rb', line 26

def where_not!(*conditions)
  formatted_conditions = format_where_clauses(conditions)
  negative_condition = "NOT (#{formatted_conditions.join(' AND ')})"
  values[:where] = (values[:where] + [negative_condition]).uniq
  self
end