Last Modified
  2016-09-30 19:32:14 +0000
Requires

## Description

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)