📄 base.pm
字号:
package DBD::Gofer::Policy::Base;# $Id: Base.pm 10087 2007-10-16 12:42:37Z timbo $## Copyright (c) 2007, Tim Bunce, Ireland## You may distribute under the terms of either the GNU General Public# License or the Artistic License, as specified in the Perl README file.use strict;use warnings;use Carp;our $VERSION = sprintf("0.%06d", q$Revision: 10087 $ =~ /(\d+)/o);our $AUTOLOAD;my %policy_defaults = ( # force connect method (unless overridden by go_connect_method=>'...' attribute) # if false: call same method on client as on server connect_method => 'connect', # force prepare method (unless overridden by go_prepare_method=>'...' attribute) # if false: call same method on client as on server prepare_method => 'prepare', skip_connect_check => 0, skip_default_methods => 0, skip_prepare_check => 0, skip_ping => 0, dbh_attribute_update => 'every', dbh_attribute_list => ['*'], locally_quote => 0, locally_quote_identifier => 0, cache_parse_trace_flags => 1, cache_parse_trace_flag => 1, cache_data_sources => 1, cache_type_info_all => 1, cache_tables => 0, cache_table_info => 0, cache_column_info => 0, cache_primary_key_info => 0, cache_foreign_key_info => 0, cache_statistics_info => 0, cache_get_info => 0, cache_func => 0,);my $base_policy_file = $INC{"DBD/Gofer/Policy/Base.pm"};__PACKAGE__->create_policy_subs(\%policy_defaults);sub create_policy_subs { my ($class, $policy_defaults) = @_; while ( my ($policy_name, $policy_default) = each %$policy_defaults) { my $policy_attr_name = "go_$policy_name"; my $sub = sub { # $policy->foo($attr, ...) #carp "$policy_name($_[1],...)"; # return the policy default value unless an attribute overrides it return (ref $_[1] && exists $_[1]->{$policy_attr_name}) ? $_[1]->{$policy_attr_name} : $policy_default; }; no strict 'refs'; *{$class . '::' . $policy_name} = $sub; }}sub AUTOLOAD { carp "Unknown policy name $AUTOLOAD used"; # only warn once no strict 'refs'; *$AUTOLOAD = sub { undef }; return undef;}sub new { my ($class, $args) = @_; my $policy = {}; bless $policy, $class;}sub DESTROY { };1;=head1 NAMEDBD::Gofer::Policy::Base - Base class for DBD::Gofer policies=head1 SYNOPSIS $dbh = DBI->connect("dbi:Gofer:transport=...;policy=...", ...)=head1 DESCRIPTIONDBD::Gofer can be configured via a 'policy' mechanism that allows you tofine-tune the number of round-trips to the Gofer server. The policies aregrouped into classes (which may be subclassed) and referenced by the name ofthe class.The L<DBD::Gofer::Policy::Base> class is the base class for all the policyclasses and describes all the individual policy items.The Base policy is not used directly. You should use a policy class derived from it.=head1 POLICY CLASSESThree policy classes are supplied with DBD::Gofer: L<DBD::Gofer::Policy::pedantic> is most 'transparent' but slowest because itmakes more round-trips to the Gofer server.L<DBD::Gofer::Policy::classic> is a reasonable compromise - it's the default policy. L<DBD::Gofer::Policy::rush> is fastest, but may require code changes in your applications.Generally the default C<classic> policy is fine. When first testing an existingapplication with Gofer it is a good idea to start with the C<pedantic> policyfirst and then switch to C<classic> or a custom policy, for final testing.=head1 POLICY ITEMSThese are temporary docs: See the source code for list of policies and their defaults.In a future version the policies and their defaults will be defined in the pod and parsed out at load-time.See the source code to this module for more details.=head1 POLICY CUSTOMIZATIONXXX This area of DBD::Gofer is subject to change.There are three ways to customize policies:Policy classes are designed to influence the overall behaviour of DBD::Goferwith existing, unaltered programs, so they work in a reasonably optimal waywithout requiring code changes. You can implement new policy classes assubclasses of existing policies.In many cases individual policy items can be overridden on a case-by-case basiswithin your application code. You do this by passing a correspondingC<<go_<policy_name>>> attribute into DBI methods by your application code.This let's you fine-tune the behaviour for special cases.The policy items are implemented as methods. In many cases the methods arepassed parameters relating to the DBD::Gofer code being executed. This meansthe policy can implement dynamic behaviour that varies depending on theparticular circumstances, such as the particular statement being executed.=head1 AUTHORTim Bunce, L<http://www.tim.bunce.name>=head1 LICENCE AND COPYRIGHTCopyright (c) 2007, Tim Bunce, Ireland. All rights reserved.This module is free software; you can redistribute it and/ormodify it under the same terms as Perl itself. See L<perlartistic>.=cut
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -