cvsuser 02/07/12 14:06:58
Modified: P5EEx/Blue/P5EEx/Blue Repository.pm
Log:
did some work on store_rows() to allocate ID's automatically (still needs more work)
Revision Changes Path
1.17 +35 -6 p5ee/P5EEx/Blue/P5EEx/Blue/Repository.pm
Index: Repository.pm
===================================================================
RCS file: /cvs/public/p5ee/P5EEx/Blue/P5EEx/Blue/Repository.pm,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -w -r1.16 -r1.17
--- Repository.pm 18 Jun 2002 21:15:44 -0000 1.16
+++ Repository.pm 12 Jul 2002 21:06:58 -0000 1.17
@@ -1,6 +1,6 @@
#############################################################################
-## $Id: Repository.pm,v 1.16 2002/06/18 21:15:44 spadkins Exp $
+## $Id: Repository.pm,v 1.17 2002/07/12 21:06:58 spadkins Exp $
#############################################################################
package P5EEx::Blue::Repository;
@@ -1173,7 +1173,7 @@
# $ok = $rep->store_row ($table, \@cols, \@row, \@keycolidx, $update_first);
sub store_row {
my ($self, $table, $cols, $row, $keycolidx, $update_first) = @_;
- my ($nrows);
+ my ($nrows, $error);
$self->{context}->dbgprint(
"store_row($table,\n [",
@@ -1193,10 +1193,11 @@
}
else {
$nrows = $self->insert_row($table,$cols,$row);
- #print "store_row(): INSERT: ", $self->error(), "\n", $self->{sql}, "\n";
- if (!$nrows) {
+ $error = $self->error();
+ print "store_row(): INSERT: ", $self->error(), "\n", $self->{sql}, "\n";
+ if (!$nrows && $error =~ /duplicate/i) {
$nrows = $self->update_row($table,$cols,$row,$keycolidx);
- #print "store_row(): UPDATE: ", $self->error(), "\n", $self->{sql},
"\n";
+ print "store_row(): UPDATE: ", $self->error(), "\n", $self->{sql}, "\n";
}
}
$self->{numrows} = $nrows;
@@ -1243,7 +1244,35 @@
# $nrows = $rep->store_rows ($table, \@cols, \@rows, \@keycolidx, $update_first);
sub store_rows {
my ($self, $table, $cols, $rows, $keycolidx, $update_first) = @_;
- my ($row, $ok, $nrows);
+ my ($row, $ok, $nrows, $colnum, $column, $rownum, $tabledef, $value);
+ my ($id, @ids, $id_count);
+ $tabledef = $self->{table}{$table};
+ if ($tabledef->{set_defaults}) {
+ for ($colnum = 0; $colnum <= $#$cols; $colnum++) {
+ $column = $cols->[$colnum];
+ if ($tabledef->{prikey} && $tabledef->{prikey} eq $column &&
+ $tabledef->{column}{$column}{auto_id}) {
+ $id_count = 0;
+ for ($rownum = 0; $rownum <= $#$rows; $rownum++) {
+ $id_count++ if (!$rows->[$rownum][$colnum]);
+ }
+ @ids = $self->get_new_ids($table, $id_count);
+ for ($rownum = 0; $rownum <= $#$rows; $rownum++) {
+ if (!$rows->[$rownum][$colnum]) {
+ $rows->[$rownum][$colnum] = shift @ids;
+ }
+ }
+ }
+ elsif (defined $tabledef->{column}{$column}{default}) {
+ $value = $tabledef->{column}{$column}{default};
+ for ($rownum = 0; $rownum <= $#$rows; $rownum++) {
+ if (!defined $rows->[$rownum][$colnum]) {
+ $rows->[$rownum][$colnum] = $value;
+ }
+ }
+ }
+ }
+ }
$nrows = 0;
foreach $row (@$rows) {
$ok = $self->store_row ($table, $cols, $row, $keycolidx, $update_first);