/**
 * call-seq:
 *     set_result( func, result ) -> result
 *
 * Sets the result of the given function to the given value. This is typically
 * called in the callback function for #create_function or the finalize
 * callback in #create_aggregate. The result must be either a string, an integer,
 * or a double.
 *
 * The +func+ parameter must be the opaque function handle as given to the
 * callback functions mentioned above.
 */
static VALUE
static_api_set_result( VALUE module, VALUE func, VALUE result )
{
  sqlite_func *func_ptr;

  GetFunc( func_ptr, func );
  switch( TYPE(result) )
  {
    case T_STRING:
      sqlite_set_result_string( func_ptr,
        RSTRING(result)->ptr,
        RSTRING(result)->len );
      break;

    case T_FIXNUM:
      sqlite_set_result_int( func_ptr, FIX2INT(result) );
      break;

    case T_FLOAT:
      sqlite_set_result_double( func_ptr, NUM2DBL(result) );
      break;

    default:
      static_raise_db_error( -1, "bad type in set result (%d)",
        TYPE(result) );
  }

  return result;
}