# frozen-string-literal: true
module Sequel
module Plugins
# The table_select plugin changes the default selection for a
# model dataset from * to table.*.
# This makes it so that if you join the model's dataset to
# other tables, columns in the other tables do not appear
# in the result sets (and possibly overwrite columns in the
# current model with the same name).
#
# Usage:
#
# # Make all model subclasses select table.*
# Sequel::Model.plugin :table_select
#
# # Make the Album class select albums.*
# Album.plugin :table_select
module TableSelect
# Modify the current model's dataset selection, if the model
# has a dataset.
def self.configure(model)
model.instance_exec do
self.dataset = dataset if @dataset
end
end
module ClassMethods
private
# If the underlying dataset selects from a single table and
# has no explicit selection, select table.* from that table.
def convert_input_dataset(ds)
ds = super
unless ds.opts[:select]
ds = ds.select_all(ds.first_source)
end
ds
end
end
end
end
end