DBIx-Custom / lib / DBIx / Custom.pm /
Newer Older
898 lines | 22.242kb
cleanup
yuki-kimoto authored on 2009-12-22
1
package DBIx::Custom;
2

            
3
use strict;
4
use warnings;
5

            
remove run_transaction().
yuki-kimoto authored on 2010-01-30
6
use base 'Object::Simple';
many change
yuki-kimoto authored on 2010-02-11
7

            
packaging one directory
yuki-kimoto authored on 2009-11-16
8
use Carp 'croak';
9
use DBI;
10
use DBIx::Custom::Result;
cleanup
yuki-kimoto authored on 2010-02-11
11
use DBIx::Custom::Query;
cleanup
yuki-kimoto authored on 2010-08-05
12
use DBIx::Custom::QueryBuilder;
update document
yuki-kimoto authored on 2010-05-27
13
use Encode qw/encode_utf8 decode_utf8/;
packaging one directory
yuki-kimoto authored on 2009-11-16
14

            
catch up with Object::Simple...
yuki-kimoto authored on 2010-01-18
15
__PACKAGE__->attr('dbh');
cleanup
yuki-kimoto authored on 2010-04-28
16
__PACKAGE__->attr([qw/user password data_source/]);
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
17
__PACKAGE__->attr([qw/default_bind_filter default_fetch_filter/]);
packaging one directory
yuki-kimoto authored on 2009-11-16
18

            
removed register_format()
yuki-kimoto authored on 2010-05-26
19
__PACKAGE__->dual_attr('filters', default => sub { {} },
20
                                  inherit => 'hash_copy');
21
__PACKAGE__->register_filter(
update document
yuki-kimoto authored on 2010-05-27
22
    encode_utf8 => sub { encode_utf8($_[0]) },
23
    decode_utf8 => sub { decode_utf8($_[0]) }
removed register_format()
yuki-kimoto authored on 2010-05-26
24
);
packaging one directory
yuki-kimoto authored on 2009-11-16
25

            
cleanup
yuki-kimoto authored on 2010-04-28
26
__PACKAGE__->attr(result_class => 'DBIx::Custom::Result');
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
27
__PACKAGE__->attr(sql_builder  => sub {DBIx::Custom::QueryBuilder->new});
added cache_method attribute
yuki-kimoto authored on 2010-06-25
28

            
add cache attribute
yuki-kimoto authored on 2010-06-14
29
__PACKAGE__->attr(cache => 1);
added cache_method attribute
yuki-kimoto authored on 2010-06-25
30
__PACKAGE__->attr(cache_method => sub {
31
    sub {
32
        my $self = shift;
33
        
34
        $self->{_cached} ||= {};
35
        
36
        if (@_ > 1) {
37
            $self->{_cached}{$_[0]} = $_[1] 
38
        }
39
        else {
40
            return $self->{_cached}{$_[0]}
41
        }
42
    }
43
});
removed register_format()
yuki-kimoto authored on 2010-05-26
44

            
packaging one directory
yuki-kimoto authored on 2009-11-16
45
sub connect {
removed register_format()
yuki-kimoto authored on 2010-05-26
46
    my $proto = shift;
47
    
48
    # Create
49
    my $self = ref $proto ? $proto : $proto->new(@_);
update document
yuki-kimoto authored on 2010-01-30
50
    
51
    # Information
packaging one directory
yuki-kimoto authored on 2009-11-16
52
    my $data_source = $self->data_source;
53
    my $user        = $self->user;
54
    my $password    = $self->password;
55
    
update document
yuki-kimoto authored on 2010-01-30
56
    # Connect
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
57
    my $dbh = eval {DBI->connect(
packaging one directory
yuki-kimoto authored on 2009-11-16
58
        $data_source,
59
        $user,
60
        $password,
61
        {
62
            RaiseError => 1,
63
            PrintError => 0,
64
            AutoCommit => 1,
65
        }
66
    )};
67
    
update document
yuki-kimoto authored on 2010-01-30
68
    # Connect error
packaging one directory
yuki-kimoto authored on 2009-11-16
69
    croak $@ if $@;
70
    
update document
yuki-kimoto authored on 2010-01-30
71
    # Database handle
packaging one directory
yuki-kimoto authored on 2009-11-16
72
    $self->dbh($dbh);
update document
yuki-kimoto authored on 2010-01-30
73
    
packaging one directory
yuki-kimoto authored on 2009-11-16
74
    return $self;
75
}
76

            
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
77
sub register_filter {
78
    my $invocant = shift;
update document
yuki-kimoto authored on 2010-01-30
79
    
changed argument of tag proc...
yuki-kimoto authored on 2010-08-03
80
    # Register filter
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
81
    my $filters = ref $_[0] eq 'HASH' ? $_[0] : {@_};
82
    $invocant->filters({%{$invocant->filters}, %$filters});
update document
yuki-kimoto authored on 2010-01-30
83
    
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
84
    return $invocant;
packaging one directory
yuki-kimoto authored on 2009-11-16
85
}
86

            
removed register_format()
yuki-kimoto authored on 2010-05-26
87
our %VALID_INSERT_ARGS = map { $_ => 1 } qw/table param append filter/;
cleanup insert
yuki-kimoto authored on 2010-04-28
88

            
packaging one directory
yuki-kimoto authored on 2009-11-16
89
sub insert {
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
90
    my ($self, %args) = @_;
removed register_format()
yuki-kimoto authored on 2010-05-26
91

            
cleanup insert
yuki-kimoto authored on 2010-04-28
92
    # Check arguments
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
93
    foreach my $name (keys %args) {
changed argument of tag proc...
yuki-kimoto authored on 2010-08-03
94
        croak qq{"$name" is invalid name}
cleanup insert
yuki-kimoto authored on 2010-04-28
95
          unless $VALID_INSERT_ARGS{$name};
96
    }
97
    
removed register_format()
yuki-kimoto authored on 2010-05-26
98
    # Arguments
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
99
    my $table  = $args{table} || '';
100
    my $param  = $args{param} || {};
101
    my $append = $args{append} || '';
102
    my $filter = $args{filter};
packaging one directory
yuki-kimoto authored on 2009-11-16
103
    
104
    # Insert keys
removed register_format()
yuki-kimoto authored on 2010-05-26
105
    my @insert_keys = keys %$param;
packaging one directory
yuki-kimoto authored on 2009-11-16
106
    
107
    # Templte for insert
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
108
    my $source = "insert into $table {insert "
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
109
                   . join(' ', @insert_keys) . '}';
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
110
    $source .= " $append" if $append;
packaging one directory
yuki-kimoto authored on 2009-11-16
111
    
112
    # Execute query
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
113
    my $ret_val = $self->execute($source, param  => $param, 
removed register_format()
yuki-kimoto authored on 2010-05-26
114
                                            filter => $filter);
packaging one directory
yuki-kimoto authored on 2009-11-16
115
    
116
    return $ret_val;
117
}
118

            
cleanup update and update_al...
yuki-kimoto authored on 2010-04-28
119
our %VALID_UPDATE_ARGS
removed register_format()
yuki-kimoto authored on 2010-05-26
120
  = map { $_ => 1 } qw/table param where append filter allow_update_all/;
