From: Matt S Trout Date: Wed, 22 Nov 2006 05:22:32 +0000 (+0000) Subject: moved tests to compose_namespace instead of compose_connection, marked compose_connec... X-Git-Tag: v0.08010~150^2~130 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=c216324aa4b0f79ba056fbe74adbd735421e378a;p=dbsrgits%2FDBIx-Class.git moved tests to compose_namespace instead of compose_connection, marked compose_connection as deprecated, undocumented DB.pm --- diff --git a/Changes b/Changes index 913819d..2ad05fb 100644 --- a/Changes +++ b/Changes @@ -1,5 +1,8 @@ Revision history for DBIx::Class + - mark DB.pm and compose_connection as deprecated + - switch tests to compose_namespace + 0.07999_01 2006-10-05 21:00:00 - add connect_info option "disable_statement_caching" - create insert_bulk using execute_array, populate uses it diff --git a/lib/DBIx/Class/DB.pm b/lib/DBIx/Class/DB.pm index 007c82a..e002377 100644 --- a/lib/DBIx/Class/DB.pm +++ b/lib/DBIx/Class/DB.pm @@ -9,6 +9,10 @@ use DBIx::Class::Storage::DBI; use DBIx::Class::ClassResolver::PassThrough; use DBI; +unless ($INC{"DBIx/Class/CDBICompat.pm"}) { + warn "IMPORTANT: DBIx::Class::DB is DEPRECATED AND *WILL* BE REMOVED. DO NOT USE.\n"; +} + __PACKAGE__->load_components(qw/ResultSetProxy/); { @@ -23,29 +27,15 @@ sub storage { shift->schema_instance(@_)->storage; } DBIx::Class::DB - (DEPRECATED) classdata schema component -=head1 SYNOPSIS - - package MyDB; - - use base qw/DBIx::Class/; - __PACKAGE__->load_components('DB'); - - __PACKAGE__->connection('dbi:...', 'user', 'pass', \%attrs); - - package MyDB::MyTable; - - use base qw/MyDB/; - __PACKAGE__->load_components('Core'); # just load this in MyDB if it will - # always be there - - ... - =head1 DESCRIPTION This class is designed to support the Class::DBI connection-as-classdata style for DBIx::Class. You are *strongly* recommended to use a DBIx::Class::Schema instead; DBIx::Class::DB will not undergo new development and will be moved -to being a CDBICompat-only component before 1.0. +to being a CDBICompat-only component before 1.0. In order to discourage further +use, documentation has been removed as of 0.08000 + +=begin HIDE_BECAUSE_THIS_CLASS_IS_DEPRECATED =head1 METHODS @@ -177,6 +167,8 @@ Alias for L Alias for L +=end HIDE_BECAUSE_THIS_CLASS_IS_DEPRECATED + =head1 AUTHORS Matt S. Trout diff --git a/lib/DBIx/Class/Schema.pm b/lib/DBIx/Class/Schema.pm index cdb585c..77bd865 100644 --- a/lib/DBIx/Class/Schema.pm +++ b/lib/DBIx/Class/Schema.pm @@ -447,7 +447,7 @@ sub load_namespaces { return; } -=head2 compose_connection +=head2 compose_connection (DEPRECATED) =over 4 @@ -457,6 +457,12 @@ sub load_namespaces { =back +DEPRECATED. You probably wanted compose_namespace. + +Actually, you probably just wanted to call connect. + +=for hidden due to deprecation + Calls L to the target namespace, calls L with @db_info on the new schema, then injects the L component and a @@ -471,43 +477,50 @@ more information. =cut -sub compose_connection { - my ($self, $target, @info) = @_; - my $base = 'DBIx::Class::ResultSetProxy'; - eval "require ${base};"; - $self->throw_exception - ("No arguments to load_classes and couldn't load ${base} ($@)") - if $@; - - if ($self eq $target) { - # Pathological case, largely caused by the docs on early C::M::DBIC::Plain - foreach my $moniker ($self->sources) { - my $source = $self->source($moniker); +{ + my $warn; + + sub compose_connection { + my ($self, $target, @info) = @_; + + warn "compose_connection deprecated as of 0.08000" unless $warn++; + + my $base = 'DBIx::Class::ResultSetProxy'; + eval "require ${base};"; + $self->throw_exception + ("No arguments to load_classes and couldn't load ${base} ($@)") + if $@; + + if ($self eq $target) { + # Pathological case, largely caused by the docs on early C::M::DBIC::Plain + foreach my $moniker ($self->sources) { + my $source = $self->source($moniker); + my $class = $source->result_class; + $self->inject_base($class, $base); + $class->mk_classdata(resultset_instance => $source->resultset); + $class->mk_classdata(class_resolver => $self); + } + $self->connection(@info); + return $self; + } + + my $schema = $self->compose_namespace($target, $base); + { + no strict 'refs'; + *{"${target}::schema"} = sub { $schema }; + } + + $schema->connection(@info); + foreach my $moniker ($schema->sources) { + my $source = $schema->source($moniker); my $class = $source->result_class; - $self->inject_base($class, $base); + #warn "$moniker $class $source ".$source->storage; + $class->mk_classdata(result_source_instance => $source); $class->mk_classdata(resultset_instance => $source->resultset); - $class->mk_classdata(class_resolver => $self); + $class->mk_classdata(class_resolver => $schema); } - $self->connection(@info); - return $self; + return $schema; } - - my $schema = $self->compose_namespace($target, $base); - { - no strict 'refs'; - *{"${target}::schema"} = sub { $schema }; - } - - $schema->connection(@info); - foreach my $moniker ($schema->sources) { - my $source = $schema->source($moniker); - my $class = $source->result_class; - #warn "$moniker $class $source ".$source->storage; - $class->mk_classdata(result_source_instance => $source); - $class->mk_classdata(resultset_instance => $source->resultset); - $class->mk_classdata(class_resolver => $schema); - } - return $schema; } =head2 compose_namespace diff --git a/t/19quotes.t b/t/19quotes.t index 303f297..646131b 100644 --- a/t/19quotes.t +++ b/t/19quotes.t @@ -14,44 +14,44 @@ BEGIN { use lib qw(t/lib); use_ok('DBICTest'); -DBICTest->init_schema(); +my $schema = DBICTest->init_schema(); -my $orig_debugcb = DBICTest->schema->storage->debugcb; -my $orig_debug = DBICTest->schema->storage->debug; +my $orig_debugcb = $schema->storage->debugcb; +my $orig_debug = $schema->storage->debug; -diag('Testing against ' . join(' ', map { DBICTest->schema->storage->dbh->get_info($_) } qw/17 18/)); +diag('Testing against ' . join(' ', map { $schema->storage->dbh->get_info($_) } qw/17 18/)); -DBICTest->schema->storage->sql_maker->quote_char('`'); -DBICTest->schema->storage->sql_maker->name_sep('.'); +$schema->storage->sql_maker->quote_char('`'); +$schema->storage->sql_maker->name_sep('.'); my $sql = ''; -DBICTest->schema->storage->debugcb(sub { $sql = $_[1] }); -DBICTest->schema->storage->debug(1); +$schema->storage->debugcb(sub { $sql = $_[1] }); +$schema->storage->debug(1); my $rs; -$rs = DBICTest::CD->search( +$rs = $schema->resultset('CD')->search( { 'me.year' => 2001, 'artist.name' => 'Caterwauler McCrae' }, { join => 'artist' }); eval { $rs->count }; like($sql, qr/\QSELECT COUNT( * ) FROM `cd` `me` JOIN `artist` `artist` ON ( `artist`.`artistid` = `me`.`artist` ) WHERE ( `artist`.`name` = ? AND `me`.`year` = ? )\E/, 'got correct SQL for count query with quoting'); my $order = 'year DESC'; -$rs = DBICTest::CD->search({}, +$rs = $schema->resultset('CD')->search({}, { 'order_by' => $order }); eval { $rs->first }; like($sql, qr/ORDER BY `\Q${order}\E`/, 'quoted ORDER BY with DESC (should use a scalarref anyway)'); -$rs = DBICTest::CD->search({}, +$rs = $schema->resultset('CD')->search({}, { 'order_by' => \$order }); eval { $rs->first }; like($sql, qr/ORDER BY \Q${order}\E/, 'did not quote ORDER BY with scalarref'); -DBICTest->schema->storage->sql_maker->quote_char([qw/[ ]/]); -DBICTest->schema->storage->sql_maker->name_sep('.'); +$schema->storage->sql_maker->quote_char([qw/[ ]/]); +$schema->storage->sql_maker->name_sep('.'); -$rs = DBICTest::CD->search( +$rs = $schema->resultset('CD')->search( { 'me.year' => 2001, 'artist.name' => 'Caterwauler McCrae' }, { join => 'artist' }); eval { $rs->count }; @@ -62,10 +62,10 @@ my %data = ( order => '12' ); -DBICTest->schema->storage->sql_maker->quote_char('`'); -DBICTest->schema->storage->sql_maker->name_sep('.'); +$schema->storage->sql_maker->quote_char('`'); +$schema->storage->sql_maker->name_sep('.'); -is(DBICTest->schema->storage->sql_maker->update('group', \%data), 'UPDATE `group` SET `name` = ?, `order` = ?', 'quoted table names for UPDATE'); +is($schema->storage->sql_maker->update('group', \%data), 'UPDATE `group` SET `name` = ?, `order` = ?', 'quoted table names for UPDATE'); -DBICTest->schema->storage->debugcb($orig_debugcb); -DBICTest->schema->storage->debug($orig_debug); +$schema->storage->debugcb($orig_debugcb); +$schema->storage->debug($orig_debug); diff --git a/t/19quotes_newstyle.t b/t/19quotes_newstyle.t index 31feaa3..b9d7411 100644 --- a/t/19quotes_newstyle.t +++ b/t/19quotes_newstyle.t @@ -14,44 +14,44 @@ BEGIN { use lib qw(t/lib); use_ok('DBICTest'); -DBICTest->init_schema(); +my $schema = DBICTest->init_schema(); -my $orig_debugcb = DBICTest->schema->storage->debugcb; -my $orig_debug = DBICTest->schema->storage->debug; +my $orig_debugcb = $schema->storage->debugcb; +my $orig_debug = $schema->storage->debug; -diag('Testing against ' . join(' ', map { DBICTest->schema->storage->dbh->get_info($_) } qw/17 18/)); +diag('Testing against ' . join(' ', map { $schema->storage->dbh->get_info($_) } qw/17 18/)); -my $dsn = DBICTest->schema->storage->connect_info->[0]; -DBICTest->schema->connection($dsn, { quote_char => '`', name_sep => '.' }); +my $dsn = $schema->storage->connect_info->[0]; +$schema->connection($dsn, { quote_char => '`', name_sep => '.' }); my $sql = ''; -DBICTest->schema->storage->debugcb(sub { $sql = $_[1] }); -DBICTest->schema->storage->debug(1); +$schema->storage->debugcb(sub { $sql = $_[1] }); +$schema->storage->debug(1); my $rs; -$rs = DBICTest::CD->search( +$rs = $schema->resultset('CD')->search( { 'me.year' => 2001, 'artist.name' => 'Caterwauler McCrae' }, { join => 'artist' }); eval { $rs->count }; like($sql, qr/\QSELECT COUNT( * ) FROM `cd` `me` JOIN `artist` `artist` ON ( `artist`.`artistid` = `me`.`artist` ) WHERE ( `artist`.`name` = ? AND `me`.`year` = ? )\E/, 'got correct SQL for count query with quoting'); my $order = 'year DESC'; -$rs = DBICTest::CD->search({}, +$rs = $schema->resultset('CD')->search({}, { 'order_by' => $order }); eval { $rs->first }; like($sql, qr/ORDER BY `\Q${order}\E`/, 'quoted ORDER BY with DESC (should use a scalarref anyway)'); -$rs = DBICTest::CD->search({}, +$rs = $schema->resultset('CD')->search({}, { 'order_by' => \$order }); eval { $rs->first }; like($sql, qr/ORDER BY \Q${order}\E/, 'did not quote ORDER BY with scalarref'); -DBICTest->schema->connection($dsn, { quote_char => [qw/[ ]/], name_sep => '.' }); -DBICTest->schema->storage->debugcb(sub { $sql = $_[1] }); -DBICTest->schema->storage->debug(1); +$schema->connection($dsn, { quote_char => [qw/[ ]/], name_sep => '.' }); +$schema->storage->debugcb(sub { $sql = $_[1] }); +$schema->storage->debug(1); -$rs = DBICTest::CD->search( +$rs = $schema->resultset('CD')->search( { 'me.year' => 2001, 'artist.name' => 'Caterwauler McCrae' }, { join => 'artist' }); eval { $rs->count }; @@ -62,9 +62,9 @@ my %data = ( order => '12' ); -DBICTest->schema->connection($dsn, { quote_char => '`', name_sep => '.' }); +$schema->connection($dsn, { quote_char => '`', name_sep => '.' }); -is(DBICTest->schema->storage->sql_maker->update('group', \%data), 'UPDATE `group` SET `name` = ?, `order` = ?', 'quoted table names for UPDATE'); +is($schema->storage->sql_maker->update('group', \%data), 'UPDATE `group` SET `name` = ?, `order` = ?', 'quoted table names for UPDATE'); -DBICTest->schema->storage->debugcb($orig_debugcb); -DBICTest->schema->storage->debug($orig_debug); +$schema->storage->debugcb($orig_debugcb); +$schema->storage->debug($orig_debug); diff --git a/t/31stats.t b/t/31stats.t index 59aeb9e..9f0da40 100644 --- a/t/31stats.t +++ b/t/31stats.t @@ -14,23 +14,23 @@ BEGIN { use lib qw(t/lib); use_ok('DBICTest'); -DBICTest->init_schema(); +my $schema = DBICTest->init_schema(); my $cbworks = 0; -DBICTest->schema->storage->debugcb(sub { $cbworks = 1; }); -DBICTest->schema->storage->debug(0); -my $rs = DBICTest::CD->search({}); +$schema->storage->debugcb(sub { $cbworks = 1; }); +$schema->storage->debug(0); +my $rs = $schema->resultset('CD')->search({}); $rs->count(); ok(!$cbworks, 'Callback not called with debug disabled'); -DBICTest->schema->storage->debug(1); +$schema->storage->debug(1); $rs->count(); ok($cbworks, 'Debug callback worked.'); my $prof = new DBIx::Test::Profiler(); -DBICTest->schema->storage->debugobj($prof); +$schema->storage->debugobj($prof); # Test non-transaction calls. $rs->count(); @@ -42,27 +42,27 @@ ok(!$prof->{'txn_commit'}, 'txn_commit not called'); $prof->reset(); # Test transaction calls -DBICTest->schema->txn_begin(); +$schema->txn_begin(); ok($prof->{'txn_begin'}, 'txn_begin called'); -$rs = DBICTest::CD->search({}); +$rs = $schema->resultset('CD')->search({}); $rs->count(); ok($prof->{'query_start'}, 'query_start called'); ok($prof->{'query_end'}, 'query_end called'); -DBICTest->schema->txn_commit(); +$schema->txn_commit(); ok($prof->{'txn_commit'}, 'txn_commit called'); $prof->reset(); # Test a rollback -DBICTest->schema->txn_begin(); -$rs = DBICTest::CD->search({}); +$schema->txn_begin(); +$rs = $schema->resultset('CD')->search({}); $rs->count(); -DBICTest->schema->txn_rollback(); +$schema->txn_rollback(); ok($prof->{'txn_rollback'}, 'txn_rollback called'); -DBICTest->schema->storage->debug(0); +$schema->storage->debug(0); package DBIx::Test::Profiler; use strict; diff --git a/t/34exception_action.t b/t/34exception_action.t index dd54be1..7fef551 100644 --- a/t/34exception_action.t +++ b/t/34exception_action.t @@ -60,5 +60,5 @@ eval { throwex }; like($@, qr/DBICTest::Exception is handling this: $ex_regex/); # While we're at it, lets throw a custom exception through Storage::DBI -eval { DBICTest->schema->storage->throw_exception('floob') }; +eval { $schema->storage->throw_exception('floob') }; like($@, qr/DBICTest::Exception is handling this: floob/); diff --git a/t/40resultsetmanager.t b/t/40resultsetmanager.t index bdec159..e9f1dc0 100644 --- a/t/40resultsetmanager.t +++ b/t/40resultsetmanager.t @@ -17,7 +17,7 @@ BEGIN { use DBICTest::ResultSetManager; # uses Class::Inspector -my $schema = DBICTest::ResultSetManager->compose_connection('DB', 'foo'); +my $schema = DBICTest::ResultSetManager->compose_namespace('DB', 'foo'); my $rs = $schema->resultset('Foo'); ok( !DB::Foo->can('bar'), 'Foo class does not have bar method' ); diff --git a/t/65multipk.t b/t/65multipk.t index 084bb8e..45c9b2f 100644 --- a/t/65multipk.t +++ b/t/65multipk.t @@ -9,7 +9,7 @@ my $schema = DBICTest->init_schema(); plan tests => 5; -my $artist = DBICTest::Artist->find(1); +my $artist = $schema->resultset("Artist")->find(1); ok($artist->find_related('twokeys', {cd => 1}), "find multiple pks using relationships + args"); ok($schema->resultset("FourKeys")->search({ foo => 1, bar => 2 })->find({ hello => 3, goodbye => 4 }), "search on partial key followed by a find"); diff --git a/t/71mysql.t b/t/71mysql.t index aeb73ea..3bbdaa1 100644 --- a/t/71mysql.t +++ b/t/71mysql.t @@ -15,7 +15,7 @@ plan skip_all => 'Set $ENV{DBICTEST_MYSQL_DSN}, _USER and _PASS to run this test plan tests => 5; -DBICTest::Schema->compose_connection('MySQLTest' => $dsn, $user, $pass); +DBICTest::Schema->compose_namespace('MySQLTest' => $dsn, $user, $pass); my $dbh = MySQLTest->schema->storage->dbh; diff --git a/t/72pg.t b/t/72pg.t index ca67043..a3239ca 100644 --- a/t/72pg.t +++ b/t/72pg.t @@ -30,7 +30,7 @@ plan skip_all => 'Set $ENV{DBICTEST_PG_DSN}, _USER and _PASS to run this test' plan tests => 8; DBICTest::Schema->load_classes( 'Casecheck' ); -DBICTest::Schema->compose_connection('PgTest' => $dsn, $user, $pass); +DBICTest::Schema->compose_namespace('PgTest' => $dsn, $user, $pass); my $dbh = PgTest->schema->storage->dbh; PgTest->schema->source("Artist")->name("testschema.artist"); diff --git a/t/73oracle.t b/t/73oracle.t index c0489ff..7ca5c41 100644 --- a/t/73oracle.t +++ b/t/73oracle.t @@ -13,7 +13,7 @@ plan skip_all => 'Set $ENV{DBICTEST_ORA_DSN}, _USER and _PASS to run this test. plan tests => 6; -DBICTest::Schema->compose_connection('OraTest' => $dsn, $user, $pass); +DBICTest::Schema->compose_namespace('OraTest' => $dsn, $user, $pass); my $dbh = OraTest->schema->storage->dbh; diff --git a/t/745db2.t b/t/745db2.t index ffb7a0b..82d3c2c 100644 --- a/t/745db2.t +++ b/t/745db2.t @@ -14,7 +14,7 @@ plan skip_all => 'Set $ENV{DBICTEST_DB2_DSN}, _USER and _PASS to run this test' plan tests => 6; -DBICTest::Schema->compose_connection('DB2Test' => $dsn, $user, $pass); +DBICTest::Schema->compose_namespace('DB2Test' => $dsn, $user, $pass); my $dbh = DB2Test->schema->storage->dbh; diff --git a/t/746db2_400.t b/t/746db2_400.t index 558ca62..745673b 100644 --- a/t/746db2_400.t +++ b/t/746db2_400.t @@ -17,7 +17,7 @@ plan skip_all => 'Set $ENV{DBICTEST_DB2_400_DSN}, _USER and _PASS to run this te plan tests => 6; -DBICTest::Schema->compose_connection('DB2Test' => $dsn, $user, $pass); +DBICTest::Schema->compose_namespace('DB2Test' => $dsn, $user, $pass); my $dbh = DB2Test->schema->storage->dbh; diff --git a/t/74mssql.t b/t/74mssql.t index 204a640..0bb43b6 100644 --- a/t/74mssql.t +++ b/t/74mssql.t @@ -19,7 +19,7 @@ $storage_type = '::DBI::Sybase::MSSQL' if $dsn =~ /^dbi:Sybase:/; # Add more for others in the future when they exist (ODBC? ADO? JDBC?) DBICTest::Schema->storage_type($storage_type); -DBICTest::Schema->compose_connection( 'MSSQLTest' => $dsn, $user, $pass ); +DBICTest::Schema->compose_namespace( 'MSSQLTest' => $dsn, $user, $pass ); my $dbh = MSSQLTest->schema->storage->dbh; diff --git a/t/93nobindvars.t b/t/93nobindvars.t index a759a6c..b4e1adc 100644 --- a/t/93nobindvars.t +++ b/t/93nobindvars.t @@ -30,7 +30,7 @@ plan tests => 4; DBICTest::Schema->storage(undef); # just in case? DBICTest::Schema->storage_type('::DBI::MySQLNoBindVars'); -DBICTest::Schema->compose_connection('MySQLTest' => $dsn, $user, $pass); +DBICTest::Schema->compose_namespace('MySQLTest' => $dsn, $user, $pass); my $dbh = MySQLTest->schema->storage->dbh; diff --git a/t/95sql_maker_quote.t b/t/95sql_maker_quote.t index dc33199..1f4cd90 100644 --- a/t/95sql_maker_quote.t +++ b/t/95sql_maker_quote.t @@ -15,9 +15,9 @@ use lib qw(t/lib); use_ok('DBICTest'); -DBICTest->init_schema(); +my $schema = DBICTest->init_schema(); -my $sql_maker = DBICTest->schema->storage->sql_maker; +my $sql_maker = $schema->storage->sql_maker; $sql_maker->quote_char('`'); $sql_maker->name_sep('.'); diff --git a/t/cdbi-sweet-t/08pager.t b/t/cdbi-sweet-t/08pager.t index 71ccaed..57bd65d 100644 --- a/t/cdbi-sweet-t/08pager.t +++ b/t/cdbi-sweet-t/08pager.t @@ -16,9 +16,11 @@ BEGIN { use lib 't/lib'; use_ok('DBICTest'); -DBICTest->init_schema(); +my $schema = DBICTest->init_schema(); -DBICTest::CD->load_components(qw/CDBICompat::Pager/); +DBICTest::CD->load_components(qw/CDBICompat CDBICompat::Pager/); + +DBICTest::CD->result_source_instance->schema($schema); my ( $pager, $it ) = DBICTest::CD->page( {}, diff --git a/t/lib/DBICTest.pm b/t/lib/DBICTest.pm index a58c6bc..cb3ae57 100755 --- a/t/lib/DBICTest.pm +++ b/t/lib/DBICTest.pm @@ -55,7 +55,8 @@ sub init_schema { my $dbuser = $ENV{"DBICTEST_DBUSER"} || ''; my $dbpass = $ENV{"DBICTEST_DBPASS"} || ''; - my $schema = DBICTest::Schema->compose_connection('DBICTest' => $dsn, $dbuser, $dbpass); + my $schema = DBICTest::Schema->compose_namespace('DBICTest') + ->connect($dsn, $dbuser, $dbpass); $schema->storage->on_connect_do(['PRAGMA synchronous = OFF']); if ( !$args{no_deploy} ) { __PACKAGE__->deploy_schema( $schema );