/*
$Id: dbdimp.h,v 1.44 2013/04/03 20:16:20 mpeppler Exp $
Copyright (c) 1997-2011 Michael Peppler
You may distribute under the terms of either the GNU General Public
License or the Artistic License, as specified in the Perl README file.
Based on DBD::Oracle dbdimp.h, Copyright (c) 1994,1995 Tim Bunce
*/
typedef struct imp_fbh_st imp_fbh_t;
/*
** Maximum character buffer for displaying a column
*/
#define MAX_CHAR_BUF 1024
typedef struct _col_data {
CS_SMALLINT indicator;
CS_INT type;
CS_INT realType;
CS_INT realLength;
union {
CS_CHAR *c;
CS_INT i;
#if defined(CS_UINT_TYPE)
CS_UINT ui;
CS_BIGINT bi;
CS_UBIGINT ubi;
#endif
CS_FLOAT f;
CS_DATETIME dt;
#if defined(CS_DATE_TYPE)
CS_DATE d;
CS_TIME t;
#endif
CS_MONEY mn;
CS_NUMERIC num;
CS_VOID *p;
} value;
int v_alloc;
CS_INT valuelen;
CS_VOID *ptr;
} ColData;
struct imp_drh_st {
dbih_drc_t com; /* MUST be first element in structure */
};
#define MAX_SQL_SIZE 255
/* Define dbh implementor data structure */
struct imp_dbh_st {
dbih_dbc_t com; /* MUST be first element in structure */
CS_CONNECTION *connection;
CS_LOCALE *locale;
CS_IODESC iodesc;
char tranName[32];
int inTransaction;
int doRealTran;
int chainedSupported;
int quotedIdentifier;
int useBin0x;
int binaryImage;
int dateFmt; /* 0 for Sybase native, 1 for ISO8601 */
int optSupported; /* 0 if the server doesn't support ct_options() */
int lasterr;
int lastsev;
char uid[32];
char pwd[32];
char server[64];
char charset[64];
char packetSize[64];
char language[64];
char ifile[255];
char loginTimeout[64];
char timeout[64];
char scriptName[255];
char hostname[255];
char database[260];
char curr_db[36];
char tdsLevel[30];
char encryptPassword[10];
char kerberosPrincipal[256];
char host[64]; /* for use with CS_SERVERADDR */
char port[20]; /* for use with CS_SERVERADDR */
char maxConnect[25];
char sslCAFile[255];
char blkLogin[16];
char tds_keepalive[16];
char serverType[32];
char serverVersion[15];
char serverVersionString[255];
int isDead;
SV *err_handler;
SV *row_cb;
SV *kerbGetTicket;
int enable_utf8;
int showEed;
int showSql;
int flushFinish;
int rowcount;
int doProcStatus;
int deadlockRetry;
int deadlockSleep;
int deadlockVerbose;
int nsqlNoStatus;
int disconnectInChild; /* if set, then OK to disconnect in child process
(even if pid different from pid that created the connection), subject to the
setting of InactiveDestroy */
int noChildCon; /* Don't create child connections for
simultaneous statement handles */
int failedDbUseFatal;
int bindEmptyStringNull;
int alwaysForceFailure; /* PR/471 */
int inUse; /* Set when the primary statement handle
(the one that uses the connection referred
to here) is in use. */
int pid; /* Set when the connection is opened, used checked in the DESTROY() call */
int init_done;
char *sql;
struct imp_sth_st *imp_sth; /* needed for BCP handling */
};
typedef struct phs_st {
int ftype;
int sql_type;
SV *sv;
int sv_type;
bool is_inout;
bool is_boundinout;
IV maxlen;
char *sv_buf;
CS_DATAFMT datafmt;
char varname[34];
int alen_incnull; /* 0 or 1 if alen should include null */
char name[1]; /* struct is malloc'd bigger as needed */
} phs_t;
/* struct to store pointer to output parameter and returned length */
typedef struct boundparams_st {
phs_t *phs;
int len;
} boundparams_t;
/* Define sth implementor data structure */
struct imp_sth_st {
dbih_stc_t com; /* MUST be first element in structure */
CS_CONNECTION *connection; /* set if this is a sub-connection */
CS_COMMAND *cmd;
ColData *coldata;
CS_DATAFMT *datafmt;
int numCols;
CS_INT lastResType;
CS_INT numRows;
int moreResults;
int doProcStatus;
int lastProcStatus;
int noBindBlob;
int retryCount;
int exec_done;
/* Input Details */
char dyn_id[50]; /* The id for this ct_dynamic() call */
int dyn_execed; /* true if ct_dynamic(CS_EXECUTE) has been called */
int type; /* 0 = normal, 1 => rpc */
char proc[150]; /* used for rpc calls */
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 syb_pad_empty; /* convert ""->" " when binding */
/* Select Column Output Details */
int done_desc; /* have we described this sth yet ? */
/* BCP functionality */
int bcpFlag;
int bcpIdentityFlag;
int bcpIdentityCol;
CS_BLKDESC *bcp_desc;
int bcpRows; /* incremented for each successful call to blk_rowxfer, set to -1 when blk_done(CS_BLK_CANCEL) has been called. */
int bcpAutoCommit;
/* (In/)Out Parameter Details */
int has_inout_params;
};
#define IMP_STH_EXECUTING 0x0001