Tangram
view release on metacpan or search on metacpan
lib/Tangram/Expr/CursorObject.pm view on Meta::CPAN
package Tangram::Expr::CursorObject;
use strict;
use Carp;
sub new
{
my ($pkg, $storage, $class) = @_;
my $schema = $storage->{schema};
my $classes = $schema->{classes};
$schema->check_class($class);
my @tables;
my $table_hash = { };
my $self = bless { storage => $storage, tables => \@tables, class => $class,
table_hash => $table_hash }, $pkg;
my %seen;
for my $part ($storage->{engine}->get_parts($schema->classdef($class))) {
my $table = $part->{table};
unless (exists $seen{$table}) {
my $id = $seen{$table} = $storage->alloc_table;
#push @tables, [ $part->{name}, $id ];
push @tables, [ $table, $id ];
}
my $id = $seen{$table};
$table_hash->{ $part->{name} } = $id;
$self->{root} ||= $id;
}
# use Data::Dumper; print Dumper \@tables;
# $storage->{schema}->visit_up($class,
# sub
# {
# my $class = shift;
# unless ($classes->{$class}{stateless})
# {
# my $id = $storage->alloc_table;
# push @tables, [ $class, $id ];
# $table_hash->{$class} = $id;
# }
# } );
return $self;
}
# sub copy
# {
# my ($pkg, $other) = @_;
# my $self = { %$other };
# $self->{tables} = [ @{ $self->{tables} } ];
# bless $self, $pkg;
# }
sub storage
{
shift->{storage}
}
sub table
{
my ($self, $class) = @_;
$self->{table_hash}{$class} or confess "no table for $class in stored '$self->{class}'";
}
# sub tables
( run in 2.592 seconds using v1.01-cache-2.11-cpan-0bb4e1dffa6 )