Author: REHSACK
Date: Sat Aug 14 07:57:38 2010
New Revision: 14328

Modified:
   dbi/trunk/lib/DBD/File.pm

Log:
- fix issue when absolute filename is used as table name
- minor speed improvements


Modified: dbi/trunk/lib/DBD/File.pm
==============================================================================
--- dbi/trunk/lib/DBD/File.pm   (original)
+++ dbi/trunk/lib/DBD/File.pm   Sat Aug 14 07:57:38 2010
@@ -705,6 +705,8 @@
 
 # ====== FLYWEIGHT SUPPORT 
=====================================================
 
+my $fn_any_ext_regex = qr/\.[^.]*/;
+
 # Flyweight support for table_info
 # The functions file2table, init_table_meta, default_table_meta and
 # get_table_meta are using $self arguments for polymorphism only. The
@@ -735,16 +737,17 @@
        $user_spec_file = 0;
        }
 
-    -d File::Spec->catdir ($meta->{f_dir}, $dir) or
-       croak (File::Spec->catdir ($meta->{f_dir}, $dir) . ": $!");
-
     !$respect_case and $meta->{sql_identifier_case} == 1 and # XXX SQL_IC_UPPER
         $tbl = uc $tbl;
     !$respect_case and $meta->{sql_identifier_case} == 2 and # XXX SQL_IC_LOWER
         $tbl = lc $tbl;
+
     my $searchdir = File::Spec->file_name_is_absolute ($dir)
-       ? $dir
+       ? ($dir =~ s|/$||, $dir)
        : Cwd::abs_path (File::Spec->catdir ($meta->{f_dir}, $dir));
+    -d $searchdir or
+       croak "-d $searchdir: $!";
+
     $searchdir eq $meta->{f_dir} and
        $dir = "";
 
@@ -755,7 +758,7 @@
        my $cmpsub;
        if ($respect_case) {
            $cmpsub = sub {
-               my ($fn, undef, $sfx) = File::Basename::fileparse ($_, 
qr/\.[^.]*/);
+               my ($fn, undef, $sfx) = File::Basename::fileparse ($_, 
$fn_any_ext_regex);
                $fn eq $tbl and
                    return (lc $sfx eq lc $ext or !$req && !$sfx);
                return 0;
@@ -763,7 +766,7 @@
            }
        else {
            $cmpsub = sub {
-               my ($fn, undef, $sfx) = File::Basename::fileparse ($_, 
qr/\.[^.]*/);
+               my ($fn, undef, $sfx) = File::Basename::fileparse ($_, 
$fn_any_ext_regex);
                lc $fn eq lc $tbl and
                    return (lc $sfx eq lc $ext or !$req && !$sfx);
                return 0;

Reply via email to