module Sequel::SelectRemove

  1. lib/sequel/extensions/select_remove.rb

Methods

Public Instance

  1. select_remove

Public Instance methods

select_remove(*cols)

Remove columns from the list of selected columns. If any of the currently selected columns use expressions/aliases, this will remove selected columns with the given aliases. It will also remove entries from the selection that match exactly:

# Assume columns a, b, and c in items table
DB[:items] # SELECT * FROM items
DB[:items].select_remove(:c) # SELECT a, b FROM items
DB[:items].select(:a, Sequel[:b].as(:c), Sequel[:c].as(:b)).select_remove(:c) # SELECT a, c AS b FROM items
DB[:items].select(:a, Sequel[:b][:c], Sequel[:c][:b]).select_remove(Sequel[:c][:b]) # SELECT a, b AS c FROM items

Note that there are a few cases where this method may not work correctly:

  • This dataset joins multiple tables and does not have an existing explicit selection. In this case, the code will currently use unqualified column names for all columns the dataset returns, except for the columns given.

  • This dataset has an existing explicit selection containing an item that returns multiple database columns (e.g. Sequel.*, Sequel.lit(‘column1, column2’)). In this case, the behavior is undefined and this method should not be used.

There may be other cases where this method does not work correctly, use it with caution.

[show source]
   # File lib/sequel/extensions/select_remove.rb
42 def select_remove(*cols)
43   if (sel = @opts[:select]) && !sel.empty?
44     select(*(columns.zip(sel).reject{|c, s| cols.include?(c)}.map{|c, s| s} - cols))
45   else
46     select(*(columns - cols))
47   end
48 end