Author: REHSACK
Date: Mon Jun 14 06:37:52 2010
New Revision: 14143
Modified:
dbi/trunk/lib/DBD/DBM.pm
Log:
Fix bug (UPDATE on INSERT statement)
Modified: dbi/trunk/lib/DBD/DBM.pm
==============================================================================
--- dbi/trunk/lib/DBD/DBM.pm (original)
+++ dbi/trunk/lib/DBD/DBM.pm Mon Jun 14 06:37:52 2010
@@ -528,10 +528,10 @@
return wantarray ? @row : \...@row;
}
-# you must define push_row
-# it is called on inserts and updates
+# you must define push_row except insert_new_row and update_specific_row is
defined
+# it is called on inserts and updates as primitive
#
-sub push_row ($$$)
+sub insert_new_row ($$$)
{
my ( $self, $data, $row_aryref ) = @_;
my $meta = $self->{meta};
@@ -539,7 +539,11 @@
my $nitems = scalar(@{$row_aryref});
$ncols == $nitems or
croak "You tried to insert $nitems, but table is created with $ncols
columns";
+
my $key = shift @$row_aryref;
+ exists($meta->{hash}->{$key}) and
+ croak "Row with PK '$key' already exists";
+
if ( $meta->{dbm_mldbm} )
{
$meta->{hash}->{$key} = $row_aryref;
@@ -1357,22 +1361,6 @@
See the entire section on L<Table locking and flock()> for gotchas and
warnings about the use of flock().
-=head1 BUGS AND LIMITATIONS
-
-This modules uses hash interfaces of two column file databases. While
-none of supported SQL engines have a support for indices, following
-statements really do the same (even if they mean something completely
-different):
-
- $sth->do( "insert into foo values (1, 'hello')" );
-
- # this statement does ...
- $sth->do( "update foo set v='world' where k=1" );
- # ... the same as this statement
- $sth->do( "insert into foo values (1, 'world')" );
-
-This is considered as a bug and might change in a future release.
-
=head1 GETTING HELP, MAKING SUGGESTIONS, AND REPORTING BUGS
If you need help installing or using DBD::DBM, please write to the DBI