/usr/share/perl5/Tangram/Expr/Coll/FromMany.pm is in libtangram-perl 2.12-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | package Tangram::Expr::Coll::FromMany;
use strict;
use vars qw(@ISA);
@ISA = qw( Tangram::Expr::Coll );
sub includes
{
my ($self, $item) = @_;
my ($coll, $memdef) = @$self;
my $schema = $coll->{storage}{schema};
my $coll_tid = $coll->root_table;
my $link_tid = Tangram::Expr::TableAlias->new;
my $coll_col = $memdef->{coll};
my $item_col = $memdef->{item};
my $objects = Set::Object->new
(
$coll,
Tangram::Expr::LinkTable->new($memdef->{table}, $link_tid)
);
my $target;
if (ref $item) {
if ($item->isa('Tangram::Expr::QueryObject'))
{
$target = 't' . $item->object->root_table . '.' . $schema->{sql}{id_col};
$objects->insert( $item->object );
}
else
{
$target = $coll->{storage}->export_object($item)
or die "'$item' is not a persistent object";
}
}
else
{
$target = $item;
}
Tangram::Expr::Filter->new
(
expr => "t$link_tid.$coll_col = t$coll_tid.$schema->{sql}{id_col} AND t$link_tid.$item_col = $target",
tight => 100,
objects => $objects,
link_tid => $link_tid # for Sequence prefetch
);
}
sub includes_or {
my ($self, @items) = @_;
my ($coll, $memdef) = @$self;
my $schema = $coll->{storage}{schema};
my $coll_tid = $coll->root_table;
my $link_tid = Tangram::Expr::TableAlias->new;
my $coll_col = $memdef->{coll};
my $item_col = $memdef->{item};
my $objects = Set::Object->new
($coll,
Tangram::Expr::LinkTable->new($memdef->{table}, $link_tid)
);
my @targets;
foreach my $item (@items) {
if (ref $item) {
if ($item->isa('Tangram::Expr::QueryObject'))
{
push @targets, ('t' . $item->object->root_table.'.'
. $schema->{sql}{id_col});
$objects->insert( $item->object );
}
else
{
push @targets, ($coll->{storage}->export_object($item)
or die "'$item' is not a persistent
object"
);
}
}
else {
push @targets, $item;
}
}
my $joined_targets = join(',', @targets);
Tangram::Expr::Filter->new
(
expr => "t$link_tid.$coll_col = t$coll_tid.$schema->{sql}{id_col} AND t$link_tid.$item_col IN ($joined_targets)",
tight => 100,
objects => $objects,
link_tid => $link_tid # for Sequence prefetch
);
}
use overload
'<' => \&includes,
fallback => 1;
|