module Card::Query::CardQuery::Run

run CQL queries

Public Instance Methods

alter_result(name) click to toggle source
# File lib/card/query/card_query/run.rb, line 103
def alter_result name
  name_parts = [statement[:prepend], name, statement[:append]].compact
  Card::Name[name_parts]
end
alter_results?() click to toggle source
# File lib/card/query/card_query/run.rb, line 112
def alter_results?
  statement[:prepend] || statement[:append]
end
card_result(record, _field) click to toggle source
# File lib/card/query/card_query/run.rb, line 73
def card_result record, _field
  if alter_results?
    Card.fetch name_result(record), new: {}
  else
    fetch_or_instantiate record
  end
end
count_result(results, _field) click to toggle source
# File lib/card/query/card_query/run.rb, line 47
def count_result results, _field
  results.first["count"].to_i
end
default_result(record, field) click to toggle source
# File lib/card/query/card_query/run.rb, line 51
def default_result record, field
  record[field]
end
fetch_or_instantiate(record) click to toggle source
# File lib/card/query/card_query/run.rb, line 81
def fetch_or_instantiate record
  card = Card.retrieve_from_cache_by_id record["id"]
  unless card
    card = Card.instantiate record
    Card.write_to_cache card
  end
  card.include_set_modules
  card
end
id_result(record, field) click to toggle source
# File lib/card/query/card_query/run.rb, line 55
def id_result record, field
  record[field].to_i
end
key_result(record, pattern="") click to toggle source
# File lib/card/query/card_query/run.rb, line 63
def key_result record, pattern=""
  name_result(record, pattern).to_name.key
end
large_list(length) click to toggle source
# File lib/card/query/card_query/run.rb, line 33
def large_list length
  Rails.logger.info "#{length} records returned by #{@statement}"
end
name_result(record, pattern="") click to toggle source
# File lib/card/query/card_query/run.rb, line 67
def name_result record, pattern=""
  name = record["name"]&.to_name
  name ||= Card::Lexicon.lex_to_name [record["left_id"], record["right_id"]]
  process_name name, pattern
end
process_name(name, pattern="") click to toggle source
# File lib/card/query/card_query/run.rb, line 96
def process_name name, pattern=""
  name = pattern.to_name.absolute(name) if pattern =~ /_\w+/
  return name unless alter_results?

  alter_result name
end
raw_result(record, _field) click to toggle source
# File lib/card/query/card_query/run.rb, line 59
def raw_result record, _field
  record
end
result_method(retrn) click to toggle source
# File lib/card/query/card_query/run.rb, line 37
def result_method retrn
  case
  when respond_to?(:"#{retrn}_result") then :"#{retrn}_result"
  when retrn.match?(/id$/)             then :id_result
  when retrn.match?(/_\w+/)            then :name_result
  when retrn == "key"                  then :key_result
  else                                      :default_result
  end
end
return_list(sql_results, retrn) click to toggle source

@return [Array]

# File lib/card/query/card_query/run.rb, line 20
def return_list sql_results, retrn
  large_list sql_results.length if sql_results.length > 1000
  seed_cache sql_results, retrn
  sql_results.map do |record|
    return_simple record, retrn
  end
end
return_simple(sql_result, retrn) click to toggle source

@return [(not an Array)]

# File lib/card/query/card_query/run.rb, line 15
def return_simple sql_result, retrn
  send result_method(retrn), sql_result, retrn
end
run() click to toggle source

run the current query @return [Array] of card objects by default

# File lib/card/query/card_query/run.rb, line 8
def run
  retrn = statement[:return].present? ? statement[:return].to_s : "card"
  return_method = :"return_#{simple_result?(retrn) ? :simple : :list}"
  send return_method, run_sql, retrn
end
run_sql() click to toggle source
# File lib/card/query/card_query/run.rb, line 91
def run_sql
  # puts "\nSQL = #{sql}"
  ActiveRecord::Base.connection.select_all sql
end
seed_cache(sql_results, retrn) click to toggle source
# File lib/card/query/card_query/run.rb, line 28
def seed_cache sql_results, retrn
  id_field = retrn.match?(/id$/) ? retrn : "id"
  Cache.populate_ids(sql_results.map { |record| record[id_field] })
end
simple_result?(retrn) click to toggle source
# File lib/card/query/card_query/run.rb, line 108
def simple_result? retrn
  retrn == "count"
end