18.5.7.VSEI Definition
typedef caddr_t (*bif_t) (caddr_t *qst, caddr_t *error_return, state_slot_t ** arguments); void bif_define (char *name, bif_t bif); void bif_define_typed (char * name, bif_t bif, bif_type_t *bt);
These functions associate a function pointer to a VSE name. The typed variant allows associating a value type used when inferring SQL meta-data if the result is returned to a client. The type can be one of the following externs:
extern bif_type_t
bt_varchar; |
extern bif_type_t
bt_any; |
extern bif_type_t
bt_integer; |
extern bif_type_t
bt_double; |
extern bif_type_t
bt_float; |
extern bif_type_t
bt_numeric; |
extern bif_type_t
bt_convert; |
extern bif_type_t
bt_timestamp; |
extern bif_type_t
bt_time; |
extern bif_type_t
bt_date; |
extern bif_type_t
bt_datetime; |
extern bif_type_t
bt_bin; |
If a VSE accesses indexes either by its own internal code or by
executing Virtuoso/PL statements, there becomes a potential for
deadlocks. To prevent deadlocks, the Virtuoso/PL compiler must be
informed of potential index usage inside the VSE. Special
deadlock-safe code can be created for its needs. The bif_set_uses_index()
function should be used
after bif_define()
or bif_define_typed()
in such cases.
The potential for deadlocking is always present if the VSE executes Virtuoso/PL code or uses XPath/XSLT functions. Other functions of Virtuoso's C interface are deadlock-safe since they perform no database access.