summaryrefslogtreecommitdiff
path: root/FS
diff options
context:
space:
mode:
authorivan <ivan>2002-03-04 12:48:49 +0000
committerivan <ivan>2002-03-04 12:48:49 +0000
commit239484572a9191100993bb1e85ffe8834689feb0 (patch)
tree94c61ae16e6507918272721acd58791129ba1f99 /FS
parentdac484e8356be5b235cacebe83059b7eb6588c13 (diff)
*** empty log message ***
Diffstat (limited to 'FS')
-rw-r--r--FS/FS/Record.pm54
-rw-r--r--FS/FS/nas.pm4
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.