[Jifty-commit] r5688 - Jifty-DBI/branches/tisql/lib/Jifty/DBI

Jifty commits jifty-commit at lists.jifty.org
Tue Aug 12 02:52:31 EDT 2008


Author: ruz
Date: Tue Aug 12 02:52:31 2008
New Revision: 5688

Modified:
   Jifty-DBI/branches/tisql/lib/Jifty/DBI/Tisql.pm

Log:
* add resolve_tisql_join method to resolve_join's helper
  for columns with "refers_to X by tisql => '...'"

Modified: Jifty-DBI/branches/tisql/lib/Jifty/DBI/Tisql.pm
==============================================================================
--- Jifty-DBI/branches/tisql/lib/Jifty/DBI/Tisql.pm	(original)
+++ Jifty-DBI/branches/tisql/lib/Jifty/DBI/Tisql.pm	Tue Aug 12 02:52:31 2008
@@ -153,14 +153,24 @@
 
         if ( UNIVERSAL::isa( $classname, 'Jifty::DBI::Collection' ) ) {
             my $item = $classname->new( handle => $collection->_handle )->new_item;
-            my $right_alias = $collection->new_alias( $item );
-            $collection->join(
-                type    => 'left',
-                alias1  => $last_alias,
-                column1 => 'id',
-                alias2  => $right_alias,
-                column2 => $column->by || 'id',
-            );
+            my $right_alias;
+            if ( my $tisql = $column->tisql ) {
+                $right_alias = $self->resolve_tisql_join(
+                    alias => $last_alias,
+                    collection => $collection,
+                    column => $column,
+                );
+            } else {
+                $right_alias = $collection->new_alias( $item );
+                $collection->join(
+                    subclause => 'tisql',
+                    type    => 'left',
+                    alias1  => $last_alias,
+                    column1 => 'id',
+                    alias2  => $right_alias,
+                    column2 => $column->by || 'id',
+                );
+            }
             $last_alias = $right_alias;
         }
         elsif ( UNIVERSAL::isa( $classname, 'Jifty::DBI::Record' ) ) {
@@ -184,6 +194,33 @@
     return $last_alias;
 }
 
+sub resolve_tisql_join {
+    my $self = shift;
+    my %args = (@_);
+    
+    my $collection = $args{'collection'};
+
+    my $left_alias = $args{'alias'};
+    my $query = $args{'column'}->tisql;
+    my $classname = $args{'column'}->refers_to;
+    my $right_alias = $collection->new_alias( $classname->new( handle => $collection->_handle )->new_item );
+
+    my $tree = $self->as_array(
+        $query,
+        operand_cb => sub { return $self->parse_condition( $_[0],
+            { $args{'column'}->name => { 
+                chain => [ $args{'column'} ],
+                string => '',
+                sql_alias => $right_alias,
+            } },
+        ) },
+    );
+
+    $self->apply_query_tree( $tree, $right_alias );
+
+    return $right_alias;
+}
+
 sub parse_condition {
     my $self = shift;
     my $string = shift;


More information about the Jifty-commit mailing list