[Bast-commits] r7351 - in DBIx-Class/0.08/branches: .
grouped_has_many_join/lib/DBIx/Class/Manual
grouped_has_many_join/t/prefetch
abraxxa at dev.catalyst.perl.org
abraxxa at dev.catalyst.perl.org
Thu Aug 20 15:46:07 GMT 2009
Author: abraxxa
Date: 2009-08-20 15:46:06 +0000 (Thu, 20 Aug 2009)
New Revision: 7351
Added:
DBIx-Class/0.08/branches/grouped_has_many_join/
DBIx-Class/0.08/branches/grouped_has_many_join/lib/DBIx/Class/Manual/Troubleshooting.pod
Removed:
DBIx-Class/0.08/branches/grouped_has_many_join/lib/DBIx/Class/Manual/Troubleshooting.pod
Modified:
DBIx-Class/0.08/branches/grouped_has_many_join/t/prefetch/grouped.t
Log:
new branch grouped_has_many_join
Copied: DBIx-Class/0.08/branches/grouped_has_many_join (from rev 7342, DBIx-Class/0.08/trunk)
Deleted: DBIx-Class/0.08/branches/grouped_has_many_join/lib/DBIx/Class/Manual/Troubleshooting.pod
===================================================================
--- DBIx-Class/0.08/trunk/lib/DBIx/Class/Manual/Troubleshooting.pod 2009-08-18 20:45:06 UTC (rev 7342)
+++ DBIx-Class/0.08/branches/grouped_has_many_join/lib/DBIx/Class/Manual/Troubleshooting.pod 2009-08-20 15:46:06 UTC (rev 7351)
@@ -1,160 +0,0 @@
-=head1 NAME
-
-DBIx::Class::Manual::Troubleshooting - Got a problem? Shoot it.
-
-=head2 "Can't locate storage blabla"
-
-You're trying to make a query on a non-connected schema. Make sure you got
-the current resultset from $schema->resultset('Artist') on a schema object
-you got back from connect().
-
-=head2 Tracing SQL
-
-The C<DBIC_TRACE> environment variable controls
-SQL tracing, so to see what is happening try
-
- export DBIC_TRACE=1
-
-Alternatively use the C<< storage->debug >> class method:-
-
- $class->storage->debug(1);
-
-To send the output somewhere else set debugfh:-
-
- $class->storage->debugfh(IO::File->new('/tmp/trace.out', 'w');
-
-Alternatively you can do this with the environment variable too:-
-
- export DBIC_TRACE="1=/tmp/trace.out"
-
-=head2 Can't locate method result_source_instance
-
-For some reason the table class in question didn't load fully, so the
-ResultSource object for it hasn't been created. Debug this class in
-isolation, then try loading the full schema again.
-
-=head2 Can't get last insert ID under Postgres with serial primary keys
-
-Older L<DBI> and L<DBD::Pg> versions do not handle C<last_insert_id>
-correctly, causing code that uses auto-incrementing primary key
-columns to fail with a message such as:
-
- Can't get last insert id at /.../DBIx/Class/Row.pm line 95
-
-In particular the RHEL 4 and FC3 Linux distributions both ship with
-combinations of L<DBI> and L<DBD::Pg> modules that do not work
-correctly.
-
-L<DBI> version 1.50 and L<DBD::Pg> 1.43 are known to work.
-
-=head2 Can't locate object method "source_name" via package
-
-There's likely a syntax error in the table class referred to elsewhere
-in this error message. In particular make sure that the package
-declaration is correct, so for a schema C< MySchema > you need to
-specify a fully qualified namespace: C< package MySchema::MyTable; >
-for example.
-
-=head2 syntax error at or near "<something>" ...
-
-This can happen if you have a relation whose name is a word reserved by your
-database, e.g. "user":
-
- package My::Schema::User;
- ...
- __PACKAGE__->table('users');
- __PACKAGE__->add_columns(qw/ id name /);
- __PACKAGE__->set_primary_key('id');
- ...
- 1;
-
- package My::Schema::ACL;
- ...
- __PACKAGE__->table('acl');
- __PACKAGE__->add_columns(qw/ user_id /);
- __PACKAGE__->belongs_to( 'user' => 'My::Schema::User', 'user_id' );
- ...
- 1;
-
- $schema->resultset('ACL')->search(
- {},
- {
- join => [qw/ user /],
- '+select' => [ 'user.name' ]
- }
- );
-
-The SQL generated would resemble something like:
-
- SELECT me.user_id, user.name FROM acl me
- JOIN users user ON me.user_id = user.id
-
-If, as is likely, your database treats "user" as a reserved word, you'd end
-up with the following errors:
-
-1) syntax error at or near "." - due to "user.name" in the SELECT clause
-
-2) syntax error at or near "user" - due to "user" in the JOIN clause
-
-The solution is to enable quoting - see
-L<DBIx::Class::Manual::Cookbook/Setting_quoting_for_the_generated_SQL> for
-details.
-
-Note that quoting may lead to problems with C<order_by> clauses, see
-L<... column "foo DESC" does not exist ...> for info on avoiding those.
-
-=head2 column "foo DESC" does not exist ...
-
-This can happen if you've turned on quoting and then done something like
-this:
-
- $rs->search( {}, { order_by => [ 'name DESC' ] } );
-
-This results in SQL like this:
-
- ... ORDER BY "name DESC"
-
-The solution is to pass your order_by items as scalar references to avoid
-quoting:
-
- $rs->search( {}, { order_by => [ \'name DESC' ] } );
-
-Now you'll get SQL like this:
-
- ... ORDER BY name DESC
-
-=head2 Perl Performance Issues on Red Hat Systems
-
-There is a problem with slow performance of certain DBIx::Class
-operations using the system perl on some Fedora and Red Hat Enterprise
-Linux system (as well as their derivative distributions such as Centos,
-White Box and Scientific Linux).
-
-Distributions affected include Fedora 5 through to Fedora 8 and RHEL5
-upto and including RHEL5 Update 2. Fedora 9 (which uses perl 5.10) has
-never been affected - this is purely a perl 5.8.8 issue.
-
-As of September 2008 the following packages are known to be fixed and so
-free of this performance issue (this means all Fedora and RHEL5 systems
-with full current updates will not be subject to this problem):-
-
- Fedora 8 - perl-5.8.8-41.fc8
- RHEL5 - perl-5.8.8-15.el5_2.1
-
-The issue is due to perl doing an exhaustive search of blessed objects
-under certain circumstances. The problem shows up as performance
-degredation exponential to the number of L<DBIx::Class> row objects in
-memory, so can be unoticeable with certain data sets, but with huge
-performance impacts on other datasets.
-
-A pair of tests for susceptability to the issue, and performance effects
-of the bless/overload problem can be found in the L<DBIx::Class> test
-suite in the file C<t/99rh_perl_perf_bug.t>
-
-Further information on this issue can be found in
-L<https://bugzilla.redhat.com/show_bug.cgi?id=379791>,
-L<https://bugzilla.redhat.com/show_bug.cgi?id=460308> and
-L<http://rhn.redhat.com/errata/RHBA-2008-0876.html>
-
-=cut
-
Copied: DBIx-Class/0.08/branches/grouped_has_many_join/lib/DBIx/Class/Manual/Troubleshooting.pod (from rev 7350, DBIx-Class/0.08/trunk/lib/DBIx/Class/Manual/Troubleshooting.pod)
===================================================================
--- DBIx-Class/0.08/branches/grouped_has_many_join/lib/DBIx/Class/Manual/Troubleshooting.pod (rev 0)
+++ DBIx-Class/0.08/branches/grouped_has_many_join/lib/DBIx/Class/Manual/Troubleshooting.pod 2009-08-20 15:46:06 UTC (rev 7351)
@@ -0,0 +1,160 @@
+=head1 NAME
+
+DBIx::Class::Manual::Troubleshooting - Got a problem? Shoot it.
+
+=head2 "Can't locate storage blabla"
+
+You're trying to make a query on a non-connected schema. Make sure you got
+the current resultset from $schema->resultset('Artist') on a schema object
+you got back from connect().
+
+=head2 Tracing SQL
+
+The C<DBIC_TRACE> environment variable controls
+SQL tracing, so to see what is happening try
+
+ export DBIC_TRACE=1
+
+Alternatively use the C<< storage->debug >> class method:-
+
+ $schema->storage->debug(1);
+
+To send the output somewhere else set debugfh:-
+
+ $schema->storage->debugfh(IO::File->new('/tmp/trace.out', 'w');
+
+Alternatively you can do this with the environment variable too:-
+
+ export DBIC_TRACE="1=/tmp/trace.out"
+
+=head2 Can't locate method result_source_instance
+
+For some reason the table class in question didn't load fully, so the
+ResultSource object for it hasn't been created. Debug this class in
+isolation, then try loading the full schema again.
+
+=head2 Can't get last insert ID under Postgres with serial primary keys
+
+Older L<DBI> and L<DBD::Pg> versions do not handle C<last_insert_id>
+correctly, causing code that uses auto-incrementing primary key
+columns to fail with a message such as:
+
+ Can't get last insert id at /.../DBIx/Class/Row.pm line 95
+
+In particular the RHEL 4 and FC3 Linux distributions both ship with
+combinations of L<DBI> and L<DBD::Pg> modules that do not work
+correctly.
+
+L<DBI> version 1.50 and L<DBD::Pg> 1.43 are known to work.
+
+=head2 Can't locate object method "source_name" via package
+
+There's likely a syntax error in the table class referred to elsewhere
+in this error message. In particular make sure that the package
+declaration is correct, so for a schema C< MySchema > you need to
+specify a fully qualified namespace: C< package MySchema::MyTable; >
+for example.
+
+=head2 syntax error at or near "<something>" ...
+
+This can happen if you have a relation whose name is a word reserved by your
+database, e.g. "user":
+
+ package My::Schema::User;
+ ...
+ __PACKAGE__->table('users');
+ __PACKAGE__->add_columns(qw/ id name /);
+ __PACKAGE__->set_primary_key('id');
+ ...
+ 1;
+
+ package My::Schema::ACL;
+ ...
+ __PACKAGE__->table('acl');
+ __PACKAGE__->add_columns(qw/ user_id /);
+ __PACKAGE__->belongs_to( 'user' => 'My::Schema::User', 'user_id' );
+ ...
+ 1;
+
+ $schema->resultset('ACL')->search(
+ {},
+ {
+ join => [qw/ user /],
+ '+select' => [ 'user.name' ]
+ }
+ );
+
+The SQL generated would resemble something like:
+
+ SELECT me.user_id, user.name FROM acl me
+ JOIN users user ON me.user_id = user.id
+
+If, as is likely, your database treats "user" as a reserved word, you'd end
+up with the following errors:
+
+1) syntax error at or near "." - due to "user.name" in the SELECT clause
+
+2) syntax error at or near "user" - due to "user" in the JOIN clause
+
+The solution is to enable quoting - see
+L<DBIx::Class::Manual::Cookbook/Setting_quoting_for_the_generated_SQL> for
+details.
+
+Note that quoting may lead to problems with C<order_by> clauses, see
+L<... column "foo DESC" does not exist ...> for info on avoiding those.
+
+=head2 column "foo DESC" does not exist ...
+
+This can happen if you've turned on quoting and then done something like
+this:
+
+ $rs->search( {}, { order_by => [ 'name DESC' ] } );
+
+This results in SQL like this:
+
+ ... ORDER BY "name DESC"
+
+The solution is to pass your order_by items as scalar references to avoid
+quoting:
+
+ $rs->search( {}, { order_by => [ \'name DESC' ] } );
+
+Now you'll get SQL like this:
+
+ ... ORDER BY name DESC
+
+=head2 Perl Performance Issues on Red Hat Systems
+
+There is a problem with slow performance of certain DBIx::Class
+operations using the system perl on some Fedora and Red Hat Enterprise
+Linux system (as well as their derivative distributions such as Centos,
+White Box and Scientific Linux).
+
+Distributions affected include Fedora 5 through to Fedora 8 and RHEL5
+upto and including RHEL5 Update 2. Fedora 9 (which uses perl 5.10) has
+never been affected - this is purely a perl 5.8.8 issue.
+
+As of September 2008 the following packages are known to be fixed and so
+free of this performance issue (this means all Fedora and RHEL5 systems
+with full current updates will not be subject to this problem):-
+
+ Fedora 8 - perl-5.8.8-41.fc8
+ RHEL5 - perl-5.8.8-15.el5_2.1
+
+The issue is due to perl doing an exhaustive search of blessed objects
+under certain circumstances. The problem shows up as performance
+degredation exponential to the number of L<DBIx::Class> row objects in
+memory, so can be unoticeable with certain data sets, but with huge
+performance impacts on other datasets.
+
+A pair of tests for susceptability to the issue, and performance effects
+of the bless/overload problem can be found in the L<DBIx::Class> test
+suite in the file C<t/99rh_perl_perf_bug.t>
+
+Further information on this issue can be found in
+L<https://bugzilla.redhat.com/show_bug.cgi?id=379791>,
+L<https://bugzilla.redhat.com/show_bug.cgi?id=460308> and
+L<http://rhn.redhat.com/errata/RHBA-2008-0876.html>
+
+=cut
+
Modified: DBIx-Class/0.08/branches/grouped_has_many_join/t/prefetch/grouped.t
===================================================================
--- DBIx-Class/0.08/trunk/t/prefetch/grouped.t 2009-08-18 20:45:06 UTC (rev 7342)
+++ DBIx-Class/0.08/branches/grouped_has_many_join/t/prefetch/grouped.t 2009-08-20 15:46:06 UTC (rev 7351)
@@ -271,4 +271,16 @@
);
}
+{
+ $schema->storage->debug(1);
+ my $cd_rs = $schema->resultset('CD')->search(undef, {
+ distinct => 1,
+ join => [qw/ tracks /],
+ prefetch => [qw/ artist /],
+ });
+
+ is($cd_rs->all, 5, 'search with has_many join and distinct ok');
+ $schema->storage->debug(0);
+}
+
done_testing;
More information about the Bast-commits
mailing list