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

Jifty commits jifty-commit at lists.jifty.org
Fri Mar 20 21:56:21 EDT 2009


Author: ruz
Date: Fri Mar 20 21:56:20 2009
New Revision: 6689

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

Log:
* switch qulify to named arguments

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	Fri Mar 20 21:56:20 2009
@@ -318,7 +318,7 @@
     if ( my $alias = $meta->{'alias'} ) {
         die "Couldn't find alias $alias"
             unless $aliases->{ $alias };
-        my $target = $aliases->{ $alias }->qualify( $self, $aliases, $collection );
+        my $target = $aliases->{ $alias }->qualify( tisql => $self, aliases => $aliases, new => 0 );
         my $item = $target->{'chain'}[-1]{'refers_to'}
             or die "Last column of alias '$alias' is not a reference";
         %last = (
@@ -638,7 +638,7 @@
         my $str = shift;
         $str = "__record__". $str if 0 == rindex $str, '.', 0;
         substr($str, 0, length($name)) = '' if 0 == rindex $str, "$name.", 0;
-        return $self->parse_column($str)->qualify( $self, $aliases );
+        return $self->parse_column($str)->qualify( tisql => $self, aliases => $aliases );
     };
     my $conditions = $parser->as_array(
         $column->tisql,
@@ -650,7 +650,7 @@
         $conditions,
         'AND',
         Jifty::DBI::Tisql::Condition->from_struct(
-            $self->parse_column('__record__.id')->qualify( $self, $aliases),
+            $self->parse_column('__record__.id')->qualify( tisql => $self, aliases => $aliases ),
             $record->id || 0,
         ),
     ];
@@ -991,13 +991,23 @@
 
 sub qualify {
     my $self = shift;
-    my $tisql = shift;
-    my $aliases = shift;
-    my $collection = shift || $tisql->{'collection'};
+    my %args = (
+        tisql      => undef,
+        aliases    => undef,
+        collection => undef,
+        new        => 1,
+        @_
+    );
+    return $self if $self->{'is_qualified'};
+
+    my $tisql      = $args{'tisql'};
+    my $aliases    = $args{'aliases'};
+    my $collection = $args{'collection'} || $tisql->{'collection'};
 
-    return $self if $self->{'is_qualified'}++;
+    my $res = $args{'new'}? $self->clone( disqualify => 0 ) : $self;
+    $res->{'is_qualified'} = 1;
 
-    my $start_from = $self->{'alias'};
+    my $start_from = $res->{'alias'};
     my ($item, $last);
     if ( !$start_from && !$aliases->{''} ) {
         $item = $collection->new_item;
@@ -1005,7 +1015,7 @@
         my $alias = $aliases->{ $start_from }
             || die "Couldn't find alias '$start_from'";
 
-        $alias->qualify( $tisql, $aliases, $collection );
+        $alias->qualify( tisql => $tisql, aliases => $aliases, collection => $collection, new => 0 );
 
         $last = $alias;
         $item = $alias->{'chain'}[-1]{'refers_to'};
@@ -1015,7 +1025,7 @@
         $item = $item->new_item if $item->isa('Jifty::DBI::Collection');
     }
 
-    my @chain = @{ $self->{'chain'} };
+    my @chain = @{ $res->{'chain'} };
     while ( my $joint = shift @chain ) {
         my $name = $joint->{'name'};
 
@@ -1027,9 +1037,9 @@
         my $classname = $column->refers_to;
         if ( !$classname && @chain ) {
             die "column '$name' of ". ref($item) ." is not a reference"
-                .", but used so in '". $self->{'string'} ."'";
+                .", but used so in '$res'";
         }
-        return $self unless $classname;
+        return $res unless $classname;
 
         if ( UNIVERSAL::isa( $classname, 'Jifty::DBI::Collection' ) ) {
             $joint->{'refers_to'} = $classname->new( handle => $collection->_handle );


More information about the Jifty-commit mailing list