Showing 4 changed files with 29 additions and 12 deletions
+22 -3
lib/DBIx/Custom.pm
... ...
@@ -1235,8 +1235,27 @@ sub _create_query {
1235 1235
     unless ($query) {
1236 1236
 
1237 1237
         # Create query
1238
-        my $builder = $self->query_builder;
1239
-        $query = $builder->build_query($source);
1238
+        if (exists $ENV{DBIX_CUSTOM_TAG_PARSE} && !$ENV{DBIX_CUSTOM_TAG_PARSE}) {
1239
+            $source ||= '';
1240
+            my $columns = [];
1241
+            my $c = $self->{safety_character} || $self->safety_character;
1242
+            my %duplicate;
1243
+            my $duplicate;
1244
+            # Parameter regex
1245
+            $source =~ s/([0-9]):/$1\\:/g;
1246
+            while ($source =~ /(^|.*?[^\\]):([$c\.]+)(?:\{(.*?)\})?(.*)/sg) {
1247
+                push @$columns, $2;
1248
+                $duplicate = 1 if ++$duplicate{$columns->[-1]} > 1;
1249
+                $source = defined $3 ? "$1$2 $3 ?$4" : "$1?$4";
1250
+            }
1251
+            $source =~ s/\\:/:/g if index($source, "\\:") != -1;
1252
+
1253
+            # Create query
1254
+            $query = {sql => $source, columns => $columns, duplicate => $duplicate};
1255
+        }
1256
+        else {
1257
+            $query = $self->query_builder->build_query($source);
1258
+        }
1240 1259
         
1241 1260
         # Save query to cache
1242 1261
         $self->cache_method->(
... ...
@@ -1268,7 +1287,7 @@ sub _create_query {
1268 1287
     $query->{sth} = $sth;
1269 1288
     
1270 1289
     # Set filters
1271
-    $query->{filters} = $self->filters;
1290
+    $query->{filters} = $self->{filters} || $self->filters;
1272 1291
     
1273 1292
     return $query;
1274 1293
 }
+2 -7
lib/DBIx/Custom/QueryBuilder.pm
... ...
@@ -14,12 +14,7 @@ sub build_query {
14 14
     my ($self, $sql) = @_;
15 15
     
16 16
     # Parse tag. tag is DEPRECATED!
17
-    my $tag_parse;
18
-    $tag_parse = $ENV{DBIX_CUSTOM_TAG_PARSE}
19
-      if exists $ENV{DBIX_CUSTOM_TAG_PARSE};
20
-    $tag_parse = $self->dbi->{tag_parse} unless defined $tag_parse;
21
-    
22
-    if ($tag_parse && $sql =~ /(\s|^)\{/) {
17
+    if ($self->dbi->{tag_parse} && $sql =~ /(\s|^)\{/) {
23 18
         my $query = $self->_parse_tag($sql);
24 19
         my $tag_count = delete $query->{tag_count};
25 20
         warn qq/Tag system such as {? name} is DEPRECATED! / .
... ...
@@ -52,7 +47,7 @@ sub build_query {
52 47
     $sql =~ s/\\:/:/g if index($sql, "\\:") != -1;
53 48
 
54 49
     # Create query
55
-    return {sql => $sql, columns => $columns};
50
+    return {sql => $sql, columns => $columns, duplicate => 1};
56 51
 }
57 52
 
58 53
 # DEPRECATED!
+2 -1
lib/DBIx/Custom/Where.pm
... ...
@@ -39,7 +39,8 @@ sub to_string {
39 39
     $self->{_query_builder} = $self->dbi->query_builder;
40 40
     $self->{_safety_character} = $self->dbi->safety_character;
41 41
     $self->{_quote} = $self->dbi->_quote;
42
-    $self->{_tag_parse} = $self->dbi->{tag_parse};
42
+    $self->{_tag_parse} = exists $ENV{DBIX_CUSTOM_TAG_PARSE}
43
+      ? $ENV{DBIX_CUSTOM_TAG_PARSE} : $self->dbi->{tag_parse};
43 44
     $self->_parse($clause, $where, $count, 'and');
44 45
 
45 46
     # Stringify
+3 -1
t/common.t
... ...
@@ -3056,6 +3056,8 @@ test 'DBIX_CUSTOM_TAG_PARSE environment variable';
3056 3056
     $dbi->insert({$key1 => 1, $key2 => 1}, table => $table1);
3057 3057
     eval {$dbi->execute("select * from $table1 where {= $key1}", {$key1 => 1})};
3058 3058
     ok($@);
3059
+    eval {$dbi->select(table => $table1, where => ["{= $key1}", {$key1 => 1}]) };
3060
+    ok($@);
3059 3061
     delete$ENV{DBIX_CUSTOM_TAG_PARSE};
3060 3062
 }
3061 3063
 
... ...
@@ -3065,7 +3067,7 @@ test 'DBIX_CUSTOM_TAG_PARSE environment variable';
3065 3067
     eval { $dbi->execute("drop table $table1") };
3066 3068
     $dbi->execute($create_table1);
3067 3069
     $dbi->insert({$key1 => 1, $key2 => 1}, table => $table1);
3068
-    is($dbi->select(table => $table1)->one->{$key1}, 1);
3070
+    is($dbi->select(table => $table1, wher => {$key1 => 1})->one->{$key1}, 1);
3069 3071
     delete$ENV{DBIX_CUSTOM_TAG_PARSE};
3070 3072
 }
3071 3073