[system] / branches / gage_dev / webwork2 / lib / WeBWorK / DB / Schema / SQL.pm Repository:
ViewVC logotype

Diff of /branches/gage_dev/webwork2/lib/WeBWorK/DB/Schema/SQL.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 972 Revision 1167
2# WeBWorK mod_perl (c) 2000-2002 WeBWorK Project 2# WeBWorK mod_perl (c) 2000-2002 WeBWorK Project
3# $Id$ 3# $Id$
4################################################################################ 4################################################################################
5 5
6package WeBWorK::DB::Schema::SQL; 6package WeBWorK::DB::Schema::SQL;
7use base qw(WeBWorK::DB::Schema);
7 8
8=head1 NAME 9=head1 NAME
9 10
10WeBWorK::DB::Schema::SQL - support SQL access to all tables. 11WeBWorK::DB::Schema::SQL - support SQL access to all tables.
11 12
13 14
14use strict; 15use strict;
15use warnings; 16use warnings;
16use Carp qw(croak); 17use Carp qw(croak);
17 18
18use constant TABLES => qw(password permission key user set set_user problem problem_user); 19use constant TABLES => qw(*);
19use constant STYLE => "sql"; 20use constant STYLE => "dbi";
20 21
21################################################################################ 22################################################################################
22# static functions 23# constructor for SQL-specific behavior
23################################################################################ 24################################################################################
24 25
25sub tables() {
26 return TABLES;
27}
28
29sub style() {
30 return STYLE;
31}
32
33################################################################################
34# constructor
35################################################################################
36
37sub new($$$) { 26sub new {
38 my ($proto, $db, $driver, $table, $record, $params) = @_; 27 my ($proto, $db, $driver, $table, $record, $params) = @_;
39 my $class = ref($proto) || $proto; 28 my $self = $proto->SUPER::new($db, $driver, $table, $record, $params);
40 die "$table: unsupported table" 29
41 unless grep { $_ eq $table } $proto->tables(); 30 # override table name if tableOverride param is given
42 die $driver->style(), ": style mismatch"
43 unless $driver->style() eq $proto->style();
44 my $self = {
45 db => $db,
46 driver => $driver,
47 table => $table,
48 record => $record,
49 params => $params,
50 };
51 $self->{table} = $params->{tableOverride} if $params->{tableOverride}; 31 $self->{table} = $params->{tableOverride} if $params->{tableOverride};
52 bless $self, $class; 32
53 return $self; 33 return $self;
54} 34}
55 35
56################################################################################ 36################################################################################
57# table access functions 37# table access functions
70 my $stmt = "SELECT $keynames FROM $table "; 50 my $stmt = "SELECT $keynames FROM $table ";
71 $stmt .= $self->makeWhereClause(@keyparts); 51 $stmt .= $self->makeWhereClause(@keyparts);
72 $self->debug("SQL-list: $stmt\n"); 52 $self->debug("SQL-list: $stmt\n");
73 53
74 $self->{driver}->connect("ro"); 54 $self->{driver}->connect("ro");
75 my $result = $self->{driver}->handle()->selectall_arrayref($stmt); 55 my $result = $self->{driver}->dbi()->selectall_arrayref($stmt);
76 $self->{driver}->disconnect(); 56 $self->{driver}->disconnect();
77 croak "failed to SELECT: $DBI::errstr" unless defined $result; 57 croak "failed to SELECT: $DBI::errstr" unless defined $result;
78 return @$result; 58 return @$result;
79} 59}
80 60
90 my $stmt = "SELECT COUNT(*) FROM $table "; 70 my $stmt = "SELECT COUNT(*) FROM $table ";
91 $stmt .= $self->makeWhereClause(@keyparts); 71 $stmt .= $self->makeWhereClause(@keyparts);
92 $self->debug("SQL-exists: $stmt\n"); 72 $self->debug("SQL-exists: $stmt\n");
93 73
94 $self->{driver}->connect("ro"); 74 $self->{driver}->connect("ro");
95 my ($result) = $self->{driver}->handle()->selectrow_array($stmt); 75 my ($result) = $self->{driver}->dbi()->selectrow_array($stmt);
96 $self->{driver}->disconnect(); 76 $self->{driver}->disconnect();
97 croak "failed to SELECT: $DBI::errstr" unless defined $result; 77 croak "failed to SELECT: $DBI::errstr" unless defined $result;
98 return $result > 0; 78 return $result > 0;
99} 79}
100 80
119 #no warnings; 99 #no warnings;
120 #$self->debug("SQL-add: fieldvalues=@fieldvalues\n"); 100 #$self->debug("SQL-add: fieldvalues=@fieldvalues\n");
121 #use warnings; 101 #use warnings;
122 102
123 $self->{driver}->connect("rw"); 103 $self->{driver}->connect("rw");
124 my $sth = $self->{driver}->handle()->prepare($stmt); 104 my $sth = $self->{driver}->dbi()->prepare($stmt);
125 my $result = $sth->execute(@fieldvalues); 105 my $result = $sth->execute(@fieldvalues);
126 $self->{driver}->disconnect(); 106 $self->{driver}->disconnect();
127 107
128 unless (defined $result) { 108 unless (defined $result) {
129 my @realKeynames = $self->{record}->KEYFIELDS(); 109 my @realKeynames = $self->{record}->KEYFIELDS();
146 my $stmt = "SELECT * FROM $table "; 126 my $stmt = "SELECT * FROM $table ";
147 $stmt .= $self->makeWhereClause(@keyparts); 127 $stmt .= $self->makeWhereClause(@keyparts);
148 $self->debug("SQL-get: $stmt\n"); 128 $self->debug("SQL-get: $stmt\n");
149 129
150 $self->{driver}->connect("ro"); 130 $self->{driver}->connect("ro");
151 my $result = $self->{driver}->handle()->selectrow_arrayref($stmt); 131 my $result = $self->{driver}->dbi()->selectrow_arrayref($stmt);
152 $self->{driver}->disconnect(); 132 $self->{driver}->disconnect();
153 # $result comes back undefined if there are no matches. hmm... 133 # $result comes back undefined if there are no matches. hmm...
154 #croak "failed to SELECT: $DBI::errstr" unless defined $result; 134 #croak "failed to SELECT: $DBI::errstr" unless defined $result;
155 return undef unless defined $result; 135 return undef unless defined $result;
156 136
188 $stmt .= " "; 168 $stmt .= " ";
189 $stmt .= $self->makeWhereClause(map { $Record->$_() } @realKeynames); 169 $stmt .= $self->makeWhereClause(map { $Record->$_() } @realKeynames);
190 $self->debug("SQL-put: $stmt\n"); 170 $self->debug("SQL-put: $stmt\n");
191 171
192 $self->{driver}->connect("rw"); 172 $self->{driver}->connect("rw");
193 my $sth = $self->{driver}->handle()->prepare($stmt); 173 my $sth = $self->{driver}->dbi()->prepare($stmt);
194 my $result = $sth->execute(@fieldvalues); 174 my $result = $sth->execute(@fieldvalues);
195 $self->{driver}->disconnect(); 175 $self->{driver}->disconnect();
196 176
197 unless (defined $result) { 177 unless (defined $result) {
198 #my @realKeynames = $self->{record}->KEYFIELDS(); 178 #my @realKeynames = $self->{record}->KEYFIELDS();
218 my $stmt = "DELETE FROM $table "; 198 my $stmt = "DELETE FROM $table ";
219 $stmt .= $self->makeWhereClause(@keyparts); 199 $stmt .= $self->makeWhereClause(@keyparts);
220 $self->debug("SQL-delete: $stmt\n"); 200 $self->debug("SQL-delete: $stmt\n");
221 201
222 $self->{driver}->connect("rw"); 202 $self->{driver}->connect("rw");
223 my $result = $self->{driver}->handle()->do($stmt); 203 my $result = $self->{driver}->dbi()->do($stmt);
224 $self->{driver}->disconnect(); 204 $self->{driver}->disconnect();
225 croak "failed to DELETE: $DBI::errstr" unless defined $result; 205 croak "failed to DELETE: $DBI::errstr" unless defined $result;
226 206
227 if ($result > 1) { 207 if ($result > 1) {
228 warn "danger! deleted more than one record!"; 208 warn "danger! deleted more than one record!";

Legend:
Removed from v.972  
changed lines
  Added in v.1167

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9