diff options
-rw-r--r-- | ext/mysql/php_mysql.c | 110 | ||||
-rw-r--r-- | ext/mysql/php_mysql.h | 2 |
2 files changed, 95 insertions, 17 deletions
diff --git a/ext/mysql/php_mysql.c b/ext/mysql/php_mysql.c index 10c1f78fd6..609ee5811a 100644 --- a/ext/mysql/php_mysql.c +++ b/ext/mysql/php_mysql.c @@ -130,6 +130,7 @@ function_entry mysql_functions[] = { PHP_FE(mysql_list_dbs, NULL) PHP_FE(mysql_list_tables, NULL) PHP_FE(mysql_list_fields, NULL) + PHP_FE(mysql_list_processes, NULL) PHP_FE(mysql_error, NULL) #ifdef HAVE_MYSQL_ERRNO PHP_FE(mysql_errno, NULL) @@ -153,7 +154,8 @@ function_entry mysql_functions[] = { PHP_FE(mysql_field_len, NULL) PHP_FE(mysql_field_type, NULL) PHP_FE(mysql_field_flags, NULL) - PHP_FE(mysql_escape_string, NULL) + PHP_FE(mysql_escape_string, NULL) + PHP_FE(mysql_stat, NULL) #ifdef HAVE_GETINFO_FUNCS PHP_FE(mysql_get_client_info, NULL) PHP_FE(mysql_get_host_info, NULL) @@ -195,7 +197,7 @@ zend_module_entry mysql_module_entry = { ZEND_MODULE_STARTUP_N(mysql), PHP_MSHUTDOWN(mysql), PHP_RINIT(mysql), - PHP_RSHUTDOWN(mysql), + PHP_RSHUTDOWN(mysql), PHP_MINFO(mysql), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES @@ -524,7 +526,7 @@ static void php_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) if ((tmp=strchr(tmp, ':'))) { tmp++; socket=tmp; - } + } } else { socket = tmp; } @@ -542,7 +544,7 @@ static void php_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) } if (persistent) { list_entry *le; - + /* try to find if we already have this link in our persistent list */ if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length+1, (void **) &le)==FAILURE) { /* we don't */ list_entry new_le; @@ -572,12 +574,12 @@ static void php_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) php_error(E_WARNING, "%s", MySG(connect_error)); #if defined(HAVE_MYSQL_ERRNO) MySG(connect_errno)=mysql_errno(&mysql->conn); -#endif +#endif free(mysql); efree(hashed_details); MYSQL_DO_CONNECT_RETURN_FALSE(); } - + /* hash it up */ Z_TYPE(new_le) = le_plink; new_le.ptr = mysql; @@ -902,6 +904,45 @@ PHP_FUNCTION(mysql_get_server_info) } /* }}} */ +/* {{{ proto string mysql_stat([int link_identifier]) + Returns a string containing status information */ +PHP_FUNCTION(mysql_stat) +{ + zval **mysql_link; + char *stat; + char *key, *val; + int id; + php_mysql_conn *mysql; + + switch(ZEND_NUM_ARGS()) { + case 0: + id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); + CHECK_LINK(id); + break; + case 1: + if (zend_get_parameters_ex(1,&mysql_link)==FAILURE) { + RETURN_FALSE; + } + id = -1; + break; + default: + WRONG_PARAM_COUNT; + break; + } + + ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink); + + stat = mysql_stat(&mysql->conn); + + // split string in array + if (array_init(return_value) == FAILURE) { + RETURN_FALSE; + } + + RETURN_STRING(stat, 1); +} +/* }}} */ + #endif #if MYSQL_VERSION_ID < 40000 @@ -912,7 +953,7 @@ PHP_FUNCTION(mysql_create_db) zval **db, **mysql_link; int id; php_mysql_conn *mysql; - + switch(ZEND_NUM_ARGS()) { case 1: if (zend_get_parameters_ex(1, &db)==FAILURE) { @@ -1018,7 +1059,7 @@ static void php_mysql_do_query_general(zval **query, zval **mysql_link, int link convert_to_string_ex(query); /* mysql_query is binary unsafe, use mysql_real_query */ -#if MYSQL_VERSION_ID > 32199 +#if MYSQL_VERSION_ID > 32199 if (mysql_real_query(&mysql->conn, Z_STRVAL_PP(query), Z_STRLEN_PP(query))!=0) { RETURN_FALSE; } @@ -1135,7 +1176,7 @@ PHP_FUNCTION(mysql_list_dbs) int id; php_mysql_conn *mysql; MYSQL_RES *mysql_result; - + switch(ZEND_NUM_ARGS()) { case 0: id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); @@ -1151,7 +1192,7 @@ PHP_FUNCTION(mysql_list_dbs) WRONG_PARAM_COUNT; break; } - + ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink); if ((mysql_result=mysql_list_dbs(&mysql->conn, NULL))==NULL) { @@ -1190,9 +1231,9 @@ PHP_FUNCTION(mysql_list_tables) WRONG_PARAM_COUNT; break; } - + ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink); - + convert_to_string_ex(db); if (mysql_select_db(&mysql->conn, Z_STRVAL_PP(db))!=0) { RETURN_FALSE; @@ -1214,7 +1255,7 @@ PHP_FUNCTION(mysql_list_fields) int id; php_mysql_conn *mysql; MYSQL_RES *mysql_result; - + switch(ZEND_NUM_ARGS()) { case 2: if (zend_get_parameters_ex(2, &db, &table)==FAILURE) { @@ -1233,9 +1274,9 @@ PHP_FUNCTION(mysql_list_fields) WRONG_PARAM_COUNT; break; } - + ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink); - + convert_to_string_ex(db); if (mysql_select_db(&mysql->conn, Z_STRVAL_PP(db))!=0) { RETURN_FALSE; @@ -1249,6 +1290,41 @@ PHP_FUNCTION(mysql_list_fields) } /* }}} */ +/* {{{ proto resource mysql_list_processes([int link_identifier]) + Returns a result set describing the current server threads */ +PHP_FUNCTION(mysql_list_processes) +{ + zval **mysql_link; + int id; + php_mysql_conn *mysql; + MYSQL_RES *mysql_result; + + switch(ZEND_NUM_ARGS()) { + case 0: + id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); + CHECK_LINK(id); + break; + case 1: + if (zend_get_parameters_ex(1, &mysql_link)==FAILURE) { + RETURN_FALSE; + } + id = -1; + break; + default: + WRONG_PARAM_COUNT; + break; + } + + ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink); + + if ((mysql_result=mysql_list_processes(&mysql->conn))==NULL) { + php_error(E_WARNING, "Unable to save MySQL query result"); + RETURN_FALSE; + } + ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result); +} +/* }}} */ + /* {{{ proto string mysql_error([int link_identifier]) Returns the text of the error message from previous MySQL operation */ @@ -2060,11 +2136,11 @@ PHP_FUNCTION(mysql_free_result) if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &result)==FAILURE) { WRONG_PARAM_COUNT; } - + if (Z_TYPE_PP(result)==IS_RESOURCE && Z_LVAL_PP(result)==0) { RETURN_FALSE; } - + ZEND_FETCH_RESOURCE(mysql_result, MYSQL_RES *, result, -1, "MySQL result", le_result); zend_list_delete(Z_LVAL_PP(result)); diff --git a/ext/mysql/php_mysql.h b/ext/mysql/php_mysql.h index 5bd73ac9e2..f373653db3 100644 --- a/ext/mysql/php_mysql.h +++ b/ext/mysql/php_mysql.h @@ -58,6 +58,7 @@ PHP_FUNCTION(mysql_db_query); PHP_FUNCTION(mysql_list_dbs); PHP_FUNCTION(mysql_list_tables); PHP_FUNCTION(mysql_list_fields); +PHP_FUNCTION(mysql_list_processes); PHP_FUNCTION(mysql_error); PHP_FUNCTION(mysql_errno); PHP_FUNCTION(mysql_affected_rows); @@ -84,6 +85,7 @@ PHP_FUNCTION(mysql_get_client_info); PHP_FUNCTION(mysql_get_host_info); PHP_FUNCTION(mysql_get_proto_info); PHP_FUNCTION(mysql_get_server_info); +PHP_FUNCTION(mysql_stat); ZEND_BEGIN_MODULE_GLOBALS(mysql) long default_link; |