From: Peter Rabbitson Date: Sun, 7 Mar 2010 01:35:49 +0000 (+0000) Subject: Fix the docs for select/as X-Git-Tag: v0.08121~78 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=6aafb6a62ca556f2d34cab164425a401b7ffe8cd;p=dbsrgits%2FDBIx-Class.git Fix the docs for select/as --- diff --git a/lib/DBIx/Class/Manual/FAQ.pod b/lib/DBIx/Class/Manual/FAQ.pod index 9b98d4c..464040d 100644 --- a/lib/DBIx/Class/Manual/FAQ.pod +++ b/lib/DBIx/Class/Manual/FAQ.pod @@ -182,15 +182,9 @@ attribute. See L. =item .. sort my results based on fields I've aliased using C? -You don't. You'll need to supply the same functions/expressions to -C, as you did to C attribute, such as: - - ->search({}, { select => [ \'now() AS currenttime'] }) - -Then you can use the alias in your C attribute. +You didn't alias anything, since L +B with the produced SQL. See +L for details. =item .. group the results of my search? @@ -199,15 +193,7 @@ attribute, see L. =item .. group my results based on fields I've aliased using C? -You don't. You'll need to supply the same functions/expressions to -C, as you did to C attribute, such as: - - ->search({}, { select => [ \'now() AS currenttime'] }) - -Then you can use the alias in your C attribute. +You don't. See the explanation on ordering by an alias above. =item .. filter the results of my search? diff --git a/lib/DBIx/Class/ResultSet.pm b/lib/DBIx/Class/ResultSet.pm index 3c3895c..4247459 100644 --- a/lib/DBIx/Class/ResultSet.pm +++ b/lib/DBIx/Class/ResultSet.pm @@ -3259,23 +3259,27 @@ names: select => [ 'name', { count => 'employeeid' }, - { sum => 'salary' } + { max => { length => 'name' }, -as => 'longest_name' } ] }); -When you use function/stored procedure names and do not supply an C -attribute, the column names returned are storage-dependent. E.g. MySQL would -return a column named C in the above example. + # Equivalent SQL + SELECT name, COUNT( employeeid ), MAX( LENGTH( name ) ) AS longest_name FROM employee -B You will almost always need a corresponding 'as' entry when you use -'select'. +B You will almost always need a corresponding L attribute when you +use L, to instruct DBIx::Class how to store the result of the column. +Also note that the L attribute has nothing to do with the SQL-side 'AS' +identifier aliasing. You can however alias a function, so you can use it in +e.g. an C clause. This is done via the C<-as> B but adds columns to the selection. +L but adds columns to the default selection, instead of specifying +an explicit list. =back @@ -3295,25 +3299,26 @@ Indicates additional column names for those added via L. See L. =back -Indicates column names for object inflation. That is, C -indicates the name that the column can be accessed as via the -C method (or via the object accessor, B). It has nothing to do with the SQL code C, -usually when C for details. $rs = $schema->resultset('Employee')->search(undef, { select => [ 'name', - { count => 'employeeid' } + { count => 'employeeid' }, + { max => { length => 'name' }, -as => 'longest_name' } ], - as => ['name', 'employee_count'], + as => [qw/ + name + employee_count + max_name_length + /], }); - my $employee = $rs->first(); # get the first Employee - If the object against which the search is performed already has an accessor matching a column name specified in C, the value can be retrieved using the accessor as normal: @@ -3328,16 +3333,6 @@ use C instead: You can create your own accessors if required - see L for details. -Please note: This will NOT insert an C into the SQL -statement produced, it is used for internal access only. Thus -attempting to use the accessor in an C clause or similar -will fail miserably. - -To get around this limitation, you can supply literal SQL to your -C