Req #41146 [Asn->Csd]: pg_meta_data does not return fields description
| From: | yohgaki@php.net | Date: | Sun, 16 Feb 2014 22:04:09 +0000 |
| Subject: | Req #41146 [Asn->Csd]: pg_meta_data does not return fields description | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-184330@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=41146&edit=1
ID: 41146
Updated by: yohgaki@php.net
Reported by: shade at nekto dot com
Summary: pg_meta_data does not return fields description
-Status: Assigned
+Status: Closed
Type: Feature/Change Request
Package: PostgreSQL related
Operating System: *
PHP Version: 5.2.1
Assigned To: yohgaki
Block user comment: N
Private report: N
New Comment:
http://git.php.net/?p=php-src.git;a=commitdiff;h=862e4bdf5204778d4a5dc08e347be7513714732a
Implemented.
Previous Comments:
------------------------------------------------------------------------
[2011-11-08 06:05:14] yohgaki at ohgaki dot net
The reason that the function fails is PostgreSQL's schema is changed when minor
version is updated.
I'll look into so that it can perform proper query for current connection.
------------------------------------------------------------------------
[2007-04-20 08:27:42] shade at nekto dot com
Description:
------------
I found that pg_meta_data do not returns fields descriptions in result. I explore sources and found
that table's meta fteched by query, citated below. I do not have free FreeBSD host for
programming experiments, but i upgrade a query little bit, adding ability to fetch description from
fields.
Can you use my query to add to pg_meta_data() ability to return field descriptions?
Reproduce code:
---------------
Original code:
smart_str_appends(&querystr,
"SELECT a.attname, a.attnum, t.typname, a.attlen, a.attnotNULL,
a.atthasdef, a.attndims "
"FROM pg_class as c, pg_attribute a, pg_type t "
"WHERE a.attnum > 0 AND a.attrelid = c.oid AND c.relname =
'");
tmp_name = php_addslashes((char *)table_name, strlen(table_name), &new_len, 0
TSRMLS_CC);
smart_str_appendl(&querystr, tmp_name, new_len);
efree(tmp_name);
smart_str_appends(&querystr, "' AND a.atttypid = t.oid ORDER BY
a.attnum;");
smart_str_0(&querystr);
Changed code, that i proposes:
smart_str_appends(&querystr,
"SELECT a.attname, a.attnum, t.typname, a.attlen, a.attnotNULL,
a.atthasdef, a.attndims, d.description "
"FROM pg_class as c JOIN pg_attribute a on (a.attrelid = c.oid) JOIN
pg_type t on (a.atttypid = t.oid) "
"LEFT JOIN pg_description d on (d.objoid=a.attrelid and
d.objsubid=a.attnum and c.oid=d.objoid) "
"WHERE a.attnum > 0 AND c.relname = '");
tmp_name = php_addslashes((char *)table_name, strlen(table_name), &new_len, 0
TSRMLS_CC);
smart_str_appendl(&querystr, tmp_name, new_len);
efree(tmp_name);
smart_str_appends(&querystr, "' ORDER BY a.attnum;");
smart_str_0(&querystr);
Expected result:
----------------
Information about table, including fields description (aka comments).
Actual result:
--------------
No any descriptions :(
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=41146&edit=1