Hello Michael,

this belongs to php-dev, I cc-ed them and the author of this code.

Derick

On Sun, 24 Mar 2002, Vergoz Michael (SYSDOOR) wrote:

> all the time you use pg_exec you have to put the result of this function 
> into a 'PGresult *' and after the execution you have clear the pointer.
> In big trafic your apache can take more memory. We can save more 1k per 
> query !!!
> there is the current code of pg_exec
> 
> (L.714, file : ext/pgsql.c)
> 
>  PHP_FUNCTION(pg_exec)
> {
>     zval **query, **pgsql_link = NULL;
>     int id = -1;
>     PGconn *pgsql;
> *    PGresult *pgsql_result;*
>     ExecStatusType status;
>     pgsql_result_handle *pg_result;
> [...]
>     convert_to_string_ex(query);
> *     pgsql_result = PQexec(pgsql, Z_STRVAL_PP(query));* /* <- well with 
> have free that buffer */
> 
>     if (pgsql_result) {
>         status = PQresultStatus(pgsql_result);
>     } else {
>         status = (ExecStatusType) PQstatus(pgsql);
>     }
> [...]
>     switch (status) {
>         case PGRES_EMPTY_QUERY:
>         case PGRES_BAD_RESPONSE:
>         case PGRES_NONFATAL_ERROR:
>         case PGRES_FATAL_ERROR:
>             php_error(E_WARNING, "PostgreSQL query failed:  %s", 
> PQerrorMessage(pgsql));
>             RETURN_FALSE;
>             break;
> *        case PGRES_COMMAND_OK: /* well the query has be excuted, and 
> the pg_result is in memory, but we don't need it */*
>         default:
> [...]
> 
> /*------------------------------Fixed 
> code---------------------------------*/
> 
> /* {{{ proto int pg_exec([int connection,] string query)
>    Execute a query */
> PHP_FUNCTION(pg_exec)
> {
>     zval **query, **pgsql_link = NULL;
>     int id = -1;
>     PGconn *pgsql;
>     PGresult *pgsql_result;
>     ExecStatusType status;
>     pgsql_result_handle *pg_result;
> 
>     switch(ZEND_NUM_ARGS()) {
>         case 1:
>             if (zend_get_parameters_ex(1, &query)==FAILURE) {
>                 RETURN_FALSE;
>             }
>             id = PGG(default_link);
>             CHECK_DEFAULT_LINK(id);
>             break;
>         case 2:
>             if (zend_get_parameters_ex(2, &pgsql_link, &query)==FAILURE) {
>                 RETURN_FALSE;
>             }
>             break;
>         default:
>             WRONG_PARAM_COUNT;
>             break;
>     }
> 
>     ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL 
> link", le_link, le_plink);
> 
>     convert_to_string_ex(query);
>     pgsql_result = PQexec(pgsql, Z_STRVAL_PP(query));
> 
>     if (pgsql_result) {
>         status = PQresultStatus(pgsql_result);
>     } else {
>         status = (ExecStatusType) PQstatus(pgsql);
>     }
>     switch (status) {
>         case PGRES_EMPTY_QUERY:
>         case PGRES_BAD_RESPONSE:
>         case PGRES_NONFATAL_ERROR:
>         case PGRES_FATAL_ERROR:
>             php_error(E_WARNING, "PostgreSQL query failed:  %s", 
> PQerrorMessage(pgsql));
>             RETURN_FALSE;
>             break;
>         case PGRES_COMMAND_OK:
>             PQclear(pgsql_result);      /* vacum the current execution 
> and save 1k ! :) */
>             /* successful command that did not return rows */
>         default:
>             if (pgsql_result) {
>                 pg_result = (pgsql_result_handle *) 
> emalloc(sizeof(pgsql_result_handle));
>                 pg_result->conn = pgsql;
>                 pg_result->result = pgsql_result;
>                 pg_result->row = -1;
>                 ZEND_REGISTER_RESOURCE(return_value, pg_result, le_result);
>                 /*
>                 return_value->value.lval = 
> zend_list_insert(pg_result,le_result);
>                 return_value->type = IS_LONG;
>                 */
>             } else {
>                 RETURN_FALSE;
>             }
>             break;
>     }
> }
> /* }}} */
> 
> 

-----------------------------------------------------------------------
              PHP: Scripting the Web - [EMAIL PROTECTED]
                All your branches are belong to me!
            SRM: Script Running Machine - www.vl-srm.net
-----------------------------------------------------------------------


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to