[Jifty-commit] r2386 - in Jifty-DBI/trunk: lib/Jifty/DBI/Handle
jifty-commit at lists.jifty.org
jifty-commit at lists.jifty.org
Wed Dec 13 05:24:18 EST 2006
Author: agentz
Date: Wed Dec 13 05:24:16 2006
New Revision: 2386
Added:
Jifty-DBI/trunk/t/14handle-pg.t (contents, props changed)
Modified:
Jifty-DBI/trunk/lib/Jifty/DBI/Handle/Pg.pm
Jifty-DBI/trunk/t/13collection.t
Log:
[Jifty::DBI::Handle::Pg]
- fixed the "order_by" bug in sub distinct_query.
(tested by my Qooqle app)
[t/14handle-pg.t]
- added unit tests for the Handle::Pg patch.
Modified: Jifty-DBI/trunk/lib/Jifty/DBI/Handle/Pg.pm
==============================================================================
--- Jifty-DBI/trunk/lib/Jifty/DBI/Handle/Pg.pm (original)
+++ Jifty-DBI/trunk/lib/Jifty/DBI/Handle/Pg.pm Wed Dec 13 05:24:16 2006
@@ -206,9 +206,13 @@
= [ @{ $sb->{group_by} || [] }, { column => 'id' } ];
local $sb->{order_by} = [
map {
- ( $_->{alias} and $_->{alias} ne "main" )
- ? { %{$_}, column => "min(" . $_->{column} . ")" }
- : $_
+ my $alias = $_->{alias} || '';
+ my $column = $_->{column};
+ $alias .= '.' if $alias;
+ #warn "alias $alias => column $column\n";
+ ((!$alias or $alias eq 'main.') and $column eq 'id')
+ ? $_
+ : { %{$_}, alias => '', column => "min($alias$column)" }
} @{ $sb->{order_by} }
];
my $group = $sb->_group_clause;
Modified: Jifty-DBI/trunk/t/13collection.t
==============================================================================
--- Jifty-DBI/trunk/t/13collection.t (original)
+++ Jifty-DBI/trunk/t/13collection.t Wed Dec 13 05:24:16 2006
@@ -1,3 +1,5 @@
+# Test methods in Jifty::DBI::Collection.
+
use strict;
use warnings;
Added: Jifty-DBI/trunk/t/14handle-pg.t
==============================================================================
--- (empty file)
+++ Jifty-DBI/trunk/t/14handle-pg.t Wed Dec 13 05:24:16 2006
@@ -0,0 +1,71 @@
+# Test methods in Jifty::DBI::Handle::Pg
+
+use strict;
+use warnings;
+
+use Test::More tests => 2;
+
+my $package;
+BEGIN {
+ $package = 'Jifty::DBI::Handle::Pg';
+ use_ok($package);
+}
+use Jifty::DBI::Collection;
+
+package Foo::Bar::Collection;
+our @ISA = 'Jifty::DBI::Collection';
+
+sub _preload_columns { "blah" }
+sub table { "bars" }
+
+package main;
+
+{
+ # Test sub distinct_query
+ my $collection = bless {
+ order_by => [
+ {
+ alias => 'main',
+ column => 'id',
+ order => 'asc',
+ },
+ {
+ alias => 'main',
+ column => 'name',
+ order => 'desc',
+ },
+ {
+ alias => 'foo',
+ column => 'id',
+ order => 'desc',
+ },
+ {
+ alias => 'foo',
+ column => 'name',
+ order => 'desc',
+ },
+ {
+ alias => '',
+ column => 'id',
+ order => 'ASC',
+ },
+ {
+ alias => undef,
+ column => 'blood',
+ order => 'ASC'
+ },
+ {
+ column => 'session_offset',
+ order => 'asc'
+ },
+ ],
+ }, 'Foo::Bar::Collection';
+ my $stmt = 'select * from users';
+ $package->distinct_query(\$stmt, $collection);
+ is $stmt,
+ 'SELECT blah FROM ( SELECT main.id FROM select * from users GROUP BY main.id'
+ . ' ORDER BY main.id ASC, min(main.name) DESC, min(foo.id) DESC, '
+ . 'min(foo.name) DESC, id ASC, min(blood) ASC, min(session_offset) ASC ) '
+ . 'distinctquery, bars main WHERE (main.id = distinctquery.id)',
+ 'distinct_query works';
+}
More information about the Jifty-commit
mailing list