... | ... |
@@ -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", |