Yesterday I noticed Strange Things while working on a Catalyst application.
I've managed to boil it down to a reasonably simple test-app (I can supply the tarball if required, but I prefer not to post attachments to mailing lists if they aren't required). I have the following schema: ---- cut here ---- -- we have authentication CREATE TABLE authentication ( authentication_id SERIAL not null primary key, username text not null, password text not null, authenticated boolean NOT NULL default False, UNIQUE (username) ); -- we have foo CREATE TABLE foo ( authentication_id SERIAL not null primary key, username text not null, password text not null, authenticated boolean NOT NULL default False, UNIQUE (username) ); ---- cut here ---- So a simple authentication table and foo, a copy of the authentication table. I also have a couple of test scripts, model_ParleyTest-Authentication.t and model_ParleyTest-Foo.t. Apart from the table the reference, are identical: ---- cut here ---- # BEGIN TRANSACTION AuthTest->model('ParleyTest')->table('authentication')->storage->txn_begin; # create new record my $now = scalar(localtime); my $new_auth = AuthTest->model('ParleyTest')->table('authentication')->create( { username => $now, password => 'pwd', } ); # correct class returned isa_ok($new_auth, 'AuthTest::Model::ParleyTest::Authentication'); diag Dumper($new_auth->{_column_data}); # new object has values we created it with is($new_auth->username(), $now, 'username set'); is($new_auth->password(), 'pwd', 'password set'); # now the kicker ... doe we have an id? ok(defined($new_auth->authentication_id()), 'authentication_id set'); # ROLLBACK TRANSACTION AuthTest->model('ParleyTest')->table('authentication')->storage->txn_rollback; ---- cut here ---- The big problem I'm having is for 'authentication' the PK column IS NOT returned in $new_auth, while in the case of 'foo' it is ---- cut here ---- [EMAIL PROTECTED] AuthTest $ prove --lib --verbose t/model_ParleyTest-[AF]*t t/model_ParleyTest-Authentication....1..6 ok 1 - use Catalyst::Test; ok 2 - use AuthTest::Model::ParleyTest::Authentication; ok 3 - The object isa AuthTest::Model::ParleyTest::Authentication # $VAR1 = { # 'password' => 'pwd', # 'username' => 'Fri Apr 21 11:01:00 2006' # }; ok 4 - username set ok 5 - password set not ok 6 - authentication_id set # Failed test 'authentication_id set' # in t/model_ParleyTest-Authentication.t at line 31. # Looks like you failed 1 test of 6. dubious Test returned status 1 (wstat 256, 0x100) DIED. FAILED test 6 Failed 1/6 tests, 83.33% okay t/model_ParleyTest-Foo...............1..6 ok 1 - use Catalyst::Test; ok 2 - use AuthTest::Model::ParleyTest::Foo; ok 3 - The object isa AuthTest::Model::ParleyTest::Foo # $VAR1 = { # 'authentication_id' => '3', # 'password' => 'pwd', # 'username' => 'Fri Apr 21 11:01:02 2006' # }; ok 4 - username set ok 5 - password set ok 6 - authentication_id set ok Failed Test Stat Wstat Total Fail Failed List of Failed ------------------------------------------------------------------------------- t/model_ParleyTest-Authentication 1 256 6 1 16.67% 6 Failed 1/2 test scripts, 50.00% okay. 1/12 subtests failed, 91.67% okay. ---- cut here ---- Same table structure, same create statement, different results returned. The lesser issue ... if I test the values of $new_auth->some_other_table_column() that does exist in the table, but wasn't one of the columns specified, I get and undefined value - even for columns with a default value. I can understand _columns_data potentially not holding this, but surely if I create a new object I should have access to all the fields in the new record and not just the ones I specified during creating (and in most cases the PK columns too). This is really confusing the hell out of me! Chisel -- Chisel Wright e: [EMAIL PROTECTED] w: http://www.herlpacker.co.uk/ This is not an automated signature. I type this in to the bottom of every message. _______________________________________________ List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class Wiki: http://dbix-class.shadowcatsystems.co.uk/ IRC: irc.perl.org#dbix-class SVN: http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/