cleanup update and update_al...
yuki-kimoto authored on 2010-04-28
121

            
packaging one directory
yuki-kimoto authored on 2009-11-16
122
sub update {
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
123
    my ($self, %args) = @_;
cleanup update and update_al...
yuki-kimoto authored on 2010-04-28
124
    
125
    # Check arguments
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
126
    foreach my $name (keys %args) {
changed argument of tag proc...
yuki-kimoto authored on 2010-08-03
127
        croak qq{"$name" is invalid name}
cleanup update and update_al...
yuki-kimoto authored on 2010-04-28
128
          unless $VALID_UPDATE_ARGS{$name};
129
    }
130
    
131
    # Arguments
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
132
    my $table            = $args{table} || '';
133
    my $param            = $args{param} || {};
134
    my $where            = $args{where} || {};
135
    my $append_statement = $args{append} || '';
136
    my $filter           = $args{filter};
137
    my $allow_update_all = $args{allow_update_all};
packaging one directory
yuki-kimoto authored on 2009-11-16
138
    
139
    # Update keys
removed register_format()
yuki-kimoto authored on 2010-05-26
140
    my @update_keys = keys %$param;
packaging one directory
yuki-kimoto authored on 2009-11-16
141
    
142
    # Where keys
removed register_format()
yuki-kimoto authored on 2010-05-26
143
    my @where_keys = keys %$where;
packaging one directory
yuki-kimoto authored on 2009-11-16
144
    
145
    # Not exists where keys
changed argument of tag proc...
yuki-kimoto authored on 2010-08-03
146
    croak qq{"where" must contain column-value pair}
cleanup update and update_al...
yuki-kimoto authored on 2010-04-28
147
      if !@where_keys && !$allow_update_all;
packaging one directory
yuki-kimoto authored on 2009-11-16
148
    
149
    # Update clause
150
    my $update_clause = '{update ' . join(' ', @update_keys) . '}';
151
    
152
    # Where clause
153
    my $where_clause = '';
simplify filtering system
yuki-kimoto authored on 2010-05-01
154
    my $new_where = {};
many change
yuki-kimoto authored on 2010-04-30
155
    
packaging one directory
yuki-kimoto authored on 2009-11-16
156
    if (@where_keys) {
157
        $where_clause = 'where ';
158
        foreach my $where_key (@where_keys) {
simplify filtering system
yuki-kimoto authored on 2010-05-01
159
            
160
            $where_clause .= "{= $where_key} and ";
packaging one directory
yuki-kimoto authored on 2009-11-16
161
        }
162
        $where_clause =~ s/ and $//;
163
    }
164
    
165
    # Template for update
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
166
    my $source = "update $table $update_clause $where_clause";
167
    $source .= " $append_statement" if $append_statement;
packaging one directory
yuki-kimoto authored on 2009-11-16
168
    
changed argument of tag proc...
yuki-kimoto authored on 2010-08-03
169
    # Rearrange parameters
removed register_format()
yuki-kimoto authored on 2010-05-26
170
    foreach my $wkey (@where_keys) {
simplify filtering system
yuki-kimoto authored on 2010-05-01
171
        
removed register_format()
yuki-kimoto authored on 2010-05-26
172
        if (exists $param->{$wkey}) {
173
            $param->{$wkey} = [$param->{$wkey}]
174
              unless ref $param->{$wkey} eq 'ARRAY';
simplify filtering system
yuki-kimoto authored on 2010-05-01
175
            
removed register_format()
yuki-kimoto authored on 2010-05-26
176
            push @{$param->{$wkey}}, $where->{$wkey};
simplify filtering system
yuki-kimoto authored on 2010-05-01
177
        }
add tests
yuki-kimoto authored on 2010-05-01
178
        else {
removed register_format()
yuki-kimoto authored on 2010-05-26
179
            $param->{$wkey} = $where->{$wkey};
add tests
yuki-kimoto authored on 2010-05-01
180
        }
simplify filtering system
yuki-kimoto authored on 2010-05-01
181
    }
packaging one directory
yuki-kimoto authored on 2009-11-16
182
    
183
    # Execute query
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
184
    my $ret_val = $self->execute($source, param  => $param, 
removed register_format()
yuki-kimoto authored on 2010-05-26
185
                                            filter => $filter);
packaging one directory
yuki-kimoto authored on 2009-11-16
186
    
187
    return $ret_val;
188
}
189

            
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
190
sub update_all { shift->update(allow_update_all => 1, @_) };
packaging one directory
yuki-kimoto authored on 2009-11-16
191

            
refactoring delete and delet...
yuki-kimoto authored on 2010-04-28
192
our %VALID_DELETE_ARGS
removed register_format()
yuki-kimoto authored on 2010-05-26
193
  = map { $_ => 1 } qw/table where append filter allow_delete_all/;
