Changeset 1881

Show
Ignore:
Timestamp:
04/14/08 06:16:02 (19 months ago)
Author:
fumiakiy
Message:

Added support to complex terms and order by clause to _do_group_by method.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/release-34/lib/MT/ObjectDriver/Driver/DBI.pm

    r1873 r1881  
    122122    my ($agg_func, $class, $terms, $args) = @_; 
    123123    my $props = $class->properties; 
    124     if ($props->{class_type}) { 
    125         my $class_col = $props->{class_column}; 
    126         unless ($terms->{$class_col}) { 
    127             $terms->{$class_col} = $class->class_type; 
    128         } 
    129     } 
    130124    if ($args->{no_class}) { 
    131125        delete $terms->{$props->{class_column}}; 
    132126        delete $args->{no_class}; 
     127    } 
     128    else { 
     129        $class->pre_search_scope_terms_to_class( $terms, $args ); 
    133130    } 
    134131    my $order = delete $args->{sort}; 
     
    159156    ## Ugly. 
    160157    my $sql = $stmt->as_sql; 
     158 
     159    ## Set statement's ORDER clause if any. 
    161160    if ($order) { 
    162         $sql .= "\nORDER BY " . $decorate->($order); 
    163         if ($direction) { 
    164             $sql .= $direction eq 'descend' ? ' DESC' : ' ASC'; 
     161        if (! ref($order)) { 
     162            $sql .= "\nORDER BY " . $decorate->($order); 
     163            if ($direction) { 
     164                $sql .= $direction eq 'descend' ? ' DESC' : ' ASC'; 
     165            } 
     166        } else { 
     167            my @order; 
     168            foreach my $ord (@$order) { 
     169                push @order, { 
     170                    column => $decorate->($ord->{column}), 
     171                    desc => $ord->{desc}, 
     172                }; 
     173            } 
     174            $stmt->order(\@order); 
     175            $sql .= "\n" . $stmt->as_aggregate('order'); 
    165176        } 
    166177    } 
     
    168179    my $dbh = $driver->r_handle; 
    169180    $driver->start_query($sql, $stmt->bind); 
    170     my $sth = $dbh->prepare_cached($sql) or die $sql; 
    171     $sth->execute(@{ $stmt->bind }) or die $sql; 
     181    my $sth = $dbh->prepare_cached($sql); 
     182    $sth->execute(@{ $stmt->bind }); 
    172183 
    173184    my @bindvars;