add experimental DBIx::Custom::Model column_clause...
...() method
... | ... |
@@ -1,5 +1,5 @@ |
1 | 1 |
0.1649 |
2 |
- - add DBIx::Custom::Model column_clause() method. |
|
2 |
+ - add experimental DBIx::Custom::Model column_clause() method. |
|
3 | 3 |
- select method column option can receive string. |
4 | 4 |
- DBIx::Custom::Model select() and select_at() think about relation attirbute |
5 | 5 |
0.1648 |
... | ... |
@@ -781,6 +781,7 @@ sub setup_model { |
781 | 781 |
} |
782 | 782 |
} |
783 | 783 |
); |
784 |
+ return $self; |
|
784 | 785 |
} |
785 | 786 |
|
786 | 787 |
our %VALID_UPDATE_ARGS |
... | ... |
@@ -1096,6 +1096,28 @@ You can set C<relation> |
1096 | 1096 |
|
1097 | 1097 |
This relation is used by C<select()>, C<select_at()> |
1098 | 1098 |
|
1099 |
+=head2 Create column clause automatically : column_clause() |
|
1100 |
+ |
|
1101 |
+To create column clause automatically, use C<column_clause()>. |
|
1102 |
+Valude of C<table> and C<columns> is used. |
|
1103 |
+ |
|
1104 |
+ my $column_clause = $model->column_clause; |
|
1105 |
+ |
|
1106 |
+If C<table> is 'book'�AC<column> is ['id', 'name'], |
|
1107 |
+the following clause is created. |
|
1108 |
+ |
|
1109 |
+ book.id as id, book.name as name |
|
1110 |
+ |
|
1111 |
+These column name is for removing column name ambiguities. |
|
1112 |
+ |
|
1113 |
+If you remove some columns, use C<remove> option. |
|
1114 |
+ |
|
1115 |
+ my $column_clause = $model->column_clause(remove => ['id']); |
|
1116 |
+ |
|
1117 |
+If you add some column, use C<add> option. |
|
1118 |
+ |
|
1119 |
+ my $column_clause = $model->column_clause(add => ['company.id as company__id']); |
|
1120 |
+ |
|
1099 | 1121 |
=head2 Model Examples |
1100 | 1122 |
|
1101 | 1123 |
Model examples |
... | ... |
@@ -1131,6 +1131,28 @@ C<select_at()>で利用されます。 |
1131 | 1131 |
|
1132 | 1132 |
ここで設定したリレーションはC<select()>, C<select_at()>で利用されます。 |
1133 | 1133 |
|
1134 |
+=head2 列名の自動生成 : column_clause() |
|
1135 |
+ |
|
1136 |
+列名の節を自動生成するにはC<column_clause()>を使用します。 |
|
1137 |
+C<table>とC<columns>の値が利用されます。 |
|
1138 |
+ |
|
1139 |
+ my $column_clause = $model->column_clause; |
|
1140 |
+ |
|
1141 |
+C<table>の値が'book'、C<column>の値が['id', 'name']で |
|
1142 |
+あった場合は次のような列名の節が生成されます。 |
|
1143 |
+ |
|
1144 |
+ book.id as id, book.name as name |
|
1145 |
+ |
|
1146 |
+このように列名の節を生成するのは、列名のあいまいさをなくすためです。 |
|
1147 |
+ |
|
1148 |
+不必要な列がある場合はC<remove>オプションで指定することができます。 |
|
1149 |
+ |
|
1150 |
+ my $column_clause = $model->column_clause(remove => ['id']); |
|
1151 |
+ |
|
1152 |
+追加したい列がある場合は、C<add>オプションで追加することができます。 |
|
1153 |
+ |
|
1154 |
+ my $column_clause = $model->column_clause(add => ['company.id as company__id']); |
|
1155 |
+ |
|
1134 | 1156 |
=head2 モデルのサンプル |
1135 | 1157 |
|
1136 | 1158 |
モデルのサンプルです。 |
... | ... |
@@ -190,6 +190,28 @@ L<DBIx::Custom> inherits all methods from L<Object::Simple>, |
190 | 190 |
and you can use all methods of the object set to C<dbi>. |
191 | 191 |
and implements the following new ones. |
192 | 192 |
|
193 |
+=head2 C<column_clause()> |
|
194 |
+ |
|
195 |
+To create column clause automatically, use C<column_clause()>. |
|
196 |
+Valude of C<table> and C<columns> is used. |
|
197 |
+ |
|
198 |
+ my $column_clause = $model->column_clause; |
|
199 |
+ |
|
200 |
+If C<table> is 'book'�AC<column> is ['id', 'name'], |
|
201 |
+the following clause is created. |
|
202 |
+ |
|
203 |
+ book.id as id, book.name as name |
|
204 |
+ |
|
205 |
+These column name is for removing column name ambiguities. |
|
206 |
+ |
|
207 |
+If you remove some columns, use C<remove> option. |
|
208 |
+ |
|
209 |
+ my $column_clause = $model->column_clause(remove => ['id']); |
|
210 |
+ |
|
211 |
+If you add some column, use C<add> option. |
|
212 |
+ |
|
213 |
+ my $column_clause = $model->column_clause(add => ['company.id as company__id']); |
|
214 |
+ |
|
193 | 215 |
=head2 C<delete> |
194 | 216 |
|
195 | 217 |
$table->delete(...); |
... | ... |
@@ -4,6 +4,7 @@ use warnings; |
4 | 4 |
|
5 | 5 |
use utf8; |
6 | 6 |
use Encode qw/encode_utf8 decode_utf8/; |
7 |
+use Data::Dumper; |
|
7 | 8 |
|
8 | 9 |
BEGIN { |
9 | 10 |
eval { require DBD::SQLite; 1 } |
... | ... |
@@ -1571,6 +1572,7 @@ test 'model select relation'; |
1571 | 1572 |
|
1572 | 1573 |
$self->include_model('MyModel6'); |
1573 | 1574 |
|
1575 |
+ |
|
1574 | 1576 |
return $self; |
1575 | 1577 |
} |
1576 | 1578 |
} |
... | ... |
@@ -1583,3 +1585,20 @@ $result = $dbi->model('table1')->select(column => ['key3'], where => {'table1.ke |
1583 | 1585 |
is($result->fetch_hash_first->{key3}, 3); |
1584 | 1586 |
$result = $dbi->model('table1')->select_at(column => ['key3'], where => [1]); |
1585 | 1587 |
is($result->fetch_hash_first->{key3}, 3); |
1588 |
+ |
|
1589 |
+test 'column_clause'; |
|
1590 |
+$dbi = MyDBI7->connect($NEW_ARGS->{0}); |
|
1591 |
+$dbi->execute($CREATE_TABLE->{0}); |
|
1592 |
+$dbi->execute($CREATE_TABLE->{2}); |
|
1593 |
+$dbi->setup_model; |
|
1594 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2}); |
|
1595 |
+$dbi->insert(table => 'table2', param => {key1 => 1, key3 => 3}); |
|
1596 |
+$model = $dbi->model('table1'); |
|
1597 |
+$result = $model->select(column => $model->column_clause, where => {'table1.key1' => 1}); |
|
1598 |
+is_deeply($result->fetch_hash_first, {key1 => 1, key2 => 2}); |
|
1599 |
+$result = $model->select(column => $model->column_clause(remove => ['key1']), where => {'table1.key1' => 1}); |
|
1600 |
+is_deeply($result->fetch_hash_first, {key2 => 2}); |
|
1601 |
+$result = $model->select(column => $model->column_clause(add => ['key3']), where => {'table1.key1' => 1}); |
|
1602 |
+is_deeply($result->fetch_hash_first, {key1 => 1, key2 => 2, key3 => 3}); |
|
1603 |
+ |
|
1604 |
+ |