History | Log In     View a printable version of the current page.  

Welcome to our new server and updated tools!



Issue Details (XML | Word | Printable)

Key: ZF-745
Type: New Feature New Feature
Status: Open Open
Priority: Major Major
Assignee: Darby Felton
Reporter: Bill Karwin
Votes: 2
Watchers: 3
Operations

If you were logged in you would be able to see more operations.
Google issue summary
Zend Framework

Request solution for result set metadata

Created: 12/Jan/07 03:38 PM   Updated: 24/Apr/08 03:45 PM
Component/s: Zend_Db
Affects Version/s: None
Fix Version/s: Next Minor Release

Time Tracking:
Original Estimate: 2 weeks
Original Estimate - 2 weeks
Remaining Estimate: 2 weeks
Remaining Estimate - 2 weeks
Time Spent: Not Specified
Remaining Estimate - 2 weeks

Fix Version Priority: Nice to Have


 Description  « Hide
Currently the Zend_Db_Adapter_Abstract interface supports fetching data values of a result set, but the metadata is not available. So there no convenient way to determine the original SQL datatype of a column; all column values are mapped to PHP scalars.

This is a feature request to add a method to Zend_Db_Adapter_Abstract, and implement in each respective subclass, to fetch a special result-set consisting of metadata of the result set.



 All   Comments   Work Log   Change History   FishEye   Crucible      Sort Order: Ascending order - Click to sort in descending order
Bill Karwin - 12/Jan/07 03:46 PM
Notes:

PDO has a method getColumnMeta() but it is noted as "experimental" in the PDO docs. Not all PDO drivers are guaranteed to support it. I haven't checked the status of support for this method in the PDO drivers we use in ZF.

The PDO getColumnMeta() method returns an associative array for a single column (specified by the 0-indexed ordinal number of the column), with the following keys:

  • native_type
  • driver:decl_type
  • flags
  • name
  • len
  • precision
  • pdo_type

MySQLi stmts have a result_metadata() method, so this could support result set metadata. The result_metadata() method returns a result-set object, which is an iterable collection of fields. Each field is an object. The documentation does not specify the members of this object.

The OCI API for Oracle has individual methods for metadata. So this could support result set metadata. The methods are:

  • oci_field_is_null()
  • oci_field_name()
  • oci_field_precision()
  • oci_field_scale()
  • oci_field_size()
  • oci_field_type_raw()
  • oci_field_type()

Bill Karwin - 12/Jan/07 03:46 PM
I would propose a new alternative fetch() method for Zend_Db_Adapter, to retrieve data combined with metadata in a canonical form. The adapter is responsible for assembling the metadata into this form.

Then a Zend_Db_Table_Row would also have a new method getMetadata() which returns an associative array mapping column names to a further associative array with attributes for the respective column. Zend_Db_Table_Row would always fetch the metadata for a query from the adapter. This might cause a slight performance cost depending on the adapter's implementation, but it is likely to be insignificant compared to the cost of the query itself.


Bill Karwin - 13/Mar/07 03:09 PM
Reset components to just Zend_Db.

Fabrizio Balliano - 14/Jun/07 03:26 AM
I wrote some considerations about this and other things on my blog:
http://tinyurl.com/2f38sq
http://tinyurl.com/yr4lk9

metadata retrieving should be untied from the zend_db_table and should work using the getcolumnmeta function, that should be released as stable (not experimental like now).

a feature that needs to be added is the table name of the field, absolutely needed when writing general code


Wil Sinclair - 25/Mar/08 08:43 PM
Please categorize/fix as needed.

Wil Sinclair - 18/Apr/08 01:11 PM
This doesn't appear to have been fixed in 1.5.0. Please update if this is not correct.