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

Reply via email to