summaryrefslogtreecommitdiff
path: root/ext/mysqli/mysqli_nonapi.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/mysqli/mysqli_nonapi.c')
-rw-r--r--ext/mysqli/mysqli_nonapi.c266
1 files changed, 3 insertions, 263 deletions
diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c
index 7077aab932..81e87ac520 100644
--- a/ext/mysqli/mysqli_nonapi.c
+++ b/ext/mysqli/mysqli_nonapi.c
@@ -66,15 +66,6 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne
zend_rsrc_list_entry *le;
mysqli_plist_entry *plist = NULL;
-
-#if !defined(MYSQL_USE_MYSQLND)
- if ((MYSQL_VERSION_ID / 100) != (mysql_get_client_version() / 100)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "Headers and client library minor version mismatch. Headers:%d Library:%ld",
- MYSQL_VERSION_ID, mysql_get_client_version());
- }
-#endif
-
if (getThis() && !ZEND_NUM_ARGS() && in_ctor) {
RETURN_NULL();
}
@@ -127,9 +118,7 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne
if (!socket_len || !socket) {
socket = MyG(default_socket);
}
- if (!port){
- port = MyG(default_port);
- }
+
if (!passwd) {
passwd = MyG(default_pw);
passwd_len = strlen(SAFE_STR(passwd));
@@ -533,9 +522,9 @@ PHP_FUNCTION(mysqli_query)
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty query");
RETURN_FALSE;
}
- if ((resultmode & ~MYSQLI_ASYNC) != MYSQLI_USE_RESULT && (resultmode & ~MYSQLI_ASYNC) != MYSQLI_STORE_RESULT
+ if (resultmode != MYSQLI_USE_RESULT && resultmode != MYSQLI_STORE_RESULT
#if defined(MYSQLI_USE_MYSQLND) && defined(MYSQLND_THREADED)
- && (resultmode & ~MYSQLI_ASYNC) != MYSQLI_BG_STORE_RESULT
+ && resultmode != MYSQLI_BG_STORE_RESULT
#endif
) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid value for resultmode");
@@ -547,17 +536,6 @@ PHP_FUNCTION(mysqli_query)
MYSQLI_DISABLE_MQ;
-#ifdef MYSQLI_USE_MYSQLND
- if (resultmode & MYSQLI_ASYNC) {
- if (mysqli_async_query(mysql->mysql, query, query_len)) {
- MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
- RETURN_FALSE;
- }
- mysql->async_result_fetch_type = resultmode & ~MYSQLI_ASYNC;
- RETURN_TRUE;
- }
-#endif
-
if (mysql_real_query(mysql->mysql, query, query_len)) {
MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
RETURN_FALSE;
@@ -603,244 +581,6 @@ PHP_FUNCTION(mysqli_query)
#if defined(MYSQLI_USE_MYSQLND)
-#include "php_network.h"
-/* {{{ mysqlnd_zval_array_to_mysqlnd_array functions */
-static int mysqlnd_zval_array_to_mysqlnd_array(zval *in_array, MYSQLND ***out_array TSRMLS_DC)
-{
- zval **elem;
- int i = 0, current = 0;
-
- if (Z_TYPE_P(in_array) != IS_ARRAY) {
- return 0;
- }
- *out_array = ecalloc(zend_hash_num_elements(Z_ARRVAL_P(in_array)) + 1, sizeof(MYSQLND *));
- for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(in_array));
- zend_hash_get_current_data(Z_ARRVAL_P(in_array), (void **) &elem) == SUCCESS;
- zend_hash_move_forward(Z_ARRVAL_P(in_array))) {
- i++;
- if (Z_TYPE_PP(elem) != IS_OBJECT ||
- !instanceof_function(Z_OBJCE_PP(elem), mysqli_link_class_entry TSRMLS_CC)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Parameter %d not a mysqli object", i);
- } else {
- MY_MYSQL *mysql;
- MYSQLI_RESOURCE *my_res;
- mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*elem TSRMLS_CC);
- if (!(my_res = (MYSQLI_RESOURCE *)intern->ptr)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "[%d] Couldn't fetch %s", i, intern->zo.ce->name);
- continue;
- }
- mysql = (MY_MYSQL*) my_res->ptr;
- if (MYSQLI_STATUS_VALID && my_res->status < MYSQLI_STATUS_VALID) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid object %d or resource %s", i, intern->zo.ce->name);
- continue;
- }
- (*out_array)[current++] = mysql->mysql;
- }
- }
- return 0;
-}
-/* }}} */
-
-
-/* {{{ mysqlnd_zval_array_from_mysqlnd_array */
-static int mysqlnd_zval_array_from_mysqlnd_array(MYSQLND **in_array, zval *out_array TSRMLS_DC)
-{
- MYSQLND **p = in_array;
- HashTable *new_hash;
- zval **elem, **dest_elem;
- int ret = 0;
-
- ALLOC_HASHTABLE(new_hash);
- zend_hash_init(new_hash, zend_hash_num_elements(Z_ARRVAL_P(out_array)), NULL, ZVAL_PTR_DTOR, 0);
-
- for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(out_array));
- zend_hash_get_current_data(Z_ARRVAL_P(out_array), (void **) &elem) == SUCCESS;
- zend_hash_move_forward(Z_ARRVAL_P(out_array)))
- {
- if (Z_TYPE_PP(elem) != IS_OBJECT || !instanceof_function(Z_OBJCE_PP(elem), mysqli_link_class_entry TSRMLS_CC)) {
- continue;
- }
- {
- MY_MYSQL *mysql;
- mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*elem TSRMLS_CC);
- mysql = (MY_MYSQL *) ((MYSQLI_RESOURCE *)intern->ptr)->ptr;
- if (mysql->mysql == *p) {
- zend_hash_next_index_insert(new_hash, (void *)elem, sizeof(zval *), (void **)&dest_elem);
- if (dest_elem) {
- zval_add_ref(dest_elem);
- }
- ret++;
- p++;
- }
- }
- }
-
- /* destroy old array and add new one */
- zend_hash_destroy(Z_ARRVAL_P(out_array));
- efree(Z_ARRVAL_P(out_array));
-
- zend_hash_internal_pointer_reset(new_hash);
- Z_ARRVAL_P(out_array) = new_hash;
-
- return 0;
-}
-/* }}} */
-
-
-/* {{{ mysqlnd_dont_poll_zval_array_from_mysqlnd_array */
-static int mysqlnd_dont_poll_zval_array_from_mysqlnd_array(MYSQLND **in_array, zval *in_zval_array, zval *out_array TSRMLS_DC)
-{
- MYSQLND **p = in_array;
- HashTable *new_hash;
- zval **elem, **dest_elem;
- int ret = 0;
-
- ALLOC_HASHTABLE(new_hash);
- zend_hash_init(new_hash, zend_hash_num_elements(Z_ARRVAL_P(in_zval_array)), NULL, ZVAL_PTR_DTOR, 0);
- if (in_array) {
- for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(in_zval_array));
- zend_hash_get_current_data(Z_ARRVAL_P(in_zval_array), (void **) &elem) == SUCCESS;
- zend_hash_move_forward(Z_ARRVAL_P(in_zval_array)))
- {
- MY_MYSQL *mysql;
- mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*elem TSRMLS_CC);
- mysql = (MY_MYSQL *) ((MYSQLI_RESOURCE *)intern->ptr)->ptr;
- if (mysql->mysql == *p) {
- zend_hash_next_index_insert(new_hash, (void *)elem, sizeof(zval *), (void **)&dest_elem);
- if (dest_elem) {
- zval_add_ref(dest_elem);
- }
- ret++;
- p++;
- }
- }
- }
-
- /* destroy old array and add new one */
- zend_hash_destroy(Z_ARRVAL_P(out_array));
- efree(Z_ARRVAL_P(out_array));
-
- zend_hash_internal_pointer_reset(new_hash);
- Z_ARRVAL_P(out_array) = new_hash;
-
- return 0;
-}
-/* }}} */
-
-
-/* {{{ proto int mysqli_poll(array read, array write, array error, long sec [, long usec]) U
- Poll connections */
-PHP_FUNCTION(mysqli_poll)
-{
- zval *r_array, *e_array, *dont_poll_array;
- MYSQLND **new_r_array = NULL, **new_e_array = NULL, **new_dont_poll_array = NULL;
- long sec = 0, usec = 0;
- enum_func_status ret;
- uint desc_num;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a!a!al|l", &r_array, &e_array, &dont_poll_array, &sec, &usec) == FAILURE) {
- return;
- }
- if (sec < 0 || usec < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Negative values passed for sec and/or usec");
- RETURN_FALSE;
- }
-
- if (r_array != NULL) {
- mysqlnd_zval_array_to_mysqlnd_array(r_array, &new_r_array TSRMLS_CC);
- }
- if (e_array != NULL) {
- mysqlnd_zval_array_to_mysqlnd_array(e_array, &new_e_array TSRMLS_CC);
- }
-
- ret = mysqlnd_poll(new_r_array, new_e_array, &new_dont_poll_array, sec, usec, &desc_num);
-
- mysqlnd_dont_poll_zval_array_from_mysqlnd_array(r_array != NULL ? new_dont_poll_array:NULL, r_array, dont_poll_array TSRMLS_CC);
-
- if (r_array != NULL) {
- mysqlnd_zval_array_from_mysqlnd_array(new_r_array, r_array TSRMLS_CC);
- }
- if (e_array != NULL) {
- mysqlnd_zval_array_from_mysqlnd_array(new_e_array, e_array TSRMLS_CC);
- }
-
- if (new_dont_poll_array) {
- efree(new_dont_poll_array);
- }
- if (new_r_array) {
- efree(new_r_array);
- }
- if (new_e_array) {
- efree(new_e_array);
- }
- if (ret == PASS) {
- RETURN_LONG(desc_num);
- } else {
- RETURN_FALSE;
- }
-}
-/* }}} */
-
-
-/* {{{ proto int mysqli_reap_async_query(object link) U
- Poll connections */
-PHP_FUNCTION(mysqli_reap_async_query)
-{
- MY_MYSQL *mysql;
- zval *mysql_link;
- MYSQLI_RESOURCE *mysqli_resource;
- MYSQL_RES *result;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
-
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, "mysqli_link", MYSQLI_STATUS_VALID);
-
- if (FAIL == mysqlnd_reap_async_query(mysql->mysql)) {
- RETURN_FALSE;
- }
-
- if (!mysql_field_count(mysql->mysql)) {
- /* no result set - not a SELECT */
- if (MyG(report_mode) & MYSQLI_REPORT_INDEX) {
-/* php_mysqli_report_index("n/a", mysqli_server_status(mysql->mysql) TSRMLS_CC); */
- }
- RETURN_TRUE;
- }
-
- switch (mysql->async_result_fetch_type) {
- case MYSQLI_STORE_RESULT:
- result = mysql_store_result(mysql->mysql);
- break;
- case MYSQLI_USE_RESULT:
- result = mysql_use_result(mysql->mysql);
- break;
-#if defined(MYSQLI_USE_MYSQLND) && defined(MYSQLND_THREADED)
- case MYSQLI_BG_STORE_RESULT:
- result = mysqli_bg_store_result(mysql->mysql);
- break;
-#endif
- }
-
- if (!result) {
- php_mysqli_throw_sql_exception((char *)mysql_sqlstate(mysql->mysql), mysql_errno(mysql->mysql) TSRMLS_CC,
- "%s", mysql_error(mysql->mysql));
- RETURN_FALSE;
- }
-
- if (MyG(report_mode) & MYSQLI_REPORT_INDEX) {
-/* php_mysqli_report_index("n/a", mysqli_server_status(mysql->mysql) TSRMLS_CC); */
- }
-
- mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
- mysqli_resource->ptr = (void *)result;
- mysqli_resource->status = MYSQLI_STATUS_VALID;
- MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_result_class_entry);
-}
-/* }}} */
-
-
/* {{{ proto object mysqli_stmt_get_result(object link) U
Buffer result set on client */
PHP_FUNCTION(mysqli_stmt_get_result)