Sha256: 59ad3ff073338d2b0f16d66735df4388a629479a72f30f73411e5cc6a0bca7a0

Contents?: true

Size: 1.78 KB

Versions: 62

Compression:

Stored size: 1.78 KB

Contents

require 'amalgalite/sqlite3/database/function'
module Amalgalite
  #
  # A Base class to inherit from for creating your own SQL aggregate functions
  # in ruby.
  #
  # These are SQL functions similar to _max(X)_, _count(X)_, _avg(X)_. The built
  # in SQLite aggregate functions are:
  #
  # * http://www.sqlite.org/lang_aggfunc.html
  #
  # If you choose to use Aggregate as a parent class of your SQL scalar function
  # implementation you must:
  #
  # * implement _initalize_ with 0 arguments
  # * set the @arity data member
  # * set the @name data member 
  # * implement _step_ with arity of +@arity+
  # * implement _finalize_ with arity of 0
  #
  # For instance to implement a <i>unique_word_count(X)</i> aggregate function you could
  # implement it as:
  #
  #   class UniqueWordCount < ::Amalgalite::Aggregate
  #     attr_accessor :words
  #
  #     def initialize
  #       @name = 'unique_word_count'
  #       @arity = 1
  #       @words = Hash.new { |h,k| h[k] = 0 }
  #     end
  #
  #     def step( str )
  #       str.split(/\W+/).each do |word|
  #         words[ word.downcase ] += 1
  #       end
  #       return nil
  #     end
  #
  #     def finalize
  #       return words.size
  #     end
  #   end
  #
  #
  class Aggregate
    # The name of the SQL function
    attr_accessor :name

    # The arity of the SQL function
    attr_accessor :arity

    # finalize should return the final value of the aggregate function
    def finalize
      raise NotImplementedError, "Aggregate#finalize must be implemented"
    end

    # <b>Do Not Override</b>
    #
    # The function signature for use by the Amaglaite datase in tracking
    # function creation.
    #
    def signature
      @signature ||= ::Amalgalite::SQLite3::Database::Function.signature( self.name, self.arity )
    end
  end
end

Version data entries

62 entries across 62 versions & 2 rubygems

Version Path
amalgalite-1.6.3-x86-mingw32 lib/amalgalite/aggregate.rb
amalgalite-1.6.3-x64-mingw32 lib/amalgalite/aggregate.rb
amalgalite-1.6.3 lib/amalgalite/aggregate.rb
amalgalite-1.6.1-x86-mingw32 lib/amalgalite/aggregate.rb
amalgalite-1.6.1-x64-mingw32 lib/amalgalite/aggregate.rb
amalgalite-1.6.1 lib/amalgalite/aggregate.rb
amalgalite-1.6.0-x64-mingw32 lib/amalgalite/aggregate.rb
amalgalite-1.6.0-x86-mingw32 lib/amalgalite/aggregate.rb
amalgalite-1.6.0 lib/amalgalite/aggregate.rb
amalgalite-1.5.0-x86-mingw32 lib/amalgalite/aggregate.rb
amalgalite-1.5.0 lib/amalgalite/aggregate.rb
amalgalite-1.4.1-x86-mingw32 lib/amalgalite/aggregate.rb
amalgalite-1.4.1 lib/amalgalite/aggregate.rb
amalgalite-1.4.0-x86-mingw32 lib/amalgalite/aggregate.rb
amalgalite-1.4.0 lib/amalgalite/aggregate.rb
asana2flowdock-1.0.0 vendor/bundle/ruby/1.9.1/gems/amalgalite-1.3.0/lib/amalgalite/aggregate.rb
amalgalite-1.3.0-x86-mswin32 lib/amalgalite/aggregate.rb
amalgalite-1.3.0 lib/amalgalite/aggregate.rb
amalgalite-1.1.2-x86-mingw32 lib/amalgalite/aggregate.rb
amalgalite-1.1.2-x86-mswin32 lib/amalgalite/aggregate.rb