Re: AW: [GENERAL] Re: [HACKERS] TRANSACTIONS

From: Karl DeBisschop <kdebisschop(at)range(dot)infoplease(dot)com>
To: oleg(at)sai(dot)msu(dot)su
Cc: ZeugswetterA(at)wien(dot)spardat(dot)at, hackers(at)postgreSQL(dot)org
Subject: Re: AW: [GENERAL] Re: [HACKERS] TRANSACTIONS
Date: 2000-02-24 15:23:23
Message-ID: 200002241523.KAA02174@skillet.infoplease.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

>Here is my example:
>
>package Apache::Hits;
>
>use strict;
>use Apache::Constants qw(:common);
>
>my ($sth_lock, $sth_upd, $sth_ins );
>
>
>sub handler {
> my $r = shift;
> if ( $r->args() =~ /msg_id=(\d+)/o ) {
> $HTML::Mason::Commands::dbs ||= My::DB->new(1);
> my $dbh = $HTML::Mason::Commands::dbs->{dbh};
> $sth_lock ||= $dbh->prepare("LOCK TABLE hits IN SHARE ROW EXCLUSIVE MODE");
> $sth_upd ||= $dbh->prepare("UPDATE hits SET count=count+1,last_access=now() WHERE msg_id=?");
> $sth_ins ||= $dbh->prepare("INSERT INTO hits (msg_id,count) VALUES (?, 1)");
> $dbh->{AutoCommit} = 0;
> my $success = 1;
> $success &&= $sth_lock->execute();
> $success &&= $sth_upd->execute( $1 );
> $success &&= $sth_ins->execute( $1 ) if ( $success eq '0E0');
> my $result = ($success ? $dbh->commit : $dbh->rollback);
> unless ( $result ) {
> $r->log_error("Unable to process transaction: ". $dbh->errstr ."\n");
> }
> }
> return OK;
>}
>
>1;
>__END__

Maybe I'm missing something - I don't use the Apache module, nor the
mason module, so it's difficult for me to decode this. But I looks to
me like this commits or rolls back one statement at a time.

What I want to be able to do is run a multi-statement transaction, and
for each statement in the transaction try to fix it if an error is
generated. If I cannot fix it, I want to roll back all of the
previous statements in the transaction. If I can fix it, I want to
clear the error status and continue on to the next statement in the
transaction.

Does your counter example do this in some way that I am not seeing?

--
Karl DeBisschop <kdebisschop(at)alert(dot)infoplease(dot)com>
617.832.0332 (Fax: 617.956.2696)

Information Please - your source for FREE online reference
http://www.infoplease.com - Your Ultimate Fact Finder
http://kids.infoplease.com - The Great Homework Helper

Netsaint Plugins Development
http://netsaintplug.sourceforge.net

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2000-02-24 15:28:47 Re: [HACKERS] Re: [BUGS] First experiences with Postgresql 7.0
Previous Message Bruce Momjian 2000-02-24 15:18:35 Re: [HACKERS] Minor problems reloading dump in 7.0beta1