/**
* call-seq:
* create_function( db, name, args, proc ) -> nil
*
* Defines a new function that may be invoked from within an SQL
* statement. The +args+ parameter specifies how many arguments the function
* expects--use -1 to specify variable arity. The +proc+ parameter must be
* a proc that expects +args+ + 1 parameters, with the first parameter
* being an opaque handle to the function object itself:
*
* proc do |func, *args|
* ...
* end
*
* The function object is used when calling the #set_result and
* #set_result_error methods.
*/
static VALUE
static_api_create_function( VALUE module, VALUE db, VALUE name, VALUE n,
VALUE proc )
{
sqlite *handle;
int result;
GetDB( handle, db );
Check_Type( name, T_STRING );
Check_Type( n, T_FIXNUM );
if( !rb_obj_is_kind_of( proc, rb_cProc ) )
{
rb_raise( rb_eArgError, "handler must be a proc" );
}
result = sqlite_create_function( handle,
StringValueCStr(name),
FIX2INT(n),
static_function_callback,
(void*)proc );
if( result != SQLITE_OK )
{
static_raise_db_error( result, "create function %s(%d)",
StringValueCStr(name), FIX2INT(n) );
/* "raise" does not return */
}
return Qnil;
}