Showing 6 changed files with 162 additions and 224 deletions
+3
Changes
... ...
@@ -1,5 +1,8 @@
1 1
 0.1628
2
+  remove DBIx::Custom::Model
3
+  move table method and table_class attribute to DBIx::Custom
2 4
   added examples
5
+  fixed connect method bug
3 6
 0.1627
4 7
   added insert, update, update_all, delete, delete_all, select method to DBIx::Custom::Table
5 8
   added experimental txn_scope
+38 -1
lib/DBIx/Custom.pm
... ...
@@ -44,6 +44,7 @@ __PACKAGE__->attr(filters => sub {
44 44
 __PACKAGE__->attr(filter_check => 1);
45 45
 __PACKAGE__->attr(query_builder  => sub {DBIx::Custom::QueryBuilder->new});
46 46
 __PACKAGE__->attr(result_class => 'DBIx::Custom::Result');
47
+__PACKAGE__->attr(table_class => 'DBIx::Custom::Table');
47 48
 
48 49
 # DBI methods
49 50
 foreach my $method (qw/begin_work commit rollback/) {
... ...
@@ -173,7 +174,7 @@ sub connect {
173 174
         }
174 175
     }
175 176
     else {
176
-        $self = $proto->new(@_);
177
+        $self = $proto->SUPER::new(@_);
177 178
     }
178 179
     
179 180
     # Information
... ...
@@ -606,6 +607,30 @@ sub select {
606 607
     return $result;
607 608
 }
608 609
 
610
+sub table {
611
+    my $self = shift;
612
+    my $name = shift;
613
+    
614
+    # Table class
615
+    my $table_class = $self->table_class;
616
+    croak qq{Invalid table class name "$table_class"}
617
+      unless $table_class =~ /^[\w:]+$/;
618
+    unless ($table_class->can('isa')) {
619
+        eval "require $table_class";
620
+        croak $@ if $@;
621
+    }
622
+    # Create table
623
+    $self->{_tables} ||= {};
624
+    $self->{_tables}->{$name}
625
+        = $table_class->new(name => $name, dbi => $self)
626
+      unless defined $self->{_tables}->{$name};
627
+    
628
+    # Helper
629
+    $self->{_tables}->{$name}->helper(@_) if @_;
630
+    
631
+    return $self->{_tables}{$name};
632
+}
633
+
609 634
 sub txn_scope {
610 635
     my $self = shift;
611 636
     
... ...
@@ -1351,6 +1376,18 @@ Rollback is automatically done.
1351 1376
 Note that this is feature of L<DBIx::TransactionManager>
1352 1377
 L<DBIx::TransactionManager> is required.
1353 1378
 
1379
+=head2 C<table>
1380
+
1381
+    $dbi->table('book',
1382
+        insert => sub { ... },
1383
+        update => sub { ... }
1384
+    );
1385
+    
1386
+    my $table = $dbi->table('book');
1387
+
1388
+Create a L<DBIx::Custom::Table> object,
1389
+or get a L<DBIx::Custom::Table> object.
1390
+
1354 1391
 =head2 C<update_all>
1355 1392
 
1356 1393
     $dbi->update_all(table  => $table, 
+43 -89
lib/DBIx/Custom/Guides.pod
... ...
@@ -6,25 +6,25 @@ DBIx::Custom::Guides - DBIx::Custom Guides
6 6
 
7 7
 =head2 1. Connect to the database
8 8
 
9
-C<connect()> method create a new L<DBIx::Custom>
10
-object and connect to the database.
11
-
12 9
     use DBIx::Custom;
13
-    my $dbi = DBIx::Custom->connect(data_source => "dbi:mysql:database=dbname",
10
+    my $dbi = DBIx::Custom->connect(data_source => "dbi:mysql:database=$database",
14 11
                                     user => 'ken', password => '!LFKD%$&');
15 12
 
16
-B<Data source exmaples:>
17
-
18
-MySQL
13
+use C<connect()> to connect to the database.
14
+You can sepecfiy C<data_soruce>, C<user>, and C<password>.
19 15
 
20
-    "dbi:mysql:database=$database"
21
-    "dbi:mysql:database=$database;host=$hostname;port=$port"
16
+The following ones are data source exmaple in variouse dabase system.
22 17
 
23 18
 SQLite
24 19
 
25 20
     "dbi:SQLite:dbname=$database"
26 21
     "dbi:SQLite:dbname=:memory:"
27 22
 
23
+MySQL
24
+
25
+    "dbi:mysql:database=$database"
26
+    "dbi:mysql:database=$database;host=$hostname;port=$port"
27
+
28 28
 PostgreSQL
29 29
 
30 30
     "dbi:Pg:dbname=$dbname"
... ...
@@ -52,7 +52,7 @@ You don't have to create SQL statements.
52 52
 
53 53
 Execute insert statement.
54 54
 
55
-    $dbi->insert(table  => 'books',
55
+    $dbi->insert(table  => 'book',
56 56
                  param  => {title => 'Perl', author => 'Ken'});
57 57
 
58 58
 The following SQL is executed.
... ...
@@ -68,13 +68,13 @@ See also "METHODS" section.
68 68
 
69 69
 Execute update statement.
70 70
 
71
-    $dbi->update(table  => 'books', 
71
+    $dbi->update(table  => 'book', 
72 72
                  param  => {title => 'Perl', author => 'Ken'}, 
73 73
                  where  => {id => 5});
74 74
 
75 75
 The following SQL is executed.
76 76
 
77
-    update books set title = ?, author = ?;
77
+    update book set title = ?, author = ?;
78 78
 
79 79
 The values of C<title> and C<author> is embedded into the placeholders.
80 80
 
... ...
@@ -87,12 +87,12 @@ If you want to update all rows, use C<update_all()> method.
87 87
 
88 88
 Execute delete statement.
89 89
 
90
-    $dbi->delete(table  => 'books',
90
+    $dbi->delete(table  => 'book',
91 91
                  where  => {author => 'Ken'});
92 92
 
93 93
 The following SQL is executed.
94 94
 
95
-    delete from books where id = ?;
95
+    delete from book where id = ?;
96 96
 
97 97
 The value of C<id> is embedded into the placehodler.
98 98
 
... ...
@@ -105,11 +105,11 @@ If you want to delete all rows, use C<delete_all()> method.
105 105
 
106 106
 Execute select statement, only C<table> argument specified :
107 107
 
108
-    my $result = $dbi->select(table => 'books');
108
+    my $result = $dbi->select(table => 'book');
109 109
 
110 110
 The following SQL is executed.
111 111
 
112
-    select * from books;
112
+    select * from book;
113 113
 
114 114
 the result of C<select()> method is L<DBIx::Custom::Result> object.
115 115
 You can fetch a row by C<fetch()> method.
... ...
@@ -125,42 +125,42 @@ See "3. Fetch row".
125 125
 C<column> and C<where> arguments specified.
126 126
 
127 127
     my $result = $dbi->select(
128
-        table  => 'books',
128
+        table  => 'book',
129 129
         column => [qw/author title/],
130 130
         where  => {author => 'Ken'}
131 131
     );
132 132
 
133 133
 The following SQL is executed.
134 134
 
135
-    select author, title from books where author = ?;
135
+    select author, title from book where author = ?;
136 136
 
137 137
 the value of C<author> is embdded into the placeholder.
138 138
 
139 139
 If you want to join tables, specify C<relation> argument. 
140 140
 
141 141
     my $result = $dbi->select(
142
-        table    => ['books', 'rental'],
143
-        column   => ['books.name as book_name']
144
-        relation => {'books.id' => 'rental.book_id'}
142
+        table    => ['book', 'rental'],
143
+        column   => ['book.name as book_name']
144
+        relation => {'book.id' => 'rental.book_id'}
145 145
     );
146 146
 
147 147
 The following SQL is executed.
148 148
 
149
-    select books.name as book_name from books, rental
150
-    where books.id = rental.book_id;
149
+    select book.name as book_name from book, rental
150
+    where book.id = rental.book_id;
151 151
 
152 152
 If you want to add some string to the end of SQL statement,
153 153
 use C<append> argument.
154 154
 
155 155
     my $result = $dbi->select(
156
-        table  => 'books',
156
+        table  => 'book',
157 157
         where  => {author => 'Ken'},
158 158
         append => 'order by price limit 5',
159 159
     );
160 160
 
161 161
 The following SQL is executed.
162 162
 
163
-    select * books where author = ? order by price limit 5;
163
+    select * book where author = ? order by price limit 5;
164 164
 
165 165
 C<filter> argument can be specified.
166 166
 see also "METHODS" section.
... ...
@@ -238,7 +238,7 @@ At frist, I show normal parameter binding.
238 238
     use DBI;
239 239
     my $dbh = DBI->connect(...);
240 240
     my $sth = $dbh->prepare(
241
-        "select * from books where author = ? and title like ?;"
241
+        "select * from book where author = ? and title like ?;"
242 242
     );
243 243
     $sth->execute('Ken', '%Perl%');
244 244
 
... ...
@@ -249,7 +249,7 @@ L<DBIx::Custom> hash parameter binding system improve
249 249
 normal parameter binding to use hash parameter.
250 250
 
251 251
     my $result = $dbi->execute(
252
-        "select * from books where {= author} and {like title};"
252
+        "select * from book where {= author} and {like title};"
253 253
         param => {author => 'Ken', title => '%Perl%'}
254 254
     );
255 255
 
... ...
@@ -257,8 +257,8 @@ This is same as the normal way, execpt that the parameter is hash.
257 257
 {= author} and {like title} is called C<tag>.
258 258
 tag is expand to placeholder string internally.
259 259
 
260
-    select * from books where {= author} and {like title}
261
-      -> select * from books where author = ? and title like ?;
260
+    select * from book where {= author} and {like title}
261
+      -> select * from book where author = ? and title like ?;
262 262
 
263 263
 The following tags is available.
264 264
 
... ...
@@ -284,7 +284,7 @@ C<{> and C<}> is reserved. If you use these charactors,
284 284
 you must escape them using '\'. Note that '\' is
285 285
 already perl escaped charactor, so you must write '\\'. 
286 286
 
287
-    'select * from books \\{ something statement \\}'
287
+    'select * from book \\{ something statement \\}'
288 288
 
289 289
 =head2 5. Filtering
290 290
 
... ...
@@ -307,7 +307,7 @@ C<encode_utf8> and C<decode_utf8> filter is registerd by default.
307 307
 You can specify these filters to C<filter> argument of C<execute()> method.
308 308
 
309 309
     my $result = $dbi->execute(
310
-        "select * from books where {= author} and {like title};"
310
+        "select * from book where {= author} and {like title};"
311 311
         param  => {author => 'Ken', title => '%Perl%'},
312 312
         filter => {author => 'to_upper_case, title => 'encode_utf8'}
313 313
     );
... ...
@@ -317,13 +317,13 @@ C<insert()>, C<update()>, C<update_all()>,
317 317
 C<delete()>, C<delete_all()>, C<select()>.
318 318
 
319 319
     # insert(), having filter argument
320
-    $dbi->insert(table  => 'books',
320
+    $dbi->insert(table  => 'book',
321 321
                  param  => {title => 'Perl', author => 'Ken'},
322 322
                  filter => {title => 'encode_utf8'});
323 323
     
324 324
     # select(), having filter argument
325 325
     my $result = $dbi->select(
326
-        table  => 'books',
326
+        table  => 'book',
327 327
         column => [qw/author title/],
328 328
         where  => {author => 'Ken'},
329 329
         append => 'order by id limit 1',
... ...
@@ -338,7 +338,7 @@ C<filter()> argument overwrites this default filter.
338 338
     
339 339
     $dbi->default_bind_filter('encode_utf8');
340 340
     $dbi->insert(
341
-        table  => 'books',
341
+        table  => 'book',
342 342
         param  => {title => 'Perl', author => 'Ken', price => 1000},
343 343
         filter => {author => 'to_upper_case', price => undef}
344 344
     );
... ...
@@ -346,14 +346,14 @@ C<filter()> argument overwrites this default filter.
346 346
 This is same as the following example.
347 347
 
348 348
     $dbi->insert(
349
-        table  => 'books',
349
+        table  => 'book',
350 350
         param  => {title => 'Perl', author => 'Ken', price => 1000},
351 351
         filter => {title => 'encode_uft8' author => 'to_upper_case'}
352 352
     );
353 353
 
354 354
 You can also specify filter when the row is fetched. This is reverse of bind filter.
355 355
 
356
-    my $result = $dbi->select(table => 'books');
356
+    my $result = $dbi->select(table => 'book');
357 357
     $result->filter({title => 'decode_utf8', author => 'to_upper_case'});
358 358
 
359 359
 Filter works each column value, but you prepare a default filter
... ...
@@ -366,7 +366,7 @@ overwrites this default filter.
366 366
 
367 367
     $dbi->default_fetch_filter('decode_utf8');
368 368
     my $result = $dbi->select(
369
-        table => 'books',
369
+        table => 'book',
370 370
         columns => ['title', 'author', 'price']
371 371
     );
372 372
     $result->filter({author => 'to_upper_case', price => undef});
... ...
@@ -374,7 +374,7 @@ overwrites this default filter.
374 374
 This is same as the following one.
375 375
 
376 376
     my $result = $dbi->select(
377
-        table => 'books',
377
+        table => 'book',
378 378
         columns => ['title', 'author', 'price']
379 379
     );
380 380
     $result->filter({title => 'decode_utf8', author => 'to_upper_case'});
... ...
@@ -431,17 +431,6 @@ SQLite
431 431
     
432 432
 =head2 6. Get high performance
433 433
 
434
-=head3 Disable filter checking
435
-
436
-Filter checking is executed by default.
437
-This is done to check right filter name is specified,
438
-but sometimes damage performance.
439
-
440
-If you disable this filter checking,
441
-Set C<filter_check> attribute to 0.
442
-
443
-    $dbi->filter_check(0);
444
-
445 434
 =head3 Use execute() method instead suger methods
446 435
 
447 436
 If you execute insert statement by C<insert()> method,
... ...
@@ -453,65 +442,30 @@ is created every time.
453 442
 In that case, you can prepare a query by C<create_query()> method.
454 443
     
455 444
     my $query = $dbi->create_query(
456
-        "insert into books {insert_param title author};"
445
+        "insert into book {insert_param title author};"
457 446
     );
458 447
 
459 448
 Return value of C<create_query()> is L<DBIx::Custom::Query> object.
460 449
 This keep the information of SQL and column names.
461 450
 
462 451
     {
463
-        sql     => 'insert into books (title, author) values (?, ?);',
452
+        sql     => 'insert into book (title, author) values (?, ?);',
464 453
         columns => ['title', 'author']
465 454
     }
466 455
 
467 456
 Execute query repeatedly.
468 457
     
469
-    my $inputs = [
458
+    my $params = [
470 459
         {title => 'Perl',      author => 'Ken'},
471 460
         {title => 'Good days', author => 'Mike'}
472 461
     ];
473 462
     
474
-    foreach my $input (@$inputs) {
475
-        $dbi->execute($query, $input);
463
+    foreach my $param (@$params) {
464
+        $dbi->execute($query, $param);
476 465
     }
477 466
 
478 467
 This is faster than C<insert()> method.
479 468
 
480
-=head3 caching
481
-
482
-C<execute()> method caches the parsed result of the source of SQL.
483
-Default to 1
484
-
485
-    $dbi->cache(1);
486
-
487
-Caching is on memory, but you can change this by C<cache_method()>.
488
-First argument is L<DBIx::Custom> object.
489
-Second argument is a source of SQL,
490
-such as "select * from books where {= title} and {= author};";
491
-Third argument is parsed result, such as
492
-{sql => "select * from books where title = ? and author = ?",
493
- columns => ['title', 'author']}, this is hash reference.
494
-If arguments is more than two, this method is called to set cache.
495
-If not, this method is called to get cache.
496
-
497
-    $dbi->cache_method(sub {
498
-        sub {
499
-            my $self = shift;
500
-            
501
-            $self->{_cached} ||= {};
502
-            
503
-            # Set cache
504
-            if (@_ > 1) {
505
-                $self->{_cached}{$_[0]} = $_[1] 
506
-            }
507
-            
508
-            # Get cache
509
-            else {
510
-                return $self->{_cached}{$_[0]}
511
-            }
512
-        }
513
-    });
514
-
515 469
 =head2 7. More features
516 470
 
517 471
 =head3 Get DBI object
+39 -39
lib/DBIx/Custom/Guides/Ja.pod
... ...
@@ -94,7 +94,7 @@ C<insert()>、C<update()>、C<delete()>、C<select()>
94 94
 
95 95
 C<insert>メソッドです。データベースにデータを挿入します。
96 96
 
97
-    $dbi->insert(table  => 'books',
97
+    $dbi->insert(table  => 'book',
98 98
                  param  => {title => 'Perl', author => 'Ken'});
99 99
 
100 100
 これは次のL<DBI>の操作と同じです。
... ...
@@ -106,14 +106,14 @@ C<insert>メソッドです。データベースにデータを挿入します
106 106
 
107 107
 C<update>メソッドです。データベースのデータを更新します。
108 108
 
109
-    $dbi->update(table  => 'books', 
109
+    $dbi->update(table  => 'book', 
110 110
                  param  => {title => 'Perl', author => 'Ken'}, 
111 111
                  where  => {id => 5});
112 112
 
113 113
 これは次のL<DBI>の操作と同じです。
114 114
 
115 115
     my $sth = $dbh->prepare(
116
-        'update books set title = ?, author = ? where id = ?;');
116
+        'update book set title = ?, author = ? where id = ?;');
117 117
     $sth->execute('Perl', 'Ken', 5);
118 118
 
119 119
 C<update>メソッドは安全のため
... ...
@@ -121,19 +121,19 @@ where句のないSQLを発行することを許可していません。
121 121
 もしすべての行を更新したい場合は
122 122
 C<update_all()>メソッドを使用してください。
123 123
 
124
-    $dbi->update_all(table  => 'books', 
124
+    $dbi->update_all(table  => 'book', 
125 125
                      param  => {title => 'Perl', author => 'Ken'});
126 126
 
127 127
 =head3 C<delete()>
128 128
 
129 129
 C<delete>メソッドです。データベースのデータを削除します。
130 130
 
131
-    $dbi->delete(table  => 'books',
131
+    $dbi->delete(table  => 'book',
132 132
                  where  => {author => 'Ken'});
133 133
 
134 134
 これは次のL<DBI>の操作と同じです。
135 135
 
136
-    my $sth = $dbh->prepare('delete from books where id = ?;');
136
+    my $sth = $dbh->prepare('delete from book where id = ?;');
137 137
     $sth->execute('Ken');
138 138
 
139 139
 C<delete>メソッドは安全のため
... ...
@@ -141,17 +141,17 @@ where句のないSQLを発行することを許可していません。
141 141
 もしすべての行を削除したい場合は
142 142
 C<delete_all()>メソッドを使用してください。
143 143
 
144
-    $dbi->delete_all(table  => 'books');
144
+    $dbi->delete_all(table  => 'book');
145 145
 
146 146
 =head3 C<select()>
147 147
 
148 148
 C<select>メソッドです。テーブル名だけを指定しています。
149 149
 
150
-    my $result = $dbi->select(table => 'books');
150
+    my $result = $dbi->select(table => 'book');
151 151
 
152 152
 これは次のL<DBI>の操作と同じです。
153 153
 
154
-    my $sth = $dbh->prepare('select * from books;);
154
+    my $sth = $dbh->prepare('select * from book;);
155 155
     $sth->execute;
156 156
 
157 157
 C<select()>メソッドの戻り値はL<DBIx::Custom::Result>
... ...
@@ -166,7 +166,7 @@ C<select()>メソッドの戻り値はL<DBIx::Custom::Result>
166 166
 次のC<select>は行の名前とwhere句を指定したものです。
167 167
 
168 168
     my $result = $dbi->select(
169
-        table  => 'books',
169
+        table  => 'book',
170 170
         column => [qw/author title/],
171 171
         where  => {author => 'Ken'}
172 172
     );
... ...
@@ -174,28 +174,28 @@ C<select()>メソッドの戻り値はL<DBIx::Custom::Result>
174 174
 次のL<DBI>の操作と同じです。
175 175
     
176 176
     my $sth = $dbh->prepare(
177
-        'select author, title from books where author = ?;');
177
+        'select author, title from book where author = ?;');
178 178
     $sht->execute('Ken');
179 179
 
180 180
 テーブルをjoinしたい場合はC<relation>を使用します。
181 181
 
182 182
     my $result = $dbi->select(
183
-        table    => ['books', 'rental'],
184
-        column   => ['books.name as book_name']
185
-        relation => {'books.id' => 'rental.book_id'}
183
+        table    => ['book', 'rental'],
184
+        column   => ['book.name as book_name']
185
+        relation => {'book.id' => 'rental.book_id'}
186 186
     );
187 187
 
188 188
 次のL<DBI>の操作と同じです。
189 189
 
190 190
     my $sth = $dbh->prepare(
191
-        'select books.name as book_name from books, rental' .
192
-        'where books.id = rental.book_id;');
191
+        'select book.name as book_name from book, rental' .
192
+        'where book.id = rental.book_id;');
193 193
     $sth->execute;
194 194
 
195 195
 SQL文の末尾に文字列を追加したい場合は<append>オプションを使用します。
196 196
 
197 197
     my $result = $dbi->select(
198
-        table  => 'books',
198
+        table  => 'book',
199 199
         where  => {author => 'Ken'},
200 200
         append => 'order by price limit 5',
201 201
     );
... ...
@@ -203,7 +203,7 @@ SQL文の末尾に文字列を追加したい場合は<append>オプションを
203 203
 次のL<DBI>の操作と同じです。
204 204
 
205 205
     my $sth = $dbh->prepare(
206
-        'select * books where author = ? order by price limit 5;');
206
+        'select * book where author = ? order by price limit 5;');
207 207
     $sth->execute;
208 208
 
209 209
 C<append>オプションは、C<insert()>、C<update()>、C<update_all()>
... ...
@@ -213,7 +213,7 @@ C<delete()>、C<select>メソッドで使用することが
213 213
 この後のフィルタリングの解説で詳しく扱いますが、値をフィルタリングしたい
214 214
 場合はC<filter>オプションを使用することができます。
215 215
 
216
-    $dbi->insert(table  => 'books',
216
+    $dbi->insert(table  => 'book',
217 217
                  param  => {title => 'Perl', author => 'Ken'});
218 218
                  filter => {title  => 'encode_utf8',
219 219
                             author => 'encode_utf8'});
... ...
@@ -228,7 +228,7 @@ C<select()>メソッドのC<where>オプションではハッシュの代わり
228 228
 
229 229
     # Select, more flexible where
230 230
     my $result = $dbi->select(
231
-        table  => 'books',
231
+        table  => 'book',
232 232
         where  => ['{= author} and {like title}', 
233 233
                    {author => 'Ken', title => '%Perl%'}]
234 234
     );
... ...
@@ -328,7 +328,7 @@ L<DBIx::Custom>はハッシュパラメタバインドを提供します。
328 328
     use DBI;
329 329
     my $dbh = DBI->connect(...);
330 330
     my $sth = $dbh->prepare(
331
-        "select * from books where author = ? and title like ?;"
331
+        "select * from book where author = ? and title like ?;"
332 332
     );
333 333
     $sth->execute('Ken', '%Perl%');
334 334
 
... ...
@@ -342,18 +342,18 @@ L<DBIx::Custom>はこれを改善して、ハッシュで
342 342
 パラメタを指定できるようにしました。
343 343
 
344 344
     my $result = $dbi->execute(
345
-        "select * from books where {= author} and {like title};"
345
+        "select * from book where {= author} and {like title};"
346 346
         param => {author => 'Ken', title => '%Perl%'}
347 347
     );
348 348
 
349 349
 C<{= author}>とC<{like title}>はタグと呼ばれます。
350 350
 タグは内部ではプレースホルダを含む文字列に置き換えられます。
351 351
 
352
-    select * from books where {= author} and {like title}
352
+    select * from book where {= author} and {like title}
353 353
 
354 354
 という文は以下のSQLに置き換えられます。
355 355
 
356
-    select * from books where author = ? and title like ?;
356
+    select * from book where author = ? and title like ?;
357 357
 
358 358
 このようにタグを使ってSQL文を表現するのがL<DBIx::Custom>の
359 359
 特徴です。以下のタグが利用可能です。
... ...
@@ -382,7 +382,7 @@ C<{>とC<}>は予約語です。これらの文字を使いたい場合は
382 382
 エスケープするためには'\\'と書く必要があることに注意
383 383
 してください。
384 384
 
385
-    'select * from books \\{ something statement \\}'
385
+    'select * from book \\{ something statement \\}'
386 386
 
387 387
 =head2 5. フィルタリング
388 388
 
... ...
@@ -412,7 +412,7 @@ C<register_filter()>メソッドを使用して
412 412
 で指定することができます。
413 413
 
414 414
     my $result = $dbi->execute(
415
-        "select * from books where {= author} and {like title};"
415
+        "select * from book where {= author} and {like title};"
416 416
         param  => {author => 'Ken', title => '%Perl%'},
417 417
         filter => {author => 'to_upper_case, title => 'encode_utf8'}
418 418
     );
... ...
@@ -426,13 +426,13 @@ C<delete()>、C<select()>
426 426
 メソッドにおいても使用することができます。
427 427
 
428 428
     # insert() with filter option
429
-    $dbi->insert(table  => 'books',
429
+    $dbi->insert(table  => 'book',
430 430
                  param  => {title => 'Perl', author => 'Ken'},
431 431
                  filter => {title => 'encode_utf8'});
432 432
     
433 433
     # select() with filter option
434 434
     my $result = $dbi->select(
435
-        table  => 'books',
435
+        table  => 'book',
436 436
         column => [qw/author title/],
437 437
         where  => {author => 'Ken'},
438 438
         append => 'order by id limit 1',
... ...
@@ -449,7 +449,7 @@ C<filter()>オプションで指定されたフィルタは、
449 449
     
450 450
     $dbi->default_bind_filter('encode_utf8');
451 451
     $dbi->insert(
452
-        table  => 'books',
452
+        table  => 'book',
453 453
         param  => {title => 'Perl', author => 'Ken', price => 1000},
454 454
         filter => {author => 'to_upper_case', price => undef}
455 455
     );
... ...
@@ -510,7 +510,7 @@ SQLite
510 510
 これはL<DBIx::Custom::Result>クラスのC<filter>メソッドを使って
511 511
 行います。
512 512
 
513
-    my $result = $dbi->select(table => 'books');
513
+    my $result = $dbi->select(table => 'book');
514 514
     $result->filter({title => 'decode_utf8', author => 'to_upper_case'});
515 515
 
516 516
 フィルタはそれぞれの列の値に作用しますが、
... ...
@@ -522,7 +522,7 @@ C<filter>メソッドで設定されたフィルタはデフォルトのフィ
522 522
 
523 523
     $dbi->default_fetch_filter('decode_utf8');
524 524
     my $result = $dbi->select(
525
-        table => 'books',
525
+        table => 'book',
526 526
         columns => ['title', 'author', 'price']
527 527
     );
528 528
     $result->filter({author => 'to_upper_case', price => undef});
... ...
@@ -561,7 +561,7 @@ C<insert()>メソッドは、SQL文とステートメントハンドルを
561 561
 クエリを用意しておくことができます。
562 562
     
563 563
     my $query = $dbi->create_query(
564
-        "insert into books {insert_param title author};"
564
+        "insert into book {insert_param title author};"
565 565
     );
566 566
 
567 567
 戻り値はL<DBIx::Custom::Query>オブジェクトです。
... ...
@@ -569,7 +569,7 @@ C<insert()>メソッドは、SQL文とステートメントハンドルを
569 569
 保持しています。またステートメントハンドルも保持しています。
570 570
 
571 571
     {
572
-        sql     => 'insert into books (title, author) values (?, ?);',
572
+        sql     => 'insert into book (title, author) values (?, ?);',
573 573
         columns => ['title', 'author'],
574 574
         sth     => $sth
575 575
     }
... ...
@@ -617,10 +617,10 @@ C<execute()>メソッドはデフォルトでSQL文への解析結果をキャ
617 617
     });
618 618
 
619 619
 最初の引数はL<DBIx::Custom>です。第二引数は、
620
-"select * from books where {= title} and {= author};";
620
+"select * from book where {= title} and {= author};";
621 621
 のようなSQL文の源です。
622 622
 第三引数は
623
-{sql => "select * from books where title = ? and author = ?",
623
+{sql => "select * from book where title = ? and author = ?",
624 624
  columns => ['title', 'author']}
625 625
 のような解析後のデータです。これはハッシュリファレンスである必要
626 626
 があります。
... ...
@@ -711,18 +711,18 @@ C<expand>メソッドを使用すると次のようなハッシュに含まれ
711 711
 
712 712
 以下のハッシュ
713 713
 
714
-    {books => {title => 'Perl', author => 'Ken'}}
714
+    {book => {title => 'Perl', author => 'Ken'}}
715 715
 
716 716
 は次のように展開されます。
717 717
 
718
-    ('books.title' => 'Perl', 'books.author' => 'Ken')
718
+    ('book.title' => 'Perl', 'book.author' => 'Ken')
719 719
 
720 720
 これはテーブル名を含むselect文で利用すると便利です。
721 721
 
722 722
     my $param = {title => 'Perl', author => '%Ken%'};
723 723
     $dbi->execute(
724
-        'select * from books where {= books.title} && {like books.author};',
725
-        param => {$dbi->expand({books => $param})}
724
+        'select * from book where {= book.title} && {like book.author};',
725
+        param => {$dbi->expand({book => $param})}
726 726
     );
727 727
 
728 728
 =cut
-73
lib/DBIx/Custom/Model.pm
... ...
@@ -1,73 +0,0 @@
1
-package DBIx::Custom::Model;
2
-
3
-use strict;
4
-use warnings;
5
-
6
-use base 'Object::Simple';
7
-
8
-use Carp 'croak';
9
-
10
-__PACKAGE__->attr(dbi => sub { DBIx::Custom->new });
11
-__PACKAGE__->attr(table_class => 'DBIx::Custom::Table');
12
-__PACKAGE__->attr(tables => sub { {} });
13
-
14
-sub table {
15
-    my ($self, $name) = @_;
16
-    
17
-    # Table class
18
-    my $table_class = $self->table_class;
19
-    croak qq{Invalid table class name "$table_class"}
20
-      unless $table_class =~ /^[\w:]+$/;
21
-    unless ($table_class->can('isa')) {
22
-        eval "require $table_class";
23
-        croak $@ if $@;
24
-    }
25
-    # Create table
26
-    $self->tables->{$name}
27
-        = $table_class->new(name => $name, dbi => $self->dbi, model => $self)
28
-      unless defined $self->tables->{$name};
29
-    
30
-    return $self->{tables}{$name};
31
-}
32
-
33
-1;
34
-
35
-=head1 NAME
36
-
37
-DBIx::Custom::Model - Table class(experimental)
38
-
39
-=head1 SYNOPSIS
40
-
41
-use MyModel;
42
-
43
-use base 'DBIx::Custom::Model';
44
-
45
-sub new {
46
-    my $self = shift->SUPER::new(@_);
47
-    
48
-    my $dbi = DBIx::Custom->connect(...);
49
-    
50
-    $self->dbi($dbi);
51
-    
52
-    $self->table('book')->helper(
53
-        insert => sub {
54
-            my $self = shift;
55
-            
56
-            return $self->dbi->insert(table => $self->name, @_);
57
-        }
58
-    );
59
-    
60
-    return $self;
61
-}
62
-
63
-=head1 METHODS
64
-
65
-L<DBIx::Custom> inherits all methods from L<Object::Simple>
66
-and implements the following new ones.
67
-
68
-=head2 C<table>
69
-
70
-    my $table = $model->table('book');
71
-
72
-Get a L<DBIx::Custom::Table>, or create a L<DBIx::Custom::Table> object if not exists.
73
-
+39 -22
t/dbix-custom-core-sqlite.t
... ...
@@ -62,7 +62,6 @@ my $insert_query;
62 62
 my $update_query;
63 63
 my $ret_val;
64 64
 my $infos;
65
-my $model;
66 65
 my $table;
67 66
 
68 67
 # Prepare table
... ...
@@ -749,27 +748,10 @@ is_deeply($infos,
749 748
     , $test
750 749
 );
751 750
 
752
-test 'model';
753
-{
754
-    package MyModel1;
755
-    
756
-    use base 'DBIx::Custom::Model';
757
-    
758
-    sub new {
759
-        my $self = shift->SUPER::new(@_);
760
-        
761
-        my $dbi = DBIx::Custom->connect($NEW_ARGS->{0});
762
-        
763
-        $self->dbi($dbi);
764
-        
765
-        return $self;
766
-    }
767
-}
768
-$model = MyModel1->new;
769
-$model->dbi->execute($CREATE_TABLE->{0});
770
-$table = $model->table('table1');
771
-is($table, $model->table('table1'));
772
-is($table->model, $model);
751
+test 'table';
752
+$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
753
+$dbi->execute($CREATE_TABLE->{0});
754
+$table = $dbi->table('table1');
773 755
 $table->insert(param => {key1 => 1, key2 => 2});
774 756
 $table->insert(param => {key1 => 3, key2 => 4});
775 757
 $rows = $table->select->fetch_hash_all;
... ...
@@ -794,6 +776,14 @@ $table->delete_all;
794 776
 $rows = $table->select->fetch_hash_all;
795 777
 is_deeply($rows, [], "$test: delete_all");
796 778
 
779
+$dbi->dbh->do($CREATE_TABLE->{2});
780
+$dbi->table('table2', ppp => sub {
781
+    my $self = shift;
782
+    
783
+    return $self->name;
784
+});
785
+is($dbi->table('table2')->ppp, 'table2', "$test : helper");
786
+
797 787
 test 'limit';
798 788
 $dbi = DBIx::Custom->connect($NEW_ARGS->{0});
799 789
 $dbi->execute($CREATE_TABLE->{0});
... ...
@@ -830,3 +820,30 @@ $rows = $dbi->select(
830 820
 )->fetch_hash_all;
831 821
 is_deeply($rows, [{key1 => 1, key2 => 2}], $test);
832 822
 
823
+test 'connect super';
824
+{
825
+    package MyDBI;
826
+    
827
+    use base 'DBIx::Custom';
828
+    sub connect {
829
+        my $self = shift->SUPER::connect(@_);
830
+        
831
+        return $self;
832
+    }
833
+    
834
+    sub new {
835
+        my $self = shift->SUPER::connect(@_);
836
+        
837
+        return $self;
838
+    }
839
+}
840
+
841
+$dbi = MyDBI->connect($NEW_ARGS->{0});
842
+$dbi->execute($CREATE_TABLE->{0});
843
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
844
+is($dbi->select(table => 'table1')->fetch_hash_first->{key1}, 1, $test);
845
+
846
+$dbi = MyDBI->new($NEW_ARGS->{0});
847
+$dbi->execute($CREATE_TABLE->{0});
848
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
849
+is($dbi->select(table => 'table1')->fetch_hash_first->{key1}, 1, $test);