DBD-Oracle
view release on metacpan or search on metacpan
int piece_lob; /*use piece fetch for lobs*/
ub4 piece_size; /*used in callback to set the size of the piece to get*/
int has_lobs; /*Statement has bound LOBS */
int ret_lobs; /*Statement returns LOBS */
lob_refetch_t *lob_refetch;
int nested_cursor; /* cursors fetched from SELECTs */
AV *bind_tuples; /* Bind tuples in array execute, or NULL */
int rowwise; /* If true, bind_tuples is list of */
/* tuples, otherwise list of columns. */
/* Input Details */
char *statement; /* sql (see sth_scan) */
HV *all_params_hv; /* all params, keyed by name */
AV *out_params_av; /* quick access to inout params */
int ora_pad_empty; /* convert ""->" " when binding */
/* Select Column Output Details */
int done_desc; /* have we described this sth yet ? */
imp_fbh_t *fbh; /* array of imp_fbh_t structs */
char *fbh_cbuf; /* memory for all field names */
int t_dbsize; /* raw data width of a row */
UV long_readlen; /* local copy to handle oraperl */
HV *fbh_tdo_hv; /* hash of row #(0 based) and tdo object name from ora_oci_type_names hash */
/* Select Row Cache Details */
sb4 cache_rows;
int in_cache;
int next_entry;
int eod_errno;
int est_width; /* est'd avg row width on-the-wire */
/* (In/)Out Parameter Details */
bool has_inout_params;
/* execute mode*/
/* will be using this alot later me thinks */
ub4 exe_mode;
/* fetch scrolling values */
int fetch_orient;
int fetch_offset;
int fetch_position;
int prefetch_memory; /* OCI_PREFETCH_MEMORY*/
int prefetch_rows; /* OCI_PREFETCH_ROWS */
/* array fetch: state variables */
int row_cache_off;
int rs_fetch_count; /*fetch count*/
int rs_array_size; /*array size local value for RowCacheSize as I do not want to change RowCacheSize */
int rs_array_num_rows; /* num rows in last fetch */
int rs_array_idx; /* index of current row */
sword rs_array_status; /* status of last fetch */
int RowCacheSize; /* both of these are defined by DBI spec*/
int RowsInCache; /* this vaue is RO and cannot be set*/
};
#define IMP_STH_EXECUTING 0x0001
typedef struct fb_ary_st fb_ary_t; /* field buffer array */
struct fb_ary_st { /* field buffer array EXPERIMENTAL */
ub4 bufl; /* length of data buffer */
ub4 cb_bufl; /* length of piece of data fetched in callback.*/
ub4 piece_count;/*# of pieces retrieved*/
sb2 *aindp; /* null/trunc indicator variable */
ub1 *abuf; /* data buffer (points to sv data) */
ub1 *cb_abuf; /*yet another buffer for picewise callbacks this means I only need to allocate memory once a prepare rather than at each fetch*/
ub2 *arlen; /* length of returned data */
ub2 *arcode; /* field level error status */
};
typedef struct fbh_obj_st fbh_obj_t; /*Ebbedded Object Descriptor */
struct fbh_obj_st { /* embedded object or table will work recursively*/
text *type_name; /*object's name (TDO)*/
ub4 type_namel; /*length of the name*/
OCIParam *parmdp; /*Describe attributes of the object OCI_DTYPE_PARAM*/
OCIParam *parmap; /*Describe attributes of the object OCI_ATTR_COLLECTION_ELEMENT OCI_ATTR_PARAM*/
OCIType *tdo; /*object's TDO handle */
OCITypeCode typecode; /*object's OCI_ATTR_TYPECODE */
OCITypeCode col_typecode; /*if collection this is its OCI_ATTR_COLLECTION_TYPECODE */
OCITypeCode element_typecode; /*if collection this is its element's OCI_ATTR_TYPECODE*/
OCIRef *obj_ref; /*if an embedded object this is ref handle to its TDO*/
OCIInd *obj_ind; /*Null indicator for object */
OCIComplexObject *obj_value; /*the actual value from the DB*/
OCIType *obj_type; /*if an embeded object this is the OCIType returned by a OCIObjectPin*/
ub1 is_final_type; /*object's OCI_ATTR_IS_FINAL_TYPE*/
fbh_obj_t *fields; /*one object for each field/property*/
ub2 field_count; /*The number of fields Not really needed but nice to have*/
fbh_obj_t *next_subtype; /*There is stored information about subtypes for inherited objects*/
AV *value; /*The value to send back to Perl This way there are no memory leaks*/
SV *full_type_name; /*Perl value of full type name = schema_name "." type_name*/
};
struct imp_fbh_st { /* field buffer EXPERIMENTAL */
imp_sth_t *imp_sth; /* 'parent' statement */
int field_num; /* 0..n-1 */
/* Oracle's description of the field */
OCIParam *parmdp;
OCIDefine *defnp;
void *desc_h; /* descriptor if needed (LOBs, cursors etc) */
ub4 desc_t; /* OCI type of descriptor */
ub4 define_mode; /*the normal case for a define*/
int (*fetch_func) _((SV *sth, imp_fbh_t *fbh, SV *dest_sv));
void (*fetch_cleanup) _((SV *sth, imp_fbh_t *fbh));
ub2 dbtype; /* actual type of field (see ftype) */
ub2 dbsize;
ub2 prec; /* XXX docs say ub1 but ub2 is needed */
sb1 scale;
ub1 nullok;
char *name;
SV *name_sv; /* only set for OCI8 */
/* OCI docs say OCI_ATTR_CHAR_USED is ub4, they're wrong */
ub1 len_char_used; /* OCI_ATTR_CHAR_USED */
ub2 len_char_size; /* OCI_ATTR_CHAR_SIZE */
ub2 csid; /* OCI_ATTR_CHARSET_ID */
ub1 csform; /* OCI_ATTR_CHARSET_FORM */
ub4 disize; /* max display/buffer size */
ub4 piece_size; /*used in callback to set the size of the piece to get*/
char *bless; /* for Oracle::OCI style handle data */
void *special; /* hook for special purposes (LOBs etc) */
int pers_lob; /*for persistant lobs 10g Release 2. or later*/
int clbk_lob; /*for persistant lobs 10g Release 2. or later*/
int piece_lob; /*use piecewise fetch for lobs*/
( run in 3.056 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )