Showing 6 changed files with 161 additions and 55 deletions
+5 -2
t/common-mysql.t
... ...
@@ -15,9 +15,12 @@ use DBIx::Custom;
15 15
     has user => 'dbix_custom';
16 16
     has password => 'dbix_custom';
17 17
     
18
-    sub create_table1 { 'create table table1 (key1 varchar(255), key2 varchar(255));' }
18
+    sub create_table1 { 'create table table1 (key1 varchar(255), key2 varchar(255)) engine=InnoDB;' }
19 19
     sub create_table1_2 {'create table table1 (key1 varchar(255), key2 varchar(255), '
20
-     . 'key3 varchar(255), key4 varchar(255), key5 varchar(255));' }
20
+     . 'key3 varchar(255), key4 varchar(255), key5 varchar(255)) engine=InnoDB;' }
21
+    sub create_table2 { 'create table table2 (key1 varchar(255), key3 varchar(255)) engine=InnoDB;' }
22
+    sub create_table_reserved {
23
+      'create table `table` (`select` varchar(255), `update` varchar(255)) engine=InnoDB;' }
21 24
 }
22 25
 
23 26
 require "$FindBin::Bin/common.t";
+2
t/common-postgresql.t
... ...
@@ -17,6 +17,8 @@ use DBIx::Custom;
17 17
     sub create_table1 { 'create table table1 (key1 varchar(255), key2 varchar(255));' }
18 18
     sub create_table1_2 {'create table table1 (key1 varchar(255), key2 varchar(255), '
19 19
      . 'key3 varchar(255), key4 varchar(255), key5 varchar(255));' }
20
+    sub create_table2 { 'create table table2 (key1 varchar(255), key3 varchar(255));' }
21
+    sub create_table_reserved { 'create table "table" ("select" varchar(255), "update" varchar(255))' }
20 22
 }
21 23
 
22 24
 require "$FindBin::Bin/common.t";
+2
t/common-sqlite-quote.t
... ...
@@ -12,6 +12,8 @@ use DBIx::Custom;
12 12
     sub quote { '""' }
13 13
     sub create_table1 { 'create table table1 (key1, key2);' }
14 14
     sub create_table1_2 {'create table table1 (key1, key2, key3, key4, key5);' }
15
+    sub create_table2 { 'create table table2 (key1, key3);' }
16
+    sub create_table_reserved { 'create table "table" ("select", "update")' }
15 17
 }
16 18
 
17 19
 require "$FindBin::Bin/common.t";
+2
t/common-sqlite.t
... ...
@@ -11,6 +11,8 @@ use DBIx::Custom;
11 11
     has dsn => 'dbi:SQLite:dbname=:memory:';
12 12
     sub create_table1 { 'create table table1 (key1, key2);' }
13 13
     sub create_table1_2 {'create table table1 (key1, key2, key3, key4, key5);' }
14
+    sub create_table2 { 'create table table2 (key1, key3);' }
15
+    sub create_table_reserved { 'create table "table" ("select", "update")' }
14 16
 }
15 17
 
16 18
 require "$FindBin::Bin/common.t";
+18 -36
t/common.t
... ...
@@ -18,6 +18,8 @@ sub test { print "# $_[0]\n" }
18 18
 # Constant
19 19
 my $create_table1 = $dbi->create_table1;
20 20
 my $create_table1_2 = $dbi->create_table1_2;
21
+my $create_table2 = $dbi->create_table2;
22
+my $create_table_reserved = $dbi->create_table_reserved;
21 23
 my $q = substr($dbi->quote, 0, 1);
22 24
 my $p = substr($dbi->quote, 1, 1) || $q;
23 25
 
... ...
@@ -281,14 +283,13 @@ like($@, qr/noexist/, "invalid");
281 283
 eval{$dbi->insert(table => 'table', param => {';' => 1})};
282 284
 like($@, qr/safety/);
283 285
 
284
-$dbi->quote('"');
285 286
 eval { $dbi->execute("drop table ${q}table$p") };
286
-$dbi->execute("create table ${q}table$p (${q}select$p)");
287
+$dbi->execute($create_table_reserved);
287 288
 $dbi->apply_filter('table', select => {out => sub { $_[0] * 2}});
288 289
 $dbi->insert(table => 'table', param => {select => 1});
289 290
 $result = $dbi->execute("select * from ${q}table$p");
290 291
 $rows   = $result->all;
291
-is_deeply($rows, [{select => 2}], "reserved word");
292
+is_deeply($rows, [{select => 2, update => undef}], "reserved word");
292 293
 
293 294
 eval { $dbi->execute('drop table table1') };
294 295
 $dbi->execute($create_table1);
... ...
@@ -298,14 +299,6 @@ $result = $dbi->execute('select * from table1;');
298 299
 $rows   = $result->all;
299 300
 is_deeply($rows, [{key1 => 1, key2 => 2}, {key1 => 3, key2 => 4}], "basic");
300 301
 
301
-eval { $dbi->execute('drop table table1') };
302
-$dbi->execute("create table table1 (key1 char(255), key2 char(255), primary key(key1))");
303
-$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
304
-$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 4}, prefix => 'or replace');
305
-$result = $dbi->execute('select * from table1;');
306
-$rows   = $result->all;
307
-is_deeply($rows, [{key1 => 1, key2 => 4}], "basic");
308
-
309 302
 eval { $dbi->execute('drop table table1') };
310 303
 $dbi->execute($create_table1);
311 304
 $dbi->insert(table => 'table1', param => {key1 => \"'1'", key2 => 2});
... ...
@@ -320,7 +313,7 @@ $dbi->execute($create_table1_2);
320 313
 $dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5});
321 314
 $dbi->insert(table => 'table1', param => {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10});
322 315
 $dbi->update(table => 'table1', param => {key2 => 11}, where => {key1 => 1});
323
-$result = $dbi->execute('select * from table1;');
316
+$result = $dbi->execute('select * from table1 order by key1;');
324 317
 $rows   = $result->all;
325 318
 is_deeply($rows, [{key1 => 1, key2 => 11, key3 => 3, key4 => 4, key5 => 5},
326 319
                   {key1 => 6, key2 => 7,  key3 => 8, key4 => 9, key5 => 10}],
... ...
@@ -330,14 +323,14 @@ $dbi->execute("delete from table1");
330 323
 $dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5});
331 324
 $dbi->insert(table => 'table1', param => {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10});
332 325
 $dbi->update(table => 'table1', param => {key2 => 12}, where => {key2 => 2, key3 => 3});
333
-$result = $dbi->execute('select * from table1;');
326
+$result = $dbi->execute('select * from table1 order by key1;');
334 327
 $rows   = $result->all;
335 328
 is_deeply($rows, [{key1 => 1, key2 => 12, key3 => 3, key4 => 4, key5 => 5},
336 329
                   {key1 => 6, key2 => 7,  key3 => 8, key4 => 9, key5 => 10}],
337 330
                   "update key same as search key");
338 331
 
339 332
 $dbi->update(table => 'table1', param => {key2 => [12]}, where => {key2 => 2, key3 => 3});
340
-$result = $dbi->execute('select * from table1;');
333
+$result = $dbi->execute('select * from table1 order by key1;');
341 334
 $rows   = $result->all;