refactoring delete and delet...
yuki-kimoto authored on 2010-04-28
194

            
packaging one directory
yuki-kimoto authored on 2009-11-16
195
sub delete {
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
196
    my ($self, %args) = @_;
refactoring delete and delet...
yuki-kimoto authored on 2010-04-28
197
    
198
    # Check arguments
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
199
    foreach my $name (keys %args) {
changed argument of tag proc...
yuki-kimoto authored on 2010-08-03
200
        croak qq{"$name" is invalid name}
refactoring delete and delet...
yuki-kimoto authored on 2010-04-28
201
          unless $VALID_DELETE_ARGS{$name};
202
    }
203
    
204
    # Arguments
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
205
    my $table            = $args{table} || '';
206
    my $where            = $args{where} || {};
207
    my $append_statement = $args{append};
208
    my $filter           = $args{filter};
209
    my $allow_delete_all = $args{allow_delete_all};
packaging one directory
yuki-kimoto authored on 2009-11-16
210
    
211
    # Where keys
removed register_format()
yuki-kimoto authored on 2010-05-26
212
    my @where_keys = keys %$where;
packaging one directory
yuki-kimoto authored on 2009-11-16
213
    
214
    # Not exists where keys
changed argument of tag proc...
yuki-kimoto authored on 2010-08-03
215
    croak qq{Key-value pairs for where clause must be specified to "delete" second argument}
refactoring delete and delet...
yuki-kimoto authored on 2010-04-28
216
      if !@where_keys && !$allow_delete_all;
packaging one directory
yuki-kimoto authored on 2009-11-16
217
    
218
    # Where clause
219
    my $where_clause = '';
220
    if (@where_keys) {
221
        $where_clause = 'where ';
removed register_format()
yuki-kimoto authored on 2010-05-26
222
        foreach my $wkey (@where_keys) {
223
            $where_clause .= "{= $wkey} and ";
packaging one directory
yuki-kimoto authored on 2009-11-16
224
        }
225
        $where_clause =~ s/ and $//;
226
    }
227
    
228
    # Template for delete
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
229
    my $source = "delete from $table $where_clause";
230
    $source .= " $append_statement" if $append_statement;
packaging one directory
yuki-kimoto authored on 2009-11-16
231
    
232
    # Execute query
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
233
    my $ret_val = $self->execute($source, param  => $where, 
removed register_format()
yuki-kimoto authored on 2010-05-26
234
                                            filter => $filter);
packaging one directory
yuki-kimoto authored on 2009-11-16
235
    
236
    return $ret_val;
237
}
238

            
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
239
sub delete_all { shift->delete(allow_delete_all => 1, @_) }
packaging one directory
yuki-kimoto authored on 2009-11-16
240

            
refactoring select
yuki-kimoto authored on 2010-04-28
241
our %VALID_SELECT_ARGS
added commit method
yuki-kimoto authored on 2010-05-27
242
  = map { $_ => 1 } qw/table column where append relation filter param/;
