X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FManual%2FTroubleshooting.pod;h=18fb89edc42292a591391d78a7361b3472f121ac;hb=9e34d55419481925691c7177d43ba48ec02b02eb;hp=b870b3b1fd5aa835e0f95e3f9514b7b1a4d415a8;hpb=c13fabce230792388c8c57fb9cd481be65fe3125;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Manual/Troubleshooting.pod b/lib/DBIx/Class/Manual/Troubleshooting.pod index b870b3b..18fb89e 100644 --- a/lib/DBIx/Class/Manual/Troubleshooting.pod +++ b/lib/DBIx/Class/Manual/Troubleshooting.pod @@ -17,13 +17,13 @@ SQL tracing, so to see what is happening try Alternatively use the C<< storage->debug >> class method:- - $class->storage->debug(1); + $schema->storage->debug(1); To send the output somewhere else set debugfh:- - $class->storage->debugfh(IO::File->new('/tmp/trace.out', 'w'); + $schema->storage->debugfh(IO::File->new('/tmp/trace.out', 'w'); -Alternatively you can do this with the environment variable too:- +Alternatively you can do this with the environment variable, too:- export DBIC_TRACE="1=/tmp/trace.out" @@ -47,13 +47,12 @@ correctly. L version 1.50 and L 1.43 are known to work. -=head2 ... Can't locate object method "source_name" via package ... +=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. +declaration is correct. For example, for a schema C< MySchema > +you need to specify a fully qualified namespace: C< package MySchema::MyTable; >. =head2 syntax error at or near "" ... @@ -100,28 +99,20 @@ The solution is to enable quoting - see L for details. -Note that quoting may lead to problems with C 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: +This can happen if you are still using the obsolete order hack, and also +happen to turn on SQL-quoting. $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: +Since L >= 0.08100 and L >= 1.50 the above +should be written as: - $rs->search( {}, { order_by => [ \'name DESC' ] } ); + $rs->search( {}, { order_by => { -desc => 'name' } } ); -Now you'll get SQL like this: - - ... ORDER BY name DESC +For more ways to express order clauses refer to +L =head2 Perl Performance Issues on Red Hat Systems @@ -141,20 +132,39 @@ 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 +This 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 row objects in -memory, so can be unoticeable with certain data sets, but with huge +degradation exponential to the number of L row objects in +memory, so can be unnoticeable with certain data sets, but with huge performance impacts on other datasets. -A pair of tests for susceptability to the issue, and performance effects +A pair of tests for susceptibility to the issue and performance effects of the bless/overload problem can be found in the L test -suite in the file C +suite, in the C file. Further information on this issue can be found in L, L and L +=head2 Excessive Memory Allocation with TEXT/BLOB/etc. Columns and Large LongReadLen + +It has been observed, using L, that creating a L +object which includes a column of data type TEXT/BLOB/etc. will allocate +LongReadLen bytes. This allocation does not leak, but if LongReadLen +is large in size, and many such row objects are created, e.g. as the +output of a ResultSet query, the memory footprint of the Perl interpreter +can grow very large. + +The solution is to use the smallest practical value for LongReadLen. + +=head2 create_ddl_dir does not produce DDL for MySQL views + +L does not create DDL for MySQL views if it doesn't know you +are using mysql version 5.000001 or higher. To explicity set this version, add +C to the C in the C<%sqlt> options. + + $schema->create_ddl_dir(['MySQL'], '1.0', './sql/', undef, { producer_args => { mysql_version => 5.000058 } }) + =cut