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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

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