Showing 4 changed files with 39 additions and 39 deletions
+2
Changes
... ...
@@ -1,3 +1,5 @@
1
+0.1714
2
+    - fixed not backword compatible change in 0.1712 query_buider
1 3
 0.1713
2 4
     - fixed memory leak and connection increasing bug when using model.
3 5
 0.1712
+22 -25
lib/DBIx/Custom.pm
... ...
@@ -1,7 +1,7 @@
1 1
 package DBIx::Custom;
2 2
 use Object::Simple -base;
3 3
 
4
-our $VERSION = '0.1713';
4
+our $VERSION = '0.1714';
5 5
 use 5.008001;
6 6
 
7 7
 use Carp 'croak';
... ...
@@ -15,7 +15,7 @@ use DBIx::Custom::Tag;
15 15
 use DBIx::Custom::Order;
16 16
 use DBIx::Custom::Util qw/_array_to_hash _subname/;
17 17
 use Encode qw/encode encode_utf8 decode_utf8/;
18
-use Scalar::Util qw/weaken isweak/;
18
+use Scalar::Util qw/weaken/;
19 19
 
20 20
 use constant DEBUG => $ENV{DBIX_CUSTOM_DEBUG} || 0;
21 21
 use constant DEBUG_ENCODING => $ENV{DBIX_CUSTOM_DEBUG_ENCODING} || 'UTF-8';
... ...
@@ -52,6 +52,12 @@ has [qw/connector dsn password quote user exclude_table/],
52 52
     },
53 53
     last_sql => '',
54 54
     models => sub { {} },
55
+    query_builder => sub {
56
+        my $self = shift;
57
+        my $builder = DBIx::Custom::QueryBuilder->new(dbi => $self);
58
+        weaken $builder->{dbi};
59
+        return $builder;
60
+    },
55 61
     result_class  => 'DBIx::Custom::Result',
56 62
     safety_character => '\w',
57 63
     separator => '.',
