package Rose::DB::Registry::Entry; use strict; use Clone::PP(); use Rose::Object; our @ISA = qw(Rose::Object); our $VERSION = '0.729'; our $Debug = 0; # # Object data # use Rose::Object::MakeMethods::Generic ( 'scalar' => [ qw(database domain dsn dbi_driver host password port server_time_zone schema catalog type username description) ], 'boolean' => [ 'auto_create' => { default => 1 }, 'european_dates' => { default => 0 }, ], 'hash' => [ 'connect_options' => { interface => 'get_set_init' }, 'connect_option' => { hash_key => 'connect_options' }, ], 'array' => [ 'pre_disconnect_sql', 'post_connect_sql', ] ); sub init_connect_options { {} } sub autocommit { shift->connect_option('AutoCommit', @_) } sub print_error { shift->connect_option('PrintError', @_) } sub raise_error { shift->connect_option('RaiseError', @_) } sub driver { my($self) = shift; return $self->{'driver'} unless(@_); $self->{'dbi_driver'} = shift; return $self->{'driver'} = lc $self->{'dbi_driver'}; } sub dump { my($self) = shift; my %dump; foreach my $attr (qw(database dsn driver host password port description server_time_zone schema catalog type username connect_options pre_disconnect_sql post_connect_sql)) { my $value = $self->$attr(); next unless(defined $value); $dump{$attr} = Clone::PP::clone($value); } # These booleans have default, but we only want the ones # where the values were explicitly set. Ugly... foreach my $attr (qw(auto_create european_dates)) { my $value = $self->{$attr}; next unless(defined $value); $dump{$attr} = Clone::PP::clone($value); } return \%dump; } sub clone { Clone::PP::clone($_[0]) } 1; __END__ =head1 NAME Rose::DB::Registry::Entry - Data source registry entry. =head1 SYNOPSIS use Rose::DB::Registry::Entry; $entry = Rose::DB::Registry::Entry->new( domain => 'production', type => 'main', driver => 'Pg', database => 'big_db', host => 'dbserver.acme.com', username => 'dbadmin', password => 'prodsecret', server_time_zone => 'UTC'); Rose::DB->register_db($entry); # ...or... Rose::DB->registry->add_entry($entry); ... =head1 DESCRIPTION C objects store information about a single L data source. See the L documentation for more information on data sources, and the L documentation to learn how C objects are managed. C inherits from, and follows the conventions of, L. See the L documentation for more information. =head1 CONSTRUCTOR =over 4 =item B Constructs a C object based on PARAMS, where PARAMS are name/value pairs. Any object method is a valid parameter name. =back =head1 OBJECT METHODS =over 4 =item B Get or set the value of the "AutoCommit" connect option. =item B Get or set the database catalog name. This setting is only relevant to databases that support the concept of catalogs. =item B Returns a clone (i.e., deep copy) of the current object. =item B Get or set the connect option named NAME. Returns the current value of the connect option. =item B Get or set the options passed in a hash reference as the fourth argument to the call to Cconnect()>. See the C documentation for descriptions of the various options. If a reference to a hash is passed, it replaces the connect options hash. If a series of name/value pairs are passed, they are added to the connect options hash. Returns a reference to the hash of options in scalar context, or a list of name/value pairs in list context. =item B Get or set the database name. =item B A description of the data source. =item B Get or set the data source domain. Note that changing the C after a registry entry has been added to the registry has no affect on where the entry appears in the registry. =item B Get or set the driver name. The DRIVER argument is converted to lowercase before being set. =item B Get or set the C DSN (Data Source Name). Note that an explicitly set DSN may render some other attributes inaccurate. For example, the DSN may contain a host name that is different than the object's current C value. I recommend not setting the DSN value explicitly unless you are also willing to manually synchronize (or ignore) the corresponding object attributes. =item B Returns a reference to a hash of the entry's attributes. Only those attributes with defined values are included in the hash keys. All values are deep copies. =item B Get or set the database server host name. =item B Get or set the database password. =item B Get or set the database server port number. =item B Get or set the SQL statements that will be run immediately before disconnecting from the database. STATEMENTS should be a list or reference to an array of SQL statements. Returns a reference to the array of SQL statements in scalar context, or a list of SQL statements in list context. =item B Get or set the SQL statements that will be run immediately after connecting to the database. STATEMENTS should be a list or reference to an array of SQL statements. Returns a reference to the array of SQL statements in scalar context, or a list of SQL statements in list context. =item B Get or set the value of the "PrintError" connect option. =item B Get or set the value of the "RaiseError" connect option. =item B Get or set the database schema name. This setting is only useful to databases that support the concept of schemas (e.g., PostgreSQL). =item B Get or set the time zone used by the database server software. TZ should be a time zone name that is understood by C. See the C documentation for acceptable values of TZ. =item B Get or set the data source type. Note that changing the C after a registry entry has been added to the registry has no affect on where the entry appears in the registry. =item B Get or set the database username. =back =head1 AUTHOR John C. Siracusa (siracusa@mindspring.com) =head1 COPYRIGHT Copyright (c) 2007 by John C. Siracusa. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.