module Card::Query::SqlStatement::Where

handle where clause in SqlStatement

Public Instance Methods

basic_conditions(conditions) click to toggle source

the conditions stored in the query’s @conditions variable

# File lib/card/query/sql_statement/where.rb, line 52
def basic_conditions conditions
  conditions.map do |condition|
    case condition
    when String    then condition
    when Array     then standard_condition(condition)
    end
  end
end
condition_joint(query) click to toggle source
# File lib/card/query/sql_statement/where.rb, line 96
def condition_joint query
  " #{query.current_conjunction.upcase} "
end
conditions_from(subqueries) click to toggle source

depending on how a query is “fastened”, its conditions may be rendered along with the superquery’s

# File lib/card/query/sql_statement/where.rb, line 22
def conditions_from subqueries
  subqueries.map do |query|
    next if query.conditions_on_join

    case query.fasten
    when :exist     then exist_condition query
    when :in        then in_condition query
    else                 explicit_conditions query
    end
  end
end
exist_condition(query) click to toggle source
# File lib/card/query/sql_statement/where.rb, line 34
def exist_condition query
  "#{maybe_not query}EXISTS (#{spaced_subquery_sql query})"
end
explicit_conditions(query) click to toggle source

conditions explicitly specified in the query object

# File lib/card/query/sql_statement/where.rb, line 13
def explicit_conditions query
  cond_list = basic_conditions query.conditions
  cond_list += conditions_from query.subqueries
  cond_list.reject!(&:blank?)
  format_conditions cond_list, query
end
format_conditions(cond_list, query) click to toggle source

convert list of conditions to string

# File lib/card/query/sql_statement/where.rb, line 88
def format_conditions cond_list, query
  if cond_list.size > 1
    "(#{cond_list.join condition_joint(query)})"
  else
    cond_list.join
  end
end
implicit_conditions(query) click to toggle source

handle trash and permissions only applies to card queries

# File lib/card/query/sql_statement/where.rb, line 68
def implicit_conditions query
  return unless query.is_a?(CardQuery)

  table = query.table_alias
  [trash_condition(table), permission_conditions(table)].compact * " AND "
end
in_condition(query) click to toggle source
# File lib/card/query/sql_statement/where.rb, line 42
def in_condition query
  field = query.mods[:in_field]
  "#{field} #{maybe_not query}IN (#{spaced_subquery_sql query})"
end
maybe_not(query) click to toggle source
# File lib/card/query/sql_statement/where.rb, line 38
def maybe_not query
  query.negate ? "NOT " : ""
end
permission_conditions(table) click to toggle source
# File lib/card/query/sql_statement/where.rb, line 79
def permission_conditions table
  return if Auth.always_ok?

  read_rules = Auth.as_card.read_rules
  read_rule_list = read_rules.present? ? read_rules.join(",") : 1
  "#{table}.read_rule_id IN (#{read_rule_list})"
end
spaced_subquery_sql(subquery) click to toggle source
# File lib/card/query/sql_statement/where.rb, line 47
def spaced_subquery_sql subquery
  "\n#{subquery.sql}\n#{leading_space}"
end
standard_condition(condition) click to toggle source
# File lib/card/query/sql_statement/where.rb, line 61
def standard_condition condition
  field, val = condition
  val.to_sql field
end
trash_condition(table) click to toggle source
# File lib/card/query/sql_statement/where.rb, line 75
def trash_condition table
  "#{table}.trash is false"
end
where(explicit=true) click to toggle source
# File lib/card/query/sql_statement/where.rb, line 6
def where explicit=true
  conditions = [explicit_conditions(@query), implicit_conditions(@query)]
  conditions = conditions.reject(&:blank?).join " AND "
  "#{'WHERE ' if explicit}#{conditions}" unless conditions.blank?
end