refactoring select
yuki-kimoto authored on 2010-04-28
243

            
packaging one directory
yuki-kimoto authored on 2009-11-16
244
sub select {
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
245
    my ($self, %args) = @_;
packaging one directory
yuki-kimoto authored on 2009-11-16
246
    
refactoring select
yuki-kimoto authored on 2010-04-28
247
    # Check arguments
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
248
    foreach my $name (keys %args) {
changed argument of tag proc...
yuki-kimoto authored on 2010-08-03
249
        croak qq{"$name" is invalid name}
refactoring select
yuki-kimoto authored on 2010-04-28
250
          unless $VALID_SELECT_ARGS{$name};
251
    }
packaging one directory
yuki-kimoto authored on 2009-11-16
252
    
refactoring select
yuki-kimoto authored on 2010-04-28
253
    # Arguments
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
254
    my $tables = $args{table} || [];
removed register_format()
yuki-kimoto authored on 2010-05-26
255
    $tables = [$tables] unless ref $tables eq 'ARRAY';
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
256
    my $columns  = $args{column} || [];
257
    my $where    = $args{where} || {};
258
    my $relation = $args{relation};
259
    my $append   = $args{append};
260
    my $filter   = $args{filter};
261
    my $param    = $args{param} || {};
packaging one directory
yuki-kimoto authored on 2009-11-16
262
    
263
    # SQL template for select statement
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
264
    my $source = 'select ';
packaging one directory
yuki-kimoto authored on 2009-11-16
265
    
added commit method
yuki-kimoto authored on 2010-05-27
266
    # Column clause
packaging one directory
yuki-kimoto authored on 2009-11-16
267
    if (@$columns) {
268
        foreach my $column (@$columns) {
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
269
            $source .= "$column, ";
packaging one directory
yuki-kimoto authored on 2009-11-16
270
        }
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
271
        $source =~ s/, $/ /;
packaging one directory
yuki-kimoto authored on 2009-11-16
272
    }
273
    else {
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
274
        $source .= '* ';
packaging one directory
yuki-kimoto authored on 2009-11-16
275
    }
276
    
added commit method
yuki-kimoto authored on 2010-05-27
277
    # Table
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
278
    $source .= 'from ';
packaging one directory
yuki-kimoto authored on 2009-11-16
279
    foreach my $table (@$tables) {
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
280
        $source .= "$table, ";
packaging one directory
yuki-kimoto authored on 2009-11-16
281
    }
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
282
    $source =~ s/, $/ /;
packaging one directory
yuki-kimoto authored on 2009-11-16
283
    
added commit method
yuki-kimoto authored on 2010-05-27
284
    # Where clause
285
    my @where_keys = keys %$where;
packaging one directory
yuki-kimoto authored on 2009-11-16
286
    if (@where_keys) {
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
287
        $source .= 'where ';
packaging one directory
yuki-kimoto authored on 2009-11-16
288
        foreach my $where_key (@where_keys) {
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
289
            $source .= "{= $where_key} and ";
packaging one directory
yuki-kimoto authored on 2009-11-16
290
        }
291
    }
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
292
    $source =~ s/ and $//;
packaging one directory
yuki-kimoto authored on 2009-11-16
293
    
added commit method
yuki-kimoto authored on 2010-05-27
294
    # Relation
295
    if ($relation) {
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
296
        $source .= @where_keys ? "and " : "where ";
added commit method
yuki-kimoto authored on 2010-05-27
297
        foreach my $rkey (keys %$relation) {
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
298
            $source .= "$rkey = " . $relation->{$rkey} . " and ";
packaging one directory
yuki-kimoto authored on 2009-11-16
299
        }
300
    }
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
301
    $source =~ s/ and $//;
added commit method
yuki-kimoto authored on 2010-05-27
302
    
303
    # Append some statement
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
304
    $source .= " $append" if $append;
packaging one directory
yuki-kimoto authored on 2009-11-16
305
    
306
    # Execute query
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
307
    my $result = $self->execute($source, param  => $where, 
removed register_format()
yuki-kimoto authored on 2010-05-26
308
                                           filter => $filter);
packaging one directory
yuki-kimoto authored on 2009-11-16
309
    
310
    return $result;
311
}
312

            
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
313
sub build_query {
314
    my ($self, $source) = @_;
removed register_format()
yuki-kimoto authored on 2010-05-26
315
    
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
316
    # Cache
added cache_method attribute
yuki-kimoto authored on 2010-06-25
317
    my $cache = $self->cache;
version 0.0901
yuki-kimoto authored on 2009-12-17
318
    
removed reconnect method
yuki-kimoto authored on 2010-05-28
319
    # Create query
320
    my $query;
added cache_method attribute
yuki-kimoto authored on 2010-06-25
321
    if ($cache) {
322
        
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
323
        # Get query
324
        my $q = $self->cache_method->($self, $source);
added cache_method attribute
yuki-kimoto authored on 2010-06-25
325
        
326
        # Create query
327
        $query = DBIx::Custom::Query->new($q) if $q;
removed reconnect method
yuki-kimoto authored on 2010-05-28
328
    }
added cache_method attribute
yuki-kimoto authored on 2010-06-25
329
    
330
    unless ($query) {
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
331

            
332
        # Create SQL object
333
        my $builder = $self->sql_builder;
added cache_method attribute
yuki-kimoto authored on 2010-06-25
334
        
335
        # Create query
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
336
        $query = eval{$builder->build_query($source)};
changed argument of tag proc...
yuki-kimoto authored on 2010-08-03
337
        croak $@ if $@;
removed reconnect method
yuki-kimoto authored on 2010-05-28
338
        
added cache_method attribute
yuki-kimoto authored on 2010-06-25
339
        # Cache query
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
340
        $self->cache_method->($self, $source,
added cache_method attribute
yuki-kimoto authored on 2010-06-25
341
                             {sql     => $query->sql, 
342
                              columns => $query->columns})
343
          if $cache;
removed reconnect method
yuki-kimoto authored on 2010-05-28
344
    }
version 0.0901
yuki-kimoto authored on 2009-12-17
345
    
removed reconnect method
yuki-kimoto authored on 2010-05-28
346
    # Prepare statement handle
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
347
    my $sth = eval {$self->dbh->prepare($query->{sql})};
348
    croak $@ if $@;
renamed fetch_rows to fetch_...
yuki-kimoto authored on 2010-05-01
349
    
removed reconnect method
yuki-kimoto authored on 2010-05-28
350
    # Set statement handle
351
    $query->sth($sth);
352
    
353
    return $query;
354
}
355

            
356
our %VALID_EXECUTE_ARGS = map { $_ => 1 } qw/param filter/;
357

            
358
sub execute{
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
359
    my ($self, $query, %args)  = @_;
removed reconnect method
yuki-kimoto authored on 2010-05-28
360
    
361
    # Check arguments
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
362
    foreach my $name (keys %args) {
changed argument of tag proc...
yuki-kimoto authored on 2010-08-03
363
        croak qq{"$name" is invalid name}
removed reconnect method
yuki-kimoto authored on 2010-05-28
364
          unless $VALID_EXECUTE_ARGS{$name};
365
    }
366
    
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
367
    my $params = $args{param} || {};
removed reconnect method
yuki-kimoto authored on 2010-05-28
368
    
369
    # First argument is SQL template
changed argument of tag proc...
yuki-kimoto authored on 2010-08-03
370
    $query = $self->build_query($query)
371
      unless ref $query;
removed reconnect method
yuki-kimoto authored on 2010-05-28
372
    
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
373
    my $filter = $args{filter} || $query->filter || {};
removed reconnect method
yuki-kimoto authored on 2010-05-28
374
    
375
    # Create bind value
376
    my $bind_values = $self->_build_bind_values($query, $params, $filter);
377
    
378
    # Execute
379
    my $sth      = $query->sth;
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
380
    my $affected = eval {$sth->execute(@$bind_values)};
381
    croak $@ if $@;
removed reconnect method
yuki-kimoto authored on 2010-05-28
382
    
383
    # Return resultset if select statement is executed
384
    if ($sth->{NUM_OF_FIELDS}) {
385
        
386
        # Create result
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
387
        my $result = $self->result_class->new(
388
            sth            => $sth,
389
            default_filter => $self->default_fetch_filter,
390
            filters        => $self->filters
391
        );
392

            
removed reconnect method
yuki-kimoto authored on 2010-05-28
393
        return $result;
394
    }
395
    return $affected;
396
}
397

            
398
sub _build_bind_values {
399
    my ($self, $query, $params, $filter) = @_;
400
    
401
    # binding values
402
    my @bind_values;
403
    
404
    # Build bind values
405
    my $count = {};
406
    foreach my $column (@{$query->columns}) {
407
        
changed argument of tag proc...
yuki-kimoto authored on 2010-08-03
408
        croak qq{"$column" is not exists in params}
removed reconnect method
yuki-kimoto authored on 2010-05-28
409
          unless exists $params->{$column};
410
        
411
        # Value
412
        my $value = ref $params->{$column} eq 'ARRAY'
413
                  ? $params->{$column}->[$count->{$column} || 0]
414
                  : $params->{$column};
415
        
416
        # Filter
417
        $filter ||= {};
418
        
419
        # Filter name
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
420
        my $fname = $filter->{$column} || $self->default_bind_filter || '';
removed reconnect method
yuki-kimoto authored on 2010-05-28
421
        
422
        my $filter_func;
423
        if ($fname) {
424
            
425
            if (ref $fname eq 'CODE') {
426
                $filter_func = $fname;
427
            }
428
            else {
429
                my $filters = $self->filters;
changed argument of tag proc...
yuki-kimoto authored on 2010-08-03
430
                croak qq{Not exists filter "$fname"}
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
431
                  unless exists $filters->{$fname};
removed reconnect method
yuki-kimoto authored on 2010-05-28
432
                $filter_func = $filters->{$fname};
433
            }            
434
        }
435
        
436
        push @bind_values, $filter_func
437
                         ? $filter_func->($value)
438
                         : $value;
439
        
440
        # Count up 
441
        $count->{$column}++;
442
    }
443
    
444
    return \@bind_values;
445
}
446

            
447
=head1 NAME
448

            
449
DBIx::Custom - DBI with hash parameter binding and filtering system
450

            
451
=cut
452

            
changed arguments of tag pro...
yuki-kimoto authored on 2010-08-05
453
our $VERSION = '0.1605';
removed reconnect method
yuki-kimoto authored on 2010-05-28
454

            
455
=head1 STABILITY
456

            
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
457
This module is not stable. Method name and implementations will be changed.
removed reconnect method
yuki-kimoto authored on 2010-05-28
458

            
459
=head1 SYNOPSYS
cleanup
yuki-kimoto authored on 2010-08-05
460

            
461
Connect to database.
462

            
removed reconnect method
yuki-kimoto authored on 2010-05-28
463
    # Connect
