class Baza::Commands::Select

Public Class Methods

new(args) click to toggle source
# File lib/baza/commands/select.rb, line 2
def initialize(args)
  @args = args.fetch(:args)
  @block = args.fetch(:block)
  @db = args.fetch(:db)
  @sql = ""
  @table_name = args.fetch(:table_name)
  @terms = args.fetch(:terms)
end

Public Instance Methods

execute() click to toggle source
# File lib/baza/commands/select.rb, line 11
def execute
  # Give 'cloned_ubuf' argument to 'q'-method.
  if @args
    @args_q = {cloned_ubuf: true} if @args[:cloned_ubuf]
    @args_q = {unbuffered: true} if @args[:unbuffered]
  end

  add_select_sql
  add_terms_sql
  add_order_sql
  add_limit_sql unless @db.mssql?

  result = execute_query

  # Return result if a block wasnt given.
  if @block
    nil
  else
    result
  end
end

Private Instance Methods

add_limit_sql() click to toggle source
# File lib/baza/commands/select.rb, line 82
def add_limit_sql
  return if @args.nil?

  @sql << " LIMIT #{@args[:limit]}" if @args[:limit]

  if @args[:limit_from] && @args[:limit_to]
    begin
      Float(@args[:limit_from])
    rescue
      raise "'limit_from' was not numeric: '#{@args.fetch(:limit_from)}'."
    end

    begin
      Float(@args[:limit_to])
    rescue
      raise "'limit_to' was not numeric: '#{@args[:limit_to]}'."
    end

    @sql << " LIMIT #{@args.fetch(:limit_from)}, #{@args.fetch(:limit_to)}"
  end
end
add_order_sql() click to toggle source
# File lib/baza/commands/select.rb, line 63
def add_order_sql
  return if @args.nil?

  if @args[:orderby]
    @sql << " ORDER BY"

    if @args.fetch(:orderby).is_a?(Array)
      first = true
      @args.fetch(:orderby).each do |order_by|
        @sql << "," unless first
        first = false if first
        @sql << " #{@db.quote_column(order_by)}"
      end
    else
      @sql << " #{@db.quote_column(@args.fetch(:orderby))}"
    end
  end
end
add_select_sql() click to toggle source
# File lib/baza/commands/select.rb, line 35
def add_select_sql
  # Set up IDQuery-stuff if that is given in arguments.
  if @args && @args[:idquery]
    if @args.fetch(:idquery) == true
      select_sql = "#{@db.quote_column(:id)}"
      @col = :id
    else
      select_sql = "#{@db.quote_column(@args.fetch(:idquery))}"
      @col = @args.fetch(:idquery)
    end
  end

  select_sql ||= "*"
  @sql << "SELECT"
  @sql << top_sql if @db.mssql?
  @sql << " #{select_sql} FROM"

  if @table_name.is_a?(Array)
    @sql << " #{@db.quote_table(@table_name.first)}.#{@db.quote_table(@table_name.last)}"
  else
    @sql << " #{@db.quote_table(@table_name)}"
  end
end
add_terms_sql() click to toggle source
# File lib/baza/commands/select.rb, line 59
def add_terms_sql
  @sql << " WHERE #{@db.sql_make_where(@terms)}" if !@terms.nil? && !@terms.empty?
end
execute_query() click to toggle source
# File lib/baza/commands/select.rb, line 109
def execute_query
  # Do IDQuery if given in arguments.
  if @args && @args[:idquery]
    Baza::Idquery.new(db: @db, table: @table_name, query: @sql, col: @col, &@block)
  else
    @db.q(@sql, @args_q, &@block)
  end
end
top_sql() click to toggle source
# File lib/baza/commands/select.rb, line 104
def top_sql
  return unless @args[:limit]
  " TOP #{@args[:limit].to_i}"
end