Edit report at https://bugs.php.net/bug.php?id=41146&edit=1
ID: 41146
Comment by: yohgaki at ohgaki dot net
Reported by: shade at nekto dot com
Summary: pg_meta_data does not return fields description
Status: Assigned
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:
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.
Previous Comments:
------------------------------------------------------------------------
[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