cvs: php4 /ext/mysql php_mysql.c php_mysql.h

From: Date: Tue, 13 Mar 2001 22:52:53 +0000
Subject: cvs: php4 /ext/mysql php_mysql.c php_mysql.h
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-4560@lists.php.net to get a copy of this message
zeev Tue Mar 13 14:52:53 2001 EDT Modified files: /php4/ext/mysql php_mysql.c php_mysql.h Log: Implement mysql_unbuffered_query() - uses mysql_use_result() instead of mysql_store_result() Index: php4/ext/mysql/php_mysql.c diff -u php4/ext/mysql/php_mysql.c:1.75 php4/ext/mysql/php_mysql.c:1.76 --- php4/ext/mysql/php_mysql.c:1.75 Tue Mar 13 13:42:43 2001 +++ php4/ext/mysql/php_mysql.c Tue Mar 13 14:52:53 2001 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_mysql.c,v 1.75 2001/03/13 21:42:43 zeev Exp $ */ +/* $Id: php_mysql.c,v 1.76 2001/03/13 22:52:53 zeev Exp $ */ /* TODO: @@ -102,7 +102,7 @@ typedef struct _php_mysql_conn { MYSQL conn; - MYSQL_RES *active_result; + int active_result_id; } php_mysql_conn; @@ -114,6 +114,7 @@ PHP_FE(mysql_create_db, NULL) PHP_FE(mysql_drop_db, NULL) PHP_FE(mysql_query, NULL) + PHP_FE(mysql_unbuffered_query, NULL) PHP_FE(mysql_db_query, NULL) PHP_FE(mysql_list_dbs, NULL) PHP_FE(mysql_list_tables, NULL) @@ -194,6 +195,7 @@ static void _free_mysql_result(zend_rsrc_list_entry *rsrc) { MYSQL_RES *mysql_result = (MYSQL_RES *)rsrc->ptr; + mysql_free_result(mysql_result); } @@ -301,8 +303,6 @@ REGISTER_LONG_CONSTANT("MYSQL_NUM", MYSQL_NUM, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("MYSQL_BOTH", MYSQL_BOTH, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("MYSQL_USE_RESULT", MYSQL_USE_RESULT, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("MYSQL_STORE_RESULT", MYSQL_STORE_RESULT, CONST_CS | CONST_PERSISTENT); return SUCCESS; } @@ -482,6 +482,7 @@ } /* create the link */ mysql = (php_mysql_conn *) malloc(sizeof(php_mysql_conn)); + mysql->active_result_id = 0; #if MYSQL_VERSION_ID > 32199 /* this lets us set the port number */ mysql_init(&mysql->conn); if (mysql_real_connect(&mysql->conn, host, user, passwd, NULL, port, socket, 0)==NULL) { @@ -568,6 +569,7 @@ } mysql = (php_mysql_conn *) emalloc(sizeof(php_mysql_conn)); + mysql->active_result_id = 0; #if MYSQL_VERSION_ID > 32199 /* this lets us set the port number */ mysql_init(&mysql->conn); if (mysql_real_connect(&mysql->conn, host, user, passwd, NULL, port, socket, 0)==NULL) { @@ -898,10 +900,8 @@ } /* }}} */ - - -static void php_mysql_do_query(zval **query, zval **mysql_link, int link_id, zval **db, int use_store, zval *return_value) +static void php_mysql_do_query_general(zval **query, zval **mysql_link, int link_id, zval **db, int use_store, zval *return_value) { php_mysql_conn *mysql; MYSQL_RES *mysql_result; @@ -916,6 +916,21 @@ } } + + if (mysql->active_result_id) do { + int type; + MYSQL_RES *mysql_result; + + mysql_result = (MYSQL_RES *) zend_list_find(mysql->active_result_id, &type); + if (mysql_result && type==le_result && !mysql_eof(mysql_result)) { + php_error(E_NOTICE, "Called %s() without first fetching all rows from a previous unbuffered query", + get_active_function_name()); + while (mysql_fetch_row(mysql_result)); + zend_list_delete(mysql->active_result_id); + mysql->active_result_id = 0; + } + } while(0); + convert_to_string_ex(query); /* mysql_query is binary unsafe, use mysql_real_query */ #if MYSQL_VERSION_ID > 32199 @@ -941,19 +956,16 @@ } } ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result); + if (use_store == MYSQL_USE_RESULT) { + mysql->active_result_id = Z_LVAL_P(return_value); + } } - - - -/* {{{ proto int mysql_query(string query [, int link_identifier] [, int result_mode]) - Send an SQL query to MySQL */ -PHP_FUNCTION(mysql_query) +static void php_mysql_do_query(INTERNAL_FUNCTION_PARAMETERS, int use_store) { zval **query, **mysql_link; - zval **store_result; - int id, use_store=MYSQL_STORE_RESULT; + int id; MySLS_FETCH(); switch(ZEND_NUM_ARGS()) { @@ -970,31 +982,37 @@ } id = -1; break; - case 3: - if(zend_get_parameters_ex(3, &query, &mysql_link, &store_result)==FAILURE) { - RETURN_FALSE; - } - convert_to_long_ex(store_result); - if(Z_LVAL_PP(store_result) == MYSQL_USE_RESULT) { - use_store = MYSQL_USE_RESULT; - } - id = -1; - break; default: WRONG_PARAM_COUNT; break; } - php_mysql_do_query(query, mysql_link, id, NULL, use_store, return_value); + php_mysql_do_query_general(query, mysql_link, id, NULL, use_store, return_value); +} + + +/* {{{ proto int mysql_query(string query [, int link_identifier] [, int result_mode]) + Send an SQL query to MySQL */ +PHP_FUNCTION(mysql_query) +{ + php_mysql_do_query(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_STORE_RESULT); } /* }}} */ +/* {{{ proto int mysql_unbuffered_query(string query [, int link_identifier] [, int result_mode]) + Send an SQL query to MySQL, without fetching and buffering the result rows */ +PHP_FUNCTION(mysql_unbuffered_query) +{ + php_mysql_do_query(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_USE_RESULT); +} +/* }}} */ + + /* {{{ proto int mysql_db_query(string database_name, string query [, int link_identifier] [, int result_mode]) Send an SQL query to MySQL */ PHP_FUNCTION(mysql_db_query) { zval **db, **query, **mysql_link; - zval **store_result; int id, use_store=MYSQL_STORE_RESULT; MySLS_FETCH(); @@ -1012,22 +1030,12 @@ } id = -1; break; - case 4: - if(zend_get_parameters_ex(4, &db, &query, &mysql_link, &store_result)==FAILURE) { - RETURN_FALSE; - } - convert_to_long_ex(store_result); - if(Z_LVAL_PP(store_result) == MYSQL_USE_RESULT) { - use_store = MYSQL_USE_RESULT; - } - id = -1; - break; default: WRONG_PARAM_COUNT; break; } - php_mysql_do_query(query, mysql_link, id, db, use_store, return_value); + php_mysql_do_query_general(query, mysql_link, id, db, MYSQL_STORE_RESULT, return_value); } /* }}} */ @@ -1972,4 +1980,5 @@ * c-basic-offset: 4 * End: */ + Index: php4/ext/mysql/php_mysql.h diff -u php4/ext/mysql/php_mysql.h:1.18 php4/ext/mysql/php_mysql.h:1.19 --- php4/ext/mysql/php_mysql.h:1.18 Sun Feb 25 22:07:04 2001 +++ php4/ext/mysql/php_mysql.h Tue Mar 13 14:52:53 2001 @@ -17,7 +17,7 @@ */ -/* $Id: php_mysql.h,v 1.18 2001/02/26 06:07:04 andi Exp $ */ +/* $Id: php_mysql.h,v 1.19 2001/03/13 22:52:53 zeev Exp $ */ #ifndef PHP_MYSQL_H #define PHP_MYSQL_H @@ -50,6 +50,7 @@ PHP_FUNCTION(mysql_create_db); PHP_FUNCTION(mysql_drop_db); PHP_FUNCTION(mysql_query); +PHP_FUNCTION(mysql_unbuffered_query); PHP_FUNCTION(mysql_db_query); PHP_FUNCTION(mysql_list_dbs); PHP_FUNCTION(mysql_list_tables);

« previous php.cvs (#4560) next »