[Bast-commits] r5574 - in DBIx-Class/0.08/branches/subquery: .
lib/DBIx/Class t
robkinyon at dev.catalyst.perl.org
robkinyon at dev.catalyst.perl.org
Fri Feb 20 04:54:02 GMT 2009
Author: robkinyon
Date: 2009-02-20 04:54:00 +0000 (Fri, 20 Feb 2009)
New Revision: 5574
Modified:
DBIx-Class/0.08/branches/subquery/
DBIx-Class/0.08/branches/subquery/Changes
DBIx-Class/0.08/branches/subquery/Makefile.PL
DBIx-Class/0.08/branches/subquery/lib/DBIx/Class/ResultSet.pm
DBIx-Class/0.08/branches/subquery/lib/DBIx/Class/ResultSource.pm
DBIx-Class/0.08/branches/subquery/lib/DBIx/Class/Row.pm
DBIx-Class/0.08/branches/subquery/t/96multi_create.t
DBIx-Class/0.08/branches/subquery/t/96multi_create_new.t
Log:
r5564 at rkinyon-lt-osx (orig r5563): robkinyon | 2009-02-19 23:41:44 -0500
Fixed syntax error
r5567 at rkinyon-lt-osx (orig r5566): matthewt | 2009-02-19 23:42:42 -0500
r27879 at agaton (orig r5540): robkinyon | 2009-02-20 03:30:17 +0000
fixed a few more test situations
r5568 at rkinyon-lt-osx (orig r5567): matthewt | 2009-02-19 23:42:54 -0500
r27883 at agaton (orig r5544): matthewt | 2009-02-20 04:09:04 +0000
prevent objects implicitly passed via new_related having insertion cascaded to them unless we have to
r5569 at rkinyon-lt-osx (orig r5568): matthewt | 2009-02-19 23:43:04 -0500
r27884 at agaton (orig r5545): matthewt | 2009-02-20 04:26:22 +0000
verify non-staged insertion as well
r5570 at rkinyon-lt-osx (orig r5569): matthewt | 2009-02-19 23:43:22 -0500
r5573 at rkinyon-lt-osx (orig r5572): matthewt | 2009-02-19 23:50:50 -0500
changes update for mc fixes
Property changes on: DBIx-Class/0.08/branches/subquery
___________________________________________________________________
Name: svk:merge
- 168d5346-440b-0410-b799-f706be625ff1:/DBIx-Class-current:2207
462d4d0c-b505-0410-bf8e-ce8f877b3390:/local/bast/DBIx-Class:3159
4d5fae46-8e6a-4e08-abee-817e9fb894a2:/local/bast/DBIx-Class/0.08/branches/resultsetcolumn_custom_columns:5160
4d5fae46-8e6a-4e08-abee-817e9fb894a2:/local/bast/DBIx-Class/0.08/branches/sqla_1.50_compat:5414
4d5fae46-8e6a-4e08-abee-817e9fb894a2:/local/bast/DBIx-Class/0.08/trunk:5635
9c88509d-e914-0410-b01c-b9530614cbfe:/local/DBIx-Class:32260
9c88509d-e914-0410-b01c-b9530614cbfe:/local/DBIx-Class-CDBICompat:54993
9c88509d-e914-0410-b01c-b9530614cbfe:/vendor/DBIx-Class:31122
ab17426e-7cd3-4704-a2a2-80b7c0a611bb:/local/dbic_trunk:10772
bd5ac9a7-f185-4d95-9186-dbb8b392a572:/local/os/bast/DBIx-Class/0.08/trunk:2798
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/belongs_to_null_col_fix:5244
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/cdbicompat_integration:4160
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/complex_join_rels:4589
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/file_column:3920
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/multi_stuff:5538
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/on_disconnect_do:3694
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/oracle_sequence:4173
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/parser_fk_index:4485
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/replication_dedux:4600
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/savepoints:4223
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/sqla_1.50_compat:5321
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/storage-ms-access:4142
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/versioned_enhancements:4125
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/versioning:4578
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/trunk:5560
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-C3:318
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-current:2222
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-joins:173
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-resultset:570
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/datetime:1716
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/find_compat:1855
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/find_unique_query_fixes:2142
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/inflate:1988
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/many_to_many:2025
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/re_refactor_bugfix:1944
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/reorganize_tests:1827
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/resultset-new-refactor:1766
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/resultset_2_electric_boogaloo:2175
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/resultset_cleanup:2102
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/sqlt_tests_refactor:2043
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/trunk/DBIx-Class:3606
fe160bb6-dc1c-0410-9f2b-d64a711b54a5:/local/DBIC-trunk-0.08:10510
+ 168d5346-440b-0410-b799-f706be625ff1:/DBIx-Class-current:2207
462d4d0c-b505-0410-bf8e-ce8f877b3390:/local/bast/DBIx-Class:3159
4d5fae46-8e6a-4e08-abee-817e9fb894a2:/local/bast/DBIx-Class/0.08/branches/resultsetcolumn_custom_columns:5160
4d5fae46-8e6a-4e08-abee-817e9fb894a2:/local/bast/DBIx-Class/0.08/branches/sqla_1.50_compat:5414
4d5fae46-8e6a-4e08-abee-817e9fb894a2:/local/bast/DBIx-Class/0.08/trunk:5635
9c88509d-e914-0410-b01c-b9530614cbfe:/local/DBIx-Class:32260
9c88509d-e914-0410-b01c-b9530614cbfe:/local/DBIx-Class-CDBICompat:54993
9c88509d-e914-0410-b01c-b9530614cbfe:/vendor/DBIx-Class:31122
ab17426e-7cd3-4704-a2a2-80b7c0a611bb:/local/dbic_trunk:10772
bd5ac9a7-f185-4d95-9186-dbb8b392a572:/local/os/bast/DBIx-Class/0.08/trunk:2798
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/belongs_to_null_col_fix:5244
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/cdbicompat_integration:4160
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/complex_join_rels:4589
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/file_column:3920
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/multi_stuff:5565
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/on_disconnect_do:3694
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/oracle_sequence:4173
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/parser_fk_index:4485
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/replication_dedux:4600
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/savepoints:4223
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/sqla_1.50_compat:5321
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/storage-ms-access:4142
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/versioned_enhancements:4125
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/versioning:4578
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/trunk:5572
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-C3:318
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-current:2222
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-joins:173
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-resultset:570
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/datetime:1716
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/find_compat:1855
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/find_unique_query_fixes:2142
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/inflate:1988
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/many_to_many:2025
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/re_refactor_bugfix:1944
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/reorganize_tests:1827
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/resultset-new-refactor:1766
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/resultset_2_electric_boogaloo:2175
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/resultset_cleanup:2102
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/sqlt_tests_refactor:2043
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/trunk/DBIx-Class:3606
fe160bb6-dc1c-0410-9f2b-d64a711b54a5:/local/DBIC-trunk-0.08:10510
Modified: DBIx-Class/0.08/branches/subquery/Changes
===================================================================
--- DBIx-Class/0.08/branches/subquery/Changes 2009-02-20 04:53:34 UTC (rev 5573)
+++ DBIx-Class/0.08/branches/subquery/Changes 2009-02-20 04:54:00 UTC (rev 5574)
@@ -1,4 +1,8 @@
Revision history for DBIx::Class
+ - Add DBIC_MULTICREATE_DEBUG env var (undocumented, quasi-internal)
+ - Fix up multi-create to:
+ - correctly propagate columns loaded during multi-insert of rels
+ - not try and insert things tagged on via new_related unless required
- Possible to set locale in IC::DateTime extra => {} config
- Calling the accessor of a belongs_to when the foreign_key
was NULL and the row was not stored would unexpectedly fail (groditi)
Modified: DBIx-Class/0.08/branches/subquery/Makefile.PL
===================================================================
--- DBIx-Class/0.08/branches/subquery/Makefile.PL 2009-02-20 04:53:34 UTC (rev 5573)
+++ DBIx-Class/0.08/branches/subquery/Makefile.PL 2009-02-20 04:54:00 UTC (rev 5574)
@@ -127,7 +127,7 @@
alarm 0;
};
my $sig = $? & 127;
- if ($@ || $sig == POSIX::SIGSEGV) {
+ if ($@ || $sig == POSIX::SIGSEGV()) {
warn (<<EOE);
############################### WARNING #################################
Modified: DBIx-Class/0.08/branches/subquery/lib/DBIx/Class/ResultSet.pm
===================================================================
--- DBIx-Class/0.08/branches/subquery/lib/DBIx/Class/ResultSet.pm 2009-02-20 04:53:34 UTC (rev 5573)
+++ DBIx-Class/0.08/branches/subquery/lib/DBIx/Class/ResultSet.pm 2009-02-20 04:54:00 UTC (rev 5574)
@@ -1701,6 +1701,7 @@
&& $self->{cond} eq $DBIx::Class::ResultSource::UNRESOLVABLE_CONDITION
) {
%new = %{$self->{attrs}{related_objects}};
+ $new{-from_resultset} = [ keys %new ] if keys %new;
} else {
$self->throw_exception(
"Can't abstract implicit construct, condition not a hash"
Modified: DBIx-Class/0.08/branches/subquery/lib/DBIx/Class/ResultSource.pm
===================================================================
--- DBIx-Class/0.08/branches/subquery/lib/DBIx/Class/ResultSource.pm 2009-02-20 04:53:34 UTC (rev 5573)
+++ DBIx-Class/0.08/branches/subquery/lib/DBIx/Class/ResultSource.pm 2009-02-20 04:54:00 UTC (rev 5574)
@@ -1014,9 +1014,6 @@
$ret->{$otherrel} = $otherrel_info;
}
}
-use Data::Dumper;
-#warn "return for reverse_relationship_info called on ".$self->name." for $rel:\n";
-#warn Dumper($ret);
return $ret;
}
Modified: DBIx-Class/0.08/branches/subquery/lib/DBIx/Class/Row.pm
===================================================================
--- DBIx-Class/0.08/branches/subquery/lib/DBIx/Class/Row.pm 2009-02-20 04:53:34 UTC (rev 5573)
+++ DBIx-Class/0.08/branches/subquery/lib/DBIx/Class/Row.pm 2009-02-20 04:54:00 UTC (rev 5574)
@@ -131,6 +131,10 @@
$new->result_source($source);
}
+ if (my $related = delete $attrs->{-from_resultset}) {
+ @{$new->{_ignore_at_insert}={}}{@$related} = ();
+ }
+
if ($attrs) {
$new->throw_exception("attrs must be a hashref")
unless ref($attrs) eq 'HASH';
@@ -156,7 +160,7 @@
$new->set_from_related($key, $rel_obj);
} else {
$new->{_rel_in_storage} = 0;
- MULTICREATE_DEBUG and warn "MC $new: uninserted $key $rel_obj\n";
+ MULTICREATE_DEBUG and warn "MC $new uninserted $key $rel_obj\n";
}
$related->{$key} = $rel_obj;
@@ -178,7 +182,7 @@
} else {
$new->{_rel_in_storage} = 0;
MULTICREATE_DEBUG and
- warn "MC $new: uninserted $key $rel_obj ($idx of $total)\n";
+ warn "MC $new uninserted $key $rel_obj (${\($idx+1)} of $total)\n";
}
$new->set_from_related($key, $rel_obj) if $rel_obj->in_storage;
push(@objects, $rel_obj);
@@ -195,7 +199,7 @@
}
unless ($rel_obj->in_storage) {
$new->{_rel_in_storage} = 0;
- MULTICREATE_DEBUG and warn "MC $new: uninserted $key $rel_obj";
+ MULTICREATE_DEBUG and warn "MC $new uninserted $key $rel_obj";
}
$inflated->{$key} = $rel_obj;
next;
@@ -288,7 +292,10 @@
}
}
- MULTICREATE_DEBUG and warn "MC $self inserting self\n";
+ MULTICREATE_DEBUG and do {
+ no warnings 'uninitialized';
+ warn "MC $self inserting (".join(', ', $self->get_columns).")\n";
+ };
my $updated_cols = $source->storage->insert($source, { $self->get_columns });
foreach my $col (keys %$updated_cols) {
$self->store_column($col, $updated_cols->{$col});
@@ -319,7 +326,7 @@
$self->{related_resultsets} = {};
if(!$self->{_rel_in_storage}) {
- ## Now do the has_many rels, that need $selfs ID.
+ ## Now do the relationships that need our ID (has_many etc.)
foreach my $relname (keys %related_stuff) {
my $rel_obj = $related_stuff{$relname};
my @cands;
@@ -335,10 +342,14 @@
$obj->set_from_related($_, $self) for keys %$reverse;
my $them = { %{$obj->{_relationship_data} || {} }, $obj->get_inflated_columns };
if ($self->__their_pk_needs_us($relname, $them)) {
- MULTICREATE_DEBUG and warn "MC $self re-creating $relname $obj";
- my $re = $self->find_or_create_related($relname, $them);
- $obj->{_column_data} = $re->{_column_data};
- MULTICREATE_DEBUG and warn "MC $self new $relname $obj";
+ if (exists $self->{_ignore_at_insert}{$relname}) {
+ MULTICREATE_DEBUG and warn "MC $self skipping post-insert on $relname";
+ } else {
+ MULTICREATE_DEBUG and warn "MC $self re-creating $relname $obj";
+ my $re = $self->find_or_create_related($relname, $them);
+ %{$obj} = %{$re};
+ MULTICREATE_DEBUG and warn "MC $self new $relname $obj";
+ }
} else {
MULTICREATE_DEBUG and warn "MC $self post-inserting $obj";
$obj->insert();
@@ -346,6 +357,7 @@
}
}
}
+ delete $self->{_ignore_at_insert};
$rollback_guard->commit;
}
Modified: DBIx-Class/0.08/branches/subquery/t/96multi_create.t
===================================================================
--- DBIx-Class/0.08/branches/subquery/t/96multi_create.t 2009-02-20 04:53:34 UTC (rev 5573)
+++ DBIx-Class/0.08/branches/subquery/t/96multi_create.t 2009-02-20 04:54:00 UTC (rev 5574)
@@ -6,7 +6,7 @@
use lib qw(t/lib);
use DBICTest;
-plan tests => 85;
+plan tests => 77;
my $schema = DBICTest->init_schema();
@@ -513,9 +513,6 @@
};
diag $@ if $@;
-TODO: {
-local $TODO = 'Next 2 evals are NOT supposed to work, jnaps code will be torn to bits in another branch';
-#SPECIAL_CASE
eval {
my $kurt_cobain = { name => 'Kurt Cobain' };
@@ -536,7 +533,8 @@
};
diag $@ if $@;
-#SPECIAL_CASE2
+=pod
+# This test case has been moved to t/96multi_create/cd_single.t
eval {
my $pink_floyd = { name => 'Pink Floyd' };
@@ -552,10 +550,11 @@
is($a->cds && $a->cds->first->title, 'The Wall', 'CD insertion ok');
};
diag $@ if $@;
-}
+=cut
-
diag '* Create foreign key col obj including PK (See test 20 in 66relationships.t)';
+## Create foreign key col obj including PK
+## See test 20 in 66relationships.t
eval {
my $new_cd_hashref = {
cdid => 27,
Modified: DBIx-Class/0.08/branches/subquery/t/96multi_create_new.t
===================================================================
--- DBIx-Class/0.08/branches/subquery/t/96multi_create_new.t 2009-02-20 04:53:34 UTC (rev 5573)
+++ DBIx-Class/0.08/branches/subquery/t/96multi_create_new.t 2009-02-20 04:54:00 UTC (rev 5574)
@@ -6,7 +6,7 @@
use lib qw(t/lib);
use DBICTest;
-plan 'no_plan';
+plan tests => 9;
my $schema = DBICTest->init_schema();
@@ -22,28 +22,42 @@
# to new(). All other objects should be insert()able afterwards too.
-my $new_artist = $schema->resultset("Artist")->new_result({ 'name' => 'Depeche Mode' });
-my $new_related_cd = $new_artist->new_related('cds', { 'title' => 'Leave in Silence', 'year' => 1982});
-eval {
- $new_artist->insert;
- $new_related_cd->insert;
-};
-is ($@, '', 'Staged insertion successful');
-ok($new_artist->in_storage, 'artist inserted');
-ok($new_related_cd->in_storage, 'new_related_cd inserted');
+{
+ my $new_artist = $schema->resultset("Artist")->new_result({ 'name' => 'Depeche Mode' });
+ my $new_related_cd = $new_artist->new_related('cds', { 'title' => 'Leave in Silence', 'year' => 1982});
+ eval {
+ $new_artist->insert;
+ $new_related_cd->insert;
+ };
+ is ($@, '', 'Staged insertion successful');
+ ok($new_artist->in_storage, 'artist inserted');
+ ok($new_related_cd->in_storage, 'new_related_cd inserted');
+}
+{
+ my $new_artist = $schema->resultset("Artist")->new_result({ 'name' => 'Depeche Mode' });
+ my $new_related_cd = $new_artist->new_related('cds', { 'title' => 'Leave in Silence', 'year' => 1982});
+ eval {
+ $new_related_cd->insert;
+ };
+ is ($@, '', 'CD insertion survives by inserting artist');
+ ok($new_artist->in_storage, 'artist inserted');
+ ok($new_related_cd->in_storage, 'new_related_cd inserted');
+}
-my $new_cd = $schema->resultset("CD")->new_result({});
-my $new_related_artist = $new_cd->new_related('artist', { 'name' => 'Marillion',});
-lives_ok (
- sub {
- $new_related_artist->insert;
- $new_cd->title( 'Misplaced Childhood' );
- $new_cd->year ( 1985 );
- $new_cd->artist( $new_related_artist ); # For exact backward compatibility
- $new_cd->insert;
- },
- 'Reversed staged insertion successful'
-);
-ok($new_related_artist->in_storage, 'related artist inserted');
-ok($new_cd->in_storage, 'cd inserted');
+{
+ my $new_cd = $schema->resultset("CD")->new_result({});
+ my $new_related_artist = $new_cd->new_related('artist', { 'name' => 'Marillion',});
+ lives_ok (
+ sub {
+ $new_related_artist->insert;
+ $new_cd->title( 'Misplaced Childhood' );
+ $new_cd->year ( 1985 );
+ $new_cd->artist( $new_related_artist ); # For exact backward compatibility
+ $new_cd->insert;
+ },
+ 'Reversed staged insertion successful'
+ );
+ ok($new_related_artist->in_storage, 'related artist inserted');
+ ok($new_cd->in_storage, 'cd inserted');
+}
More information about the Bast-commits
mailing list