Thread Installation von DBIx::Class 0.08200- Sysbase zwingend notwendig? (4 answers)
Opened by AndiE at 2012-08-25 23:33

AndiE
 2012-08-26 16:46
#161353 #161353
User since
2010-10-24
65 Artikel
BenutzerIn
[default_avatar]
Danke für die schnelle Antwort. Es ist tatsächlich die Version 0.08200. Da habe ich mich vertan. Der angegebene Test ...750firebird.t schließt mit einem "ok" ab. Später wird noch ein Test "...storage/reconnect.t" ausgeführt, der mit einem Fehler endet.

Das ist der Ausschnitt aus dem Test:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# Try the operation again - What should happen here is:
#   1. S::DBI blindly attempts the SELECT, which throws an exception
#   2. It catches the exception, checks ->{Active}/->ping, sees the disconnected state...
#   3. Reconnects, and retries the operation
#   4. Success!
my @art_two = $schema->resultset("Artist")->search({ }, { order_by => 'name DESC'});
cmp_ok(@art_two, '==', 3, "Three artists returned");

### Now, disconnect the dbh, and move the db file;
# create a new one and chmod 000 to prevent SQLite from connecting.
$schema->storage->_dbh->disconnect;
move( $db_orig, $db_tmp )
  or die "failed to move $db_orig to $db_tmp: $!";
open DBFILE, '>', $db_orig;
print DBFILE 'THIS IS NOT A REAL DATABASE';
close DBFILE;
chmod 0000, $db_orig;

### Try the operation again... it should fail, since there's no db
{
    # Catch the DBI connection error
    local $SIG{__WARN__} = sub {};
    dies_ok {
        my @art_three = $schema->resultset("Artist")->search( {}, { order_by => 'name DESC' } );
    } 'The operation failed';
}

# otherwise can't unlink the fake db file
$schema->storage->_dbh->disconnect if $^O eq 'MSWin32';

### Now, move the db file back to the correct name
unlink($db_orig) or die "could not delete $db_orig: $!";
move( $db_tmp, $db_orig )
  or die "could not move $db_tmp to $db_orig: $!";

### Try the operation again... this time, it should succeed
my @art_four;
lives_ok {
    @art_four = $schema->resultset("Artist")->search( {}, { order_by => 'name DESC' } );
} 'The operation succeeded';
cmp_ok( @art_four, '==', 3, "Three artists returned" );


Nach meiner Meinung wird die Verbindung zur Datenbank unterbrochen, aber nicht wieder aufgebaut. Sehe ich das richtig?
Last edited: 2012-08-26 22:59:13 +0200 (CEST)

View full thread Installation von DBIx::Class 0.08200- Sysbase zwingend notwendig?