diff options
author | ivan <ivan> | 2002-03-04 12:48:49 +0000 |
---|---|---|
committer | ivan <ivan> | 2002-03-04 12:48:49 +0000 |
commit | 239484572a9191100993bb1e85ffe8834689feb0 (patch) | |
tree | 94c61ae16e6507918272721acd58791129ba1f99 /FS | |
parent | dac484e8356be5b235cacebe83059b7eb6588c13 (diff) |
*** empty log message ***
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/Record.pm | 54 | ||||
-rw-r--r-- | FS/FS/nas.pm | 4 |
2 files changed, 50 insertions, 8 deletions
diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm index 0aa010bbc..7dc19ccac 100644 --- a/FS/FS/Record.pm +++ b/FS/FS/Record.pm @@ -344,7 +344,7 @@ sub table { =item dbdef_table -Returns the FS::dbdef_table object for the table. +Returns the DBIx::DBSchema::Table object for the table. =cut @@ -473,20 +473,27 @@ sub insert { $self->unique($primary_key) if $primary_key && ! $self->getfield($primary_key); + #false laziness w/delete my @fields = grep defined($self->getfield($_)) && $self->getfield($_) ne "", $self->fields ; + my @values = map { _quote( $self->getfield($_), $self->table, $_) } @fields; + #eslaf my $statement = "INSERT INTO ". $self->table. " ( ". - join(', ',@fields ). + join( ', ', @fields ). ") VALUES (". - join(', ',map(_quote($self->getfield($_),$self->table,$_), @fields)). + join( ', ', @values ). ")" ; warn "[debug]$me $statement\n" if $DEBUG; my $sth = dbh->prepare($statement) or return dbh->errstr; + my $h_statement = $self->_h_statement('insert'); + warn "[debug]$me $h_statement\n" if $DEBUG; + my $h_sth = dbh->prepare($h_statement) or return dbh->errstr; + local $SIG{HUP} = 'IGNORE'; local $SIG{INT} = 'IGNORE'; local $SIG{QUIT} = 'IGNORE'; @@ -495,6 +502,7 @@ sub insert { local $SIG{PIPE} = 'IGNORE'; $sth->execute or return $sth->errstr; + $h_sth->execute or return $h_sth->errstr; dbh->commit or croak dbh->errstr if $FS::UID::AutoCommit; ''; @@ -521,7 +529,7 @@ otherwise returns false. sub delete { my $self = shift; - my($statement)="DELETE FROM ". $self->table. " WHERE ". join(' AND ', + my $statement = "DELETE FROM ". $self->table. " WHERE ". join(' AND ', map { $self->getfield($_) eq '' #? "( $_ IS NULL OR $_ = \"\" )" @@ -537,6 +545,10 @@ sub delete { warn "[debug]$me $statement\n" if $DEBUG; my $sth = dbh->prepare($statement) or return dbh->errstr; + my $h_statement = $self->_h_statement('delete'); + warn "[debug]$me $h_statement\n" if $DEBUG; + my $h_sth = dbh->prepare($h_statement) or return dbh->errstr; + local $SIG{HUP} = 'IGNORE'; local $SIG{INT} = 'IGNORE'; local $SIG{QUIT} = 'IGNORE'; @@ -546,6 +558,7 @@ sub delete { my $rc = $sth->execute or return $sth->errstr; #not portable #return "Record not found, statement:\n$statement" if $rc eq "0E0"; + $h_sth->execute or return $h_sth->errstr; dbh->commit or croak dbh->errstr if $FS::UID::AutoCommit; undef $self; #no need to keep object! @@ -611,6 +624,14 @@ sub replace { warn "[debug]$me $statement\n" if $DEBUG; my $sth = dbh->prepare($statement) or return dbh->errstr; + my $h_old_statement = $old->_h_statement('replace_old'); + warn "[debug]$me $h_old_statement\n" if $DEBUG; + my $h_old_sth = dbh->prepare($h_old_statement) or return dbh->errstr; + + my $h_new_statement = $new->_h_statement('replace_new'); + warn "[debug]$me $h_new_statement\n" if $DEBUG; + my $h_new_sth = dbh->prepare($h_new_statement) or return dbh->errstr; + local $SIG{HUP} = 'IGNORE'; local $SIG{INT} = 'IGNORE'; local $SIG{QUIT} = 'IGNORE'; @@ -620,6 +641,8 @@ sub replace { my $rc = $sth->execute or return $sth->errstr; #not portable #return "Record not found (or records identical)." if $rc eq "0E0"; + $h_old_sth->execute or return $h_old_sth->errstr; + $h_new_sth->execute or return $h_new_sth->errstr; dbh->commit or croak dbh->errstr if $FS::UID::AutoCommit; ''; @@ -647,6 +670,23 @@ sub check { confess "FS::Record::check not implemented; supply one in subclass!"; } +sub _h_statement { + my( $self, $action ) = @_; + + my @fields = + grep defined($self->getfield($_)) && $self->getfield($_) ne "", + $self->fields + ; + my @values = map { _quote( $self->getfield($_), $self->table, $_) } @fields; + + "INSERT INTO h_". $self->table. " ( ". + join(', ', qw(history_date history_user history_action), @fields ). + ") VALUES (". + join(', ', time, dbh->quote(getotaker()), dbh->quote($action), @values). + ")" + ; +} + =item unique COLUMN Replaces COLUMN in record with a unique number. Called by the B<add> method @@ -1056,7 +1096,7 @@ sub reload_dbdef { =item dbdef -Returns the current database definition. See L<FS::dbdef>. +Returns the current database definition. See L<DBIx::DBSchema>. =cut @@ -1066,7 +1106,7 @@ sub dbdef { $dbdef; } This is an internal function used to construct SQL statements. It returns VALUE DBI-quoted (see L<DBI/"quote">) unless VALUE is a number and the column -type (see L<FS::dbdef_column>) does not end in `char' or `binary'. +type (see L<DBIx::DBSchema::Column>) does not end in `char' or `binary'. =cut @@ -1136,7 +1176,7 @@ The whole fields / hfields mess should be removed. The various WHERE clauses should be subroutined. -table string should be depriciated in favor of FS::dbdef_table. +table string should be depriciated in favor of DBIx::DBSchema::Table. No doubt we could benefit from a Tied hash. Documenting how exists / defined true maps to the database (and WHERE clauses) would also help. diff --git a/FS/FS/nas.pm b/FS/FS/nas.pm index cb0c1b901..58c6827ea 100644 --- a/FS/FS/nas.pm +++ b/FS/FS/nas.pm @@ -136,10 +136,12 @@ sub heartbeat { =head1 VERSION -$Id: nas.pm,v 1.5 2001-04-15 13:35:12 ivan Exp $ +$Id: nas.pm,v 1.6 2002-03-04 12:48:49 ivan Exp $ =head1 BUGS +heartbeat method uses SQL directly and doesn't update history tables. + =head1 SEE ALSO L<FS::Record>, schema.html from the base documentation. |