[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