Class: PatternQueryHelper::Sql

Inherits:
Object
  • Object
show all
Defined in:
lib/pattern_query_helper/sql.rb

Constant Summary collapse

QUERY_COUNT_COLUMN =
"_query_full_count".freeze

Class Method Summary collapse

Class Method Details

.single_record_query(config) ⇒ Object



35
36
37
38
# File 'lib/pattern_query_helper/sql.rb', line 35

def self.single_record_query(config)
  results = sql_query(config)
  results.first
end

.sql_query(config) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/pattern_query_helper/sql.rb', line 4

def self.sql_query(config)
  model = config[:model]
  query_params = config[:query_params] || {}
  page = config[:page]
  per_page = config[:per_page]
  filter_params = config[:filter_params] || {}

  if page && per_page
    query_params[:limit] = per_page
    query_params[:offset] = (page - 1) * per_page
    limit = "limit :limit offset :offset"
  end

  full_count_join = "cross join (select count(*) as #{QUERY_COUNT_COLUMN} from filtered_query) as filtered_query_count" if page || per_page
  query_params = query_params.merge(filter_params).symbolize_keys

  sql = %(
    with filtered_query as (#{filtered_query(config)})
    select *
    from filtered_query
    #{full_count_join}
    #{limit}
  )

  model.find_by_sql([sql, query_params])
end

.sql_query_count(sql_query_results) ⇒ Object



31
32
33
# File 'lib/pattern_query_helper/sql.rb', line 31

def self.sql_query_count(sql_query_results)
  sql_query_results.empty? ? 0 : sql_query_results.first[QUERY_COUNT_COLUMN]
end