Sha256: 9e29a0a81da43a89adad32a78392a8185d49a64666932119031b2facb561703d

Contents?: true

Size: 1.52 KB

Versions: 10

Compression:

Stored size: 1.52 KB

Contents

# frozen-string-literal: true
#
# The implicit_subquery extension changes most dataset methods that
# return modified datasets to implicitly call from_self if the database
# currently uses raw SQL.  Sequel's by default does not do this:
#
#   DB["SELECT * FROM table"].select(:column).sql
#   # => "SELECT * FROM table"
#
# With this extension, datasets that use raw SQL are implicitly wrapped
# in a subquery:
#
#   DB["SELECT * FROM table"].select(:column).sql
#   # => "SELECT column FROM (SELECT * FROM table) AS t1"
#
# To add this extension to an existing dataset:
#
#   ds = ds.extension(:implicit_subquery)
#
# To set this as the default behavior for all datasets on a single database:
#
#   DB.extension(:implicit_subquery)
#
# Related module: Sequel::Dataset::ImplicitSubquery

#
module Sequel
  class Dataset
    module ImplicitSubquery
      exceptions = [:and, :add_graph_aliases, :filter, :from, :from_self, :naked, :or, :order_more,
                    :qualify, :reverse, :reverse_order, :select_all, :select_more, :server,
                    :set_graph_aliases, :unfiltered, :ungraphed, :ungrouped, :unlimited, :unordered,
                    :with_sql]
      additions = [:join_table]
      (Dataset::QUERY_METHODS - Dataset::JOIN_METHODS - exceptions + additions).each do |meth|
        define_method(meth) do |*a, &b|
          if opts[:sql]
            from_self.send(meth, *a, &b)
          else
            super(*a, &b)
          end
        end
      end
    end

    register_extension(:implicit_subquery, ImplicitSubquery)
  end
end

Version data entries

10 entries across 8 versions & 2 rubygems

Version Path
sequel-4.49.0 lib/sequel/extensions/implicit_subquery.rb
sequel-4.48.0 lib/sequel/extensions/implicit_subquery.rb
tdiary-5.0.5 vendor/bundle/gems/sequel-4.44.0/lib/sequel/extensions/implicit_subquery.rb
tdiary-5.0.5 vendor/bundle/gems/tdiary-5.0.4/vendor/bundle/gems/sequel-4.44.0/lib/sequel/extensions/implicit_subquery.rb
tdiary-5.0.5 vendor/bundle/gems/sequel-4.47.0/lib/sequel/extensions/implicit_subquery.rb
sequel-4.47.0 lib/sequel/extensions/implicit_subquery.rb
sequel-4.46.0 lib/sequel/extensions/implicit_subquery.rb
sequel-4.45.0 lib/sequel/extensions/implicit_subquery.rb
tdiary-5.0.4 vendor/bundle/gems/sequel-4.44.0/lib/sequel/extensions/implicit_subquery.rb
sequel-4.44.0 lib/sequel/extensions/implicit_subquery.rb