georg Fri Jan 7 10:00:00 2005 EDT
Added files:
/php-src/ext/mysqli mysqli_driver.c mysqli_embedded.c
mysqli_exception.c mysqli_warning.c
/php-src/ext/mysqli/tests skipifemb.inc
Modified files:
/php-src/ext/mysqli config.m4 mysqli.c mysqli_api.c mysqli_fe.c
mysqli_nonapi.c mysqli_prop.c mysqli_report.c
php_mysqli.h
/php-src/ext/mysqli/tests 001.phpt 014.phpt 017.phpt 033.phpt
034.phpt 041.phpt 045.phpt 047.phpt
049.phpt 061.phpt connect.inc skipif.inc
Log:
Added new classes:
mysqli_driver
mysqli_warning
mysqli_exception
mysqli_sql_exception
Improved embedded server support
changed testsuite to work also with embedded server
Made statement and resultset classes extendable
minor fixes
http://cvs.php.net/diff.php/php-src/ext/mysqli/config.m4?r1=1.18&r2=1.19&ty=u
Index: php-src/ext/mysqli/config.m4
diff -u php-src/ext/mysqli/config.m4:1.18 php-src/ext/mysqli/config.m4:1.19
--- php-src/ext/mysqli/config.m4:1.18 Thu Jul 22 03:24:55 2004
+++ php-src/ext/mysqli/config.m4 Fri Jan 7 09:59:59 2005
@@ -1,5 +1,5 @@
dnl
-dnl $Id: config.m4,v 1.18 2004/07/22 07:24:55 georg Exp $
+dnl $Id: config.m4,v 1.19 2005/01/07 14:59:59 georg Exp $
dnl config.m4 for extension mysqli
PHP_ARG_WITH(mysqli, for MySQLi support,
@@ -54,6 +54,6 @@
$MYSQLI_LIBLINE
])
- PHP_NEW_EXTENSION(mysqli, mysqli.c mysqli_api.c mysqli_prop.c
mysqli_nonapi.c mysqli_fe.c mysqli_report.c mysqli_repl.c, $ext_shared)
+ PHP_NEW_EXTENSION(mysqli, mysqli.c mysqli_api.c mysqli_prop.c
mysqli_nonapi.c mysqli_fe.c mysqli_report.c mysqli_repl.c mysqli_driver.c
mysqli_warning.c mysqli_exception.c mysqli_embedded.c, $ext_shared)
PHP_SUBST(MYSQLI_SHARED_LIBADD)
fi
http://cvs.php.net/diff.php/php-src/ext/mysqli/mysqli.c?r1=1.57&r2=1.58&ty=u
Index: php-src/ext/mysqli/mysqli.c
diff -u php-src/ext/mysqli/mysqli.c:1.57 php-src/ext/mysqli/mysqli.c:1.58
--- php-src/ext/mysqli/mysqli.c:1.57 Sun Dec 26 08:16:38 2004
+++ php-src/ext/mysqli/mysqli.c Fri Jan 7 09:59:59 2005
@@ -15,7 +15,7 @@
| Author: Georg Richter <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
- $Id: mysqli.c,v 1.57 2004/12/26 13:16:38 georg Exp $
+ $Id: mysqli.c,v 1.58 2005/01/07 14:59:59 georg Exp $
*/
#ifdef HAVE_CONFIG_H
@@ -37,9 +37,12 @@
ZEND_DECLARE_MODULE_GLOBALS(mysqli)
static zend_object_handlers mysqli_object_handlers;
static HashTable classes;
+static HashTable mysqli_driver_properties;
static HashTable mysqli_link_properties;
static HashTable mysqli_result_properties;
static HashTable mysqli_stmt_properties;
+static HashTable mysqli_warning_properties;
+
extern void php_mysqli_connect(INTERNAL_FUNCTION_PARAMETERS);
typedef int (*mysqli_read_t)(mysqli_object *obj, zval **retval TSRMLS_DC);
@@ -142,6 +145,10 @@
if (my_res && my_res->ptr) {
mysql_free_result(my_res->ptr);
}
+ } else if (intern->zo.ce == mysqli_warning_class_entry) { /* warning
object */
+ if (my_res && my_res->ptr) {
+ php_clear_warnings((MYSQLI_WARNING *)my_res->ptr);
+ }
}
my_efree(my_res);
efree(object);
@@ -282,7 +289,8 @@
mysqli_object *obj = (mysqli_object *)zend_objects_get_address(object
TSRMLS_CC);
if (obj->zo.ce != mysqli_link_class_entry && obj->zo.ce !=
mysqli_stmt_class_entry &&
- obj->zo.ce != mysqli_result_class_entry) {
+ obj->zo.ce != mysqli_result_class_entry && obj->zo.ce !=
mysqli_driver_class_entry &&
+ obj->zo.ce != mysqli_warning_class_entry) {
return obj->zo.ce->constructor;
} else {
static zend_internal_function f;
@@ -300,6 +308,10 @@
f.handler = ZEND_FN(mysqli_stmt_construct);
} else if (obj->zo.ce == mysqli_result_class_entry) {
f.handler = ZEND_FN(mysqli_result_construct);
+ } else if (obj->zo.ce == mysqli_driver_class_entry) {
+ f.handler = ZEND_FN(mysqli_driver_construct);
+ } else if (obj->zo.ce == mysqli_warning_class_entry) {
+ f.handler = ZEND_FN(mysqli_driver_construct);
}
return (union _zend_function*)&f;
@@ -397,6 +409,11 @@
mysqli_globals->report_mode = 0;
mysqli_globals->report_ht = 0;
mysqli_globals->multi_query = 0;
+#ifdef HAVE_EMBEDDED_MYSQLI
+ mysqli_globals->embedded = 1;
+#else
+ mysqli_globals->embedded = 0;
+#endif
}
/* }}} */
@@ -404,9 +421,8 @@
*/
PHP_MINIT_FUNCTION(mysqli)
{
- zend_class_entry *ce;
+ zend_class_entry *ce,cex;
zend_object_handlers *std_hnd = zend_get_std_object_handlers();
-
ZEND_INIT_MODULE_GLOBALS(mysqli, php_mysqli_init_globals, NULL);
REGISTER_INI_ENTRIES();
@@ -420,13 +436,37 @@
zend_hash_init(&classes, 0, NULL, NULL, 1);
- REGISTER_MYSQLI_CLASS_ENTRY("mysqli", mysqli_link_class_entry,
mysqli_link_methods);
+ INIT_CLASS_ENTRY(cex, "mysqli_sql_exception", mysqli_exception_methods);
+#ifdef HAVE_SPL
+ mysqli_exception_class_entry = zend_register_internal_class_ex(&cex,
spl_ce_RuntimeException, NULL TSRMLS_CC);
+#else
+ mysqli_exception_class_entry = zend_register_internal_class_ex(&cex,
zend_exception_get_default(), NULL TSRMLS_CC);
+#endif
+ mysqli_exception_class_entry->ce_flags |= ZEND_ACC_FINAL;
+ zend_declare_property_long(mysqli_exception_class_entry, "code",
sizeof("code")-1, 0, ZEND_ACC_PROTECTED TSRMLS_CC);
+ zend_declare_property_string(mysqli_exception_class_entry, "sqlstate",
sizeof("sqlstate")-1, "00000", ZEND_ACC_PROTECTED TSRMLS_CC);
+
+ REGISTER_MYSQLI_CLASS_ENTRY("mysqli_driver", mysqli_driver_class_entry,
mysqli_driver_methods);
+ ce = mysqli_driver_class_entry;
+ zend_hash_init(&mysqli_driver_properties, 0, NULL, NULL, 1);
+ MYSQLI_ADD_PROPERTIES(&mysqli_driver_properties,
mysqli_driver_property_entries);
+ zend_hash_add(&classes, ce->name, ce->name_length+1,
&mysqli_driver_properties, sizeof(mysqli_driver_properties), NULL);
+ ce->ce_flags |= ZEND_ACC_FINAL;
+ REGISTER_MYSQLI_CLASS_ENTRY("mysqli", mysqli_link_class_entry,
mysqli_link_methods);
ce = mysqli_link_class_entry;
zend_hash_init(&mysqli_link_properties, 0, NULL, NULL, 1);
MYSQLI_ADD_PROPERTIES(&mysqli_link_properties,
mysqli_link_property_entries);
zend_hash_add(&classes, ce->name, ce->name_length+1,
&mysqli_link_properties, sizeof(mysqli_link_properties), NULL);
+ REGISTER_MYSQLI_CLASS_ENTRY("mysqli_warning",
mysqli_warning_class_entry, mysqli_warning_methods);
+ ce = mysqli_warning_class_entry;
+ ce->ce_flags |= ZEND_ACC_FINAL;
+ zend_hash_init(&mysqli_warning_properties, 0, NULL, NULL, 1);
+ MYSQLI_ADD_PROPERTIES(&mysqli_warning_properties,
mysqli_warning_property_entries);
+ zend_hash_add(&classes, ce->name, ce->name_length+1,
&mysqli_warning_properties, sizeof(mysqli_warning_properties), NULL);
+ ce->ce_flags |= ZEND_ACC_FINAL;
+
REGISTER_MYSQLI_CLASS_ENTRY("mysqli_result", mysqli_result_class_entry,
mysqli_result_methods);
ce = mysqli_result_class_entry;
zend_hash_init(&mysqli_result_properties, 0, NULL, NULL, 1);
@@ -538,9 +578,11 @@
*/
PHP_MSHUTDOWN_FUNCTION(mysqli)
{
- zend_hash_destroy(&mysqli_link_properties);
+// zend_hash_destroy(&mysqli_driver_properties);
zend_hash_destroy(&mysqli_result_properties);
zend_hash_destroy(&mysqli_stmt_properties);
+ zend_hash_destroy(&mysqli_warning_properties);
+ zend_hash_destroy(&mysqli_link_properties);
zend_hash_destroy(&classes);
UNREGISTER_INI_ENTRIES();
@@ -708,6 +750,7 @@
int class_name_len;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
getThis(), "O|sz", &mysql_result, mysqli_result_class_entry, &class_name,
&class_name_len, &ctor_params) == FAILURE) {
+ // php_std_error_handling();
return;
}
if (ZEND_NUM_ARGS() < (getThis() ? 1 : 2)) {
@@ -723,17 +766,18 @@
} else {
if (override_flags) {
if (zend_parse_method_parameters(ZEND_NUM_ARGS()
TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) ==
FAILURE) {
+ //php_std_error_handling();
return;
}
fetchtype = override_flags;
} else {
fetchtype = MYSQLI_BOTH;
if (zend_parse_method_parameters(ZEND_NUM_ARGS()
TSRMLS_CC, getThis(), "O|l", &mysql_result, mysqli_result_class_entry,
&fetchtype) == FAILURE) {
+ // php_std_error_handling();
return;
}
}
}
-
MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result,
"mysqli_result");
if (!(row = mysql_fetch_row(result))) {
@@ -930,6 +974,7 @@
}
/* }}} */
+/* {{{ int php_local_infile_read */
int php_local_infile_read(void *ptr, char *buf, uint buf_len)
{
mysqli_local_infile *data;
@@ -1003,6 +1048,7 @@
efree(fp);
return rc;
}
+/* }}} */
/* {{{ php_local_infile_error
*/
http://cvs.php.net/diff.php/php-src/ext/mysqli/mysqli_api.c?r1=1.97&r2=1.98&ty=u
Index: php-src/ext/mysqli/mysqli_api.c
diff -u php-src/ext/mysqli/mysqli_api.c:1.97
php-src/ext/mysqli/mysqli_api.c:1.98
--- php-src/ext/mysqli/mysqli_api.c:1.97 Mon Dec 27 10:39:34 2004
+++ php-src/ext/mysqli/mysqli_api.c Fri Jan 7 09:59:59 2005
@@ -15,7 +15,7 @@
| Author: Georg Richter <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
- $Id: mysqli_api.c,v 1.97 2004/12/27 15:39:34 georg Exp $
+ $Id: mysqli_api.c,v 1.98 2005/01/07 14:59:59 georg Exp $
*/
#ifdef HAVE_CONFIG_H
@@ -149,7 +149,7 @@
break;
case 'b': /* Blob (send data) */
- bind[ofs].buffer_type = MYSQL_TYPE_VAR_STRING;
+ bind[ofs].buffer_type = MYSQL_TYPE_LONG_BLOB;
bind[ofs].is_null = 0;
bind[ofs].length = 0;
break;
@@ -182,7 +182,7 @@
stmt->param.var_cnt = num_vars;
stmt->param.vars = (zval **)safe_emalloc(num_vars, sizeof(zval), 0);
for (i = 0; i < num_vars; i++) {
- if (bind[i].buffer_type != MYSQLI_BIND_SEND_DATA) {
+ if (bind[i].buffer_type != MYSQL_TYPE_LONG_BLOB) {
ZVAL_ADDREF(*args[i+start]);
stmt->param.vars[i] = *args[i+start];
} else {
@@ -564,6 +564,7 @@
MYSQLI_REPORT_STMT_ERROR(stmt->stmt);
RETURN_FALSE;
}
+
if (MyG(report_mode) & MYSQLI_REPORT_INDEX) {
php_mysqli_report_index(stmt->query,
stmt->stmt->mysql->server_status TSRMLS_CC);
}
@@ -837,7 +838,7 @@
MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result,
"mysqli_result");
if (fieldnr < 0 || fieldnr >= mysql_num_fields(result)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Field offset is
invalid for resultset");
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Function cannot be
used with MYSQL_USE_RESULT");
RETURN_FALSE;
}
@@ -1305,12 +1306,10 @@
if
(mysql_real_connect(mysql->mysql,hostname,username,passwd,dbname,port,socket,flags)
== NULL) {
- MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
php_mysqli_set_error(mysql_errno(mysql->mysql), (char *)
mysql_error(mysql->mysql) TSRMLS_CC);
+ php_mysqli_throw_sql_exception( mysql->mysql->net.sqlstate,
mysql->mysql->net.last_errno TSRMLS_CC,
+
mysql->mysql->net.last_error);
- if (!(MyG(report_mode) & MYSQLI_REPORT_ERROR)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s",
mysql_error(mysql->mysql));
- }
RETURN_FALSE;
}
php_mysqli_set_error(mysql_errno(mysql->mysql), (char
*)mysql_error(mysql->mysql) TSRMLS_CC);
@@ -1422,39 +1421,6 @@
}
/* }}} */
-#ifdef HAVE_EMBEDDED_MYSQLI
-/* {{{ proto bool mysqli_server_init(void)
- initialize embedded server */
-PHP_FUNCTION(mysqli_server_init)
-{
- zval *server;
- zval *groups;
-
- if (MyG(embedded)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Embedded server
already initialized.");
- RETURN_FALSE;
- }
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|aa", &server,
&groups) == FAILURE) {
- return;
- }
-
- if (mysql_server_init(0, NULL, NULL)) {
- RETURN_FALSE;
- }
- MyG(embedded) = 1;
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto void mysqli_server_end(void)
-*/
-PHP_FUNCTION(mysqli_server_end)
-{
- mysql_server_end();
-}
-/* }}} */
-#endif
/* {{{ proto mixed mysqli_stmt_affected_rows(object stmt)
Return the number of rows affected in the last query for the given link */
http://cvs.php.net/diff.php/php-src/ext/mysqli/mysqli_fe.c?r1=1.41&r2=1.42&ty=u
Index: php-src/ext/mysqli/mysqli_fe.c
diff -u php-src/ext/mysqli/mysqli_fe.c:1.41 php-src/ext/mysqli/mysqli_fe.c:1.42
--- php-src/ext/mysqli/mysqli_fe.c:1.41 Fri Jul 23 08:47:36 2004
+++ php-src/ext/mysqli/mysqli_fe.c Fri Jan 7 09:59:59 2005
@@ -15,7 +15,7 @@
| Author: Georg Richter <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
- $Id: mysqli_fe.c,v 1.41 2004/07/23 12:47:36 georg Exp $
+ $Id: mysqli_fe.c,v 1.42 2005/01/07 14:59:59 georg Exp $
*/
#ifdef HAVE_CONFIG_H
@@ -65,11 +65,10 @@
PHP_FE(mysqli_disable_reads_from_master, NULL)
PHP_FE(mysqli_disable_rpl_parse,
NULL)
PHP_FE(mysqli_dump_debug_info,
NULL)
-#ifdef HAVE_EMBEDDED_MYSQLI
- PHP_FE(mysqli_embedded_connect,
NULL)
-#endif
PHP_FE(mysqli_enable_reads_from_master, NULL)
PHP_FE(mysqli_enable_rpl_parse,
NULL)
+ PHP_FE(mysqli_embedded_server_end,
NULL)
+ PHP_FE(mysqli_embedded_server_start, NULL)
PHP_FE(mysqli_errno,
NULL)
PHP_FE(mysqli_error,
NULL)
PHP_FE(mysqli_stmt_execute,
NULL)
@@ -132,10 +131,6 @@
PHP_FE(mysqli_stmt_reset,
NULL)
PHP_FE(mysqli_stmt_param_count,
NULL)
PHP_FE(mysqli_send_query,
NULL)
-#ifdef HAVE_EMBEDDED_MYSQLI
- PHP_FE(mysqli_server_end,
NULL)
- PHP_FE(mysqli_server_init,
NULL)
-#endif
PHP_FE(mysqli_slave_query,
NULL)
PHP_FE(mysqli_sqlstate,
NULL)
PHP_FE(mysqli_ssl_set,
NULL)
@@ -196,6 +191,7 @@
PHP_FALIAS(enable_rpl_parse,mysqli_enable_rpl_parse,NULL)
PHP_FALIAS(get_client_info,mysqli_get_client_info,NULL)
PHP_FALIAS(get_server_info,mysqli_get_server_info,NULL)
+ PHP_FALIAS(get_warnings, mysqli_warning_construct, NULL)
PHP_FALIAS(init,mysqli_init,NULL)
PHP_FALIAS(kill,mysqli_kill,NULL)
PHP_FALIAS(set_local_infile_default,mysqli_set_local_infile_default,NULL)
@@ -265,6 +261,7 @@
PHP_FALIAS(data_seek,mysqli_stmt_data_seek,NULL)
PHP_FALIAS(execute,mysqli_stmt_execute,NULL)
PHP_FALIAS(fetch,mysqli_stmt_fetch,NULL)
+ PHP_FALIAS(get_warnings, mysqli_warning_construct, NULL)
PHP_FALIAS(result_metadata, mysqli_stmt_result_metadata,NULL)
PHP_FALIAS(num_rows, mysqli_stmt_num_rows,NULL)
PHP_FALIAS(send_long_data,mysqli_stmt_send_long_data,NULL)
http://cvs.php.net/diff.php/php-src/ext/mysqli/mysqli_nonapi.c?r1=1.38&r2=1.39&ty=u
Index: php-src/ext/mysqli/mysqli_nonapi.c
diff -u php-src/ext/mysqli/mysqli_nonapi.c:1.38
php-src/ext/mysqli/mysqli_nonapi.c:1.39
--- php-src/ext/mysqli/mysqli_nonapi.c:1.38 Mon Nov 1 04:53:16 2004
+++ php-src/ext/mysqli/mysqli_nonapi.c Fri Jan 7 09:59:59 2005
@@ -15,7 +15,7 @@
| Author: Georg Richter <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
- $Id: mysqli_nonapi.c,v 1.38 2004/11/01 09:53:16 georg Exp $
+ $Id: mysqli_nonapi.c,v 1.39 2005/01/07 14:59:59 georg Exp $
*/
#ifdef HAVE_CONFIG_H
@@ -74,15 +74,23 @@
RETURN_FALSE;
}
+#ifdef HAVE_EMBEDDED_MYSQLI
+ if (hostname && strlen(hostname)) {
+ unsigned int external=1;
+ mysql_options(mysql->mysql, MYSQL_OPT_USE_REMOTE_CONNECTION,
(char *)&external);
+ } else {
+ mysql_options(mysql->mysql, MYSQL_OPT_USE_EMBEDDED_CONNECTION,
0);
+ }
+#endif
+
if
(mysql_real_connect(mysql->mysql,hostname,username,passwd,dbname,port,socket,CLIENT_MULTI_RESULTS)
== NULL) {
/* Save error messages */
- MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
+ php_mysqli_throw_sql_exception( mysql->mysql->net.sqlstate,
mysql->mysql->net.last_errno TSRMLS_CC,
+
mysql->mysql->net.last_error);
+
php_mysqli_set_error(mysql_errno(mysql->mysql), (char *)
mysql_error(mysql->mysql) TSRMLS_CC);
- if (!(MyG(report_mode) & MYSQLI_REPORT_ERROR)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s",
mysql_error(mysql->mysql));
- }
/* free mysql structure */
mysql_close(mysql->mysql);
RETURN_FALSE;
@@ -108,60 +116,6 @@
}
/* }}} */
-#ifdef HAVE_EMBEDDED_MYSQLI
-/* {{{ proto object mysqli_embedded_connect(void)
- Open a connection to a embedded mysql server */
-PHP_FUNCTION(mysqli_embedded_connect)
-{
- MY_MYSQL *mysql;
- MYSQLI_RESOURCE *mysqli_resource;
- zval *object = getThis();
- char *dbname = NULL;
- int dblen = 0;
-
- if (!MyG(embedded)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Embedded server
was not initialized.");
- RETURN_FALSE;
- }
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &dbname,
&dblen) == FAILURE) {
- return;
- }
-
- mysql = (MY_MYSQL *) calloc(1, sizeof(MY_MYSQL));
-
- if (!(mysql = mysql_init(NULL))) {
- efree(mysql);
- RETURN_FALSE;
- }
-
- if (mysql_real_connect(mysql, NULL, NULL, NULL, dbname, 0, NULL, 0) ==
NULL) {
- MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
- php_mysqli_set_error(mysql_errno(mysql->mysql), (char *)
mysql_error(mysql->mysql) TSRMLS_CC);
-
- if (!(MyG(report_mode) & MYSQLI_REPORT_ERROR)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s",
mysql_error(mysql->mysql));
- }
- /* free mysql structure */
- mysql_close(mysql->mysql);
- efree(mysql);
- RETURN_FALSE;
- }
-
- php_mysqli_set_error(mysql_errno(mysql->mysql), (char *)
mysql_error(mysql->mysql) TSRMLS_CC);
-
- mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1,
sizeof(MYSQLI_RESOURCE));
- mysqli_resource->ptr = (void *)mysql;
-
- if (!object) {
- MYSQLI_RETURN_RESOURCE(mysqli_resource,
mysqli_link_class_entry);
- } else {
- ((mysqli_object *) zend_object_store_get_object(object
TSRMLS_CC))->ptr = mysqli_resource;
- }
-}
-/* }}} */
-#endif
-
/* {{{ proto int mysqli_connect_errno(void)
Returns the numerical value of the error message from last connect command
*/
PHP_FUNCTION(mysqli_connect_errno)
@@ -278,6 +232,8 @@
result = (resultmode == MYSQLI_USE_RESULT) ?
mysql_use_result(mysql->mysql) : mysql_store_result(mysql->mysql);
if (!result) {
+ php_mysqli_throw_sql_exception(mysql->mysql->net.sqlstate,
mysql->mysql->net.last_errno TSRMLS_CC,
+
mysql->mysql->net.last_error);
RETURN_FALSE;
}
http://cvs.php.net/diff.php/php-src/ext/mysqli/mysqli_prop.c?r1=1.18&r2=1.19&ty=u
Index: php-src/ext/mysqli/mysqli_prop.c
diff -u php-src/ext/mysqli/mysqli_prop.c:1.18
php-src/ext/mysqli/mysqli_prop.c:1.19
--- php-src/ext/mysqli/mysqli_prop.c:1.18 Wed Dec 29 06:46:13 2004
+++ php-src/ext/mysqli/mysqli_prop.c Fri Jan 7 09:59:59 2005
@@ -15,7 +15,7 @@
| Author: Georg Richter <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
- $Id: mysqli_prop.c,v 1.18 2004/12/29 11:46:13 georg Exp $
+ $Id: mysqli_prop.c,v 1.19 2005/01/07 14:59:59 georg Exp $
*/
#ifdef HAVE_CONFIG_H
@@ -225,6 +225,7 @@
MYSQLI_MAP_PROPERTY_FUNC_STRING(stmt_error_read, mysql_stmt_error,
MYSQLI_GET_STMT());
MYSQLI_MAP_PROPERTY_FUNC_STRING(stmt_sqlstate_read, mysql_stmt_sqlstate,
MYSQLI_GET_STMT());
+/* }}} */
mysqli_property_entry mysqli_link_property_entries[] = {
{"affected_rows", link_affected_rows_read, NULL},
{"client_info", link_client_info_read, NULL},
http://cvs.php.net/diff.php/php-src/ext/mysqli/mysqli_report.c?r1=1.9&r2=1.10&ty=u
Index: php-src/ext/mysqli/mysqli_report.c
diff -u php-src/ext/mysqli/mysqli_report.c:1.9
php-src/ext/mysqli/mysqli_report.c:1.10
--- php-src/ext/mysqli/mysqli_report.c:1.9 Wed Jul 7 04:02:27 2004
+++ php-src/ext/mysqli/mysqli_report.c Fri Jan 7 09:59:59 2005
@@ -15,7 +15,7 @@
| Author: Georg Richter <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
- $Id: mysqli_report.c,v 1.9 2004/07/07 08:02:27 georg Exp $
+ $Id: mysqli_report.c,v 1.10 2005/01/07 14:59:59 georg Exp $
*/
#ifdef HAVE_CONFIG_H
@@ -46,7 +46,7 @@
/* {{{ void php_mysqli_report_error(char *sqlstate, int errorno, char *error)
*/
void php_mysqli_report_error(char *sqlstate, int errorno, char *error
TSRMLS_DC) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error (%s/%d): %s",
sqlstate, errorno, error);
+ php_mysqli_throw_sql_exception(sqlstate, errorno TSRMLS_CC, error);
}
/* }}} */
@@ -61,7 +61,7 @@
} else {
return;
}
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s used in query/prepared
statement %s", index, query);
+ php_mysqli_throw_sql_exception("00000", 0 TSRMLS_CC, "%s used in
query/prepared statement %s", index, query);
}
/* }}} */
http://cvs.php.net/diff.php/php-src/ext/mysqli/php_mysqli.h?r1=1.41&r2=1.42&ty=u
Index: php-src/ext/mysqli/php_mysqli.h
diff -u php-src/ext/mysqli/php_mysqli.h:1.41
php-src/ext/mysqli/php_mysqli.h:1.42
--- php-src/ext/mysqli/php_mysqli.h:1.41 Sun Dec 26 08:16:38 2004
+++ php-src/ext/mysqli/php_mysqli.h Fri Jan 7 09:59:59 2005
@@ -15,7 +15,7 @@
| Author: Georg Richter <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
- $Id: php_mysqli.h,v 1.41 2004/12/26 13:16:38 georg Exp $
+ $Id: php_mysqli.h,v 1.42 2005/01/07 14:59:59 georg Exp $
*/
/* A little hack to prevent build break, when mysql is used together with
@@ -31,6 +31,8 @@
#ifndef PHP_MYSQLI_H
#define PHP_MYSQLI_H
+#define MYSQLI_VERSION_ID 101008
+
typedef struct {
ulong buflen;
char *val;
@@ -68,6 +70,12 @@
void *info; /* additional buffer
*/
} MYSQLI_RESOURCE;
+typedef struct {
+ MYSQL_RES *result; /* stored result set
from SHOW WARNINGS */
+ MYSQL_ROW row;
+ int warning_count; /* number of warnings */
+} MYSQLI_WARNING;
+
typedef struct _mysqli_object {
zend_object zo;
void *ptr;
@@ -78,7 +86,7 @@
typedef struct _mysqli_property_entry {
char *pname;
int (*r_func)(mysqli_object *obj, zval **retval TSRMLS_DC);
- int (*w_func)(mysqli_object *obj, zval **retval TSRMLS_DC);
+ int (*w_func)(mysqli_object *obj, zval *value TSRMLS_DC);
} mysqli_property_entry;
typedef struct {
@@ -105,13 +113,20 @@
extern function_entry mysqli_link_methods[];
extern function_entry mysqli_stmt_methods[];
extern function_entry mysqli_result_methods[];
+extern function_entry mysqli_driver_methods[];
+extern function_entry mysqli_warning_methods[];
+extern function_entry mysqli_exception_methods[];
+
extern mysqli_property_entry mysqli_link_property_entries[];
extern mysqli_property_entry mysqli_result_property_entries[];
extern mysqli_property_entry mysqli_stmt_property_entries[];
+extern mysqli_property_entry mysqli_driver_property_entries[];
+extern mysqli_property_entry mysqli_warning_property_entries[];
extern void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int
override_flag, int into_object);
extern void php_clear_stmt_bind(MY_STMT *stmt);
-void php_clear_mysql(MY_MYSQL *);
+extern void php_clear_mysql(MY_MYSQL *);
+extern void php_clear_warnings(MYSQLI_WARNING *w);
extern void php_free_stmt_bind_buffer(BIND_BUFFER bbuf, int type);
extern void php_mysqli_report_error(char *sqlstate, int errorno, char *error
TSRMLS_DC);
extern void php_mysqli_report_index(char *query, unsigned int status
TSRMLS_DC);
@@ -120,14 +135,17 @@
extern void php_local_infile_end(void *);
extern int php_local_infile_error(void *, char *, uint);
extern void php_set_local_infile_handler_default(MY_MYSQL *);
-
+extern void php_mysqli_throw_sql_exception(char *sqlstate, int errorno
TSRMLS_DC, char *format, ...);
zend_class_entry *mysqli_link_class_entry;
zend_class_entry *mysqli_stmt_class_entry;
zend_class_entry *mysqli_result_class_entry;
+zend_class_entry *mysqli_driver_class_entry;
+zend_class_entry *mysqli_warning_class_entry;
+zend_class_entry *mysqli_exception_class_entry;
-zend_class_entry _mysqli_link_class_entry;
-zend_class_entry _mysqli_stmt_class_entry;
-zend_class_entry _mysqli_result_class_entry;
+#ifdef HAVE_SPL
+extern PHPAPI zend_class_entry *spl_ce_RuntimeException;
+#endif
PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry *
TSRMLS_DC);
@@ -142,9 +160,10 @@
}
#define REGISTER_MYSQLI_CLASS_ENTRY(name, mysqli_entry, class_functions) { \
- INIT_CLASS_ENTRY(_##mysqli_entry,name,class_functions); \
- _##mysqli_entry.create_object = mysqli_objects_new; \
- mysqli_entry = zend_register_internal_class(&_##mysqli_entry
TSRMLS_CC); \
+ zend_class_entry ce; \
+ INIT_CLASS_ENTRY(ce, name,class_functions); \
+ ce.create_object = mysqli_objects_new; \
+ mysqli_entry = zend_register_internal_class(&ce TSRMLS_CC); \
} \
#define MYSQLI_REGISTER_RESOURCE_EX(__ptr, __zval, __ce) \
@@ -210,7 +229,7 @@
{ \
int i = 0; \
while (b[i].pname != NULL) { \
- mysqli_add_property(a, b[i].pname, (mysqli_read_t)b[i].r_func,
NULL TSRMLS_CC); \
+ mysqli_add_property(a, b[i].pname, (mysqli_read_t)b[i].r_func,
(mysqli_write_t)b[i].w_func TSRMLS_CC); \
i++; \
}\
}
@@ -241,9 +260,10 @@
/*** REPORT MODES ***/
#define MYSQLI_REPORT_OFF 0
-#define MYSQLI_REPORT_INDEX 1
-#define MYSQLI_REPORT_ERROR 2
-#define MYSQLI_REPORT_CLOSE 4
+#define MYSQLI_REPORT_ERROR 1
+#define MYSQLI_REPORT_STRICT 2
+#define MYSQLI_REPORT_INDEX 4
+#define MYSQLI_REPORT_CLOSE 8
#define MYSQLI_REPORT_ALL 255
#define MYSQLI_REPORT_MYSQL_ERROR(mysql) \
@@ -282,9 +302,6 @@
PHP_FUNCTION(mysqli_disable_reads_from_master);
PHP_FUNCTION(mysqli_disable_rpl_parse);
PHP_FUNCTION(mysqli_dump_debug_info);
-#ifdef HAVE_EMBEDDED_MYSQLI
-PHP_FUNCTION(mysqli_embedded_connect);
-#endif
PHP_FUNCTION(mysqli_enable_reads_from_master);
PHP_FUNCTION(mysqli_enable_rpl_parse);
PHP_FUNCTION(mysqli_errno);
@@ -347,10 +364,8 @@
PHP_FUNCTION(mysqli_stmt_param_count);
PHP_FUNCTION(mysqli_stmt_send_long_data);
PHP_FUNCTION(mysqli_send_query);
-#ifdef HAVE_EMBEDDED_MYSQLI
-PHP_FUNCTION(mysqli_server_init);
-PHP_FUNCTION(mysqli_server_end);
-#endif
+PHP_FUNCTION(mysqli_embedded_server_end);
+PHP_FUNCTION(mysqli_embedded_server_start);
PHP_FUNCTION(mysqli_slave_query);
PHP_FUNCTION(mysqli_sqlstate);
PHP_FUNCTION(mysqli_ssl_set);
@@ -374,6 +389,8 @@
ZEND_FUNCTION(mysqli_stmt_construct);
ZEND_FUNCTION(mysqli_result_construct);
+ZEND_FUNCTION(mysqli_driver_construct);
+ZEND_FUNCTION(mysqli_warning_construct);
ZEND_BEGIN_MODULE_GLOBALS(mysqli)
long default_link;
@@ -385,14 +402,13 @@
char *default_socket;
char *default_pw;
int reconnect;
+ int strict;
long error_no;
char *error_msg;
int report_mode;
HashTable *report_ht;
unsigned int multi_query;
-#ifdef HAVE_EMBEDDED_MYSQLI
unsigned int embedded;
-#endif
ZEND_END_MODULE_GLOBALS(mysqli)
http://cvs.php.net/diff.php/php-src/ext/mysqli/tests/001.phpt?r1=1.5&r2=1.6&ty=u
Index: php-src/ext/mysqli/tests/001.phpt
diff -u php-src/ext/mysqli/tests/001.phpt:1.5
php-src/ext/mysqli/tests/001.phpt:1.6
--- php-src/ext/mysqli/tests/001.phpt:1.5 Sat Dec 4 03:50:33 2004
+++ php-src/ext/mysqli/tests/001.phpt Fri Jan 7 09:59:59 2005
@@ -2,13 +2,14 @@
mysqli connect
--SKIPIF--
<?php require_once('skipif.inc'); ?>
+<?php require_once('skipifemb.inc'); ?>
--FILE--
<?php
include "connect.inc";
$dbname = "test";
$test = "";
-
+
/*** test mysqli_connect localhost:port ***/
$link = mysqli_connect($host, $user, $passwd, "", 3306);
$test .= ($link) ? "1" : "0";
http://cvs.php.net/diff.php/php-src/ext/mysqli/tests/014.phpt?r1=1.6&r2=1.7&ty=u
Index: php-src/ext/mysqli/tests/014.phpt
diff -u php-src/ext/mysqli/tests/014.phpt:1.6
php-src/ext/mysqli/tests/014.phpt:1.7
--- php-src/ext/mysqli/tests/014.phpt:1.6 Sat Dec 4 03:50:33 2004
+++ php-src/ext/mysqli/tests/014.phpt Fri Jan 7 09:59:59 2005
@@ -1,7 +1,7 @@
--TEST--
mysqli autocommit/commit/rollback
--SKIPIF--
-<?php
+<?php
include "connect.inc";
$link = mysqli_connect($host, $user, $passwd);
$result = mysqli_query($link, "SHOW VARIABLES LIKE 'have_innodb'");
http://cvs.php.net/diff.php/php-src/ext/mysqli/tests/017.phpt?r1=1.6&r2=1.7&ty=u
Index: php-src/ext/mysqli/tests/017.phpt
diff -u php-src/ext/mysqli/tests/017.phpt:1.6
php-src/ext/mysqli/tests/017.phpt:1.7
--- php-src/ext/mysqli/tests/017.phpt:1.6 Sat Dec 4 03:50:33 2004
+++ php-src/ext/mysqli/tests/017.phpt Fri Jan 7 09:59:59 2005
@@ -2,6 +2,7 @@
mysqli fetch functions
--SKIPIF--
<?php require_once('skipif.inc'); ?>
+<?php require_once('skipifemb.inc'); ?>
--FILE--
<?php
include "connect.inc";
http://cvs.php.net/diff.php/php-src/ext/mysqli/tests/033.phpt?r1=1.3&r2=1.4&ty=u
Index: php-src/ext/mysqli/tests/033.phpt
diff -u php-src/ext/mysqli/tests/033.phpt:1.3
php-src/ext/mysqli/tests/033.phpt:1.4
--- php-src/ext/mysqli/tests/033.phpt:1.3 Sat Dec 4 03:50:33 2004
+++ php-src/ext/mysqli/tests/033.phpt Fri Jan 7 09:59:59 2005
@@ -2,6 +2,7 @@
function test: mysqli_get_host_info
--SKIPIF--
<?php require_once('skipif.inc'); ?>
+<?php require_once('skipifemb.inc'); ?>
--FILE--
<?php
include "connect.inc";
http://cvs.php.net/diff.php/php-src/ext/mysqli/tests/034.phpt?r1=1.3&r2=1.4&ty=u
Index: php-src/ext/mysqli/tests/034.phpt
diff -u php-src/ext/mysqli/tests/034.phpt:1.3
php-src/ext/mysqli/tests/034.phpt:1.4
--- php-src/ext/mysqli/tests/034.phpt:1.3 Sat Dec 4 03:50:33 2004
+++ php-src/ext/mysqli/tests/034.phpt Fri Jan 7 09:59:59 2005
@@ -2,6 +2,7 @@
function test: mysqli_get_proto_info
--SKIPIF--
<?php require_once('skipif.inc'); ?>
+<?php require_once('skipifemb.inc'); ?>
--FILE--
<?php
include "connect.inc";
http://cvs.php.net/diff.php/php-src/ext/mysqli/tests/041.phpt?r1=1.3&r2=1.4&ty=u
Index: php-src/ext/mysqli/tests/041.phpt
diff -u php-src/ext/mysqli/tests/041.phpt:1.3
php-src/ext/mysqli/tests/041.phpt:1.4
--- php-src/ext/mysqli/tests/041.phpt:1.3 Sat Dec 4 03:50:33 2004
+++ php-src/ext/mysqli/tests/041.phpt Fri Jan 7 09:59:59 2005
@@ -15,8 +15,8 @@
mysqli_query($link, "DROP TABLE IF EXISTS test_warnings");
mysqli_query($link, "CREATE TABLE test_warnings (a int not null");
+ mysqli_query($link, "INSERT INTO test_warnings VALUES (NULL)");
- mysqli_query($link, "INSERT INTO test_warnings VALUES (1),(2),(NULL)");
$num = mysqli_warning_count($link);
var_dump($num);
http://cvs.php.net/diff.php/php-src/ext/mysqli/tests/045.phpt?r1=1.5&r2=1.6&ty=u
Index: php-src/ext/mysqli/tests/045.phpt
diff -u php-src/ext/mysqli/tests/045.phpt:1.5
php-src/ext/mysqli/tests/045.phpt:1.6
--- php-src/ext/mysqli/tests/045.phpt:1.5 Sat Dec 4 03:50:33 2004
+++ php-src/ext/mysqli/tests/045.phpt Fri Jan 7 09:59:59 2005
@@ -17,6 +17,7 @@
?>
--SKIPIF--
<?php require_once('skipif.inc'); ?>
+<?php require_once('skipifemb.inc'); ?>
--FILE--
<?php
include "connect.inc";
http://cvs.php.net/diff.php/php-src/ext/mysqli/tests/047.phpt?r1=1.7&r2=1.8&ty=u
Index: php-src/ext/mysqli/tests/047.phpt
diff -u php-src/ext/mysqli/tests/047.phpt:1.7
php-src/ext/mysqli/tests/047.phpt:1.8
--- php-src/ext/mysqli/tests/047.phpt:1.7 Mon Dec 27 10:39:35 2004
+++ php-src/ext/mysqli/tests/047.phpt Fri Jan 7 09:59:59 2005
@@ -31,7 +31,7 @@
--EXPECTF--
array(2) {
[0]=>
- object(stdClass)#4 (11) {
+ object(stdClass)#5 (11) {
["name"]=>
string(3) "foo"
["orgname"]=>
@@ -56,7 +56,7 @@
int(0)
}
[1]=>
- object(stdClass)#5 (11) {
+ object(stdClass)#6 (11) {
["name"]=>
string(3) "bar"
["orgname"]=>
http://cvs.php.net/diff.php/php-src/ext/mysqli/tests/049.phpt?r1=1.3&r2=1.4&ty=u
Index: php-src/ext/mysqli/tests/049.phpt
diff -u php-src/ext/mysqli/tests/049.phpt:1.3
php-src/ext/mysqli/tests/049.phpt:1.4
--- php-src/ext/mysqli/tests/049.phpt:1.3 Sat Dec 4 03:50:33 2004
+++ php-src/ext/mysqli/tests/049.phpt Fri Jan 7 09:59:59 2005
@@ -2,6 +2,7 @@
mysql_fetch_row (OO-Style)
--SKIPIF--
<?php require_once('skipif.inc'); ?>
+<?php require_once('skipifemb.inc'); ?>
--FILE--
<?php
include "connect.inc";
http://cvs.php.net/diff.php/php-src/ext/mysqli/tests/061.phpt?r1=1.3&r2=1.4&ty=u
Index: php-src/ext/mysqli/tests/061.phpt
diff -u php-src/ext/mysqli/tests/061.phpt:1.3
php-src/ext/mysqli/tests/061.phpt:1.4
--- php-src/ext/mysqli/tests/061.phpt:1.3 Sat Dec 4 03:50:33 2004
+++ php-src/ext/mysqli/tests/061.phpt Fri Jan 7 09:59:59 2005
@@ -2,6 +2,7 @@
local infile handler
--SKIPIF--
<?php require_once('skipif.inc'); ?>
+<?php require_once('skipifemb.inc'); ?>
--FILE--
<?php
include "connect.inc";
http://cvs.php.net/diff.php/php-src/ext/mysqli/tests/connect.inc?r1=1.1&r2=1.2&ty=u
Index: php-src/ext/mysqli/tests/connect.inc
diff -u php-src/ext/mysqli/tests/connect.inc:1.1
php-src/ext/mysqli/tests/connect.inc:1.2
--- php-src/ext/mysqli/tests/connect.inc:1.1 Thu Feb 13 13:21:37 2003
+++ php-src/ext/mysqli/tests/connect.inc Fri Jan 7 09:59:59 2005
@@ -3,8 +3,24 @@
/* default values are localhost, root and empty password
Change the values if you use another configuration */
- $host = "localhost";
- $user = "root";
- $passwd = "";
+ $driver = new mysqli_driver;
+
+ if (!$driver->embedded) {
+ $host = "localhost";
+ $user = "root";
+ $passwd = "";
+
+ $driver->embedded_server_start(FALSE, NULL, NULL);
+ } else {
+ $path = realpath('./ext/mysqli/tests');
+ $host = $user = $passwd = NULL;
+ $args = array(
+ "--datadir=$path",
+ "--innodb_data_home_dir=$path",
+
"--innodb_data_file_path=ibdata1:10M:autoextend",
+ "--log-error=$path/testrun.log"
+ );
+ $driver->embedded_server_start(TRUE, $args, NULL);
+ }
?>
http://cvs.php.net/diff.php/php-src/ext/mysqli/tests/skipif.inc?r1=1.1&r2=1.2&ty=u
Index: php-src/ext/mysqli/tests/skipif.inc
diff -u php-src/ext/mysqli/tests/skipif.inc:1.1
php-src/ext/mysqli/tests/skipif.inc:1.2
--- php-src/ext/mysqli/tests/skipif.inc:1.1 Sat Dec 4 03:50:33 2004
+++ php-src/ext/mysqli/tests/skipif.inc Fri Jan 7 09:59:59 2005
@@ -1 +1,4 @@
-<?php if (!extension_loaded('mysqli')) die('skip mysqli extension not
available');?>
+<?php
+ if (!extension_loaded('mysqli'))
+ die('skip mysqli extension not available');
+?>
http://cvs.php.net/co.php/php-src/ext/mysqli/mysqli_driver.c?r=1.1&p=1
Index: php-src/ext/mysqli/mysqli_driver.c
+++ php-src/ext/mysqli/mysqli_driver.c
/*
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2004 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.0 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_0.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 |
| [EMAIL PROTECTED] so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Author: Georg Richter <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <signal.h>
#include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"
#include "php_mysqli.h"
#include "zend_exceptions.h"
#define MAP_PROPERTY_MYG_BOOL_READ(name, value) \
int name(mysqli_object *obj, zval **retval TSRMLS_DC) \
{ \
ALLOC_ZVAL(*retval); \
ZVAL_BOOL(*retval, MyG(value)); \
return SUCCESS; \
} \
#define MAP_PROPERTY_MYG_BOOL_WRITE(name, value) \
int name(mysqli_object *obj, zval *value TSRMLS_DC) \
{ \
MyG(value) = Z_LVAL_P(value) > 0; \
return SUCCESS; \
} \
#define MAP_PROPERTY_MYG_LONG_READ(name, value) \
int name(mysqli_object *obj, zval **retval TSRMLS_DC) \
{ \
ALLOC_ZVAL(*retval); \
ZVAL_LONG(*retval, MyG(value)); \
return SUCCESS; \
} \
#define MAP_PROPERTY_MYG_LONG_WRITE(name, value) \
int name(mysqli_object *obj, zval *value TSRMLS_DC) \
{ \
MyG(value) = Z_LVAL_P(value); \
return SUCCESS; \
} \
#define MAP_PROPERTY_MYG_STRING_READ(name, value) \
int name(mysqli_object *obj, zval **retval TSRMLS_DC) \
{ \
ALLOC_ZVAL(*retval); \
ZVAL_STRING(*retval, MyG(value), 1); \
return SUCCESS; \
} \
#define MAP_PROPERTY_MYG_STRING_WRITE(name, value) \
int name(mysqli_object *obj, zval *value TSRMLS_DC) \
{ \
MyG(value) = Z_STRVAL_P(value); \
return SUCCESS; \
} \
/* {{{ property driver_report_write */
int driver_report_write(mysqli_object *obj, zval *value TSRMLS_DC)
{
MyG(report_mode) = Z_LVAL_P(value);
php_set_error_handling(MyG(report_mode) & MYSQLI_REPORT_STRICT ?
EH_THROW : EH_NORMAL,
zend_exception_get_default() TSRMLS_CC);
return SUCCESS;
}
/* }}} */
/* {{{ property driver_embedded_read */
int driver_embedded_read(mysqli_object *obj, zval **retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
#ifdef HAVE_EMBEDDED_MYSQLI
ZVAL_BOOL(*retval, 1);
#else
ZVAL_BOOL(*retval, 0);
#endif
return SUCCESS;
}
/* }}} */
/* {{{ property driver_client_version_read */
int driver_client_version_read(mysqli_object *obj, zval **retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
ZVAL_LONG(*retval, MYSQL_VERSION_ID);
return SUCCESS;
}
/* }}} */
/* {{{ property driver_client_info_read */
int driver_client_info_read(mysqli_object *obj, zval **retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
ZVAL_STRING(*retval, MYSQL_SERVER_VERSION, 1);
return SUCCESS;
}
/* }}} */
/* {{{ property driver_driver_version_read */
int driver_driver_version_read(mysqli_object *obj, zval **retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
ZVAL_LONG(*retval, MYSQLI_VERSION_ID);
return SUCCESS;
}
/* }}} */
MAP_PROPERTY_MYG_BOOL_READ(driver_reconnect_read, reconnect);
MAP_PROPERTY_MYG_BOOL_WRITE(driver_reconnect_write, reconnect);
MAP_PROPERTY_MYG_LONG_READ(driver_report_read, report_mode);
ZEND_FUNCTION(mysqli_driver_construct)
{
}
mysqli_property_entry mysqli_driver_property_entries[] = {
{"client_info", driver_client_info_read, NULL},
{"client_version", driver_client_version_read, NULL},
{"driver_version", driver_driver_version_read, NULL},
{"embedded", driver_embedded_read, NULL},
{"reconnect", driver_reconnect_read, driver_reconnect_write},
{"report_mode", driver_report_read, driver_report_write},
{NULL, NULL, NULL}
};
/* {{{ mysqli_driver_methods[]
*/
function_entry mysqli_driver_methods[] = {
PHP_FALIAS(embedded_server_start, mysqli_embedded_server_start, NULL)
PHP_FALIAS(embedded_server_end, mysqli_embedded_server_end, NULL)
{NULL, NULL, NULL}
};
/* }}} */
http://cvs.php.net/co.php/php-src/ext/mysqli/mysqli_embedded.c?r=1.1&p=1
Index: php-src/ext/mysqli/mysqli_embedded.c
+++ php-src/ext/mysqli/mysqli_embedded.c
/*
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2004 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.0 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_0.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 |
| [EMAIL PROTECTED] so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Author: Georg Richter <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <signal.h>
#include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"
#include "php_mysqli.h"
/* {{{ proto bool mysqli_embedded_server_start(bool start, array arguments,
array groups)
initialize and start embedded server */
PHP_FUNCTION(mysqli_embedded_server_start)
{
int argc = 0;
char **arguments;
char **groups;
zval **args, **grps, **start;
HashPosition pos;
int index, rc;
if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &start, &args,
&grps) == FAILURE) {
ZEND_WRONG_PARAM_COUNT();
}
convert_to_long_ex(start);
convert_to_array_ex(args);
convert_to_array_ex(grps);
if (!Z_LVAL_PP(start)) {
mysql_server_init(-1,NULL, NULL);
RETURN_TRUE;
}
if (MyG(embedded)) {
/* get arguments */
if ((argc = zend_hash_num_elements(HASH_OF(*args)))) {
arguments = safe_emalloc(sizeof(char *), argc + 1, 0);
arguments[0] = NULL;
zend_hash_internal_pointer_reset_ex(HASH_OF(*args),
&pos);
for (index = 0;;
zend_hash_move_forward_ex(HASH_OF(*args), &pos)) {
zval **item;
if
(zend_hash_get_current_data_ex(HASH_OF(*args), (void **) &item, &pos) ==
FAILURE) {
break;
}
convert_to_string_ex(item);
arguments[++index] = Z_STRVAL_PP(item);
}
argc++;
}
/* get groups */
if ((zend_hash_num_elements(HASH_OF(*grps)))) {
groups = safe_emalloc(sizeof(char *),
zend_hash_num_elements(HASH_OF(*grps)) + 1, 0);
arguments[0] = NULL;
zend_hash_internal_pointer_reset_ex(HASH_OF(*args),
&pos);
for (index = 0;;
zend_hash_move_forward_ex(HASH_OF(*args), &pos)) {
zval ** item;
if
(zend_hash_get_current_data_ex(HASH_OF(*args), (void **) &item, &pos) ==
FAILURE) {
break;
}
convert_to_string_ex(item);
groups[++index] = Z_STRVAL_PP(item);
}
groups[index] = NULL;
} else {
groups = safe_emalloc(sizeof(char *), 1, 0);
groups[0] = NULL;
}
rc = mysql_server_init(argc, arguments, NULL);
if (argc) {
efree(arguments);
}
efree(groups);
if (rc) {
RETURN_FALSE;
}
RETURN_TRUE;
}
php_error_docref(NULL TSRMLS_CC, E_ERROR,
"Can't start embedded server. PHP
wasn't configured with mysql embedded server support");
}
/* }}} */
/* {{{ proto void mysqli_embedded_server_end(void)
*/
PHP_FUNCTION(mysqli_embedded_server_end)
{
mysql_server_end();
}
/* }}} */
http://cvs.php.net/co.php/php-src/ext/mysqli/mysqli_exception.c?r=1.1&p=1
Index: php-src/ext/mysqli/mysqli_exception.c
+++ php-src/ext/mysqli/mysqli_exception.c
/*
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2004 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.0 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_0.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 |
| [EMAIL PROTECTED] so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Author: Georg Richter <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <signal.h>
#include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"
#include "php_mysqli.h"
#include "zend_exceptions.h"
/* {{{ mysqli_exception_methods[]
*/
function_entry mysqli_exception_methods[] = {
{NULL, NULL, NULL}
};
/* }}} */
void php_mysqli_throw_sql_exception(char *sqlstate, int errorno TSRMLS_DC, char
*format, ...)
{
zval *sql_ex;
va_list arg;
char *message;
va_start(arg, format);
zend_vspprintf(&message, 0, format, arg);
va_end(arg);;
if (!(MyG(report_mode) & MYSQLI_REPORT_STRICT)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "(%s/%d): %s",
sqlstate, errorno, message);
return;
}
MAKE_STD_ZVAL(sql_ex);
object_init_ex(sql_ex, mysqli_exception_class_entry);
if (message) {
zend_update_property_string(mysqli_exception_class_entry,
sql_ex, "message", sizeof("message") - 1,
message
TSRMLS_CC);
}
if (sqlstate) {
zend_update_property_string(mysqli_exception_class_entry,
sql_ex, "sqlstate", sizeof("sqlstate") - 1,
sqlstate TSRMLS_CC);
} else {
zend_update_property_string(mysqli_exception_class_entry,
sql_ex, "sqlstate", sizeof("sqlstate") - 1,
"00000"
TSRMLS_CC);
}
efree(message);
zend_update_property_long(mysqli_exception_class_entry, sql_ex, "code",
sizeof("code") - 1, errorno TSRMLS_CC);
zend_throw_exception_object(sql_ex);
}
http://cvs.php.net/co.php/php-src/ext/mysqli/mysqli_warning.c?r=1.1&p=1
Index: php-src/ext/mysqli/mysqli_warning.c
+++ php-src/ext/mysqli/mysqli_warning.c
/*
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2004 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.0 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_0.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 |
| [EMAIL PROTECTED] so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Author: Georg Richter <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <signal.h>
#include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"
#include "php_mysqli.h"
/* {{{ void php_clear_warnings() */
void php_clear_warnings(MYSQLI_WARNING *w)
{
if (w->result) {
mysql_free_result(w->result);
}
efree(w);
}
/* }}} */
/* {{{ void php_get_warnings(MYSQL *mysql) */
MYSQLI_WARNING *php_get_warnings(MYSQL *mysql)
{
MYSQLI_WARNING *w;
int cwarnings;
if (!(cwarnings = mysql_warning_count(mysql))) {
return NULL;
}
if (mysql_query(mysql, "SHOW WARNINGS")) {
return NULL;
}
if (!(w = (MYSQLI_WARNING *)ecalloc(sizeof(MYSQLI_WARNING), 1))) {
return NULL;
}
w->warning_count = cwarnings;
w->result = mysql_store_result(mysql);
if (!(w->row = mysql_fetch_row(w->result))) {
mysql_free_result(w->result);
efree(w);
return NULL;
}
return w;
}
/* }}} */
/* {{{ mysqli_warning::__construct */
ZEND_FUNCTION(mysqli_warning_construct)
{
MYSQL *mysql = NULL;
MYSQLI_WARNING *w;
MYSQLI_RESOURCE *mysqli_resource;
mysqli_object *obj;
if (!getThis()) {
RETURN_FALSE;
}
obj = (mysqli_object *)zend_objects_get_address(getThis() TSRMLS_CC);
if (obj->zo.ce == mysqli_link_class_entry) {
mysql = (MYSQL *)((MY_MYSQL *)((MYSQLI_RESOURCE
*)(obj->ptr))->ptr)->mysql;
} else if (obj->zo.ce == mysqli_stmt_class_entry) {
mysql = (MYSQL *)((MY_STMT *)((MYSQLI_RESOURCE
*)(obj->ptr))->ptr)->stmt->mysql;
}
if ((w = php_get_warnings(mysql))) {
mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1,
sizeof(MYSQLI_RESOURCE));
mysqli_resource->ptr = (void *)w;
obj->valid = 1;
MYSQLI_RETURN_RESOURCE(mysqli_resource,
mysqli_warning_class_entry);
} else {
RETURN_FALSE;
}
}
/* }}} */
/* {{{ bool mysqli_warning::next */
ZEND_FUNCTION(mysqli_warning_next) {
MYSQLI_WARNING *w;
zval *mysql_warning;
mysqli_object *obj = (mysqli_object
*)zend_objects_get_address(getThis() TSRMLS_CC);
if (obj->valid) {
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
getThis(), "O",
&mysql_warning, mysqli_warning_class_entry) == FAILURE) {
return;
}
MYSQLI_FETCH_RESOURCE(w, MYSQLI_WARNING *, &mysql_warning,
"mysqli_warning");
if (w->warning_count && (w->row = mysql_fetch_row(w->result))) {
RETURN_TRUE;
}
}
RETURN_FALSE;
}
/* }}} */
/* {{{ property mysqli_warning_error */
int mysqli_warning_error(mysqli_object *obj, zval **retval TSRMLS_DC)
{
MYSQLI_WARNING *w;
ALLOC_ZVAL(*retval);
w = obj->valid ? (MYSQLI_WARNING *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr
: NULL;
if (w && w->row && w->row[2]) {
ZVAL_STRING(*retval, w->row[2], 1);
} else {
ZVAL_NULL(*retval);
}
return SUCCESS;
}
/* }}} */
/* {{{ property mysqli_warning_error */
int mysqli_warning_errno(mysqli_object *obj, zval **retval TSRMLS_DC)
{
MYSQLI_WARNING *w;
ALLOC_ZVAL(*retval);
w = obj->valid ? (MYSQLI_WARNING *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr
: NULL;
if (w && w->row && w->row[1]) {
ZVAL_LONG(*retval, atoi(w->row[1]));
} else {
ZVAL_NULL(*retval);
}
return SUCCESS;
}
/* }}} */
/* {{{ mysqli_warning_methods[]
*/
function_entry mysqli_warning_methods[] = {
PHP_FALIAS(__construct,mysqli_warning_construct, NULL)
PHP_FALIAS(next,mysqli_warning_next,NULL)
{NULL, NULL, NULL}
};
/* }}} */
mysqli_property_entry mysqli_warning_property_entries[] = {
{"error", mysqli_warning_error, NULL},
{"errno", mysqli_warning_errno, NULL},
{NULL, NULL, NULL}
};
http://cvs.php.net/co.php/php-src/ext/mysqli/tests/skipifemb.inc?r=1.1&p=1
Index: php-src/ext/mysqli/tests/skipifemb.inc
+++ php-src/ext/mysqli/tests/skipifemb.inc
<?php
$driver = new mysqli_driver();
if ($driver->embedded)
die("skip test doesn't run with embedded server");
?>
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php