[Jifty-commit] r5751 - Jifty-DBI/branches/tisql/lib/Jifty/DBI
Jifty commits
jifty-commit at lists.jifty.org
Tue Aug 19 00:01:02 EDT 2008
Author: ruz
Date: Tue Aug 19 00:01:01 2008
New Revision: 5751
Modified:
Jifty-DBI/branches/tisql/lib/Jifty/DBI/Tisql.pm
Log:
* rewrite resolve_tisql_join to support placeholders
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 19 00:01:01 2008
@@ -233,12 +233,7 @@
if ( UNIVERSAL::isa( $refers, 'Jifty::DBI::Collection' ) ) {
my $item = $refers->new_item;
if ( my $tisql = $column->tisql ) {
- $res = $self->resolve_tisql_join(
- chain => $meta->{'previous'},
- alias => $prev_alias,
- collection => $collection,
- column => $column,
- );
+ $res = $self->resolve_tisql_join( $meta );
} else {
$res = $collection->new_alias( $item );
$collection->join(
@@ -272,35 +267,55 @@
sub resolve_tisql_join {
my $self = shift;
- my %args = (@_);
-
- my $collection = $args{'collection'};
+ my $meta = shift;
- my $query = $args{'column'}->tisql;
- my $refers_to = $args{'column'}->refers_to->new( handle => $collection->_handle );
- my $right_alias = $collection->new_alias( $refers_to->new_item );
+ my $alias = $self->{'collection'}->new_alias(
+ $meta->{'refers_to'}->new_item
+ );
my $tree = $self->as_array(
- $query,
+ $meta->{'column'}->tisql,
operand_cb => sub { return $self->parse_condition(
$_[0], sub { return $self->find_column(
$_[0],
{
- '' => $args{'chain'},
- $args{'column'}->name => {
- column => $args{'column'},
- refers_to => $refers_to,
- string => '',
- sql_alias => $right_alias,
+ '' => $meta->{'previous'},
+ $meta->{'column'}->name => {
+ %$meta,
+ sql_alias => $alias,
}
},
) }
) },
);
- $self->apply_query_tree( $tree, $right_alias );
+ $tree = $self->filter_conditions_tree( $tree, sub {
+ my $rhs = $_[0]->{'rhs'};
+ if ( $rhs && !ref $rhs && $rhs =~ /^%([0-9]+)$/ ) {
+ return 0 unless defined $meta->{'placeholders'}[ $1 - 1 ];
+ $_[0]->{'rhs'} = $meta->{'placeholders'}[ $1 - 1 ];
+ return 1;
+ }
+ foreach my $col ( grep ref $_ eq 'HASH', $rhs, $_[0]->{'lhs'} ) {
+ my $tmp = $col;
+ while ( $tmp ) {
+ if ( my $phs = $tmp->{'placeholders'} ) {
+ for ( my $i = 0; $i < @$phs; $i++ ) {
+ my $ph = $phs->[$i];
+ next unless defined $ph;
+ next if ref $ph;
+ $phs->[$i] = $meta->{'placeholders'}[ $ph - 1 ];
+ }
+ }
+ $tmp = $tmp->{previous};
+ };
+ }
+ return 1;
+ } );
+
+ $self->apply_query_tree( $tree, $alias );
- return $right_alias;
+ return $alias;
}
sub parse_condition {
More information about the Jifty-commit
mailing list