Sha256: 62dfeee03c658ec7b8e36fcbcd0b2d0ef93cbcd31e6490eb09633add8498a5a2

Contents?: true

Size: 1.64 KB

Versions: 131

Compression:

Stored size: 1.64 KB

Contents

# frozen-string-literal: true

module Sequel 
  class Dataset
    module StoredProcedureMethods
      # The name of the stored procedure to call
      def sproc_name
        @opts[:sproc_name]
      end
      
      # Call the stored procedure with the given args
      def call(*args, &block)
        clone(:sproc_args=>args).run(&block)
      end

      # Programmer friendly string showing this is a stored procedure,
      # showing the name of the procedure.
      def inspect
        "<#{self.class.name}/StoredProcedure name=#{@sproc_name}>"
      end
      
      # Run the stored procedure with the current args on the database
      def run(&block)
        case @opts[:sproc_type]
        when :select, :all
          all(&block)
        when :first
          first
        when :insert
          insert
        when :update
          update
        when :delete
          delete
        end
      end
    end
  
    module StoredProcedures
      # For the given type (:select, :first, :insert, :update, or :delete),
      # run the database stored procedure with the given name with the given
      # arguments.
      def call_sproc(type, name, *args)
        prepare_sproc(type, name).call(*args)
      end
      
      # Transform this dataset into a stored procedure that you can call
      # multiple times with new arguments.
      def prepare_sproc(type, name)
        prepare_extend_sproc(self).clone(:sproc_type=>type, :sproc_name=>name, :sql=>'')
      end
      
      private
      
      # Extend the dataset with the stored procedure methods.
      def prepare_extend_sproc(ds)
        ds.with_extend(StoredProcedureMethods)
      end
    end
  end
end

Version data entries

131 entries across 114 versions & 2 rubygems

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