Class/Module Index [+]

Quicksearch

Sequel::Dataset::PreparedStatementMethods

Backbone of the prepared statement support. Grafts bind variable support into datasets by hijacking literal and using placeholders. By default, emulates prepared statements and bind variables by taking the hash of bind variables and directly substituting them into the query, which works on all databases, as it is no different from using the dataset without bind variables.

Constants

PLACEHOLDER_RE

Attributes

orig_dataset[RW]

The dataset that created this prepared statement.

prepared_args[RW]

The array/hash of bound variable placeholder names.

prepared_modify_values[RW]

The argument to supply to insert and update, which may use placeholders specified by prepared_args

prepared_type[RW]

The type of prepared statement, should be one of :select, :first, :insert, :update, or :delete

Public Instance Methods

call(bind_vars={}, &block) click to toggle source

Sets the prepared_args to the given hash and runs the prepared statement.

# File lib/sequel/dataset/prepared_statements.rb, line 65
def call(bind_vars={}, &block)
  bind(bind_vars).run(&block)
end
columns() click to toggle source

Send the columns to the original dataset, as calling it on the prepared statement can cause problems.

# File lib/sequel/dataset/prepared_statements.rb, line 71
def columns
  orig_dataset.columns
end
inspect() click to toggle source

Programmer friendly string showing this is a prepared statement, with the prepared SQL it represents (which in general won't have substituted variables).

# File lib/sequel/dataset/prepared_statements.rb, line 113
def inspect
  "<#{self.class.name}/PreparedStatement #{prepared_sql.inspect}>"
end
literal_symbol_append(sql, v) click to toggle source

Changes the values of symbols if they start with $ and prepared_args is present. If so, they are considered placeholders, and they are substituted using prepared_arg.

# File lib/sequel/dataset/prepared_statements.rb, line 97
def literal_symbol_append(sql, v)
  if @opts[:bind_vars] and match = PLACEHOLDER_RE.match(v.to_s)
    s = match[1].to_sym
    if prepared_arg?(s)
      literal_append(sql, prepared_arg(s))
    else
      sql << v.to_s
    end
  else
    super
  end
end
prepared_sql() click to toggle source

Returns the SQL for the prepared statement, depending on the type of the statement and the prepared_modify_values.

# File lib/sequel/dataset/prepared_statements.rb, line 77
def prepared_sql
  case @prepared_type
  when :select, :all
    select_sql
  when :first
    clone(:limit=>1).select_sql
  when :insert_select
    returning.insert_sql(*@prepared_modify_values)
  when :insert
    insert_sql(*@prepared_modify_values)
  when :update
    update_sql(*@prepared_modify_values)
  when :delete
    delete_sql
  end
end

Protected Instance Methods

run(&block) click to toggle source

Run the method based on the type of prepared statement, with :select running all to get all of the rows, and the other types running the method with the same name as the type.

# File lib/sequel/dataset/prepared_statements.rb, line 122
def run(&block)
  case @prepared_type
  when :select, :all
    all(&block)
  when :insert_select
    with_sql(prepared_sql).first
  when :first
    first
  when :insert
    insert(*@prepared_modify_values)
  when :update
    update(*@prepared_modify_values)
  when :delete
    delete
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.