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

            
- fixed bug that model inser...
Yuki Kimoto authored on 2011-06-10
3
our $VERSION = '0.1688';
fixed DBIx::Custom::QueryBui...
yuki-kimoto authored on 2010-08-15
4

            
5
use 5.008001;
cleanup
yuki-kimoto authored on 2009-12-22
6
use strict;
7
use warnings;
8

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

            
packaging one directory
yuki-kimoto authored on 2009-11-16
11
use Carp 'croak';
12
use DBI;
13
use DBIx::Custom::Result;
cleanup
yuki-kimoto authored on 2010-02-11
14
use DBIx::Custom::Query;
cleanup
yuki-kimoto authored on 2010-08-05
15
use DBIx::Custom::QueryBuilder;
added experimental DBIx::Cus...
Yuki Kimoto authored on 2011-01-18
16
use DBIx::Custom::Where;
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
17
use DBIx::Custom::Model;
cleanup
Yuki Kimoto authored on 2011-01-25
18
use DBIx::Custom::Tag;
cleanup
Yuki Kimoto authored on 2011-04-25
19
use DBIx::Custom::Util qw/_array_to_hash _subname/;
improved debug message
Yuki Kimoto authored on 2011-05-23
20
use Encode qw/encode encode_utf8 decode_utf8/;
packaging one directory
yuki-kimoto authored on 2009-11-16
21

            
added environment variable D...
Yuki Kimoto authored on 2011-04-02
22
use constant DEBUG => $ENV{DBIX_CUSTOM_DEBUG} || 0;
improved debug message
Yuki Kimoto authored on 2011-05-23
23
use constant DEBUG_ENCODING => $ENV{DBIX_CUSTOM_DEBUG_ENCODING} || 'UTF-8';
added environment variable D...
Yuki Kimoto authored on 2011-04-02
24

            
added EXPERIMENTAL execute()...
Yuki Kimoto authored on 2011-06-09
25
our @COMMON_ARGS = qw/table query filter type id primary_key type_rule_off/;
cleanup
Yuki Kimoto authored on 2011-03-21
26

            
fix tests
Yuki Kimoto authored on 2011-01-13
27
__PACKAGE__->attr(
data_source is DEPRECATED! I...
Yuki Kimoto authored on 2011-06-06
28
    [qw/connector dsn password user/],
removed from cache() and cac...
Yuki Kimoto authored on 2011-03-29
29
    cache => 0,
many changed
Yuki Kimoto authored on 2011-01-23
30
    cache_method => sub {
31
        sub {
32
            my $self = shift;
33
            
34
            $self->{_cached} ||= {};
35
            
36
            if (@_ > 1) {
update pod
Yuki Kimoto authored on 2011-03-13
37
                $self->{_cached}{$_[0]} = $_[1];
many changed
Yuki Kimoto authored on 2011-01-23
38
            }
39
            else {
update pod
Yuki Kimoto authored on 2011-03-13
40
                return $self->{_cached}{$_[0]};
many changed
Yuki Kimoto authored on 2011-01-23
41
            }
42
        }
update pod
Yuki Kimoto authored on 2011-03-13
43
    },
44
    dbi_option => sub { {} },
45
    default_dbi_option => sub {
46
        {
47
            RaiseError => 1,
48
            PrintError => 0,
49
            AutoCommit => 1
50
        }
51
    },
fix tests
Yuki Kimoto authored on 2011-01-13
52
    filters => sub {
53
        {
54
            encode_utf8 => sub { encode_utf8($_[0]) },
55
            decode_utf8 => sub { decode_utf8($_[0]) }
56
        }
update pod
Yuki Kimoto authored on 2011-03-13
57
    },
58
    models => sub { {} },
59
    query_builder => sub { DBIx::Custom::QueryBuilder->new },
60
    result_class  => 'DBIx::Custom::Result',
added EXPERIMENTAL reserved_...
Yuki Kimoto authored on 2011-03-30
61
    reserved_word_quote => '',
update pod
Yuki Kimoto authored on 2011-03-13
62
    safety_character => '\w',
63
    stash => sub { {} }
fix tests
Yuki Kimoto authored on 2011-01-13
64
);
cleanup
yuki-kimoto authored on 2010-10-17
65

            
added helper method
yuki-kimoto authored on 2010-10-17
66
our $AUTOLOAD;
67
sub AUTOLOAD {
68
    my $self = shift;
69

            
renamed helper to method.
Yuki Kimoto authored on 2011-01-25
70
    # Method name
71
    my ($package, $mname) = $AUTOLOAD =~ /^([\w\:]+)\:\:(\w+)$/;
added helper method
yuki-kimoto authored on 2010-10-17
72

            
cleanup
Yuki Kimoto authored on 2011-04-02
73
    # Call method
renamed helper to method.
Yuki Kimoto authored on 2011-01-25
74
    $self->{_methods} ||= {};
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
75
    if (my $method = $self->{_methods}->{$mname}) {
76
        return $self->$method(@_)
77
    }
- removed EXPERIMENTAL Prefo...
Yuki Kimoto authored on 2011-04-04
78
    elsif ($self->{dbh} && (my $dbh_method = $self->dbh->can($mname))) {
- added EXPERIMENTAL DBIx::C...
Yuki Kimoto authored on 2011-03-15
79
        $self->dbh->$dbh_method(@_);
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
80
    }
81
    else {
cleanup
Yuki Kimoto authored on 2011-04-25
82
        croak qq{Can't locate object method "$mname" via "$package" }
83
            . _subname;
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
84
    }
added helper method
yuki-kimoto authored on 2010-10-17
85
}
86

            
renamed auto_filter to apply...
Yuki Kimoto authored on 2011-01-12
87
sub apply_filter {
many changed
Yuki Kimoto authored on 2011-01-23
88
    my ($self, $table, @cinfos) = @_;
89

            
90
    # Initialize filters
cleanup
Yuki Kimoto authored on 2011-01-12
91
    $self->{filter} ||= {};
many changed
Yuki Kimoto authored on 2011-01-23
92
    $self->{filter}{out} ||= {};
93
    $self->{filter}{in} ||= {};
all filter can receive array...
Yuki Kimoto authored on 2011-02-25
94
    $self->{filter}{end} ||= {};
cleanup
Yuki Kimoto authored on 2010-12-22
95
    
cleanup
Yuki Kimoto authored on 2011-04-02
96
    # Usage
many changed
Yuki Kimoto authored on 2011-01-23
97
    my $usage = "Usage: \$dbi->apply_filter(" .
fix bug : filter can't over...
Yuki Kimoto authored on 2011-02-09
98
                "TABLE, COLUMN1, {in => INFILTER1, out => OUTFILTER1, end => ENDFILTER1}, " .
99
                "COLUMN2, {in => INFILTER2, out => OUTFILTER2, end => ENDFILTER2}, ...)";
cleanup
Yuki Kimoto authored on 2011-04-02
100
    
101
    # Apply filter
many changed
Yuki Kimoto authored on 2011-01-23
102
    for (my $i = 0; $i < @cinfos; $i += 2) {
added auto_filter method
kimoto.yuki@gmail.com authored on 2010-12-21
103
        
many changed
Yuki Kimoto authored on 2011-01-23
104
        # Column
105
        my $column = $cinfos[$i];
all filter can receive array...
Yuki Kimoto authored on 2011-02-25
106
        if (ref $column eq 'ARRAY') {
107
            foreach my $c (@$column) {
108
                push @cinfos, $c, $cinfos[$i + 1];
109
            }
110
            next;
111
        }
112
        
cleanup
Yuki Kimoto authored on 2011-04-02
113
        # Filter infomation
fix bug : filter can't over...
Yuki Kimoto authored on 2011-02-09
114
        my $finfo = $cinfos[$i + 1] || {};
cleanup
Yuki Kimoto authored on 2011-04-25
115
        croak "$usage (table: $table) " . _subname
improved error messages
Yuki Kimoto authored on 2011-04-18
116
          unless  ref $finfo eq 'HASH';
fix bug : filter can't over...
Yuki Kimoto authored on 2011-02-09
117
        foreach my $ftype (keys %$finfo) {
cleanup
Yuki Kimoto authored on 2011-04-25
118
            croak "$usage (table: $table) " . _subname
improved error messages
Yuki Kimoto authored on 2011-04-18
119
              unless $ftype eq 'in' || $ftype eq 'out' || $ftype eq 'end'; 
many changed
Yuki Kimoto authored on 2011-01-23
120
        }
121
        
cleanup
Yuki Kimoto authored on 2011-04-02
122
        # Set filters
fix bug : filter can't over...
Yuki Kimoto authored on 2011-02-09
123
        foreach my $way (qw/in out end/) {
cleanup
Yuki Kimoto authored on 2011-04-02
124
        
125
            # Filter
fix bug : filter can't over...
Yuki Kimoto authored on 2011-02-09
126
            my $filter = $finfo->{$way};
cleanup
Yuki Kimoto authored on 2010-12-22
127
            
cleanup
Yuki Kimoto authored on 2011-04-02
128
            # Filter state
fix bug : filter can't over...
Yuki Kimoto authored on 2011-02-09
129
            my $state = !exists $finfo->{$way} ? 'not_exists'
130
                      : !defined $filter        ? 'not_defined'
131
                      : ref $filter eq 'CODE'   ? 'code'
132
                      : 'name';
133
            
cleanup
Yuki Kimoto authored on 2011-04-02
134
            # Filter is not exists
fix bug : filter can't over...
Yuki Kimoto authored on 2011-02-09
135
            next if $state eq 'not_exists';
136
            
cleanup
Yuki Kimoto authored on 2011-04-02
137
            # Check filter name
cleanup
Yuki Kimoto authored on 2011-04-25
138
            croak qq{Filter "$filter" is not registered } . _subname
fix bug : filter can't over...
Yuki Kimoto authored on 2011-02-09
139
              if  $state eq 'name'
140
               && ! exists $self->filters->{$filter};
141
            
cleanup
Yuki Kimoto authored on 2011-04-02
142
            # Set filter
fix bug : filter can't over...
Yuki Kimoto authored on 2011-02-09
143
            my $f = $state eq 'not_defined' ? undef
144
                  : $state eq 'code'        ? $filter
145
                  : $self->filters->{$filter};
146
            $self->{filter}{$way}{$table}{$column} = $f;
147
            $self->{filter}{$way}{$table}{"$table.$column"} = $f;
148
            $self->{filter}{$way}{$table}{"${table}__$column"} = $f;
many changed
Yuki Kimoto authored on 2011-01-23
149
        }
added auto_filter method
kimoto.yuki@gmail.com authored on 2010-12-21
150
    }
151
    
many changed
Yuki Kimoto authored on 2011-01-23
152
    return $self;
added auto_filter method
kimoto.yuki@gmail.com authored on 2010-12-21
153
}
154

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
155
sub assign_param {
added EXPERIMENTAL assign_ta...
Yuki Kimoto authored on 2011-04-26
156
    my ($self, $param) = @_;
157
    
158
    # Create set tag
159
    my @params;
160
    my $safety = $self->safety_character;
161
    my $q = $self->reserved_word_quote;
162
    foreach my $column (keys %$param) {
163
        croak qq{"$column" is not safety column name } . _subname
164
          unless $column =~ /^[$safety\.]+$/;
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
165
        my $column_quote = "$q$column$q";
166
        $column_quote =~ s/\./$q.$q/;
167
        push @params, "$column_quote = :$column";
added EXPERIMENTAL assign_ta...
Yuki Kimoto authored on 2011-04-26
168
    }
169
    my $tag = join(', ', @params);
170
    
171
    return $tag;
172
}
173

            
added EXPERIMENTAL col metho...
Yuki Kimoto authored on 2011-06-08
174
sub col {
175
    my ($self, $table, $columns) = @_;
176
    
177
    # Reserved word quote
178
    my $q = $self->reserved_word_quote;
179
    
180
    # Column clause
181
    my @column;
182
    $columns ||= [];
183
    push @column, "$q$table$q.$q$_$q as $q${table}.$_$q" for @$columns;
184
    
185
    return join (', ', @column);
186
}
187

            
cleanup
Yuki Kimoto authored on 2011-03-21
188
sub column {
189
    my ($self, $table, $columns) = @_;
added helper method
yuki-kimoto authored on 2010-10-17
190
    
cleanup
Yuki Kimoto authored on 2011-04-02
191
    # Reserved word quote
added EXPERIMENTAL reserved_...
Yuki Kimoto authored on 2011-03-30
192
    my $q = $self->reserved_word_quote;
193
    
cleanup
Yuki Kimoto authored on 2011-04-02
194
    # Column clause
cleanup
Yuki Kimoto authored on 2011-03-21
195
    my @column;
cleanup
Yuki Kimoto authored on 2011-04-02
196
    $columns ||= [];
set reserved_word_quote auto...
Yuki Kimoto authored on 2011-06-08
197
    push @column, "$q$table$q.$q$_$q as $q${table}__$_$q" for @$columns;
cleanup
Yuki Kimoto authored on 2011-03-21
198
    
199
    return join (', ', @column);
added helper method
yuki-kimoto authored on 2010-10-17
200
}
201

            
packaging one directory
yuki-kimoto authored on 2009-11-16
202
sub connect {
cleanup
Yuki Kimoto authored on 2011-01-25
203
    my $self = ref $_[0] ? shift : shift->new(@_);;
removed register_format()
yuki-kimoto authored on 2010-05-26
204
    
- removed EXPERIMENTAL Prefo...
Yuki Kimoto authored on 2011-04-04
205
    # Connect
206
    $self->dbh;
update document
yuki-kimoto authored on 2010-01-30
207
    
packaging one directory
yuki-kimoto authored on 2009-11-16
208
    return $self;
209
}
210

            
cleanup
yuki-kimoto authored on 2010-10-17
211
sub create_query {
212
    my ($self, $source) = @_;
update document
yuki-kimoto authored on 2010-01-30
213
    
cleanup
yuki-kimoto authored on 2010-10-17
214
    # Cache
215
    my $cache = $self->cache;
update document
yuki-kimoto authored on 2010-01-30
216
    
cleanup
Yuki Kimoto authored on 2011-04-02
217
    # Query
cleanup
yuki-kimoto authored on 2010-10-17
218
    my $query;
cleanup
Yuki Kimoto authored on 2011-04-02
219
    
220
    # Get cached query
cleanup
yuki-kimoto authored on 2010-10-17
221
    if ($cache) {
222
        
223
        # Get query
224
        my $q = $self->cache_method->($self, $source);
225
        
226
        # Create query
add table tag
Yuki Kimoto authored on 2011-02-09
227
        if ($q) {
228
            $query = DBIx::Custom::Query->new($q);
229
            $query->filters($self->filters);
230
        }
cleanup
yuki-kimoto authored on 2010-10-17
231
    }
232
    
cleanup
Yuki Kimoto authored on 2011-04-02
233
    # Create query
cleanup
yuki-kimoto authored on 2010-10-17
234
    unless ($query) {
cleanup insert
yuki-kimoto authored on 2010-04-28
235

            
cleanup
yuki-kimoto authored on 2010-10-17
236
        # Create query
cleanup
Yuki Kimoto authored on 2011-04-02
237
        my $builder = $self->query_builder;
cleanup
yuki-kimoto authored on 2010-10-17
238
        $query = $builder->build_query($source);
removed register_format()
yuki-kimoto authored on 2010-05-26
239

            
cleanup
Yuki Kimoto authored on 2011-04-02
240
        # Remove reserved word quote
added EXPERIMENTAL reserved_...
Yuki Kimoto authored on 2011-03-30
241
        if (my $q = $self->reserved_word_quote) {
cleanup
Yuki Kimoto authored on 2011-04-02
242
            $_ =~ s/$q//g for @{$query->columns}
added EXPERIMENTAL reserved_...
Yuki Kimoto authored on 2011-03-30
243
        }
244

            
cleanup
Yuki Kimoto authored on 2011-04-02
245
        # Save query to cache
246
        $self->cache_method->(
247
            $self, $source,
248
            {
249
                sql     => $query->sql, 
250
                columns => $query->columns,
251
                tables  => $query->tables
252
            }
253
        ) if $cache;
cleanup insert
yuki-kimoto authored on 2010-04-28
254
    }
255
    
cleanup
yuki-kimoto authored on 2010-10-17
256
    # Prepare statement handle
257
    my $sth;
258
    eval { $sth = $self->dbh->prepare($query->{sql})};
improved error messages
Yuki Kimoto authored on 2011-04-18
259
    
260
    if ($@) {
261
        $self->_croak($@, qq{. Following SQL is executed.\n}
cleanup
Yuki Kimoto authored on 2011-04-25
262
                        . qq{$query->{sql}\n} . _subname);
improved error messages
Yuki Kimoto authored on 2011-04-18
263
    }
packaging one directory
yuki-kimoto authored on 2009-11-16
264
    
cleanup
yuki-kimoto authored on 2010-10-17
265
    # Set statement handle
266
    $query->sth($sth);
packaging one directory
yuki-kimoto authored on 2009-11-16
267
    
cleanup
Yuki Kimoto authored on 2011-02-09
268
    # Set filters
269
    $query->filters($self->filters);
270
    
cleanup
yuki-kimoto authored on 2010-10-17
271
    return $query;
packaging one directory
yuki-kimoto authored on 2009-11-16
272
}
273

            
update pod
Yuki Kimoto authored on 2011-03-13
274
sub dbh {
275
    my $self = shift;
cleanup
Yuki Kimoto authored on 2011-04-02
276
    
fixed dbh() method bug:wq
Yuki Kimoto authored on 2011-04-05
277
    # Set
278
    if (@_) {
279
        $self->{dbh} = $_[0];
280
        
281
        return $self;
282
    }
283
    
284
    # Get
285
    else {
286
        # From Connction manager
287
        if (my $connector = $self->connector) {
cleanup
Yuki Kimoto authored on 2011-04-25
288
            croak "connector must have dbh() method " . _subname
fixed dbh() method bug:wq
Yuki Kimoto authored on 2011-04-05
289
              unless ref $connector && $connector->can('dbh');
290
              
set reserved_word_quote auto...
Yuki Kimoto authored on 2011-06-08
291
            $self->{dbh} = $connector->dbh;
fixed dbh() method bug:wq
Yuki Kimoto authored on 2011-04-05
292
        }
293
        
set reserved_word_quote auto...
Yuki Kimoto authored on 2011-06-08
294
        # Connect
295
        $self->{dbh} ||= $self->_connect;
296
        
297
        # Quote
298
        unless ($self->reserved_word_quote) {
299
            my $driver = $self->{dbh}->{Driver}->{Name};
300
            my $quote = $driver eq 'mysql' ? '`' : '"';
301
            $self->reserved_word_quote($quote);
302
        }
303

            
304
        return $self->{dbh};
update pod
Yuki Kimoto authored on 2011-03-13
305
    }
306
}
307

            
cleanup
Yuki Kimoto authored on 2011-03-21
308
our %DELETE_ARGS
DEPRECATED select() param op...
Yuki Kimoto authored on 2011-04-25
309
  = map { $_ => 1 } @COMMON_ARGS, qw/where append allow_delete_all where_param/;
cleanup update and update_al...
yuki-kimoto authored on 2010-04-28
310

            
cleanup
yuki-kimoto authored on 2010-10-17
311
sub delete {
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
312
    my ($self, %args) = @_;
added EXPERIMENTAL reserved_...
Yuki Kimoto authored on 2011-03-30
313

            
cleanup
Yuki Kimoto authored on 2011-04-02
314
    # Check arguments
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
315
    foreach my $name (keys %args) {
cleanup
Yuki Kimoto authored on 2011-04-25
316
        croak qq{"$name" is wrong option } . _subname
cleanup
Yuki Kimoto authored on 2011-03-21
317
          unless $DELETE_ARGS{$name};
cleanup update and update_al...
yuki-kimoto authored on 2010-04-28
318
    }
319
    
320
    # Arguments
cleanup
Yuki Kimoto authored on 2011-03-21
321
    my $table = $args{table} || '';
cleanup
Yuki Kimoto authored on 2011-04-25
322
    croak qq{"table" option must be specified. } . _subname
improved error messages
Yuki Kimoto authored on 2011-04-18
323
      unless $table;
cleanup
Yuki Kimoto authored on 2011-03-21
324
    my $where            = delete $args{where} || {};
325
    my $append           = delete $args{append};
326
    my $allow_delete_all = delete $args{allow_delete_all};
DEPRECATED select() param op...
Yuki Kimoto authored on 2011-04-25
327
    my $where_param      = delete $args{where_param} || {};
delete_at is DEPRECATED! use...
Yuki Kimoto authored on 2011-06-08
328
    my $id = delete $args{id};
329
    my $primary_key = delete $args{primary_key};
330
    croak "update method primary_key option " .
331
          "must be specified when id is specified " . _subname
332
      if defined $id && !defined $primary_key;
333
    $primary_key = [$primary_key] unless ref $primary_key eq 'ARRAY';
334
    
make delete() using where ob...
Yuki Kimoto authored on 2011-01-26
335
    # Where
delete_at is DEPRECATED! use...
Yuki Kimoto authored on 2011-06-08
336
    $where = $self->_create_param_from_id($id, $primary_key) if $id;
select, update, and delete w...
Yuki Kimoto authored on 2011-04-25
337
    my $where_clause = '';
338
    if (ref $where) {
339
        $where = $self->_where_to_obj($where);
DEPRECATED select() param op...
Yuki Kimoto authored on 2011-04-25
340
        $where_param = keys %$where_param
341
                     ? $self->merge_param($where_param, $where->param)
342
                     : $where->param;
select, update, and delete w...
Yuki Kimoto authored on 2011-04-25
343
        
344
        # String where
345
        $where_clause = $where->to_string;
346
    }
347
    elsif ($where) { $where_clause = "where $where" }
cleanup
Yuki Kimoto authored on 2011-04-25
348
    croak qq{"where" must be specified } . _subname
cleanup
Yuki Kimoto authored on 2011-04-02
349
      if $where_clause eq '' && !$allow_delete_all;
make delete() using where ob...
Yuki Kimoto authored on 2011-01-26
350

            
cleanup
Yuki Kimoto authored on 2011-04-02
351
    # Delete statement
cleanup
Yuki Kimoto authored on 2011-01-27
352
    my @sql;
cleanup
Yuki Kimoto authored on 2011-04-02
353
    my $q = $self->reserved_word_quote;
354
    push @sql, "delete from $q$table$q $where_clause";
cleanup
Yuki Kimoto authored on 2011-01-27
355
    push @sql, $append if $append;
356
    my $sql = join(' ', @sql);
packaging one directory
yuki-kimoto authored on 2009-11-16
357
    
358
    # Execute query
cleanup
Yuki Kimoto authored on 2011-04-02
359
    return $self->execute(
cleanup
Yuki Kimoto authored on 2011-06-09
360
        $sql,
DEPRECATED select() param op...
Yuki Kimoto authored on 2011-04-25
361
        param => $where_param,
cleanup
Yuki Kimoto authored on 2011-03-21
362
        table => $table,
363
        %args
364
    );
packaging one directory
yuki-kimoto authored on 2009-11-16
365
}
366

            
cleanup
yuki-kimoto authored on 2010-10-17
367
sub delete_all { shift->delete(allow_delete_all => 1, @_) }
packaging one directory
yuki-kimoto authored on 2009-11-16
368

            
added helper method
yuki-kimoto authored on 2010-10-17
369
sub DESTROY { }
370

            
removed EXPERIMETNAL flag fr...
Yuki Kimoto authored on 2011-03-25
371
sub create_model {
372
    my $self = shift;
373
    
cleanup
Yuki Kimoto authored on 2011-04-02
374
    # Arguments
removed EXPERIMETNAL flag fr...
Yuki Kimoto authored on 2011-03-25
375
    my $args = ref $_[0] eq 'HASH' ? $_[0] : {@_};
376
    $args->{dbi} = $self;
377
    my $model_class = delete $args->{model_class} || 'DBIx::Custom::Model';
378
    my $model_name  = delete $args->{name};
379
    my $model_table = delete $args->{table};
380
    $model_name ||= $model_table;
381
    
cleanup
Yuki Kimoto authored on 2011-04-02
382
    # Create model
removed EXPERIMETNAL flag fr...
Yuki Kimoto authored on 2011-03-25
383
    my $model = $model_class->new($args);
384
    $model->name($model_name) unless $model->name;
385
    $model->table($model_table) unless $model->table;
386
    
387
    # Apply filter
DBIx::Custom::Model filter a...
Yuki Kimoto authored on 2011-04-18
388
    my $filter = ref $model->filter eq 'HASH'
389
               ? [%{$model->filter}]
390
               : $model->filter;
391
    $self->apply_filter($model->table, @$filter);
removed EXPERIMETNAL flag fr...
Yuki Kimoto authored on 2011-03-25
392
    
cleanup
Yuki Kimoto authored on 2011-04-02
393
    # Associate table with model
cleanup
Yuki Kimoto authored on 2011-04-25
394
    croak "Table name is duplicated " . _subname
removed EXPERIMETNAL flag fr...
Yuki Kimoto authored on 2011-03-25
395
      if exists $self->{_model_from}->{$model->table};
396
    $self->{_model_from}->{$model->table} = $model->name;
397

            
398
    # Table alias
399
    $self->{_table_alias} ||= {};
400
    $self->{_table_alias} = {%{$self->{_table_alias}}, %{$model->table_alias}};
401
    
402
    # Set model
403
    $self->model($model->name, $model);
404
    
create_model() return model
Yuki Kimoto authored on 2011-03-29
405
    return $self->model($model->name);
removed EXPERIMETNAL flag fr...
Yuki Kimoto authored on 2011-03-25
406
}
407

            
408
sub each_column {
409
    my ($self, $cb) = @_;
410
    
411
    # Iterate all tables
412
    my $sth_tables = $self->dbh->table_info;
413
    while (my $table_info = $sth_tables->fetchrow_hashref) {
414
        
415
        # Table
416
        my $table = $table_info->{TABLE_NAME};
417
        
418
        # Iterate all columns
419
        my $sth_columns = $self->dbh->column_info(undef, undef, $table, '%');
420
        while (my $column_info = $sth_columns->fetchrow_hashref) {
421
            my $column = $column_info->{COLUMN_NAME};
422
            $self->$cb($table, $column, $column_info);
423
        }
424
    }
425
}
426

            
cleanup
Yuki Kimoto authored on 2011-04-02
427
our %EXECUTE_ARGS = map { $_ => 1 } @COMMON_ARGS, 'param';
428

            
429
sub execute {
execute method can second ar...
Yuki Kimoto authored on 2011-06-09
430
    my $self = shift;
431
    my $query = shift;
432
    my $param;
433
    $param = shift if @_ % 2;
434
    my %args = @_;
refactoring delete and delet...
yuki-kimoto authored on 2010-04-28
435
    
cleanup
Yuki Kimoto authored on 2011-04-02
436
    # Arguments
execute method can second ar...
Yuki Kimoto authored on 2011-06-09
437
    my $p = delete $args{param} || {};
438
    $param ||= $p;
cleanup
Yuki Kimoto authored on 2011-04-02
439
    my $tables = delete $args{table} || [];
440
    $tables = [$tables] unless ref $tables eq 'ARRAY';
cleanup
Yuki Kimoto authored on 2011-04-02
441
    my $filter = delete $args{filter};
cleanup
Yuki Kimoto authored on 2011-04-25
442
    $filter = _array_to_hash($filter);
cleanup
Yuki Kimoto authored on 2011-04-02
443
    my $type = delete $args{type};
cleanup
Yuki Kimoto authored on 2011-04-25
444
    $type = _array_to_hash($type);
added EXPERIMENTAL execute()...
Yuki Kimoto authored on 2011-06-09
445
    my $type_rule_off = delete $args{type_rule_off};
cleanup
Yuki Kimoto authored on 2011-06-09
446
    my $query_return = delete $args{query};
added EXPERIMENTAL reserved_...
Yuki Kimoto authored on 2011-03-30
447
    
cleanup
Yuki Kimoto authored on 2011-03-09
448
    # Check argument names
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
449
    foreach my $name (keys %args) {
cleanup
Yuki Kimoto authored on 2011-04-25
450
        croak qq{"$name" is wrong option } . _subname
cleanup
Yuki Kimoto authored on 2011-03-21
451
          unless $EXECUTE_ARGS{$name};
refactoring delete and delet...
yuki-kimoto authored on 2010-04-28
452
    }
453
    
cleanup
Yuki Kimoto authored on 2011-04-02
454
    # Create query
455
    $query = $self->create_query($query) unless ref $query;
cleanup
Yuki Kimoto authored on 2011-06-09
456
    return $query if $query_return;
cleanup
Yuki Kimoto authored on 2011-04-02
457
    $filter ||= $query->filter;
all filter can receive array...
Yuki Kimoto authored on 2011-02-25
458
    
cleanup
Yuki Kimoto authored on 2011-04-02
459
    # Tables
460
    unshift @$tables, @{$query->tables};
cleanup
Yuki Kimoto authored on 2011-03-09
461
    my $main_table = pop @$tables;
cleanup
Yuki Kimoto authored on 2011-04-02
462
    $tables = $self->_remove_duplicate_table($tables, $main_table);
463
    if (my $q = $self->reserved_word_quote) {
464
        $_ =~ s/$q//g for @$tables;
465
    }
cleanup
Yuki Kimoto authored on 2011-04-02
466
    
467
    # Table alias
cleanup
Yuki Kimoto authored on 2011-04-02
468
    foreach my $table (@$tables) {
- added EXPERIMENTAL DBIx::C...
Yuki Kimoto authored on 2011-03-15
469
        
cleanup
Yuki Kimoto authored on 2011-04-02
470
        # No need
471
        next unless my $alias = $self->{_table_alias}->{$table};
472
        $self->{filter} ||= {};
473
        next if $self->{filter}{out}{$table};
474
        
475
        # Filter
476
        $self->{filter}{out} ||= {};
477
        $self->{filter}{in}  ||= {};
478
        $self->{filter}{end} ||= {};
479
        
480
        # Create alias filter
481
        foreach my $type (qw/out in end/) {
482
            my @filter_names = keys %{$self->{filter}{$type}{$alias} || {}};
483
            foreach my $filter_name (@filter_names) {
484
                my $filter_name_alias = $filter_name;
485
                $filter_name_alias =~ s/^$alias\./$table\./;
486
                $filter_name_alias =~ s/^${alias}__/${table}__/; 
487
                $self->{filter}{$type}{$table}{$filter_name_alias}
488
                  = $self->{filter}{$type}{$alias}{$filter_name}
- added EXPERIMENTAL DBIx::C...
Yuki Kimoto authored on 2011-03-15
489
            }
490
        }
491
    }
added type_rule into logic
Yuki Kimoto authored on 2011-06-09
492

            
493
    # Type rule
494
    my $applied_filter = {};
added EXPERIMENTAL execute()...
Yuki Kimoto authored on 2011-06-09
495
    unless ($type_rule_off) {
496
        foreach my $name (keys %$param) {
497
            my $table;
498
            my $column;
499
            if ($name =~ /(?:(.+)\.)?(.+)/) {
500
                $table = $1;
501
                $column = $2;
502
            }
503
            $table ||= $main_table;
504
            
505
            my $into = $self->{_into} || {};
506
            if (defined $table && $into->{$table} &&
507
                (my $rule = $into->{$table}->{$column}))
508
            {
509
                $applied_filter->{$column} = $rule;
510
                $applied_filter->{"$table.$column"} = $rule;
511
            }
added type_rule into logic
Yuki Kimoto authored on 2011-06-09
512
        }
513
    }
cleanup
Yuki Kimoto authored on 2011-04-02
514
    
515
    # Applied filter
renamed auto_filter to apply...
Yuki Kimoto authored on 2011-01-12
516
    foreach my $table (@$tables) {
cleanup
Yuki Kimoto authored on 2011-04-02
517
        $applied_filter = {
518
            %$applied_filter,
cleanup
Yuki Kimoto authored on 2011-01-12
519
            %{$self->{filter}{out}->{$table} || {}}
added auto_filter method
kimoto.yuki@gmail.com authored on 2010-12-21
520
        }
521
    }
cleanup
Yuki Kimoto authored on 2011-04-02
522
    $filter = {%$applied_filter, %$filter};
added auto_filter method
kimoto.yuki@gmail.com authored on 2010-12-21
523
    
cleanup
Yuki Kimoto authored on 2011-04-02
524
    # Replace filter name to code
525
    foreach my $column (keys %$filter) {
526
        my $name = $filter->{$column};
527
        if (!defined $name) {
528
            $filter->{$column} = undef;
renamed auto_filter to apply...
Yuki Kimoto authored on 2011-01-12
529
        }
cleanup
Yuki Kimoto authored on 2011-04-02
530
        elsif (ref $name ne 'CODE') {
cleanup
Yuki Kimoto authored on 2011-04-25
531
          croak qq{Filter "$name" is not registered" } . _subname
cleanup
Yuki Kimoto authored on 2011-04-02
532
            unless exists $self->filters->{$name};
533
          $filter->{$column} = $self->filters->{$name};
cleanup
Yuki Kimoto authored on 2010-12-21
534
        }
535
    }
packaging one directory
yuki-kimoto authored on 2009-11-16
536
    
cleanup
Yuki Kimoto authored on 2011-04-02
537
    # Create bind values
538
    my $bind = $self->_create_bind_values(
539
        $param,
540
        $query->columns,
541
        $filter,
542
        $type
543
    );
cleanup
yuki-kimoto authored on 2010-10-17
544
    
545
    # Execute
added experimental not_exist...
Yuki Kimoto authored on 2011-01-26
546
    my $sth = $query->sth;
cleanup
yuki-kimoto authored on 2010-10-17
547
    my $affected;
cleanup
Yuki Kimoto authored on 2011-03-21
548
    eval {
549
        for (my $i = 0; $i < @$bind; $i++) {
cleanup
Yuki Kimoto authored on 2011-04-02
550
            my $type = $bind->[$i]->{type};
551
            $sth->bind_param($i + 1, $bind->[$i]->{value}, $type ? $type : ());
cleanup
Yuki Kimoto authored on 2011-03-21
552
        }
553
        $affected = $sth->execute;
554
    };
improved error messages
Yuki Kimoto authored on 2011-04-18
555
    
556
    if ($@) {
557
        $self->_croak($@, qq{. Following SQL is executed.\n}
cleanup
Yuki Kimoto authored on 2011-04-25
558
                        . qq{$query->{sql}\n} . _subname);
improved error messages
Yuki Kimoto authored on 2011-04-18
559
    }
cleanup
yuki-kimoto authored on 2010-10-17
560
    
improved debug message
Yuki Kimoto authored on 2011-05-23
561
    # DEBUG message
562
    if (DEBUG) {
563
        print STDERR "SQL:\n" . $query->sql . "\n";
564
        my @output;
565
        foreach my $b (@$bind) {
566
            my $value = $b->{value};
567
            $value = 'undef' unless defined $value;
568
            $value = encode(DEBUG_ENCODING(), $value)
569
              if utf8::is_utf8($value);
570
            push @output, $value;
571
        }
572
        print STDERR "Bind values: " . join(', ', @output) . "\n\n";
573
    }
added environment variable D...
Yuki Kimoto authored on 2011-04-02
574
    
cleanup
Yuki Kimoto authored on 2011-04-02
575
    # Select statement
cleanup
yuki-kimoto authored on 2010-10-17
576
    if ($sth->{NUM_OF_FIELDS}) {
577
        
cleanup
Yuki Kimoto authored on 2011-04-02
578
        # Filter
579
        my $filter = {};
580
        $filter->{in}  = {};
581
        $filter->{end} = {};
cleanup
Yuki Kimoto authored on 2011-01-12
582
        foreach my $table (@$tables) {
cleanup
Yuki Kimoto authored on 2011-04-02
583
            foreach my $way (qw/in end/) {
584
                $filter->{$way} = {
585
                    %{$filter->{$way}},
586
                    %{$self->{filter}{$way}{$table} || {}}
587
                };
588
            }
cleanup
Yuki Kimoto authored on 2011-01-12
589
        }
590
        
591
        # Result
592
        my $result = $self->result_class->new(
added type_rule method and f...
Yuki Kimoto authored on 2011-06-09
593
            sth => $sth,
594
            filters => $self->filters,
cleanup
Yuki Kimoto authored on 2011-01-12
595
            default_filter => $self->{default_in_filter},
added type_rule method and f...
Yuki Kimoto authored on 2011-06-09
596
            filter => $filter->{in} || {},
597
            end_filter => $filter->{end} || {},
598
            type_rule => $self->type_rule,
added EXPERIMENTAL execute()...
Yuki Kimoto authored on 2011-06-09
599
            type_rule_off => $type_rule_off
cleanup
yuki-kimoto authored on 2010-10-17
600
        );
601

            
602
        return $result;
603
    }
cleanup
Yuki Kimoto authored on 2011-04-02
604
    
605
    # Not select statement
606
    else { return $affected }
cleanup
yuki-kimoto authored on 2010-10-17
607
}
608

            
insert_at is DEPRECATED! add...
Yuki Kimoto authored on 2011-06-08
609
our %INSERT_ARGS = map { $_ => 1 } @COMMON_ARGS, qw/param/;
update pod
Yuki Kimoto authored on 2011-03-13
610

            
cleanup
yuki-kimoto authored on 2010-10-17
611
sub insert {
- insert, insert_at, update,...
Yuki Kimoto authored on 2011-06-08
612
    my $self = shift;
added EXPERIMENTAL reserved_...
Yuki Kimoto authored on 2011-03-30
613
    
cleanup
yuki-kimoto authored on 2010-10-17
614
    # Arguments
- insert, insert_at, update,...
Yuki Kimoto authored on 2011-06-08
615
    my $param;
616
    $param = shift if @_ % 2;
617
    my %args = @_;
cleanup
Yuki Kimoto authored on 2011-03-21
618
    my $table  = delete $args{table};
cleanup
Yuki Kimoto authored on 2011-04-25
619
    croak qq{"table" option must be specified } . _subname
improved error messages
Yuki Kimoto authored on 2011-04-18
620
      unless $table;
- insert, insert_at, update,...
Yuki Kimoto authored on 2011-06-08
621
    my $p = delete $args{param} || {};
622
    $param  ||= $p;
cleanup
Yuki Kimoto authored on 2011-03-21
623
    my $append = delete $args{append} || '';
insert_at is DEPRECATED! add...
Yuki Kimoto authored on 2011-06-08
624
    my $id = delete $args{id};
625
    my $primary_key = delete $args{primary_key};
cleanup
Yuki Kimoto authored on 2011-06-08
626
    croak "insert method primary_key option " .
added tests
Yuki Kimoto authored on 2011-06-08
627
          "must be specified when id is specified " . _subname
628
      if defined $id && !defined $primary_key;
insert_at is DEPRECATED! add...
Yuki Kimoto authored on 2011-06-08
629
    $primary_key = [$primary_key] unless ref $primary_key eq 'ARRAY';
cleanup
Yuki Kimoto authored on 2011-04-02
630

            
631
    # Check arguments
632
    foreach my $name (keys %args) {
cleanup
Yuki Kimoto authored on 2011-04-25
633
        croak qq{"$name" is wrong option } . _subname
cleanup
Yuki Kimoto authored on 2011-04-02
634
          unless $INSERT_ARGS{$name};
635
    }
636

            
insert_at is DEPRECATED! add...
Yuki Kimoto authored on 2011-06-08
637
    # Merge parameter
638
    if ($id) {
cleanup
Yuki Kimoto authored on 2011-06-08
639
        my $id_param = $self->_create_param_from_id($id, $primary_key);
insert_at is DEPRECATED! add...
Yuki Kimoto authored on 2011-06-08
640
        $param = $self->merge_param($id_param, $param);
641
    }
642

            
cleanup
Yuki Kimoto authored on 2011-04-02
643
    # Reserved word quote
644
    my $q = $self->reserved_word_quote;
cleanup
yuki-kimoto authored on 2010-10-17
645
    
cleanup
Yuki Kimoto authored on 2011-04-02
646
    # Insert statement
cleanup
Yuki Kimoto authored on 2011-01-27
647
    my @sql;
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
648
    push @sql, "insert into $q$table$q " . $self->insert_param($param);
cleanup
Yuki Kimoto authored on 2011-01-27
649
    push @sql, $append if $append;
650
    my $sql = join (' ', @sql);
packaging one directory
yuki-kimoto authored on 2009-11-16
651
    
652
    # Execute query
cleanup
Yuki Kimoto authored on 2011-04-02
653
    return $self->execute(
cleanup
Yuki Kimoto authored on 2011-06-09
654
        $sql,
cleanup
Yuki Kimoto authored on 2011-04-02
655
        param => $param,
cleanup
Yuki Kimoto authored on 2011-03-21
656
        table => $table,
657
        %args
added auto_filter method
kimoto.yuki@gmail.com authored on 2010-12-21
658
    );
packaging one directory
yuki-kimoto authored on 2009-11-16
659
}
660

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
661
sub insert_param {
remove experimental DBIx::Cu...
Yuki Kimoto authored on 2011-03-08
662
    my ($self, $param) = @_;
663
    
cleanup
Yuki Kimoto authored on 2011-04-02
664
    # Create insert parameter tag
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
665
    my $safety = $self->safety_character;
added EXPERIMENTAL updat_par...
Yuki Kimoto authored on 2011-03-30
666
    my $q = $self->reserved_word_quote;
cleanup
Yuki Kimoto authored on 2011-04-02
667
    my @columns;
668
    my @placeholders;
remove experimental DBIx::Cu...
Yuki Kimoto authored on 2011-03-08
669
    foreach my $column (keys %$param) {
cleanup
Yuki Kimoto authored on 2011-04-25
670
        croak qq{"$column" is not safety column name } . _subname
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
671
          unless $column =~ /^[$safety\.]+$/;
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
672
        my $column_quote = "$q$column$q";
673
        $column_quote =~ s/\./$q.$q/;
674
        push @columns, $column_quote;
675
        push @placeholders, ":$column";
remove experimental DBIx::Cu...
Yuki Kimoto authored on 2011-03-08
676
    }
677
    
cleanup
Yuki Kimoto authored on 2011-04-02
678
    return '(' . join(', ', @columns) . ') ' . 'values ' .
679
           '(' . join(', ', @placeholders) . ')'
remove experimental DBIx::Cu...
Yuki Kimoto authored on 2011-03-08
680
}
681

            
- added EXPERIMENTAL DBIx::C...
Yuki Kimoto authored on 2011-03-15
682
sub include_model {
683
    my ($self, $name_space, $model_infos) = @_;
684
    
cleanup
Yuki Kimoto authored on 2011-04-02
685
    # Name space
- added EXPERIMENTAL DBIx::C...
Yuki Kimoto authored on 2011-03-15
686
    $name_space ||= '';
cleanup
Yuki Kimoto authored on 2011-04-02
687
    
688
    # Get Model infomations
- added EXPERIMENTAL DBIx::C...
Yuki Kimoto authored on 2011-03-15
689
    unless ($model_infos) {
cleanup
Yuki Kimoto authored on 2011-04-02
690

            
- added EXPERIMENTAL DBIx::C...
Yuki Kimoto authored on 2011-03-15
691
        # Load name space module
cleanup
Yuki Kimoto authored on 2011-04-25
692
        croak qq{"$name_space" is invalid class name } . _subname
- added EXPERIMENTAL DBIx::C...
Yuki Kimoto authored on 2011-03-15
693
          if $name_space =~ /[^\w:]/;
694
        eval "use $name_space";
cleanup
Yuki Kimoto authored on 2011-04-25
695
        croak qq{Name space module "$name_space.pm" is needed. $@ }
696
            . _subname
improved error messages
Yuki Kimoto authored on 2011-04-18
697
          if $@;
- added EXPERIMENTAL DBIx::C...
Yuki Kimoto authored on 2011-03-15
698
        
699
        # Search model modules
700
        my $path = $INC{"$name_space.pm"};
701
        $path =~ s/\.pm$//;
702
        opendir my $dh, $path
cleanup
Yuki Kimoto authored on 2011-04-25
703
          or croak qq{Can't open directory "$path": $! } . _subname
- added EXPERIMENTAL DBIx::C...
Yuki Kimoto authored on 2011-03-15
704
        $model_infos = [];
705
        while (my $module = readdir $dh) {
706
            push @$model_infos, $module
707
              if $module =~ s/\.pm$//;
708
        }
709
        close $dh;
710
    }
711
    
cleanup
Yuki Kimoto authored on 2011-04-02
712
    # Include models
- added EXPERIMENTAL DBIx::C...
Yuki Kimoto authored on 2011-03-15
713
    foreach my $model_info (@$model_infos) {
714
        
cleanup
Yuki Kimoto authored on 2011-04-02
715
        # Load model
- added EXPERIMENTAL DBIx::C...
Yuki Kimoto authored on 2011-03-15
716
        my $model_class;
717
        my $model_name;
718
        my $model_table;
719
        if (ref $model_info eq 'HASH') {
720
            $model_class = $model_info->{class};
721
            $model_name  = $model_info->{name};
722
            $model_table = $model_info->{table};
723
            
724
            $model_name  ||= $model_class;
725
            $model_table ||= $model_name;
726
        }
removed EXPERIMETNAL flag fr...
Yuki Kimoto authored on 2011-03-25
727
        else { $model_class = $model_name = $model_table = $model_info }
- added EXPERIMENTAL DBIx::C...
Yuki Kimoto authored on 2011-03-15
728
        my $mclass = "${name_space}::$model_class";
cleanup
Yuki Kimoto authored on 2011-04-25
729
        croak qq{"$mclass" is invalid class name } . _subname
- added EXPERIMENTAL DBIx::C...
Yuki Kimoto authored on 2011-03-15
730
          if $mclass =~ /[^\w:]/;
731
        unless ($mclass->can('isa')) {
732
            eval "use $mclass";
cleanup
Yuki Kimoto authored on 2011-04-25
733
            croak "$@ " . _subname if $@;
- added EXPERIMENTAL DBIx::C...
Yuki Kimoto authored on 2011-03-15
734
        }
735
        
cleanup
Yuki Kimoto authored on 2011-04-02
736
        # Create model
removed EXPERIMETNAL flag fr...
Yuki Kimoto authored on 2011-03-25
737
        my $args = {};
738
        $args->{model_class} = $mclass if $mclass;
739
        $args->{name}        = $model_name if $model_name;
740
        $args->{table}       = $model_table if $model_table;
741
        $self->create_model($args);
- added EXPERIMENTAL DBIx::C...
Yuki Kimoto authored on 2011-03-15
742
    }
743
    
744
    return $self;
745
}
746

            
added EXPERIMENTAL updat_par...
Yuki Kimoto authored on 2011-03-30
747
sub merge_param {
748
    my ($self, @params) = @_;
749
    
cleanup
Yuki Kimoto authored on 2011-04-02
750
    # Merge parameters
fixed merge_param bug
Yuki Kimoto authored on 2011-05-23
751
    my $merge = {};
752
    foreach my $param (@params) {
753
        foreach my $column (keys %$param) {
754
            my $param_is_array = ref $param->{$column} eq 'ARRAY' ? 1 : 0;
755
            
756
            if (exists $merge->{$column}) {
757
                $merge->{$column} = [$merge->{$column}]
758
                  unless ref $merge->{$column} eq 'ARRAY';
759
                push @{$merge->{$column}},
760
                  ref $param->{$column} ? @{$param->{$column}} : $param->{$column};
added EXPERIMENTAL updat_par...
Yuki Kimoto authored on 2011-03-30
761
            }
762
            else {
fixed merge_param bug
Yuki Kimoto authored on 2011-05-23
763
                $merge->{$column} = $param->{$column};
added EXPERIMENTAL updat_par...
Yuki Kimoto authored on 2011-03-30
764
            }
765
        }
766
    }
767
    
fixed merge_param bug
Yuki Kimoto authored on 2011-05-23
768
    return $merge;
added EXPERIMENTAL updat_par...
Yuki Kimoto authored on 2011-03-30
769
}
770

            
cleanup
Yuki Kimoto authored on 2011-03-21
771
sub method {
772
    my $self = shift;
773
    
cleanup
Yuki Kimoto authored on 2011-04-02
774
    # Register method
cleanup
Yuki Kimoto authored on 2011-03-21
775
    my $methods = ref $_[0] eq 'HASH' ? $_[0] : {@_};
776
    $self->{_methods} = {%{$self->{_methods} || {}}, %$methods};
777
    
778
    return $self;
779
}
780

            
- added EXPERIMENTAL DBIx::C...
Yuki Kimoto authored on 2011-03-15
781
sub model {
782
    my ($self, $name, $model) = @_;
783
    
cleanup
Yuki Kimoto authored on 2011-04-02
784
    # Set model
- added EXPERIMENTAL DBIx::C...
Yuki Kimoto authored on 2011-03-15
785
    if ($model) {
786
        $self->models->{$name} = $model;
787
        return $self;
788
    }
789
    
790
    # Check model existance
cleanup
Yuki Kimoto authored on 2011-04-25
791
    croak qq{Model "$name" is not included } . _subname
- added EXPERIMENTAL DBIx::C...
Yuki Kimoto authored on 2011-03-15
792
      unless $self->models->{$name};
793
    
cleanup
Yuki Kimoto authored on 2011-04-02
794
    # Get model
- added EXPERIMENTAL DBIx::C...
Yuki Kimoto authored on 2011-03-15
795
    return $self->models->{$name};
796
}
797

            
cleanup
Yuki Kimoto authored on 2011-03-21
798
sub mycolumn {
799
    my ($self, $table, $columns) = @_;
800
    
cleanup
Yuki Kimoto authored on 2011-04-02
801
    # Create column clause
802
    my @column;
added EXPERIMENTAL reserved_...
Yuki Kimoto authored on 2011-03-30
803
    my $q = $self->reserved_word_quote;
cleanup
Yuki Kimoto authored on 2011-03-21
804
    $columns ||= [];
added EXPERIMENTAL reserved_...
Yuki Kimoto authored on 2011-03-30
805
    push @column, "$q$table$q.$q$_$q as $q$_$q" for @$columns;
cleanup
Yuki Kimoto authored on 2011-03-21
806
    
807
    return join (', ', @column);
808
}
809

            
added dbi_options attribute
kimoto authored on 2010-12-20
810
sub new {
811
    my $self = shift->SUPER::new(@_);
812
    
cleanup
Yuki Kimoto authored on 2011-04-02
813
    # Check attributes
added dbi_options attribute
kimoto authored on 2010-12-20
814
    my @attrs = keys %$self;
815
    foreach my $attr (@attrs) {
cleanup
Yuki Kimoto authored on 2011-04-25
816
        croak qq{"$attr" is wrong name } . _subname
added dbi_options attribute
kimoto authored on 2010-12-20
817
          unless $self->can($attr);
818
    }
cleanup
Yuki Kimoto authored on 2011-04-02
819
    
set reserved_word_quote auto...
Yuki Kimoto authored on 2011-06-08
820
    # DEPRECATED!
fixed DEPRECATED messages
Yuki Kimoto authored on 2011-06-08
821
    $self->query_builder->{tags} = {
cleanup
Yuki Kimoto authored on 2011-01-25
822
        '?'     => \&DBIx::Custom::Tag::placeholder,
823
        '='     => \&DBIx::Custom::Tag::equal,
824
        '<>'    => \&DBIx::Custom::Tag::not_equal,
825
        '>'     => \&DBIx::Custom::Tag::greater_than,
826
        '<'     => \&DBIx::Custom::Tag::lower_than,
827
        '>='    => \&DBIx::Custom::Tag::greater_than_equal,
828
        '<='    => \&DBIx::Custom::Tag::lower_than_equal,
829
        'like'  => \&DBIx::Custom::Tag::like,
830
        'in'    => \&DBIx::Custom::Tag::in,
831
        'insert_param' => \&DBIx::Custom::Tag::insert_param,
832
        'update_param' => \&DBIx::Custom::Tag::update_param
fixed DEPRECATED messages
Yuki Kimoto authored on 2011-06-08
833
    };
added dbi_options attribute
kimoto authored on 2010-12-20
834
    
835
    return $self;
836
}
837

            
added experimental not_exist...
Yuki Kimoto authored on 2011-01-26
838
sub not_exists { bless {}, 'DBIx::Custom::NotExists' }
839

            
cleanup
yuki-kimoto authored on 2010-10-17
840
sub register_filter {
cleanup
Yuki Kimoto authored on 2011-04-02
841
    my $self = shift;
cleanup
yuki-kimoto authored on 2010-10-17
842
    
843
    # Register filter
844
    my $filters = ref $_[0] eq 'HASH' ? $_[0] : {@_};
cleanup
Yuki Kimoto authored on 2011-04-02
845
    $self->filters({%{$self->filters}, %$filters});
cleanup
yuki-kimoto authored on 2010-10-17
846
    
cleanup
Yuki Kimoto authored on 2011-04-02
847
    return $self;
cleanup
yuki-kimoto authored on 2010-10-17
848
}
packaging one directory
yuki-kimoto authored on 2009-11-16
849

            
cleanup
Yuki Kimoto authored on 2011-03-21
850
our %SELECT_ARGS
added EXPERIMENTAL select() ...
Yuki Kimoto authored on 2011-04-19
851
  = map { $_ => 1 } @COMMON_ARGS,
insert_at is DEPRECATED! add...
Yuki Kimoto authored on 2011-06-08
852
                    qw/column where relation join param where_param wrap/;
refactoring select
yuki-kimoto authored on 2010-04-28
853

            
packaging one directory
yuki-kimoto authored on 2009-11-16
854
sub select {
select, insert, update, upda...
yuki-kimoto authored on 2010-06-14
855
    my ($self, %args) = @_;
added EXPERIMENTAL reserved_...
Yuki Kimoto authored on 2011-03-30
856

            
refactoring select
yuki-kimoto authored on 2010-04-28
857
    # Arguments
cleanup
Yuki Kimoto authored on 2011-03-21
858
    my $table = delete $args{table};
added table not specified ex...
Yuki Kimoto authored on 2011-01-21
859
    my $tables = ref $table eq 'ARRAY' ? $table
860
               : defined $table ? [$table]
861
               : [];
cleanup
Yuki Kimoto authored on 2011-03-21
862
    my $columns   = delete $args{column};
863
    my $where     = delete $args{where} || {};
864
    my $append    = delete $args{append};
865
    my $join      = delete $args{join} || [];
cleanup
Yuki Kimoto authored on 2011-04-25
866
    croak qq{"join" must be array reference } . _subname
- added experimental DBIx::C...
Yuki Kimoto authored on 2011-03-08
867
      unless ref $join eq 'ARRAY';
cleanup
Yuki Kimoto authored on 2011-03-21
868
    my $relation = delete $args{relation};
added warnings
Yuki Kimoto authored on 2011-06-07
869
    warn "select() relation option is DEPRECATED! use join option instead"
870
      if $relation;
DEPRECATED select() param op...
Yuki Kimoto authored on 2011-04-25
871
    my $param = delete $args{param} || {}; # DEPRECATED!
added warnings
Yuki Kimoto authored on 2011-06-07
872
    warn "select() param option is DEPRECATED! use where_param option instead"
DEPRECATED select() param op...
Yuki Kimoto authored on 2011-04-25
873
      if keys %$param;
874
    my $where_param = delete $args{where_param} || $param || {};
added EXPERIMENTAL select() ...
Yuki Kimoto authored on 2011-04-19
875
    my $wrap = delete $args{wrap};
select_at is DEPRECATED! use...
Yuki Kimoto authored on 2011-06-08
876
    my $id = delete $args{id};
877
    my $primary_key = delete $args{primary_key};
878
    croak "update method primary_key option " .
879
          "must be specified when id is specified " . _subname
880
      if defined $id && !defined $primary_key;
881
    $primary_key = [$primary_key] unless ref $primary_key eq 'ARRAY';
882
    
cleanup
Yuki Kimoto authored on 2011-04-02
883
    # Check arguments
884
    foreach my $name (keys %args) {
cleanup
Yuki Kimoto authored on 2011-04-25
885
        croak qq{"$name" is wrong option } . _subname
cleanup
Yuki Kimoto authored on 2011-04-02
886
          unless $SELECT_ARGS{$name};
887
    }
remove experimental DBIx::Cu...
Yuki Kimoto authored on 2011-03-08
888
    
cleanup
Yuki Kimoto authored on 2011-03-09
889
    # Add relation tables(DEPRECATED!);
cleanup
Yuki Kimoto authored on 2011-03-21
890
    $self->_add_relation_table($tables, $relation);
packaging one directory
yuki-kimoto authored on 2009-11-16
891
    
cleanup
Yuki Kimoto authored on 2011-04-02
892
    # Select statement
cleanup
Yuki Kimoto authored on 2011-01-27
893
    my @sql;
894
    push @sql, 'select';
packaging one directory
yuki-kimoto authored on 2009-11-16
895
    
- select() column option can...
Yuki Kimoto authored on 2011-06-08
896
    # Reserved word quote
897
    my $q = $self->reserved_word_quote;
898
    
removed EXPERIMETNAL select(...
Yuki Kimoto authored on 2011-04-01
899
    # Column clause
cleanup
Yuki Kimoto authored on 2011-03-30
900
    if ($columns) {
- select() column option can...
Yuki Kimoto authored on 2011-06-07
901
        $columns = [$columns] unless ref $columns eq 'ARRAY';
removed EXPERIMETNAL select(...
Yuki Kimoto authored on 2011-04-01
902
        foreach my $column (@$columns) {
- select() column option can...
Yuki Kimoto authored on 2011-06-08
903
            if (ref $column eq 'HASH') {
904
                $column = $self->col(%$column) if ref $column eq 'HASH';
905
            }
906
            elsif (ref $column eq 'ARRAY') {
907
                croak "Format must be [COLUMN, as => ALIAS] " . _subname
908
                  unless @$column == 3 && $column->[1] eq 'as';
909
                $column = join(' ', $column->[0], 'as', $q . $column->[2] . $q);
910
            }
cleanup
Yuki Kimoto authored on 2011-04-02
911
            unshift @$tables, @{$self->_search_tables($column)};
removed EXPERIMETNAL select(...
Yuki Kimoto authored on 2011-04-01
912
            push @sql, ($column, ',');
added select() all_column op...
Yuki Kimoto authored on 2011-03-12
913
        }
removed EXPERIMETNAL select(...
Yuki Kimoto authored on 2011-04-01
914
        pop @sql if $sql[-1] eq ',';
added select() all_column op...
Yuki Kimoto authored on 2011-03-12
915
    }
916
    else { push @sql, '*' }
917
    
918
    # Table
cleanup
Yuki Kimoto authored on 2011-03-30
919
    push @sql, 'from';
920
    if ($relation) {
921
        my $found = {};
922
        foreach my $table (@$tables) {
added EXPERIMENTAL reserved_...
Yuki Kimoto authored on 2011-03-30
923
            push @sql, ("$q$table$q", ',') unless $found->{$table};
cleanup
Yuki Kimoto authored on 2011-03-30
924
            $found->{$table} = 1;
- added EXPERIMENTAL DBIx::C...
Yuki Kimoto authored on 2011-03-14
925
        }
packaging one directory
yuki-kimoto authored on 2009-11-16
926
    }
cleanup
Yuki Kimoto authored on 2011-03-30
927
    else {
928
        my $main_table = $tables->[-1] || '';
added EXPERIMENTAL reserved_...
Yuki Kimoto authored on 2011-03-30
929
        push @sql, "$q$main_table$q";
cleanup
Yuki Kimoto authored on 2011-03-30
930
    }
931
    pop @sql if ($sql[-1] || '') eq ',';
cleanup
Yuki Kimoto authored on 2011-04-25
932
    croak "Not found table name " . _subname
improved error messages
Yuki Kimoto authored on 2011-04-18
933
      unless $tables->[-1];
cleanup
Yuki Kimoto authored on 2011-04-01
934

            
cleanup
Yuki Kimoto authored on 2011-04-02
935
    # Add tables in parameter
DEPRECATED select() param op...
Yuki Kimoto authored on 2011-04-25
936
    unshift @$tables,
937
            @{$self->_search_tables(join(' ', keys %$where_param) || '')};
fixed some select() join opi...
Yuki Kimoto authored on 2011-03-09
938
    
select() where can't receive...
Yuki Kimoto authored on 2011-01-27
939
    # Where
select, update, and delete w...
Yuki Kimoto authored on 2011-04-25
940
    my $where_clause = '';
select_at is DEPRECATED! use...
Yuki Kimoto authored on 2011-06-08
941
    $where = $self->_create_param_from_id($id, $primary_key) if $id;
cleanup
Yuki Kimoto authored on 2011-04-25
942
    if (ref $where) {
943
        $where = $self->_where_to_obj($where);
DEPRECATED select() param op...
Yuki Kimoto authored on 2011-04-25
944
        $where_param = keys %$where_param
945
                     ? $self->merge_param($where_param, $where->param)
946
                     : $where->param;
cleanup
Yuki Kimoto authored on 2011-04-25
947
        
948
        # String where
949
        $where_clause = $where->to_string;
950
    }
select, update, and delete w...
Yuki Kimoto authored on 2011-04-25
951
    elsif ($where) { $where_clause = "where $where" }
remove experimental DBIx::Cu...
Yuki Kimoto authored on 2011-03-08
952
    
fixed some select() join opi...
Yuki Kimoto authored on 2011-03-09
953
    # Add table names in where clause
cleanup
Yuki Kimoto authored on 2011-04-02
954
    unshift @$tables, @{$self->_search_tables($where_clause)};
remove experimental DBIx::Cu...
Yuki Kimoto authored on 2011-03-08
955
    
fixed some select() join opi...
Yuki Kimoto authored on 2011-03-09
956
    # Push join
957
    $self->_push_join(\@sql, $join, $tables);
remove experimental DBIx::Cu...
Yuki Kimoto authored on 2011-03-08
958
    
cleanup
Yuki Kimoto authored on 2011-03-09
959
    # Add where clause
cleanup
Yuki Kimoto authored on 2011-04-02
960
    push @sql, $where_clause;
select() where can't receive...
Yuki Kimoto authored on 2011-01-27
961
    
cleanup
Yuki Kimoto authored on 2011-03-08
962
    # Relation(DEPRECATED!);
cleanup
Yuki Kimoto authored on 2011-04-02
963
    $self->_push_relation(\@sql, $tables, $relation, $where_clause eq '' ? 1 : 0);
cleanup
Yuki Kimoto authored on 2011-03-08
964
    
cleanup
Yuki Kimoto authored on 2011-04-02
965
    # Append
cleanup
Yuki Kimoto authored on 2011-01-27
966
    push @sql, $append if $append;
967
    
added EXPERIMENTAL select() ...
Yuki Kimoto authored on 2011-04-19
968
    # Wrap
969
    if ($wrap) {
cleanup
Yuki Kimoto authored on 2011-04-25
970
        croak "wrap option must be array refrence " . _subname
added EXPERIMENTAL select() ...
Yuki Kimoto authored on 2011-04-19
971
          unless ref $wrap eq 'ARRAY';
972
        unshift @sql, $wrap->[0];
973
        push @sql, $wrap->[1];
974
    }
975
    
cleanup
Yuki Kimoto authored on 2011-01-27
976
    # SQL
977
    my $sql = join (' ', @sql);
packaging one directory
yuki-kimoto authored on 2009-11-16
978
    
979
    # Execute query
added auto_filter method
kimoto.yuki@gmail.com authored on 2010-12-21
980
    my $result = $self->execute(
cleanup
Yuki Kimoto authored on 2011-06-09
981
        $sql,
DEPRECATED select() param op...
Yuki Kimoto authored on 2011-04-25
982
        param => $where_param, 
cleanup
Yuki Kimoto authored on 2011-03-21
983
        table => $tables,
984
        %args
985
    );
packaging one directory
yuki-kimoto authored on 2009-11-16
986
    
987
    return $result;
988
}
989

            
add experimental setup_model...
Yuki Kimoto authored on 2011-02-21
990
sub setup_model {
991
    my $self = shift;
992
    
cleanup
Yuki Kimoto authored on 2011-04-02
993
    # Setup model
add experimental setup_model...
Yuki Kimoto authored on 2011-02-21
994
    $self->each_column(
995
        sub {
996
            my ($self, $table, $column, $column_info) = @_;
997
            if (my $model = $self->models->{$table}) {
998
                push @{$model->columns}, $column;
999
            }
1000
        }
1001
    );
add experimental DBIx::Custo...
Yuki Kimoto authored on 2011-02-22
1002
    return $self;
add experimental setup_model...
Yuki Kimoto authored on 2011-02-21
1003
}
1004

            
added type_rule method and f...
Yuki Kimoto authored on 2011-06-09
1005
sub type_rule {
1006
    my $self = shift;
1007
    
1008
    if (@_) {
1009
        my $type_rule = _array_to_hash([@_]);
1010
        $self->{type_rule} = $type_rule;
added type_rule into logic
Yuki Kimoto authored on 2011-06-09
1011
        $self->{_into} ||= {};
improved type_rule method
Yuki Kimoto authored on 2011-06-10
1012

            
1013
        foreach my $i (-1000 .. 1000) {
1014
             my $type_info = $self->dbh->type_info($i);
1015
             my $data_type = $type_info->{DATA_TYPE};
1016
             my $type_name = $type_info->{TYPE_NAME};
1017
             foreach my $type (keys %$type_rule) {
1018
                 use Data::Dumper;
1019
                 if ($type_name && lc $type eq lc $type_name) {
1020
                     $type_rule->{$data_type} = $type_rule->{$type};
1021
                 }
1022
             }
1023
        }
1024

            
added type_rule into logic
Yuki Kimoto authored on 2011-06-09
1025
        $self->each_column(sub {
1026
            my ($dbi, $table, $column, $column_info) = @_;
1027
            
1028
            my $type = $column_info->{TYPE_NAME};
1029
            if ($type_rule->{$type} &&
1030
                (my $rule = $type_rule->{$type}->{into}))
1031
            {
1032
                $self->{_into}{$table}{$column} = $rule;
1033
            }
1034
        });
added type_rule method and f...
Yuki Kimoto authored on 2011-06-09
1035
        
1036
        return $self;
1037
    }
1038
    
1039
    return $self->{type_rule} || {};
1040
}
1041

            
cleanup
Yuki Kimoto authored on 2011-03-21
1042
our %UPDATE_ARGS
insert_at is DEPRECATED! add...
Yuki Kimoto authored on 2011-06-08
1043
  = map { $_ => 1 } @COMMON_ARGS, qw/param where allow_update_all where_param/;
cleanup
yuki-kimoto authored on 2010-10-17
1044

            
1045
sub update {
- insert, insert_at, update,...
Yuki Kimoto authored on 2011-06-08
1046
    my $self = shift;
added EXPERIMENTAL reserved_...
Yuki Kimoto authored on 2011-03-30
1047

            
cleanup
yuki-kimoto authored on 2010-10-17
1048
    # Arguments
- insert, insert_at, update,...
Yuki Kimoto authored on 2011-06-08
1049
    my $param;
1050
    $param = shift if @_ % 2;
1051
    my %args = @_;
cleanup
Yuki Kimoto authored on 2011-03-21
1052
    my $table = delete $args{table} || '';
cleanup
Yuki Kimoto authored on 2011-04-25
1053
    croak qq{"table" option must be specified } . _subname
improved error messages
Yuki Kimoto authored on 2011-04-18
1054
      unless $table;
- insert, insert_at, update,...
Yuki Kimoto authored on 2011-06-08
1055
    my $p = delete $args{param} || {};
1056
    $param  ||= $p;
cleanup
Yuki Kimoto authored on 2011-03-21
1057
    my $where            = delete $args{where} || {};
DEPRECATED select() param op...
Yuki Kimoto authored on 2011-04-25
1058
    my $where_param      = delete $args{where_param} || {};
cleanup
Yuki Kimoto authored on 2011-03-21
1059
    my $append           = delete $args{append} || '';
1060
    my $allow_update_all = delete $args{allow_update_all};
cleanup
Yuki Kimoto authored on 2011-06-08
1061
    my $id = delete $args{id};
1062
    my $primary_key = delete $args{primary_key};
1063
    croak "update method primary_key option " .
1064
          "must be specified when id is specified " . _subname
1065
      if defined $id && !defined $primary_key;
1066
    $primary_key = [$primary_key] unless ref $primary_key eq 'ARRAY';
version 0.0901
yuki-kimoto authored on 2009-12-17
1067
    
cleanup
Yuki Kimoto authored on 2011-04-02
1068
    # Check argument names
1069
    foreach my $name (keys %args) {
cleanup
Yuki Kimoto authored on 2011-04-25
1070
        croak qq{"$name" is wrong option } . _subname
cleanup
Yuki Kimoto authored on 2011-04-02
1071
          unless $UPDATE_ARGS{$name};
1072
    }
update_at is DEPRECATED! use...
Yuki Kimoto authored on 2011-06-08
1073

            
cleanup
yuki-kimoto authored on 2010-10-17
1074
    # Update clause
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
1075
    my $update_clause = $self->update_param($param);
improved delete() and update...
Yuki Kimoto authored on 2011-01-26
1076

            
1077
    # Where
update_at is DEPRECATED! use...
Yuki Kimoto authored on 2011-06-08
1078
    $where = $self->_create_param_from_id($id, $primary_key) if $id;
select, update, and delete w...
Yuki Kimoto authored on 2011-04-25
1079
    my $where_clause = '';
1080
    if (ref $where) {
1081
        $where = $self->_where_to_obj($where);
DEPRECATED select() param op...
Yuki Kimoto authored on 2011-04-25
1082
        $where_param = keys %$where_param
1083
                     ? $self->merge_param($where_param, $where->param)
1084
                     : $where->param;
select, update, and delete w...
Yuki Kimoto authored on 2011-04-25
1085
        
1086
        # String where
1087
        $where_clause = $where->to_string;
1088
    }
1089
    elsif ($where) { $where_clause = "where $where" }
cleanup
Yuki Kimoto authored on 2011-04-25
1090
    croak qq{"where" must be specified } . _subname
cleanup
Yuki Kimoto authored on 2011-04-02
1091
      if "$where_clause" eq '' && !$allow_update_all;
removed reconnect method
yuki-kimoto authored on 2010-05-28
1092
    
DEPRECATED select() param op...
Yuki Kimoto authored on 2011-04-25
1093
    # Merge param
1094
    $param = $self->merge_param($param, $where_param) if keys %$where_param;
1095
    
cleanup
Yuki Kimoto authored on 2011-04-02
1096
    # Update statement
cleanup
Yuki Kimoto authored on 2011-01-27
1097
    my @sql;
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
1098
    my $q = $self->reserved_word_quote;
cleanup
Yuki Kimoto authored on 2011-04-02
1099
    push @sql, "update $q$table$q $update_clause $where_clause";
cleanup
Yuki Kimoto authored on 2011-01-27
1100
    push @sql, $append if $append;
removed reconnect method
yuki-kimoto authored on 2010-05-28
1101
    
cleanup
Yuki Kimoto authored on 2011-01-27
1102
    # SQL
1103
    my $sql = join(' ', @sql);
1104
    
cleanup
yuki-kimoto authored on 2010-10-17
1105
    # Execute query
cleanup
Yuki Kimoto authored on 2011-03-21
1106
    my $ret_val = $self->execute(
cleanup
Yuki Kimoto authored on 2011-06-09
1107
        $sql,
cleanup
Yuki Kimoto authored on 2011-03-21
1108
        param  => $param, 
1109
        table => $table,
1110
        %args
1111
    );
cleanup
yuki-kimoto authored on 2010-10-17
1112
    
1113
    return $ret_val;
removed reconnect method
yuki-kimoto authored on 2010-05-28
1114
}
1115

            
cleanup
yuki-kimoto authored on 2010-10-17
1116
sub update_all { shift->update(allow_update_all => 1, @_) };
1117

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
1118
sub update_param {
added EXPERIMENTAL updat_par...
Yuki Kimoto authored on 2011-03-30
1119
    my ($self, $param, $opt) = @_;
1120
    
cleanup
Yuki Kimoto authored on 2011-04-02
1121
    # Create update parameter tag
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
1122
    my $tag = $self->assign_param($param);
added EXPERIMENTAL assign_ta...
Yuki Kimoto authored on 2011-04-26
1123
    $tag = "set $tag" unless $opt->{no_set};
1124

            
cleanup
Yuki Kimoto authored on 2011-04-02
1125
    return $tag;
remove experimental DBIx::Cu...
Yuki Kimoto authored on 2011-03-08
1126
}
1127

            
cleanup
Yuki Kimoto authored on 2011-01-25
1128
sub where {
select() where can't receive...
Yuki Kimoto authored on 2011-01-27
1129
    my $self = shift;
cleanup
Yuki Kimoto authored on 2011-04-02
1130
    
1131
    # Create where
select() where can't receive...
Yuki Kimoto authored on 2011-01-27
1132
    return DBIx::Custom::Where->new(
1133
        query_builder => $self->query_builder,
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1134
        safety_character => $self->safety_character,
added EXPERIMENTAL reserved_...
Yuki Kimoto authored on 2011-03-30
1135
        reserved_word_quote => $self->reserved_word_quote,
cleanup
Yuki Kimoto authored on 2011-03-09
1136
        @_
select() where can't receive...
Yuki Kimoto authored on 2011-01-27
1137
    );
cleanup
Yuki Kimoto authored on 2011-01-25
1138
}
added experimental DBIx::Cus...
Yuki Kimoto authored on 2011-01-18
1139

            
cleanup
Yuki Kimoto authored on 2011-04-02
1140
sub _create_bind_values {
- added EXPERIMENTAL type() ...
Yuki Kimoto authored on 2011-03-21
1141
    my ($self, $params, $columns, $filter, $type) = @_;
removed reconnect method
yuki-kimoto authored on 2010-05-28
1142
    
cleanup
Yuki Kimoto authored on 2011-04-02
1143
    # Create bind values
- added EXPERIMENTAL type() ...
Yuki Kimoto authored on 2011-03-21
1144
    my $bind = [];
removed reconnect method
yuki-kimoto authored on 2010-05-28
1145
    my $count = {};
added experimental not_exist...
Yuki Kimoto authored on 2011-01-26
1146
    my $not_exists = {};
cleanup
Yuki Kimoto authored on 2011-01-12
1147
    foreach my $column (@$columns) {
removed reconnect method
yuki-kimoto authored on 2010-05-28
1148
        
1149
        # Value
added experimental not_exist...
Yuki Kimoto authored on 2011-01-26
1150
        my $value;
1151
        if(ref $params->{$column} eq 'ARRAY') {
1152
            my $i = $count->{$column} || 0;
1153
            $i += $not_exists->{$column} || 0;
1154
            my $found;
1155
            for (my $k = $i; $i < @{$params->{$column}}; $k++) {
1156
                if (ref $params->{$column}->[$k] eq 'DBIx::Custom::NotExists') {
1157
                    $not_exists->{$column}++;
1158
                }
1159
                else  {
1160
                    $value = $params->{$column}->[$k];
1161
                    $found = 1;
1162
                    last
1163
                }
1164
            }
1165
            next unless $found;
1166
        }
1167
        else { $value = $params->{$column} }
removed reconnect method
yuki-kimoto authored on 2010-05-28
1168
        
cleanup
Yuki Kimoto authored on 2011-01-12
1169
        # Filter
1170
        my $f = $filter->{$column} || $self->{default_out_filter} || '';
cleanup
kimoto.yuki@gmail.com authored on 2010-12-21
1171
        
- added EXPERIMENTAL type() ...
Yuki Kimoto authored on 2011-03-21
1172
        # Type
1173
        push @$bind, {
1174
            value => $f ? $f->($value) : $value,
1175
            type => $type->{$column}
1176
        };
removed reconnect method
yuki-kimoto authored on 2010-05-28
1177
        
1178
        # Count up 
1179
        $count->{$column}++;
1180
    }
1181
    
- added EXPERIMENTAL type() ...
Yuki Kimoto authored on 2011-03-21
1182
    return $bind;
removed reconnect method
yuki-kimoto authored on 2010-05-28
1183
}
1184

            
cleanup
Yuki Kimoto authored on 2011-06-08
1185
sub _create_param_from_id {
1186
    my ($self, $id, $primary_keys) = @_;
improved error messages
Yuki Kimoto authored on 2011-04-18
1187
    
cleanup
Yuki Kimoto authored on 2011-06-08
1188
    # Create parameter
1189
    my $param = {};
1190
    if ($id) {
1191
        $id = [$id] unless ref $id;
1192
        croak qq{"id" must be constant value or array reference}
improved error messages
Yuki Kimoto authored on 2011-04-18
1193
            . " (" . (caller 1)[3] . ")"
cleanup
Yuki Kimoto authored on 2011-06-08
1194
          unless !ref $id || ref $id eq 'ARRAY';
1195
        croak qq{"id" must contain values same count as primary key}
improved error messages
Yuki Kimoto authored on 2011-04-18
1196
            . " (" . (caller 1)[3] . ")"
cleanup
Yuki Kimoto authored on 2011-06-08
1197
          unless @$primary_keys eq @$id;
improved error messages
Yuki Kimoto authored on 2011-04-18
1198
        for(my $i = 0; $i < @$primary_keys; $i ++) {
cleanup
Yuki Kimoto authored on 2011-06-08
1199
           $param->{$primary_keys->[$i]} = $id->[$i];
improved error messages
Yuki Kimoto authored on 2011-04-18
1200
        }
1201
    }
1202
    
cleanup
Yuki Kimoto authored on 2011-06-08
1203
    return $param;
improved error messages
Yuki Kimoto authored on 2011-04-18
1204
}
1205

            
EXPERIMETAL fork safety impl...
Yuki Kimoto authored on 2011-03-12
1206
sub _connect {
1207
    my $self = shift;
1208
    
1209
    # Attributes
added warnings
Yuki Kimoto authored on 2011-06-07
1210
    my $dsn = $self->data_source;
1211
    warn "data_source is DEPRECATED! use dsn instead\n";
1212
    $dsn ||= $self->dsn;
data_source is DEPRECATED! I...
Yuki Kimoto authored on 2011-06-06
1213
    croak qq{"dsn" must be specified } . _subname
1214
      unless $dsn;
EXPERIMETAL fork safety impl...
Yuki Kimoto authored on 2011-03-12
1215
    my $user        = $self->user;
1216
    my $password    = $self->password;
1217
    my $dbi_option = {%{$self->dbi_options}, %{$self->dbi_option}};
added warnings
Yuki Kimoto authored on 2011-06-07
1218
    warn "dbi_options is DEPRECATED! use dbi_option instead\n"
1219
      if keys %{$self->dbi_options};
EXPERIMETAL fork safety impl...
Yuki Kimoto authored on 2011-03-12
1220
    
1221
    # Connect
1222
    my $dbh = eval {DBI->connect(
data_source is DEPRECATED! I...
Yuki Kimoto authored on 2011-06-06
1223
        $dsn,
EXPERIMETAL fork safety impl...
Yuki Kimoto authored on 2011-03-12
1224
        $user,
1225
        $password,
1226
        {
1227
            %{$self->default_dbi_option},
1228
            %$dbi_option
1229
        }
1230
    )};
1231
    
1232
    # Connect error
cleanup
Yuki Kimoto authored on 2011-04-25
1233
    croak "$@ " . _subname if $@;
EXPERIMETAL fork safety impl...
Yuki Kimoto authored on 2011-03-12
1234
    
1235
    return $dbh;
1236
}
1237

            
cleanup
yuki-kimoto authored on 2010-10-17
1238
sub _croak {
1239
    my ($self, $error, $append) = @_;
cleanup
Yuki Kimoto authored on 2011-04-02
1240
    
1241
    # Append
cleanup
yuki-kimoto authored on 2010-10-17
1242
    $append ||= "";
1243
    
1244
    # Verbose
1245
    if ($Carp::Verbose) { croak $error }
1246
    
1247
    # Not verbose
1248
    else {
1249
        
1250
        # Remove line and module infromation
1251
        my $at_pos = rindex($error, ' at ');
1252
        $error = substr($error, 0, $at_pos);
1253
        $error =~ s/\s+$//;
1254
        croak "$error$append";
1255
    }
1256
}
1257

            
added select() all_column op...
Yuki Kimoto authored on 2011-03-12
1258
sub _need_tables {
1259
    my ($self, $tree, $need_tables, $tables) = @_;
1260
    
cleanup
Yuki Kimoto authored on 2011-04-02
1261
    # Get needed tables
added select() all_column op...
Yuki Kimoto authored on 2011-03-12
1262
    foreach my $table (@$tables) {
1263
        if ($tree->{$table}) {
1264
            $need_tables->{$table} = 1;
1265
            $self->_need_tables($tree, $need_tables, [$tree->{$table}{parent}])
1266
        }
1267
    }
1268
}
1269

            
fixed some select() join opi...
Yuki Kimoto authored on 2011-03-09
1270
sub _push_join {
1271
    my ($self, $sql, $join, $join_tables) = @_;
1272
    
cleanup
Yuki Kimoto authored on 2011-04-02
1273
    # No join
fixed some select() join opi...
Yuki Kimoto authored on 2011-03-09
1274
    return unless @$join;
1275
    
cleanup
Yuki Kimoto authored on 2011-04-02
1276
    # Push join clause
fixed some select() join opi...
Yuki Kimoto authored on 2011-03-09
1277
    my $tree = {};
cleanup
Yuki Kimoto authored on 2011-04-02
1278
    my $q = $self->reserved_word_quote;
fixed some select() join opi...
Yuki Kimoto authored on 2011-03-09
1279
    for (my $i = 0; $i < @$join; $i++) {
1280
        
cleanup
Yuki Kimoto authored on 2011-04-02
1281
        # Search table in join clause
fixed some select() join opi...
Yuki Kimoto authored on 2011-03-09
1282
        my $join_clause = $join->[$i];
added EXPERIMENTAL reserved_...
Yuki Kimoto authored on 2011-03-30
1283
        my $q_re = quotemeta($q);
cleanup
Yuki Kimoto authored on 2011-04-01
1284
        my $join_re = $q ? qr/\s$q_re?([^\.\s$q_re]+?)$q_re?\..+?\s$q_re?([^\.\s$q_re]+?)$q_re?\..+?$/
1285
                         : qr/\s([^\.\s]+?)\..+?\s([^\.\s]+?)\..+?$/;
added EXPERIMENTAL reserved_...
Yuki Kimoto authored on 2011-03-30
1286
        if ($join_clause =~ $join_re) {
fixed some select() join opi...
Yuki Kimoto authored on 2011-03-09
1287
            my $table1 = $1;
1288
            my $table2 = $2;
cleanup
Yuki Kimoto authored on 2011-04-25
1289
            croak qq{right side table of "$join_clause" must be unique }
1290
                . _subname
fixed some select() join opi...
Yuki Kimoto authored on 2011-03-09
1291
              if exists $tree->{$table2};
1292
            $tree->{$table2}
1293
              = {position => $i, parent => $table1, join => $join_clause};
1294
        }
1295
        else {
cleanup
Yuki Kimoto authored on 2011-04-25
1296
            croak qq{join "$join_clause" must be two table name } . _subname
fixed some select() join opi...
Yuki Kimoto authored on 2011-03-09
1297
        }
1298
    }
1299
    
cleanup
Yuki Kimoto authored on 2011-04-02
1300
    # Search need tables
fixed some select() join opi...
Yuki Kimoto authored on 2011-03-09
1301
    my $need_tables = {};
1302
    $self->_need_tables($tree, $need_tables, $join_tables);
1303
    my @need_tables = sort { $tree->{$a}{position} <=> $tree->{$b}{position} } keys %$need_tables;
cleanup
Yuki Kimoto authored on 2011-04-02
1304
    
1305
    # Add join clause
fixed some select() join opi...
Yuki Kimoto authored on 2011-03-09
1306
    foreach my $need_table (@need_tables) {
1307
        push @$sql, $tree->{$need_table}{join};
1308
    }
1309
}
cleanup
Yuki Kimoto authored on 2011-03-08
1310

            
cleanup
Yuki Kimoto authored on 2011-04-02
1311
sub _remove_duplicate_table {
1312
    my ($self, $tables, $main_table) = @_;
1313
    
1314
    # Remove duplicate table
1315
    my %tables = map {defined $_ ? ($_ => 1) : ()} @$tables;
1316
    delete $tables{$main_table} if $main_table;
1317
    
1318
    return [keys %tables, $main_table ? $main_table : ()];
1319
}
1320

            
cleanup
Yuki Kimoto authored on 2011-04-02
1321
sub _search_tables {
cleanup
Yuki Kimoto authored on 2011-04-02
1322
    my ($self, $source) = @_;
1323
    
cleanup
Yuki Kimoto authored on 2011-04-02
1324
    # Search tables
cleanup
Yuki Kimoto authored on 2011-04-02
1325
    my $tables = [];
1326
    my $safety_character = $self->safety_character;
1327
    my $q = $self->reserved_word_quote;
1328
    my $q_re = quotemeta($q);
improved table search in col...
Yuki Kimoto authored on 2011-04-12
1329
    my $table_re = $q ? qr/(?:^|[^$safety_character])$q_re?([$safety_character]+)$q_re?\./
1330
                      : qr/(?:^|[^$safety_character])([$safety_character]+)\./;
cleanup
Yuki Kimoto authored on 2011-04-02
1331
    while ($source =~ /$table_re/g) {
1332
        push @$tables, $1;
1333
    }
1334
    
1335
    return $tables;
1336
}
1337

            
cleanup
Yuki Kimoto authored on 2011-04-02
1338
sub _where_to_obj {
where can recieve array refr...
Yuki Kimoto authored on 2011-03-24
1339
    my ($self, $where) = @_;
1340
    
cleanup
Yuki Kimoto authored on 2011-04-02
1341
    my $obj;
1342
    
1343
    # Hash
where can recieve array refr...
Yuki Kimoto authored on 2011-03-24
1344
    if (ref $where eq 'HASH') {
1345
        my $clause = ['and'];
added EXPERIMENTAL reserved_...
Yuki Kimoto authored on 2011-03-30
1346
        my $q = $self->reserved_word_quote;
1347
        foreach my $column (keys %$where) {
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
1348
            my $column_quote = "$q$column$q";
1349
            $column_quote =~ s/\./$q.$q/;
1350
            push @$clause, "$column_quote = :$column" for keys %$where;
added EXPERIMENTAL reserved_...
Yuki Kimoto authored on 2011-03-30
1351
        }
cleanup
Yuki Kimoto authored on 2011-04-02
1352
        $obj = $self->where(clause => $clause, param => $where);
where can recieve array refr...
Yuki Kimoto authored on 2011-03-24
1353
    }
cleanup
Yuki Kimoto authored on 2011-04-02
1354
    
1355
    # DBIx::Custom::Where object
where can recieve array refr...
Yuki Kimoto authored on 2011-03-24
1356
    elsif (ref $where eq 'DBIx::Custom::Where') {
cleanup
Yuki Kimoto authored on 2011-04-02
1357
        $obj = $where;
where can recieve array refr...
Yuki Kimoto authored on 2011-03-24
1358
    }
cleanup
Yuki Kimoto authored on 2011-04-02
1359
    
1360
    # Array(DEPRECATED!)
where can recieve array refr...
Yuki Kimoto authored on 2011-03-24
1361
    elsif (ref $where eq 'ARRAY') {
removed EXPERIMETNAL select(...
Yuki Kimoto authored on 2011-04-01
1362
        warn "\$dbi->select(where => [CLAUSE, PARAMETER]) is DEPRECATED." .
1363
             "use \$dbi->select(where => \$dbi->where(clause => " .
added warnings
Yuki Kimoto authored on 2011-06-07
1364
             "CLAUSE, where_param => PARAMETER));";
cleanup
Yuki Kimoto authored on 2011-04-02
1365
        $obj = $self->where(
where can recieve array refr...
Yuki Kimoto authored on 2011-03-24
1366
            clause => $where->[0],
1367
            param  => $where->[1]
1368
        );
1369
    }
1370
    
cleanup
Yuki Kimoto authored on 2011-04-02
1371
    # Check where argument
improved error messages
Yuki Kimoto authored on 2011-04-18
1372
    croak qq{"where" must be hash reference or DBIx::Custom::Where object}
1373
        . qq{or array reference, which contains where clause and paramter}
cleanup
Yuki Kimoto authored on 2011-04-25
1374
        . _subname
cleanup
Yuki Kimoto authored on 2011-04-02
1375
      unless ref $obj eq 'DBIx::Custom::Where';
where can recieve array refr...
Yuki Kimoto authored on 2011-03-24
1376
    
cleanup
Yuki Kimoto authored on 2011-04-02
1377
    return $obj;
where can recieve array refr...
Yuki Kimoto authored on 2011-03-24
1378
}
1379

            
select_at is DEPRECATED! use...
Yuki Kimoto authored on 2011-06-08
1380
# DEPRECATED!
1381
our %SELECT_AT_ARGS = (%SELECT_ARGS, where => 1, primary_key => 1);
1382
sub select_at {
1383
    my ($self, %args) = @_;
1384

            
updated pod
Yuki Kimoto authored on 2011-06-08
1385
    warn "select_at is DEPRECATED! use update and id option instead";
1386

            
select_at is DEPRECATED! use...
Yuki Kimoto authored on 2011-06-08
1387
    # Arguments
1388
    my $primary_keys = delete $args{primary_key};
1389
    $primary_keys = [$primary_keys] unless ref $primary_keys;
1390
    my $where = delete $args{where};
1391
    my $param = delete $args{param};
1392
    
1393
    # Check arguments
1394
    foreach my $name (keys %args) {
1395
        croak qq{"$name" is wrong option } . _subname
1396
          unless $SELECT_AT_ARGS{$name};
1397
    }
1398
    
1399
    # Table
1400
    croak qq{"table" option must be specified } . _subname
1401
      unless $args{table};
1402
    my $table = ref $args{table} ? $args{table}->[-1] : $args{table};
1403
    
1404
    # Create where parameter
1405
    my $where_param = $self->_create_param_from_id($where, $primary_keys);
1406
    
1407
    return $self->select(where => $where_param, %args);
1408
}
1409

            
delete_at is DEPRECATED! use...
Yuki Kimoto authored on 2011-06-08
1410
# DEPRECATED!
1411
our %DELETE_AT_ARGS = (%DELETE_ARGS, where => 1, primary_key => 1);
1412
sub delete_at {
1413
    my ($self, %args) = @_;
updated pod
Yuki Kimoto authored on 2011-06-08
1414

            
1415
    warn "delete_at is DEPRECATED! use update and id option instead";
delete_at is DEPRECATED! use...
Yuki Kimoto authored on 2011-06-08
1416
    
1417
    # Arguments
1418
    my $primary_keys = delete $args{primary_key};
1419
    $primary_keys = [$primary_keys] unless ref $primary_keys;
1420
    my $where = delete $args{where};
1421
    
1422
    # Check arguments
1423
    foreach my $name (keys %args) {
1424
        croak qq{"$name" is wrong option } . _subname
1425
          unless $DELETE_AT_ARGS{$name};
1426
    }
1427
    
1428
    # Create where parameter
1429
    my $where_param = $self->_create_param_from_id($where, $primary_keys);
1430
    
1431
    return $self->delete(where => $where_param, %args);
1432
}
1433

            
cleanup
Yuki Kimoto authored on 2011-06-08
1434
# DEPRECATED!
1435
our %UPDATE_AT_ARGS = (%UPDATE_ARGS, where => 1, primary_key => 1);
1436
sub update_at {
1437
    my $self = shift;
1438

            
1439
    warn "update_at is DEPRECATED! use update and id option instead";
1440
    
1441
    # Arguments
1442
    my $param;
1443
    $param = shift if @_ % 2;
1444
    my %args = @_;
1445
    my $primary_keys = delete $args{primary_key};
1446
    $primary_keys = [$primary_keys] unless ref $primary_keys;
1447
    my $where = delete $args{where};
1448
    my $p = delete $args{param} || {};
1449
    $param  ||= $p;
1450
    
1451
    # Check arguments
1452
    foreach my $name (keys %args) {
1453
        croak qq{"$name" is wrong option } . _subname
1454
          unless $UPDATE_AT_ARGS{$name};
1455
    }
1456
    
1457
    # Create where parameter
1458
    my $where_param = $self->_create_param_from_id($where, $primary_keys);
1459
    
1460
    return $self->update(where => $where_param, param => $param, %args);
1461
}
1462

            
insert_at is DEPRECATED! add...
Yuki Kimoto authored on 2011-06-08
1463
# DEPRECATED!
1464
our %INSERT_AT_ARGS = (%INSERT_ARGS, where => 1, primary_key => 1);
1465
sub insert_at {
1466
    my $self = shift;
1467
    
1468
    warn "insert_at is DEPRECATED! use insert and id option instead";
1469
    
1470
    # Arguments
1471
    my $param;
1472
    $param = shift if @_ % 2;
1473
    my %args = @_;
1474
    my $primary_key = delete $args{primary_key};
1475
    $primary_key = [$primary_key] unless ref $primary_key;
1476
    my $where = delete $args{where};
1477
    my $p = delete $args{param} || {};
1478
    $param  ||= $p;
1479
    
1480
    # Check arguments
1481
    foreach my $name (keys %args) {
1482
        croak qq{"$name" is wrong option } . _subname
1483
          unless $INSERT_AT_ARGS{$name};
1484
    }
1485
    
1486
    # Create where parameter
cleanup
Yuki Kimoto authored on 2011-06-08
1487
    my $where_param = $self->_create_param_from_id($where, $primary_key);
insert_at is DEPRECATED! add...
Yuki Kimoto authored on 2011-06-08
1488
    $param = $self->merge_param($where_param, $param);
1489
    
1490
    return $self->insert(param => $param, %args);
1491
}
1492

            
added warnings
Yuki Kimoto authored on 2011-06-07
1493
# DEPRECATED!
1494
sub register_tag {
1495
    warn "register_tag is DEPRECATED!";
1496
    shift->query_builder->register_tag(@_)
1497
}
1498

            
data_source is DEPRECATED! I...
Yuki Kimoto authored on 2011-06-06
1499
# DEPRECATED!
1500
__PACKAGE__->attr('data_source');
1501

            
cleanup
Yuki Kimoto authored on 2011-01-25
1502
# DEPRECATED!
cleanup
Yuki Kimoto authored on 2011-01-23
1503
__PACKAGE__->attr(
1504
    dbi_options => sub { {} },
1505
    filter_check  => 1
1506
);
renamed dbi_options to dbi_o...
Yuki Kimoto authored on 2011-01-23
1507

            
cleanup
Yuki Kimoto authored on 2011-01-25
1508
# DEPRECATED!
cleanup
Yuki Kimoto authored on 2011-01-12
1509
sub default_bind_filter {
1510
    my $self = shift;
1511
    
added warnings
Yuki Kimoto authored on 2011-06-07
1512
    warn "default_bind_filter is DEPRECATED! use apply_filter instead\n";
1513
    
cleanup
Yuki Kimoto authored on 2011-01-12
1514
    if (@_) {
1515
        my $fname = $_[0];
1516
        
1517
        if (@_ && !$fname) {
1518
            $self->{default_out_filter} = undef;
1519
        }
1520
        else {
many changed
Yuki Kimoto authored on 2011-01-23
1521
            croak qq{Filter "$fname" is not registered}
cleanup
Yuki Kimoto authored on 2011-01-12
1522
              unless exists $self->filters->{$fname};
1523
        
1524
            $self->{default_out_filter} = $self->filters->{$fname};
1525
        }
1526
        return $self;
1527
    }
1528
    
1529
    return $self->{default_out_filter};
1530
}
1531

            
cleanup
Yuki Kimoto authored on 2011-01-25
1532
# DEPRECATED!
cleanup
Yuki Kimoto authored on 2011-01-12
1533
sub default_fetch_filter {
1534
    my $self = shift;
added warnings
Yuki Kimoto authored on 2011-06-07
1535

            
1536
    warn "default_fetch_filter is DEPRECATED! use apply_filter instead\n";
cleanup
Yuki Kimoto authored on 2011-01-12
1537
    
1538
    if (@_) {
many changed
Yuki Kimoto authored on 2011-01-23
1539
        my $fname = $_[0];
1540

            
cleanup
Yuki Kimoto authored on 2011-01-12
1541
        if (@_ && !$fname) {
1542
            $self->{default_in_filter} = undef;
1543
        }
1544
        else {
many changed
Yuki Kimoto authored on 2011-01-23
1545
            croak qq{Filter "$fname" is not registered}
cleanup
Yuki Kimoto authored on 2011-01-12
1546
              unless exists $self->filters->{$fname};
1547
        
1548
            $self->{default_in_filter} = $self->filters->{$fname};
1549
        }
1550
        
1551
        return $self;
1552
    }
1553
    
many changed
Yuki Kimoto authored on 2011-01-23
1554
    return $self->{default_in_filter};
cleanup
Yuki Kimoto authored on 2011-01-12
1555
}
1556

            
- renamed update_param to up...
Yuki Kimoto authored on 2011-03-30
1557
# DEPRECATED!
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
1558
sub insert_param_tag {
1559
    warn "insert_param_tag is DEPRECATED! " .
1560
         "use insert_param instead!";
1561
    return shift->insert_param(@_);
- renamed update_param to up...
Yuki Kimoto authored on 2011-03-30
1562
}
1563

            
cleanup
Yuki Kimoto authored on 2011-01-25
1564
# DEPRECATED!
renamed DBIx::Custom::TagPro...
Yuki Kimoto authored on 2011-01-24
1565
sub register_tag_processor {
added warnings
Yuki Kimoto authored on 2011-06-07
1566
    warn "register_tag_processor is DEPRECATED!";
renamed DBIx::Custom::TagPro...
Yuki Kimoto authored on 2011-01-24
1567
    return shift->query_builder->register_tag_processor(@_);
1568
}
1569

            
- renamed update_param to up...
Yuki Kimoto authored on 2011-03-30
1570
# DEPRECATED!
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
1571
sub update_param_tag {
fixed DEPRECATED message bug
Yuki Kimoto authored on 2011-06-10
1572
    warn "update_param_tag is DEPRECATED! " .
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
1573
         "use update_param instead";
1574
    return shift->update_param(@_);
- renamed update_param to up...
Yuki Kimoto authored on 2011-03-30
1575
}
cleanup
Yuki Kimoto authored on 2011-03-08
1576
# DEPRECATED!
1577
sub _push_relation {
1578
    my ($self, $sql, $tables, $relation, $need_where) = @_;
1579
    
1580
    if (keys %{$relation || {}}) {
1581
        push @$sql, $need_where ? 'where' : 'and';
1582
        foreach my $rcolumn (keys %$relation) {
1583
            my $table1 = (split (/\./, $rcolumn))[0];
1584
            my $table2 = (split (/\./, $relation->{$rcolumn}))[0];
1585
            push @$tables, ($table1, $table2);
1586
            push @$sql, ("$rcolumn = " . $relation->{$rcolumn},  'and');
1587
        }
1588
    }
1589
    pop @$sql if $sql->[-1] eq 'and';    
1590
}
1591

            
1592
# DEPRECATED!
1593
sub _add_relation_table {
cleanup
Yuki Kimoto authored on 2011-03-09
1594
    my ($self, $tables, $relation) = @_;
cleanup
Yuki Kimoto authored on 2011-03-08
1595
    
1596
    if (keys %{$relation || {}}) {
1597
        foreach my $rcolumn (keys %$relation) {
1598
            my $table1 = (split (/\./, $rcolumn))[0];
1599
            my $table2 = (split (/\./, $relation->{$rcolumn}))[0];
1600
            my $table1_exists;
1601
            my $table2_exists;
1602
            foreach my $table (@$tables) {
1603
                $table1_exists = 1 if $table eq $table1;
1604
                $table2_exists = 1 if $table eq $table2;
1605
            }
1606
            unshift @$tables, $table1 unless $table1_exists;
1607
            unshift @$tables, $table2 unless $table2_exists;
1608
        }
1609
    }
1610
}
1611

            
fixed DBIx::Custom::QueryBui...
yuki-kimoto authored on 2010-08-15
1612
1;
1613

            
removed reconnect method
yuki-kimoto authored on 2010-05-28
1614
=head1 NAME
1615

            
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1616
DBIx::Custom - Useful database access, respecting SQL!
removed reconnect method
yuki-kimoto authored on 2010-05-28
1617

            
1618
=head1 SYNOPSYS
cleanup
yuki-kimoto authored on 2010-08-05
1619

            
renamed build_query to creat...
yuki-kimoto authored on 2010-08-06
1620
    use DBIx::Custom;
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1621
    
1622
    # Connect
1623
    my $dbi = DBIx::Custom->connect(
data_source is DEPRECATED! I...
Yuki Kimoto authored on 2011-06-06
1624
        dsn => "dbi:mysql:database=dbname",
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1625
        user => 'ken',
1626
        password => '!LFKD%$&',
1627
        dbi_option => {mysql_enable_utf8 => 1}
1628
    );
cleanup
yuki-kimoto authored on 2010-08-05
1629

            
removed reconnect method
yuki-kimoto authored on 2010-05-28
1630
    # Insert 
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1631
    $dbi->insert(
1632
        table  => 'book',
1633
        param  => {title => 'Perl', author => 'Ken'}
1634
    );
removed reconnect method
yuki-kimoto authored on 2010-05-28
1635
    
1636
    # Update 
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1637
    $dbi->update(
1638
        table  => 'book', 
1639
        param  => {title => 'Perl', author => 'Ken'}, 
1640
        where  => {id => 5},
1641
    );
removed reconnect method
yuki-kimoto authored on 2010-05-28
1642
    
1643
    # Delete
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1644
    $dbi->delete(
1645
        table  => 'book',
1646
        where  => {author => 'Ken'},
1647
    );
cleanup
yuki-kimoto authored on 2010-08-05
1648

            
removed reconnect method
yuki-kimoto authored on 2010-05-28
1649
    # Select
renamed fetch_rows to fetch_...
yuki-kimoto authored on 2010-05-01
1650
    my $result = $dbi->select(
added insert, update, update...
Yuki Kimoto authored on 2011-01-04
1651
        table  => 'book',
update document
yuki-kimoto authored on 2010-05-27
1652
        where  => {author => 'Ken'},
added commit method
yuki-kimoto authored on 2010-05-27
1653
    );
cleanup
yuki-kimoto authored on 2010-08-05
1654

            
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1655
    # Select, more complex
1656
    my $result = $dbi->select(
1657
        table  => 'book',
1658
        column => [
1659
            'book.author as book__author',
1660
            'company.name as company__name'
1661
        ],
1662
        where  => {'book.author' => 'Ken'},
1663
        join => ['left outer join company on book.company_id = company.id'],
1664
        append => 'order by id limit 5'
removed reconnect method
yuki-kimoto authored on 2010-05-28
1665
    );
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1666
    
removed register_format()
yuki-kimoto authored on 2010-05-26
1667
    # Fetch
1668
    while (my $row = $result->fetch) {
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1669
        
removed register_format()
yuki-kimoto authored on 2010-05-26
1670
    }
1671
    
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1672
    # Fetch as hash
removed register_format()
yuki-kimoto authored on 2010-05-26
1673
    while (my $row = $result->fetch_hash) {
1674
        
1675
    }
1676
    
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1677
    # Execute SQL with parameter.
1678
    $dbi->execute(
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
1679
        "select id from book where author = :author and title like :title",
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1680
        param  => {author => 'ken', title => '%Perl%'}
1681
    );
1682
    
renamed update tag to update...
yuki-kimoto authored on 2010-08-09
1683
=head1 DESCRIPTIONS
removed reconnect method
yuki-kimoto authored on 2010-05-28
1684

            
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1685
L<DBIx::Custom> is L<DBI> wrapper module.
1686

            
1687
=head1 FEATURES
removed reconnect method
yuki-kimoto authored on 2010-05-28
1688

            
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1689
=over 4
removed reconnect method
yuki-kimoto authored on 2010-05-28
1690

            
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1691
=item *
removed reconnect method
yuki-kimoto authored on 2010-05-28
1692

            
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1693
There are many basic methods to execute various queries.
1694
C<insert()>, C<update()>, C<update_all()>,C<delete()>,
1695
C<delete_all()>, C<select()>,
- select() column option can...
Yuki Kimoto authored on 2011-06-08
1696
C<execute()>
removed reconnect method
yuki-kimoto authored on 2010-05-28
1697

            
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1698
=item *
1699

            
1700
Filter when data is send or receive.
1701

            
1702
=item *
1703

            
1704
Data filtering system
1705

            
1706
=item *
1707

            
1708
Model support.
1709

            
1710
=item *
1711

            
1712
Generate where clause dinamically.
1713

            
1714
=item *
1715

            
1716
Generate join clause dinamically.
1717

            
1718
=back
pod fix
Yuki Kimoto authored on 2011-01-21
1719

            
1720
=head1 GUIDE
1721

            
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1722
L<DBIx::Custom::Guide> - L<DBIx::Custom> Guide
pod fix
Yuki Kimoto authored on 2011-01-21
1723

            
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1724
=head1 Wiki
pod fix
Yuki Kimoto authored on 2011-01-21
1725

            
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1726
L<DBIx::Custom Wiki|https://github.com/yuki-kimoto/DBIx-Custom/wiki>
updated document
yuki-kimoto authored on 2010-08-08
1727

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

            
- removed DEPRECATED DBIx::C...
Yuki Kimoto authored on 2011-04-11
1730
=head2 C<connector>
- removed EXPERIMENTAL Prefo...
Yuki Kimoto authored on 2011-04-04
1731

            
1732
    my $connector = $dbi->connector;
1733
    $dbi          = $dbi->connector(DBIx::Connector->new(...));
1734

            
1735
Connection manager object. if connector is set, you can get C<dbh()>
1736
from connection manager. conection manager object must have dbh() mehtod.
1737

            
1738
This is L<DBIx::Connector> example. Please pass
1739
C<default_dbi_option> to L<DBIx::Connector>.
1740

            
1741
    my $connector = DBIx::Connector->new(
1742
        "dbi:mysql:database=$DATABASE",
1743
        $USER,
1744
        $PASSWORD,
1745
        DBIx::Custom->new->default_dbi_option
1746
    );
1747
    
1748
    my $dbi = DBIx::Custom->new(connector => $connector);
1749

            
data_source is DEPRECATED! I...
Yuki Kimoto authored on 2011-06-06
1750
=head2 C<dsn>
1751

            
1752
    my $dsn = $dbi->dsn;
1753
    $dbi    = $dbi->dsn("DBI:mysql:database=dbname");
packaging one directory
yuki-kimoto authored on 2009-11-16
1754

            
data_source is DEPRECATED! I...
Yuki Kimoto authored on 2011-06-06
1755
Data source name, used when C<connect()> is executed.
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
1756

            
data_source is DEPRECATED! I...
Yuki Kimoto authored on 2011-06-06
1757
C<data_source> is DEPRECATED! It is renamed to C<dsn>.
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
1758

            
renamed dbi_options to dbi_o...
Yuki Kimoto authored on 2011-01-23
1759
=head2 C<dbi_option>
added dbi_options attribute
kimoto authored on 2010-12-20
1760

            
renamed dbi_options to dbi_o...
Yuki Kimoto authored on 2011-01-23
1761
    my $dbi_option = $dbi->dbi_option;
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1762
    $dbi           = $dbi->dbi_option($dbi_option);
add default_dbi_option()
Yuki Kimoto authored on 2011-02-19
1763

            
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1764
L<DBI> option, used when C<connect()> is executed.
1765
Each value in option override the value of C<default_dbi_option>.
add default_dbi_option()
Yuki Kimoto authored on 2011-02-19
1766

            
1767
=head2 C<default_dbi_option>
1768

            
1769
    my $default_dbi_option = $dbi->default_dbi_option;
1770
    $dbi            = $dbi->default_dbi_option($default_dbi_option);
1771

            
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1772
L<DBI> default option, used when C<connect()> is executed,
1773
default to the following values.
add default_dbi_option()
Yuki Kimoto authored on 2011-02-19
1774

            
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1775
    {
1776
        RaiseError => 1,
1777
        PrintError => 0,
1778
        AutoCommit => 1,
1779
    }
packaging one directory
yuki-kimoto authored on 2009-11-16
1780

            
update pod
Yuki Kimoto authored on 2011-03-13
1781
You should not change C<AutoCommit> value directly,
1782
the value is used to check if the process is in transaction.
EXPERIMETAL fork safety impl...
Yuki Kimoto authored on 2011-03-12
1783

            
cleanup
yuki-kimoto authored on 2010-10-17
1784
=head2 C<filters>
bind_filter argument is chan...
yuki-kimoto authored on 2009-11-19
1785

            
cleanup
yuki-kimoto authored on 2010-10-17
1786
    my $filters = $dbi->filters;
1787
    $dbi        = $dbi->filters(\%filters);
packaging one directory
yuki-kimoto authored on 2009-11-16
1788

            
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1789
Filters, registered by C<register_filter()>.
add models() attribute
Yuki Kimoto authored on 2011-02-21
1790

            
- removed DEPRECATED DBIx::C...
Yuki Kimoto authored on 2011-04-11
1791
=head2 C<models>
add models() attribute
Yuki Kimoto authored on 2011-02-21
1792

            
1793
    my $models = $dbi->models;
1794
    $dbi       = $dbi->models(\%models);
1795

            
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1796
Models, included by C<include_model()>.
add models() attribute
Yuki Kimoto authored on 2011-02-21
1797

            
cleanup
yuki-kimoto authored on 2010-10-17
1798
=head2 C<password>
1799

            
1800
    my $password = $dbi->password;
1801
    $dbi         = $dbi->password('lkj&le`@s');
1802

            
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1803
Password, used when C<connect()> is executed.
update document
yuki-kimoto authored on 2010-01-30
1804

            
renamed update tag to update...
yuki-kimoto authored on 2010-08-09
1805
=head2 C<query_builder>
added commit method
yuki-kimoto authored on 2010-05-27
1806

            
renamed update tag to update...
yuki-kimoto authored on 2010-08-09
1807
    my $sql_class = $dbi->query_builder;
1808
    $dbi          = $dbi->query_builder(DBIx::Custom::QueryBuilder->new);
added commit method
yuki-kimoto authored on 2010-05-27
1809

            
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1810
Query builder, default to L<DBIx::Custom::QueryBuilder> object.
cleanup
yuki-kimoto authored on 2010-08-05
1811

            
- removed DEPRECATED DBIx::C...
Yuki Kimoto authored on 2011-04-11
1812
=head2 C<reserved_word_quote>
added EXPERIMENTAL reserved_...
Yuki Kimoto authored on 2011-03-30
1813

            
1814
     my reserved_word_quote = $dbi->reserved_word_quote;
1815
     $dbi                   = $dbi->reserved_word_quote('"');
1816

            
cleanup
Yuki Kimoto authored on 2011-04-02
1817
Reserved word quote, default to empty string.
added EXPERIMENTAL reserved_...
Yuki Kimoto authored on 2011-03-30
1818

            
cleanup
yuki-kimoto authored on 2010-10-17
1819
=head2 C<result_class>
cleanup
yuki-kimoto authored on 2010-08-05
1820

            
cleanup
yuki-kimoto authored on 2010-10-17
1821
    my $result_class = $dbi->result_class;
1822
    $dbi             = $dbi->result_class('DBIx::Custom::Result');
cleanup
yuki-kimoto authored on 2010-08-05
1823

            
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1824
Result class, default to L<DBIx::Custom::Result>.
cleanup
yuki-kimoto authored on 2010-08-05
1825

            
removed EXPERIMETNAL flag fr...
Yuki Kimoto authored on 2011-03-25
1826
=head2 C<safety_character>
update pod
Yuki Kimoto authored on 2011-01-27
1827

            
- remaned experimental safty...
Yuki Kimoto authored on 2011-03-10
1828
    my $safety_character = $self->safety_character;
cleanup
Yuki Kimoto authored on 2011-03-10
1829
    $dbi                 = $self->safety_character($character);
update pod
Yuki Kimoto authored on 2011-01-27
1830

            
update pod
Yuki Kimoto authored on 2011-03-13
1831
Regex of safety character for table and column name, default to '\w'.
cleanup
Yuki Kimoto authored on 2011-03-10
1832
Note that you don't have to specify like '[\w]'.
update pod
Yuki Kimoto authored on 2011-01-27
1833

            
cleanup
yuki-kimoto authored on 2010-10-17
1834
=head2 C<user>
cleanup
yuki-kimoto authored on 2010-08-05
1835

            
cleanup
yuki-kimoto authored on 2010-10-17
1836
    my $user = $dbi->user;
1837
    $dbi     = $dbi->user('Ken');
cleanup
yuki-kimoto authored on 2010-08-05
1838

            
cleanup
Yuki Kimoto authored on 2011-03-10
1839
User name, used when C<connect()> is executed.
update pod
Yuki Kimoto authored on 2011-01-27
1840

            
cleanup
yuki-kimoto authored on 2010-10-17
1841
=head1 METHODS
added commit method
yuki-kimoto authored on 2010-05-27
1842

            
cleanup
yuki-kimoto authored on 2010-10-17
1843
L<DBIx::Custom> inherits all methods from L<Object::Simple>
cleanup
Yuki Kimoto authored on 2011-03-10
1844
and use all methods of L<DBI>
cleanup
yuki-kimoto authored on 2010-10-17
1845
and implements the following new ones.
added check_filter attribute
yuki-kimoto authored on 2010-08-08
1846

            
- removed DEPRECATED DBIx::C...
Yuki Kimoto authored on 2011-04-11
1847
=head2 C<apply_filter>
added auto_filter method
kimoto.yuki@gmail.com authored on 2010-12-21
1848

            
renamed auto_filter to apply...
Yuki Kimoto authored on 2011-01-12
1849
    $dbi->apply_filter(
cleanup
Yuki Kimoto authored on 2011-03-10
1850
        'book',
update pod
Yuki Kimoto authored on 2011-03-13
1851
        'issue_date' => {
1852
            out => 'tp_to_date',
1853
            in  => 'date_to_tp',
1854
            end => 'tp_to_displaydate'
1855
        },
1856
        'write_date' => {
1857
            out => 'tp_to_date',
1858
            in  => 'date_to_tp',
1859
            end => 'tp_to_displaydate'
1860
        }
added auto_filter method
kimoto.yuki@gmail.com authored on 2010-12-21
1861
    );
1862

            
update pod
Yuki Kimoto authored on 2011-03-13
1863
Apply filter to columns.
1864
C<out> filter is executed before data is send to database.
1865
C<in> filter is executed after a row is fetch.
1866
C<end> filter is execute after C<in> filter is executed.
1867

            
1868
Filter is applied to the follwoing tree column name pattern.
cleanup
Yuki Kimoto authored on 2010-12-21
1869

            
update pod
Yuki Kimoto authored on 2011-03-13
1870
       PETTERN         EXAMPLE
1871
    1. Column        : author
1872
    2. Table.Column  : book.author
1873
    3. Table__Column : book__author
fix bug : filter can't over...
Yuki Kimoto authored on 2011-02-09
1874

            
update pod
Yuki Kimoto authored on 2011-03-13
1875
If column name is duplicate with other table,
1876
Main filter specified by C<table> option is used.
1877

            
1878
You can set multiple filters at once.
1879

            
1880
    $dbi->apply_filter(
1881
        'book',
1882
        [qw/issue_date write_date/] => {
1883
            out => 'tp_to_date',
1884
            in  => 'date_to_tp',
1885
            end => 'tp_to_displaydate'
1886
        }
1887
    );
fix bug : filter can't over...
Yuki Kimoto authored on 2011-02-09
1888

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
1889
=head2 C<assign_param> EXPERIMENTAL
added EXPERIMENTAL assign_ta...
Yuki Kimoto authored on 2011-04-26
1890

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
1891
    my $assign_param = $dbi->assign_param({title => 'a', age => 2});
added EXPERIMENTAL assign_ta...
Yuki Kimoto authored on 2011-04-26
1892

            
updated pod
Yuki Kimoto authored on 2011-06-09
1893
Create assign parameter.
added EXPERIMENTAL assign_ta...
Yuki Kimoto authored on 2011-04-26
1894

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
1895
    title = :title, author = :author
added EXPERIMENTAL assign_ta...
Yuki Kimoto authored on 2011-04-26
1896

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
1897
This is equal to C<update_param> exept that set is not added.
added EXPERIMENTAL assign_ta...
Yuki Kimoto authored on 2011-04-26
1898

            
- select() EXPERIMETNAL colu...
Yuki Kimoto authored on 2011-06-08
1899
=head2 C<col> EXPERIMETNAL
1900

            
1901
    my $column = $model->col(book => ['author', 'title']);
1902

            
1903
Create column clause. The follwoing column clause is created.
1904

            
1905
    book.author as "book.author",
1906
    book.title as "book.title"
1907

            
1908
=head2 C<column> EXPERIMETNAL
1909

            
1910
    my $column = $dbi->column(book => ['author', 'title']);
1911

            
1912
Create column clause. The follwoing column clause is created.
1913

            
1914
    book.author as book__author,
1915
    book.title as book__title
1916

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

            
update pod
Yuki Kimoto authored on 2011-03-13
1919
    my $dbi = DBIx::Custom->connect(
data_source is DEPRECATED! I...
Yuki Kimoto authored on 2011-06-06
1920
        dsn => "dbi:mysql:database=dbname",
update pod
Yuki Kimoto authored on 2011-03-13
1921
        user => 'ken',
1922
        password => '!LFKD%$&',
1923
        dbi_option => {mysql_enable_utf8 => 1}
1924
    );
1925

            
1926
Connect to the database and create a new L<DBIx::Custom> object.
bind_filter argument is chan...
yuki-kimoto authored on 2009-11-19
1927

            
renamed build_query to creat...
yuki-kimoto authored on 2010-08-06
1928
L<DBIx::Custom> is a wrapper of L<DBI>.
cleanup
yuki-kimoto authored on 2010-08-09
1929
C<AutoCommit> and C<RaiseError> options are true, 
update pod
Yuki Kimoto authored on 2011-03-13
1930
and C<PrintError> option is false by default.
packaging one directory
yuki-kimoto authored on 2009-11-16
1931

            
removed EXPERIMETNAL flag fr...
Yuki Kimoto authored on 2011-03-25
1932
=head2 create_model
1933

            
adeed EXPERIMENTAL DBIx::Cus...
Yuki Kimoto authored on 2011-03-29
1934
    my $model = $dbi->create_model(
removed EXPERIMETNAL flag fr...
Yuki Kimoto authored on 2011-03-25
1935
        table => 'book',
1936
        primary_key => 'id',
1937
        join => [
1938
            'inner join company on book.comparny_id = company.id'
1939
        ],
DBIx::Custom::Model filter a...
Yuki Kimoto authored on 2011-04-18
1940
        filter => {
removed EXPERIMETNAL flag fr...
Yuki Kimoto authored on 2011-03-25
1941
            publish_date => {
1942
                out => 'tp_to_date',
1943
                in => 'date_to_tp',
1944
                end => 'tp_to_displaydate'
1945
            }
DBIx::Custom::Model filter a...
Yuki Kimoto authored on 2011-04-18
1946
        }
removed EXPERIMETNAL flag fr...
Yuki Kimoto authored on 2011-03-25
1947
    );
1948

            
1949
Create L<DBIx::Custom::Model> object and initialize model.
adeed EXPERIMENTAL DBIx::Cus...
Yuki Kimoto authored on 2011-03-29
1950
the module is also used from model() method.
removed EXPERIMETNAL flag fr...
Yuki Kimoto authored on 2011-03-25
1951

            
1952
   $dbi->model('book')->select(...);
1953

            
cleanup
yuki-kimoto authored on 2010-10-17
1954
=head2 C<create_query>
1955
    
1956
    my $query = $dbi->create_query(
update pod
Yuki Kimoto authored on 2011-03-13
1957
        "insert into book {insert_param title author};";
cleanup
yuki-kimoto authored on 2010-10-17
1958
    );
update document
yuki-kimoto authored on 2009-11-19
1959

            
update pod
Yuki Kimoto authored on 2011-03-13
1960
Create L<DBIx::Custom::Query> object.
1961

            
cleanup
yuki-kimoto authored on 2010-10-17
1962
If you want to get high performance,
update pod
Yuki Kimoto authored on 2011-03-13
1963
create L<DBIx::Custom::Query> object and execute the query by C<execute()>
1964
instead of other methods, such as C<insert>, C<update>.
bind_filter argument is chan...
yuki-kimoto authored on 2009-11-19
1965

            
cleanup
yuki-kimoto authored on 2010-10-17
1966
    $dbi->execute($query, {author => 'Ken', title => '%Perl%'});
version 0.0901
yuki-kimoto authored on 2009-12-17
1967

            
EXPERIMETAL fork safety impl...
Yuki Kimoto authored on 2011-03-12
1968
=head2 C<dbh>
1969

            
1970
    my $dbh = $dbi->dbh;
1971

            
- removed EXPERIMENTAL Prefo...
Yuki Kimoto authored on 2011-04-04
1972
Get L<DBI> database handle. if C<connector> is set, you can get
1973
database handle from C<connector>.
removed EXPERIMETNAL flag fr...
Yuki Kimoto authored on 2011-03-25
1974

            
1975
=head2 C<each_column>
1976

            
1977
    $dbi->each_column(
1978
        sub {
1979
            my ($dbi, $table, $column, $column_info) = @_;
1980
            
1981
            my $type = $column_info->{TYPE_NAME};
1982
            
1983
            if ($type eq 'DATE') {
1984
                # ...
1985
            }
1986
        }
1987
    );
1988

            
1989
Iterate all column informations of all table from database.
1990
Argument is callback when one column is found.
1991
Callback receive four arguments, dbi object, table name,
1992
column name and column information.
EXPERIMETAL fork safety impl...
Yuki Kimoto authored on 2011-03-12
1993

            
cleanup
yuki-kimoto authored on 2010-10-17
1994
=head2 C<execute>
packaging one directory
yuki-kimoto authored on 2009-11-16
1995

            
update pod
Yuki Kimoto authored on 2011-03-13
1996
    my $result = $dbi->execute(
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
1997
        "select * from book where title = :title and author like :author",
execute method can second ar...
Yuki Kimoto authored on 2011-06-09
1998
        {title => 'Perl', author => '%Ken%'}
update pod
Yuki Kimoto authored on 2011-03-13
1999
    );
2000

            
updated pod
Yuki Kimoto authored on 2011-06-09
2001
Execute SQL. SQL can contain parameter such as :author.
2002
Return value is L<DBIx::Custom::Result> when select statement is executed,
2003
or the count of affected rows in insert, update, delete statement is executed.
update pod
Yuki Kimoto authored on 2011-03-13
2004

            
updated pod
Yuki Kimoto authored on 2011-06-09
2005
Parameter is replaced by placeholder C<?>.
update pod
Yuki Kimoto authored on 2011-03-13
2006

            
2007
    select * from where title = ? and author like ?;
2008

            
updated pod
Yuki Kimoto authored on 2011-06-09
2009
The following opitons are available.
update pod
Yuki Kimoto authored on 2011-03-13
2010

            
2011
=over 4
2012

            
2013
=item C<filter>
updated pod
Yuki Kimoto authored on 2011-06-09
2014
    
2015
    filter => {
2016
        title  => sub { uc $_[0] }
2017
        author => sub { uc $_[0] }
2018
    }
update pod
Yuki Kimoto authored on 2011-03-13
2019

            
updated pod
Yuki Kimoto authored on 2011-06-09
2020
    # Filter name
2021
    filter => {
2022
        title  => 'upper_case',
2023
        author => 'upper_case'
2024
    }
2025
        
2026
    # At once
2027
    filter => [
2028
        [qw/title author/]  => sub { uc $_[0] }
2029
    ]
2030

            
2031
Filter, executed before data is saved into database.
update pod
Yuki Kimoto authored on 2011-03-13
2032
Filter value is code reference or
2033
filter name registerd by C<register_filter()>.
2034

            
2035
These filters are added to the C<out> filters, set by C<apply_filter()>.
added EXPERIMENTAL execute()...
Yuki Kimoto authored on 2011-06-09
2036

            
updated document
Yuki Kimoto authored on 2011-06-09
2037
=item C<query>
2038

            
2039
    query => 1
2040

            
2041
C<execute> method return L<DBIx::Custom::Query> object, not executing SQL.
2042

            
updated pod
Yuki Kimoto authored on 2011-06-09
2043
=item C<table>
2044
    
2045
    table => 'author'
2046
    table => ['author', 'book']
2047

            
2048
Table names for filtering.
2049

            
2050
Filtering by C<apply_filter> is off in C<execute> method,
2051
because we don't know what filter is applied.
2052

            
added EXPERIMENTAL execute()...
Yuki Kimoto authored on 2011-06-09
2053
=item C<type>
2054

            
2055
Specify database data type.
2056

            
2057
    type => [image => DBI::SQL_BLOB]
2058
    type => [[qw/image audio/] => DBI::SQL_BLOB]
2059

            
2060
This is used to bind paramter by C<bind_param()> of statment handle.
2061

            
2062
    $sth->bind_param($pos, $value, DBI::SQL_BLOB);
2063

            
2064
C<type> option is also available
2065
by C<insert()>, C<update()>, C<delete()>, C<select()>.
2066

            
2067
=item C<type_rule_off> EXPERIMENTAL
2068

            
2069
    type_rule_off => 1
2070

            
2071
Trun type rule off.
update document
yuki-kimoto authored on 2009-11-19
2072

            
update pod
Yuki Kimoto authored on 2011-03-13
2073
=back
version 0.0901
yuki-kimoto authored on 2009-12-17
2074

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

            
update pod
Yuki Kimoto authored on 2011-03-13
2077
    $dbi->delete(table => 'book', where => {title => 'Perl'});
2078

            
updated document
Yuki Kimoto authored on 2011-06-09
2079
Execute delete statement.
update pod
Yuki Kimoto authored on 2011-03-13
2080

            
updated document
Yuki Kimoto authored on 2011-06-09
2081
The following opitons are available.
update pod
Yuki Kimoto authored on 2011-03-13
2082

            
update pod
Yuki Kimoto authored on 2011-03-13
2083
=over 4
2084

            
update pod
Yuki Kimoto authored on 2011-03-13
2085
=item C<append>
2086

            
updated document
Yuki Kimoto authored on 2011-06-09
2087
Same as C<select> method's C<append> option.
update pod
Yuki Kimoto authored on 2011-03-13
2088

            
2089
=item C<filter>
2090

            
added EXPERIMENTAL execute()...
Yuki Kimoto authored on 2011-06-09
2091
Same as C<execute> method's C<filter> option.
update pod
Yuki Kimoto authored on 2011-03-13
2092

            
updated document
Yuki Kimoto authored on 2011-06-09
2093
=item C<id>
update pod
Yuki Kimoto authored on 2011-03-13
2094

            
updated document
Yuki Kimoto authored on 2011-06-09
2095
    id => 4
2096
    id => [4, 5]
update pod
Yuki Kimoto authored on 2011-03-13
2097

            
updated document
Yuki Kimoto authored on 2011-06-09
2098
ID corresponding to C<primary_key>.
2099
You can delete rows by C<id> and C<primary_key>.
update pod
Yuki Kimoto authored on 2011-03-13
2100

            
updated document
Yuki Kimoto authored on 2011-06-09
2101
    $dbi->delete(
2102
        parimary_key => ['id1', 'id2'],
2103
        id => [4, 5],
2104
        table => 'book',
2105
    );
update pod
Yuki Kimoto authored on 2011-03-13
2106

            
updated document
Yuki Kimoto authored on 2011-06-09
2107
The above is same as the followin one.
renamed build_query to creat...
yuki-kimoto authored on 2010-08-06
2108

            
updated document
Yuki Kimoto authored on 2011-06-09
2109
    $dbi->delete(where => {id1 => 4, id2 => 5}, table => 'book');
add experimental update_at()...
Yuki Kimoto authored on 2011-02-21
2110

            
updated document
Yuki Kimoto authored on 2011-06-09
2111
=item C<query>
add experimental update_at()...
Yuki Kimoto authored on 2011-02-21
2112

            
updated document
Yuki Kimoto authored on 2011-06-09
2113
Same as C<execute> method's C<query> option.
add experimental update_at()...
Yuki Kimoto authored on 2011-02-21
2114

            
updated document
Yuki Kimoto authored on 2011-06-09
2115
=item C<table>
update pod
Yuki Kimoto authored on 2011-03-13
2116

            
updated document
Yuki Kimoto authored on 2011-06-09
2117
    table => 'book'
update pod
Yuki Kimoto authored on 2011-03-13
2118

            
updated document
Yuki Kimoto authored on 2011-06-09
2119
=item C<where>
update pod
Yuki Kimoto authored on 2011-03-13
2120

            
updated document
Yuki Kimoto authored on 2011-06-09
2121
Same as C<select> method's C<where> option.
update pod
Yuki Kimoto authored on 2011-03-13
2122

            
updated pod
Yuki Kimoto authored on 2011-06-08
2123
=item C<primary_key>
update pod
Yuki Kimoto authored on 2011-03-13
2124

            
updated pod
Yuki Kimoto authored on 2011-06-08
2125
See C<id> option.
update pod
Yuki Kimoto authored on 2011-03-13
2126

            
added EXPERIMENTAL execute()...
Yuki Kimoto authored on 2011-06-09
2127
=item C<type>
2128

            
2129
Same as C<execute> method's C<type> option.
2130

            
2131
=item C<type_rule_off> EXPERIMENTAL
2132

            
2133
Same as C<execute> method's C<type_rule_off> option.
2134

            
updated pod
Yuki Kimoto authored on 2011-06-08
2135
=back
update pod
Yuki Kimoto authored on 2011-03-13
2136

            
updated pod
Yuki Kimoto authored on 2011-06-08
2137
=head2 C<delete_all>
update pod
Yuki Kimoto authored on 2011-03-13
2138

            
updated pod
Yuki Kimoto authored on 2011-06-08
2139
    $dbi->delete_all(table => $table);
add experimental update_at()...
Yuki Kimoto authored on 2011-02-21
2140

            
updated document
Yuki Kimoto authored on 2011-06-09
2141
Execute delete statement for all rows.
updated pod
Yuki Kimoto authored on 2011-06-08
2142
Options is same as C<delete()>.
update pod
Yuki Kimoto authored on 2011-03-13
2143

            
cleanup
yuki-kimoto authored on 2010-10-17
2144
=head2 C<insert>
2145

            
cleanup
Yuki Kimoto authored on 2011-06-09
2146
    $dbi->insert({title => 'Perl', author => 'Ken'}, table  => 'book');
update pod
Yuki Kimoto authored on 2011-03-13
2147

            
cleanup
Yuki Kimoto authored on 2011-06-09
2148
Execute insert statement.
update pod
Yuki Kimoto authored on 2011-03-13
2149

            
cleanup
Yuki Kimoto authored on 2011-06-09
2150
The following opitons are available.
update pod
Yuki Kimoto authored on 2011-03-13
2151

            
cleanup
Yuki Kimoto authored on 2011-06-09
2152
=over 4
- insert, insert_at, update,...
Yuki Kimoto authored on 2011-06-08
2153

            
update pod
Yuki Kimoto authored on 2011-03-13
2154
=item C<append>
2155

            
cleanup
Yuki Kimoto authored on 2011-06-09
2156
Same as C<select> method's C<append> option.
update pod
Yuki Kimoto authored on 2011-03-13
2157

            
2158
=item C<filter>
2159

            
added EXPERIMENTAL execute()...
Yuki Kimoto authored on 2011-06-09
2160
Same as C<execute> method's C<filter> option.
2161

            
2162
=item C<id>
2163

            
updated document
Yuki Kimoto authored on 2011-06-09
2164
    id => 4
2165
    id => [4, 5]
update pod
Yuki Kimoto authored on 2011-03-13
2166

            
updated document
Yuki Kimoto authored on 2011-06-09
2167
ID corresponding to C<primary_key>.
2168
You can insert a row by C<id> and C<primary_key>.
added EXPERIMENTAL execute()...
Yuki Kimoto authored on 2011-06-09
2169

            
update pod
Yuki Kimoto authored on 2011-03-13
2170
    $dbi->insert(
updated document
Yuki Kimoto authored on 2011-06-09
2171
        {title => 'Perl', author => 'Ken'}
2172
        parimary_key => ['id1', 'id2'],
added EXPERIMENTAL execute()...
Yuki Kimoto authored on 2011-06-09
2173
        id => [4, 5],
updated document
Yuki Kimoto authored on 2011-06-09
2174
        table => 'book'
update pod
Yuki Kimoto authored on 2011-03-13
2175
    );
added EXPERIMENTAL execute()...
Yuki Kimoto authored on 2011-06-09
2176

            
updated document
Yuki Kimoto authored on 2011-06-09
2177
The above is same as the followin one.
update pod
Yuki Kimoto authored on 2011-03-13
2178

            
added EXPERIMENTAL execute()...
Yuki Kimoto authored on 2011-06-09
2179
    $dbi->insert(
updated document
Yuki Kimoto authored on 2011-06-09
2180
        {id1 => 4, id2 => 5, title => 'Perl', author => 'Ken'},
2181
        table => 'book'
added EXPERIMENTAL execute()...
Yuki Kimoto authored on 2011-06-09
2182
    );
update pod
Yuki Kimoto authored on 2011-03-13
2183

            
added EXPERIMENTAL execute()...
Yuki Kimoto authored on 2011-06-09
2184
=item C<primary_key>
update pod
Yuki Kimoto authored on 2011-03-13
2185

            
updated document
Yuki Kimoto authored on 2011-06-09
2186
    primary_key => 'id'
2187
    primary_key => ['id1', 'id2']
update pod
Yuki Kimoto authored on 2011-03-13
2188

            
updated document
Yuki Kimoto authored on 2011-06-09
2189
Primary key. This is used by C<id> option.
cleanup
Yuki Kimoto authored on 2011-06-09
2190

            
2191
=item C<param>
2192

            
2193
    param => {title => 'Perl', author => 'Ken'}
2194

            
2195
Insert data.
2196

            
2197
If C<insert> method's arguments is odd numbers,
2198
first argument is received as C<param>.
2199

            
2200
    $dbi->insert({title => 'Perl', author => 'Ken'}, table => 'book');
2201

            
updated document
Yuki Kimoto authored on 2011-06-09
2202
=item C<query>
2203

            
2204
Same as C<execute> method's C<query> option.
2205

            
2206
=item C<table>
2207

            
2208
    table => 'book'
2209

            
2210
Table name.
2211

            
added EXPERIMENTAL execute()...
Yuki Kimoto authored on 2011-06-09
2212
=item C<type>
cleanup
yuki-kimoto authored on 2010-10-17
2213

            
added EXPERIMENTAL execute()...
Yuki Kimoto authored on 2011-06-09
2214
Same as C<execute> method's C<type> option.
cleanup
yuki-kimoto authored on 2010-10-17
2215

            
added EXPERIMENTAL execute()...
Yuki Kimoto authored on 2011-06-09
2216
=item C<type_rule_off> EXPERIMENTAL
2217

            
updated document
Yuki Kimoto authored on 2011-06-09
2218
Same as C<execute> method's C<type_rule_off> option.
update pod
Yuki Kimoto authored on 2011-03-13
2219

            
update pod
Yuki Kimoto authored on 2011-03-13
2220
=back
2221

            
2222
=over 4
2223

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
2224
=head2 C<insert_param>
added experimental update_pa...
Yuki Kimoto authored on 2011-03-08
2225

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
2226
    my $insert_param = $dbi->insert_param({title => 'a', age => 2});
added experimental update_pa...
Yuki Kimoto authored on 2011-03-08
2227

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
2228
Create insert parameters.
added experimental update_pa...
Yuki Kimoto authored on 2011-03-08
2229

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
2230
    (title, author) values (title = :title, age = :age);
added experimental update_pa...
Yuki Kimoto authored on 2011-03-08
2231

            
- removed DEPRECATED DBIx::C...
Yuki Kimoto authored on 2011-04-11
2232
=head2 C<include_model>
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
2233

            
update pod
Yuki Kimoto authored on 2011-03-13
2234
    $dbi->include_model('MyModel');
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
2235

            
update pod
Yuki Kimoto authored on 2011-03-13
2236
Include models from specified namespace,
2237
the following layout is needed to include models.
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
2238

            
update pod
Yuki Kimoto authored on 2011-03-13
2239
    lib / MyModel.pm
2240
        / MyModel / book.pm
2241
                  / company.pm
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
2242

            
update pod
Yuki Kimoto authored on 2011-03-13
2243
Name space module, extending L<DBIx::Custom::Model>.
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
2244

            
update pod
Yuki Kimoto authored on 2011-03-13
2245
B<MyModel.pm>
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
2246

            
2247
    package MyModel;
2248
    
2249
    use base 'DBIx::Custom::Model';
update pod
Yuki Kimoto authored on 2011-03-13
2250
    
2251
    1;
add feture. all model class ...
Yuki Kimoto authored on 2011-02-18
2252

            
update pod
Yuki Kimoto authored on 2011-03-13
2253
Model modules, extending name space module.
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
2254

            
update pod
Yuki Kimoto authored on 2011-03-13
2255
B<MyModel/book.pm>
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
2256

            
update pod
Yuki Kimoto authored on 2011-03-13
2257
    package MyModel::book;
2258
    
2259
    use base 'MyModel';
2260
    
2261
    1;
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
2262

            
update pod
Yuki Kimoto authored on 2011-03-13
2263
B<MyModel/company.pm>
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
2264

            
update pod
Yuki Kimoto authored on 2011-03-13
2265
    package MyModel::company;
2266
    
2267
    use base 'MyModel';
2268
    
2269
    1;
2270
    
2271
MyModel::book and MyModel::company is included by C<include_model()>.
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
2272

            
update pod
Yuki Kimoto authored on 2011-03-13
2273
You can get model object by C<model()>.
2274

            
2275
    my $book_model    = $dbi->model('book');
2276
    my $company_model = $dbi->model('company');
removed experimental base_ta...
Yuki Kimoto authored on 2011-02-15
2277

            
update pod
Yuki Kimoto authored on 2011-03-13
2278
See L<DBIx::Custom::Model> to know model features.
2279

            
- removed DEPRECATED DBIx::C...
Yuki Kimoto authored on 2011-04-11
2280
=head2 C<merge_param>
added EXPERIMENTAL updat_par...
Yuki Kimoto authored on 2011-03-30
2281

            
2282
    my $param = $dbi->merge_param({key1 => 1}, {key1 => 1, key2 => 2});
2283

            
2284
Merge paramters.
2285

            
2286
$param:
2287

            
2288
    {key1 => [1, 1], key2 => 2}
2289

            
- removed DEPRECATED DBIx::C...
Yuki Kimoto authored on 2011-04-11
2290
=head2 C<method>
added experimental not_exist...
Yuki Kimoto authored on 2011-01-26
2291

            
2292
    $dbi->method(
2293
        update_or_insert => sub {
2294
            my $self = shift;
update pod
Yuki Kimoto authored on 2011-03-13
2295
            
2296
            # Process
added experimental not_exist...
Yuki Kimoto authored on 2011-01-26
2297
        },
2298
        find_or_create   => sub {
2299
            my $self = shift;
update pod
Yuki Kimoto authored on 2011-03-13
2300
            
2301
            # Process
added experimental not_exist...
Yuki Kimoto authored on 2011-01-26
2302
        }
2303
    );
2304

            
update pod
Yuki Kimoto authored on 2011-03-13
2305
Register method. These method is called directly from L<DBIx::Custom> object.
added experimental not_exist...
Yuki Kimoto authored on 2011-01-26
2306

            
2307
    $dbi->update_or_insert;
2308
    $dbi->find_or_create;
2309

            
- removed DEPRECATED DBIx::C...
Yuki Kimoto authored on 2011-04-11
2310
=head2 C<model>
update pod
Yuki Kimoto authored on 2011-03-13
2311

            
2312
    $dbi->model('book')->method(
2313
        insert => sub { ... },
2314
        update => sub { ... }
2315
    );
2316
    
2317
    my $model = $dbi->model('book');
2318

            
2319
Set and get a L<DBIx::Custom::Model> object,
2320

            
- removed DEPRECATED DBIx::C...
Yuki Kimoto authored on 2011-04-11
2321
=head2 C<mycolumn>
cleanup
Yuki Kimoto authored on 2011-03-21
2322

            
2323
    my $column = $self->mycolumn(book => ['author', 'title']);
2324

            
2325
Create column clause for myself. The follwoing column clause is created.
2326

            
2327
    book.author as author,
2328
    book.title as title
2329

            
added experimental not_exist...
Yuki Kimoto authored on 2011-01-26
2330
=head2 C<new>
2331

            
update pod
Yuki Kimoto authored on 2011-03-13
2332
    my $dbi = DBIx::Custom->new(
data_source is DEPRECATED! I...
Yuki Kimoto authored on 2011-06-06
2333
        dsn => "dbi:mysql:database=dbname",
update pod
Yuki Kimoto authored on 2011-03-13
2334
        user => 'ken',
2335
        password => '!LFKD%$&',
2336
        dbi_option => {mysql_enable_utf8 => 1}
2337
    );
added experimental not_exist...
Yuki Kimoto authored on 2011-01-26
2338

            
2339
Create a new L<DBIx::Custom> object.
2340

            
removed EXPERIMETNAL flag fr...
Yuki Kimoto authored on 2011-03-25
2341
=head2 C<not_exists>
added experimental not_exist...
Yuki Kimoto authored on 2011-01-26
2342

            
2343
    my $not_exists = $dbi->not_exists;
2344

            
update pod
Yuki Kimoto authored on 2011-03-13
2345
DBIx::Custom::NotExists object, indicating the column is not exists.
2346
This is used by C<clause> of L<DBIx::Custom::Where> .
experimental extended select...
Yuki Kimoto authored on 2011-01-17
2347

            
cleanup
yuki-kimoto authored on 2010-10-17
2348
=head2 C<register_filter>
2349

            
update pod
Yuki Kimoto authored on 2011-03-13
2350
    $dbi->register_filter(
2351
        # Time::Piece object to database DATE format
2352
        tp_to_date => sub {
2353
            my $tp = shift;
2354
            return $tp->strftime('%Y-%m-%d');
2355
        },
2356
        # database DATE format to Time::Piece object
2357
        date_to_tp => sub {
2358
           my $date = shift;
2359
           return Time::Piece->strptime($date, '%Y-%m-%d');
2360
        }
2361
    );
cleanup
yuki-kimoto authored on 2010-10-17
2362
    
update pod
Yuki Kimoto authored on 2011-03-13
2363
Register filters, used by C<filter> option of many methods.
cleanup
yuki-kimoto authored on 2010-10-17
2364

            
added type_rule into logic
Yuki Kimoto authored on 2011-06-09
2365
=head2 C<type_rule> EXPERIMENTAL
2366

            
2367
    $dbi->type_rule(
2368
        DATE => {
2369
            from => sub { ... },
2370
            into => sub { ... }
2371
        },
2372
        DATETIME => {
2373
            from => sub { ... }
2374
            into => sub { ... }
2375
        }
2376
    );
2377

            
2378
Filter based on type.
2379

            
removed DBIx::Custom commit ...
yuki-kimoto authored on 2010-07-14
2380
=head2 C<select>
added select() all_column op...
Yuki Kimoto authored on 2011-03-12
2381

            
select method column option ...
Yuki Kimoto authored on 2011-02-22
2382
    my $result = $dbi->select(
added select() all_column op...
Yuki Kimoto authored on 2011-03-12
2383
        table  => 'book',
2384
        column => ['author', 'title'],
2385
        where  => {author => 'Ken'},
select method column option ...
Yuki Kimoto authored on 2011-02-22
2386
    );
added select() all_column op...
Yuki Kimoto authored on 2011-03-12
2387
    
updated document
Yuki Kimoto authored on 2011-06-09
2388
Execute select statement.
added select() all_column op...
Yuki Kimoto authored on 2011-03-12
2389

            
updated document
Yuki Kimoto authored on 2011-06-09
2390
The following opitons are available.
added select() all_column op...
Yuki Kimoto authored on 2011-03-12
2391

            
2392
=over 4
2393

            
updated document
Yuki Kimoto authored on 2011-06-09
2394
=item C<append>
added select() all_column op...
Yuki Kimoto authored on 2011-03-12
2395

            
updated document
Yuki Kimoto authored on 2011-06-09
2396
    append => 'order by title'
added select() all_column op...
Yuki Kimoto authored on 2011-03-12
2397

            
updated document
Yuki Kimoto authored on 2011-06-09
2398
Append statement to last of SQL.
2399
    
added select() all_column op...
Yuki Kimoto authored on 2011-03-12
2400
=item C<column>
2401
    
updated document
Yuki Kimoto authored on 2011-06-09
2402
    column => 'author'
2403
    column => ['author', 'title']
2404

            
2405
Column clause.
updated pod
Yuki Kimoto authored on 2011-06-07
2406
    
updated document
Yuki Kimoto authored on 2011-06-09
2407
if C<column> is not specified, '*' is set.
added select() all_column op...
Yuki Kimoto authored on 2011-03-12
2408

            
updated document
Yuki Kimoto authored on 2011-06-09
2409
    column => '*'
added select() all_column op...
Yuki Kimoto authored on 2011-03-12
2410

            
updated document
Yuki Kimoto authored on 2011-06-09
2411
You can specify hash reference in array reference. This is EXPERIMENTAL.
updated pod
Yuki Kimoto authored on 2011-06-07
2412

            
updated document
Yuki Kimoto authored on 2011-06-09
2413
    column => [
updated pod
Yuki Kimoto authored on 2011-06-07
2414
        {book => [qw/author title/]},
2415
        {person => [qw/name age/]}
updated document
Yuki Kimoto authored on 2011-06-09
2416
    ]
updated pod
Yuki Kimoto authored on 2011-06-07
2417

            
updated document
Yuki Kimoto authored on 2011-06-09
2418
This is expanded to the following one by using C<col> method.
- select() column option can...
Yuki Kimoto authored on 2011-06-08
2419

            
2420
    book.author as "book.author",
2421
    book.title as "book.title",
2422
    person.name as "person.name",
2423
    person.age as "person.age"
2424

            
updated document
Yuki Kimoto authored on 2011-06-09
2425
You can specify array reference in array reference.
- select() column option can...
Yuki Kimoto authored on 2011-06-08
2426

            
updated document
Yuki Kimoto authored on 2011-06-09
2427
    column => [
- select() column option can...
Yuki Kimoto authored on 2011-06-08
2428
        ['date(book.register_datetime)', as => 'book.register_date']
updated document
Yuki Kimoto authored on 2011-06-09
2429
    ];
- select() column option can...
Yuki Kimoto authored on 2011-06-08
2430

            
updated document
Yuki Kimoto authored on 2011-06-09
2431
Alias is quoted and joined.
- select() column option can...
Yuki Kimoto authored on 2011-06-08
2432

            
2433
    date(book.register_datetime) as "book.register_date"
updated pod
Yuki Kimoto authored on 2011-06-07
2434

            
updated document
Yuki Kimoto authored on 2011-06-09
2435
=item C<filter>
added select() all_column op...
Yuki Kimoto authored on 2011-03-12
2436

            
updated document
Yuki Kimoto authored on 2011-06-09
2437
Same as C<execute> method's C<filter> option.
2438

            
2439
=item C<id>
2440

            
2441
    id => 4
2442
    id => [4, 5]
2443

            
2444
ID corresponding to C<primary_key>.
2445
You can select rows by C<id> and C<primary_key>.
2446

            
2447
    $dbi->select(
2448
        parimary_key => ['id1', 'id2'],
2449
        id => [4, 5],
2450
        table => 'book'
added select() all_column op...
Yuki Kimoto authored on 2011-03-12
2451
    );
2452

            
updated document
Yuki Kimoto authored on 2011-06-09
2453
The above is same as the followin one.
2454

            
updated pod
Yuki Kimoto authored on 2011-04-25
2455
    $dbi->select(
updated document
Yuki Kimoto authored on 2011-06-09
2456
        where => {id1 => 4, id2 => 5},
2457
        table => 'book'
where can recieve array refr...
Yuki Kimoto authored on 2011-03-24
2458
    );
2459
    
updated document
Yuki Kimoto authored on 2011-06-09
2460
=item C<param> EXPERIMETNAL
added select() all_column op...
Yuki Kimoto authored on 2011-03-12
2461

            
updated document
Yuki Kimoto authored on 2011-06-09
2462
    param => {'table2.key3' => 5}
update pod
Yuki Kimoto authored on 2011-03-12
2463

            
updated document
Yuki Kimoto authored on 2011-06-09
2464
Parameter shown before where clause.
2465
    
2466
For example, if you want to contain tag in join clause, 
2467
you can pass parameter by C<param> option.
update pod
Yuki Kimoto authored on 2011-03-12
2468

            
updated document
Yuki Kimoto authored on 2011-06-09
2469
    join  => ['inner join (select * from table2 where table2.key3 = :table2.key3)' . 
2470
              ' as table2 on table1.key1 = table2.key1']
2471

            
2472
=item C<join>
2473

            
2474
    join => [
2475
        'left outer join company on book.company_id = company_id',
2476
        'left outer join location on company.location_id = location.id'
2477
    ]
2478
        
2479
Join clause. If column cluase or where clause contain table name like "company.name",
2480
join clausees needed when SQL is created is used automatically.
update pod
Yuki Kimoto authored on 2011-03-12
2481

            
2482
    $dbi->select(
2483
        table => 'book',
2484
        column => ['company.location_id as company__location_id'],
2485
        where => {'company.name' => 'Orange'},
2486
        join => [
2487
            'left outer join company on book.company_id = company.id',
2488
            'left outer join location on company.location_id = location.id'
2489
        ]
2490
    );
2491

            
updated document
Yuki Kimoto authored on 2011-06-09
2492
In above select, column and where clause contain "company" table,
2493
the following SQL is created
update pod
Yuki Kimoto authored on 2011-03-12
2494

            
2495
    select company.location_id as company__location_id
2496
    from book
2497
      left outer join company on book.company_id = company.id
2498
    where company.name = Orange
2499

            
updated document
Yuki Kimoto authored on 2011-06-09
2500
=item C<primary_key>
added EXPERIMENTAL replace()...
Yuki Kimoto authored on 2011-04-01
2501

            
updated document
Yuki Kimoto authored on 2011-06-09
2502
    primary_key => 'id'
2503
    primary_key => ['id1', 'id2']
added EXPERIMENTAL replace()...
Yuki Kimoto authored on 2011-04-01
2504

            
updated document
Yuki Kimoto authored on 2011-06-09
2505
Primary key. This is used by C<id> option.
added EXPERIMENTAL replace()...
Yuki Kimoto authored on 2011-04-01
2506

            
updated document
Yuki Kimoto authored on 2011-06-09
2507
=item C<query>
update pod
Yuki Kimoto authored on 2011-03-12
2508

            
updated document
Yuki Kimoto authored on 2011-06-09
2509
Same as C<execute> method's C<query> option.
update pod
Yuki Kimoto authored on 2011-03-12
2510

            
updated document
Yuki Kimoto authored on 2011-06-09
2511
=item C<type>
updated pod
Yuki Kimoto authored on 2011-06-08
2512

            
updated document
Yuki Kimoto authored on 2011-06-09
2513
Same as C<execute> method's C<type> option.
updated pod
Yuki Kimoto authored on 2011-06-08
2514

            
updated document
Yuki Kimoto authored on 2011-06-09
2515
=item C<table>
updated pod
Yuki Kimoto authored on 2011-06-08
2516

            
updated document
Yuki Kimoto authored on 2011-06-09
2517
    table => 'book'
updated pod
Yuki Kimoto authored on 2011-06-08
2518

            
updated document
Yuki Kimoto authored on 2011-06-09
2519
Table name.
updated pod
Yuki Kimoto authored on 2011-06-08
2520

            
updated document
Yuki Kimoto authored on 2011-06-09
2521
=item C<type_rule_off> EXPERIMENTAL
updated pod
Yuki Kimoto authored on 2011-06-08
2522

            
updated document
Yuki Kimoto authored on 2011-06-09
2523
Same as C<execute> method's C<type_rule_off> option.
updated pod
Yuki Kimoto authored on 2011-06-08
2524

            
updated document
Yuki Kimoto authored on 2011-06-09
2525
=item C<where>
2526
    
2527
    # Hash refrence
2528
    where => {author => 'Ken', 'title' => 'Perl'}
2529
    
2530
    # DBIx::Custom::Where object
2531
    where => $dbi->where(
2532
        clause => ['and', 'author = :author', 'title like :title'],
2533
        param  => {author => 'Ken', title => '%Perl%'}
2534
    );
updated pod
Yuki Kimoto authored on 2011-06-08
2535

            
updated document
Yuki Kimoto authored on 2011-06-09
2536
    # String(with where_param option)
2537
    where => 'title like :title',
2538
    where_param => {title => '%Perl%'}
update pod
Yuki Kimoto authored on 2011-03-12
2539

            
updated document
Yuki Kimoto authored on 2011-06-09
2540
Where clause.
2541
    
improved pod
Yuki Kimoto authored on 2011-04-19
2542
=item C<wrap> EXPERIMENTAL
2543

            
2544
Wrap statement. This is array reference.
2545

            
2546
    $dbi->select(wrap => ['select * from (', ') as t where ROWNUM < 10']);
2547

            
2548
This option is for Oracle and SQL Server paging process.
2549

            
update pod
Yuki Kimoto authored on 2011-03-12
2550
=back
cleanup
Yuki Kimoto authored on 2011-03-08
2551

            
cleanup
yuki-kimoto authored on 2010-10-17
2552
=head2 C<update>
removed reconnect method
yuki-kimoto authored on 2010-05-28
2553

            
updated document
Yuki Kimoto authored on 2011-06-09
2554
    $dbi->update({title => 'Perl'}, table  => 'book', where  => {id => 4});
removed reconnect method
yuki-kimoto authored on 2010-05-28
2555

            
updated document
Yuki Kimoto authored on 2011-06-09
2556
Execute update statement.
added experimental update_pa...
Yuki Kimoto authored on 2011-03-08
2557

            
updated document
Yuki Kimoto authored on 2011-06-09
2558
The following opitons are available.
added experimental update_pa...
Yuki Kimoto authored on 2011-03-08
2559

            
update pod
Yuki Kimoto authored on 2011-03-13
2560
=over 4
2561

            
updated document
Yuki Kimoto authored on 2011-06-09
2562
=item C<append>
update pod
Yuki Kimoto authored on 2011-03-13
2563

            
updated document
Yuki Kimoto authored on 2011-06-09
2564
Same as C<select> method's C<append> option.
- insert, insert_at, update,...
Yuki Kimoto authored on 2011-06-08
2565

            
updated document
Yuki Kimoto authored on 2011-06-09
2566
=item C<filter>
- insert, insert_at, update,...
Yuki Kimoto authored on 2011-06-08
2567

            
updated document
Yuki Kimoto authored on 2011-06-09
2568
Same as C<execute> method's C<filter> option.
- insert, insert_at, update,...
Yuki Kimoto authored on 2011-06-08
2569

            
updated document
Yuki Kimoto authored on 2011-06-09
2570
=item C<id>
- insert, insert_at, update,...
Yuki Kimoto authored on 2011-06-08
2571

            
updated document
Yuki Kimoto authored on 2011-06-09
2572
    id => 4
2573
    id => [4, 5]
- insert, insert_at, update,...
Yuki Kimoto authored on 2011-06-08
2574

            
updated document
Yuki Kimoto authored on 2011-06-09
2575
ID corresponding to C<primary_key>.
2576
You can update rows by C<id> and C<primary_key>.
update pod
Yuki Kimoto authored on 2011-03-13
2577

            
DEPRECATED select() param op...
Yuki Kimoto authored on 2011-04-25
2578
    $dbi->update(
updated document
Yuki Kimoto authored on 2011-06-09
2579
        {title => 'Perl', author => 'Ken'}
2580
        parimary_key => ['id1', 'id2'],
2581
        id => [4, 5],
2582
        table => 'book'
where can recieve array refr...
Yuki Kimoto authored on 2011-03-24
2583
    );
update pod
Yuki Kimoto authored on 2011-03-13
2584

            
updated document
Yuki Kimoto authored on 2011-06-09
2585
The above is same as the followin one.
update pod
Yuki Kimoto authored on 2011-03-13
2586

            
updated document
Yuki Kimoto authored on 2011-06-09
2587
    $dbi->update(
2588
        {title => 'Perl', author => 'Ken'}
2589
        where => {id1 => 4, id2 => 5},
2590
        table => 'book'
2591
    );
update pod
Yuki Kimoto authored on 2011-03-13
2592

            
updated document
Yuki Kimoto authored on 2011-06-09
2593
=item C<param>
added experimental update_pa...
Yuki Kimoto authored on 2011-03-08
2594

            
updated document
Yuki Kimoto authored on 2011-06-09
2595
    param => {title => 'Perl'}
add experimental setup_model...
Yuki Kimoto authored on 2011-02-21
2596

            
updated document
Yuki Kimoto authored on 2011-06-09
2597
Update data.
add experimental setup_model...
Yuki Kimoto authored on 2011-02-21
2598

            
updated document
Yuki Kimoto authored on 2011-06-09
2599
If C<update> method's arguments is odd numbers, first argument is received as C<param>.
update pod
Yuki Kimoto authored on 2011-03-13
2600

            
updated document
Yuki Kimoto authored on 2011-06-09
2601
    $dbi->update({title => 'Perl'}, table => 'book', where => {id => 2});
update pod
Yuki Kimoto authored on 2011-03-13
2602

            
updated document
Yuki Kimoto authored on 2011-06-09
2603
=item C<primary_key>
add experimental setup_model...
Yuki Kimoto authored on 2011-02-21
2604

            
updated document
Yuki Kimoto authored on 2011-06-09
2605
    primary_key => 'id'
2606
    primary_key => ['id1', 'id2']
update pod
Yuki Kimoto authored on 2011-03-13
2607

            
updated document
Yuki Kimoto authored on 2011-06-09
2608
Primary key. This is used by C<id> option.
update pod
Yuki Kimoto authored on 2011-03-13
2609

            
updated document
Yuki Kimoto authored on 2011-06-09
2610
=item C<query>
update pod
Yuki Kimoto authored on 2011-03-13
2611

            
updated document
Yuki Kimoto authored on 2011-06-09
2612
Same as C<execute> method's C<query> option.
update pod
Yuki Kimoto authored on 2011-03-13
2613

            
updated document
Yuki Kimoto authored on 2011-06-09
2614
=item C<table>
update pod
Yuki Kimoto authored on 2011-03-13
2615

            
updated document
Yuki Kimoto authored on 2011-06-09
2616
    table => 'book'
update pod
Yuki Kimoto authored on 2011-03-13
2617

            
updated document
Yuki Kimoto authored on 2011-06-09
2618
Table name.
update pod
Yuki Kimoto authored on 2011-03-13
2619

            
updated document
Yuki Kimoto authored on 2011-06-09
2620
=item C<where>
update pod
Yuki Kimoto authored on 2011-03-13
2621

            
updated document
Yuki Kimoto authored on 2011-06-09
2622
Same as C<select> method's C<where> option.
update pod
Yuki Kimoto authored on 2011-03-13
2623

            
added EXPERIMENTAL execute()...
Yuki Kimoto authored on 2011-06-09
2624
=item C<type>
2625

            
2626
Same as C<execute> method's C<type> option.
2627

            
2628
=item C<type_rule_off> EXPERIMENTAL
2629

            
2630
Turn type rule off.
2631

            
updated pod
Yuki Kimoto authored on 2011-06-08
2632
=back
update pod
Yuki Kimoto authored on 2011-03-13
2633

            
updated pod
Yuki Kimoto authored on 2011-06-08
2634
=head2 C<update_all>
update pod
Yuki Kimoto authored on 2011-03-13
2635

            
updated pod
Yuki Kimoto authored on 2011-06-08
2636
    $dbi->update_all(table => 'book', param => {title => 'Perl'});
update pod
Yuki Kimoto authored on 2011-03-13
2637

            
updated document
Yuki Kimoto authored on 2011-06-09
2638
Execute update statement for all rows.
updated pod
Yuki Kimoto authored on 2011-06-08
2639
Options is same as C<update()>.
update pod
Yuki Kimoto authored on 2011-03-13
2640

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
2641
=head2 C<update_param>
update pod
Yuki Kimoto authored on 2011-03-13
2642

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
2643
    my $update_param = $dbi->update_param({title => 'a', age => 2});
update pod
Yuki Kimoto authored on 2011-03-13
2644

            
2645
Create update parameter tag.
2646

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
2647
    set title = :title, author = :author
added EXPERIMENTAL updat_par...
Yuki Kimoto authored on 2011-03-30
2648

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
2649
C<no_set> option is DEPRECATED! use C<assing_param> instead.
add experimental update_at()...
Yuki Kimoto authored on 2011-02-21
2650

            
removed EXPERIMETNAL flag fr...
Yuki Kimoto authored on 2011-03-25
2651
=head2 C<where>
fix tests
Yuki Kimoto authored on 2011-01-18
2652

            
cleanup
Yuki Kimoto authored on 2011-03-09
2653
    my $where = $dbi->where(
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
2654
        clause => ['and', 'title = :title', 'author = :author'],
cleanup
Yuki Kimoto authored on 2011-03-09
2655
        param => {title => 'Perl', author => 'Ken'}
2656
    );
fix tests
Yuki Kimoto authored on 2011-01-18
2657

            
2658
Create a new L<DBIx::Custom::Where> object.
2659

            
- removed DEPRECATED DBIx::C...
Yuki Kimoto authored on 2011-04-11
2660
=head2 C<setup_model>
cleanup
Yuki Kimoto authored on 2011-01-12
2661

            
update pod
Yuki Kimoto authored on 2011-03-13
2662
    $dbi->setup_model;
cleanup
Yuki Kimoto authored on 2011-01-12
2663

            
update pod
Yuki Kimoto authored on 2011-03-13
2664
Setup all model objects.
update pod
Yuki Kimoto authored on 2011-03-13
2665
C<columns> of model object is automatically set, parsing database information.
cleanup
Yuki Kimoto authored on 2011-01-12
2666

            
updated pod
Yuki Kimoto authored on 2011-06-08
2667
=head2 C<update_at()> DEPRECATED!
2668

            
2669
Update statement, using primary key.
2670

            
2671
    $dbi->update_at(
2672
        table => 'book',
2673
        primary_key => 'id',
2674
        where => '5',
2675
        param => {title => 'Perl'}
2676
    );
2677

            
2678
This method is same as C<update()> exept that
2679
C<primary_key> is specified and C<where> is constant value or array refrence.
2680
all option of C<update()> is available.
2681

            
2682
=head2 C<delete_at()> DEPRECATED!
2683

            
2684
Delete statement, using primary key.
2685

            
2686
    $dbi->delete_at(
2687
        table => 'book',
2688
        primary_key => 'id',
2689
        where => '5'
2690
    );
2691

            
2692
This method is same as C<delete()> exept that
2693
C<primary_key> is specified and C<where> is constant value or array refrence.
2694
all option of C<delete()> is available.
2695

            
2696
=head2 C<select_at()> DEPRECATED!
2697

            
2698
Select statement, using primary key.
2699

            
2700
    $dbi->select_at(
2701
        table => 'book',
2702
        primary_key => 'id',
2703
        where => '5'
2704
    );
2705

            
2706
This method is same as C<select()> exept that
2707
C<primary_key> is specified and C<where> is constant value or array refrence.
2708
all option of C<select()> is available.
2709

            
2710
=head2 C<register_tag> DEPRECATED!
2711

            
2712
    $dbi->register_tag(
2713
        update => sub {
2714
            my @columns = @_;
2715
            
2716
            # Update parameters
2717
            my $s = 'set ';
2718
            $s .= "$_ = ?, " for @columns;
2719
            $s =~ s/, $//;
2720
            
2721
            return [$s, \@columns];
2722
        }
2723
    );
2724

            
2725
Register tag, used by C<execute()>.
2726

            
2727
See also L<Tags/Tags> about tag registered by default.
2728

            
2729
Tag parser receive arguments specified in tag.
2730
In the following tag, 'title' and 'author' is parser arguments
2731

            
2732
    {update_param title author} 
2733

            
2734
Tag parser must return array refrence,
2735
first element is the result statement, 
2736
second element is column names corresponding to place holders.
2737

            
2738
In this example, result statement is 
2739

            
2740
    set title = ?, author = ?
2741

            
2742
Column names is
2743

            
2744
    ['title', 'author']
2745

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
2746
=head1 Parameter
2747

            
2748
Parameter start at ':'. This is replaced to place holoder
2749

            
2750
    $dbi->execute(
2751
        "select * from book where title = :title and author = :author"
2752
        param => {title => 'Perl', author => 'Ken'}
2753
    );
2754

            
2755
    "select * from book where title = ? and author = ?"
2756

            
2757
=head1 Tags DEPRECATED!
2758

            
2759
B<Tag> system is DEPRECATED! use parameter system :name instead.
2760
Parameter is simple and readable.
2761

            
2762
Note that you can't use both tag and paramter at same time.
cleanup
Yuki Kimoto authored on 2011-01-25
2763

            
2764
The following tags is available.
2765

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
2766
=head2 C<?> DEPRECATED!
cleanup
Yuki Kimoto authored on 2011-01-25
2767

            
2768
Placeholder tag.
2769

            
2770
    {? NAME}    ->   ?
2771

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
2772
=head2 C<=> DEPRECATED!
cleanup
Yuki Kimoto authored on 2011-01-25
2773

            
2774
Equal tag.
2775

            
2776
    {= NAME}    ->   NAME = ?
2777

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
2778
=head2 C<E<lt>E<gt>> DEPRECATED!
cleanup
Yuki Kimoto authored on 2011-01-25
2779

            
2780
Not equal tag.
2781

            
2782
    {<> NAME}   ->   NAME <> ?
2783

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
2784
=head2 C<E<lt>> DEPRECATED!
cleanup
Yuki Kimoto authored on 2011-01-25
2785

            
2786
Lower than tag
2787

            
2788
    {< NAME}    ->   NAME < ?
2789

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
2790
=head2 C<E<gt>> DEPRECATED!
cleanup
Yuki Kimoto authored on 2011-01-25
2791

            
2792
Greater than tag
2793

            
2794
    {> NAME}    ->   NAME > ?
2795

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
2796
=head2 C<E<gt>=> DEPRECATED!
cleanup
Yuki Kimoto authored on 2011-01-25
2797

            
2798
Greater than or equal tag
2799

            
2800
    {>= NAME}   ->   NAME >= ?
2801

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
2802
=head2 C<E<lt>=> DEPRECATED!
cleanup
Yuki Kimoto authored on 2011-01-25
2803

            
2804
Lower than or equal tag
2805

            
2806
    {<= NAME}   ->   NAME <= ?
2807

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
2808
=head2 C<like> DEPRECATED!
cleanup
Yuki Kimoto authored on 2011-01-25
2809

            
2810
Like tag
2811

            
2812
    {like NAME}   ->   NAME like ?
2813

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
2814
=head2 C<in> DEPRECATED!
cleanup
Yuki Kimoto authored on 2011-01-25
2815

            
2816
In tag.
2817

            
2818
    {in NAME COUNT}   ->   NAME in [?, ?, ..]
2819

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
2820
=head2 C<insert_param> DEPRECATED!
cleanup
Yuki Kimoto authored on 2011-01-25
2821

            
2822
Insert parameter tag.
2823

            
2824
    {insert_param NAME1 NAME2}   ->   (NAME1, NAME2) values (?, ?)
2825

            
- update_param_tag is DEPREC...
Yuki Kimoto authored on 2011-06-07
2826
=head2 C<update_param> DEPRECATED!
cleanup
Yuki Kimoto authored on 2011-01-25
2827

            
2828
Updata parameter tag.
2829

            
2830
    {update_param NAME1 NAME2}   ->   set NAME1 = ?, NAME2 = ?
2831

            
updated pod
Yuki Kimoto authored on 2011-06-08
2832
=head2 C<insert_at()> DEPRECATED!
2833

            
2834
Insert statement, using primary key.
2835

            
2836
    $dbi->insert_at(
2837
        table => 'book',
2838
        primary_key => 'id',
2839
        where => '5',
2840
        param => {title => 'Perl'}
2841
    );
2842

            
2843
This method is same as C<insert()> exept that
2844
C<primary_key> is specified and C<where> is constant value or array refrence.
2845
all option of C<insert()> is available.
2846

            
added environment variable D...
Yuki Kimoto authored on 2011-04-02
2847
=head1 ENVIRONMENT VARIABLE
2848

            
2849
=head2 C<DBIX_CUSTOM_DEBUG>
2850

            
2851
If environment variable C<DBIX_CUSTOM_DEBUG> is set to true,
improved debug message
Yuki Kimoto authored on 2011-05-23
2852
executed SQL and bind values are printed to STDERR.
2853

            
2854
=head2 C<DBIX_CUSTOM_DEBUG_ENCODING>
2855

            
2856
DEBUG output encoding. Default to UTF-8.
added environment variable D...
Yuki Kimoto authored on 2011-04-02
2857

            
DBIx::Custom is now stable
yuki-kimoto authored on 2010-09-07
2858
=head1 STABILITY
2859

            
cleanup
Yuki Kimoto authored on 2011-01-25
2860
L<DBIx::Custom> is stable. APIs keep backword compatible
added select() all_column op...
Yuki Kimoto authored on 2011-03-12
2861
except EXPERIMENTAL one in the feature.
DBIx::Custom is now stable
yuki-kimoto authored on 2010-09-07
2862

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

            
renamed build_query to creat...
yuki-kimoto authored on 2010-08-06
2865
Please tell me bugs if found.
removed DESTROY method(not b...
yuki-kimoto authored on 2010-07-18
2866

            
2867
C<< <kimoto.yuki at gmail.com> >>
2868

            
2869
L<http://github.com/yuki-kimoto/DBIx-Custom>
2870

            
removed reconnect method
yuki-kimoto authored on 2010-05-28
2871
=head1 AUTHOR
2872

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

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

            
cleanup
Yuki Kimoto authored on 2011-01-25
2877
Copyright 2009-2011 Yuki Kimoto, all rights reserved.
packaging one directory
yuki-kimoto authored on 2009-11-16
2878

            
2879
This program is free software; you can redistribute it and/or modify it
2880
under the same terms as Perl itself.
2881

            
2882
=cut