Copyright (C) 2000-2012 |
Manpages DBD::ProxySection: User Contributed Perl Documentation (3)Updated: 2002-01-21 Index Return to Main Contents NAMEDBD::Proxy - A proxy driver for the DBISYNOPSISuse DBI; $dbh = DBI->connect("dbi:Proxy:hostname=$host;port=$port;dsn=$db", $user, $passwd); # See the DBI module documentation for full details DESCRIPTIONDBD::Proxy is a Perl module for connecting to a database via a remote DBI driver.This is of course not needed for DBI drivers which already support connecting to a remote database, but there are engines which don't offer network connectivity. Another application is offering database access through a firewall, as the driver offers query based restrictions. For example you can restrict queries to exactly those that are used in a given CGI application. Speaking of CGI, another application is (or rather, will be) to reduce the database connect/disconnect overhead from CGI scripts by using proxying the connect_cached method. The proxy server will hold the database connections open in a cache. The CGI script then trades the database connect/disconnect overhead for the DBD::Proxy connect/disconnect overhead which is typically much less. Note that the connect_cached method is new and still experimental. CONNECTING TO THE DATABASEBefore connecting to a remote database, you must ensure, that a Proxy server is running on the remote machine. There's no default port, so you have to ask your system administrator for the port number. See DBI::ProxyServer(3) for details.Say, your Proxy server is running on machine ``alpha'', port 3334, and you'd like to connect to an ODBC database called ``mydb'' as user ``joe'' with password ``hello''. When using DBD::ODBC directly, you'd do a
$dbh = DBI->connect("DBI:ODBC:mydb", "joe", "hello");With DBD::Proxy this becomes
$dsn = "DBI:Proxy:hostname=alpha;port=3334;dsn=DBI:ODBC:mydb"; $dbh = DBI->connect($dsn, "joe", "hello");You see, this is mainly the same. The DBD::Proxy module will create a connection to the Proxy server on ``alpha'' which in turn will connect to the ODBC database. Refer to the DBI(3) documentation on the "connect" method for a way to automatically use DBD::Proxy without having to change your code. DBD::Proxy's DSN string has the format
$dsn = "DBI:Proxy:key1=val1; ... ;keyN=valN;dsn=valDSN";In other words, it is a collection of key/value pairs. The following keys are recognized:
KNOWN ISSUESComplex handle attributesSometimes handles are having complex attributes like hash refs or array refs and not simple strings or integers. For example, with DBD::CSV, you would like to write something like
$dbh->{"csv_tables"}->{"passwd"} = { "sep_char" => ":", "eol" => "\n";The above example would advice the CSV driver to assume the file ``passwd'' to be in the format of the /etc/passwd file: Colons as separators and a line feed without carriage return as line terminator. Surprisingly this example doesn't work with the proxy driver. To understand the reasons, you should consider the following: The Perl compiler is executing the above example in two steps:
This becomes a little bit clearer, if we rewrite the above code:
$tables = $dbh->{"csv_tables"}; $tables->{"passwd"} = { "sep_char" => ":", "eol" => "\n";While the examples work fine without the proxy, the fail due to a subtile difference in step 1: By DBI magic, the hash ref $dbh->{'csv_tables'} is returned from the server to the client. The client creates a local copy. This local copy is the result of step 1. In other words, step 2 modifies a local copy of the hash ref, but not the server's hash ref. The workaround is storing the modified local copy back to the server:
$tables = $dbh->{"csv_tables"}; $tables->{"passwd"} = { "sep_char" => ":", "eol" => "\n"; $dbh->{"csv_tables"} = $tables; AUTHOR AND COPYRIGHTThis module is Copyright (c) 1997, 1998
Jochen Wiedmann Am Eisteich 9 72555 Metzingen Germany Email: joe@ispsoft.de Phone: +49 7123 14887The DBD::Proxy module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. In particular permission is granted to Tim Bunce for distributing this as a part of the DBI. SEE ALSODBI(3), RPC::PlClient(3), Storable(3)
Index
This document was created by man2html, using the manual pages. Time: 14:07:26 GMT, December 14, 2024 |