| ... | ... |
@@ -1,5 +1,6 @@ |
| 1 | 1 |
0.1698 |
| 2 | 2 |
- fixed DBIx::Custom::Where to_string method small bug |
| 3 |
+ - added EXPERIMENTAL execute method table_alias option |
|
| 3 | 4 |
0.1697 |
| 4 | 5 |
- added EXPERIMENTAL map_param method |
| 5 | 6 |
0.1696 |
| ... | ... |
@@ -1,7 +1,7 @@ |
| 1 | 1 |
package DBIx::Custom; |
| 2 | 2 |
use Object::Simple -base; |
| 3 | 3 |
|
| 4 |
-our $VERSION = '0.1697'; |
|
| 4 |
+our $VERSION = '0.1698'; |
|
| 5 | 5 |
use 5.008001; |
| 6 | 6 |
|
| 7 | 7 |
use Carp 'croak'; |
| ... | ... |
@@ -19,7 +19,7 @@ use constant DEBUG => $ENV{DBIX_CUSTOM_DEBUG} || 0;
|
| 19 | 19 |
use constant DEBUG_ENCODING => $ENV{DBIX_CUSTOM_DEBUG_ENCODING} || 'UTF-8';
|
| 20 | 20 |
|
| 21 | 21 |
our @COMMON_ARGS = qw/bind_type table query filter id primary_key |
| 22 |
- type_rule_off type_rule1_off type_rule2_off type/; |
|
| 22 |
+ type_rule_off type_rule1_off type_rule2_off type table_alias/; |
|
| 23 | 23 |
|
| 24 | 24 |
has [qw/connector dsn password quote user/], |
| 25 | 25 |
cache => 0, |
| ... | ... |
@@ -305,6 +305,7 @@ sub execute {
|
| 305 | 305 |
2 => delete $args{type_rule2_off}
|
| 306 | 306 |
}; |
| 307 | 307 |
my $query_return = delete $args{query};
|
| 308 |
+ my $table_alias = delete $args{table_alias} || {};
|
|
| 308 | 309 |
|
| 309 | 310 |
# Check argument names |
| 310 | 311 |
foreach my $name (keys %args) {
|
| ... | ... |
@@ -340,11 +341,17 @@ sub execute {
|
| 340 | 341 |
foreach my $i (1 .. 2) {
|
| 341 | 342 |
unless ($type_rule_off_parts->{$i}) {
|
| 342 | 343 |
my $into = $self->{"_into$i"} || {};
|
| 344 |
+ |
|
| 345 |
+ my $alias = $table; |
|
| 346 |
+ $table = $table_alias->{$alias}
|
|
| 347 |
+ if defined $alias && $table_alias->{$alias};
|
|
| 348 |
+ |
|
| 343 | 349 |
if (defined $table && $into->{$table} &&
|
| 344 | 350 |
(my $rule = $into->{$table}->{$column}))
|
| 345 | 351 |
{
|
| 346 | 352 |
$type_filters->{$i}->{$column} = $rule;
|
| 347 | 353 |
$type_filters->{$i}->{"$table.$column"} = $rule;
|
| 354 |
+ $type_filters->{$i}->{"$alias.$column"} = $rule if $alias ne $table;
|
|
| 348 | 355 |
} |
| 349 | 356 |
} |
| 350 | 357 |
} |
| ... | ... |
@@ -2125,6 +2132,14 @@ This is used to bind parameter by C<bind_param> of statment handle. |
| 2125 | 2132 |
|
| 2126 | 2133 |
$sth->bind_param($pos, $value, DBI::SQL_BLOB); |
| 2127 | 2134 |
|
| 2135 |
+=item C<table_alias> EXPERIMENTAL |
|
| 2136 |
+ |
|
| 2137 |
+ table_alias => {user => 'hiker'}
|
|
| 2138 |
+ |
|
| 2139 |
+Table alias. Key is real table name, value is alias table name. |
|
| 2140 |
+If you set C<table_alias>, you can enable C<into1> and C<into2> type rule |
|
| 2141 |
+on alias table name. |
|
| 2142 |
+ |
|
| 2128 | 2143 |
=item C<type_rule_off> EXPERIMENTAL |
| 2129 | 2144 |
|
| 2130 | 2145 |
type_rule_off => 1 |
| ... | ... |
@@ -3272,4 +3272,18 @@ $param = $dbi->map_param( |
| 3272 | 3272 |
); |
| 3273 | 3273 |
is_deeply($param, {'book.price' => '%a'});
|
| 3274 | 3274 |
|
| 3275 |
+ |
|
| 3276 |
+test 'table_alias'; |
|
| 3277 |
+$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
|
| 3278 |
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
| 3279 |
+$dbi->type_rule( |
|
| 3280 |
+ into1 => {
|
|
| 3281 |
+ date => sub { uc $_[0] }
|
|
| 3282 |
+ } |
|
| 3283 |
+); |
|
| 3284 |
+$dbi->execute("insert into table1 (key1) values (:table2.key1)", {'table2.key1' => 'a'},
|
|
| 3285 |
+ table_alias => {table2 => 'table1'});
|
|
| 3286 |
+$result = $dbi->select(table => 'table1'); |
|
| 3287 |
+is($result->one->{key1}, 'A');
|
|
| 3288 |
+ |
|
| 3275 | 3289 |
=cut |