Showing 3 changed files with 75 additions and 23 deletions
+50 -20
lib/DBIx/Custom.pm
... ...
@@ -1,10 +1,9 @@
1 1
 package DBIx::Custom;
2
+use Object::Simple -base;
2 3
 
3 4
 our $VERSION = '0.1696';
4 5
 use 5.008001;
5 6
 
6
-use Object::Simple -base;
7
-
8 7
 use Carp 'croak';
9 8
 use DBI;
10 9
 use DBIx::Custom::Result;
... ...
@@ -231,8 +230,8 @@ sub dbh {
231 230
     }
232 231
 }
233 232
 
234
-our %DELETE_ARGS
235
-  = map { $_ => 1 } @COMMON_ARGS, qw/where append allow_delete_all where_param/;
233
+our %DELETE_ARGS = map { $_ => 1 } @COMMON_ARGS,
234
+  qw/where append allow_delete_all where_param prefix/;
236 235
 
237 236
 sub delete {
238 237
     my ($self, %args) = @_;
... ...
@@ -257,6 +256,7 @@ sub delete {
257 256
           "must be specified when id is specified " . _subname
258 257
       if defined $id && !defined $primary_key;
259 258
     $primary_key = [$primary_key] unless ref $primary_key eq 'ARRAY';
259
+    my $prefix = delete $args{prefix};
260 260
     
261 261
     # Where
262 262
     $where = $self->_create_param_from_id($id, $primary_key) if defined $id;
... ...
@@ -277,8 +277,10 @@ sub delete {
277 277
     # Delete statement
278 278
     my @sql;
279 279
     my $q = $self->_quote;
280
-    push @sql, "delete from $q$table$q $where_clause";
281
-    push @sql, $append if $append;
280
+    push @sql, "delete";
281
+    push @sql, $prefix if defined $prefix;
282
+    push @sql, "from $q$table$q $where_clause";
283
+    push @sql, $append if defined $append;
282 284
     my $sql = join(' ', @sql);
283 285
     
284 286
     # Execute query
... ...
@@ -537,6 +539,7 @@ sub insert {
537 539
           "must be specified when id is specified " . _subname
538 540
       if defined $id && !defined $primary_key;
539 541
     $primary_key = [$primary_key] unless ref $primary_key eq 'ARRAY';
542
+    my $prefix = delete $args{prefix};
540 543
 
541 544
     # Check arguments
542 545
     foreach my $name (keys %args) {
... ...
@@ -555,8 +558,10 @@ sub insert {
555 558
     
556 559
     # Insert statement
557 560
     my @sql;
558
-    push @sql, "insert into $q$table$q " . $self->insert_param($param);
559
-    push @sql, $append if $append;
561
+    push @sql, "insert";
562
+    push @sql, $prefix if defined $prefix;
563
+    push @sql, "into $q$table$q " . $self->insert_param($param);
564
+    push @sql, $append if defined $append;
560 565
     my $sql = join (' ', @sql);
561 566
     
562 567
     # Execute query
... ...
@@ -757,10 +762,8 @@ sub register_filter {
757 762
     return $self;
758 763
 }
759 764
 
760
-our %SELECT_ARGS
761
-  = map { $_ => 1 } @COMMON_ARGS,
762
-                    qw/column where relation join param where_param wrap
763
-                       prefix/;
765
+our %SELECT_ARGS = map { $_ => 1 } @COMMON_ARGS,
766
+  qw/column where relation join param where_param wrap prefix/;
764 767
 
765 768
 sub select {
766 769
     my ($self, %args) = @_;
... ...
@@ -878,7 +881,7 @@ sub select {
878 881
     $self->_push_relation(\@sql, $tables, $relation, $where_clause eq '' ? 1 : 0);
879 882
     
880 883
     # Append
881
-    push @sql, $append if $append;
884
+    push @sql, $append if defined $append;
882 885
     
883 886
     # Wrap
884 887
     if ($wrap) {
... ...
@@ -1024,8 +1027,8 @@ sub type_rule {
1024 1027
     return $self->{type_rule} || {};
1025 1028
 }
1026 1029
 
1027
-our %UPDATE_ARGS
1028
-  = map { $_ => 1 } @COMMON_ARGS, qw/param where allow_update_all where_param/;
1030
+our %UPDATE_ARGS = map { $_ => 1 } @COMMON_ARGS,
1031
+  qw/param where allow_update_all where_param prefix/;
1029 1032
 
1030 1033
 sub update {
1031 1034
     my $self = shift;
... ...
@@ -1039,9 +1042,9 @@ sub update {
1039 1042
       unless $table;
1040 1043
     my $p = delete $args{param} || {};
1041 1044
     $param  ||= $p;
1042
-    my $where            = delete $args{where} || {};
1043
-    my $where_param      = delete $args{where_param} || {};
1044
-    my $append           = delete $args{append} || '';
1045
+    my $where = delete $args{where} || {};
1046
+    my $where_param = delete $args{where_param} || {};
1047
+    my $append = delete $args{append} || '';
1045 1048
     my $allow_update_all = delete $args{allow_update_all};
1046 1049
     my $id = delete $args{id};
1047 1050
     my $primary_key = delete $args{primary_key};
... ...
@@ -1049,6 +1052,7 @@ sub update {
1049 1052
           "must be specified when id is specified " . _subname
1050 1053
       if defined $id && !defined $primary_key;
1051 1054
     $primary_key = [$primary_key] unless ref $primary_key eq 'ARRAY';
1055
+    my $prefix = delete $args{prefix};
1052 1056
     
1053 1057
     # Check argument names
1054 1058
     foreach my $name (keys %args) {
... ...
@@ -1081,8 +1085,10 @@ sub update {
1081 1085
     # Update statement
1082 1086
     my @sql;
1083 1087
     my $q = $self->_quote;
1084
-    push @sql, "update $q$table$q $update_clause $where_clause";
1085
-    push @sql, $append if $append;
1088
+    push @sql, "update";
1089
+    push @sql, $prefix if defined $prefix;
1090
+    push @sql, "$q$table$q $update_clause $where_clause";
1091
+    push @sql, $append if defined $append;
1086 1092
     
1087 1093
     # SQL
1088 1094
     my $sql = join(' ', @sql);
... ...
@@ -2174,6 +2180,14 @@ The above is same as the followin one.
2174 2180
 
2175 2181
     $dbi->delete(where => {id1 => 4, id2 => 5}, table => 'book');
2176 2182
 
2183
+=item C<prefix> EXPERIMENTAL
2184
+
2185
+    prefix => 'some'
2186
+
2187
+prefix before table name section.
2188
+
2189
+    delete some from book
2190
+
2177 2191
 =item C<query>
2178 2192
 
2179 2193
 Same as C<execute> method's C<query> option.
... ...
@@ -2259,6 +2273,14 @@ The above is same as the followin one.
2259 2273
         table => 'book'
2260 2274
     );
2261 2275
 
2276
+=item C<prefix> EXPERIMENTAL
2277
+
2278
+    prefix => 'or replace'
2279
+
2280
+prefix before table name section
2281
+
2282
+    insert or replace into book
2283
+
2262 2284
 =item C<primary_key>
2263 2285
 
2264 2286
     primary_key => 'id'
... ...
@@ -2767,6 +2789,14 @@ If C<update> method's arguments is odd numbers, first argument is received as C<
2767 2789
 
2768 2790
     $dbi->update({title => 'Perl'}, table => 'book', where => {id => 2});
2769 2791
 
2792
+=item C<prefix> EXPERIMENTAL
2793
+
2794
+    prefix => 'or replace'
2795
+
2796
+prefix before table name section
2797
+
2798
+    update or replace book
2799
+
2770 2800
 =item C<primary_key>
2771 2801
 
2772 2802
     primary_key => 'id'
-3
lib/DBIx/Custom/Guide.pod
... ...
@@ -249,9 +249,6 @@ use C<execute> to execute SQL.
249 249
     my $sql = "select * from book where title = :title and author like :author;"
250 250
     $dbi->execute($sql, {title => 'Perl', author => '%Ken%'});
251 251
 
252
-You can specify values embedded into place holder as hash reference using
253
-C<param> option.
254
-
255 252
 You can specify C<filter> at C<execute>.
256 253
 
257 254
     $dbi->execute($sql, {title => 'Perl', author => '%Ken%'}
+25
t/dbix-custom-core-sqlite.t
... ...
@@ -299,6 +299,14 @@ $result = $dbi->execute($SELECT_SOURCES->{0});
299 299
 $rows   = $result->all;
300 300
 is_deeply($rows, [{key1 => 1, key2 => 2}, {key1 => 3, key2 => 4}], "basic");
301 301
 
302
+$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
303
+$dbi->execute("create table table1 (key1 char(255), key2 char(255), primary key(key1))");
304
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
305
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 4}, prefix => 'or replace');
306
+$result = $dbi->execute($SELECT_SOURCES->{0});
307
+$rows   = $result->all;
308
+is_deeply($rows, [{key1 => 1, key2 => 4}], "basic");
309
+
302 310
 test 'update';
303 311
 $dbi = DBIx::Custom->connect($NEW_ARGS->{0});
304 312
 $dbi->execute($CREATE_TABLE->{1});
... ...
@@ -424,6 +432,15 @@ is_deeply($rows, [{key1 => 1, key2 => 11, key3 => 3, key4 => 4, key5 => 5},
424 432
                   {key1 => 6, key2 => 7,  key3 => 8, key4 => 9, key5 => 10}],
425 433
                   "basic");
426 434
 
435
+$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
436
+$dbi->execute("create table table1 (key1 char(255), key2 char(255), primary key(key1))");
437
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
438
+$dbi->update(table => 'table1', param => {key2 => 4},
439
+  where => {key1 => 1}, prefix => 'or replace');
440
+$result = $dbi->execute($SELECT_SOURCES->{0});
441
+$rows   = $result->all;
442
+is_deeply($rows, [{key1 => 1, key2 => 4}], "basic");
443
+
427 444
 test 'update_all';
428 445
 $dbi = DBIx::Custom->connect($NEW_ARGS->{0});
429 446
 $dbi->execute($CREATE_TABLE->{1});
... ...
@@ -494,6 +511,14 @@ $dbi->delete(
494 511
 $result = $dbi->select(table => 'table1');
495 512
 is_deeply($result->all, [{key1 => 3, key2 => 4}], 'delete() where');
496 513
 
514
+$dbi = DBIx::Custom->connect($NEW_ARGS->{0});
515
+$dbi->execute("create table table1 (key1 char(255), key2 char(255), primary key(key1))");
516
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
517
+$dbi->delete(table => 'table1', where => {key1 => 1}, prefix => '    ');
518
+$result = $dbi->execute($SELECT_SOURCES->{0});
519
+$rows   = $result->all;
520
+is_deeply($rows, [], "basic");
521
+
497 522
 test 'delete error';
498 523
 $dbi = DBIx::Custom->connect($NEW_ARGS->{0});
499 524
 $dbi->execute($CREATE_TABLE->{0});