/[cvs]/nfo/perl/libs/Data/Storage/Handler/DBI.pm
ViewVC logotype

Annotation of /nfo/perl/libs/Data/Storage/Handler/DBI.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations)
Thu Oct 10 03:44:07 2002 UTC (21 years, 9 months ago) by cvsjoko
Branch: MAIN
+ new

1 cvsjoko 1.1 #################################
2     #
3     # $Id$
4     #
5     # $Log$
6     #
7     #################################
8    
9     package Data::Storage::Handler::DBI;
10    
11     use strict;
12     use warnings;
13    
14     use base ("Data::Storage::Handler::Abstract");
15    
16     use DBI;
17    
18     # get logger instance
19     my $logger = Log::Dispatch::Config->instance;
20    
21    
22     our $metainfo = {
23     'disconnectMethod' => 'disconnect',
24     };
25    
26     sub connect {
27    
28     my $self = shift;
29    
30     # create handle
31     if ( my $dsn = $self->{dbi}->{dsn} ) {
32     $logger->debug( __PACKAGE__ . "->connect($dsn)" );
33     $self->{COREHANDLE} = DBI->connect($dsn);
34     }
35     $self->configureCOREHANDLE();
36    
37     }
38    
39     sub configureCOREHANDLE {
40    
41     my $self = shift;
42    
43     $logger->debug( __PACKAGE__ . "->_configureCOREHANDLE" );
44    
45     # apply configured modifications
46     if (exists $self->{dbi}->{trace_level} && exists $self->{dbi}->{trace_file}) {
47     $self->{COREHANDLE}->trace($self->{dbi}->{trace_level}, $self->{dbi}->{trace_file});
48     }
49     if (exists $self->{dbi}->{RaiseError}) {
50     $self->{COREHANDLE}->{RaiseError} = $self->{dbi}->{RaiseError};
51     }
52     if (exists $self->{dbi}->{PrintError}) {
53     $self->{COREHANDLE}->{PrintError} = $self->{dbi}->{PrintError};
54     }
55     if (exists $self->{dbi}->{HandleError}) {
56     $self->{COREHANDLE}->{HandleError} = $self->{dbi}->{HandleError};
57     }
58    
59     }
60    
61     sub _sendSql {
62     my $self = shift;
63     my $sql = shift;
64     my $sth = $self->{COREHANDLE}->prepare($sql);
65     $sth->execute();
66     return $sth;
67     }
68    
69     sub sendCommand {
70     my $self = shift;
71     my $command = shift;
72     my $cmdHandle = $self->_sendSql($command);
73     my $result = Data::Storage::Result::DBI->new( RESULTHANDLE => $cmdHandle );
74     return $result;
75     }
76    
77     sub quoteSql {
78     my $self = shift;
79     my $string = shift;
80     if ($string) {
81     $string =~ s/'/\\'/g;
82     }
83     return $string;
84     }
85    
86     sub hash2Sql {
87    
88     my $self = shift;
89    
90     my $table = shift;
91     my $hash = shift;
92     my $mode = shift;
93     my $crit = shift;
94    
95     my $sql;
96     if ($mode eq 'SQL_INSERT') {
97     $sql = "INSERT INTO $table (#fields#) VALUES (#values#);";
98     }
99     if ($mode eq 'SQL_UPDATE') {
100     $sql = "UPDATE $table SET #fields-values# WHERE $crit;";
101     }
102    
103     my (@fields, @values);
104     foreach my $key (keys %{$hash}) {
105     push @fields, $key;
106     push @values, $hash->{$key};
107     }
108     # quote each element
109     map { if (defined $_) { $_ = "'$_'" } else { $_ = "null" } } @values;
110    
111     my $fields = join(', ', @fields);
112     my $values = join(', ', @values);
113     my $fields_values = '';
114     my $fc = 0;
115     foreach (@fields) {
116     $fields_values .= $_ . '=' . $values[$fc] . ', ';
117     $fc++;
118     }
119     $fields_values = substr($fields_values, 0, -2);
120    
121     $sql =~ s/#fields#/$fields/;
122     $sql =~ s/#values#/$values/;
123     $sql =~ s/#fields-values#/$fields_values/;
124    
125     return $sql;
126     }
127    
128    
129     sub getChildNodes {
130    
131     my $self = shift;
132     my @nodes;
133    
134     if (my $result = $self->sendCommand( 'SHOW TABLES;' ) ) {
135     while ( my $row = $result->_getNextEntry() ) {
136     push @nodes, $row;
137     }
138     }
139    
140     return \@nodes;
141    
142     }
143    
144    
145    
146    
147     package Data::Storage::Result::DBI;
148    
149     use strict;
150     use warnings;
151    
152     use base ("Data::Storage::Result");
153    
154     sub DESTROY {
155     my $self = shift;
156     #$logger->debug( __PACKAGE__ . "->" . "DESTROY" );
157     $self->{RESULTHANDLE}->finish();
158     }
159    
160     sub _getNextEntry {
161     my $self = shift;
162     return $self->{RESULTHANDLE}->fetchrow_hashref;
163     }
164    
165    
166     1;

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed