- added experimental DBIx::Custom::Model column...
...() prefix option.
... | ... |
@@ -1,3 +1,7 @@ |
1 |
+0.1658 |
|
2 |
+ - added experimental DBIx::Custom::Model column() prefix option. |
|
3 |
+ - fixed select_at join column invalid bug |
|
4 |
+ - added DBIx::Custom::Model column() attribute |
|
1 | 5 |
0.1657 |
2 | 6 |
- remaned experimental safty_charcter to safty_name |
3 | 7 |
- safty_charcter is changed, set only one character regex. |
... | ... |
@@ -1,6 +1,6 @@ |
1 | 1 |
package DBIx::Custom; |
2 | 2 |
|
3 |
-our $VERSION = '0.1657'; |
|
3 |
+our $VERSION = '0.1658'; |
|
4 | 4 |
|
5 | 5 |
use 5.008001; |
6 | 6 |
use strict; |
... | ... |
@@ -752,7 +752,7 @@ sub select { |
752 | 752 |
|
753 | 753 |
our %VALID_SELECT_AT_ARGS |
754 | 754 |
= map { $_ => 1 } qw/table column where append relation filter query selection |
755 |
- param primary_key left_join/; |
|
755 |
+ param primary_key join/; |
|
756 | 756 |
|
757 | 757 |
sub select_at { |
758 | 758 |
my ($self, %args) = @_; |
... | ... |
@@ -1150,7 +1150,7 @@ sub _push_join { |
1150 | 1150 |
|
1151 | 1151 |
my $join_clause = $join->[$i]; |
1152 | 1152 |
|
1153 |
- if ($join_clause =~ /\s([^\.\s]+?)\..+\s([^\.\s]+?)\./) { |
|
1153 |
+ if ($join_clause =~ /\s([^\.\s]+?)\..+\s([^\.\s]+?)\..+?$/) { |
|
1154 | 1154 |
|
1155 | 1155 |
my $table1 = $1; |
1156 | 1156 |
my $table2 = $2; |
... | ... |
@@ -11,7 +11,7 @@ use Carp 'croak'; |
11 | 11 |
push @DBIx::Custom::CARP_NOT, __PACKAGE__; |
12 | 12 |
|
13 | 13 |
__PACKAGE__->attr( |
14 |
- ['dbi', 'name', 'table'], |
|
14 |
+ ['dbi', 'name', 'table', 'column'], |
|
15 | 15 |
columns => sub { [] }, |
16 | 16 |
filter => sub { [] }, |
17 | 17 |
primary_key => sub { [] }, |
... | ... |
@@ -52,10 +52,11 @@ sub column_clause { |
52 | 52 |
my $add = $args->{add} || []; |
53 | 53 |
my $remove = $args->{remove} || []; |
54 | 54 |
my %remove = map {$_ => 1} @$remove; |
55 |
+ my $prefix = $args->{prefix} || ''; |
|
55 | 56 |
|
56 | 57 |
my @column; |
57 | 58 |
foreach my $column (@$columns) { |
58 |
- push @column, "$table.$column as $column" |
|
59 |
+ push @column, "$table.$column as $prefix$column" |
|
59 | 60 |
unless $remove{$column}; |
60 | 61 |
} |
61 | 62 |
|
... | ... |
@@ -117,6 +118,7 @@ sub select { |
117 | 118 |
my $self = shift; |
118 | 119 |
$self->dbi->select( |
119 | 120 |
table => $self->table, |
121 |
+ column => $self->column, |
|
120 | 122 |
join => $self->join, |
121 | 123 |
@_ |
122 | 124 |
); |
... | ... |
@@ -127,7 +129,9 @@ sub select_at { |
127 | 129 |
|
128 | 130 |
return $self->dbi->select_at( |
129 | 131 |
table => $self->table, |
132 |
+ column => $self->column, |
|
130 | 133 |
primary_key => $self->primary_key, |
134 |
+ join => $self->join, |
|
131 | 135 |
@_ |
132 | 136 |
); |
133 | 137 |
} |
... | ... |
@@ -246,6 +250,14 @@ If you add some column, use C<add> option. |
246 | 250 |
|
247 | 251 |
my $column_clause = $model->column_clause(add => ['company.id as company__id']); |
248 | 252 |
|
253 |
+If you add column name prefix, use C<prefix> option |
|
254 |
+ |
|
255 |
+ my $column_clause = $model->column_clause(prefix => 'book__'); |
|
256 |
+ |
|
257 |
+The following clause is created. |
|
258 |
+ |
|
259 |
+ book.id as book__id, book.name as book__name |
|
260 |
+ |
|
249 | 261 |
=head2 C<delete> |
250 | 262 |
|
251 | 263 |
$table->delete(...); |
... | ... |
@@ -1784,3 +1784,29 @@ $rows = $dbi->select( |
1784 | 1784 |
'left outer join table3 on table2.key3 = table3.key3'] |
1785 | 1785 |
)->fetch_hash_all; |
1786 | 1786 |
is_deeply($rows, [{table1__key1 => 1}]); |
1787 |
+ |
|
1788 |
+ |
|
1789 |
+test 'column_clause'; |
|
1790 |
+{ |
|
1791 |
+ package MyDBI8; |
|
1792 |
+ |
|
1793 |
+ use base 'DBIx::Custom'; |
|
1794 |
+ |
|
1795 |
+ sub connect { |
|
1796 |
+ my $self = shift->SUPER::connect(@_); |
|
1797 |
+ |
|
1798 |
+ $self->include_model('MyModel7'); |
|
1799 |
+ |
|
1800 |
+ return $self; |
|
1801 |
+ } |
|
1802 |
+} |
|
1803 |
+$dbi = MyDBI8->connect($NEW_ARGS->{0}); |
|
1804 |
+$dbi->execute($CREATE_TABLE->{0}); |
|
1805 |
+$dbi->execute($CREATE_TABLE->{2}); |
|
1806 |
+$dbi->setup_model; |
|
1807 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2}); |
|
1808 |
+$dbi->insert(table => 'table2', param => {key1 => 1, key3 => 3}); |
|
1809 |
+$model = $dbi->model('table1'); |
|
1810 |
+$result = $model->select_at(where => 1); |
|
1811 |
+is_deeply($result->fetch_hash_first, |
|
1812 |
+ {key1 => 1, key2 => 2, table2__key1 => 1, table2__key3 => 3}); |
... | ... |
@@ -0,0 +1,5 @@ |
1 |
+package MyModel7; |
|
2 |
+ |
|
3 |
+use base 'DBIx::Custom::Model'; |
|
4 |
+ |
|
5 |
+1; |
... | ... |
@@ -0,0 +1,22 @@ |
1 |
+package MyModel7::table1; |
|
2 |
+ |
|
3 |
+use base 'MyModel7'; |
|
4 |
+ |
|
5 |
+__PACKAGE__->attr( |
|
6 |
+ primary_key => sub { ['key1'] }, |
|
7 |
+ column => sub { |
|
8 |
+ my $self = shift; |
|
9 |
+ |
|
10 |
+ return [ |
|
11 |
+ $self->column_clause, |
|
12 |
+ $self->model('table2')->column_clause(prefix => 'table2__') |
|
13 |
+ ]; |
|
14 |
+ }, |
|
15 |
+ join => sub { |
|
16 |
+ [ |
|
17 |
+ 'left outer join table2 on table1.key1 = table2.key1' |
|
18 |
+ ] |
|
19 |
+ }, |
|
20 |
+); |
|
21 |
+ |
|
22 |
+1; |
... | ... |
@@ -0,0 +1,5 @@ |
1 |
+package MyModel7::table2; |
|
2 |
+ |
|
3 |
+use base 'MyModel7'; |
|
4 |
+ |
|
5 |
+1; |