App-Repository
view release on metacpan or search on metacpan
lib/App/Repository.pm view on Meta::CPAN
#############################################################################
## $Id: Repository.pm 10819 2008-02-22 20:48:06Z spadkins $
#############################################################################
package App::Repository;
$VERSION = (q$Revision: 10819 $ =~ /(\d[\d\.]*)/)[0]; # VERSION numbers generated by svn
use App;
use App::Service;
@ISA = ( "App::Service" );
use strict;
use Date::Format;
use App::RepositoryObject;
use App::Reference;
use Time::HiRes qw(gettimeofday);
=head1 NAME
App::Repository - Logical data access layer for the App::Context Framework, providing a uniform API to access data in databases, file systems, remote web sites, etc.
=head1 SYNOPSIS
use App::Repository;
$context = App->context();
$repository = $context->service("Repository"); # or ...
$repository = $context->repository();
$rep = Repository::Base->new(); # looks for %ENV, then config file
$rep = Repository::Base->new("sysdb"); # looks for %ENV, then config file using "sysdb"
$rep2 = $rep->new(); # copies attributes of existing $rep
$rep = Repository::Base->new(@positional_args); # undefined for Repository::Base
$config = {
'repository' => {
'db' => {
'arg1' => 'value1',
'arg2' => 'value2',
},
'rep2' => {
'arg1' => 'value1',
'arg2' => 'value2',
},
},
};
$rep = Repository::Base->new($config);
$rep = Repository::Base->new("rep2",$config);
###################################################################
# The following methods are needed for SQL support
###################################################################
$errmsg = $rep->error(); # returns the error string for prev op ("" if no error)
$numrows = $rep->numrows(); # returns the number of rows affected by prev op
print $rep->error(), "\n";
# DATA TYPE HELPER METHODS
$repdate = $rep->format_repdate($date_string); # free-form date string as entered by a person
# META-DATA: (about the tables)
$rep->_load_rep_metadata();
$rep->_load_table_metadata($tablename);
$typenames = $rep->get_type_names(); # print "@$typenames\n";
$typelabels = $rep->get_type_labels(); # print "%$typelabels\n";
$typedef = $rep->get_type_def($typename); # print "%$type\n";
$tablenames = $rep->get_table_names(); # print "@$tablenames\n";
$tablelabels = $rep->get_table_labels(); # print "%$tablelabels\n";
$table_def = $rep->get_table_def($tablename); # print "%$table\n";
$columnnames = $rep->get_column_names($tablename); # print "@$columnnames\n";
$columnlabels = $rep->get_column_labels($tablename); # print "%$columnlabels\n";
$column_def = $rep->get_column_def($tablename,$columnname); # print "%$column\n";
#################################################
# RELATIONAL
#################################################
... (see App::Repository::DBI) ...
$relation_names = $rep->get_relation_names($table);
$relation_labels = $rep->get_relation_labels($table);
$relation_def = $rep->get_relation_def($table, $relation_name);
@keys = $rep->get_related_keys($table, $key, $relation_name);
#################################################
# OBJECT-ORIENTED
#################################################
# OBJECT-ORIENTED
$class = $table;
$obj = $rep->object($class, $key);
( run in 2.484 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )