Exemple #1
0
static void rb_sqlite3_func(sqlite3_context * ctx, int argc, sqlite3_value **argv)
{
  VALUE callable = (VALUE)sqlite3_user_data(ctx);
  VALUE * params = NULL;
  VALUE result;
  int i;

  if (argc > 0) {
    params = xcalloc((size_t)argc, sizeof(VALUE *));

    for(i = 0; i < argc; i++) {
      params[i] = sqlite3val2rb(argv[i]);
    }
  }

  result = rb_funcall2(callable, rb_intern("call"), argc, params);
  xfree(params);

  set_sqlite3_func_result(ctx, result);
}
Exemple #2
0
static void rb_sqlite3_func(sqlite3_context * ctx, int argc, sqlite3_value **argv)
{
  VALUE callable = (VALUE)sqlite3_user_data(ctx);
  VALUE * params = NULL;
  VALUE guard = rb_ary_new2(argc); /* Prevent garbage collection of params during call. */
  VALUE result;
  int i;

  if (argc > 0) {
    params = xcalloc((size_t)argc, sizeof(VALUE *));
    for(i = 0; i < argc; i++) {
      VALUE param = sqlite3val2rb(argv[i]);
      rb_ary_push(guard, param);
      params[i] = param;
    }
  }

  result = rb_funcall2(callable, rb_intern("call"), argc, params);
  xfree(params);

  set_sqlite3_func_result(ctx, result);
}
Exemple #3
0
static void rb_sqlite3_final(sqlite3_context * ctx)
{
  VALUE callable = (VALUE)sqlite3_user_data(ctx);
  VALUE result = rb_funcall(callable, rb_intern("finalize"), 0);
  set_sqlite3_func_result(ctx, result);
}