On Tue, Sep 02, 2008 at 12:39:41AM +0200, H.Merijn Brand wrote:
> On Mon, 1 Sep 2008 22:59:24 +0100, Tim Bunce <[EMAIL PROTECTED]>
> wrote:
>
> > > > > > > As get_info (29) now returns a TRUE value, the 'tables ()' method
> > > > > > > is
> > > > > > > using a different strategy to build the list it returns:
> > > > > > >
> > > > > > > sub tables
> > > > > > > {
> > > > > > > my ($dbh, @args) = @_;
> > > > > > > my $sth = $dbh->table_info (@args[0..4]) or return;
> > > > > > > my $tables = $sth->fetchall_arrayref or return;
> > > > > > > my @tables;
> > > > > > > » if ($dbh->get_info (29)) { # SQL_IDENTIFIER_QUOTE_CHAR
> > > > > > > » @tables = map { $dbh->quote_identifier (@{$_}[0,1,2])
> > > > > > > } @$tables;
> > > > > > > » }
> >
> > > > > > > Unify has no support for CATALOG's, so the values in info are not
> > > > > > > defined, but still used in the map, causing all my tables no
> > > > > > > showing up
> > > > > > > with and empty "". in front of it, which is illegal to the
> > > > > > > database :(
> > I wasn't very clear (and was actually partly misleading). Sorry.
> >
> > What I meant was that the TABLE_CAT and/or TABLE_SCHEM columns in the
> > data returned by your table_info () method are probably empty strings but
> > should be undefs.
> >
> > What does
> > Data::Dumper::Dumper($dbh->table_info(...)->fetchall_arrayref)
> > show for an example table?
>
> $ perl -Iblib/{lib,arch} -MPROCURA::DBD -MData::Dumper
> -wle'$dbh=DBDlogon;print Dumper
> $dbh->table_info(undef,"PROLEP","parm")->fetchall_arrayref' $VAR1 = [
> [
> '',
> 'PROLEP',
> 'parm',
> 'T',
> 'W'
> ]
> ];
>
> Correct, as that is the result of
>
> sub table_info
> {
> my $sth = $dbh->prepare (
> "select '', OWNR, TABLE_NAME, TABLE_TYPE, RDWRITE ".
> "from SYS.ACCESSIBLE_TABLES ".
> $where);
> select NULL, OWNR, ...
>
> is not allowed. I don't see an easy way out
>
> sql> select NULL, OWNR, TABLE_NAME
> sql> from SYS.ACCESSIBLE_TABLES
> sql> where TABLE_NAME like 'parm';
> NULL is not allowed in a constant list (-10518).
Perhaps you could use some expression that happens to yield a NULL.
Or you could implement a custom quote_identifier() method.
Tim.