2004-05-18 18:01:52 +00:00
/*
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| PHP Version 5 |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
2008-12-31 11:15:49 +00:00
| Copyright ( c ) 1997 - 2009 The PHP Group |
2004-05-18 18:01:52 +00:00
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
2006-01-01 12:51:34 +00:00
| This source file is subject to version 3.01 of the PHP license , |
2004-05-18 18:01:52 +00:00
| that is bundled with this package in the file LICENSE , and is |
| available through the world - wide - web at the following url : |
2006-01-01 12:51:34 +00:00
| http : //www.php.net/license/3_01.txt |
2004-05-18 18:01:52 +00:00
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world - wide - web , please send a note to |
| license @ php . net so we can mail you a copy immediately . |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| Author : George Schlossnagle < george @ omniti . com > |
2005-07-03 02:20:08 +00:00
| Wez Furlong < wez @ php . net > |
2008-07-21 13:09:28 +00:00
| Johannes Schlueter < johannes @ mysql . com > |
2004-05-18 18:01:52 +00:00
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
*/
/* $Id$ */
# ifndef PHP_PDO_MYSQL_INT_H
# define PHP_PDO_MYSQL_INT_H
2008-07-21 13:09:28 +00:00
# if defined(PDO_USE_MYSQLND)
# include "ext / mysqlnd / mysqlnd.h"
# include "ext / mysql / mysql_mysqlnd.h"
# include "ext / mysqlnd / mysqlnd_libmysql_compat.h"
# define PDO_MYSQL_PARAM_BIND MYSQLND_PARAM_BIND
# else
# include <mysql.h>
# define PDO_MYSQL_PARAM_BIND MYSQL_BIND
# endif
# if defined(PDO_USE_MYSQLND) && PHP_DEBUG && !defined(PHP_WIN32)
# define PDO_DBG_ENABLED 1
# define PDO_DBG_INF(msg) do { if (dbg_skip_trace == FALSE) PDO_MYSQL_G(dbg)->m->log(PDO_MYSQL_G(dbg), __LINE__, __FILE__, -1, "info : ", (msg)); } while (0)
# define PDO_DBG_ERR(msg) do { if (dbg_skip_trace == FALSE) PDO_MYSQL_G(dbg)->m->log(PDO_MYSQL_G(dbg), __LINE__, __FILE__, -1, "error: ", (msg)); } while (0)
# define PDO_DBG_INF_FMT(...) do { if (dbg_skip_trace == FALSE) PDO_MYSQL_G(dbg)->m->log_va(PDO_MYSQL_G(dbg), __LINE__, __FILE__, -1, "info : ", __VA_ARGS__); } while (0)
# define PDO_DBG_ERR_FMT(...) do { if (dbg_skip_trace == FALSE) PDO_MYSQL_G(dbg)->m->log_va(PDO_MYSQL_G(dbg), __LINE__, __FILE__, -1, "error: ", __VA_ARGS__); } while (0)
# define PDO_DBG_ENTER(func_name) zend_bool dbg_skip_trace = TRUE; if (PDO_MYSQL_G(dbg)) dbg_skip_trace = !PDO_MYSQL_G(dbg)->m->func_enter(PDO_MYSQL_G(dbg), __LINE__, __FILE__, func_name, strlen(func_name));
# define PDO_DBG_RETURN(value) do { if (PDO_MYSQL_G(dbg)) PDO_MYSQL_G(dbg)->m->func_leave(PDO_MYSQL_G(dbg), __LINE__, __FILE__); return (value); } while (0)
# define PDO_DBG_VOID_RETURN do { if (PDO_MYSQL_G(dbg)) PDO_MYSQL_G(dbg)->m->func_leave(PDO_MYSQL_G(dbg), __LINE__, __FILE__); return; } while (0)
# else
# define PDO_DBG_ENABLED 0
static inline void PDO_DBG_INF ( char * msg ) { }
static inline void PDO_DBG_ERR ( char * msg ) { }
static inline void PDO_DBG_INF_FMT ( char * format , . . . ) { }
static inline void PDO_DBG_ERR_FMT ( char * format , . . . ) { }
static inline void PDO_DBG_ENTER ( char * func_name ) { }
# define PDO_DBG_RETURN(value) return (value)
# define PDO_DBG_VOID_RETURN return;
# endif
# if defined(PDO_USE_MYSQLND)
# include "ext/mysqlnd/mysqlnd_debug.h"
# endif
# ifdef PDO_USE_MYSQLND
ZEND_BEGIN_MODULE_GLOBALS ( pdo_mysql )
MYSQLND_THD_ZVAL_PCACHE * mysqlnd_thd_zval_cache ;
long cache_size ;
# ifndef PHP_WIN32
char * default_socket ;
# endif
# if PDO_DBG_ENABLED
char * debug ; /* The actual string */
MYSQLND_DEBUG * dbg ; /* The DBG object */
# endif
ZEND_END_MODULE_GLOBALS ( pdo_mysql )
ZEND_EXTERN_MODULE_GLOBALS ( pdo_mysql ) ;
# endif
# ifdef ZTS
# define PDO_MYSQL_G(v) TSRMG(pdo_mysql_globals_id, zend_pdo_mysql_globals *, v)
# else
# define PDO_MYSQL_G(v) (pdo_mysql_globals.v)
# endif
2004-05-18 18:01:52 +00:00
2004-05-20 15:51:25 +00:00
typedef struct {
const char * file ;
int line ;
unsigned int errcode ;
char * errmsg ;
} pdo_mysql_error_info ;
2004-05-18 19:06:47 +00:00
/* stuff we use in a mySQL database handle */
2004-05-18 18:01:52 +00:00
typedef struct {
MYSQL * server ;
2004-05-20 15:51:25 +00:00
2004-05-18 18:01:52 +00:00
unsigned attached : 1 ;
2005-06-24 19:45:59 +00:00
unsigned buffered : 1 ;
2006-03-05 17:18:01 +00:00
unsigned emulate_prepare : 1 ;
2008-07-21 13:09:28 +00:00
unsigned fetch_table_names : 1 ;
unsigned _reserved : 31 ;
# if !PDO_USE_MYSQLND
2006-02-14 14:26:11 +00:00
unsigned long max_buffer_size ;
2008-07-21 13:09:28 +00:00
# endif
2004-05-20 15:51:25 +00:00
pdo_mysql_error_info einfo ;
2004-05-18 18:01:52 +00:00
} pdo_mysql_db_handle ;
typedef struct {
MYSQL_FIELD * def ;
} pdo_mysql_column ;
typedef struct {
pdo_mysql_db_handle * H ;
MYSQL_RES * result ;
2008-07-21 13:09:28 +00:00
const MYSQL_FIELD * fields ;
2004-05-18 18:01:52 +00:00
MYSQL_ROW current_data ;
2008-07-21 13:09:28 +00:00
# if PDO_USE_MYSQLND
unsigned long * current_lengths ;
# else
2004-05-18 18:01:52 +00:00
long * current_lengths ;
2008-07-21 13:09:28 +00:00
# endif
2005-02-27 20:34:36 +00:00
pdo_mysql_error_info einfo ;
2008-07-21 13:09:28 +00:00
# if HAVE_MYSQL_STMT_PREPARE || PDO_USE_MYSQLND
# if PDO_USE_MYSQLND
MYSQLND_STMT * stmt ;
# else
MYSQL_STMT * stmt ;
# endif
2005-07-03 02:20:08 +00:00
int num_params ;
2008-07-21 13:09:28 +00:00
PDO_MYSQL_PARAM_BIND * params ;
# ifndef PDO_USE_MYSQLND
2005-07-03 02:20:08 +00:00
my_bool * in_null ;
2008-07-21 13:09:28 +00:00
unsigned long * in_length ;
# endif
PDO_MYSQL_PARAM_BIND * bound_result ;
2005-07-03 02:20:08 +00:00
my_bool * out_null ;
2008-07-21 13:09:28 +00:00
unsigned long * out_length ;
unsigned int params_given ;
unsigned max_length : 1 ;
2005-07-03 02:20:08 +00:00
# endif
} pdo_mysql_stmt ;
2004-05-18 18:01:52 +00:00
extern pdo_driver_t pdo_mysql_driver ;
2004-05-20 16:13:13 +00:00
extern int _pdo_mysql_error ( pdo_dbh_t * dbh , pdo_stmt_t * stmt , const char * file , int line TSRMLS_DC ) ;
2004-05-20 16:17:37 +00:00
# define pdo_mysql_error(s) _pdo_mysql_error(s, NULL, __FILE__, __LINE__ TSRMLS_CC)
# define pdo_mysql_error_stmt(s) _pdo_mysql_error(stmt->dbh, stmt, __FILE__, __LINE__ TSRMLS_CC)
2004-05-18 18:01:52 +00:00
extern struct pdo_stmt_methods mysql_stmt_methods ;
2005-06-24 19:45:59 +00:00
enum {
PDO_MYSQL_ATTR_USE_BUFFERED_QUERY = PDO_ATTR_DRIVER_SPECIFIC ,
2005-10-27 17:34:24 +00:00
PDO_MYSQL_ATTR_LOCAL_INFILE ,
2008-07-21 13:09:28 +00:00
# ifndef PDO_USE_MYSQLND
2005-10-27 17:34:24 +00:00
PDO_MYSQL_ATTR_INIT_COMMAND ,
PDO_MYSQL_ATTR_READ_DEFAULT_FILE ,
PDO_MYSQL_ATTR_READ_DEFAULT_GROUP ,
2006-02-14 14:26:11 +00:00
PDO_MYSQL_ATTR_MAX_BUFFER_SIZE ,
2008-10-14 19:00:53 +00:00
PDO_MYSQL_ATTR_COMPRESS ,
2008-07-21 13:09:28 +00:00
# endif
2006-03-05 17:18:01 +00:00
PDO_MYSQL_ATTR_DIRECT_QUERY ,
2008-10-27 18:32:08 +00:00
PDO_MYSQL_ATTR_FOUND_ROWS ,
PDO_MYSQL_ATTR_IGNORE_SPACE
2005-06-24 19:45:59 +00:00
} ;
2008-07-21 12:58:51 +00:00
2004-05-18 18:01:52 +00:00
# endif