... ...
@@ -252,9 +258,7 @@ sub delete {
252 258
 
253 259
 sub delete_all { shift->delete(allow_delete_all => 1, @_) }
254 260
 
255
-sub DESTROY {
256
-
257
-}
261
+sub DESTROY { }
258 262
 
259 263
 sub create_model {
260 264
     my $self = shift;
... ...
@@ -269,7 +273,7 @@ sub create_model {
269 273
     
270 274
     # Create model
271 275
     my $model = $model_class->new($args);
272
-    weaken $self unless isweak $self;
276
+    weaken $model->{dbi};
273 277
     $model->name($model_name) unless $model->name;
274 278
     $model->table($model_table) unless $model->table;
275 279
     
... ...
@@ -746,24 +750,9 @@ sub new {
746 750
         croak qq{"$attr" is wrong name } . _subname
747 751
           unless $self->can($attr);
748 752
     }
749
-    
750
-    return $self;
751
-}
752
-
753
-my $not_exists = bless {}, 'DBIx::Custom::NotExists';
754
-sub not_exists { $not_exists }
755
-
756
-sub order {
757
-    my $self = shift;
758
-    return DBIx::Custom::Order->new(dbi => $self, @_);
759
-}
760 753
 
761
-sub query_builder {
762
-    my $self = shift;
763
-    my $builder = DBIx::Custom::QueryBuilder->new(dbi => $self);
764
-    
765 754
     # DEPRECATED
766
-    $builder->register_tag(
755
+    $self->{_tags} = {
767 756
         '?'     => \&DBIx::Custom::Tag::placeholder,
768 757
         '='     => \&DBIx::Custom::Tag::equal,
769 758
         '<>'    => \&DBIx::Custom::Tag::not_equal,
... ...
@@ -775,9 +764,17 @@ sub query_builder {
775 764
         'in'    => \&DBIx::Custom::Tag::in,
776 765
         'insert_param' => \&DBIx::Custom::Tag::insert_param,
777 766
         'update_param' => \&DBIx::Custom::Tag::update_param
778
-    );
779
-    $builder->register_tag($self->{_tags} || {});
780
-    return $builder;
767
+    };
768
+    
769
+    return $self;
770
+}
771
+
772
+my $not_exists = bless {}, 'DBIx::Custom::NotExists';
773
+sub not_exists { $not_exists }
774
+
775
+sub order {
776
+    my $self = shift;
777
+    return DBIx::Custom::Order->new(dbi => $self, @_);
781 778
 }
782 779
 
783 780
 sub register_filter {
+2 -1
lib/DBIx/Custom/QueryBuilder.pm
... ...
@@ -248,8 +248,9 @@ sub _parse_tag {
248 248
                 next;
249 249
             }
250 250
             # Get tag
251
+            $self->dbi->{_tags} ||= {};
251 252
             my $tag = $self->tag_processors->{$tag_name}
252
-                             || $self->tags->{$tag_name};
253
+                             || $self->dbi->{_tags}->{$tag_name};
253 254
             # Tag is not registered
254 255
             croak qq{Tag "$tag_name" is not registered } . _subname
255 256
               unless $tag;
+13 -13
t/common.t
... ...
@@ -4,6 +4,7 @@ use warnings;
4 4
 use Encode qw/encode_utf8/;
5 5
 use FindBin;
6 6
 use lib "$FindBin::Bin/common";
7
+use Scalar::Util 'isweak';
7 8
 
8 9
 my $dbi;
9 10
 
... ...
@@ -208,6 +209,7 @@ $dbi->insert({key1 => '01-01'}, table => 'table1');
208 209
 $result = $dbi->select(table => 'table1');
209 210
 is($result->one->{key1}, '2010-01-01');
210 211
 
212
+$DB::single = 1;
211 213
 $dbi = DBIx::Custom->connect;
212 214
 eval { $dbi->execute('drop table table1') };
213 215
 $dbi->execute($create_table1_type);
... ...
@@ -3142,6 +3144,7 @@ is_deeply($result->all, [{'table1-key1' => 1, 'table1-key2' => 3},
3142 3144
   {'table1-key1' => 2, 'table1-key2' => 2}]);
3143 3145
 
3144 3146
 test 'tag_parse';
3147
+$DB::single = 1;
3145 3148
 $dbi = DBIx::Custom->connect;
3146 3149
 $dbi->tag_parse(0);
3147 3150
 eval { $dbi->execute('drop table table1') };
... ...
@@ -3327,14 +3330,16 @@ $datas = [
3327 3330
 
3328 3331
 for (my $i = 0; $i < @$datas; $i++) {
3329 3332
     my $data = $datas->[$i];
3330
-    my $builder = DBIx::Custom->new->query_builder;
3333
+    my $dbi = DBIx::Custom->new;
3334
+    my $builder = $dbi->query_builder;
3331 3335
     my $query = $builder->build_query($data->{source});
3332 3336
     is($query->{sql}, $data->{sql_expected}, "$data->{name} : sql");
3333 3337
     is_deeply($query->columns, $data->{columns_expected}, "$data->{name} : columns");
3334 3338
 }
3335 3339
 
3336
-$builder = DBIx::Custom->new->query_builder;
3337
-$ret_val = $builder->register_tag(
3340
+$dbi = DBIx::Custom->new;
3341
+$builder = $dbi->query_builder;
3342
+$dbi->register_tag(
3338 3343
     p => sub {
3339 3344
         my @args = @_;
3340 3345
         
... ...
@@ -3347,9 +3352,6 @@ $ret_val = $builder->register_tag(
3347 3352
 $query = $builder->build_query("{p a b}");
3348 3353
 is($query->{sql}, "? a b;", "register_tag sql");
3349 3354
 is_deeply($query->{columns}, [2], "register_tag columns");
3350
-isa_ok($ret_val, 'DBIx::Custom::QueryBuilder');
3351
-
3352
-$builder = DBIx::Custom->new->query_builder;
3353 3355
 
3354 3356
 eval{$builder->build_query('{? }')};
3355 3357
 like($@, qr/\QColumn name must be specified in tag "{? }"/, "? not arguments");
... ...
@@ -3357,35 +3359,33 @@ like($@, qr/\QColumn name must be specified in tag "{? }"/, "? not arguments");
3357 3359
 eval{$builder->build_query("{a }")};
3358 3360
 like($@, qr/\QTag "a" is not registered/, "tag not exist");
3359 3361
 
3360
-$builder->register_tag({
3362
+$dbi->register_tag({
3361 3363
     q => 'string'
3362 3364
 });
3363 3365
 
3364 3366
 eval{$builder->build_query("{q}", {})};
3365 3367
 like($@, qr/Tag "q" must be sub reference/, "tag not code ref");
3366 3368
 
3367
-$builder->register_tag({
3369
+$dbi->register_tag({
3368 3370
    r => sub {} 
3369 3371
 });
3370 3372
 
3371 3373
 eval{$builder->build_query("{r}")};
3372 3374
 like($@, qr/\QTag "r" must return [STRING, ARRAY_REFERENCE]/, "tag return noting");
3373 3375
 
3374
-$builder->register_tag({
3376
+$dbi->register_tag({
3375 3377
    s => sub { return ["a", ""]} 
3376 3378
 });
3377 3379
 
3378 3380
 eval{$builder->build_query("{s}")};
3379 3381
 like($@, qr/\QTag "s" must return [STRING, ARRAY_REFERENCE]/, "tag return not array columns");
3380 3382
 
3381
-$builder->register_tag(
3383
+$dbi->register_tag(
3382 3384
     t => sub {return ["a", []]}
3383 3385
 );
3384 3386
 
3385 3387
 
3386
-test 'General error case';
3387
-$builder = DBIx::Custom->new->query_builder;
3388
-$builder->register_tag(
3388
+$dbi->register_tag(
3389 3389
     a => sub {
3390 3390
         return ["? ? ?", ['']];
3391 3391
     }