<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">I've been throwing away some old code and replacing it with DeploymentHandler. All my old hand-written SQL files are being replaced by Perl which uses DBIC to populate the database.<div><br></div><div>One of those functions to populate the database didn't work right. Eventually, I boiled it down to an standalone test, which still fails in a way I didn't expect. I'm not sure if I'm doing something wrong, or if I've missed something in the docs, or if there's a lurking bug.</div><div><br></div><div>What I'm seeing is that if I call populate() with a data structure where the first item does not reference other tables, none of the other items in the data structure will create items in referenced tables. If the first item does refer to other tables, all other references will get created as I expected.</div><div><br></div><div>My sample has two simple tables:</div><div><br></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div><font face="Courier New">package TestDb::Schema::Result::Artist;</font></div></div><div><div><font face="Courier New"><br></font></div></div><div><div><font face="Courier New">use Moose;</font></div></div><div><div><font face="Courier New">use MooseX::NonMoose;</font></div></div><div><div><font face="Courier New">use MooseX::MarkAsMethods autoclean => 1;</font></div></div><div><div><font face="Courier New">extends 'DBIx::Class::Core';</font></div></div><div><div><font face="Courier New"><br></font></div></div><div><div><font face="Courier New">__PACKAGE__->table ('artist');</font></div></div><div><div><font face="Courier New"><br></font></div></div><div><div><font face="Courier New">__PACKAGE__->add_columns (</font></div></div><div><div><font face="Courier New"> id => {</font></div></div><div><div><font face="Courier New"> data_type => 'int',</font></div></div><div><div><font face="Courier New"> is_auto_increment => 1,</font></div></div><div><div><font face="Courier New"> },</font></div></div><div><div><font face="Courier New"> name => {</font></div></div><div><div><font face="Courier New"> data_type => 'varchar',</font></div></div><div><div><font face="Courier New"> },</font></div></div><div><div><font face="Courier New">);</font></div></div><div><div><font face="Courier New"><br></font></div></div><div><div><font face="Courier New">__PACKAGE__->set_primary_key ('id');</font></div></div><div><div><font face="Courier New"><br></font></div></div><div><div><font face="Courier New">__PACKAGE__->has_many (cds => 'TestDb::Schema::Result::CD', 'artist_id');</font></div></div><div><div><font face="Courier New"><br></font></div></div><div><div><font face="Courier New">__PACKAGE__->meta->make_immutable;</font></div></div><div><div><font face="Courier New"><br></font></div></div><div><div><font face="Courier New">1;</font></div></div></blockquote><div><br></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div><font face="Courier New">package TestDb::Schema::Result::CD;</font></div></div><div><div><font face="Courier New"> </font></div></div><div><div><font face="Courier New">use Moose;</font></div></div><div><div><font face="Courier New">use MooseX::NonMoose;</font></div></div><div><div><font face="Courier New">use MooseX::MarkAsMethods autoclean => 1;</font></div></div><div><div><font face="Courier New">extends 'DBIx::Class::Core';</font></div></div><div><div><font face="Courier New"> </font></div></div><div><div><font face="Courier New">__PACKAGE__->table ('cd');</font></div></div><div><div><font face="Courier New"> </font></div></div><div><div><font face="Courier New">__PACKAGE__->add_columns ( </font></div></div><div><div><font face="Courier New"> id => {</font></div></div><div><div><font face="Courier New"> data_type => 'int',</font></div></div><div><div><font face="Courier New"> is_auto_increment => 1,</font></div></div><div><div><font face="Courier New"> },</font></div></div><div><div><font face="Courier New"> title => {</font></div></div><div><div><font face="Courier New"> data_type => 'varchar',</font></div></div><div><div><font face="Courier New"> },</font></div></div><div><div><font face="Courier New"> artist_id => {</font></div></div><div><div><font face="Courier New"> data_type => 'int',</font></div></div><div><div><font face="Courier New"> },</font></div></div><div><div><font face="Courier New">);</font></div></div><div><div><font face="Courier New"> </font></div></div><div><div><font face="Courier New">__PACKAGE__->set_primary_key ('id');</font></div></div><div><div><font face="Courier New"> </font></div></div><div><div><font face="Courier New">__PACKAGE__->belongs_to (artist => 'TestDb::Schema::Result::Artist', 'artist_id');</font></div></div><div><div><font face="Courier New"><br></font></div></div><div><div><font face="Courier New">__PACKAGE__->meta->make_immutable;</font></div></div><div><div><font face="Courier New"><br></font></div></div><div><div><font face="Courier New">1;</font></div></div></blockquote><div><div><br></div></div><div>Simple as I could make it.</div><div><br></div><div>When I call populate with data like this, everything works:</div><div><br></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div><font face="Courier New">$schema->resultset('Artist')->populate([</font></div></div><div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space:pre">        </span>{</font></div></div><div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space:pre">                </span>name => 'The Beatles',</font></div></div><div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space:pre">                </span>cds => [</font></div></div><div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space:pre">                        </span>{ title => "Sgt. Pepper's Lonely Hearts Club Band" },</font></div></div><div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space:pre">                        </span>{ title => "Yellow Submarine" },</font></div></div><div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space:pre">                        </span>{ title => "Rubber Soul" },</font></div></div><div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space:pre">                        </span>{ title => "Meet the Beatles" },</font></div></div><div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space:pre">                </span>],</font></div></div><div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space:pre">        </span>},</font></div></div><div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space:pre">        </span>{</font></div></div><div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space:pre">                </span>name => 'ABBA',</font></div></div><div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space:pre">                </span>cds => [</font></div></div><div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space:pre">                        </span>{ title => 'ABBA Gold' },</font></div></div><div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space:pre">                        </span>{ title => 'More ABBA Gold '},</font></div></div><div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space:pre">                </span>],</font></div></div><div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space:pre">        </span>},</font></div></div><div><div><font face="Courier New"><span class="Apple-tab-span" style="white-space:pre">        </span>{ name => 'Anonymous' },</font></div></div><div><div><font face="Courier New">]);</font></div></div></blockquote><div><br></div><div>This creates an artist called "The Beatles", and CDs called "Sgt. Pepper's Lonely Hearts Club Band", "Yellow Submarine", "Rubber Soul", and "Meet the Beatles", all referring to the right artist_id for the newly-created "The Beatles" artist. An artist called ABBA is created, as are both of those greatest hits CDs. An an "Anonymous" artist is created with no CDs.</div><div><br></div><div>Perfect!</div><div><br></div><div>But, if I move the {name => 'Anonymous}, first, before any of the others, the behavior is quite different. None of the CDs get created, just the artists. There's no errors, no complaints, just no entries in the related tables.</div><div><br></div><div>Not what I expected.</div><div><br></div><div>Can anyone shed some light on this? Any thoughts are appreciated!</div><div><br></div><div>I have full working code if someone wants me to put a tar file somewhere.</div><div><br></div></body></html>