On Mon, 29 Jun 2009 16:26:30 +0100, Tim Bunce <tim.bu...@pobox.com> wrote:
> On Mon, Jun 29, 2009 at 04:06:23PM +0200, H.Merijn Brand wrote: > > No database is perfect, but Oracle keeps causing massive hate > > > > $ cat test.pl > > #!/pro/bin/perl > > > > use strict; > > use warnings; > > > > use DBI; > > use Data::Peek; > > > > my $dbh = DBI->connect ("dbi:Oracle:", (split m{/} => $ENV{DBUSER}), { > > AutoCommit => 1, > > RaiseError => 1, > > PrintError => 1, > > ChopBlanks => 1, > > ShowErrorStatement => 1, > > FetchHashKeyName => "NAME_lc", > > }); > > > > $dbh->do ("create table foo (c_foo numeric (4) not null primary key)"); > > $dbh->do ("insert into foo values (1)"); > > > > DDumper [ "foo", $dbh->primary_key (undef, "PROLEP", "foo") ]; > > DDumper [ "FOO", $dbh->primary_key (undef, "PROLEP", "FOO") ]; > > > > $dbh->do ("drop table foo"); > > $ perl test.pl > > $VAR1 = [ > > 'foo' > > ]; > > i.e. it didn't find a table called 'foo' > > > $VAR1 = [ > > 'FOO', > > 'C_FOO' > > ]; > > $ > > but it did find a table called 'FOO'. > > I suspect that's the right behaviour. The 'Catalog Methods' section of > the DBI docs says: > > Most arguments in the catalog methods accept only ordinary values, e.g. > the arguments of "primary_key_info()". Such arguments are treated as a > literal string, i.e. the *case is significant* and quote characters are > taken literally. I must have missed this piece when browsing the docs to find proof. I *know* why DBD::Oracle fails, and I also understand, but from a user point of view, this `match' should also be case-insensitive. > Oracle is one of those databases that uppercases (unquoted) names. > That's perfectly valid behaviour - though it can be a major pain. > > > I found out last week that MySQL is even worse, as it prohibits the use > > of a space before a paren in aggregate functions. But that is not on > > topic here. > > True, though I believe there's a config option to control that > (a trade-off with some other feature that I don't now recall). Reason for our company to tell the customer MYSQL is a no-go Another reason were reserved fields like 'show' and 'mod' that are no problem in all other databases and are field and table names in most of our schemas -- H.Merijn Brand http://tux.nl Perl Monger http://amsterdam.pm.org/ using & porting perl 5.6.2, 5.8.x, 5.10.x, 5.11.x on HP-UX 10.20, 11.00, 11.11, 11.23, and 11.31, OpenSuSE 10.3, 11.0, and 11.1, AIX 5.2 and 5.3. http://mirrors.develooper.com/hpux/ http://www.test-smoke.org/ http://qa.perl.org http://www.goldmark.org/jeff/stupid-disclaimers/