| ... | ... |
@@ -1,4 +1,5 @@ |
| 1 | 1 |
0.1686 |
| 2 |
+ - added EXPERIMENTAL col method. |
|
| 2 | 3 |
- set reserved_word_quote automatically from driver name |
| 3 | 4 |
0.1685 |
| 4 | 5 |
- insert_at, update_at, delete_at, select_at is DEPRECATED! |
| ... | ... |
@@ -171,6 +171,20 @@ sub assign_param {
|
| 171 | 171 |
return $tag; |
| 172 | 172 |
} |
| 173 | 173 |
|
| 174 |
+sub col {
|
|
| 175 |
+ my ($self, $table, $columns) = @_; |
|
| 176 |
+ |
|
| 177 |
+ # Reserved word quote |
|
| 178 |
+ my $q = $self->reserved_word_quote; |
|
| 179 |
+ |
|
| 180 |
+ # Column clause |
|
| 181 |
+ my @column; |
|
| 182 |
+ $columns ||= []; |
|
| 183 |
+ push @column, "$q$table$q.$q$_$q as $q${table}.$_$q" for @$columns;
|
|
| 184 |
+ |
|
| 185 |
+ return join (', ', @column);
|
|
| 186 |
+} |
|
| 187 |
+ |
|
| 174 | 188 |
sub column {
|
| 175 | 189 |
my ($self, $table, $columns) = @_; |
| 176 | 190 |
|
| ... | ... |
@@ -85,6 +85,23 @@ sub column {
|
| 85 | 85 |
return $self->dbi->column($table, $columns); |
| 86 | 86 |
} |
| 87 | 87 |
|
| 88 |
+sub col {
|
|
| 89 |
+ my ($self, $table, $columns) = @_; |
|
| 90 |
+ |
|
| 91 |
+ $self->{_table_alias} ||= {};
|
|
| 92 |
+ my $dist; |
|
| 93 |
+ $dist = $self->dbi->{_table_alias}{$table}
|
|
| 94 |
+ ? $self->dbi->{_table_alias}{$table}
|
|
| 95 |
+ : $table; |
|
| 96 |
+ |
|
| 97 |
+ $self->dbi->{_model_from} ||= {};
|
|
| 98 |
+ my $model = $self->dbi->{_model_from}->{$dist};
|
|
| 99 |
+ |
|
| 100 |
+ $columns ||= $self->model($model)->columns; |
|
| 101 |
+ |
|
| 102 |
+ return $self->dbi->col($table, $columns); |
|
| 103 |
+} |
|
| 104 |
+ |
|
| 88 | 105 |
sub DESTROY { }
|
| 89 | 106 |
|
| 90 | 107 |
sub method {
|
| ... | ... |
@@ -225,6 +242,18 @@ Create column clause. The follwoing column clause is created. |
| 225 | 242 |
|
| 226 | 243 |
If column names is omitted, C<columns> attribute of the model is used. |
| 227 | 244 |
|
| 245 |
+=head2 C<col> EXPERIMETNAL |
|
| 246 |
+ |
|
| 247 |
+ my $column = $self->col(book => ['author', 'title']); |
|
| 248 |
+ my $column = $self->col('book');
|
|
| 249 |
+ |
|
| 250 |
+Create column clause. The follwoing column clause is created. |
|
| 251 |
+ |
|
| 252 |
+ book.author as "book.author", |
|
| 253 |
+ book.title as "book.title" |
|
| 254 |
+ |
|
| 255 |
+If column names is omitted, C<columns> attribute of the model is used. |
|
| 256 |
+ |
|
| 228 | 257 |
=head2 C<delete> |
| 229 | 258 |
|
| 230 | 259 |
$table->delete(...); |
| ... | ... |
@@ -1457,6 +1457,12 @@ $result = $dbi->select( |
| 1457 | 1457 |
); |
| 1458 | 1458 |
is($result->fetch_first->[0], 'B'); |
| 1459 | 1459 |
|
| 1460 |
+$result = $dbi->select( |
|
| 1461 |
+ table => 'company', relation => {'company.location_id' => 'location.id'},
|
|
| 1462 |
+ column => ['location.name as "location.name"'] |
|
| 1463 |
+); |
|
| 1464 |
+is($result->fetch_first->[0], 'B'); |
|
| 1465 |
+ |
|
| 1460 | 1466 |
test 'Model class'; |
| 1461 | 1467 |
use MyDBI1; |
| 1462 | 1468 |
$dbi = MyDBI1->connect($NEW_ARGS->{0});
|
| ... | ... |
@@ -2516,4 +2522,26 @@ is($row->{key1}, 1);
|
| 2516 | 2522 |
is($row->{key2}, 2);
|
| 2517 | 2523 |
is($row->{key3}, 3);
|
| 2518 | 2524 |
|
| 2525 |
+test 'col'; |
|
| 2526 |
+$dbi = MyDBI7->connect($NEW_ARGS->{0});
|
|
| 2527 |
+$dbi->execute($CREATE_TABLE->{0});
|
|
| 2528 |
+$dbi->execute($CREATE_TABLE->{2});
|
|
| 2529 |
+$dbi->setup_model; |
|
| 2530 |
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
|
|
| 2531 |
+$dbi->insert(table => 'table2', param => {key1 => 1, key3 => 3});
|
|
| 2532 |
+$model = $dbi->model('table1');
|
|
| 2533 |
+$result = $model->select( |
|
| 2534 |
+ column => [$model->col('table2')],
|
|
| 2535 |
+ where => {'table1.key1' => 1}
|
|
| 2536 |
+); |
|
| 2537 |
+is_deeply($result->one, |
|
| 2538 |
+ {'table2.key1' => 1, 'table2.key3' => 3});
|
|
| 2539 |
+ |
|
| 2540 |
+$result = $model->select( |
|
| 2541 |
+ column => [$model->col('table2' => [qw/key1 key3/])],
|
|
| 2542 |
+ where => {'table1.key1' => 1}
|
|
| 2543 |
+); |
|
| 2544 |
+is_deeply($result->one, |
|
| 2545 |
+ {'table2.key1' => 1, 'table2.key3' => 3});
|
|
| 2546 |
+ |
|
| 2519 | 2547 |
=cut |