DBD-Oracle

 view release on metacpan or  search on metacpan

dbdimp.h  view on Meta::CPAN

	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 )