342 335
 is_deeply($rows, [{key1 => 1, key2 => 12, key3 => 3, key4 => 4, key5 => 5},
343 336
                   {key1 => 6, key2 => 7,  key3 => 8, key4 => 9, key5 => 10}],
... ...
@@ -349,7 +342,7 @@ $dbi->insert(table => 'table1', param => {key1 => 6, key2 => 7, key3 => 8, key4
349 342
 $dbi->register_filter(twice => sub { $_[0] * 2 });
350 343
 $dbi->update(table => 'table1', param => {key2 => 11}, where => {key1 => 1},
351 344
               filter => {key2 => sub { $_[0] * 2 }});
352
-$result = $dbi->execute('select * from table1;');
345
+$result = $dbi->execute('select * from table1 order by key1;');
353 346
 $rows   = $result->all;
354 347
 is_deeply($rows, [{key1 => 1, key2 => 22, key3 => 3, key4 => 4, key5 => 5},
355 348
                   {key1 => 6, key2 => 7,  key3 => 8, key4 => 9, key5 => 10}],
... ...
@@ -404,9 +397,8 @@ eval{$dbi->update(table => 'table1', param => {'key1' => 1}, where => {';' => 1}
404 397
 like($@, qr/safety/);
405 398
 
406 399
 eval { $dbi->execute('drop table table1') };
407
-$dbi->quote('"');
408 400
 eval { $dbi->execute("drop table ${q}table$p") };
409
-$dbi->execute("create table ${q}table$p (${q}select$p, ${q}update$p)");
401
+$dbi->execute($create_table_reserved);
410 402
 $dbi->apply_filter('table', select => {out => sub { $_[0] * 2}});
411 403
 $dbi->apply_filter('table', update => {out => sub { $_[0] * 3}});
412 404
 $dbi->insert(table => 'table', param => {select => 1});
... ...
@@ -419,8 +411,7 @@ eval {$dbi->update_all(table => 'table', param => {';' => 2}) };
419 411
 like($@, qr/safety/);
420 412
 
421 413
 eval { $dbi->execute("drop table ${q}table$p") };
422
-$dbi->reserved_word_quote('"');
423
-$dbi->execute("create table ${q}table$p (${q}select$p, ${q}update$p)");
414
+$dbi->execute($create_table_reserved);
424 415
 $dbi->apply_filter('table', select => {out => sub { $_[0] * 2}});
425 416
 $dbi->apply_filter('table', update => {out => sub { $_[0] * 3}});
426 417
 $dbi->insert(table => 'table', param => {select => 1});
... ...
@@ -434,27 +425,18 @@ $dbi->execute($create_table1_2);
434 425
 $dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5});
435 426
 $dbi->insert(table => 'table1', param => {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10});
436 427
 $dbi->update({key2 => 11}, table => 'table1', where => {key1 => 1});
437
-$result = $dbi->execute('select * from table1;');
428
+$result = $dbi->execute('select * from table1 order by key1;');
438 429
 $rows   = $result->all;
439 430
 is_deeply($rows, [{key1 => 1, key2 => 11, key3 => 3, key4 => 4, key5 => 5},
440 431
                   {key1 => 6, key2 => 7,  key3 => 8, key4 => 9, key5 => 10}],
441 432
                   "basic");
442 433
 
443
-eval { $dbi->execute('drop table table1') };
444
-$dbi->execute("create table table1 (key1 char(255), key2 char(255), primary key(key1))");
445
-$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
446
-$dbi->update(table => 'table1', param => {key2 => 4},
447
-  where => {key1 => 1}, prefix => 'or replace');
448
-$result = $dbi->execute('select * from table1;');
449
-$rows   = $result->all;
450
-is_deeply($rows, [{key1 => 1, key2 => 4}], "basic");
451
-
452 434
 eval { $dbi->execute('drop table table1') };
453 435
 $dbi->execute($create_table1_2);
454 436
 $dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5});
455 437
 $dbi->insert(table => 'table1', param => {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10});
456 438
 $dbi->update(table => 'table1', param => {key2 => \"'11'"}, where => {key1 => 1});
457
-$result = $dbi->execute('select * from table1;');
439
+$result = $dbi->execute('select * from table1 order by key1;');
458 440
 $rows   = $result->all;
459 441
 is_deeply($rows, [{key1 => 1, key2 => 11, key3 => 3, key4 => 4, key5 => 5},
460 442
                   {key1 => 6, key2 => 7,  key3 => 8, key4 => 9, key5 => 10}],
... ...
@@ -531,7 +513,7 @@ $result = $dbi->select(table => 'table1');
531 513
 is_deeply($result->all, [{key1 => 3, key2 => 4}], 'delete() where');
532 514
 
533 515
 eval { $dbi->execute('drop table table1') };
534
-$dbi->execute("create table table1 (key1 char(255), key2 char(255), primary key(key1))");
516
+$dbi->execute($create_table1);
535 517
 $dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
536 518
 $dbi->delete(table => 'table1', where => {key1 => 1}, prefix => '    ');
537 519
 $result = $dbi->execute('select * from table1;');
... ...
@@ -549,9 +531,8 @@ eval{$dbi->delete(table => 'table1', where => {';' => 1})};
549 531
 like($@, qr/safety/);
550 532
 
551 533
 $dbi = DBIx::Custom->connect;
552
-$dbi->quote('"');
553 534
 eval { $dbi->execute("drop table ${q}table$p") };
554
-$dbi->execute("create table ${q}table$p (${q}select$p, ${q}update$p)");
535
+$dbi->execute($create_table_reserved);
555 536
 $dbi->apply_filter('table', select => {out => sub { $_[0] * 2}});
556 537
 $dbi->insert(table => 'table', param => {select => 1});
557 538
 $dbi->delete(table => 'table', where => {select => 1});
... ...
@@ -596,7 +577,8 @@ $rows = $dbi->select(table => 'table1', where => {key1 => 2}, filter => {key1 =>
596 577
             ->all;
597 578
 is_deeply($rows, [{key1 => 1, key2 => 2}], "filter");
598 579
 
599
-$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
580
+eval { $dbi->execute("drop table table2") };
581
+$dbi->execute($create_table2);
600 582
 $dbi->insert(table => 'table2', param => {key1 => 1, key3 => 5});
601 583
 $rows = $dbi->select(
602 584
     table => [qw/table1 table2/],
... ...
@@ -617,8 +599,8 @@ eval{$dbi->select(table => 'table1', noexist => 1)};
617 599
 like($@, qr/noexist/, "invalid");
618 600
 
619 601
 $dbi = DBIx::Custom->connect;
620
-$dbi->quote('"');
621
-$dbi->execute("create table ${q}table$p (${q}select$p, ${q}update$p)");
602
+eval { $dbi->execute("drop table ${q}table$p") };
603
+$dbi->execute($create_table_reserved);
622 604
 $dbi->apply_filter('table', select => {out => sub { $_[0] * 2}});
623 605
 $dbi->insert(table => 'table', param => {select => 1, update => 2});
624 606
 $result = $dbi->select(table => 'table', where => {select => 1});
+132 -17
t/sqlite.t
... ...
@@ -27,6 +27,9 @@ sub test { print "# $_[0]\n" }
27 27
 # Constant
28 28
 my $create_table1 = 'create table table1 (key1 char(255), key2 char(255));';
29 29
 my $create_table1_2 = 'create table table1 (key1 char(255), key2 char(255), key3 char(255), key4 char(255), key5 char(255));';
30
+my $create_table2 = 'create table table2 (key1 char(255), key3 char(255));';
31
+my $create_table_reserved = 'create table "table" ("select", "update")';
32
+
30 33
 my $q = '"';
31 34
 my $p = '"';
32 35
 
... ...
@@ -65,6 +68,72 @@ my $binary;
65 68
 # Prepare table
66 69
 $dbi = DBIx::Custom->connect;
67 70
 
71
+test 'insert';
72
+eval { $dbi->execute('drop table table1') };
73
+$dbi->execute($create_table1);
74
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
75
+$dbi->insert(table => 'table1', param => {key1 => 3, key2 => 4});
76
+$result = $dbi->execute('select * from table1;');
77
+$rows   = $result->all;
78
+is_deeply($rows, [{key1 => 1, key2 => 2}, {key1 => 3, key2 => 4}], "basic");
79
+
80
+$dbi->execute('delete from table1');
81
+$dbi->register_filter(
82
+    twice       => sub { $_[0] * 2 },
83
+    three_times => sub { $_[0] * 3 }
84
+);
85
+$dbi->default_bind_filter('twice');
86
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2}, filter => {key1 => 'three_times'});
87
+$result = $dbi->execute('select * from table1;');
88
+$rows   = $result->all;
89
+is_deeply($rows, [{key1 => 3, key2 => 4}], "filter");
90
+$dbi->default_bind_filter(undef);
91
+
92
+$dbi->execute('drop table table1');
93
+$dbi->execute($create_table1);
94
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2}, append => '   ');
95
+$rows = $dbi->select(table => 'table1')->all;
96
+is_deeply($rows, [{key1 => 1, key2 => 2}], 'insert append');
97
+
98
+eval{$dbi->insert(table => 'table1', noexist => 1)};
99
+like($@, qr/noexist/, "invalid");
100
+
101
+eval{$dbi->insert(table => 'table', param => {';' => 1})};
102
+like($@, qr/safety/);
103
+
104
+$dbi->quote('"');
105
+eval { $dbi->execute("drop table ${q}table$p") };
106
+$dbi->execute("create table ${q}table$p (${q}select$p)");
107
+$dbi->apply_filter('table', select => {out => sub { $_[0] * 2}});
108
+$dbi->insert(table => 'table', param => {select => 1});
109
+$result = $dbi->execute("select * from ${q}table$p");
110
+$rows   = $result->all;
111
+is_deeply($rows, [{select => 2}], "reserved word");
112
+
113
+eval { $dbi->execute('drop table table1') };
114
+$dbi->execute($create_table1);
115
+$dbi->insert({key1 => 1, key2 => 2}, table => 'table1');
116
+$dbi->insert({key1 => 3, key2 => 4}, table => 'table1');
117
+$result = $dbi->execute('select * from table1;');
118
+$rows   = $result->all;
119
+is_deeply($rows, [{key1 => 1, key2 => 2}, {key1 => 3, key2 => 4}], "basic");
120
+
121
+eval { $dbi->execute('drop table table1') };
122
+$dbi->execute("create table table1 (key1 char(255), key2 char(255), primary key(key1))");
123
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
124
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 4}, prefix => 'or replace');
125
+$result = $dbi->execute('select * from table1;');
126
+$rows   = $result->all;
127
+is_deeply($rows, [{key1 => 1, key2 => 4}], "basic");
128
+
129
+eval { $dbi->execute('drop table table1') };
130
+$dbi->execute($create_table1);
131
+$dbi->insert(table => 'table1', param => {key1 => \"'1'", key2 => 2});
132
+$dbi->insert(table => 'table1', param => {key1 => 3, key2 => 4});
133
+$result = $dbi->execute('select * from table1;');
134
+$rows   = $result->all;
135
+is_deeply($rows, [{key1 => 1, key2 => 2}, {key1 => 3, key2 => 4}], "basic");
136
+
68 137
 test 'update';
