| ... | ... | 
                  @@ -1,7 +1,6 @@  | 
              
| 1 | 1 | 
                  use Test::More;  | 
              
| 2 | 2 | 
                  use strict;  | 
              
| 3 | 3 | 
                  use warnings;  | 
              
| 4 | 
                  -use DBI qw/:sql_types/;  | 
              |
| 5 | 4 | 
                   | 
              
| 6 | 5 | 
                   BEGIN {
                 | 
              
| 7 | 6 | 
                       eval { require DBD::SQLite; 1 }
                 | 
              
| ... | ... | 
                  @@ -24,11 +23,16 @@ our $CREATE_TABLE = {
                 | 
              
| 24 | 23 | 
                  0 => 'create table table1 (key1 char(255), key2 char(255));'  | 
              
| 25 | 24 | 
                  };  | 
              
| 26 | 25 | 
                   | 
              
| 26 | 
                  +our $SELECT_TMPL = {
                 | 
              |
| 27 | 
                  + 0 => 'select key1, key2 from table1;'  | 
              |
| 28 | 
                  +};  | 
              |
| 29 | 
                  +  | 
              |
| 27 | 30 | 
                  my $dbi;  | 
              
| 28 | 31 | 
                  my $sth;  | 
              
| 29 | 32 | 
                  my $tmpl;  | 
              
| 30 | 33 | 
                  my $select_tmpl;  | 
              
| 31 | 34 | 
                  my $insert_tmpl;  | 
              
| 35 | 
                  +my $update_tmpl;  | 
              |
| 32 | 36 | 
                  my $params;  | 
              
| 33 | 37 | 
                  my $sql;  | 
              
| 34 | 38 | 
                  my $result;  | 
              
| ... | ... | 
                  @@ -37,10 +41,12 @@ my $rows;  | 
              
| 37 | 41 | 
                  my $query;  | 
              
| 38 | 42 | 
                  my $select_query;  | 
              
| 39 | 43 | 
                  my $insert_query;  | 
              
| 44 | 
                  +my $update_query;  | 
              |
| 40 | 45 | 
                  my $ret_val;  | 
              
| 41 | 46 | 
                   | 
              
| 42 | 47 | 
                   | 
              
| 43 | 48 | 
                   | 
              
| 49 | 
                  +  | 
              |
| 44 | 50 | 
                  # Prepare table  | 
              
| 45 | 51 | 
                  $dbi = DBI::Custom->new(data_source => 'dbi:SQLite:dbname=:memory:');  | 
              
| 46 | 52 | 
                  $dbi->connect;  | 
              
| ... | ... | 
                  @@ -105,11 +111,19 @@ $result = $dbi->execute($query);  | 
              
| 105 | 111 | 
                  @rows = $result->fetch_all;  | 
              
| 106 | 112 | 
                  is_deeply(\@rows, [[1, 2], [3, 4]], "$test : fetch_all_hash list context");  | 
              
| 107 | 113 | 
                   | 
              
| 114 | 
                  +test 'Insert query return value';  | 
              |
| 115 | 
                  +$dbi->reconnect;  | 
              |
| 116 | 
                  +$dbi->do($CREATE_TABLE->{0});
                 | 
              |
| 117 | 
                  +$tmpl = "insert into table1 {insert key1 key2}";
                 | 
              |
| 118 | 
                  +$query = $dbi->create_query($tmpl);  | 
              |
| 119 | 
                  +$ret_val = $dbi->execute($query, {key1 => 1, key2 => 2});
                 | 
              |
| 120 | 
                  +ok($ret_val, $test);  | 
              |
| 121 | 
                  +  | 
              |
| 108 | 122 | 
                  test 'Filter';  | 
              
| 109 | 123 | 
                  $dbi->reconnect;  | 
              
| 110 | 124 | 
                   $dbi->do($CREATE_TABLE->{0});
                 | 
              
| 111 | 125 | 
                   | 
              
| 112 | 
                  -$insert_tmpl  = "insert into table1 {insert_values key1 key2};";
                 | 
              |
| 126 | 
                  +$insert_tmpl  = "insert into table1 {insert key1 key2};";
                 | 
              |
| 113 | 127 | 
                  $insert_query = $dbi->create_query($insert_tmpl);  | 
              
| 114 | 128 | 
                   $insert_query->bind_filter(sub {
                 | 
              
| 115 | 129 | 
                  my ($key, $value, $table, $column) = @_;  | 
              
| ... | ... | 
                  @@ -119,11 +133,9 @@ $insert_query->bind_filter(sub {
                 | 
              
| 119 | 133 | 
                  return $value;  | 
              
| 120 | 134 | 
                  });  | 
              
| 121 | 135 | 
                   | 
              
| 122 | 
                  -$ret_val = $dbi->execute($insert_query, {key1 => 1, key2 => 2});
                 | 
              |
| 123 | 
                  -ok($ret_val, "Insert success return value");  | 
              |
| 136 | 
                  +$dbi->execute($insert_query, {key1 => 1, key2 => 2});
                 | 
              |
| 124 | 137 | 
                   | 
              
| 125 | 
                  -$select_tmpl = "select key1, key2 from table1";  | 
              |
| 126 | 
                  -$select_query = $dbi->create_query($select_tmpl);  | 
              |
| 138 | 
                  +$select_query = $dbi->create_query($SELECT_TMPL->{0});
                 | 
              |
| 127 | 139 | 
                   $select_query->fetch_filter(sub {
                 | 
              
| 128 | 140 | 
                  my ($key, $value, $type, $sth, $i) = @_;  | 
              
| 129 | 141 | 
                       if ($key eq 'key2' && $type =~ /char/ && $sth->can('execute') && $i == 1) {
                 | 
              
| ... | ... | 
                  @@ -136,6 +148,27 @@ $result = $dbi->execute($select_query);  | 
              
| 136 | 148 | 
                  $rows = $result->fetch_all_hash;  | 
              
| 137 | 149 | 
                   is_deeply($rows, [{key1 => 2, key2 => 6}], "$test : bind_filter fetch_filter");
                 | 
              
| 138 | 150 | 
                   | 
              
| 151 | 
                  +$dbi->reconnect;  | 
              |
| 152 | 
                  +$dbi->do($CREATE_TABLE->{0});
                 | 
              |
| 153 | 
                  +$insert_tmpl  = "insert into table1 {insert table1.key1 table1.key2}";
                 | 
              |
| 154 | 
                  +  | 
              |
| 155 | 
                  +$insert_query = $dbi->create_query($insert_tmpl);  | 
              |
| 156 | 
                  +$insert_query->bind_filter(sub {
                 | 
              |
| 157 | 
                  + my ($key, $value, $table, $column) = @_;  | 
              |
| 158 | 
                  +    if ($key eq 'table1.key1' && $table eq 'table1' && $column eq 'key1') {
                 | 
              |
| 159 | 
                  + return $value * 3;  | 
              |
| 160 | 
                  + }  | 
              |
| 161 | 
                  + return $value;  | 
              |
| 162 | 
                  +});  | 
              |
| 163 | 
                  +  | 
              |
| 164 | 
                  +$dbi->execute($insert_query, {table1 => {key1 => 1, key2 => 2}});
                 | 
              |
| 165 | 
                  +  | 
              |
| 166 | 
                  +$select_query = $dbi->create_query($SELECT_TMPL->{0});
                 | 
              |
| 167 | 
                  +$result = $dbi->execute($select_query);  | 
              |
| 168 | 
                  +$rows = $result->fetch_all_hash;  | 
              |
| 169 | 
                  +is_deeply($rows, [{key1 => 3, key2 => 2}], "$test : insert with table name");
                 | 
              |
| 170 | 
                  +  | 
              |
| 171 | 
                  +  | 
              |
| 139 | 172 | 
                  __END__  | 
              
| 140 | 173 | 
                   | 
              
| 141 | 174 | 
                   $dbi->fetch_filter(sub {
                 | 
              
| ... | ... | 
                  @@ -191,8 +224,8 @@ is_deeply(\@bind, ['g'], 'sql template bind2' );  | 
              
| 191 | 224 | 
                   | 
              
| 192 | 225 | 
                  # Insert values  | 
              
| 193 | 226 | 
                  $dbi = DBI::Custom->new;  | 
              
| 194 | 
                  -$tmpl   = "insert into table {insert_values}";
                 | 
              |
| 195 | 
                  -$params = {insert_values => {key1 => 'a', key2 => 'b'}};
                 | 
              |
| 227 | 
                  +$tmpl   = "insert into table {insert}";
                 | 
              |
| 228 | 
                  +$params = {insert => {key1 => 'a', key2 => 'b'}};
                 | 
              |
| 196 | 229 | 
                   | 
              
| 197 | 230 | 
                   $dbi->filters(filter => sub {
                 | 
              
| 198 | 231 | 
                  my ($key, $value) = @_;  | 
              
| ... | ... | 
                  @@ -208,8 +241,8 @@ is_deeply(\@bind, ['A', 'b'], 'sql template bind' );  | 
              
| 208 | 241 | 
                   | 
              
| 209 | 242 | 
                  # Update set  | 
              
| 210 | 243 | 
                  $dbi = DBI::Custom->new;  | 
              
| 211 | 
                  -$tmpl   = "update table {update_set}";
                 | 
              |
| 212 | 
                  -$params = {update_set => {key1 => 'a', key2 => 'b'}};
                 | 
              |
| 244 | 
                  +$tmpl   = "update table {update}";
                 | 
              |
| 245 | 
                  +$params = {update => {key1 => 'a', key2 => 'b'}};
                 | 
              |
| 213 | 246 | 
                   | 
              
| 214 | 247 | 
                   $dbi->filters(filter => sub {
                 | 
              
| 215 | 248 | 
                  my ($key, $value) = @_;  |