
require "sqlite3"


local db = sqlite3.open_memory()

assert( db:exec[[

  CREATE TABLE test (col1, col2);

  INSERT INTO test VALUES (1, 2);
  INSERT INTO test VALUES (2, 4);
  INSERT INTO test VALUES (3, 6);
  INSERT INTO test VALUES (4, 8);
  INSERT INTO test VALUES (5, 10);

]] )


assert( db:set_aggregate("my_stats", 2, function()

  local square_error_sum = 0

  local function step(a, b)
    local error        = a - b
    local square_error = error * error
    square_error_sum   = square_error_sum + square_error
  end

  local function final(num_called)
    return square_error_sum / num_called
  end

  return step, final

end))


local my_stats = db:first_cols("SELECT my_stats(col1, col2) FROM test")
print("my_stats:", my_stats)
