| ... | ... |
@@ -937,8 +937,6 @@ sub q {
|
| 937 | 937 |
|
| 938 | 938 |
my $quote = $self->{reserved_word_quote}
|
| 939 | 939 |
|| $self->{quote} || $self->quote || '';
|
| 940 |
- return "$quote$value$quote" |
|
| 941 |
- if !$quotemeta && ($quote eq '`' || $quote eq '"'); |
|
| 942 | 940 |
|
| 943 | 941 |
my $q = substr($quote, 0, 1) || ''; |
| 944 | 942 |
my $p; |
| ... | ... |
@@ -952,7 +950,12 @@ sub q {
|
| 952 | 950 |
$p = quotemeta($p); |
| 953 | 951 |
} |
| 954 | 952 |
|
| 955 |
- return "$q$value$p"; |
|
| 953 |
+ if ($value =~ /\./) {
|
|
| 954 |
+ my @values = split /\./, $value; |
|
| 955 |
+ for my $v (@values) { $v = "$q$v$p" }
|
|
| 956 |
+ return join '.', @values; |
|
| 957 |
+ } |
|
| 958 |
+ else { return "$q$value$p" }
|
|
| 956 | 959 |
} |
| 957 | 960 |
|
| 958 | 961 |
sub register_filter {
|
| ... | ... |
@@ -2049,8 +2052,8 @@ sub _push_relation {
|
| 2049 | 2052 |
if (keys %{$relation || {}}) {
|
| 2050 | 2053 |
$$sql .= $need_where ? 'where ' : 'and '; |
| 2051 | 2054 |
for my $rcolumn (keys %$relation) {
|
| 2052 |
- my $table1 = (split (/\./, $rcolumn))[0]; |
|
| 2053 |
- my $table2 = (split (/\./, $relation->{$rcolumn}))[0];
|
|
| 2055 |
+ my ($table1) = $rcolumn =~ /^(.+)\.(.+)$/; |
|
| 2056 |
+ my ($table2) = $relation->{$rcolumn} =~ /^(.+)\.(.+)$/;
|
|
| 2054 | 2057 |
push @$tables, ($table1, $table2); |
| 2055 | 2058 |
$$sql .= "$rcolumn = " . $relation->{$rcolumn} . 'and ';
|
| 2056 | 2059 |
} |
| ... | ... |
@@ -2064,8 +2067,8 @@ sub _add_relation_table {
|
| 2064 | 2067 |
|
| 2065 | 2068 |
if (keys %{$relation || {}}) {
|
| 2066 | 2069 |
for my $rcolumn (keys %$relation) {
|
| 2067 |
- my $table1 = (split (/\./, $rcolumn))[0]; |
|
| 2068 |
- my $table2 = (split (/\./, $relation->{$rcolumn}))[0];
|
|
| 2070 |
+ my ($table1) = $rcolumn =~ /^(.+)\.(.+)$/; |
|
| 2071 |
+ my ($table2) = $relation->{$rcolumn} =~ /^(.+)\.(.+)$/;
|
|
| 2069 | 2072 |
my $table1_exists; |
| 2070 | 2073 |
my $table2_exists; |
| 2071 | 2074 |
for my $table (@$tables) {
|
| ... | ... |
@@ -0,0 +1,69 @@ |
| 1 |
+use strict; |
|
| 2 |
+use warnings; |
|
| 3 |
+ |
|
| 4 |
+use FindBin; |
|
| 5 |
+use lib "$FindBin::Bin/common"; |
|
| 6 |
+$ENV{DBIX_CUSTOM_TEST_RUN} = 1;
|
|
| 7 |
+ |
|
| 8 |
+use DBIx::Custom; |
|
| 9 |
+{
|
|
| 10 |
+ package DBIx::Custom; |
|
| 11 |
+ no warnings 'redefine'; |
|
| 12 |
+ |
|
| 13 |
+ my $table1 = 'main.table1'; |
|
| 14 |
+ my $table2 = 'main.table2'; |
|
| 15 |
+ my $table2_alias = 'main.table2_alias'; |
|
| 16 |
+ my $table3 = 'main.table3'; |
|
| 17 |
+ my $key1 = 'key1'; |
|
| 18 |
+ my $key2 = 'key2'; |
|
| 19 |
+ my $key3 = 'key3'; |
|
| 20 |
+ my $key4 = 'key4'; |
|
| 21 |
+ my $key5 = 'key5'; |
|
| 22 |
+ my $key6 = 'key6'; |
|
| 23 |
+ my $key7 = 'key7'; |
|
| 24 |
+ my $key8 = 'key8'; |
|
| 25 |
+ my $key9 = 'key9'; |
|
| 26 |
+ my $key10 = 'key10'; |
|
| 27 |
+ |
|
| 28 |
+ has table1 => $table1; |
|
| 29 |
+ has table2 => $table2; |
|
| 30 |
+ has table2_alias => $table2_alias; |
|
| 31 |
+ has table3 => $table3; |
|
| 32 |
+ has key1 => $key1; |
|
| 33 |
+ has key2 => $key2; |
|
| 34 |
+ has key3 => $key3; |
|
| 35 |
+ has key4 => $key4; |
|
| 36 |
+ has key5 => $key5; |
|
| 37 |
+ has key6 => $key6; |
|
| 38 |
+ has key7 => $key7; |
|
| 39 |
+ has key8 => $key8; |
|
| 40 |
+ has key9 => $key9; |
|
| 41 |
+ has key10 => $key10; |
|
| 42 |
+ |
|
| 43 |
+ my $date_typename = 'Date'; |
|
| 44 |
+ my $datetime_typename = 'Datetime'; |
|
| 45 |
+ |
|
| 46 |
+ sub date_typename { lc $date_typename }
|
|
| 47 |
+ sub datetime_typename { lc $datetime_typename }
|
|
| 48 |
+ |
|
| 49 |
+ my $date_datatype = 'Date'; |
|
| 50 |
+ my $datetime_datatype = 'Datetime'; |
|
| 51 |
+ |
|
| 52 |
+ sub date_datatype { lc $date_datatype }
|
|
| 53 |
+ sub datetime_datatype { lc $datetime_datatype }
|
|
| 54 |
+ |
|
| 55 |
+ has dsn => 'dbi:SQLite:dbname=:memory:'; |
|
| 56 |
+ sub create_table1 { "create table $table1 ($key1 varchar, $key2 varchar)" }
|
|
| 57 |
+ sub create_table1_2 {"create table $table1 ($key1 varchar, $key2 varchar, $key3 varchar, key4 varchar, key5 varchar)" }
|
|
| 58 |
+ sub create_table1_type { "create table $table1 ($key1 $date_typename, $key2 $datetime_typename)" }
|
|
| 59 |
+ |
|
| 60 |
+ sub create_table1_highperformance { "create table $table1 (key1 varchar, key2 varchar, key3 varchar, key4 varchar, key5 varchar, key6 varchar, key7 varchar)" }
|
|
| 61 |
+ |
|
| 62 |
+ sub create_table2 { "create table $table2 ($key1 varchar, $key3 varchar)" }
|
|
| 63 |
+ sub create_table2_2 { "create table $table2 ($key1 varchar, $key2 varchar, $key3 varchar)" }
|
|
| 64 |
+ sub create_table3 { "create table $table3 ($key1 varchar, $key2 varchar, $key3 varchar)" }
|
|
| 65 |
+ sub create_table_reserved { 'create table "table" ("select" varchar, "update" varchar)' }
|
|
| 66 |
+ |
|
| 67 |
+} |
|
| 68 |
+ |
|
| 69 |
+require "$FindBin::Bin/common.t"; |
| ... | ... |
@@ -1318,6 +1318,7 @@ is_deeply($rows, [{$key1 => 1, $key2 => 2}], "filter");
|
| 1318 | 1318 |
eval { $dbi->execute("drop table $table2") };
|
| 1319 | 1319 |
$dbi->execute($create_table2); |
| 1320 | 1320 |
$dbi->insert({$key1 => 1, $key3 => 5}, table => $table2);
|
| 1321 |
+$DB::single = 1; |
|
| 1321 | 1322 |
$rows = $dbi->select( |
| 1322 | 1323 |
table => [$table1, $table2], |
| 1323 | 1324 |
column => "$table1.$key1 as ${table1}_$key1, $table2.$key1 as ${table2}_$key1, $key2, $key3",
|