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