Showing 3 changed files with 42 additions and 6 deletions
+3
Changes
... ...
@@ -1,3 +1,6 @@
1
+0.1705
2
+    - insert and update method's param can set constant value by scalara reference
3
+      such as {date => \"NOW()"} This is EXPERIMENTAL.
1 4
 0.1704
2 5
     - added quote method's two character support like []
3 6
       for Microsoft SQL Server and Access
+20 -6
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.1704';
4
+our $VERSION = '0.1705';
5 5
 use 5.008001;
6 6
 
7 7
 use Carp 'croak';
... ...
@@ -84,12 +84,15 @@ sub assign_param {
84 84
     # Create set tag
85 85
     my @params;
86 86
     my $safety = $self->safety_character;
87
-    foreach my $column (keys %$param) {
87
+    foreach my $column (sort keys %$param) {
88 88
         croak qq{"$column" is not safety column name } . _subname
89 89
           unless $column =~ /^[$safety\.]+$/;
90 90
         my $column_quote = $self->_q($column);
91 91
         $column_quote =~ s/\./$self->_q(".")/e;
92
-        push @params, "$column_quote = :$column";
92
+        push @params, ref $param->{$column} eq 'SCALAR'
93
+          ? "$column_quote = " . ${$param->{$column}}
94
+          : "$column_quote = :$column";
95
+
93 96
     }
94 97
     my $tag = join(', ', @params);
95 98
     
... ...
@@ -515,13 +518,14 @@ sub insert_param {
515 518
     my $safety = $self->safety_character;
516 519
     my @columns;
517 520
     my @placeholders;
518
-    foreach my $column (keys %$param) {
521
+    foreach my $column (sort keys %$param) {
519 522
         croak qq{"$column" is not safety column name } . _subname
520 523
           unless $column =~ /^[$safety\.]+$/;
521 524
         my $column_quote = $self->_q($column);
522 525
         $column_quote =~ s/\./$self->_q(".")/e;
523 526
         push @columns, $column_quote;
524
-        push @placeholders, ":$column";
527
+        push @placeholders, ref $param->{$column} eq 'SCALAR'
528
+          ? ${$param->{$column}} : ":$column";
525 529
     }
526 530
     
527 531
     return '(' . join(', ', @columns) . ') ' . 'values ' .
... ...
@@ -2346,6 +2350,11 @@ Options is same as C<delete>.
2346 2350
 Execute insert statement. First argument is row data. Return value is
2347 2351
 affected row count.
2348 2352
 
2353
+If you want to set constant value to row data, use scalar reference
2354
+as parameter value.
2355
+
2356
+    {date => \"NOW()"}
2357
+
2349 2358
 The following opitons are available.
2350 2359
 
2351 2360
 =over 4
... ...
@@ -2911,7 +2920,12 @@ This option is for Oracle and SQL Server paging process.
2911 2920
 
2912 2921
     $dbi->update({title => 'Perl'}, table  => 'book', where  => {id => 4});
2913 2922
 
2914
-Execute update statement. First argument is update data.
2923
+Execute update statement. First argument is update row data.
2924
+
2925
+If you want to set constant value to row data, use scalar reference
2926
+as parameter value.
2927
+
2928
+    {date => \"NOW()"}
2915 2929
 
2916 2930
 The following opitons are available.
2917 2931
 
+19
t/dbix-custom-core-sqlite.t
... ...
@@ -307,6 +307,14 @@ $result = $dbi->execute($SELECT_SOURCES->{0});
307 307
 $rows   = $result->all;
308 308
 is_deeply($rows, [{key1 => 1, key2 => 4}], "basic");
309 309
 
310
+$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
311
+$dbi->execute($CREATE_TABLE->{0});
312
+$dbi->insert(table => 'table1', param => {key1 => \"'1'", key2 => 2});
313
+$dbi->insert(table => 'table1', param => {key1 => 3, key2 => 4});
314
+$result = $dbi->execute($SELECT_SOURCES->{0});
315
+$rows   = $result->all;
316
+is_deeply($rows, [{key1 => 1, key2 => 2}, {key1 => 3, key2 => 4}], "basic");
317
+
310 318
 test 'update';
311 319
 $dbi = DBIx::Custom->connect($NEW_ARGS->{0});
312 320
 $dbi->execute($CREATE_TABLE->{1});
... ...
@@ -441,6 +449,17 @@ $result = $dbi->execute($SELECT_SOURCES->{0});
441 449
 $rows   = $result->all;
442 450
 is_deeply($rows, [{key1 => 1, key2 => 4}], "basic");
443 451
 
452
+$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
453
+$dbi->execute($CREATE_TABLE->{1});
454
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5});
455
+$dbi->insert(table => 'table1', param => {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10});
456
+$dbi->update(table => 'table1', param => {key2 => \"'11'"}, where => {key1 => 1});
457
+$result = $dbi->execute($SELECT_SOURCES->{0});
458
+$rows   = $result->all;
459
+is_deeply($rows, [{key1 => 1, key2 => 11, key3 => 3, key4 => 4, key5 => 5},
460
+                  {key1 => 6, key2 => 7,  key3 => 8, key4 => 9, key5 => 10}],
461
+                  "basic");
462
+
444 463
 test 'update_all';
445 464
 $dbi = DBIx::Custom->connect($NEW_ARGS->{0});
446 465
 $dbi->execute($CREATE_TABLE->{1});