dbi::pureperl(3)
NAME
- DBI::PurePerl -- a DBI emulation using pure perl (no C/XS
- compilation required)
SYNOPSIS
BEGIN { $ENV{DBI_PUREPERL} = 2 }
use DBI;
DESCRIPTION
This is a pure perl emulation of the DBI internals. In
almost all cases you will be better off using standard DBI
since the portions of the standard version written in C
make it *much* faster.
However, if you are in a situation where it isn't possible
to install a compiled version of standard DBI, and you're
using pure-perl DBD drivers, then this module allows you
to use most common features of DBI without needing any
changes in your scripts.
EXPERIMENTAL STATUS
DBI::PurePerl is very new so please treat it as experimen
tal pending more extensive testing. So far it has passed
all tests with DBD::CSV, DBD::AnyData, DBD::XBase,
DBD::Sprite, DBD::mysqlPP. Please send bug reports to
Jeff Zucker at <jeff@vpservices.com> with a cc to
<dbi-dev@perl.org>.
USAGE
- The usage is the same as for standard DBI with the excep
tion that you need to set the enviornment variable
DBI_PUREPERL if you want to use the PurePerl version. - DBI_PUREPERL == 0 (the default) Always use compiled DBI,
- die
if it isn't properly compiled & installed
- DBI_PUREPERL == 1 Use compiled DBI if it is properly com
- piled
- & installed, otherwise use PurePerl
- DBI_PUREPERL == 2 Always use PurePerl
- You may set the enviornment variable in your shell (e.g.
with set or setenv or export, etc) or else set it in your
script like this:
BEGIN { $ENV{DBI_PUREPERL}=2 }- before you "use DBI;".
INSTALLATION
In most situations simply install DBI (see the DBI pod for
details).
In the situation in which you can not install DBI itself,
you may manually copy DBI.pm and PurePerl.pm into the
appropriate directories.
- For example:
- cp DBI.pm /usr/jdoe/mylibs/.
cp PurePerl.pm /usr/jdoe/mylibs/DBI/. - Then add this to the top of scripts:
BEGIN {$ENV{DBI_PUREPERL} = 1; # or =2
unshift @INC, '/usr/jdoe/mylibs';- }
- (Or should we perhaps patch Makefile.PL so that if
DBI_PUREPERL is set to 2 prior to make, the normal compile
process is skipped and the files are installed automati
cally?)
DIFFERENCES BETWEEN DBI AND DBI::PurePerl
Attributes
- Some handle attributes are either not supported or have
very limited functionality: - ActiveKids
InactiveDestroy
Kids
Taint
TraceLevel - (and probably others)
- Tracing
- Trace functionality is more limited and the code to handle
tracing is only embeded into DBI:PurePerl if the DBI_TRACE
environment variable is defined. To enable total tracing
you can set the DBI_TRACE environment variable as usual.
But to enable individual handle tracing using the trace() method you also need to set the DBI_TRACE environment
variable, but set it to 0. - Parameter Usage Checking
- The DBI does some basic parameter count checking on method
calls. DBI::PurePerl doesn't. - Speed
- DBI::PurePerl is slower. Although, with some drivers in
some contexts this may not be very significant for you. - By way of example... the test.pl script in the DBI source
distribution has a simple benchmark that just does:
my $null_dbh = DBI->connect('dbi:NullP:','','');
my $i = 10_000;
$null_dbh->prepare('') while $i--;- In other words just prepares a statement, creating and
destroying a statement handle, over and over again. Using
the real DBI this runs at ~4550 handles per second whereas
DBI::PurePerl manages ~2800 per second on the same machine
(not too bad really). - May not fully support hash()
- If you want to use type 1 hash, i.e., "hash($string,1)"
with DBI::PurePerl, you'll need version 1.56 or higher of
Math::BigInt (available on CPAN). - Doesn't support preparse()
- The DBI->preparse() method isn't supported in
DBI::PurePerl. - Doesn't support DBD::Proxy
- There's a subtle problem somewhere I've not been able to
identify. DBI::ProxyServer seem to work fine with
DBI::PurePerl but DBD::Proxy does not work 100% (which is
sad because that would be far more useful :) Try reenabling t/80proxy.t for DBI::PurePerl to see if the prob
lem that remains will affect you're usage. - Undoubtedly Others
- Please let us know if you find any other differences
between DBI and DBI::PurePerl.
AUTHORS
Tim Bunce and Jeff Zucker.
Tim provided the direction and basis for the code. The
original idea for the module and most of the brute force
porting from C to Perl was by Jeff. Tim then reworked some
core parts to boost the performance and accuracy of the
emulation. Thanks also to Randal Schwartz and John Tobey
for patches.
COPYRIGHT
Copyright (c) 2002 Tim Bunce Ireland.
- See COPYRIGHT section in DBI.pm for usage and distribution
rights.