SQL-Exec
view release on metacpan or search on metacpan
lib/SQL/Exec.pm view on Meta::CPAN
the C<$dsn> argument, with the supplied C<$user> and C<$password> if necessary.
The syntax of the C<$dsn> argument is described in the manual of your C<DBD>
driver. However, you will probably want to use one of the existing sub-classes of
this module to assist you in connecting to some specific database.
The C<%opts> argument is optionnal and may be given as a hash or as a hash
reference. If the argument is given it set accordingly the option of the object
being created. See the L</"set_options"> method for a description of the available
options.
If your DB has a specific support in a L<sub-classe|/"Sub-classes"> you must
use its specific constructor to get the additionnal benefits it will offer.
=head2 new_no_connect
my $h = SQL::Exec->new_no_connect(%opts);
This constructor creates a C<SQL::Exec> object without connecting it to any
database. You will need to call the L</"connect"> option on the handle to connect
it to a database.
The C<%opts> argument is optionnal and is the same as for the C<new> constructor.
=head2 destructor
Whenever you have finished working with a database connection you may close it
(see the L</"disconnect"> function) or you may just let go of the database handle.
There is a C<DESTROY> method in this package which will take care of closing the
database connection correctly whenever your handle is garbage collected.
=cut
# Les options que l'on donne à new, sont valable pour l'objet, pas juste
# pour l'appel de fonctions/méthode, comme les autres fonctions.
# Les options sont a fixer à chaque création d'objet (indépendamment de l'objet
# par défaut).
# A constructor which will not connect
sub new_no_connect {
my ($class, @opt) = @_;
my $c = get_empty();
bless $c, $class;
$c->set_options(@opt);
return $c;
}
# dans le cas ou la connection échoue, l'objet est quand même créée et renvoyé
# si jamais on ignore les erreurs.
sub new {
my ($class, @args) = @_;
my ($con_str, $user, $pwd, @opt) = $class->build_connect_args(@args);
my $c = new_no_connect($class, @opt);
$c->__connect($con_str, $user, $pwd);
return $c;
}
# This bless the default handle. The handle is blessed again if it is
# connected in a sub classe.
UNITCHECK {
$default_handle = __PACKAGE__->new_no_connect();
}
sub DESTROY {
my $c = shift;
$c->__disconnect() if $c->{is_connected};
}
################################################################################
################################################################################
## ##
## INTERNAL METHODS ##
##Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â ##
################################################################################
################################################################################
# The methods in this section are for internal use only by this package
# or by subclasses. The functions here ARE methods and must be called explicitely
# on an instance of this class (or of one of its sub-classes).
# The purpose of this function is to be overidden in sub-classes which would
# take a different set of argument for their constructors without having to
# redefine the constructor itself.
sub build_connect_args {
my ($class, $con_str, $user, $pwd, @opt) = @_;
return ($con_str, $user, $pwd, @opt);
}
# This method must be called when an error condition happen. It croaks, carps or
# does nothing depending on the current option. It also set the errstr variable.
sub error {
my ($c, $msg, @args) = @_;
$c->{errstr} = sprintf $msg, @args;
$c->{parent}{errstr} = $c->{errstr} if $c->{parent};
if ($c->{options}{die_on_error}) {
croak $c->{errstr};
} elsif ($c->{options}{print_error}) {
carp $c->{errstr};
}
return;
}
# Same thing but for warning which may only be printed.
sub warning {
my ($c, $msg, @args) = @_;
$c->{warnstr} = sprintf $msg, @args;
$c->{parent}{warnstr} = $c->{warnstr} if $c->{parent};
if ($c->{options}{print_warning}) {
carp $c->{warnstr};
}
( run in 1.793 second using v1.01-cache-2.11-cpan-39bf76dae61 )