464
    my $dbi = DBIx::Custom->connect(data_source => "dbi:mysql:database=books",
465
                                    user => 'ken', password => '!LFKD%$&');
cleanup
yuki-kimoto authored on 2010-08-05
466

            
467
Insert, update, delete statement.
468

            
removed reconnect method
yuki-kimoto authored on 2010-05-28
469
    # Insert 
470
    $dbi->insert(table  => 'books',
471
                 param  => {title => 'perl', author => 'Ken'},
472
                 filter => {title => 'encode_utf8'});
473
    
474
    # Update 
475
    $dbi->update(table  => 'books', 
476
                 param  => {title => 'aaa', author => 'Ken'}, 
477
                 where  => {id => 5},
478
                 filter => {title => 'encode_utf8'});
479
    
480
    # Update all
481
    $dbi->update_all(table  => 'books',
482
                     param  => {title => 'aaa'},
483
                     filter => {title => 'encode_utf8'});
484
    
485
    # Delete
486
    $dbi->delete(table  => 'books',
487
                 where  => {author => 'Ken'},
488
                 filter => {title => 'encode_utf8'});
489
    
490
    # Delete all
491
    $dbi->delete_all(table => 'books');
cleanup
yuki-kimoto authored on 2010-08-05
492

            
493
Select statement.
494

            
removed reconnect method
yuki-kimoto authored on 2010-05-28
495
    # Select
496
    my $result = $dbi->select(table => 'books');
renamed fetch_rows to fetch_...
yuki-kimoto authored on 2010-05-01
497
    
removed register_format()
yuki-kimoto authored on 2010-05-26
498
    # Select(more complex)
renamed fetch_rows to fetch_...
yuki-kimoto authored on 2010-05-01
499
    my $result = $dbi->select(
update document
yuki-kimoto authored on 2010-05-27
500
        table  => 'books',
501
        column => [qw/author title/],
502
        where  => {author => 'Ken'},
503
        append => 'order by id limit 1',
504
        filter => {tilte => 'encode_utf8'}
renamed fetch_rows to fetch_...
yuki-kimoto authored on 2010-05-01
505
    );
added commit method
yuki-kimoto authored on 2010-05-27
506
    
507
    # Select(Join table)
508
    my $result = $dbi->select(
509
        table => ['books', 'rental'],
510
        column => ['books.name as book_name']
511
        relation => {'books.id' => 'rental.book_id'}
512
    );
cleanup
yuki-kimoto authored on 2010-08-05
513

            
514
Execute SQL source.
515

            
516
    # Execute from SQL source
removed register_format()
yuki-kimoto authored on 2010-05-26
517
    $dbi->execute("select title from books");
518
    
519
    # Execute SQL with parameters and filter
520
    $dbi->execute("select id from books where {= author} && {like title}",
521
                  param  => {author => 'ken', title => '%Perl%'},
522
                  filter => {tilte => 'encode_utf8'});
removed reconnect method
yuki-kimoto authored on 2010-05-28
523

            
524
    # Create query and execute it
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
525
    my $query = $dbi->build_query(
removed reconnect method
yuki-kimoto authored on 2010-05-28
526
        "select id from books where {= author} && {like title}"
527
    );
528
    $dbi->execute($query, param => {author => 'ken', title => '%Perl%'})
cleanup
yuki-kimoto authored on 2010-08-05
529

            
530
More features.
531

            
removed register_format()
yuki-kimoto authored on 2010-05-26
532
    # Default filter
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
533
    $dbi->default_bind_filter('encode_utf8');
removed register_format()
yuki-kimoto authored on 2010-05-26
534
    $dbi->default_fetch_filter('decode_utf8');
cleanup
yuki-kimoto authored on 2010-08-05
535

            
536
    # Get DBI object
537
    my $dbh = $dbi->dbh;
538

            
539
Fetch row.
540

            
removed register_format()
yuki-kimoto authored on 2010-05-26
541
    # Fetch
542
    while (my $row = $result->fetch) {
543
        # ...
544
    }
545
    
546
    # Fetch hash
547
    while (my $row = $result->fetch_hash) {
548
        
549
    }
550
    
removed reconnect method
yuki-kimoto authored on 2010-05-28
551

            
552
=head1 DESCRIPTION
553

            
554
L<DBIx::Custom> is useful L<DBI> extention.
555
This module have hash parameter binding and filtering system.
556

            
557
Normally, binding parameter is array.
558
L<DBIx::Custom> enable you to pass binding parameter as hash.
559

            
560
This module also provide filtering system.
561
You can filter the binding parameter
562
or the value of fetching row.
563

            
564
And have useful method such as insert(), update(), delete(), and select().
565

            
566
=head2 Features
567

            
568
=over 4
569

            
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
570
=item *
removed reconnect method
yuki-kimoto authored on 2010-05-28
571

            
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
572
Hash parameter binding.
removed reconnect method
yuki-kimoto authored on 2010-05-28
573

            
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
574
=item *
575

            
576
Value filtering.
577

            
578
=item *
579

            
580
Provide suger methods, such as insert(), update(), delete(), and select().
removed reconnect method
yuki-kimoto authored on 2010-05-28
581

            
582
=back
583

            
update document
yuki-kimoto authored on 2010-01-30
584
=head1 ATTRIBUTES
packaging one directory
yuki-kimoto authored on 2009-11-16
585

            
removed DBIx::Custom commit ...
yuki-kimoto authored on 2010-07-14
586
=head2 C<user>
packaging one directory
yuki-kimoto authored on 2009-11-16
587

            
cleanup
yuki-kimoto authored on 2010-08-03
588
    my $user = $dbi->user;
