class SQB::Update

Public Instance Methods

set(hash) click to toggle source

Set a value to be updated

@param key [String] @param value [String, nil]

# File lib/sqb/update.rb, line 43
def set(hash)
  if @where
    raise QueryError, "Filtering has already been provided. Must filter after setting values."
  end

  @sets ||= {}
  hash.each do |key, value|
    @sets[key] = value_escape(value)
  end
  self
end
to_sql() click to toggle source
# File lib/sqb/update.rb, line 11
def to_sql
  [].tap do |query|
    query << "UPDATE"
    query << escape_and_join(@options[:database_name], @table_name)
    query << "SET"
    if @sets && !@sets.empty?
      query << @sets.map do |key, value|
        "#{escape_and_join(@table_name, key)} = #{value}"
      end.join(', ')
    else
      raise NoValuesError, "No values have been updated. Use `set` to set the values to update."
    end

    if @where && !@where.empty?
      query << "WHERE"
      query << @where.join(' AND ')
    end

    if @limit
      query << "LIMIT #{@limit.to_i}"
    end

    if @offset
      query << "OFFSET #{@offset.to_i}"
    end
  end.join(' ')
end