Showing 11 changed files with 207 additions and 741 deletions
+2
Changes
... ...
@@ -1,3 +1,5 @@
1
+0.1690
2
+    - use latest Object::Simple features
1 3
 0.1689
2 4
     - added EXPERIMENTAL available_data_type
3 5
     - simplified type_rule
+1 -1
Makefile.PL
... ...
@@ -13,7 +13,7 @@ WriteMakefile(
13 13
     PL_FILES            => {},
14 14
       PREREQ_PM => {
15 15
         'Test::More' => 0,
16
-        'Object::Simple' => 3.0616,
16
+        'Object::Simple' => 3.0621,
17 17
         'DBD::SQLite' => '1.25',
18 18
         'DBI' => '1.605'
19 19
     },
+4 -9
lib/DBIx/Custom.pm
... ...
@@ -1,12 +1,9 @@
1 1
 package DBIx::Custom;
2 2
 
3
-our $VERSION = '0.1689';
4
-
3
+our $VERSION = '0.1690';
5 4
 use 5.008001;
6
-use strict;
7
-use warnings;
8 5
 
9
-use base 'Object::Simple';
6
+use Object::Simple -base;
10 7
 
11 8
 use Carp 'croak';
12 9
 use DBI;
... ...
@@ -24,8 +21,7 @@ use constant DEBUG_ENCODING => $ENV{DBIX_CUSTOM_DEBUG_ENCODING} || 'UTF-8';
24 21
 
25 22
 our @COMMON_ARGS = qw/table query filter type id primary_key type_rule_off/;
26 23
 
27
-__PACKAGE__->attr(
28
-    [qw/connector dsn password user/],
24
+has [qw/connector dsn password user/],
29 25
     cache => 0,
30 26
     cache_method => sub {
31 27
         sub {
... ...
@@ -60,8 +56,7 @@ __PACKAGE__->attr(
60 56
     result_class  => 'DBIx::Custom::Result',
61 57
     reserved_word_quote => '',
62 58
     safety_character => '\w',
63
-    stash => sub { {} }
64
-);
59
+    stash => sub { {} };
65 60
 
66 61
 our $AUTOLOAD;
67 62
 sub AUTOLOAD {
+184 -686
lib/DBIx/Custom/Guide.pod
... ...
@@ -4,297 +4,108 @@
4 4
 
5 5
 DBIx::Custom::Guide - DBIx::Custom Guide
6 6
 
7
-=head1 GUIDE
8
-
9
-L<DBIx::Custom> is the class to make easy to execute SQL.
10
-This is L<DBI> wrapper class like L<DBIx::Class> or L<DBIx::Simple>.
11
-You can do thing more easy than L<DBIx::Class>, more flexible
12
-than L<DBIx::Simple>.
13
-
14
-L<DBIx::Custom> is not O/R mapper, O/R mapper is usefule, but
15
-you must learn many things. Created SQL is sometimes inefficient,
16
-and in many cases you create raw SQL because
17
-O/R mapper can't make complex SQL
18
-
19
-L<DBIx::Custom> is opposit of O/R mapper.
20
-The main purpose is that we respect SQL
21
-and make easy difficult works if you use only L<DBI>.
22
-If you already learn SQL, it is easy to use L<DBIx::Custom>.
23
-
24
-I explain L<DBIx::Custom> a little in this section.
25
-In L<DBIx::Custom>, you embbed parameter in SQL.
7
+=head1 FEATURES
26 8
 
27
-    select * from book where title = :title and author = :author;
28
-
29
-The part :title is parameter.
30
-This SQL is converted to the one which contains place holder.
31
-
32
-    select * from book where title = ? and author = ?;
33
-
34
-Maybe you ask me that this conversion is meaningful.
35
-On the top of this, usuful features is implemented.
36
-See the following descriptions.
9
+L<DBIx::Custom> is the wrapper class of L<DBI> to execute SQL easily.
10
+This module have the following features.
37 11
 
38 12
 =over 4
39 13
 
40
-=item 1. Specify place holder binding value as hash refernce
41
-
42
-If you use L<DBI>, you must specify place holder binding value
43
-as array.
44
-
45
-    $sth->execute(@bind);
46
-
47
-If you use L<DBIx::Custom>, you specify it as hash reference.
48
-    
49
-    my $param = {title => 'Perl', author => 'Ken'};
50
-    $dbi->execute($sql, $param);
51
-
52
-=item 2. Filtering
53
-
54
-L<DBIx::Custom> provides filtering system.
55
-For example, You think that about date value you want to 
56
-manipulate it as date object like L<Time::Piece> in Perl,
57
-and want to convert it to database DATE format.
58
-and want to do reverse.
59
-
60
-You can use filtering system.
61
-
62
-At first, register filter.
63
-
64
-    $dbi->register_filter(
65
-        tp_to_date => sub {
66
-            ...
67
-        },
68
-        date_to_tp => sub {
69
-            ...
70
-        }
71
-    );
72
-
73
-next, apply this filter to each column.
74
-
75
-    $dbi->apply_filter('book',
76
-        'issue_date' => {out => 'tp_to_date', in => 'date_to_tp'}
77
-    );
78
-
79
-C<out> is perl-to-database way. C<in> is perl-from-database way.
80
-
81
-This filter is automatically enabled in many method.
14
+=item * Execute INSERT, UPDATE, DELETE, SELECT statement easily
82 15
 
83
-    $dbi->insert(table => 'book', param => {issue_date => $tp});
16
+=item * You can specify bind values by hash reference
84 17
 
18
+=item * Filtering by data type. and you can set filter to any column
85 19
 
86
-=item 3. Selective search condition
20
+=item * Creating where clause flexibly
87 21
 
88
-It is difficult to create selective where clause in L<DBI>.
89
-For example, If C<title> and C<author> is specified, we create 
90
-the following SQL.
91
-
92
-    select * from book where title = ? and author = ?;
93
-
94
-If only C<title> is specified, the following one
95
-
96
-    select * from book where title = ?;
97
-
98
-If only C<author> is specified, the following one,
99
-
100
-    select * from book where author = ?;
101
-
102
-This is hard work. Generally we use modules like L<SQL::Abstract>.
103
-L<DBIx::Custom> prepare the way to make it easy.
104
-
105
-    # Where object
106
-    my $where = $dbi->where;
107
-    
108
-    # Search condition
109
-    $where->clause(
110
-        ['and', 'title = :title', 'author = :author']
111
-    );
112
-    
113
-    # Setting to automatically select needed column
114
-    $where->param({title => 'Perl'});
115
-
116
-    # Embbed where clause to SQL
117
-    my $sql = "select * from book $where";
118
-
119
-You can create where clause which has selected search condition.
120
-You can write nesting of where clause and C<or> condition
121
-
122
-=item 4. Methods for insert, update, delete, select
123
-
124
-L<DBIx::Custom> provides methods for insert, update, delete, select
125
-There are C<insert()>, C<update()>, C<delete()>,C<select()>.
126
-
127
-    my $param = {title => 'Perl', author => 'Ken'};
128
-    $dbi->insert(table => 'book', param => $param);
129
-
130
-=item 5. Register method for table.
131
-
132
-You can register method for table.
133
-
134
-    $dbi->table('book')->method(
135
-        list => sub {
136
-            ...
137
-        },
138
-        something => sub {
139
-            ...
140
-        }
141
-    );
142
-
143
-use the mehtod.
144
-
145
-    $dbi->table('book')->list;
146
-
147
-Many O/R mapper must create class for table,
148
-but L<DBIx::Custom> make it easy.
22
+=imte * Support model
149 23
 
150 24
 =back
151 25
 
152
-L<DBIx::Custom> is very useful.
153
-See the following if you are interested in it.
154
-
155
-=head2 1. Connect to database
26
+=head1 GUIDE
156 27
 
157
-Load L<DBIx::Custom>.
28
+=head2 Connect To Database
158 29
 
159 30
     use DBIx::Custom;
160
-
161
-use C<connect()> to connect to database.
162
-Return value is L<DBIx::Custom> object.
163
-
164 31
     my $dbi = DBIx::Custom->connect(
165 32
         dsn => "dbi:mysql:database=bookshop",
166 33
         user => 'ken',
167 34
         password => '!LFKD%$&',
168
-        dbi_options => {mysql_enable_utf8 => 1}
35
+        dbi_option => {mysql_enable_utf8 => 1}
169 36
     );
170 37
 
171
-C<dsn> must be one corresponding to the database system.
172
-The following ones are data source example.
173
-
174
-B<MySQL>
175
-
176
-    "dbi:mysql:database=$database"
177
-    "dbi:mysql:database=$database;host=$hostname;port=$port"
178
-
179
-B<SQLite>
180
-
181
-    "dbi:SQLite:dbname=$database"
182
-    "dbi:SQLite:dbname=:memory:"
183
-
184
-B<PostgreSQL>
185
-
186
-    "dbi:Pg:dbname=$dbname"
38
+You can connect to database by C<connect> method.
39
+C<dsn> is data source name, C<user> is user name, C<password> is password.
187 40
 
188
-B<Oracle>
41
+C<dbi_option> is L<DBI> option.
42
+By default, the following option is set.
43
+Fatal error throw exeption and commit mode is auto commit.
189 44
 
190
-    "dbi:Oracle:$dbname"
191
-    "dbi:Oracle:host=$host;sid=$sid"
192
-
193
-B<ODBC(Microsoft Access)>
194
-
195
-    "dbi:ODBC:driver=Microsoft Access Driver (*.mdb);dbq=hoge.mdb"
196
-
197
-B<ODBC(SQL Server)>
198
-
199
-   "dbi:ODBC:driver={SQL Server};Server=(local);database=test;Trusted_Connection=yes;AutoTranslate=No;"
200
-
201
-If authentication is needed, you can specify C<user> and C<password>
202
-
203
-L<DBIx::Custom> is wrapper class of L<DBI>.
204
-You can use all methods of L<DBI> from L<DBIx::Custom> object.
205
-
206
-    $dbi->do(...);
207
-    $dbi->begin_work;
208
-
209
-use C<dhb()> to get database handle of L<DBI>
210
-
211
-    my $dbh = $dbi->dbh;
212
-
213
-By default, the following ones is set to database handle attributes.
214
-
215
-    RaiseError  ->  1
216
-    PrintError  ->  0
217
-    AutoCommit  ->  1
218
-
219
-If fatal error occuer, program terminate.
220
-If SQL is executed, commit is executed automatically.
221
-
222
-=head2 2. Methods for insert, update, delete, or insert
223
-
224
-There are following methods.
225
-
226
-=head3 C<insert()>
227
-
228
-use C<insert()> to insert row into database
229
-
230
-    $dbi->insert(table  => 'book',
231
-                 param  => {title => 'Perl', author => 'Ken'});
45
+    {
46
+        RaiseError  =>  1
47
+        PrintError  =>  0
48
+        AutoCommit  =>  1
49
+    }
232 50
 
233
-C<table> is table name, C<param> is insert data.
51
+=head2 Execute Query
234 52
 
235
-Following SQL is executed.
53
+=head3 Insert Statement : C<insert>
236 54
 
237
-    insert into (title, author) values (?, ?);
55
+If you want to execute insert statement, use C<insert> method.
238 56
 
239
-=head3 C<update()>
57
+    $dbi->insert({title => 'Perl', author => 'Ken'}, table  => 'book');
240 58
 
241
-use C<update()> to update row in database.
59
+First argument is insert row data, C<table>  is table name.
242 60
 
243
-    $dbi->update(table  => 'book', 
244
-                 param  => {title => 'Perl', author => 'Ken'}, 
245
-                 where  => {id => 5});
61
+=head3 Update Statement : C<update>
246 62
 
247
-C<table> is table name, C<param> is update data, C<where> is condition.
63
+If you want to execute update stateimuse, use C<update> method.
248 64
 
249
-Following SQL is executed.
65
+    $dbi->update(
66
+        {title => 'Perl', author => 'Ken'},
67
+        table  => 'book', 
68
+        where  => {id => 5}
69
+    );
250 70
 
251
-    update book set title = ?, author = ?;
71
+First argument is update row data, C<table> is table name, C<where> is condition.
252 72
 
253
-You can't execute C<update()> without C<where> for safety.
254
-use C<update_all()> if you want to update all rows.
73
+Note that you can't execute C<update> method without C<where>.
74
+If you want to update all rows, use update_all.
255 75
 
256
-    $dbi->update_all(table  => 'book', 
257
-                     param  => {title => 'Perl', author => 'Ken'});
76
+    $dbi->update_all({title => 'Perl', author => 'Ken'}, table  => 'book');
258 77
 
259
-=head3 C<delete()>
78
+=head3 Delete Statement : C<delete>
260 79
 
261
-use C<delete()> to delete rows from database.
80
+If you want to execute delete statement, use C<delete> method.
262 81
 
263
-    $dbi->delete(table  => 'book',
264
-                 where  => {author => 'Ken'});
82
+    $dbi->delete(table  => 'book', where  => {author => 'Ken'});
265 83
 
266 84
 C<table> is table name, C<where> is condition.
267 85
 
268
-Following SQL is executed.
269
-
270
-    delete from book where id = ?;
271
-
272
-You can't execute C<delete()> without C<where> for safety.
273
-use C<delete_all()> if you want to delete all rows.
86
+Note that you can't execute C<delete> method without C<where>.
87
+If you want to delete all rows, use C<delete_all> method.
274 88
 
275 89
     $dbi->delete_all(table  => 'book');
276 90
 
277
-=head3 C<select()>
91
+=head3 Select Statement : C<select>
278 92
 
279
-use C<select()> to select rows from database
93
+If you want to execute select statement, use C<select> method.
280 94
 
281 95
     my $result = $dbi->select(table => 'book');
282 96
 
283
-Following SQL is executed.
284
-
285
-    select * from book;
286
-
287 97
 Return value is L<DBIx::Custom::Result> object.
288
-use C<fetch()> to fetch row.
98
+You can fetch rows by C<fetch> method.
289 99
 
290 100
     while (my $row = $result->fetch) {
291 101
         my $title  = $row->[0];
292 102
         my $author = $row->[1];
293 103
     }
294 104
 
295
-See L<3. Fetch row/"3. Fetch row"> about L<DBIx::Custom::Result>.
105
+See also L<Fetch row/"Fetch row"> about L<DBIx::Custom::Result>.
296 106
 
297
-Continue more examples.
107
+You can specify column names by C<column> option
108
+and condition by C<where> option.
298 109
 
299 110
     my $result = $dbi->select(
300 111
         table  => 'book',
... ...
@@ -302,67 +113,19 @@ Continue more examples.
302 113
         where  => {author => 'Ken'}
303 114
     );
304 115
 
305
-C<column> is column names, C<where> is condition.
306
-
307
-Following SQL is executed.
308
-
309
-    select author, title from book where author = ?;
310
-
311
-Next example.
116
+You can specify join clause by C<join> option.
312 117
 
313 118
     my $result = $dbi->select(
314 119
         table  => 'book',
315
-        column => ['company.name as company__name']
120
+        column => ['company.name as company_name']
316 121
         where  => {'book.name' => 'Perl'},
317 122
         join   => ['left outer join company on book.company_id = company.id]
318 123
     );
319 124
 
320
-You can join table by C<join>.
321
-
322
-Following SQL is executed.
323
-
324
-    select company.name as company__name
325
-    from book
326
-      left outer join company on book.company_id = company.id
327
-    where book.name = ?;
328
-
329
-company_if of book and id of company is left outer joined.
330
-
331
-Note that only when C<where> or C<column> contain table name,
332
-C<join> is joined.
333
-if you specify the following option, C<join> is not joined
334
-because C<join> is not needed.
335
-
336
-    my $result = $dbi->select(
337
-        table  => 'book',
338
-        where  => {'name' => 'Perl'},
339
-        join   => ['left outer join company on book.company_id = company.id]
340
-    );
341
-
342
-Following SQL is executeed.
343
-
344
-    select * from book where book.name = ?;
345
-
346
-You can specify column names easily using C<mycolumn()> and C<column()>.
347
-
348
-    my $result = $dbi->select(
349
-        table  => 'book',
350
-        column => [
351
-            $dbi->mycolumn('book' => ['name']),
352
-            $dbi->column('company' => ['id', 'name'])
353
-        ],
354
-        join   => ['left outer join company on book.company_id = company.id]
355
-    );
356
-
357
-The following SQL is executed.
358
-
359
-    select book.name as name,
360
-      company.id as comapny__id,
361
-      company.name as company__name
362
-    from book
363
-      left outer join company on book.company_id = company.id
125
+Note that join clause is joined only when C<where> or C<column> option contains table name,
126
+such as book.name.
364 127
 
365
-Next example.
128
+You can append statement to the end of whole statement by C<append> option.
366 129
 
367 130
     my $result = $dbi->select(
368 131
         table  => 'book',
... ...
@@ -370,334 +133,104 @@ Next example.
370 133
         append => 'for update',
371 134
     );
372 135
 
373
-C<append> is string appending to end of SQL.
374
-
375
-Following SQL is executed.
376
-
377
-    select * book where author = ? for update;
136
+=head3 C<execute>
378 137
 
379
-C<appned> is also used at C<insert()>, C<update()>, C<update_all()>
380
-C<delete()>, C<delete_all()>, and C<select()>.
381
-
382
-=head3 C<execute()>
383
-
384
-use C<execute()> to execute SQL
138
+If you want to execute SQL, use C<execute> method.
385 139
 
386 140
     $dbi->execute("select * from book;");
387 141
 
388
-Process parameter and execute SQL.
142
+You can specify parameters.
389 143
 
390 144
     $dbi->execute(
391 145
         "select * from book title = :title and author = :author;"
392
-        param => {title => 'Perl', author => 'Ken'}
146
+        {title => 'Perl', author => 'Ken'}
393 147
     );
394 148
 
395
-Following SQL is executed.
149
+:title and :author is parameters, which is replaced to placeholers.
396 150
 
397 151
     select * from book title = ? and author = ?;
398 152
 
399
-Values of title and author is embbdeded into placeholder.
153
+See also L<Parameter/"Parameter"> about parameter.
400 154
 
401
-See L<5. Parameter/"5. Parameter"> about parameter.
155
+=head3 C<dbh>
402 156
 
403
-You don't have to wirte last semicolon in C<execute()>. 
157
+    my $dbh = $dbi->dbh;
404 158
 
405
-    $dbi->execute('select * from book');
159
+Get get database handle object of L<DBI>.
406 160
 
407
-=head2 3. Fetch row
161
+=head3 C<DBI> methods
408 162
 
409
-Return value of C<select()> is L<DBIx::Custom::Result> object.
410
-There are many methods to fetch row.
163
+    $dbi->do(...);
164
+    $dbi->begin_work;
411 165
 
412
-=head3 Fetch a row (array) : C<fetch()>
166
+You can call all methods of L<DBI> from L<DBIx::Custom> object.
413 167
 
414
-use C<fetch()> to fetch a row and assign it into array reference.
168
+=head2 Fetch Rows
169
+
170
+C<select> method return value is L<DBIx::Custom::Result> object.
171
+You can fetch a row or rows by various methods.
172
+
173
+=head3 Fetch a row (array) : C<fetch>
415 174
 
416 175
     my $row = $result->fetch;
417 176
 
418
-You can get all rows.
177
+C<fetch> method fetch a row and put it into array reference.
178
+You can continue to fetch 
419 179
 
420 180
     while (my $row = $result->fetch) {
421 181
         my $title  = $row->[0];
422 182
         my $author = $row->[1];
423 183
     }
424 184
 
425
-=head3 Fetch only first row (array) : C<fetch_first()>
426
-
427
-use C<fetch_first()> to fetch only first row.
185
+=head3 Fetch only first row (array) : C<fetch_first>
428 186
 
429 187
     my $row = $result->fetch_first;
430 188
 
431
-You can't fetch rest rows
432
-because statement handle C<finish()> is executed.
433
-
434
-=head3 Fetch rows (array) : C<fetch_multi()>
435
-
436
-use C<fetch_multi()> to fetch rows and assign it into
437
-array reference which has array references as element.
438
-
439
-    while (my $rows = $result->fetch_multi(2)) {
440
-        my $title0   = $rows->[0][0];
441
-        my $author0  = $rows->[0][1];
442
-        
443
-        my $title1   = $rows->[1][0];
444
-        my $author1  = $rows->[1][1];
445
-    }
446
-
447
-Specify row count as argument.
448
-
449
-You can get the following data.
450
-
451
-    [
452
-        ['Perl', 'Ken'],
453
-        ['Ruby', 'Mark']
454
-    ]
189
+C<fetch_first> fetch a only first row and finish statment handle,
190
+and put it into array refrence.
455 191
 
456 192
 =head3 Fetch all rows (array) : C<fetch_all>
457 193
 
458
-use C<fetch_all()> to fetch all rows and assign it into
459
-array reference which has array reference as element.
460
-
461 194
     my $rows = $result->fetch_all;
462 195
 
463
-You can get the following data.
196
+C<fetch_all> fetch all rows and put them into array of array reference.
464 197
 
465
-    [
466
-        ['Perl', 'Ken'],
467
-        ['Ruby', 'Mark']
468
-    ]
198
+=head3 Fetch a row (hash) : C<fetch_hash>
469 199
 
470
-=head3 Fetch a row (hash) : C<fetch_hash()>
200
+    my $row = $result->fetch_hash;
471 201
 
472
-use C<fetch_hash()> to fetch a row and assign it into hash reference.
202
+C<fetch_hash> fetch a row and put it into hash reference.
203
+You can fetch a row while row exists.
473 204
 
474 205
     while (my $row = $result->fetch_hash) {
475 206
         my $title  = $row->{title};
476 207
         my $author = $row->{author};
477 208
     }
478 209
 
479
-=head3 Fetch only first row (hash) : C<fetch_hash_first()>
480
-
481
-use C<fetch_hash_first()> to fetch only first row
482
-and assign it into hash reference.
210
+=head3 Fetch only a first row (hash) : C<fetch_hash_first>
483 211
 
484 212
     my $row = $result->fetch_hash_first;
485 213
 
486
-You can't fetch rest rows
487
-because statement handle C<finish()> is executed.
488
-
489
-=head3 Fetch rows (hash) : C<fetch_hash_multi()>
490
-
491
-use C<fetch_hash_multi()> to fetch rows and
492
-assign it into array reference which has hash references as element.
493
-
494
-    while (my $rows = $result->fetch_hash_multi(5)) {
495
-        my $title0   = $rows->[0]{title};
496
-        my $author0  = $rows->[0]{author};
497
-        my $title1  = $rows->[1]{title};
498
-        my $author1 = $rows->[1]{author};
499
-    }
500
-
501
-Specify row count as argument.
502
-
503
-You can get the following data.
214
+C<fetch_hash_first> fetch only a first row and finish statement handle,
215
+and put them into hash refrence.
504 216
 
505
-    [
506
-        {title => 'Perl', author => 'Ken'},
507
-        {title => 'Ruby', author => 'Mark'}
508
-    ]
217
+C<one> is C<fetch_hash_first> synonym to save word typing.
509 218
 
510
-=head3 Fetch all rows (hash) : C<fetch_hash_all()>
219
+    my $row = $result->one;
511 220
 
512
-use C<fetch_hash_all()> to fetch all rows and
513
-assign it into array reference which has hash 
514
-references as element.
221
+=head3 Fetch all rows (hash) : C<fetch_hash_all>
515 222
 
516 223
     my $rows = $result->fetch_hash_all;
517 224
 
518
-You can get the following data.
519
-
520
-    [
521
-        {title => 'Perl', author => 'Ken'},
522
-        {title => 'Ruby', author => 'Mark'}
523
-    ]
225
+C<fetch_hash_all> fetch all rows and put them into array of hash reference.
524 226
 
525
-=head3 Statement handle : C<sth()>
526
-
527
-use <sth()> to get statement handle.
227
+=head3 Statement Handle : C<sth>
528 228
 
529 229
     my $sth = $result->sth;
530 230
 
531
-=head2 4. Filtering
532
-
533
-L<DBIx::Custom> provide value filtering. 
534
-For example, You maybe want to convert L<Time::Piece> object to
535
-database date format when register data into database.
536
-and convert database date fromat to L<Time::Piece> object
537
-when get data from database.
538
-
539
-=head3 Register filter : C<register_filter()>
540
-
541
-use C<register_filter()> to register filter.
542
-
543
-    $dbi->register_filter(
544
-        # Time::Piece object to DATE format
545
-        tp_to_date => sub {
546
-            my $date = shift;
547
-
548
-            return '0000-00-00' unless $tp;
549
-            return $tp->strftime('%Y-%m-%d');
550
-        },
551
-        
552
-        # DATE to Time::Piece object
553
-        date_to_tp => sub {
554
-            my $date = shift;
555
-
556
-            return if $date eq '0000-00-00';
557
-            return Time::Piece->strptime($date, '%Y-%m-%d');
558
-        },
559
-    );
560
-
561
-Registered filter is used by C<apply_filter()> or etc.
562
-
563
-=head3 Apply filter : C<apply_filter()>
564
-
565
-use C<apply_filter()> to apply registered filter.
566
-
567
-    $dbi->apply_filter('book',
568
-        issue_date => {out => 'tp_to_date', in => 'date_to_tp'},
569
-        first_issue_date => {out => 'tp_to_date', in => 'date_to_tp'}
570
-    );
571
-
572
-First argument is table name. Arguments after first argument are pairs of column
573
-name and fitering rule. C<out> of filtering rule is filter which is used when data
574
-is send to database. C<in> of filtering rule is filter which is used when data
575
-is got from database. 
576
-
577
-You can specify code reference as filter.
578
-
579
-    issue_date => {out => sub { ... }, in => sub { ... }}
580
-
581
-Applied filter become effective at insert()>, C<update()>, C<update_all()>,
582
-C<delete()>, C<delete_all()>, C<select()>.
583
-
584
-    my $tp = Time::Piece->strptime('2010/10/14', '%Y/%m/%d');
585
-    my $result = $dbi->select(table => 'book', where => {issue_date => $tp});
586
-
587
-When data is send to database, L<Time::Piece> object is converted
588
-to database date format "2010-10-14"
231
+If you want to get statment handle, use <sth> method.
589 232
 
590
-When data is fetched, database date format is
591
-converted to L<Time::Piece> object.
592
-
593
-    my $row = $resutl->fetch_hash_first;
594
-    my $tp = $row->{issue_date};
595
-
596
-You can also use column name which contains table name.
597
-
598
-    $dbi->select(
599
-        table => 'book',
600
-        where => {'book.issue_date' => $tp}
601
-    );
602
-
603
-In fetching, Filter is effective if you use "TABLE__COLUMN" as column name.
604
-
605
-    my $result = $dbi->execute(
606
-       "select issue_date as book__issue_date from book");
607
-
608
-You can apply C<end> filter execute after C<in> filter.
609
-
610
-    $dbi->apply_filter('book',
611
-        issue_date => {out => 'tp_to_date', in => 'date_to_tp',
612
-                       end => 'tp_to_displaydate'},
613
-    );
614
-
615
-=head3 Individual filter C<filter>
616
-
617
-You can apply individual filter .
618
-This filter overwrite the filter by C<apply_filter()>
619
-
620
-use C<filter> option to apply individual filter
621
-when data is send to database.
622
-This option is used at C<insert()>, C<update()>,
623
-C<update_all()>, C<delete()>, C<delete_all()>, C<select()>,
624
-C<execute()>.
625
-
626
-C<insert()> example:
627
-
628
-    $dbi->insert(
629
-        table => 'book',
630
-        param => {issue_date => $tp, first_issue_date => $tp},
631
-        filter => {issue_date => 'tp_to_date', first_issue_date => 'tp_to_date'}
632
-    );
633
-
634
-C<execute()> example:
635
-
636
-my $sql = <<"EOS";
637
-select YEAR(issue_date) as issue_year
638
-from book
639
-where YEAR(issue_date) = {? issue_year}
640
-EOS
641
-   
642
-    my $result = $dbi->execute(
643
-        $sql,
644
-        param => {issue_year => '2010'},
645
-        filter => {issue_year => 'tp_to_year'}
646
-    );
647
-
648
-You can also apply indivisual filter when you fetch row.
649
-use C<DBIx::Custom::Result>'s C<filter()>.
650
-
651
-    $result->filter(issue_year => 'year_to_tp');
652
-
653
-You can remove filter by C<remove_filter()>
654
-
655
-    $result->remove_filter;
656
-
657
-=head3 End filtering : C<end_filter()>
658
-
659
-You can add filter at end.
660
-It is useful to create last output.
661
-use C<end_filter()> to add end filter.
662
-
663
-    $result->end_filter(issue_date => sub {
664
-        my $tp = shift;
665
-        
666
-        return '' unless $tp;
667
-        return $tp->strftime('%Y/%m/%d %h:%m:%s (%a)');
668
-    });
669
-
670
-In this example, L<Time::Piece> object is converted to readable format.
671
-
672
-You can remove end_filter by C<end_filter>
673
-
674
-    $result->remove_end_filter;
675
-
676
-=head3 Automate applying filter : C<each_column()>
677
-
678
-It is useful to apply filter automatically at date type columns.
679
-You can use C<each_column()> to process all column infos.
680
-
681
-    $dbi->each_column(
682
-        sub {
683
-            my ($self, $table, $column, $info) = @_;
684
-            
685
-            my $type = $info->{TYPE_NAME};
686
-            
687
-            my $filter = $type eq 'DATE'     ? {out => 'tp_to_date', in => 'date_to_tp'}
688
-                       : $type eq 'DATETIME' ? {out => 'tp_to_datetime', in => 'datetime_to_tp'}
689
-                                             : undef;
690
-            
691
-            $self->apply_filter($table, $column, $filter)
692
-              if $filter;
693
-        }
694
-    );
695
-
696
-C<each_column()> receive callback.
697
-callback arguments are L<DBIx::Custom> object, table name, column name, column information.
698
-Filter is applied automatically by column type.
699
-
700
-=head2 5. Parameter
233
+=head2 Parameter
701 234
 
702 235
 =head3 Basic of Parameter
703 236
 
... ...
@@ -711,20 +244,20 @@ Parameter is converted to place holder.
711 244
 
712 245
     select * from book where title = ? and author like ?;
713 246
 
714
-use C<execute()> to execute SQL.
247
+use C<execute> to execute SQL.
715 248
 
716 249
     my $sql = "select * from book where title = :title and author like :author;"
717
-    $dbi->execute($sql, param => {title => 'Perl', author => '%Ken%'});
250
+    $dbi->execute($sql, {title => 'Perl', author => '%Ken%'});
718 251
 
719 252
 You can specify values embedded into place holder as hash reference using
720 253
 C<param> option.
721 254
 
722
-You can specify C<filter()> at C<execute()>.
255
+You can specify C<filter> at C<execute>.
723 256
 
724
-    $dbi->execute($sql, param => {title => 'Perl', author => '%Ken%'}
257
+    $dbi->execute($sql, {title => 'Perl', author => '%Ken%'}
725 258
                   filter => {title => 'to_something');
726 259
 
727
-Note that at C<execute()> the filter applied by C<apply_filter()>
260
+Note that at C<execute> the filter applied by C<apply_filter>
728 261
 don't has effective to columns.
729 262
 You have to use C<table> option
730 263
 
... ...
@@ -737,13 +270,13 @@ Let's think two date comparison.
737 270
 
738 271
     my $sql = "select * from table where date > :date and date < :date;";
739 272
 
740
-In this case, You specify paramter values as array reference.
273
+In this case, You specify parameter values as array reference.
741 274
 
742
-    my $dbi->execute($sql, param => {date => ['2010-10-01', '2012-02-10']});
275
+    my $dbi->execute($sql, {date => ['2010-10-01', '2012-02-10']});
743 276
 
744
-=head2 6. Dinamically create where clause
277
+=head2 Create where clause
745 278
 
746
-=head3 Dinamically create where clause : where()
279
+=head3 Dinamically create where clause : where
747 280
 
748 281
 You want to search multiple conditions in many times.
749 282
 Let's think the following three cases.
... ...
@@ -761,11 +294,11 @@ Case3: Search C<title> and C<author>
761 294
     where title = :title and author = :author
762 295
 
763 296
 L<DBIx::Custom> support dinamic where clause creating.
764
-At first, create L<DBIx::Custom::Where> object by C<where()>.
297
+At first, create L<DBIx::Custom::Where> object by C<where>.
765 298
 
766 299
     my $where = $dbi->where;
767 300
 
768
-Set clause by C<clause()>
301
+Set clause by C<clause>
769 302
 
770 303
     $where->clause(
771 304
         ['and', 'title = :title, 'author = :author']
... ...
@@ -793,7 +326,7 @@ After setting C<clause>, set C<param>.
793 326
 
794 327
 In this example, parameter contains only title.
795 328
 
796
-If you execute C<string_to()>, you can get where clause
329
+If you execute C<string_to>, you can get where clause
797 330
 which contain only parameter name.
798 331
 
799 332
     my $where_clause = $where->to_string;
... ...
@@ -830,7 +363,7 @@ If starting date isn't exists, create the following parameter.
830 363
 
831 364
     my $p = {date => [$dbi->not_exists, '2011-11-21']};
832 365
 
833
-You can get DBIx::Custom::NotExists object by C<not_exists()>
366
+You can get DBIx::Custom::NotExists object by C<not_exists>
834 367
 This mean correnspondinf value isn't exists.
835 368
 
836 369
 If ending date isn't exists, create the following parameter.
... ...
@@ -849,18 +382,18 @@ This logic is a little difficut. See the following ones.
849 382
     push @date, $param->{end_date} if exists $param->{end_date};
850 383
     my $p = {date => \@date};
851 384
 
852
-=head3 With C<select()>
385
+=head3 With C<select>
853 386
 
854
-You can pass L<DBIx::Custom::Where> object to C<where> of C<select()>.
387
+You can pass L<DBIx::Custom::Where> object to C<where> of C<select>.
855 388
     
856 389
     my $where = $dbi->where;
857 390
     $where->clause(['and', 'title = :title', 'author = :author']);
858 391
     $where->param({title => 'Perl'});
859 392
     my $result = $dbi->select(table => 'book', where => $where);
860 393
 
861
-You can also pass it to C<where> of C<update()>AC<delete()>
394
+You can also pass it to C<where> of C<update>AC<delete>
862 395
 
863
-=head3 With C<execute()>
396
+=head3 With C<execute>
864 397
 
865 398
 L<DBIx::Custom::Where> object is embedded into SQL.
866 399
 
... ...
@@ -873,7 +406,53 @@ L<DBIx::Custom::Where> object is embedded into SQL.
873 406
     $where
874 407
     EOS
875 408
 
876
-    $dbi->execute($sql, param => $param, table => 'book');
409
+    $dbi->execute($sql, $param, table => 'book');
410
+
411
+=head2 Filtering
412
+
413
+=head3 Register filter : C<register_filter>
414
+
415
+If you want to register filter, use C<register_filter>.
416
+
417
+    $dbi->register_filter(
418
+        # Time::Piece object to DATE format
419
+        tp_to_date => sub {
420
+            my $date = shift;
421
+            return $tp->strftime('%Y-%m-%d');
422
+        },
423
+        
424
+        # DATE to Time::Piece object
425
+        date_to_tp => sub {
426
+            my $date = shift;
427
+            return Time::Piece->strptime($date, '%Y-%m-%d');
428
+        },
429
+    );
430
+
431
+=head3 Filter before sending data into database : C<filter> option
432
+
433
+If you filter sending data, use C<filter> option.
434
+
435
+    $dbi->execute(
436
+        'insert into book (date) values (:date)',
437
+        {date => $tp},
438
+        filter => {date => 'tp_to_date'}
439
+    );
440
+
441
+You can use C<filter> option in C<insert>, C<update>, C<delete>, C<select> method.
442
+
443
+    $dbi->insert(
444
+        {date => $tp},
445
+        table => 'book',
446
+        filter => {date => 'tp_to_date'}
447
+    );
448
+
449
+=head3 Filter after fetching data from database.
450
+
451
+If you filter fetch data, use L<DBIx::Custom::Result>'s C<filter> method.
452
+
453
+    my $result = $dbi->select(column => 'date', table => 'book');
454
+    $result->filter(date => 'date_to_tp');
455
+    my $row = $result->one;
877 456
 
878 457
 =head2 7. Model
879 458
 
... ...
@@ -883,18 +462,18 @@ you can define model extending L<DBIx::Custom::Model>
883 462
 to improve source code view.
884 463
 
885 464
 At first, you create basic model class extending <DBIx::Custom::Model>.
465
+Each L<DBIx::Custom> class inherit L<Object::Simple>.
466
+so you can inherit the following way.
886 467
 
887 468
     package MyModel;
888
-    
889
-    use base 'DBIx::Custom::Model';
469
+    use DBIx::Custom::Model -base;
890 470
 
891 471
 Next, you create each model classes.
892 472
 
893 473
 MyModel::book
894 474
 
895 475
     package MyModel::book;
896
-    
897
-    use base 'MyModel';
476
+    use MyModel -base;
898 477
     
899 478
     sub insert { ... }
900 479
     sub list { ... }
... ...
@@ -902,8 +481,7 @@ MyModel::book
902 481
 MyModel::company
903 482
 
904 483
     package MyModel::company;
905
-    
906
-    use base 'MyModel';
484
+    use MyModel -base;
907 485
     
908 486
     sub insert { ... }
909 487
     sub list { ... }
... ...
@@ -914,7 +492,7 @@ The follwoing modules location is needed.
914 492
     MyModel / book.pm
915 493
             / company.pm
916 494
 
917
-You can include these models by C<include_model()>
495
+You can include these models by C<include_model>
918 496
 
919 497
     $dbi->include_model('MyModel');
920 498
 
... ...
@@ -925,15 +503,15 @@ You can use model like this.
925 503
     my $result = $dbi->model('book')->list;
926 504
 
927 505
 In mode, You can use such as methods,
928
-C<insert()>, C<update()>, C<update_all()>,
929
-C<delete()>, C<delete_all()>, C<select()>
506
+C<insert>, C<update>, C<update_all>,
507
+C<delete>, C<delete_all>, C<select>
930 508
 without C<table> option.
931 509
 
932
-    $dbi->model('book')->insert(param => $param);
510
+    $dbi->model('book')->insert($param);
933 511
 
934 512
 Model is L<DBIx::Custom::Model>.
935 513
 
936
-If you need table nameAyou can get it by C<table()>.
514
+If you need table nameAyou can get it by C<table>.
937 515
 
938 516
     my $table = $model->table;
939 517
 
... ...
@@ -950,7 +528,7 @@ You can also call all methods of L<DBIx::Custom> and L<DBI>.
950 528
     $model->begin_work;
951 529
     $model->commit;
952 530
 
953
-If you want to get all models, you can get them by keys of C<models()>.
531
+If you want to get all models, you can get them by keys of C<models>.
954 532
 
955 533
     my @models = keys %{$self->models};
956 534
 
... ...
@@ -958,24 +536,24 @@ You can set primary key to model.
958 536
 
959 537
    $model->primary_key(['id', 'number_id']);
960 538
 
961
-Primary key is used by C<insert_at>, C<update_at()>, C<delete_at()>,
962
-C<select_at()>.
539
+Primary key is used by C<insert>, C<update>, C<delete>,
540
+and C<select> methods.
963 541
 
964
-by C<filter> you can define filters applied by C<apply_filter()>
542
+by C<filter> you can define filters applied by C<apply_filter>
965 543
 
966 544
     $model->filter({
967 545
         title  => {out => ..., in => ..., end => ...},
968 546
         author => {out => ..., in => ..., end => ...}
969 547
     });
970 548
 
971
-This filters is applied when C<include_model()> is called.
549
+This filters is applied when C<include_model> is called.
972 550
 
973 551
 You can set column names
974 552
 
975 553
     $model->columns(['id', 'number_id']);
976 554
 
977
-Column names is automarically set by C<setup_model()>.
978
-This method is needed to be call after C<include_model()>.
555
+Column names is automarically set by C<setup_model>.
556
+This method is needed to be call after C<include_model>.
979 557
 
980 558
     $dbi->setup_model;
981 559
 
... ...
@@ -983,7 +561,7 @@ You can set C<join>
983 561
 
984 562
     $model->join(['left outer join company on book.company_id = company.id']);
985 563
 
986
-This C<join> is used by C<select()>, C<select_at()>
564
+C<join> is used by C<select> method.
987 565
 
988 566
 =head2 Class name, Model name, Table name
989 567
 
... ...
@@ -1002,7 +580,7 @@ You can change model name.
1002 580
     CLASS        MODEL         TABLE
1003 581
     book         book_model    (MODEL) -> book_model
1004 582
 
1005
-Model name is the name used by L<model()> of L<DBIx::Custom>.
583
+Model name is the name used by L<model> of L<DBIx::Custom>.
1006 584
 
1007 585
     $dbi->model('book_model');
1008 586
 
... ...
@@ -1019,9 +597,9 @@ Table name is the table really accessed.
1019 597
 
1020 598
     $dbi->model('book')->insert(...); # access to "book_table"
1021 599
 
1022
-=head2 Create column clause automatically : mycolumn(), column()
600
+=head2 Create column clause automatically : mycolumn, column
1023 601
 
1024
-To create column clause automatically, use C<mycolumn()>.
602
+To create column clause automatically, use C<mycolumn>.
1025 603
 Valude of C<table> and C<columns> is used.
1026 604
 
1027 605
     my $column_clause = $model->mycolumn;
... ...
@@ -1042,9 +620,9 @@ the following clause is created.
1042 620
 
1043 621
     company.id as company__id, company.name as company__name
1044 622
 
1045
-=head2 Create column clause automatically : column_clause()
623
+=head2 Create column clause automatically : column_clause
1046 624
 
1047
-To create column clause automatically, use C<column_clause()>.
625
+To create column clause automatically, use C<column_clause>.
1048 626
 Valude of C<table> and C<columns> is used.
1049 627
 
1050 628
     my $column_clause = $model->column_clause;
... ...
@@ -1069,8 +647,7 @@ If you add some column, use C<add> option.
1069 647
 Model examples
1070 648
 
1071 649
     package MyDBI;
1072
-    
1073
-    use base 'DBIx::Custom';
650
+    use DBIx::Custom -base;
1074 651
     
1075 652
     sub connect {
1076 653
         my $self = shift->SUPER::connect(@_);
... ...
@@ -1084,98 +661,19 @@ Model examples
1084 661
     }
1085 662
     
1086 663
     package MyModel::book;
1087
-    use base 'DBIx::Custom::Model';
664
+    use DBIx::Custom::Model -base;
1088 665
     
1089
-    __PACKAGE__->attr('primary_key' => sub { ['id'] };
666
+    has primary_key => sub { ['id'] };
1090 667
     
1091 668
     sub insert { ... }
1092 669
     sub list { ... }
1093 670
     
1094 671
     package MyModel::company;
1095
-    use base 'DBIx::Custom::Model';
672
+    use DBIx::Custom::Model -base;
1096 673
 
1097
-    __PACKAGE__->attr('primary_key' => sub { ['id'] };
674
+    has primary_key => sub { ['id'] };
1098 675
     
1099 676
     sub insert { ... }
1100 677
     sub list { ... }
1101 678
 
1102
-=head2 8. Improve performance
1103
-
1104
-=head3 Create query
1105
-
1106
-If you can't get performance, create query by C<query> option.
1107
-For example, many insert is needed.
1108
-
1109
-    my $params = [
1110
-        {title => 'Perl', author => 'Ken'},
1111
-        {title => 'Good day', author => 'Tom'}
1112
-    ]
1113
-    my $query = $dbi->insert(table => 'book', param => $params->[0], query => 1);
1114
-
1115
-Return value is L<DBIx::Custom::Query> object.
1116
-This query is executed by C<execute()>.
1117
-
1118
-    foreach my $param (@$params) {
1119
-        $dbi->execute($query, $param);
1120
-    }
1121
-
1122
-Performance is improved because statement handle is reused
1123
-C<query> option is used in C<insert()>, C<update()>, C<update_all()>,
1124
-C<delete()>, C<delete_all()>.
1125
-
1126
-Note that parameters count is same as method for creating query and C<execute()>.
1127
-
1128
-You can create query from any SQL by C<create_query()>.
1129
-
1130
-    my $query = $dbi->create_query(
1131
-        "insert into book {insert_param title author};";
1132
-    );
1133
-
1134
-=head2 9. Other features
1135
-
1136
-=head3 Add method
1137
-
1138
-You can add method to L<DBIx::Custom> object.
1139
-use C<method()>.
1140
-
1141
-    $dbi->method(
1142
-        update_or_insert => sub {
1143
-            my $self = shift;
1144
-            # something
1145
-        },
1146
-        find_or_create   => sub {
1147
-            my $self = shift;
1148
-            # something
1149
-        }
1150
-    );
1151
-
1152
-You can call these methods from L<DBIx::Custom> object.
1153
-
1154
-    $dbi->update_or_insert;
1155
-    $dbi->find_or_create;
1156
-
1157
-=head3 Change result class
1158
-
1159
-You can change result class. By default it is L<DBIx::Custom::Result>.
1160
-
1161
-    package MyResult;
1162
-    use base 'DBIx::Custom::Result';
1163
-    
1164
-    sub some_method { ... }
1165
-
1166
-    1;
1167
-    
1168
-    package main;
1169
-    
1170
-    use MyResult;
1171
-    
1172
-    my $dbi = DBIx::Custom->connect(...);
1173
-    $dbi->result_class('MyResult');
1174
-
1175
-=head1 EXAMPLES
1176
-
1177
-You can see exsamples in the following wiki.
1178
-
1179
-L<DBIx::Custom Wiki|https://github.com/yuki-kimoto/DBIx-Custom/wiki> - Many useful examples
1180
-
1181 679
 =cut
+3 -8
lib/DBIx/Custom/Model.pm
... ...
@@ -1,9 +1,6 @@
1 1
 package DBIx::Custom::Model;
2 2
 
3
-use strict;
4
-use warnings;
5
-
6
-use base 'Object::Simple';
3
+use Object::Simple -base;
7 4
 
8 5
 use Carp 'croak';
9 6
 use DBIx::Custom::Util '_subname';
... ...
@@ -11,16 +8,14 @@ use DBIx::Custom::Util '_subname';
11 8
 # Carp trust relationship
12 9
 push @DBIx::Custom::CARP_NOT, __PACKAGE__;
13 10
 
14
-__PACKAGE__->attr(
15
-    ['dbi', 'name', 'table', 'view'],
11
+has [qw/dbi name table view/],
16 12
     table_alias => sub { {} },
17 13
     columns => sub { [] },
18 14
     filter => sub { [] },
19 15
     result_filter => sub { [] },
20 16
     join => sub { [] },
21 17
     type => sub { [] },
22
-    primary_key => sub { [] }
23
-);
18
+    primary_key => sub { [] };
24 19
 
25 20
 our $AUTOLOAD;
26 21
 
+3 -8
lib/DBIx/Custom/Query.pm
... ...
@@ -1,19 +1,14 @@
1 1
 package DBIx::Custom::Query;
2 2
 
3
-use strict;
4
-use warnings;
5
-
6
-use base 'Object::Simple';
3
+use Object::Simple -base;
7 4
 
8 5
 use Carp 'croak';
9 6
 use DBIx::Custom::Util '_subname';
10 7
 
11
-__PACKAGE__->attr(
12
-    [qw/sth filters/],
8
+has [qw/sth filters/],
13 9
     sql => '',
14 10
     tables => sub { [] },
15
-    columns => sub { [] }
16
-);
11
+    columns => sub { [] };
17 12
 
18 13
 sub filter {
19 14
     my $self = shift;
+1 -4
lib/DBIx/Custom/QueryBuilder.pm
... ...
@@ -1,9 +1,6 @@
1 1
 package DBIx::Custom::QueryBuilder;
2 2
 
3
-use strict;
4
-use warnings;
5
-
6
-use base 'Object::Simple';
3
+use Object::Simple -base;
7 4
 
8 5
 use Carp 'croak';
9 6
 use DBIx::Custom::Query;
+3 -8
lib/DBIx/Custom/Result.pm
... ...
@@ -1,17 +1,12 @@
1 1
 package DBIx::Custom::Result;
2 2
 
3
-use strict;
4
-use warnings;
5
-
6
-use base 'Object::Simple';
3
+use Object::Simple -base;
7 4
 
8 5
 use Carp 'croak';
9 6
 use DBIx::Custom::Util qw/_array_to_hash _subname/;
10 7
 
11
-__PACKAGE__->attr(
12
-    [qw/filters filter_off sth type_rule type_rule_off/],
13
-    stash => sub { {} }
14
-);
8
+has [qw/filters filter_off sth type_rule type_rule_off/],
9
+    stash => sub { {} };
15 10
 
16 11
 *all = \&fetch_hash_all;
17 12
 
+3 -8
lib/DBIx/Custom/Where.pm
... ...
@@ -1,9 +1,6 @@
1 1
 package DBIx::Custom::Where;
2 2
 
3
-use strict;
4
-use warnings;
5
-
6
-use base 'Object::Simple';
3
+use Object::Simple -base;
7 4
 
8 5
 use overload 'bool' => sub {1}, fallback => 1;
9 6
 use overload '""' => sub { shift->to_string }, fallback => 1;
... ...
@@ -14,11 +11,9 @@ use Carp 'croak';
14 11
 # Carp trust relationship
15 12
 push @DBIx::Custom::CARP_NOT, __PACKAGE__;
16 13
 
17
-__PACKAGE__->attr(
18
-    [qw/param query_builder safety_character/],
14
+has [qw/param query_builder safety_character/],
19 15
     clause => sub { [] },
20
-    reserved_word_quote => ''
21
-);
16
+    reserved_word_quote => '';
22 17
 
23 18
 sub new {
24 19
     my $self = shift->SUPER::new(@_);
+1 -4
t/dbix-custom-core-sqlite/MyModel1/book.pm
... ...
@@ -1,9 +1,6 @@
1 1
 package MyModel1::book;
2 2
 
3
-use strict;
4
-use warnings;
5
-
6
-use base 'DBIx::Custom::Model';
3
+use DBIx::Custom::Model -base;
7 4
 
8 5
 sub insert {
9 6
     my ($self, $param) = @_;
+2 -5
t/dbix-custom-core-sqlite/MyModel5/table1.pm
... ...
@@ -1,10 +1,7 @@
1 1
 package MyModel5::table1;
2 2
 
3
-use strict;
4
-use warnings;
3
+use MyModel5 -base;
5 4
 
6
-use base 'MyModel5';
7
-
8
-__PACKAGE__->attr('primary_key' => sub { ['key1', 'key2'] });
5
+has primary_key => sub { ['key1', 'key2'] };
9 6
 
10 7
 1;