589
    $dbi     = $dbi->user('Ken');
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
590

            
cleanup
yuki-kimoto authored on 2010-08-05
591
User name.
592
C<connect()> method use this value to connect the database.
bind_filter argument is chan...
yuki-kimoto authored on 2009-11-19
593
    
removed DBIx::Custom commit ...
yuki-kimoto authored on 2010-07-14
594
=head2 C<password>
packaging one directory
yuki-kimoto authored on 2009-11-16
595

            
cleanup
yuki-kimoto authored on 2010-08-03
596
    my $password = $dbi->password;
597
    $dbi         = $dbi->password('lkj&le`@s');
packaging one directory
yuki-kimoto authored on 2009-11-16
598

            
cleanup
yuki-kimoto authored on 2010-08-05
599
Password.
600
C<connect()> method use this value to connect the database.
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
601

            
removed DBIx::Custom commit ...
yuki-kimoto authored on 2010-07-14
602
=head2 C<data_source>
packaging one directory
yuki-kimoto authored on 2009-11-16
603

            
cleanup
yuki-kimoto authored on 2010-08-03
604
    my $data_source = $dbi->data_source;
cleanup
yuki-kimoto authored on 2010-08-05
605
    $dbi            = $dbi->data_source("DBI:mysql:database=dbname");
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
606

            
cleanup
yuki-kimoto authored on 2010-08-05
607
Data source.
608
C<connect()> method use this value to connect the database.
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
609

            
removed DBIx::Custom commit ...
yuki-kimoto authored on 2010-07-14
610
=head2 C<dbh>
packaging one directory
yuki-kimoto authored on 2009-11-16
611

            
cleanup
yuki-kimoto authored on 2010-08-03
612
    my $dbh = $dbi->dbh;
613
    $dbi    = $dbi->dbh($dbh);
packaging one directory
yuki-kimoto authored on 2009-11-16
614

            
cleanup
yuki-kimoto authored on 2010-08-05
615
L<DBI> object. You can call all methods of L<DBI>.
packaging one directory
yuki-kimoto authored on 2009-11-16
616

            
removed reconnect method
yuki-kimoto authored on 2010-05-28
617
    my $sth    = $dbi->dbh->prepare("...");
618
    my $errstr = $dbi->dbh->errstr;
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
619
    $dbi->dbh->begin_work;
620
    $dbi->dbh->commit;
621
    $dbi->dbh->rollback;
removed reconnect method
yuki-kimoto authored on 2010-05-28
622
    
removed DBIx::Custom commit ...
yuki-kimoto authored on 2010-07-14
623
=head2 C<filters>
packaging one directory
yuki-kimoto authored on 2009-11-16
624

            
cleanup
yuki-kimoto authored on 2010-08-03
625
    my $filters = $dbi->filters;
cleanup
yuki-kimoto authored on 2010-08-03
626
    $dbi        = $dbi->filters(\%filters);
version 0.0901
yuki-kimoto authored on 2009-12-17
627

            
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
628
Filter functions.
629
By default, "encode_utf8" and "decode_utf8" is registered.
version 0.0901
yuki-kimoto authored on 2009-12-17
630

            
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
631
=head2 C<default_bind_filter>
packaging one directory
yuki-kimoto authored on 2009-11-16
632

            
cleanup
yuki-kimoto authored on 2010-08-03
633
    my $default_bind_filter = $dbi->default_bind_filter
634
    $dbi                    = $dbi->default_bind_filter('encode_utf8');
packaging one directory
yuki-kimoto authored on 2009-11-16
635

            
cleanup
yuki-kimoto authored on 2010-08-05
636
Default filter when parameter binding is executed.
packaging one directory
yuki-kimoto authored on 2009-11-16
637

            
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
638
=head2 C<default_fetch_filter>
bind_filter argument is chan...
yuki-kimoto authored on 2009-11-19
639

            
cleanup
yuki-kimoto authored on 2010-08-03
640
    my $default_fetch_filter = $dbi->default_fetch_filter;
641
    $dbi                     = $dbi->default_fetch_filter('decode_utf8');
bind_filter argument is chan...
yuki-kimoto authored on 2009-11-19
642

            
cleanup
yuki-kimoto authored on 2010-08-05
643
Default filter when row is fetched.
packaging one directory
yuki-kimoto authored on 2009-11-16
644

            
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
645
=head2 C<result_class>
bind_filter argument is chan...
yuki-kimoto authored on 2009-11-19
646

            
cleanup
yuki-kimoto authored on 2010-08-03
647
    my $result_class = $dbi->result_class;
648
    $dbi             = $dbi->result_class('DBIx::Custom::Result');
packaging one directory
yuki-kimoto authored on 2009-11-16
649

            
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
650
Result class for select statement.
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
651
Default to L<DBIx::Custom::Result>.
update document
yuki-kimoto authored on 2010-01-30
652

            
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
653
=head2 C<sql_builder>
added commit method
yuki-kimoto authored on 2010-05-27
654

            
cleanup
yuki-kimoto authored on 2010-08-03
655
    my $sql_class = $dbi->sql_builder;
656
    $dbi          = $dbi->sql_builder(DBIx::Custom::QueryBuilder->new);
added commit method
yuki-kimoto authored on 2010-05-27
657

            
cleanup
yuki-kimoto authored on 2010-08-03
658
SQL builder. sql_builder must be 
659
the instance of L<DBIx::Custom::QueryBuilder> subclass
cleanup
yuki-kimoto authored on 2010-08-05
660
Default to L<DBIx::Custom::QueryBuilder>.
661

            
662
=head2 C<cache>
663

            
664
    my $cache = $dbi->cache;
665
    $dbi      = $dbi->cache(1);
666

            
667
Enable cache of the query after parsing SQL source.
668
Default to 1.
669

            
670
=head2 C<cache_method>
671

            
672
    $dbi          = $dbi->cache_method(\&cache_method);
673
    $cache_method = $dbi->cache_method
674

            
675
Method for cache.
676

            
677
B<Example:>
678

            
679
    $dbi->cache_method(
680
        sub {
681
            my $self = shift;
682
            
683
            $self->{_cached} ||= {};
684
            
685
            if (@_ > 1) {
686
                $self->{_cached}{$_[0]} = $_[1] 
687
            }
688
            else {
689
                return $self->{_cached}{$_[0]}
690
            }
691
        }
692
    );
