... | ... |
@@ -2,7 +2,8 @@ |
2 | 2 |
- removed from cache() and cache_method() document for a while and cache() value |
3 | 3 |
become 0 because I find something bug. |
4 | 4 |
- create_model() return model. |
5 |
- |
|
5 |
+ - added document of hash filter |
|
6 |
+ - adeed EXPERIMENTAL DBIx::Custom::Model method() |
|
6 | 7 |
0.1665 |
7 | 8 |
- removed EXPERIMETNAL flag from insert_at(), update_at(), delete_at(), select_at(), insert_param(), not_exists(), select()'s query option, update_param(), where, table tag, each column, safety_character, DBIx::Where, where(). |
8 | 9 |
- added EXPERIMETNAL create_model() |
... | ... |
@@ -1697,7 +1697,7 @@ and C<PrintError> option is false by default. |
1697 | 1697 |
|
1698 | 1698 |
=head2 create_model |
1699 | 1699 |
|
1700 |
- $dbi->create_model( |
|
1700 |
+ my $model = $dbi->create_model( |
|
1701 | 1701 |
table => 'book', |
1702 | 1702 |
primary_key => 'id', |
1703 | 1703 |
join => [ |
... | ... |
@@ -1713,7 +1713,7 @@ and C<PrintError> option is false by default. |
1713 | 1713 |
); |
1714 | 1714 |
|
1715 | 1715 |
Create L<DBIx::Custom::Model> object and initialize model. |
1716 |
-the module is used from model() method. |
|
1716 |
+the module is also used from model() method. |
|
1717 | 1717 |
|
1718 | 1718 |
$dbi->model('book')->select(...); |
1719 | 1719 |
|
... | ... |
@@ -1344,41 +1344,6 @@ You can change result class. By default it is L<DBIx::Custom::Result>. |
1344 | 1344 |
my $dbi = DBIx::Custom->connect(...); |
1345 | 1345 |
$dbi->result_class('MyResult'); |
1346 | 1346 |
|
1347 |
-=head3 Caching |
|
1348 |
- |
|
1349 |
-SQL after parsing tag is cached for performance. |
|
1350 |
-You can set C<cache()>. By default, chaching is true. |
|
1351 |
- |
|
1352 |
- $dbi->cache(1); |
|
1353 |
- |
|
1354 |
-The way to cache is changed by C<cache_method()>. |
|
1355 |
-Default method is the following one. |
|
1356 |
-Cache is saved to memory. |
|
1357 |
- |
|
1358 |
- $dbi->cache_method(sub { |
|
1359 |
- sub { |
|
1360 |
- my $self = shift; |
|
1361 |
- |
|
1362 |
- $self->{_cached} ||= {}; |
|
1363 |
- |
|
1364 |
- if (@_ > 1) { |
|
1365 |
- # Save cache |
|
1366 |
- $self->{_cached}{$_[0]} = $_[1] |
|
1367 |
- } |
|
1368 |
- else { |
|
1369 |
- # Get cache |
|
1370 |
- return $self->{_cached}{$_[0]} |
|
1371 |
- } |
|
1372 |
- } |
|
1373 |
- }); |
|
1374 |
- |
|
1375 |
-First argument is L<DBIx::Custom> object. |
|
1376 |
-Second argument is SQL before parsing. |
|
1377 |
-Third argument is SQL information after parsing. This is hash reference. |
|
1378 |
- |
|
1379 |
-If third argument exists, you save cache, |
|
1380 |
-and if third argument isn't exists, you get chace. |
|
1381 |
- |
|
1382 | 1347 |
=head1 EXAMPLES |
1383 | 1348 |
|
1384 | 1349 |
You can see exsamples in the following wiki. |
... | ... |
@@ -1369,42 +1369,6 @@ L<DBIx::Custom>オブジェクトから呼び出すことができます。 |
1369 | 1369 |
my $dbi = DBIx::Custom->connect(...); |
1370 | 1370 |
$dbi->result_class('MyResult'); |
1371 | 1371 |
|
1372 |
-=head3 キャッシング |
|
1373 |
- |
|
1374 |
-タグの解析後のSQLはパフォーマンスの理由のためにキャッシュされます。 |
|
1375 |
-これはC<chace>で設定でき、デフォルトではキャッシュを行う設定です。 |
|
1376 |
- |
|
1377 |
- $dbi->cache(1); |
|
1378 |
- |
|
1379 |
-キャッシュ方法はC<cache_method>で変更することができます。 |
|
1380 |
-デフォルトのメソッドは以下のようになっていて、 |
|
1381 |
-メモリ上にキャッシュが保存されます。 |
|
1382 |
- |
|
1383 |
- $dbi->cache_method(sub { |
|
1384 |
- sub { |
|
1385 |
- my $self = shift; |
|
1386 |
- |
|
1387 |
- $self->{_cached} ||= {}; |
|
1388 |
- |
|
1389 |
- if (@_ > 1) { |
|
1390 |
- # キャッシュの保存 |
|
1391 |
- $self->{_cached}{$_[0]} = $_[1] |
|
1392 |
- } |
|
1393 |
- else { |
|
1394 |
- # キャッシュの取得 |
|
1395 |
- return $self->{_cached}{$_[0]} |
|
1396 |
- } |
|
1397 |
- } |
|
1398 |
- }); |
|
1399 |
- |
|
1400 |
-第一はL<DBIx::Custom>オブジェクトです。 |
|
1401 |
-第二引数はタグが解析される前のSQLです。 |
|
1402 |
-第三引数はタグの解析後のSQLの情報です。これはハッシュのリファレンスです。 |
|
1403 |
- |
|
1404 |
-第三引数が存在した場合はキャッシュを設定し、 |
|
1405 |
-存在しなかった場合はキャッシュを取得する実装に |
|
1406 |
-してください。 |
|
1407 |
- |
|
1408 | 1372 |
=head1 サンプル |
1409 | 1373 |
|
1410 | 1374 |
以下のWikiでサンプルを見ることができます。 |
... | ... |
@@ -29,7 +29,11 @@ sub AUTOLOAD { |
29 | 29 |
my ($package, $mname) = $AUTOLOAD =~ /^([\w\:]+)\:\:(\w+)$/; |
30 | 30 |
|
31 | 31 |
# Method |
32 |
- if (my $dbi_method = $self->dbi->can($mname)) { |
|
32 |
+ $self->{_methods} ||= {}; |
|
33 |
+ if (my $method = $self->{_methods}->{$mname}) { |
|
34 |
+ return $self->$method(@_) |
|
35 |
+ } |
|
36 |
+ elsif (my $dbi_method = $self->dbi->can($mname)) { |
|
33 | 37 |
$self->dbi->$dbi_method(@_); |
34 | 38 |
} |
35 | 39 |
elsif (my $dbh_method = $self->dbi->dbh->can($mname)) { |
... | ... |
@@ -78,6 +82,16 @@ sub column { |
78 | 82 |
|
79 | 83 |
sub DESTROY { } |
80 | 84 |
|
85 |
+sub method { |
|
86 |
+ my $self = shift; |
|
87 |
+ |
|
88 |
+ # Merge |
|
89 |
+ my $methods = ref $_[0] eq 'HASH' ? $_[0] : {@_}; |
|
90 |
+ $self->{_methods} = {%{$self->{_methods} || {}}, %$methods}; |
|
91 |
+ |
|
92 |
+ return $self; |
|
93 |
+} |
|
94 |
+ |
|
81 | 95 |
sub mycolumn { |
82 | 96 |
my $self = shift; |
83 | 97 |
my $table = shift unless ref $_[0]; |
... | ... |
@@ -232,6 +246,25 @@ you don't have to specify C<table> option. |
232 | 246 |
Same as C<insert_at()> of L<DBIx::Custom> except that |
233 | 247 |
you don't have to specify C<table> and C<primary_key> option. |
234 | 248 |
|
249 |
+=head2 C<method> EXPERIMENTAL |
|
250 |
+ |
|
251 |
+ $model->method( |
|
252 |
+ update_or_insert => sub { |
|
253 |
+ my $self = shift; |
|
254 |
+ |
|
255 |
+ # ... |
|
256 |
+ }, |
|
257 |
+ find_or_create => sub { |
|
258 |
+ my $self = shift; |
|
259 |
+ |
|
260 |
+ # ... |
|
261 |
+ ); |
|
262 |
+ |
|
263 |
+Register method. These method is called directly from L<DBIx::Custom::Model> object. |
|
264 |
+ |
|
265 |
+ $model->update_or_insert; |
|
266 |
+ $model->find_or_create; |
|
267 |
+ |
|
235 | 268 |
=head2 C<mycolumn> |
236 | 269 |
|
237 | 270 |
my $column = $self->mycolumn; |
... | ... |
@@ -6,6 +6,7 @@ use warnings; |
6 | 6 |
sub array_to_hash { |
7 | 7 |
my $array = shift; |
8 | 8 |
|
9 |
+ return $array if ref $array eq 'HASH'; |
|
9 | 10 |
return unless $array; |
10 | 11 |
return $array if ref $array eq 'HASH'; |
11 | 12 |
|
... | ... |
@@ -1975,3 +1975,13 @@ is_deeply($result->fetch_hash_first, |
1975 | 1975 |
{key1 => 1, key2 => 2, 'table2__key1' => 1, 'table2__key3' => 3}); |
1976 | 1976 |
is_deeply($model2->select->fetch_hash_first, {key1 => 1, key3 => 3}); |
1977 | 1977 |
|
1978 |
+test 'model method'; |
|
1979 |
+test 'create_model'; |
|
1980 |
+$dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
|
1981 |
+$dbi->execute($CREATE_TABLE->{2}); |
|
1982 |
+$dbi->insert(table => 'table2', param => {key1 => 1, key3 => 3}); |
|
1983 |
+$model = $dbi->create_model( |
|
1984 |
+ table => 'table2' |
|
1985 |
+); |
|
1986 |
+$model->method(foo => sub { shift->select(@_) }); |
|
1987 |
+is_deeply($model->foo->fetch_hash_first, {key1 => 1, key3 => 3}); |