Sha256: 360ef19247954bdf0d4f8de3aa3c0f68cbfa9e1f9743dc00a1b25d64e4728e3e

Contents?: true

Size: 1.93 KB

Versions: 110

Compression:

Stored size: 1.93 KB

Contents

# frozen-string-literal: true
#
# The constant_sql_override extension allows you to change the SQL
# generated for Sequel constants.
#
# One possible use-case for this is to have Sequel::CURRENT_TIMESTAMP use UTC time when
# you have Sequel.database_timezone = :utc, but the database uses localtime when
# generating CURRENT_TIMESTAMP.
#
# You can set SQL overrides with Database#set_constant_sql:
#
#   DB.set_constant_sql(Sequel::CURRENT_TIMESTAMP, "CURRENT_TIMESTAMP AT TIME ZONE 'UTC'")
#
# Now, using Sequel::CURRENT_TIMESTAMP will use your override instead:
#
#   Album.where(released_at: Sequel::CURRENT_TIMESTAMP).sql
#   # => SELECT "albums.*" FROM "albums" WHERE ("released_at" = CURRENT_TIMESTAMP AT TIME ZONE 'UTC')
#
# To use this extension, first load it into your Sequel::Database instance:
#
#   DB.extension :constant_sql_override
#
# Related module: Sequel::ConstantSqlOverride

#
module Sequel
  module ConstantSqlOverride
    module DatabaseMethods
      # Create the initial empty hash of constant sql overrides.
      def self.extended(db)
        db.instance_exec do
          @constant_sqls ||= {}
          extend_datasets(DatasetMethods)
        end
      end

      # Hash mapping constant symbols to SQL.  For internal use only.
      attr_reader :constant_sqls # :nodoc:

      # Set the SQL to use for the given Sequel::SQL::Constant
      def set_constant_sql(constant, override)
        @constant_sqls[constant.constant] = override
      end

      # Freeze the constant_sqls hash to prevent adding new overrides.
      def freeze
        @constant_sqls.freeze
        super
      end
    end

    module DatasetMethods
      # Use overridden constant SQL
      def constant_sql_append(sql, constant)
        if constant_sql = db.constant_sqls[constant]
          sql << constant_sql
        else
          super
        end
      end
    end
  end

  Database.register_extension(:constant_sql_override, ConstantSqlOverride::DatabaseMethods)
end

Version data entries

110 entries across 96 versions & 2 rubygems

Version Path
sequel-5.90.0 lib/sequel/extensions/constant_sql_override.rb
sequel-5.89.0 lib/sequel/extensions/constant_sql_override.rb
sequel-5.88.0 lib/sequel/extensions/constant_sql_override.rb
sequel-5.87.0 lib/sequel/extensions/constant_sql_override.rb
sequel-5.86.0 lib/sequel/extensions/constant_sql_override.rb
sequel-5.85.0 lib/sequel/extensions/constant_sql_override.rb
sequel-5.84.0 lib/sequel/extensions/constant_sql_override.rb
sequel-5.83.1 lib/sequel/extensions/constant_sql_override.rb
sequel-5.83.0 lib/sequel/extensions/constant_sql_override.rb
sequel-5.82.0 lib/sequel/extensions/constant_sql_override.rb
sequel-5.81.0 lib/sequel/extensions/constant_sql_override.rb
sequel-5.80.0 lib/sequel/extensions/constant_sql_override.rb
sequel-5.79.0 lib/sequel/extensions/constant_sql_override.rb
sequel-5.78.0 lib/sequel/extensions/constant_sql_override.rb
sequel-5.77.0 lib/sequel/extensions/constant_sql_override.rb
sequel-5.76.0 lib/sequel/extensions/constant_sql_override.rb
sequel-5.75.0 lib/sequel/extensions/constant_sql_override.rb
sequel-5.74.0 lib/sequel/extensions/constant_sql_override.rb
sequel-5.73.0 lib/sequel/extensions/constant_sql_override.rb
sequel-5.72.0 lib/sequel/extensions/constant_sql_override.rb