added commit method
yuki-kimoto authored on 2010-05-27
693

            
removed reconnect method
yuki-kimoto authored on 2010-05-28
694
=head1 METHODS
added commit method
yuki-kimoto authored on 2010-05-27
695

            
cleanup
yuki-kimoto authored on 2010-08-05
696
L<DBIx::Custom> inherits all methods from L<Object::Simple>
697
and implements the following new ones.
added commit method
yuki-kimoto authored on 2010-05-27
698

            
removed DBIx::Custom commit ...
yuki-kimoto authored on 2010-07-14
699
=head2 C<connect>
packaging one directory
yuki-kimoto authored on 2009-11-16
700

            
cleanup
yuki-kimoto authored on 2010-08-05
701
    my $dbi = DBIx::Custom->connect(data_source => "dbi:mysql:database=dbname",
update document
yuki-kimoto authored on 2010-05-27
702
                                    user => 'ken', password => '!LFKD%$&');
bind_filter argument is chan...
yuki-kimoto authored on 2009-11-19
703

            
cleanup
yuki-kimoto authored on 2010-08-05
704
Create a new L<DBIx::Custom> object and connect to the database.
705
By default, "AutoCommit" and "RaiseError" option is true, 
706
and "PrintError" option is false.
packaging one directory
yuki-kimoto authored on 2009-11-16
707

            
removed DBIx::Custom commit ...
yuki-kimoto authored on 2010-07-14
708
=head2 C<insert>
packaging one directory
yuki-kimoto authored on 2009-11-16
709

            
cleanup
yuki-kimoto authored on 2010-08-05
710
    $dbi->insert(table  => $table, 
711
                 param  => \%param,
712
                 append => $append,
713
                 filter => \%filter);
update document
yuki-kimoto authored on 2009-11-19
714

            
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
715
Insert row.
716
Retrun value is the count of affected rows.
packaging one directory
yuki-kimoto authored on 2009-11-16
717
    
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
718
B<Example:>
version 0.0901
yuki-kimoto authored on 2009-12-17
719

            
removed register_format()
yuki-kimoto authored on 2010-05-26
720
    $dbi->insert(table  => 'books', 
721
                 param  => {title => 'Perl', author => 'Taro'},
722
                 append => "some statement",
723
                 filter => {title => 'encode_utf8'})
version 0.0901
yuki-kimoto authored on 2009-12-17
724

            
removed DBIx::Custom commit ...
yuki-kimoto authored on 2010-07-14
725
=head2 C<update>
packaging one directory
yuki-kimoto authored on 2009-11-16
726

            
cleanup
yuki-kimoto authored on 2010-08-05
727
    $dbi->update(table  => $table, 
728
                 param  => \%params,
729
                 where  => \%where,
730
                 append => $append,
731
                 filter => \%filter)
version 0.0901
yuki-kimoto authored on 2009-12-17
732

            
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
733
Update rows.
734
Retrun value is the count of affected rows.
update document
yuki-kimoto authored on 2009-11-19
735

            
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
736
B<Example:>
bind_filter argument is chan...
yuki-kimoto authored on 2009-11-19
737

            
removed register_format()
yuki-kimoto authored on 2010-05-26
738
    $dbi->update(table  => 'books',
739
                 param  => {title => 'Perl', author => 'Taro'},
740
                 where  => {id => 5},
741
                 append => "some statement",
added commit method
yuki-kimoto authored on 2010-05-27
742
                 filter => {title => 'encode_utf8'});
version 0.0901
yuki-kimoto authored on 2009-12-17
743

            
removed DBIx::Custom commit ...
yuki-kimoto authored on 2010-07-14
744
=head2 C<update_all>
packaging one directory
yuki-kimoto authored on 2009-11-16
745

            
cleanup
yuki-kimoto authored on 2010-08-05
746
    $dbi->update_all(table  => $table, 
747
                     param  => \%params,
748
                     filter => \%filter,
749
                     append => $append);
update document
yuki-kimoto authored on 2009-11-19
750

            
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
751
Update all rows.
752
Retrun value is the count of affected rows.
version 0.0901
yuki-kimoto authored on 2009-12-17
753

            
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
754
B<Example:>
update document
yuki-kimoto authored on 2009-11-19
755

            
removed register_format()
yuki-kimoto authored on 2010-05-26
756
    $dbi->update_all(table  => 'books', 
757
                     param  => {author => 'taro'},
758
                     filter => {author => 'encode_utf8'});
packaging one directory
yuki-kimoto authored on 2009-11-16
759

            
removed DBIx::Custom commit ...
yuki-kimoto authored on 2010-07-14
760
=head2 C<delete>
packaging one directory
yuki-kimoto authored on 2009-11-16
761

            
cleanup
yuki-kimoto authored on 2010-08-05
762
    $dbi->delete(table  => $table,
763
                 where  => \%where,
764
                 append => $append,
765
                 filter => \%filter);
bind_filter argument is chan...
yuki-kimoto authored on 2009-11-19
766

            
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
767
Delete rows.
768
Retrun value is the count of affected rows.
packaging one directory
yuki-kimoto authored on 2009-11-16
769
    
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
770
B<Example:>
packaging one directory
yuki-kimoto authored on 2009-11-16
771

            
removed register_format()
yuki-kimoto authored on 2010-05-26
772
    $dbi->delete(table  => 'books',
773
                 where  => {id => 5},
774
                 append => 'some statement',
removed reconnect method
yuki-kimoto authored on 2010-05-28
775
                 filter => {id => 'encode_utf8'});
version 0.0901
yuki-kimoto authored on 2009-12-17
776

            
removed DBIx::Custom commit ...
yuki-kimoto authored on 2010-07-14
777
=head2 C<delete_all>
packaging one directory
yuki-kimoto authored on 2009-11-16
778

            
cleanup
yuki-kimoto authored on 2010-08-05
779
    $dbi->delete_all(table => $table);
packaging one directory
yuki-kimoto authored on 2009-11-16
780

            
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
781
Delete all rows.
782
Retrun value is the count of affected rows.
bind_filter argument is chan...
yuki-kimoto authored on 2009-11-19
783

            
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
784
B<Example:>
removed register_format()
yuki-kimoto authored on 2010-05-26
785
    
removed reconnect method
yuki-kimoto authored on 2010-05-28
786
    $dbi->delete_all(table => 'books');
