Simon Oliver wrote:
>Tim Bunce wrote:
>
>>FYI, here's what I'm playing with at the moment:
>>
>> sub quote_identifier {
>> my $dbh = shift;
>> my @id = grep { defined } @_; # ignore null elements (ie catalog, schema)
>> s/"/""/g foreach @id; # escape embedded quotes
>> $_=qq{"$_"} foreach @id; # quote the element
>> return join '.', @id; # ... and join the dots
>> }
>>
>>Any drivers that need different behaviour will need to define their
>>own method to override this default.
>>
>
>Makes sense. DBD coders should be *encouraged* to override this method if the
>undelying DBMS is capable of changes to the quoting behaviour. This would
>include DBD::ODBC, DBD::ADO, DBD::Sybase, DBD::ASAny to name a few that I know
>this applies to.
>
>As an example, if quoted identifiers is turned off as a database option then
>then the DBD's overriding method should realise this and return a non-quoted
>identifier.
>
>And any method that returns an identifier should pass it through
>$dbh->quote_identifier as matter of course. Currently I think this only
>applied to $dbh->tables, but I forsee the list growing with the inclusion of
>AnyDBD interface, new metadata methods and SQL rewriting stuff.
>
>Happy New Year
>
>--
> Simon Oliver
>
Hmmmm, basically, I see what's going on. Informix only supports
delimited identifiers if the environment variable DELIMIDENT is set when
the connection is initiated, which will make this very difficult to
handle. In the absence of DELIMIDENT, Informix allows both single
quotes and double quotes to identify strings (an issue predating the SQL
standards on the subject). So, although the method outlined by Tim is
correct, it won't work usefully unless DELIMIDENT is set, and DELIMIDENT
needs to be set prior to making the connection so it can't be handled
when the quote_identifier method is called. So, it would be useful if
there was a connection time attribute that could be set indicating that
delimited identifiers will be used -- if that's available, DBD::Informix
can set DELIMIDENT before creating the connection and then all will be
fine. Without that, Informix won't be able to do much -- you'll simply
get (at best) syntax errors and (at worst) misunderstood SQL.
--
Jonathan Leffler ([EMAIL PROTECTED], [EMAIL PROTECTED])
Guardian of DBD::Informix 1.00.PC1 -- see http://www.cpan.org/
#include <disclaimer.h>