/* * DBD::mSQL - DBI driver for the mysql database * * Copyright (c) 1997 Jochen Wiedmann * * Based on DBD::Oracle; DBD::Oracle is * * Copyright (c) 1994,1995 Tim Bunce * * You may distribute this under the terms of either the GNU General Public * License or the Artistic License, as specified in the Perl README file, * with the exception that it cannot be placed on a CD-ROM or similar media * for commercial distribution without the prior approval of the author. * * Author: Jochen Wiedmann * Am Eisteich 9 * 72555 Metzingen * Germany * * Email: joe@ispsoft.de * Fax: +49 7123 / 14892 * * * $Id: dbdimp.h,v 1.1.1.1 1999/07/13 08:14:45 joe Exp $ */ /* * Header files we use */ #include /* installed by the DBI module */ #include /* Comes with MySQL-devel */ #include /* Comes with MySQL-devel */ /* * The following are return codes passed in $h->err in case of * errors by DBD::mysql. */ enum errMsgs { JW_ERR_CONNECT = 1, JW_ERR_SELECT_DB, JW_ERR_STORE_RESULT, JW_ERR_NOT_ACTIVE, JW_ERR_QUERY, JW_ERR_FETCH_ROW, JW_ERR_LIST_DB, JW_ERR_CREATE_DB, JW_ERR_DROP_DB, JW_ERR_LIST_TABLES, JW_ERR_LIST_FIELDS, JW_ERR_LIST_FIELDS_INT, JW_ERR_LIST_SEL_FIELDS, JW_ERR_NO_RESULT, JW_ERR_NOT_IMPLEMENTED, JW_ERR_ILLEGAL_PARAM_NUM, JW_ERR_MEM, JW_ERR_LIST_INDEX, JW_ERR_SEQUENCE, TX_ERR_AUTOCOMMIT, TX_ERR_COMMIT, TX_ERR_ROLLBACK }; /* * Internal constants, used for fetching array attributes */ enum av_attribs { AV_ATTRIB_NAME = 0, AV_ATTRIB_TABLE, AV_ATTRIB_TYPE, AV_ATTRIB_SQL_TYPE, AV_ATTRIB_IS_PRI_KEY, AV_ATTRIB_IS_NOT_NULL, AV_ATTRIB_NULLABLE, AV_ATTRIB_LENGTH, AV_ATTRIB_IS_NUM, AV_ATTRIB_TYPE_NAME, AV_ATTRIB_PRECISION, AV_ATTRIB_SCALE, AV_ATTRIB_MAX_LENGTH, AV_ATTRIB_IS_KEY, AV_ATTRIB_IS_BLOB, AV_ATTRIB_IS_AUTO_INCREMENT, AV_ATTRIB_LAST /* Dummy attribute, never used, for allocation */ }; /* purposes only */ /* * This is our part of the driver handle. We receive the handle as * an "SV*", say "drh", and receive a pointer to the structure below * by declaring * * D_imp_drh(drh); * * This declares a variable called "imp_drh" of type * "struct imp_drh_st *". */ struct imp_drh_st { dbih_drc_t com; /* MUST be first element in structure */ }; /* * Likewise, this is our part of the database handle, as returned * by DBI->connect. We receive the handle as an "SV*", say "dbh", * and receive a pointer to the structure below by declaring * * D_imp_dbh(dbh); * * This declares a variable called "imp_dbh" of type * "struct imp_dbh_st *". */ struct imp_dbh_st { dbih_dbc_t com; /* MUST be first element in structure */ MYSQL mysql; int has_transactions; /* boolean indicating support for * transactions, currently always * TRUE for MySQL and always FALSE * for mSQL. */ }; /* * The bind_param method internally uses this structure for storing * parameters. */ typedef struct imp_sth_ph_st { SV* value; int type; } imp_sth_ph_t; /* * Finally our part of the statement handle. We receive the handle as * an "SV*", say "dbh", and receive a pointer to the structure below * by declaring * * D_imp_sth(sth); * * This declares a variable called "imp_sth" of type * "struct imp_sth_st *". */ struct imp_sth_st { dbih_stc_t com; /* MUST be first element in structure */ MYSQL_RES* cda; /* result */ int currow; /* number of current row */ long row_num; /* total number of rows */ int done_desc; /* have we described this sth yet ? */ long long_buflen; /* length for long/longraw (if >0) */ bool long_trunc_ok; /* is truncating a long an error */ unsigned long insertid; /* ID of auto insert */ imp_sth_ph_t* params; /* Pointer to parameter array */ AV* av_attr[AV_ATTRIB_LAST];/* For caching array attributes */ int use_mysql_use_result; /* TRUE if execute should use */ /* mysql_use_result rather than */ /* mysql_store_result */ }; /* * And last, not least: The prototype definitions. * * These defines avoid name clashes for multiple statically linked DBD's */ #define dbd_init mysql_dr_init #define dbd_db_login mysql_db_login #define dbd_db_do mysql_db_do #define dbd_db_commit mysql_db_commit #define dbd_db_rollback mysql_db_rollback #define dbd_db_disconnect mysql_db_disconnect #define dbd_discon_all mysql_db_discon_all #define dbd_db_destroy mysql_db_destroy #define dbd_db_STORE_attrib mysql_db_STORE_attrib #define dbd_db_FETCH_attrib mysql_db_FETCH_attrib #define dbd_st_prepare mysql_st_prepare #define dbd_st_execute mysql_st_execute #define dbd_st_fetch mysql_st_fetch #define dbd_st_finish mysql_st_finish #define dbd_st_destroy mysql_st_destroy #define dbd_st_blob_read mysql_st_blob_read #define dbd_st_STORE_attrib mysql_st_STORE_attrib #define dbd_st_FETCH_attrib mysql_st_FETCH_attrib #define dbd_st_FETCH_internal mysql_st_FETCH_internal #define dbd_describe mysql_describe #define dbd_bind_ph mysql_bind_ph #define BindParam mysql_st_bind_param #define mymsql_constant mysql_constant #define do_warn mysql_dr_warn #define do_error mysql_dr_error #define dbd_db_type_info_all mysql_db_type_info_all #define dbd_db_quote mysql_db_quote #include void do_error (SV* h, int rc, const char *what); SV *dbd_db_fieldlist (MYSQL_RES* res); void dbd_preparse (imp_sth_t *imp_sth, SV *statement); int mysql_st_internal_execute(SV*, SV*, SV*, int, imp_sth_ph_t*, MYSQL_RES**, MYSQL*, int); AV* dbd_db_type_info_all (SV* dbh, imp_dbh_t* imp_dbh); SV* dbd_db_quote(SV*, SV*, SV*); extern MYSQL* mysql_dr_connect(MYSQL*, char*, char*, char*, char*, char*, char*, imp_dbh_t*); extern int mysql_db_reconnect(SV*);