summaryrefslogtreecommitdiff
path: root/ext/pgsql/pgsql.c
diff options
context:
space:
mode:
authorJouni Ahto <jah@php.net>2000-08-16 01:03:20 +0000
committerJouni Ahto <jah@php.net>2000-08-16 01:03:20 +0000
commite85ba0901a6ff2e5f33bfd98dd4874d7675db746 (patch)
treeb44f7e2f7f8f336aad0c6fad96c049980aecb5c3 /ext/pgsql/pgsql.c
parent81b8e08b13fd246a6cf40363d09f19210492bc1d (diff)
downloadphp-git-e85ba0901a6ff2e5f33bfd98dd4874d7675db746.tar.gz
- Return NULL type when column is NULL, now that we have it in PHP4.
- Fixed a bug in handling NULL columns, PQgetvalue() doesn't return a NULL pointer in this case, but a pointer to a string of 0 length...
Diffstat (limited to 'ext/pgsql/pgsql.c')
-rw-r--r--ext/pgsql/pgsql.c62
1 files changed, 36 insertions, 26 deletions
diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c
index c45d5563a9..f65a80dee9 100644
--- a/ext/pgsql/pgsql.c
+++ b/ext/pgsql/pgsql.c
@@ -883,10 +883,14 @@ PHP_FUNCTION(pg_result)
RETURN_FALSE;
}
- return_value->value.str.val = PQgetvalue(pgsql_result, Z_LVAL_PP(row), field_offset);
- return_value->value.str.len = (return_value->value.str.val ? strlen(return_value->value.str.val) : 0);
- return_value->value.str.val = safe_estrndup(return_value->value.str.val,return_value->value.str.len);
- return_value->type = IS_STRING;
+ if (PQgetisnull(pgsql_result, Z_LVAL_PP(row), field_offset)) {
+ return_value->type = IS_NULL;
+ } else {
+ return_value->value.str.val = PQgetvalue(pgsql_result, Z_LVAL_PP(row), field_offset);
+ return_value->value.str.len = (return_value->value.str.val ? strlen(return_value->value.str.val) : 0);
+ return_value->value.str.val = safe_estrndup(return_value->value.str.val,return_value->value.str.len);
+ return_value->type = IS_STRING;
+ }
}
/* }}} */
@@ -933,33 +937,39 @@ static void php_pgsql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type)
}
array_init(return_value);
for (i = 0, num_fields = PQnfields(pgsql_result); i<num_fields; i++) {
- element = PQgetvalue(pgsql_result, Z_LVAL_PP(row), i);
- element_len = (element ? strlen(element) : 0);
- if (element) {
- char *data;
- int data_len;
- int should_copy=0;
-
- if (PG(magic_quotes_runtime)) {
- data = php_addslashes(element, element_len, &data_len, 0);
+ if (PQgetisnull(pgsql_result, Z_LVAL_PP(row), i)) {
+ if (result_type & PGSQL_NUM) {
+ add_index_unset(return_value, i);
} else {
- data = safe_estrndup(element, element_len);
- data_len = element_len;
+ field_name = PQfname(pgsql_result, i);
+ add_assoc_unset(return_value, field_name);
}
+ } else {
+ element = PQgetvalue(pgsql_result, Z_LVAL_PP(row), i);
+ element_len = (element ? strlen(element) : 0);
+ if (element) {
+ char *data;
+ int data_len;
+ int should_copy=0;
+
+ if (PG(magic_quotes_runtime)) {
+ data = php_addslashes(element, element_len, &data_len, 0);
+ } 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_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 (result_type & PGSQL_ASSOC) {
+ field_name = PQfname(pgsql_result, i);
+ add_assoc_stringl(return_value, field_name, data, data_len, should_copy);
+ }
}
- } else {
- /* NULL field, don't set it */
- /* add_get_index_stringl(return_value, i, empty_string, 0, (void **) &pval_ptr); */
- }
+ }
}
}