class QueryHelper::SqlManipulator
Attributes
sql[RW]
Public Class Methods
new( sql:, where_clauses: nil, having_clauses: nil, order_by_clauses: nil, include_limit_clause: false, additional_select_clauses: [] )
click to toggle source
# File lib/query_helper/sql_manipulator.rb, line 8 def initialize( sql:, where_clauses: nil, having_clauses: nil, order_by_clauses: nil, include_limit_clause: false, additional_select_clauses: [] ) @parser = SqlParser.new(sql) @sql = @parser.sql.dup @where_clauses = where_clauses @having_clauses = having_clauses @order_by_clauses = order_by_clauses @include_limit_clause = include_limit_clause @additional_select_clauses = additional_select_clauses end
Public Instance Methods
build()
click to toggle source
# File lib/query_helper/sql_manipulator.rb, line 25 def build insert_having_clauses() insert_where_clauses() insert_select_clauses() insert_order_by_and_limit_clause() @sql.squish end
Private Instance Methods
insert_having_clauses()
click to toggle source
# File lib/query_helper/sql_manipulator.rb, line 49 def insert_having_clauses return unless @having_clauses.length > 0 begin_string = @parser.having_included? ? "and" : "having" filter_string = @having_clauses.join(" and ") @sql.insert(@parser.insert_having_index, " #{begin_string} #{filter_string} ") end
insert_order_by_and_limit_clause()
click to toggle source
# File lib/query_helper/sql_manipulator.rb, line 56 def insert_order_by_and_limit_clause @sql.slice!(@parser.limit_clause) if @parser.limit_included? # remove existing limit clause @sql.slice!(@parser.order_by_clause) if @parser.order_by_included? && @order_by_clauses.length > 0 # remove existing order by clause @sql += " order by #{@order_by_clauses.join(", ")} " if @order_by_clauses.length > 0 @sql += " limit :limit offset :offset " if @include_limit_clause end
insert_select_clauses()
click to toggle source
# File lib/query_helper/sql_manipulator.rb, line 35 def insert_select_clauses total_count_clause = "count(*) over () as _query_full_count" @additional_select_clauses << total_count_clause if @include_limit_clause @sql.insert(@parser.insert_select_index, " , #{@additional_select_clauses.join(", ")} ") if @additional_select_clauses.length > 0 end
insert_where_clauses()
click to toggle source
# File lib/query_helper/sql_manipulator.rb, line 41 def insert_where_clauses return unless @where_clauses.length > 0 begin_string = @parser.where_included? ? "and" : "where" filter_string = @where_clauses.join(" and ") " #{begin_string} #{filter_string} " @sql.insert(@parser.insert_where_index, " #{begin_string} #{filter_string} ") end