AnyData

 view release on metacpan or  search on metacpan

lib/AnyData.pm  view on Meta::CPAN

    die "No table defined" unless $table;
    my $ad = tied(%$table)->{ad};
    my @cols = @{ $ad->col_names };
    print "<",join(":", @cols), ">\n";
    while (my $row = each %$table) {
        my @row  = map {defined $row->{$_} ? $row->{$_} : ''} @cols;
        for (@row) { print "[$_]"; }
        print  "\n";
    }
}

sub adRows {
    my $thash = shift;
    my %keys  = @_;
    my $obj   = tied(%$thash);
    return $obj->adRows(\%keys);
}
sub adColumn {
    my $thash  = shift;
    my $column = shift;
    my $flags = shift;
    my $obj    = tied(%$thash);
    return $obj->adColumn($column, $flags);
}
sub adArray {
    my($format,$data)=@_;
    my $t = adTie( $format, $data );
    my $t1 = tied(%$t);
    my $ad = $t1->{ad};
    my $arrayref = $ad->{storage}->{records};
    unshift @$arrayref, $ad->{storage}->{col_names};
    return $arrayref;
}
##################################################################
# END OF TIEDHASH STUFF
##################################################################
sub parser_type {
    my $type = ref shift->{parser};
    $type =~ s/AnyData::Format::(.*)/$1/;
    return $type;
}
sub zpack {
    my $self = shift;
    return if $self->{storage}->{no_pack};
    return if (ref $self->{storage} ) !~ /File$/;

#    return unless $self->{needs_packing};
#    $self->{needs_packing} = 0;
    return unless scalar(keys %{ $self->{storage}->{deleted} } );
    $self->{needs_packing} = 0;
    #    my @callA = caller 2;
    #    my @callB = caller 3;
    #    return if $callA[3] =~ /DBD/;
    #    return if $callB[3] and $callB[3] =~ /SQL::Statement/;
    #    return if $self->{parser}->{export_on_close};
    #print "PACKING";
    my $bak_file = $self->{storage}->get_file_name . '.bak';
    my $bak = adTable( 'Text', $bak_file, 'o' );
    my $bak_fh = $bak->{storage}->get_file_handle;
    my $fh     = $self->{storage}->get_file_handle;
    die "Can't pack to backup $!" unless $fh and $bak_fh;
    # $self->seek_first_record;
    $fh->seek(0,0) || die $!;
    #$bak_fh->seek(0,0) || die $!;
#    while (my $line = $self->get_record) {
#        next if $self->is_deleted($line);
    while (my $line = $self->get_undeleted_record) {
        my $tmpstr = $bak->{parser}->write_fields($line)
                   . $self->{parser}->{record_sep};
        $bak_fh->write($tmpstr,length $tmpstr);
    }
    $fh->seek(0,0);
    $fh->truncate(0) || die $!;
    $bak->seek_first_record;
    while (<$bak_fh>) {
        $fh->write($_,length $_);
    }
    $fh->close;
    $bak_fh->close;
    $self->{doing_pack} = 0;
    undef $self->{storage}->{deleted};
}

##########################################################
#  FUNCTION CALL INTERFACE
##########################################################
sub adTie {
    my($format,$file,$read_mode,$flags)=@_;
    my $data;
    if (ref $file eq 'ARRAY' && !$read_mode ) { $read_mode = 'u'; }
    # ARRAY only {data=>[]};
    if (scalar @_ == 1){
        $read_mode = 'o';
        tie %$data,
            'AnyData::Storage::TiedHash',
            adTable($format),
            $read_mode;
        return $data;
    }
    tie %$data,
        'AnyData::Storage::TiedHash',
        adTable($format,$file,$read_mode,undef,$flags),
        $read_mode;
    return $data;
}
sub adErr {
    my $hash = shift;
    my $t = tied(%$hash);
    my $errstr = $t->{ad}->{parser}->{errstr}
        || $t->{ad}->{storage}->{errstr};
    print $errstr if $errstr;
    return $errstr;
}
sub adExport {
    my $tiedhash  = shift;
    my($tformat,$tfile,$tflags)=@_;
    my $ad = tied(%$tiedhash)->{ad};
    my $sformat = ref $ad->{parser};
    $sformat =~ s/AnyData::Format:://;
    $tformat ||= $sformat;
    if ($tformat eq $sformat and $tformat eq 'XML') {



( run in 1.999 second using v1.01-cache-2.11-cpan-39bf76dae61 )