[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