Tim Bunce wrote:
> 
> Steffen (and anyone else interested),
> 
> I think we need to mention SQL_ATTR_METADATA_ID in the DBI docs
> somewhere (even though we don't include an API for it) because we're
> assuming that (for ODBC drivers) it has a certain value.
> 
> Also, I think we need to document the differences, where there are
> any, between passing
> 
>         undef
>         ""
>         "%"
> 
> to the various meta data methods.

Attached is a short explanation of this topic.
Tell me if some text passages should be extended.


Steffen
*** DBI-1.21-orig/DBI.pm        Thu Feb 07 04:15:50 2002
--- DBI.pm      Sat Mar 09 23:32:09 2002
***************
*** 4462,4467 ****
--- 4462,4515 ----
  
  =head1 FURTHER INFORMATION
  
+ =head2 Catalog Functions
+ 
+ An application can retrieve metadata information from the DBMS by issuing
+ appropriate queries on the views of the Information Schema. Unfortunately,
+ C<INFORMATION_SCHEMA> views are seldom supported by the DBMS.
+ Special functions (catalog functions) are available to return result sets
+ for a small but important portion of that metadata:
+ 
+   column_info
+   foreign_key_info
+   primary_key_info
+   table_info
+ 
+ All catalog functions accept arguments in order to restrict the result sets.
+ Passing C<undef> to an optional argument does not constrain the search for
+ that argument. However, an empty string ('') is treated as a regular search
+ criteria.
+ 
+ B<Caveat>: Some DBMS store empty strings as C<NULL>. Neither C<undef> nor
+ an empty string ('') may match these records!
+ 
+ Most arguments in the catalog functions accept only B<ordinary values>, e.g.
+ the arguments of C<primary_key_info()>.
+ Such arguments are treated as a literal string, i.e. the case is significant
+ and quote characters are taken literally.
+ 
+ Some arguments in the catalog functions accept B<search patterns> (strings
+ containing '_' and/or '%'), e.g. the C<$table> argument of C<column_info()>.
+ Passing '%' is equivalent to leaving the argument C<undef>.
+ 
+ B<Caveat>: The pattern '%' has a special meaning for C<table_info()>.
+ 
+ B<Caveat>: The underscore ('_') is valid and often used in SQL identifiers.
+ Passing such a value to a search pattern argument may return more rows than
+ expected!
+ 
+ One argument in the catalog functions accepts a B<list of values>:
+ the C<$type> argument of C<table_info()>.
+ 
+ The ODBC and SQL/CLI specifications define a way to change the default
+ behavior described above: All arguments (except list value arguments) are
+ treated as identifier if the C<SQL_ATTR_METADATA_ID> attribute is set to
+ C<SQL_TRUE>.
+ The DBI (currently) does not support the C<SQL_ATTR_METADATA_ID> attribute,
+ i.e. it behaves like an ODBC driver where C<SQL_ATTR_METADATA_ID> is set to
+ C<SQL_FALSE>.
+ 
+ 
  =head2 Transactions
  
  Transactions are a fundamental part of any robust database system. They

Reply via email to