class ActiveMedian::SQLiteHandler

Public Class Methods

arity() click to toggle source
# File lib/active_median/sqlite_handler.rb, line 3
def self.arity
  2
end
name() click to toggle source
# File lib/active_median/sqlite_handler.rb, line 7
def self.name
  "percentile"
end
new() click to toggle source
# File lib/active_median/sqlite_handler.rb, line 11
def initialize
  @values = []
  @percentile = nil
end

Public Instance Methods

finalize(ctx) click to toggle source
# File lib/active_median/sqlite_handler.rb, line 27
def finalize(ctx)
  if @values.any?
    ctx.result = @values.percentile(@percentile / 100.0)
  end
end
step(ctx, value, percentile) click to toggle source

skip checks for

  1. percentile between 0 and 100

  2. percentile same for all rows

since input is already checked

# File lib/active_median/sqlite_handler.rb, line 20
def step(ctx, value, percentile)
  return if value.nil?
  raise ActiveRecord::StatementInvalid, "1st argument to percentile() is not numeric" unless value.is_a?(Numeric)
  @percentile ||= percentile
  @values << value
end