The a_v4_extfn_table_context structure represents an open result set over a table.
typedef struct a_v4_extfn_table_context { // size_t struct_size; /* fetch_into() - fetch into a specified row_block. This entry point is used when the consumer has a transfer area with a specific format. The fetch_into() function will write the fetched rows into the provided row block. */ short (UDF_CALLBACK *fetch_into)(a_v4_extfn_table_context *cntxt, a_v4_extfn_row_block *); /* fetch_block() - fetch a block of rows. This entry point is used when the consumer does not need the data in a particular format. For example, if the consumer is reading a result set and formatting it as HTML, the consumer does not care how the transfer area is layed out. The fetch_block() entry point is more efficient if the consumer does not need a specific layout. The row_block parameter is in/out. The first call should point to a NULL row block. The fetch_block() call sets row_block to a block that can be consumed, and this block should be passed on the next fetch_block() call. */ short (UDF_CALLBACK *fetch_block)(a_v4_extfn_table_context *cntxt, a_v4_extfn_row_block **row_block); /* rewind() - this is an optional entry point. If NULL, rewind is not supported. Otherwise, the rewind() entry point restarts the result set at the beginning of the table. */ short (UDF_CALLBACK *rewind)(a_v4_extfn_table_context *); /* get_blob() - If the specified column has a blob object, return it. The blob is returned as an out parameter and is owned by the caller. This method should only be called on a column that contains a blob. The helper macro EXTFN_COL_IS_BLOB can be used to determine whether a column contains a blob. */ short (UDF_CALLBACK *get_blob)(a_v4_extfn_table_context *cntxt, a_v4_extfn_column_data *col, a_v4_extfn_blob **blob); /* The following fields are reserved for future use and must be initialized to NULL. */ void *reserved1_must_be_null; void *reserved2_must_be_null; void *reserved3_must_be_null; void *reserved4_must_be_null; void *reserved5_must_be_null; a_v4_extfn_proc_context *proc_context; void *args_handle; // use in a_v4_extfn_proc_context::get_value() etc. a_v4_extfn_table *table; void *user_data; void *server_internal_use; /* The following fields are reserved for future use and must be initialized to NULL. */ void *reserved6_must_be_null; void *reserved7_must_be_null; void *reserved8_must_be_null; void *reserved9_must_be_null; void *reserved10_must_be_null; } a_v4_extfn_table_context;
Data Type | Method | Description |
---|---|---|
short | fetch_into | Fetch into a specified row_block |
short | fetch_block | Fetch a block of rows |
short | rewind | Restarts the result set at the beginning of the table |
short | get_blob | Return a blob object, if the specified column has a blob object |
Data Member | Data Type | Description |
---|---|---|
proc_context | a_v4_extfn_proc_context * | A pointer to the procedure context object. The UDF can use this to set errors, log messages, cancel, and so on. |
args_handle | void * | A handle to the arguments provided by the server. |
table | a_v4_extfn_table * | Points to the open result set table. This is populated after a_v4_extfn_proc_context open_result_set has been called. |
user_data | void * | This data pointer can be filled in by any usage with whatever context data the external routine requires. |
server_internal_use | void * | Internal use only. |
The a_v4_extfn_table_context structure acts as a middle layer between the producer and the consumer to help manage the data, when the consumer and producer require separate formats.
A UDF can read rows from an input table parameter using a_v4_extfn_table_context. The server or another UDF can read rows from the result table of a UDF using a_v4_extfn_table_context.
The server implements the methods of a_v4_extfn_table_context, which gives the server an opportunity to resolve impedance mismatches.