The null_dataset extension adds the Dataset#nullify method, which returns a cloned dataset that will never issue a query to the database. It implements the null object pattern for datasets.
The most common usage is probably in a method that must return a dataset, where the method knows the dataset shouldn’t return anything. With standard Sequel
, you’d probably just add a WHERE condition that is always false, but that still results in a query being sent to the database, and can be overridden using unfiltered, the OR operator, or a UNION.
Usage:
ds = DB[:items].nullify.where(a: :b).select(:c) ds.sql # => "SELECT c FROM items WHERE (a = b)" ds.all # => [] # no query sent to the database
Note that there is one case where a null dataset will sent a query to the database. If you call columns on a nulled dataset and the dataset doesn’t have an already cached version of the columns, it will create a new dataset with the same options to get the columns.
This extension uses Object#extend at runtime, which can hurt performance.
To add the nullify method to a single dataset:
ds = ds.extension(:null_dataset)
To add the nullify method to all datasets on a single database:
DB.extension(:null_dataset)
Related modules: Sequel::Dataset::Nullifiable
, Sequel::Dataset::NullDataset