| ... | ... |
@@ -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) = @_; |