On Mon, Mar 11, 2002 at 05:46:01PM +0100, Steffen Goeldner wrote:
> 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.

Thanks!

> 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
> + 
> + 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.

Let's spell it out for people:

+ (i.e., passing undef is equivalent to passing '%').

> + However, an empty string ('') is treated as a regular search criteria.
 
+ and will only match an empty value.

> + B<Caveat>: Some DBMS store empty strings as C<NULL>. Neither C<undef> nor
> + an empty string ('') may match these records!

While that's true in general, what _exact_ impact does it have on
catalog function parameters as per the standards? Shouldn't it have
no impact?

> + Most arguments in the catalog functions accept only B<ordinary values>, e.g.

I'd prefer I<> for introducing terminology.

> + 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.

The case being significant raises some er, significant, issues for
portability.

> + 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>.

Does the DBI spec for each catalog function make it clear enough
which params are 'ordinary values' and which are 'search patterns'?
They should also all have a 'See also' link to this 'Catalog
Functions' section (which should perhaps be called catalog methods :-)

> + B<Caveat>: The pattern '%' has a special meaning for C<table_info()>.

 ... for certain uses of ...

but it's probably not worth menting here. It should be made clear enough
in the table_info docs.

> + 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!

Umm, I guess the fix is to escape literal underscores with the
appropriate escape character read from get_info (right?).
Probably worth mentioning that.

> + One argument in the catalog functions accepts a B<list of values>:
> + the C<$type> argument of C<table_info()>.

I'd skip that one (as per '%' for table_info() above).

> + 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>.

So is 'identifier' here the same as 'ordinary values' above?
Best to use consistent terminology.

> + 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>.

Tim [who'snot had time to read the ODBC spec recently to answer some of the
questions for himself, sorry]

Reply via email to