summaryrefslogtreecommitdiff
path: root/ext/mysqli/mysqli.c
diff options
context:
space:
mode:
authorAndrey Hristov <andrey@php.net>2008-01-28 18:27:49 +0000
committerAndrey Hristov <andrey@php.net>2008-01-28 18:27:49 +0000
commit18c8e6501b2c1f9fc96dda7c2304523d46bf13a4 (patch)
treef41112affbf103b699c603b36e354be143969cc3 /ext/mysqli/mysqli.c
parent618a29411d2f58a9bf55488f2d7220639ec92c23 (diff)
downloadphp-git-18c8e6501b2c1f9fc96dda7c2304523d46bf13a4.tar.gz
MFB: More optimizations - less MM calls
Clearly separated fetching (physical reading) from decoding phases (data interpretation). Threaded fetching added but disabled as needs more work for Windows. For Linux needs some touches to add pthreads if this is enabled, probably with a compile-time switch. The code reorganisation makes it easy to add also async API, similar to cURL's one.
Diffstat (limited to 'ext/mysqli/mysqli.c')
-rw-r--r--ext/mysqli/mysqli.c33
1 files changed, 21 insertions, 12 deletions
diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c
index d2b6f9c710..2c3c973468 100644
--- a/ext/mysqli/mysqli.c
+++ b/ext/mysqli/mysqli.c
@@ -33,9 +33,6 @@
#include "php_mysqli_structs.h"
#include "zend_exceptions.h"
-#define MYSQLI_STORE_RESULT 0
-#define MYSQLI_USE_RESULT 1
-
ZEND_DECLARE_MODULE_GLOBALS(mysqli)
static PHP_GINIT_FUNCTION(mysqli);
@@ -685,8 +682,11 @@ PHP_MINIT_FUNCTION(mysqli)
REGISTER_LONG_CONSTANT("MYSQLI_CLIENT_FOUND_ROWS", CLIENT_FOUND_ROWS, CONST_CS | CONST_PERSISTENT);
/* for mysqli_query */
- REGISTER_LONG_CONSTANT("MYSQLI_STORE_RESULT", 0, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("MYSQLI_USE_RESULT", 1, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("MYSQLI_STORE_RESULT", MYSQLI_STORE_RESULT, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("MYSQLI_USE_RESULT", MYSQLI_USE_RESULT, CONST_CS | CONST_PERSISTENT);
+#if defined(HAVE_MYSQLND) && defined(MYSQLND_THREADING)
+ REGISTER_LONG_CONSTANT("MYSQLI_BG_STORE_RESULT", MYSQLI_BG_STORE_RESULT, CONST_CS | CONST_PERSISTENT);
+#endif
/* for mysqli_fetch_assoc */
REGISTER_LONG_CONSTANT("MYSQLI_ASSOC", MYSQLI_ASSOC, CONST_CS | CONST_PERSISTENT);
@@ -952,7 +952,7 @@ Parameters:
ZEND_FUNCTION(mysqli_result_construct)
{
MY_MYSQL *mysql;
- MYSQL_RES *result;
+ MYSQL_RES *result = NULL;
zval *mysql_link;
MYSQLI_RESOURCE *mysqli_resource;
long resmode = MYSQLI_STORE_RESULT;
@@ -967,10 +967,6 @@ ZEND_FUNCTION(mysqli_result_construct)
if (zend_parse_parameters(2 TSRMLS_CC, "Ol", &mysql_link, mysqli_link_class_entry, &resmode)==FAILURE) {
return;
}
- if (resmode != MYSQLI_USE_RESULT && resmode != MYSQLI_STORE_RESULT) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid value for resultmode");
- RETURN_FALSE;
- }
break;
default:
WRONG_PARAM_COUNT;
@@ -978,8 +974,21 @@ ZEND_FUNCTION(mysqli_result_construct)
MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link", MYSQLI_STATUS_VALID);
- result = (resmode == MYSQLI_STORE_RESULT) ? mysql_store_result(mysql->mysql) :
- mysql_use_result(mysql->mysql);
+ switch (resmode) {
+ case MYSQLI_STORE_RESULT:
+ result = mysql_store_result(mysql->mysql);
+ break;
+ case MYSQLI_USE_RESULT:
+ result = mysql_use_result(mysql->mysql);
+ break;
+#if defined(HAVE_MYSQLND) && defined(MYSQLND_THREADING)
+ case MYSQLI_BG_STORE_RESULT:
+ result = mysqli_bg_store_result(mysql->mysql);
+ break;
+#endif
+ default:
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid value for resultmode");
+ }
if (!result) {
RETURN_FALSE;