| Oryx documentation | Contained in the Oryx distribution. |
Oryx::DBM - DBM Storage interface for Oryx
my $storage = Oryx::DBM->new; $storage->connect([ 'dbm:Deep:datapath=/path/to/datafiles' ]); $storage->dbh; $storage->db_name; $storage->ping; $storage->schema; $storage->util; $storage->set_util; $storage->deploy_class; $storage->deploy_schema;
DBM Storage interface for Oryx. You should not need to instantiate
this directly, use Oryx->connect() instead.
Simple constructor
stub - returns $self
Called by Oryx->connect(). You shouldn't need to be doing this.
DBM::Deep instance for holding the catalog of tables. This is a sort of global internal store for the DBM backend for keeping meta data which it needs.
ping the database - all this does here is make sure the catalog
exists and is a DBM::Deep instance
returns the schema if called with no arguments, otherwise sets if called with a Oryx::Schema instance.
returns the schema if called with no arguments, otherwise sets if called with a Oryx::Schema instance.
determines which Oryx::DBI::Util class to instantiate
by looking at the dsn passed to connect and sets it
Takes a Oryx::Schema instance and deploys all classes seen by that schema instance to the database creating all DBM::Deep db files needed for storing your persistent objects.
does the work of deploying a given class; called by deploy_schema
Copyright (C) 2005 Richard Hundt <richard NO SPAM AT protea-systems.com>
This library is free software and may be used under the same terms as Perl itself.
| Oryx documentation | Contained in the Oryx distribution. |
package Oryx::DBM; use DBM::Deep; use Oryx::DBM::Class; use Oryx::DBM::Util; use Oryx::Class; use base qw(Oryx Oryx::MetaClass); __PACKAGE__->mk_classdata("datapath"); our $DEBUG = 0;
sub new { my $class = shift; return bless { }, $class; }
sub dbh { $_[0] } sub commit { }
# $conn looks like this : ["dbm:Deep:datapath=/path/to/data"] sub connect { my ($self, $conn, $schema) = @_; if ($conn->[0] =~ /^dbm:Deep:datapath=(.+)$/) { $self->_croak('ERROR: connect called without a datapath') unless $1; $self->datapath($1); } else { $self->_croak("ERROR: bad dsn $conn->[0]"); } $self->catalog(DBM::Deep->new($self->datapath.'/oryx_catalog')); $self->init('Oryx::DBM::Class', $conn, $schema); return $self; }
sub catalog { $_[0]->{catalog} = $_[1] if $_[1]; $_[0]->{catalog} }
sub ping { my $self = shift; return UNIVERSAL::isa($self->catalog, 'DBM::Deep'); }
sub schema { my $self = shift; $self->{schema} = shift if @_; $self->{schema}; }
sub util { my $self = shift; $self->{util} = shift if @_; $self->{util}; }
sub set_util { my $self = shift; $self->util( Oryx::DBM::Util->new ); }
sub deploy_schema { my ($self, $schema) = @_; $schema = $self->schema unless defined $schema; $DEBUG && $self->_carp( "deploy_schema $schema : classes => ".join(",\n", $schema->classes) ); unless (-d $self->datapath) { mkdir $self->datapath; } foreach my $class ($schema->classes) { $self->deploy_class($class); } }
sub deploy_class { my ($self, $class) = @_; $DEBUG && $self->_carp("DEPLOYING $class"); $self->util->table_create($self, $class->table); } 1;