69 138
 eval { $dbi->execute('drop table table1') };
70 139
 $dbi->execute($create_table1_2);
... ...
@@ -347,7 +416,7 @@ $rows = $dbi->select(table => 'table1', where => {key1 => 2}, filter => {key1 =>
347 416
             ->all;
348 417
 is_deeply($rows, [{key1 => 1, key2 => 2}], "filter");
349 418
 
350
-$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
419
+$dbi->execute($create_table2);
351 420
 $dbi->insert(table => 'table2', param => {key1 => 1, key3 => 5});
352 421
 $rows = $dbi->select(
353 422
     table => [qw/table1 table2/],
... ...
@@ -633,7 +702,7 @@ is_deeply($rows, [{key1 => 4, key2 => 2}], "execute table tag");
633 702
 $dbi = DBIx::Custom->connect;
634 703
 eval { $dbi->execute('drop table table1') };
635 704
 $dbi->execute($create_table1);
636
-$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
705
+$dbi->execute($create_table2);
637 706
 $dbi->register_filter(twice => sub { $_[0] * 2 });
638 707
 $dbi->register_filter(three_times => sub { $_[0] * 3 });
639 708
 $dbi->apply_filter(
... ...
@@ -666,7 +735,7 @@ test 'each_column';
666 735
 $dbi = DBIx::Custom->connect;
667 736
 eval { $dbi->execute('drop table table1') };
668 737
 eval { $dbi->execute('drop table table2') };
669
-$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
738
+$dbi->execute($create_table2);
670 739
 $dbi->execute('create table table1 (key1 Date, key2 datetime);');
671 740
 
672 741
 $infos = [];
... ...
@@ -692,7 +761,7 @@ test 'each_table';
692 761
 $dbi = DBIx::Custom->connect;
693 762
 eval { $dbi->execute('drop table table1') };
694 763
 eval { $dbi->execute('drop table table2') };
695
-$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
764
+$dbi->execute($create_table2);
696 765
 $dbi->execute('create table table1 (key1 Date, key2 datetime);');
697 766
 
698 767
 $infos = [];
... ...
@@ -1905,7 +1974,7 @@ $dbi = MyDBI7->connect;
1905 1974
 eval { $dbi->execute('drop table table1') };
1906 1975
 eval { $dbi->execute('drop table table2') };
1907 1976
 $dbi->execute($create_table1);
1908
-$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
1977
+$dbi->execute($create_table2);
1909 1978
 $dbi->separator('__');
1910 1979
 $dbi->setup_model;
1911 1980
 $dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
... ...
@@ -2039,7 +2108,7 @@ eval { $dbi->execute('drop table table1') };
2039 2108
 $dbi->execute($create_table1);
2040 2109
 $dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
2041 2110
 $dbi->insert(table => 'table1', param => {key1 => 3, key2 => 4});
2042
-$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
2111
+$dbi->execute($create_table2);
2043 2112
 $dbi->insert(table => 'table2', param => {key1 => 1, key3 => 5});
2044 2113
 $dbi->execute('create table table3 (key3 int, key4 int);');
2045 2114
 $dbi->insert(table => 'table3', param => {key3 => 5, key4 => 4});
... ...
@@ -2099,7 +2168,7 @@ $dbi->quote('"');
2099 2168
 eval { $dbi->execute('drop table table1') };
2100 2169
 $dbi->execute($create_table1);
2101 2170
 $dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
2102
-$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
2171
+$dbi->execute($create_table2);
2103 2172
 $dbi->insert(table => 'table2', param => {key1 => 1, key3 => 5});
2104 2173
 $rows = $dbi->select(
2105 2174
     table => 'table1',
... ...
@@ -2149,7 +2218,7 @@ $dbi = DBIx::Custom->connect;
2149 2218
 eval { $dbi->execute('drop table table1') };
2150 2219
 eval { $dbi->execute('drop table table2') };
2151 2220
 $dbi->execute($create_table1);
2152
-$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
2221
+$dbi->execute($create_table2);
2153 2222
 $dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
2154 2223
 $dbi->insert(table => 'table2', param => {key1 => 1, key3 => 4});
2155 2224
 $dbi->insert(table => 'table2', param => {key1 => 1, key3 => 5});
... ...
@@ -2181,7 +2250,7 @@ $dbi = DBIx::Custom->connect;
2181 2250
 eval { $dbi->execute('drop table table1') };
2182 2251
 eval { $dbi->execute('drop table table2') };
2183 2252
 $dbi->execute($create_table1);
2184
-$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
2253
+$dbi->execute($create_table2);
2185 2254
 $dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
2186 2255
 $dbi->insert(table => 'table2', param => {key1 => 1, key3 => 4});
2187 2256
 $dbi->insert(table => 'table2', param => {key1 => 1, key3 => 5});
... ...
@@ -2202,7 +2271,7 @@ $dbi = MyDBI8->connect;
2202 2271
 eval { $dbi->execute('drop table table1') };
2203 2272
 eval { $dbi->execute('drop table table2') };
2204 2273
 $dbi->execute($create_table1);
2205
-$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
2274
+$dbi->execute($create_table2);
2206 2275
 $dbi->setup_model;
2207 2276
 $dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
2208 2277
 $dbi->insert(table => 'table2', param => {key1 => 1, key3 => 3});
... ...
@@ -2276,7 +2345,7 @@ test 'column table option';
2276 2345
 $dbi = MyDBI9->connect;
2277 2346
 eval { $dbi->execute('drop table table1') };
2278 2347
 $dbi->execute($create_table1);
2279
-$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
2348
+$dbi->execute($create_table2);
2280 2349
 $dbi->setup_model;
2281 2350
 $dbi->execute('insert into table1 (key1, key2) values (1, 2);');
2282 2351
 $dbi->execute('insert into table2 (key1, key3) values (1, 4);');
... ...
@@ -2384,7 +2453,7 @@ $dbi = DBIx::Custom->connect;
2384 2453
 eval { $dbi->execute('drop table table1') };
2385 2454
 eval { $dbi->execute('drop table table2') };
2386 2455
 $dbi->execute($create_table1);
2387
-$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
2456
+$dbi->execute($create_table2);
2388 2457
 
2389 2458
 $dbi->create_model(
2390 2459
     table => 'table1',
... ...
@@ -2418,7 +2487,7 @@ test 'model method';
2418 2487
 test 'create_model';
2419 2488
 $dbi = DBIx::Custom->connect;
2420 2489
 eval { $dbi->execute('drop table table2') };
2421
-$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
2490
+$dbi->execute($create_table2);
2422 2491
 $dbi->insert(table => 'table2', param => {key1 => 1, key3 => 3});
2423 2492
 $model = $dbi->create_model(
2424 2493
     table => 'table2'
... ...
@@ -2449,7 +2518,7 @@ eval { $dbi->execute('drop table table1') };
2449 2518
 $dbi->execute($create_table1);
2450 2519
 $dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
2451 2520
 $dbi->insert(table => 'table1', param => {key1 => 2, key2 => 3});
2452
-$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
2521
+$dbi->execute($create_table2);
2453 2522
 $dbi->insert(table => 'table2', param => {key1 => 1, key3 => 4});
2454 2523
 $dbi->insert(table => 'table2', param => {key1 => 2, key3 => 5});
2455 2524
 $rows = $dbi->select(
... ...
@@ -2792,7 +2861,7 @@ $dbi = MyDBI7->connect;
2792 2861
 eval { $dbi->execute('drop table table1') };
2793 2862
 eval { $dbi->execute('drop table table2') };
2794 2863
 $dbi->execute($create_table1);
2795
-$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
2864
+$dbi->execute($create_table2);
2796 2865
 $dbi->setup_model;
2797 2866
 $dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
2798 2867
 $dbi->insert(table => 'table2', param => {key1 => 1, key3 => 3});
... ...
@@ -2818,7 +2887,7 @@ $dbi = DBIx::Custom->connect;
2818 2887
 eval { $dbi->execute('drop table table1') };
2819 2888
 eval { $dbi->execute('drop table table2') };
2820 2889
 $dbi->execute($create_table1);
2821
-$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
2890
+$dbi->execute($create_table2);
2822 2891
 
2823 2892
 $dbi->create_model(
2824 2893
     table => 'table1',
... ...
@@ -2877,7 +2946,7 @@ $dbi = DBIx::Custom->connect;
2877 2946
 eval { $dbi->execute('drop table table1') };
2878 2947
 eval { $dbi->execute('drop table table2') };
2879 2948
 $dbi->execute($create_table1);
2880
-$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
2949
+$dbi->execute($create_table2);
2881 2950
 
2882 2951
 $dbi->create_model(
2883 2952
     table => 'table1',
... ...
@@ -3769,3 +3838,49 @@ $result = $dbi->select(table => 'table1');
3769 3838
 is($result->type_rule2_off->fetch_first->[0], '1bd');
3770 3839
 $result = $dbi->select(table => 'table1');
3771 3840
 is($result->type_rule2_on->fetch_first->[0], '1bde');
3841
+
3842
+test 'prefix';
3843
+$dbi = DBIx::Custom->connect;
3844
+eval { $dbi->execute('drop table table1') };
3845
+$dbi->execute("create table table1 (key1 char(255), key2 char(255), primary key(key1))");
3846
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
3847
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 4}, prefix => 'or replace');
3848
+$result = $dbi->execute('select * from table1;');
3849
+$rows   = $result->all;
3850
+is_deeply($rows, [{key1 => 1, key2 => 4}], "basic");
3851
+
3852
+$dbi = DBIx::Custom->connect;
3853
+eval { $dbi->execute('drop table table1') };
3854
+$dbi->execute("create table table1 (key1 char(255), key2 char(255), primary key(key1))");
3855
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
3856
+$dbi->update(table => 'table1', param => {key2 => 4},
3857
+  where => {key1 => 1}, prefix => 'or replace');
3858
+$result = $dbi->execute('select * from table1;');
3859
+$rows   = $result->all;
3860
+is_deeply($rows, [{key1 => 1, key2 => 4}], "basic");
3861
+
3862
+
3863
+test 'reserved_word_quote';
3864
+$dbi = DBIx::Custom->connect;
3865
+eval { $dbi->execute("drop table ${q}table$p") };
3866
+$dbi->reserved_word_quote('"');
3867
+$dbi->execute($create_table_reserved);
3868
+$dbi->apply_filter('table', select => {out => sub { $_[0] * 2}});
3869
+$dbi->apply_filter('table', update => {out => sub { $_[0] * 3}});
3870
+$dbi->insert(table => 'table', param => {select => 1});
3871
+$dbi->update(table => 'table', where => {'table.select' => 1}, param => {update => 2});
3872
+$result = $dbi->execute("select * from ${q}table$p");
3873
+$rows   = $result->all;
3874
+is_deeply($rows, [{select => 2, update => 6}], "reserved word");
3875
+
3876
+test 'quote';
3877
+$dbi = DBIx::Custom->connect;
3878
+$dbi->quote('"');
3879
+eval { $dbi->execute("drop table ${q}table$p") };
3880
+$dbi->execute($create_table_reserved);
3881
+$dbi->apply_filter('table', select => {out => sub { $_[0] * 2}});
3882
+$dbi->insert(table => 'table', param => {select => 1});
3883
+$dbi->delete(table => 'table', where => {select => 1});
3884
+$result = $dbi->execute("select * from ${q}table$p");
3885
+$rows   = $result->all;
3886
+is_deeply($rows, [], "reserved word");