packaging one directory
yuki-kimoto authored on 2009-11-16
787

            
removed DBIx::Custom commit ...
yuki-kimoto authored on 2010-07-14
788
=head2 C<select>
packaging one directory
yuki-kimoto authored on 2009-11-16
789
    
cleanup
yuki-kimoto authored on 2010-08-05
790
    my $result = $dbi->select(table    => $table,
791
                              column   => [@column],
792
                              where    => \%where,
793
                              append   => $append,
794
                              relation => \%relation,
795
                              filter   => \%filter);
update document
yuki-kimoto authored on 2009-11-19
796

            
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
797
Select rows.
removed reconnect method
yuki-kimoto authored on 2010-05-28
798
Return value is the instance of L<DBIx::Custom::Result>.
update document
yuki-kimoto authored on 2009-11-19
799

            
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
800
B<Example:>
update document
yuki-kimoto authored on 2009-11-19
801

            
added commit method
yuki-kimoto authored on 2010-05-27
802
    # select * from books;
cleanup
yuki-kimoto authored on 2010-08-05
803
    my $result = $dbi->select(table => 'books');
packaging one directory
yuki-kimoto authored on 2009-11-16
804
    
update document
yuki-kimoto authored on 2009-11-19
805
    # select * from books where title = 'Perl';
cleanup
yuki-kimoto authored on 2010-08-05
806
    my $result = $dbi->select(table => 'books', where => {title => 1});
update document
yuki-kimoto authored on 2009-11-19
807
    
808
    # select title, author from books where id = 1 for update;
cleanup
yuki-kimoto authored on 2010-08-05
809
    my $result = $dbi->select(
removed register_format()
yuki-kimoto authored on 2010-05-26
810
        table  => 'books',
removed reconnect method
yuki-kimoto authored on 2010-05-28
811
        column => ['title', 'author'],
removed register_format()
yuki-kimoto authored on 2010-05-26
812
        where  => {id => 1},
813
        appned => 'for update'
update document
yuki-kimoto authored on 2009-11-19
814
    );
815
    
added commit method
yuki-kimoto authored on 2010-05-27
816
    # select books.name as book_name from books, rental 
817
    # where books.id = rental.book_id;
818
    my $result = $dbi->select(
removed reconnect method
yuki-kimoto authored on 2010-05-28
819
        table    => ['books', 'rental'],
820
        column   => ['books.name as book_name']
added commit method
yuki-kimoto authored on 2010-05-27
821
        relation => {'books.id' => 'rental.book_id'}
update document
yuki-kimoto authored on 2009-11-19
822
    );
823

            
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
824
=head2 C<build_query>
removed reconnect method
yuki-kimoto authored on 2010-05-28
825
    
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
826
    my $query = $dbi->build_query(
removed DBIx::Custom commit ...
yuki-kimoto authored on 2010-07-14
827
        "select * from authors where {= name} and {= age};"
828
    );
829

            
renamed default_query_filter...
yuki-kimoto authored on 2010-08-03
830
Build the instance of L<DBIx::Custom::Query>
831
using L<DBIx::Custom::QueryBuilder>.
packaging one directory
yuki-kimoto authored on 2009-11-16
832

            
removed DBIx::Custom commit ...
yuki-kimoto authored on 2010-07-14
833
=head2 C<execute>
removed reconnect method
yuki-kimoto authored on 2010-05-28
834

            
cleanup
yuki-kimoto authored on 2010-08-05
835
    my $result = $dbi->execute($query,  param => $params, filter => \%filter);
836
    my $result = $dbi->execute($source, param => $params, filter => \%filter);
removed reconnect method
yuki-kimoto authored on 2010-05-28
837

            
838
Execute the instace of L<DBIx::Custom::Query> or
839
the string written by SQL template.
840
Return value is the instance of L<DBIx::Custom::Result>.
841

            
removed DBIx::Custom commit ...
yuki-kimoto authored on 2010-07-14
842
B<Example:>
removed reconnect method
yuki-kimoto authored on 2010-05-28
843

            
cleanup
yuki-kimoto authored on 2010-08-05
844
    my $result = $dbi->execute("select * from authors where {= name} and {= age}", 
removed reconnect method
yuki-kimoto authored on 2010-05-28
845
                            param => {name => 'taro', age => 19});
846
    
847
    while (my $row = $result->fetch) {
848
        # do something
849
    }
850

            
removed DBIx::Custom commit ...
yuki-kimoto authored on 2010-07-14
851
=head2 C<register_filter>
removed reconnect method
yuki-kimoto authored on 2010-05-28
852

            
853
    $dbi->register_filter(%filters);
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
854
    $dbi->register_filter(\%filters);
removed reconnect method
yuki-kimoto authored on 2010-05-28
855
    
removed DBIx::Custom commit ...
yuki-kimoto authored on 2010-07-14
856
Resister filter.
857

            
858
B<Example:>
packaging one directory
yuki-kimoto authored on 2009-11-16
859

            
removed reconnect method
yuki-kimoto authored on 2010-05-28
860
    $dbi->register_filter(
861
        encode_utf8 => sub {
862
            my $value = shift;
863
            
864
            require Encode;
865
            
866
            return Encode::encode('UTF-8', $value);
867
        },
868
        decode_utf8 => sub {
869
            my $value = shift;
870
            
871
            require Encode;
872
            
873
            return Encode::decode('UTF-8', $value)
874
        }
875
    );
876

            
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
877
=head1 BUGS
878

            
879
Please tell me bugs.
880

            
881
C<< <kimoto.yuki at gmail.com> >>
882

            
883
L<http://github.com/yuki-kimoto/DBIx-Custom>
884

            
removed reconnect method
yuki-kimoto authored on 2010-05-28
885
=head1 AUTHOR
886

            
887
Yuki Kimoto, C<< <kimoto.yuki at gmail.com> >>
version 0.0901
yuki-kimoto authored on 2009-12-17
888

            
packaging one directory
yuki-kimoto authored on 2009-11-16
889
=head1 COPYRIGHT & LICENSE
890

            
891
Copyright 2009 Yuki Kimoto, all rights reserved.
892

            
893
This program is free software; you can redistribute it and/or modify it
894
under the same terms as Perl itself.
895

            
896
=cut
added cache_method attribute
yuki-kimoto authored on 2010-06-25
897

            
898