mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00

These are either in debug code (fix them), commented out (drop them) or in dead compatibility macros (drop them). One usage was in php_stream_get_from_zval(), which we have not used since at least PHP 5.2 and, judging from the fact that nobody complained about it causing compile errors in PHP 7, nobody else uses it either, so drop it. There are still remaining uses in mysqli embedded and odbc birdstep. These probably need to be dropped outright.
239 lines
8 KiB
C
239 lines
8 KiB
C
/*
|
|
+----------------------------------------------------------------------+
|
|
| PHP Version 7 |
|
|
+----------------------------------------------------------------------+
|
|
| Copyright (c) 2006-2016 The PHP Group |
|
|
+----------------------------------------------------------------------+
|
|
| This source file is subject to version 3.01 of the PHP license, |
|
|
| that is bundled with this package in the file LICENSE, and is |
|
|
| available through the world-wide-web at the following url: |
|
|
| http://www.php.net/license/3_01.txt |
|
|
| 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. |
|
|
+----------------------------------------------------------------------+
|
|
| Authors: Andrey Hristov <andrey@mysql.com> |
|
|
| Ulf Wendel <uwendel@mysql.com> |
|
|
| Georg Richter <georg@mysql.com> |
|
|
+----------------------------------------------------------------------+
|
|
*/
|
|
|
|
/* $Id$ */
|
|
|
|
#ifndef MYSQLND_PRIV_H
|
|
#define MYSQLND_PRIV_H
|
|
|
|
#ifdef ZTS
|
|
#include "TSRM.h"
|
|
#endif
|
|
|
|
#define MYSQLND_STR_W_LEN(str) str, (sizeof(str) - 1)
|
|
|
|
#define MYSQLND_DEBUG_DUMP_TIME 1
|
|
#define MYSQLND_DEBUG_DUMP_TRACE 2
|
|
#define MYSQLND_DEBUG_DUMP_PID 4
|
|
#define MYSQLND_DEBUG_DUMP_LINE 8
|
|
#define MYSQLND_DEBUG_DUMP_FILE 16
|
|
#define MYSQLND_DEBUG_DUMP_LEVEL 32
|
|
#define MYSQLND_DEBUG_APPEND 64
|
|
#define MYSQLND_DEBUG_FLUSH 128
|
|
#define MYSQLND_DEBUG_TRACE_MEMORY_CALLS 256
|
|
#define MYSQLND_DEBUG_PROFILE_CALLS 512
|
|
|
|
|
|
/* Client Error codes */
|
|
#define CR_UNKNOWN_ERROR 2000
|
|
#define CR_CONNECTION_ERROR 2002
|
|
#define CR_SERVER_GONE_ERROR 2006
|
|
#define CR_OUT_OF_MEMORY 2008
|
|
#define CR_SERVER_LOST 2013
|
|
#define CR_COMMANDS_OUT_OF_SYNC 2014
|
|
#define CR_CANT_FIND_CHARSET 2019
|
|
#define CR_MALFORMED_PACKET 2027
|
|
#define CR_NOT_IMPLEMENTED 2054
|
|
#define CR_NO_PREPARE_STMT 2030
|
|
#define CR_PARAMS_NOT_BOUND 2031
|
|
#define CR_INVALID_PARAMETER_NO 2034
|
|
#define CR_INVALID_BUFFER_USE 2035
|
|
|
|
#define MYSQLND_EE_FILENOTFOUND 7890
|
|
|
|
#define UNKNOWN_SQLSTATE "HY000"
|
|
|
|
#define MAX_CHARSET_LEN 32
|
|
|
|
|
|
#define SET_ERROR_AFF_ROWS(s) (s)->upsert_status->affected_rows = (uint64_t) ~0
|
|
|
|
/* Error handling */
|
|
#define SET_NEW_MESSAGE(buf, buf_len, message, len, persistent) \
|
|
{\
|
|
if ((buf)) { \
|
|
mnd_pefree((buf), (persistent)); \
|
|
} \
|
|
if ((message)) { \
|
|
(buf) = mnd_pestrndup((message), (len), (persistent)); \
|
|
} else { \
|
|
(buf) = NULL; \
|
|
} \
|
|
(buf_len) = (len); \
|
|
}
|
|
|
|
#define SET_EMPTY_MESSAGE(buf, buf_len, persistent) \
|
|
{\
|
|
if ((buf)) { \
|
|
mnd_pefree((buf), (persistent)); \
|
|
(buf) = NULL; \
|
|
} \
|
|
(buf_len) = 0; \
|
|
}
|
|
|
|
|
|
#define SET_EMPTY_ERROR(error_info) \
|
|
{ \
|
|
(error_info).error_no = 0; \
|
|
(error_info).error[0] = '\0'; \
|
|
strlcpy((error_info).sqlstate, "00000", sizeof((error_info).sqlstate)); \
|
|
if ((error_info).error_list) { \
|
|
zend_llist_clean((error_info).error_list); \
|
|
} \
|
|
}
|
|
|
|
|
|
#define SET_CLIENT_ERROR(error_info, a, b, c) \
|
|
{ \
|
|
if (0 == (a)) { \
|
|
SET_EMPTY_ERROR((error_info)); \
|
|
} else { \
|
|
(error_info).error_no = (a); \
|
|
strlcpy((error_info).sqlstate, (b), sizeof((error_info).sqlstate)); \
|
|
strlcpy((error_info).error, (c), sizeof((error_info).error)); \
|
|
if ((error_info).error_list) {\
|
|
MYSQLND_ERROR_LIST_ELEMENT error_for_the_list = {0}; \
|
|
\
|
|
error_for_the_list.error_no = (a); \
|
|
strlcpy(error_for_the_list.sqlstate, (b), sizeof(error_for_the_list.sqlstate)); \
|
|
error_for_the_list.error = mnd_pestrdup((c), TRUE); \
|
|
if (error_for_the_list.error) { \
|
|
DBG_INF_FMT("adding error [%s] to the list", error_for_the_list.error); \
|
|
zend_llist_add_element((error_info).error_list, &error_for_the_list); \
|
|
} \
|
|
} \
|
|
} \
|
|
}
|
|
|
|
|
|
#define COPY_CLIENT_ERROR(error_info_to, error_info_from) \
|
|
{ \
|
|
SET_CLIENT_ERROR((error_info_to), (error_info_from).error_no, (error_info_from).sqlstate, (error_info_from).error); \
|
|
}
|
|
|
|
|
|
#define SET_OOM_ERROR(error_info) SET_CLIENT_ERROR((error_info), CR_OUT_OF_MEMORY, UNKNOWN_SQLSTATE, mysqlnd_out_of_memory)
|
|
|
|
|
|
#define SET_STMT_ERROR(stmt, a, b, c) SET_CLIENT_ERROR(*(stmt)->error_info, a, b, c)
|
|
|
|
#define CONN_GET_STATE(c) (c)->m->get_state((c))
|
|
#define CONN_SET_STATE(c, s) (c)->m->set_state((c), (s))
|
|
|
|
/* PS stuff */
|
|
typedef void (*ps_field_fetch_func)(zval * zv, const MYSQLND_FIELD * const field, unsigned int pack_len, zend_uchar ** row);
|
|
struct st_mysqlnd_perm_bind {
|
|
ps_field_fetch_func func;
|
|
/* should be signed int */
|
|
int pack_len;
|
|
unsigned int php_type;
|
|
zend_bool is_possibly_blob;
|
|
zend_bool can_ret_as_str_in_uni;
|
|
};
|
|
|
|
extern struct st_mysqlnd_perm_bind mysqlnd_ps_fetch_functions[MYSQL_TYPE_LAST + 1];
|
|
|
|
enum_func_status mysqlnd_stmt_fetch_row_buffered(MYSQLND_RES * result, void * param, unsigned int flags, zend_bool * fetched_anything);
|
|
enum_func_status mysqlnd_fetch_stmt_row_cursor(MYSQLND_RES * result, void * param, unsigned int flags, zend_bool * fetched_anything);
|
|
|
|
|
|
PHPAPI extern const char * const mysqlnd_old_passwd;
|
|
PHPAPI extern const char * const mysqlnd_out_of_sync;
|
|
PHPAPI extern const char * const mysqlnd_server_gone;
|
|
PHPAPI extern const char * const mysqlnd_out_of_memory;
|
|
|
|
PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_object_factory);
|
|
PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_conn);
|
|
PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_conn_data);
|
|
PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_res);
|
|
PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_result_unbuffered);
|
|
PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_result_buffered);
|
|
PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_protocol);
|
|
PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_net);
|
|
|
|
enum_func_status mysqlnd_handle_local_infile(MYSQLND_CONN_DATA * conn, const char * filename, zend_bool * is_warning);
|
|
|
|
|
|
|
|
void _mysqlnd_init_ps_subsystem();/* This one is private, mysqlnd_library_init() will call it */
|
|
void _mysqlnd_init_ps_fetch_subsystem();
|
|
|
|
void ps_fetch_from_1_to_8_bytes(zval * zv, const MYSQLND_FIELD * const field, unsigned int pack_len, zend_uchar ** row, unsigned int byte_count);
|
|
|
|
void mysqlnd_plugin_subsystem_init(void);
|
|
void mysqlnd_plugin_subsystem_end(void);
|
|
|
|
void mysqlnd_register_builtin_authentication_plugins(void);
|
|
|
|
void mysqlnd_example_plugin_register(void);
|
|
|
|
struct st_mysqlnd_packet_greet;
|
|
struct st_mysqlnd_authentication_plugin;
|
|
|
|
enum_func_status
|
|
mysqlnd_auth_handshake(MYSQLND_CONN_DATA * conn,
|
|
const char * const user,
|
|
const char * const passwd,
|
|
const size_t passwd_len,
|
|
const char * const db,
|
|
const size_t db_len,
|
|
const MYSQLND_OPTIONS * const options,
|
|
zend_ulong mysql_flags,
|
|
unsigned int server_charset_no,
|
|
zend_bool use_full_blown_auth_packet,
|
|
const char * const auth_protocol,
|
|
const zend_uchar * const auth_plugin_data,
|
|
const size_t auth_plugin_data_len,
|
|
char ** switch_to_auth_protocol,
|
|
size_t * switch_to_auth_protocol_len,
|
|
zend_uchar ** switch_to_auth_protocol_data,
|
|
size_t * switch_to_auth_protocol_data_len
|
|
);
|
|
|
|
enum_func_status
|
|
mysqlnd_auth_change_user(MYSQLND_CONN_DATA * const conn,
|
|
const char * const user,
|
|
const size_t user_len,
|
|
const char * const passwd,
|
|
const size_t passwd_len,
|
|
const char * const db,
|
|
const size_t db_len,
|
|
const zend_bool silent,
|
|
zend_bool use_full_blown_auth_packet,
|
|
const char * const auth_protocol,
|
|
zend_uchar * auth_plugin_data,
|
|
size_t auth_plugin_data_len,
|
|
char ** switch_to_auth_protocol,
|
|
size_t * switch_to_auth_protocol_len,
|
|
zend_uchar ** switch_to_auth_protocol_data,
|
|
size_t * switch_to_auth_protocol_data_len
|
|
);
|
|
|
|
#endif /* MYSQLND_PRIV_H */
|
|
|
|
|
|
/*
|
|
* Local variables:
|
|
* tab-width: 4
|
|
* c-basic-offset: 4
|
|
* End:
|
|
* vim600: noet sw=4 ts=4 fdm=marker
|
|
* vim<600: noet sw=4 ts=4
|
|
*/
|