class Amalgalite::Aggregate
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:
* 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 unique_word_count(X) 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
Attributes
The arity of the SQL function
The name of the SQL function
Public Instance Methods
finalize should return the final value of the aggregate function
# File lib/amalgalite/aggregate.rb, line 54 def finalize raise NotImplementedError, "Aggregate#finalize must be implemented" end
Do Not Override
The function signature for use by the Amaglaite datase in tracking function creation.
# File lib/amalgalite/aggregate.rb, line 63 def signature @signature ||= ::Amalgalite::SQLite3::Database::Function.signature( self.name, self.arity ) end