The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
/*
   engn/perldb2/dbdimp.h, engn_perldb2, db2_v6, 1.3 99/01/12 13:48:09

   Copyright (c) 1995,1996,1997,1998,1999 International Business Machines Corp.
*/

/* these are (almost) random values ! */
#define MAX_COLS 99
#define MAX_COL_NAME_LEN 128                                      
#define MAX_BIND_VARS	99


typedef struct imp_fbh_st imp_fbh_t;

struct imp_drh_st {
    dbih_drc_t com;			/* MUST be first element in structure	*/
	SQLHENV	henv;
	int 	connects;
};

/* Define dbh implementor data structure */
struct imp_dbh_st {
    dbih_dbc_t com;			/* MUST be first element in structure	*/
	SQLHENV	henv;
	SQLHDBC	hdbc;
};


/* Define sth implementor data structure */
struct imp_sth_st {
    dbih_stc_t 	com;			/* MUST be first element in structure	*/
    SQLHENV	henv;
    SQLHDBC	hdbc;
    SQLHSTMT	phstmt;

    /* Input Details	*/
    SQLCHAR	*statement;  		/* sql (see sth_scan)			*/
    HV		*bind_names;

    /* Output Details	*/
    SQLINTEGER	done_desc;  		/* have we described this sth yet ?	*/
    imp_fbh_t	*fbh;	    		/* array of imp_fbh_t structs		*/
    SQLCHAR	*fbh_cbuf;		/* memory for all field names		*/
    SQLINTEGER	long_buflen;      	/* length for long/longraw (if >0)	*/
    SQLCHAR 	long_trunc_ok;    	/* is truncating a long an error	*/
    SQLINTEGER  RowCount;		/* Rows affected by insert, update,	*/
					/* delete (unreliable for SELECT)	*/
    bool has_inouts;
};
#define IMP_STH_EXECUTING	0x0001


struct imp_fbh_st { 	/* field buffer EXPERIMENTAL */
    imp_sth_t *imp_sth;	/* 'parent' statement */

    /* description of the field	*/
    SQLINTEGER  dbsize;
    short  dbtype;
    SQLCHAR	*cbuf;		        /* ptr to name of select-list item */
    SQLINTEGER  cbufl;			/* length of select-list item name */
    SQLINTEGER  dsize;			/* max display size if field is a SQLCHAR */
    unsigned long prec;
    short  scale;
    short  nullok;

    /* Our storage space for the field data as it's fetched	*/
    short ftype;		/* external datatype we wish to get	*/
    short  indp;		/* null/trunc indicator variable	*/
    SQLCHAR	*buf;		/* data buffer (poSQLINTEGERs to sv data)	*/
    SQLINTEGER bufl;		/* length of data buffer		*/
    SQLINTEGER rlen;		/* length of returned data		*/
    short  rcode;		/* field level error status		*/

    SV	*sv;
};


typedef struct phs_st phs_t;    /* scalar placeholder   */

struct phs_st {	/* scalar placeholder EXPERIMENTAL	*/
    SV	*sv;		/* the scalar holding the value		*/
    short ftype;	/* external OCI field type		*/
    SQLINTEGER indp;		/* null indicator or length indicator */
    bool is_inout;
};

SQLCHAR sql_state[6];

#define dbd_init        db2_init
#define dbd_db_login        db2_db_login
#define dbd_db_do       db2_db_do
#define dbd_db_commit       db2_db_commit
#define dbd_db_rollback     db2_db_rollback
#define dbd_db_disconnect   db2_db_disconnect
#define dbd_db_destroy      db2_db_destroy
#define dbd_db_STORE_attrib db2_db_STORE_attrib
#define dbd_db_FETCH_attrib db2_db_FETCH_attrib
#define dbd_st_prepare      db2_st_prepare
#define dbd_st_rows     db2_st_rows
#define dbd_st_execute      db2_st_execute
#define dbd_st_fetch        db2_st_fetch
#define dbd_st_finish       db2_st_finish
#define dbd_st_destroy      db2_st_destroy
#define dbd_st_blob_read    db2_st_blob_read
#define dbd_st_STORE_attrib db2_st_STORE_attrib
#define dbd_st_FETCH_attrib db2_st_FETCH_attrib
#define dbd_describe        db2_describe
#define dbd_bind_ph     db2_bind_ph

void	do_error _((SV *h,SQLINTEGER rc, SQLHENV henv, SQLHDBC hconn, 
					SQLHSTMT hstmt, char *what));
void	fbh_dump _((imp_fbh_t *fbh, int i));

void	dbd_init _((dbistate_t *dbistate));
void	dbd_preparse _((imp_sth_t *imp_sth, char *statement));
int		dbd_describe _((SV *h, imp_sth_t *imp_sth));
/* end */