}
/* }}} */
-
+#if !defined(MYSQLND_USE_OPTIMISATIONS) || MYSQLND_USE_OPTIMISATIONS == 0
/* {{{ mysqlnd_get_client_info */
PHPAPI const char * mysqlnd_get_client_info()
{
return MYSQLND_VERSION_ID;
}
/* }}} */
-
+#endif
/* {{{ mysqlnd_conn::get_server_info */
static const char *
#ifndef MYSQLND_H
#define MYSQLND_H
-#define MYSQLND_VERSION "mysqlnd 5.0.3-dev - 080129 - $Revision$"
-#define MYSQLND_VERSION_ID 50002
+#define MYSQLND_VERSION "mysqlnd 5.0.4-dev - 080501 - $Revision$"
+#define MYSQLND_VERSION_ID 50004
/* This forces inlining of some accessor functions */
#define MYSQLND_USE_OPTIMISATIONS 0
#define mysqlnd_get_proto_info(conn) (conn)->protocol_version
#define mysqlnd_thread_id(conn) (conn)->thread_id
-#define mysqlnd_num_rows(result) ((result)->data? (result)->data->row_count:0)
+#define mysqlnd_num_rows(result) ((result)->stored_data? (result)->stored_data->row_count:0)
#define mysqlnd_num_fields(result) (result)->field_count
#define mysqlnd_fetch_lengths(result) ((result)->m.fetch_lengths? (result)->m.fetch_lengths((result)):NULL)
#define mysqlnd_field_seek(result, ofs) (result)->m.seek_field((result), (ofs))
-#define mysqlnd_field_tell(result) (result)->meta? (result)->meta->current_field:0)
+#define mysqlnd_field_tell(result) ((result)->meta? (result)->meta->current_field:0)
#define mysqlnd_fetch_field(result) (result)->m.fetch_field((result) TSRMLS_CC)
#define mysqlnd_fetch_field_direct(result,fnr) ((result)->meta? &((result)->meta->fields[(fnr)]):NULL)
#define mysqlnd_fetch_fields(result) ((result)->meta? (result)->meta->fields: NULL)
MYSQLND_DEBUG *dbg; /* The DBG object */
long net_cmd_buffer_size;
long net_read_buffer_size;
+ long log_mask;
#ifdef MYSQLND_THREADED
THREAD_T thread_id;
#endif
#define SERVER_STATUS_IN_TRANS 1 /* Transaction has started */
#define SERVER_STATUS_AUTOCOMMIT 2 /* Server in auto_commit mode */
#define SERVER_MORE_RESULTS_EXISTS 8 /* Multi query - next query exists */
-#define MYSQLND_SERVER_QUERY_NO_GOOD_INDEX_USED 16
-#define MYSQLND_SERVER_QUERY_NO_INDEX_USED 32
+#define SERVER_QUERY_NO_GOOD_INDEX_USED 16
+#define SERVER_QUERY_NO_INDEX_USED 32
/*
The server was able to fulfill the clients request and opened a
read-only non-scrollable cursor for a query. This flag comes
#define SERVER_STATUS_NO_BACKSLASH_ESCAPES 512
#define SERVER_QUERY_WAS_SLOW 1024
-
#define MYSQLND_NO_DATA 100
#define MYSQLND_DATA_TRUNCATED 101
STAT_NON_RSET_QUERY,
STAT_NO_INDEX_USED,
STAT_BAD_INDEX_USED,
+ STAT_QUERY_WAS_SLOW,
STAT_BUFFERED_SETS,
STAT_UNBUFFERED_SETS,
STAT_PS_BUFFERED_SETS,
#define MYSQL_ERRMSG_SIZE MYSQLND_ERRMSG_SIZE
#define SQLSTATE_LENGTH MYSQLND_SQLSTATE_LENGTH
-#define SERVER_QUERY_NO_GOOD_INDEX_USED MYSQLND_SERVER_QUERY_NO_GOOD_INDEX_USED
-#define SERVER_QUERY_NO_INDEX_USED MYSQLND_SERVER_QUERY_NO_INDEX_USED
-
-
/* functions */
#define mysql_affected_rows(r) mysqlnd_affected_rows((r))
#define mysql_autocommit(r,m) mysqlnd_autocommit((r),(m))
MYSQLND_THD_ZVAL_PCACHE *ret = calloc(1, sizeof(MYSQLND_THD_ZVAL_PCACHE));
DBG_ENTER("_mysqlnd_palloc_init_thd_cache");
DBG_INF_FMT("ret = %p", ret);
-
ret->parent = mysqlnd_palloc_get_cache_reference(cache);
#ifdef ZTS
stmt->state = MYSQLND_STMT_INITTED;
}
} else {
+ unsigned int to_log = MYSQLND_G(log_mask);
+ to_log &= fields_eof.server_status;
DBG_INF_FMT("warnings=%u server_status=%u", fields_eof.warning_count, fields_eof.server_status);
conn->upsert_status.warning_count = fields_eof.warning_count;
/*
of every result set (the EOF packet).
*/
conn->upsert_status.server_status = fields_eof.server_status;
- if (fields_eof.server_status & MYSQLND_SERVER_QUERY_NO_GOOD_INDEX_USED) {
+ if (fields_eof.server_status & SERVER_QUERY_NO_GOOD_INDEX_USED) {
stat = STAT_BAD_INDEX_USED;
- } else if (fields_eof.server_status & MYSQLND_SERVER_QUERY_NO_INDEX_USED) {
+ } else if (fields_eof.server_status & SERVER_QUERY_NO_INDEX_USED) {
stat = STAT_NO_INDEX_USED;
+ } else if (fields_eof.server_status & SERVER_QUERY_WAS_SLOW) {
+ stat = STAT_QUERY_WAS_SLOW;
}
- if (stat != STAT_LAST) {
+ if (to_log) {
#if A0
char *backtrace = mysqlnd_get_backtrace(TSRMLS_C);
php_log_err(backtrace TSRMLS_CC);
}
/* }}} */
-
+#if !defined(MYSQLND_USE_OPTIMISATIONS) || MYSQLND_USE_OPTIMISATIONS == 0
/* {{{ mysqlnd_res::fetch_lengths */
PHPAPI unsigned long * mysqlnd_fetch_lengths(MYSQLND_RES * const result)
{
return result->m.fetch_lengths? result->m.fetch_lengths(result):NULL;
}
/* }}} */
-
+#endif
/* {{{ mysqlnd_fetch_row_unbuffered_c */
static MYSQLND_ROW_C
{ STR_W_LEN("non_result_set_queries") },
{ STR_W_LEN("no_index_used") },
{ STR_W_LEN("bad_index_used") },
+ { STR_W_LEN("slow_queries") },
{ STR_W_LEN("buffered_sets") },
{ STR_W_LEN("unbuffered_sets") },
{ STR_W_LEN("ps_buffered_sets") },
#include "mysqlnd_debug.h"
#include "ext/standard/info.h"
+
/* {{{ mysqlnd_functions[]
*
* Every user visible function must have an entry in mysqlnd_functions[].
mysqlnd_globals->dbg = NULL; /* The DBG object*/
mysqlnd_globals->net_cmd_buffer_size = 2048;
mysqlnd_globals->net_read_buffer_size = 32768;
+ mysqlnd_globals->log_mask = 0;
}
/* }}} */
STD_PHP_INI_ENTRY("mysqlnd.debug", NULL, PHP_INI_SYSTEM, OnUpdateString, debug, zend_mysqlnd_globals, mysqlnd_globals)
STD_PHP_INI_ENTRY("mysqlnd.net_cmd_buffer_size", "2048", PHP_INI_ALL, OnUpdateLong, net_cmd_buffer_size, zend_mysqlnd_globals, mysqlnd_globals)
STD_PHP_INI_ENTRY("mysqlnd.net_read_buffer_size", "32768",PHP_INI_ALL, OnUpdateLong, net_read_buffer_size, zend_mysqlnd_globals, mysqlnd_globals)
+ STD_PHP_INI_ENTRY("mysqlnd.log_mask", "0", PHP_INI_ALL, OnUpdateLong, log_mask, zend_mysqlnd_globals, mysqlnd_globals)
PHP_INI_END()
/* }}} */