php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login | |
Patch pgsql_convert_boolean_and_integer_in_results for PostgreSQL related Bug #47051Patch version 2012-01-26 13:13 UTC Return to Bug #47051 | Download this patchThis patch is obsolete Obsoleted by patches: Patch Revisions:Developer: morphunreal@gmail.comIndex: pgsql.c =================================================================== --- pgsql.c (revision 322809) +++ pgsql.c (working copy) @@ -73,7 +73,16 @@ RETURN_LONG((long)oid); \ } while(0) +/* from postgresql/src/include/catalog/pg_type.h */ +#define PGSQL_OID_BOOL 16 +#define PGSQL_OID_BYTEA 17 +#define PGSQL_OID_INT8 20 +#define PGSQL_OID_INT2 21 +#define PGSQL_OID_INT4 23 +#define PGSQL_OID_TEXT 25 +#define PGSQL_OID_OID 26 + #if HAVE_PQSETNONBLOCKING #define PQ_SETNONBLOCKING(pg_link, flag) PQsetnonblocking(pg_link, flag) #else @@ -905,11 +914,13 @@ */ PHP_INI_BEGIN() STD_PHP_INI_BOOLEAN( "pgsql.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateBool, allow_persistent, zend_pgsql_globals, pgsql_globals) -STD_PHP_INI_ENTRY_EX("pgsql.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_persistent, zend_pgsql_globals, pgsql_globals, display_link_numbers) -STD_PHP_INI_ENTRY_EX("pgsql.max_links", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_links, zend_pgsql_globals, pgsql_globals, display_link_numbers) +STD_PHP_INI_ENTRY_EX("pgsql.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_persistent, zend_pgsql_globals, pgsql_globals, display_link_numbers) +STD_PHP_INI_ENTRY_EX("pgsql.max_links", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_links, zend_pgsql_globals, pgsql_globals, display_link_numbers) STD_PHP_INI_BOOLEAN( "pgsql.auto_reset_persistent", "0", PHP_INI_SYSTEM, OnUpdateBool, auto_reset_persistent, zend_pgsql_globals, pgsql_globals) STD_PHP_INI_BOOLEAN( "pgsql.ignore_notice", "0", PHP_INI_ALL, OnUpdateBool, ignore_notices, zend_pgsql_globals, pgsql_globals) STD_PHP_INI_BOOLEAN( "pgsql.log_notice", "0", PHP_INI_ALL, OnUpdateBool, log_notices, zend_pgsql_globals, pgsql_globals) +STD_PHP_INI_BOOLEAN( "pgsql.convert_boolean_type", "0", PHP_INI_ALL, OnUpdateBool, convert_boolean_type, zend_pgsql_globals, pgsql_globals) +STD_PHP_INI_BOOLEAN( "pgsql.convert_integer_type", "0", PHP_INI_ALL, OnUpdateBool, convert_integer_type, zend_pgsql_globals, pgsql_globals) PHP_INI_END() /* }}} */ @@ -2424,7 +2435,7 @@ char *field_name; zval *ctor_params = NULL; zend_class_entry *ce = NULL; - + if (into_object) { char *class_name = NULL; int class_name_len; @@ -2498,27 +2509,51 @@ } else { char *element = PQgetvalue(pgsql_result, pgsql_row, i); if (element) { + Oid oid = PQftype(pgsql_result, i); char *data; int data_len; int should_copy=0; const uint element_len = strlen(element); - - if (PG(magic_quotes_runtime)) { - data = php_addslashes(element, element_len, &data_len, 0 TSRMLS_CC); + + if (oid == PGSQL_OID_BOOL && PGG(convert_boolean_type)){ + int boolval = *element != 'f' ? 1 : 0; + if (result_type & PGSQL_NUM) { + add_index_bool(return_value, i, boolval); + } + + if (result_type & PGSQL_ASSOC) { + field_name = PQfname(pgsql_result, i); + add_assoc_bool(return_value, field_name, boolval); + } + } else if ((oid == PGSQL_OID_INT2 || oid == PGSQL_OID_INT4 || + (oid == PGSQL_OID_INT8 && sizeof(long)>=8)) && PGG(convert_integer_type)){ + long int longval = atol(element); + if (result_type & PGSQL_NUM) { + add_index_long(return_value, i, longval); + } + + if (result_type & PGSQL_ASSOC) { + field_name = PQfname(pgsql_result, i); + add_assoc_long(return_value, field_name, longval); + } } else { - data = safe_estrndup(element, element_len); - data_len = element_len; - } - - if (result_type & PGSQL_NUM) { - add_index_stringl(return_value, i, data, data_len, should_copy); - should_copy=1; - } - - if (result_type & PGSQL_ASSOC) { - field_name = PQfname(pgsql_result, i); - add_assoc_stringl(return_value, field_name, data, data_len, should_copy); - } + if (PG(magic_quotes_runtime)) { + data = php_addslashes(element, element_len, &data_len, 0 TSRMLS_CC); + } else { + data = safe_estrndup(element, element_len); + data_len = element_len; + } + + if (result_type & PGSQL_NUM) { + add_index_stringl(return_value, i, data, data_len, should_copy); + should_copy=1; + } + + if (result_type & PGSQL_ASSOC) { + field_name = PQfname(pgsql_result, i); + add_assoc_stringl(return_value, field_name, data, data_len, should_copy); + } + } } } } Index: php_pgsql.h =================================================================== --- php_pgsql.h (revision 322809) +++ php_pgsql.h (working copy) @@ -284,6 +284,7 @@ int le_lofp,le_string; int ignore_notices,log_notices; HashTable notices; /* notice message for each connection */ + int convert_boolean_type, convert_integer_type; ZEND_END_MODULE_GLOBALS(pgsql) ZEND_EXTERN_MODULE_GLOBALS(pgsql) |
Copyright © 2001-2024 The PHP Group All rights reserved. |
Last updated: Fri Nov 22 05:01:29 2024 UTC |