... | ... |
@@ -149,11 +149,32 @@ sub run_tranzaction { |
149 | 149 |
$self->_auto_commit(1); |
150 | 150 |
} |
151 | 151 |
|
152 |
+sub prepare { |
|
153 |
+ my ($self, $sql) = @_; |
|
154 |
+ eval{$self->connect unless $self->connected}; |
|
155 |
+ croak($@) if $@; |
|
156 |
+ |
|
157 |
+ my $sth = eval{$self->dbh->prepare($sql)}; |
|
158 |
+ croak($@) if $@; |
|
159 |
+ return $sth; |
|
160 |
+} |
|
161 |
+ |
|
162 |
+sub do{ |
|
163 |
+ my ($self, $sql, @bind_values) = @_; |
|
164 |
+ eval{$self->connect unless $self->connected}; |
|
165 |
+ croak($@) if $@; |
|
166 |
+ |
|
167 |
+ eval{$self->dbh->do($sql, @bind_values)}; |
|
168 |
+ croak($@) if $@; |
|
169 |
+} |
|
170 |
+ |
|
152 | 171 |
sub create_query { |
153 | 172 |
my ($self, $template) = @_; |
154 | 173 |
|
155 | 174 |
# Create query from SQL template |
156 |
- my $query = $self->sql_template->create_query($template); |
|
175 |
+ my $sql_template = $self->sql_template; |
|
176 |
+ my $query = eval{$sql_template->create_query($template)}; |
|
177 |
+ croak($@) if $@; |
|
157 | 178 |
|
158 | 179 |
# Create Query object; |
159 | 180 |
$query = DBI::Custom::Query->new($query); |
... | ... |
@@ -162,7 +183,8 @@ sub create_query { |
162 | 183 |
$self->connect unless $self->connected; |
163 | 184 |
|
164 | 185 |
# Prepare statement handle |
165 |
- my $sth = $self->dbh->prepare($query->{sql}); |
|
186 |
+ my $sth = eval{$self->dbh->prepare($query->{sql})}; |
|
187 |
+ croak($@) if $@; |
|
166 | 188 |
|
167 | 189 |
# Set statement handle |
168 | 190 |
$query->sth($sth); |
... | ... |
@@ -344,6 +366,18 @@ Version 0.0101 |
344 | 366 |
|
345 | 367 |
dbi_options is used when you connect database by using connect. |
346 | 368 |
|
369 |
+=head2 prepare |
|
370 |
+ |
|
371 |
+ $sth = $dbi->prepare($sql); |
|
372 |
+ |
|
373 |
+This method is same as DBI::prepare |
|
374 |
+ |
|
375 |
+=head2 do |
|
376 |
+ |
|
377 |
+ $dbi->do($sql, @bind_values); |
|
378 |
+ |
|
379 |
+This method is same as DBI::do |
|
380 |
+ |
|
347 | 381 |
=head2 sql_template |
348 | 382 |
|
349 | 383 |
# Set and get SQL::Template object |
... | ... |
@@ -20,6 +20,10 @@ sub test { |
20 | 20 |
} |
21 | 21 |
|
22 | 22 |
# Varialbes for test |
23 |
+our $CREATE_TABLE = { |
|
24 |
+ 0 => 'create table table1 (key1 char(255), key2 char(255));' |
|
25 |
+}; |
|
26 |
+ |
|
23 | 27 |
my $dbi; |
24 | 28 |
my $sth; |
25 | 29 |
my $tmpl; |
... | ... |
@@ -33,14 +37,15 @@ my $rows; |
33 | 37 |
my $query; |
34 | 38 |
my $select_query; |
35 | 39 |
my $insert_query; |
40 |
+my $ret_val; |
|
36 | 41 |
|
37 | 42 |
|
38 | 43 |
|
39 | 44 |
# Prepare table |
40 | 45 |
$dbi = DBI::Custom->new(data_source => 'dbi:SQLite:dbname=:memory:'); |
41 | 46 |
$dbi->connect; |
42 |
-$dbi->dbh->do("create table table1 (key1 char(255), key2 char(255))"); |
|
43 |
-$sth = $dbi->dbh->prepare("insert into table1 (key1, key2) values (?, ?);"); |
|
47 |
+$dbi->do($CREATE_TABLE->{0}); |
|
48 |
+$sth = $dbi->prepare("insert into table1 (key1, key2) values (?, ?);"); |
|
44 | 49 |
$sth->execute(1, 2); |
45 | 50 |
$sth->execute(3, 4); |
46 | 51 |
|
... | ... |
@@ -104,22 +109,36 @@ __END__ |
104 | 109 |
|
105 | 110 |
test 'Filter'; |
106 | 111 |
$dbi->reconnect; |
107 |
-$dbi->dbh->do("create table table1 (key1 char(255), key2 char(255));"); |
|
112 |
+$dbi->dbh->do($CREATE_TABLE->{0}); |
|
108 | 113 |
|
109 |
-$tmpl = "insert into {insert_values key1 key2};"; |
|
110 |
-$query = $dbi->create_query($tmpl); |
|
111 |
-$query->bind_filter(sub { |
|
114 |
+$insert_tmpl = "insert into table1 {insert_values key1 key2};"; |
|
115 |
+$insert_query = $dbi->create_query($insert_tmpl); |
|
116 |
+$insert_query->bind_filter(sub { |
|
112 | 117 |
my ($key, $value) = @_; |
113 |
- if ($key eq 'k1') { |
|
114 |
- return "$value-$key-$column"; |
|
118 |
+ if ($key eq 'key1') { |
|
119 |
+ return $value * 2; |
|
115 | 120 |
} |
116 | 121 |
return $value; |
117 | 122 |
}); |
123 |
+$DB::single = 1; |
|
124 |
+$ret_val = $dbi->execute($insert_query, {key1 => 1, key2 => 2}); |
|
125 |
+ok($ret_val, "Insert success return value"); |
|
126 |
+ |
|
127 |
+$select_tmpl = "select k1, k2 from table1"; |
|
128 |
+$select_query = $dbi->create_query($select_query); |
|
129 |
+$select_query->fetch_filter(sub { |
|
130 |
+ my ($key, $value); |
|
131 |
+ if ($key eq 'key2') { |
|
132 |
+ return $value * 3; |
|
133 |
+ } |
|
134 |
+ return $value; |
|
135 |
+}); |
|
136 |
+$result = $dbi->execute($select_query); |
|
118 | 137 |
|
138 |
+$rows = $result->fetch_all_hash; |
|
139 |
+is_deeply($rows, {k1 => 2, k2 => 6}, "$test : bind_filter fetch_filter"); |
|
119 | 140 |
|
120 |
-$query->fetch_filter(sub { |
|
121 |
- my ($key, $value) |
|
122 |
-}); |
|
141 |
+__END__ |
|
123 | 142 |
|
124 | 143 |
$dbi->fetch_filter(sub { |
125 | 144 |
my ($key, $value, $type, $sth, $i) = @_; |