Method: Sequel::Dataset#with_sql

Defined in:
lib/sequel/dataset/query.rb

#with_sql(sql, *args) ⇒ Object

Returns a copy of the dataset with the static SQL used. This is useful if you want to keep the same row_proc/graph, but change the SQL used to custom SQL.

DB[:items].with_sql('SELECT * FROM foo') # SELECT * FROM foo

You can use placeholders in your SQL and provide arguments for those placeholders:

DB[:items].with_sql('SELECT ? FROM foo', 1) # SELECT 1 FROM foo

You can also provide a method name and arguments to call to get the SQL:

DB[:items].with_sql(:insert_sql, b: 1) # INSERT INTO items (b) VALUES (1)

Note that datasets that specify custom SQL using this method will generally ignore future dataset methods that modify the SQL used, as specifying custom SQL overrides Sequel’s SQL generator. You should probably limit yourself to the following dataset methods when using this method, or use the implicit_subquery extension:

  • each

  • all

  • single_record (if only one record could be returned)

  • single_value (if only one record could be returned, and a single column is selected)

  • map

  • as_hash

  • to_hash

  • to_hash_groups

  • delete (if a DELETE statement)

  • update (if an UPDATE statement, with no arguments)

  • insert (if an INSERT statement, with no arguments)

  • truncate (if a TRUNCATE statement, with no arguments)



1302
1303
1304
1305
1306
1307
1308
1309
# File 'lib/sequel/dataset/query.rb', line 1302

def with_sql(sql, *args)
  if sql.is_a?(Symbol)
    sql = public_send(sql, *args)
  else
    sql = SQL::PlaceholderLiteralString.new(sql, args) unless args.empty?
  end
  clone(:sql=>sql)
end