Thread DBI: Exception Model RaiseError (15 answers)
Opened by rosti at 2011-03-23 10:21

rosti
 2011-05-07 08:35
#148313 #148313
User since
2011-03-19
3507 Artikel
BenutzerIn
[Homepage]
user image
Moin,

meine Lösung sieht nun so aus, dass die DB-Klasse eine Tie-Method hat:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sub TIEARRAY{
        my $class = shift;
        my $ref = shift; 
        my $self = $class->new;
        return if $@;
        
        if(exists $ref->{url}){
                my $q = q(SELECT ref, FROM_UNIXTIME(ts), hugo FROM log WHERE url=? ORDER BY ts DESC LIMIT 10);
                my $st = $self->{DBH}->prepare_cached($q);
                eval{
                        $st->execute($ref->{url});
                        $self->{STH} = $st;             # Statement Handle an Objekt
                        $self->{CB} = $ref->{callback}; # Callbackfunktion an Objekt
                };
                return if $@;
        }
        return $self;
}


In der Einbindung wird zunächst das Array gebunden:

Code (perl): (dl )
1
2
3
tie (my @ura, 'TieLog', { url => '/praxis', callback => \&cb_array}) || die "Fehler: $@";
print "============= Daten kommen ==============\n\n";
tied(@ura)->callback;


D.h., beim tie() wird festgestellt, ob es einen Fehler gab. Danach kann die Ausgabe erfolgen. Wenn dabei 'unterwegs' noch was schiefgeht, isses halt Pech ;)

Edit: Callback-Method in der DB-Klasse
Code (perl): (dl )
1
2
3
4
5
6
7
# CallBack
sub callback{
        my $self = shift;
        while(my $ref = $self->{STH}->fetchrow_arrayref){
                $self->{CB}($ref);
        }
}


Diese Methode kann immer dann verwendet werden, wenn die Ausgabe über eine Array-Referenz je Record erfolgen soll (Code mehrfach verwendbar).

Last edited: 2011-05-07 08:46:33 +0200 (CEST)

View full thread DBI: Exception Model RaiseError