...
|
...
|
@@ -60,6 +60,7 @@ my $where;
|
60
|
60
|
my $update_param;
|
61
|
61
|
my $insert_param;
|
62
|
62
|
my $join;
|
|
63
|
+my $binary;
|
63
|
64
|
|
64
|
65
|
# Prepare table
|
65
|
66
|
$dbi = DBIx::Custom->connect;
|
...
|
...
|
@@ -1759,6 +1760,7 @@ is($dbi->select(table => 'table1')->one->{key3}, 3);
|
1759
|
1760
|
|
1760
|
1761
|
test 'update_at';
|
1761
|
1762
|
$dbi = DBIx::Custom->connect;
|
|
1763
|
+eval { $dbi->execute('drop table table1') };
|
1762
|
1764
|
$dbi->execute($create_table1_2);
|
1763
|
1765
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
1764
|
1766
|
$dbi->update_at(
|
...
|
...
|
@@ -1784,6 +1786,7 @@ is($dbi->select(table => 'table1')->one->{key2}, 2);
|
1784
|
1786
|
is($dbi->select(table => 'table1')->one->{key3}, 4);
|
1785
|
1787
|
|
1786
|
1788
|
$dbi = DBIx::Custom->connect;
|
|
1789
|
+eval { $dbi->execute('drop table table1') };
|
1787
|
1790
|
$dbi->execute($create_table1_2);
|
1788
|
1791
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
1789
|
1792
|
$dbi->update_at(
|
...
|
...
|
@@ -1798,6 +1801,7 @@ is($dbi->select(table => 'table1')->one->{key3}, 4);
|
1798
|
1801
|
|
1799
|
1802
|
test 'select_at';
|
1800
|
1803
|
$dbi = DBIx::Custom->connect;
|
|
1804
|
+eval { $dbi->execute('drop table table1') };
|
1801
|
1805
|
$dbi->execute($create_table1_2);
|
1802
|
1806
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
1803
|
1807
|
$result = $dbi->select_at(
|
...
|
...
|
@@ -1892,6 +1896,9 @@ test 'model delete_at';
|
1892
|
1896
|
}
|
1893
|
1897
|
}
|
1894
|
1898
|
$dbi = MyDBI6->connect;
|
|
1899
|
+eval { $dbi->execute('drop table table1') };
|
|
1900
|
+eval { $dbi->execute('drop table table2') };
|
|
1901
|
+eval { $dbi->execute('drop table table3') };
|
1895
|
1902
|
$dbi->execute($create_table1_2);
|
1896
|
1903
|
$dbi->execute("create table table2 (key1, key2, key3)");
|
1897
|
1904
|
$dbi->execute("create table table3 (key1, key2, key3)");
|
...
|
...
|
@@ -1907,6 +1914,7 @@ is_deeply($dbi->select(table => 'table1')->all, []);
|
1907
|
1914
|
|
1908
|
1915
|
test 'model insert_at';
|
1909
|
1916
|
$dbi = MyDBI6->connect;
|
|
1917
|
+eval { $dbi->execute('drop table table1') };
|
1910
|
1918
|
$dbi->execute($create_table1_2);
|
1911
|
1919
|
$dbi->model('table1')->insert_at(
|
1912
|
1920
|
where => [1, 2],
|
...
|
...
|
@@ -1920,6 +1928,7 @@ is($row->{key3}, 3);
|
1920
|
1928
|
|
1921
|
1929
|
test 'model update_at';
|
1922
|
1930
|
$dbi = MyDBI6->connect;
|
|
1931
|
+eval { $dbi->execute('drop table table1') };
|
1923
|
1932
|
$dbi->execute($create_table1_2);
|
1924
|
1933
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
1925
|
1934
|
$dbi->model('table1')->update_at(
|
...
|
...
|
@@ -1934,6 +1943,7 @@ is($row->{key3}, 4);
|
1934
|
1943
|
|
1935
|
1944
|
test 'model select_at';
|
1936
|
1945
|
$dbi = MyDBI6->connect;
|
|
1946
|
+eval { $dbi->execute('drop table table1') };
|
1937
|
1947
|
$dbi->execute($create_table1_2);
|
1938
|
1948
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
1939
|
1949
|
$result = $dbi->model('table1')->select_at(where => [1, 2]);
|
...
|
...
|
@@ -1959,6 +1969,8 @@ test 'mycolumn and column';
|
1959
|
1969
|
}
|
1960
|
1970
|
}
|
1961
|
1971
|
$dbi = MyDBI7->connect;
|
|
1972
|
+eval { $dbi->execute('drop table table1') };
|
|
1973
|
+eval { $dbi->execute('drop table table2') };
|
1962
|
1974
|
$dbi->execute($create_table1);
|
1963
|
1975
|
$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
|
1964
|
1976
|
$dbi->separator('__');
|
...
|
...
|
@@ -1975,6 +1987,7 @@ is_deeply($result->one,
|
1975
|
1987
|
|
1976
|
1988
|
test 'update_param';
|
1977
|
1989
|
$dbi = DBIx::Custom->connect;
|
|
1990
|
+eval { $dbi->execute('drop table table1') };
|
1978
|
1991
|
$dbi->execute($create_table1_2);
|
1979
|
1992
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5});
|
1980
|
1993
|
$dbi->insert(table => 'table1', param => {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10});
|
...
|
...
|
@@ -1994,6 +2007,7 @@ is_deeply($rows, [{key1 => 1, key2 => 11, key3 => 3, key4 => 4, key5 => 5},
|
1994
|
2007
|
|
1995
|
2008
|
|
1996
|
2009
|
$dbi = DBIx::Custom->connect;
|
|
2010
|
+eval { $dbi->execute('drop table table1') };
|
1997
|
2011
|
$dbi->execute($create_table1_2);
|
1998
|
2012
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5});
|
1999
|
2013
|
$dbi->insert(table => 'table1', param => {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10});
|
...
|
...
|
@@ -2012,6 +2026,7 @@ is_deeply($rows, [{key1 => 1, key2 => 11, key3 => 33, key4 => 4, key5 => 5},
|
2012
|
2026
|
"basic");
|
2013
|
2027
|
|
2014
|
2028
|
$dbi = DBIx::Custom->connect;
|
|
2029
|
+eval { $dbi->execute('drop table table1') };
|
2015
|
2030
|
$dbi->execute($create_table1_2);
|
2016
|
2031
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5});
|
2017
|
2032
|
$dbi->insert(table => 'table1', param => {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10});
|
...
|
...
|
@@ -2036,6 +2051,7 @@ like($@, qr/not safety/);
|
2036
|
2051
|
|
2037
|
2052
|
test 'update_param';
|
2038
|
2053
|
$dbi = DBIx::Custom->connect;
|
|
2054
|
+eval { $dbi->execute('drop table table1') };
|
2039
|
2055
|
$dbi->execute($create_table1_2);
|
2040
|
2056
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5});
|
2041
|
2057
|
$dbi->insert(table => 'table1', param => {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10});
|
...
|
...
|
@@ -2056,6 +2072,7 @@ is_deeply($rows, [{key1 => 1, key2 => 11, key3 => 3, key4 => 4, key5 => 5},
|
2056
|
2072
|
|
2057
|
2073
|
test 'insert_param';
|
2058
|
2074
|
$dbi = DBIx::Custom->connect;
|
|
2075
|
+eval { $dbi->execute('drop table table1') };
|
2059
|
2076
|
$dbi->execute($create_table1_2);
|
2060
|
2077
|
$param = {key1 => 1, key2 => 2};
|
2061
|
2078
|
$insert_param = $dbi->insert_param($param);
|
...
|
...
|
@@ -2068,6 +2085,7 @@ is($dbi->select(table => 'table1')->one->{key2}, 2);
|
2068
|
2085
|
|
2069
|
2086
|
$dbi = DBIx::Custom->connect;
|
2070
|
2087
|
$dbi->quote('"');
|
|
2088
|
+eval { $dbi->execute('drop table table1') };
|
2071
|
2089
|
$dbi->execute($create_table1_2);
|
2072
|
2090
|
$param = {key1 => 1, key2 => 2};
|
2073
|
2091
|
$insert_param = $dbi->insert_param($param);
|
...
|
...
|
@@ -2084,6 +2102,7 @@ like($@, qr/not safety/);
|
2084
|
2102
|
|
2085
|
2103
|
test 'join';
|
2086
|
2104
|
$dbi = DBIx::Custom->connect;
|
|
2105
|
+eval { $dbi->execute('drop table table1') };
|
2087
|
2106
|
$dbi->execute($create_table1);
|
2088
|
2107
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
|
2089
|
2108
|
$dbi->insert(table => 'table1', param => {key1 => 3, key2 => 4});
|
...
|
...
|
@@ -2144,6 +2163,7 @@ is_deeply($rows, [{table1__key1 => 1}]);
|
2144
|
2163
|
|
2145
|
2164
|
$dbi = DBIx::Custom->connect;
|
2146
|
2165
|
$dbi->quote('"');
|
|
2166
|
+eval { $dbi->execute('drop table table1') };
|
2147
|
2167
|
$dbi->execute($create_table1);
|
2148
|
2168
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
|
2149
|
2169
|
$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
|
...
|
...
|
@@ -2172,6 +2192,7 @@ is_deeply($rows, [{table1_key1 => 1, table2_key1 => 1, key2 => 2, key3 => 5}],
|
2172
|
2192
|
}
|
2173
|
2193
|
|
2174
|
2194
|
$dbi = DBIx::Custom->connect;
|
|
2195
|
+eval { $dbi->execute('drop table table1') };
|
2175
|
2196
|
$dbi->execute($create_table1);
|
2176
|
2197
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
|
2177
|
2198
|
$sql = <<"EOS";
|
...
|
...
|
@@ -2192,6 +2213,8 @@ $rows = $dbi->select(
|
2192
|
2213
|
is_deeply($rows, [{latest_table1__key1 => 1}]);
|
2193
|
2214
|
|
2194
|
2215
|
$dbi = DBIx::Custom->connect;
|
|
2216
|
+eval { $dbi->execute('drop table table1') };
|
|
2217
|
+eval { $dbi->execute('drop table table2') };
|
2195
|
2218
|
$dbi->execute($create_table1);
|
2196
|
2219
|
$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
|
2197
|
2220
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
|
...
|
...
|
@@ -2222,6 +2245,8 @@ $result = $dbi->select(
|
2222
|
2245
|
is_deeply($result->all, [{'table2.key3' => 4}]);
|
2223
|
2246
|
|
2224
|
2247
|
$dbi = DBIx::Custom->connect;
|
|
2248
|
+eval { $dbi->execute('drop table table1') };
|
|
2249
|
+eval { $dbi->execute('drop table table2') };
|
2225
|
2250
|
$dbi->execute($create_table1);
|
2226
|
2251
|
$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
|
2227
|
2252
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
|
...
|
...
|
@@ -2241,6 +2266,8 @@ is_deeply($result->all, [{'table2.key3' => 4}]);
|
2241
|
2266
|
|
2242
|
2267
|
test 'mycolumn';
|
2243
|
2268
|
$dbi = MyDBI8->connect;
|
|
2269
|
+eval { $dbi->execute('drop table table1') };
|
|
2270
|
+eval { $dbi->execute('drop table table2') };
|
2244
|
2271
|
$dbi->execute($create_table1);
|
2245
|
2272
|
$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
|
2246
|
2273
|
$dbi->setup_model;
|
...
|
...
|
@@ -2306,6 +2333,7 @@ test 'dbi method from model';
|
2306
|
2333
|
}
|
2307
|
2334
|
}
|
2308
|
2335
|
$dbi = MyDBI9->connect;
|
|
2336
|
+eval { $dbi->execute('drop table table1') };
|
2309
|
2337
|
$dbi->execute($create_table1);
|
2310
|
2338
|
$model = $dbi->model('table1');
|
2311
|
2339
|
eval{$model->execute('select * from table1')};
|
...
|
...
|
@@ -2313,6 +2341,7 @@ ok(!$@);
|
2313
|
2341
|
|
2314
|
2342
|
test 'column table option';
|
2315
|
2343
|
$dbi = MyDBI9->connect;
|
|
2344
|
+eval { $dbi->execute('drop table table1') };
|
2316
|
2345
|
$dbi->execute($create_table1);
|
2317
|
2346
|
$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
|
2318
|
2347
|
$dbi->setup_model;
|
...
|
...
|
@@ -2350,12 +2379,12 @@ is_deeply($result->one,
|
2350
|
2379
|
|
2351
|
2380
|
test 'type option'; # DEPRECATED!
|
2352
|
2381
|
$dbi = DBIx::Custom->connect(
|
2353
|
|
- data_source => 'dbi:SQLite:dbname=:memory:',
|
2354
|
2382
|
dbi_option => {
|
2355
|
2383
|
$DBD::SQLite::VERSION > 1.26 ? (sqlite_unicode => 1) : (unicode => 1)
|
2356
|
2384
|
}
|
2357
|
2385
|
);
|
2358
|
|
-my $binary = pack("I3", 1, 2, 3);
|
|
2386
|
+$binary = pack("I3", 1, 2, 3);
|
|
2387
|
+eval { $dbi->execute('drop table table1') };
|
2359
|
2388
|
$dbi->execute('create table table1(key1, key2)');
|
2360
|
2389
|
$dbi->insert(table => 'table1', param => {key1 => $binary, key2 => 'あ'}, type => [key1 => DBI::SQL_BLOB]);
|
2361
|
2390
|
$result = $dbi->select(table => 'table1');
|
...
|
...
|
@@ -2376,12 +2405,12 @@ is($row->{key1_length}, length $binary);
|
2376
|
2405
|
|
2377
|
2406
|
test 'bind_type option';
|
2378
|
2407
|
$dbi = DBIx::Custom->connect(
|
2379
|
|
- data_source => 'dbi:SQLite:dbname=:memory:',
|
2380
|
2408
|
dbi_option => {
|
2381
|
2409
|
$DBD::SQLite::VERSION > 1.26 ? (sqlite_unicode => 1) : (unicode => 1)
|
2382
|
2410
|
}
|
2383
|
2411
|
);
|
2384
|
2412
|
$binary = pack("I3", 1, 2, 3);
|
|
2413
|
+eval { $dbi->execute('drop table table1') };
|
2385
|
2414
|
$dbi->execute('create table table1(key1, key2)');
|
2386
|
2415
|
$dbi->insert(table => 'table1', param => {key1 => $binary, key2 => 'あ'}, bind_type => [key1 => DBI::SQL_BLOB]);
|
2387
|
2416
|
$result = $dbi->select(table => 'table1');
|
...
|
...
|
@@ -2401,12 +2430,12 @@ is($row->{key1_length}, length $binary);
|
2401
|
2430
|
|
2402
|
2431
|
test 'model type attribute';
|
2403
|
2432
|
$dbi = DBIx::Custom->connect(
|
2404
|
|
- data_source => 'dbi:SQLite:dbname=:memory:',
|
2405
|
2433
|
dbi_option => {
|
2406
|
2434
|
$DBD::SQLite::VERSION > 1.26 ? (sqlite_unicode => 1) : (unicode => 1)
|
2407
|
2435
|
}
|
2408
|
2436
|
);
|
2409
|
2437
|
$binary = pack("I3", 1, 2, 3);
|
|
2438
|
+eval { $dbi->execute('drop table table1') };
|
2410
|
2439
|
$dbi->execute('create table table1(key1, key2)');
|
2411
|
2440
|
$model = $dbi->create_model(table => 'table1', bind_type => [key1 => DBI::SQL_BLOB]);
|
2412
|
2441
|
$model->insert(param => {key1 => $binary, key2 => 'あ'});
|
...
|
...
|
@@ -2419,6 +2448,8 @@ is($row->{key1_length}, length $binary);
|
2419
|
2448
|
|
2420
|
2449
|
test 'create_model';
|
2421
|
2450
|
$dbi = DBIx::Custom->connect;
|
|
2451
|
+eval { $dbi->execute('drop table table1') };
|
|
2452
|
+eval { $dbi->execute('drop table table2') };
|
2422
|
2453
|
$dbi->execute($create_table1);
|
2423
|
2454
|
$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
|
2424
|
2455
|
|
...
|
...
|
@@ -2453,6 +2484,7 @@ is_deeply($model2->select->one, {key1 => 1, key3 => 3});
|
2453
|
2484
|
test 'model method';
|
2454
|
2485
|
test 'create_model';
|
2455
|
2486
|
$dbi = DBIx::Custom->connect;
|
|
2487
|
+eval { $dbi->execute('drop table table2') };
|
2456
|
2488
|
$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
|
2457
|
2489
|
$dbi->insert(table => 'table2', param => {key1 => 1, key3 => 3});
|
2458
|
2490
|
$model = $dbi->create_model(
|
...
|
...
|
@@ -2480,6 +2512,7 @@ is_deeply($param, {key1 => [1, 2, 3, 4], key2 => [1, 2, 3], key3 => [1, 2, 3]});
|
2480
|
2512
|
|
2481
|
2513
|
test 'select() param option';
|
2482
|
2514
|
$dbi = DBIx::Custom->connect;
|
|
2515
|
+eval { $dbi->execute('drop table table1') };
|
2483
|
2516
|
$dbi->execute($create_table1);
|
2484
|
2517
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
|
2485
|
2518
|
$dbi->insert(table => 'table1', param => {key1 => 2, key2 => 3});
|
...
|
...
|
@@ -2499,6 +2532,7 @@ is_deeply($rows, [{table1_key1 => 2, key2 => 3, key3 => 5}]);
|
2499
|
2532
|
|
2500
|
2533
|
test 'select() wrap option';
|
2501
|
2534
|
$dbi = DBIx::Custom->connect;
|
|
2535
|
+eval { $dbi->execute('drop table table1') };
|
2502
|
2536
|
$dbi->execute($create_table1);
|
2503
|
2537
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
|
2504
|
2538
|
$dbi->insert(table => 'table1', param => {key1 => 2, key2 => 3});
|
...
|
...
|
@@ -2520,6 +2554,7 @@ like($@, qr/array/);
|
2520
|
2554
|
|
2521
|
2555
|
test 'select() string where';
|
2522
|
2556
|
$dbi = DBIx::Custom->connect;
|
|
2557
|
+eval { $dbi->execute('drop table table1') };
|
2523
|
2558
|
$dbi->execute($create_table1);
|
2524
|
2559
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
|
2525
|
2560
|
$dbi->insert(table => 'table1', param => {key1 => 2, key2 => 3});
|
...
|
...
|
@@ -2531,6 +2566,7 @@ $rows = $dbi->select(
|
2531
|
2566
|
is_deeply($rows, [{key1 => 1, key2 => 2}]);
|
2532
|
2567
|
|
2533
|
2568
|
$dbi = DBIx::Custom->connect;
|
|
2569
|
+eval { $dbi->execute('drop table table1') };
|
2534
|
2570
|
$dbi->execute($create_table1);
|
2535
|
2571
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
|
2536
|
2572
|
$dbi->insert(table => 'table1', param => {key1 => 2, key2 => 3});
|
...
|
...
|
@@ -2545,6 +2581,7 @@ is_deeply($rows, [{key1 => 1, key2 => 2}]);
|
2545
|
2581
|
|
2546
|
2582
|
test 'delete() string where';
|
2547
|
2583
|
$dbi = DBIx::Custom->connect;
|
|
2584
|
+eval { $dbi->execute('drop table table1') };
|
2548
|
2585
|
$dbi->execute($create_table1);
|
2549
|
2586
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
|
2550
|
2587
|
$dbi->insert(table => 'table1', param => {key1 => 2, key2 => 3});
|
...
|
...
|
@@ -2557,6 +2594,7 @@ $rows = $dbi->select(table => 'table1')->all;
|
2557
|
2594
|
is_deeply($rows, [{key1 => 2, key2 => 3}]);
|
2558
|
2595
|
|
2559
|
2596
|
$dbi = DBIx::Custom->connect;
|
|
2597
|
+eval { $dbi->execute('drop table table1') };
|
2560
|
2598
|
$dbi->execute($create_table1);
|
2561
|
2599
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
|
2562
|
2600
|
$dbi->insert(table => 'table1', param => {key1 => 2, key2 => 3});
|
...
|
...
|
@@ -2573,6 +2611,7 @@ is_deeply($rows, [{key1 => 2, key2 => 3}]);
|
2573
|
2611
|
|
2574
|
2612
|
test 'update() string where';
|
2575
|
2613
|
$dbi = DBIx::Custom->connect;
|
|
2614
|
+eval { $dbi->execute('drop table table1') };
|
2576
|
2615
|
$dbi->execute($create_table1);
|
2577
|
2616
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
|
2578
|
2617
|
$dbi->update(
|
...
|
...
|
@@ -2585,6 +2624,7 @@ $rows = $dbi->select(table => 'table1')->all;
|
2585
|
2624
|
is_deeply($rows, [{key1 => 5, key2 => 2}]);
|
2586
|
2625
|
|
2587
|
2626
|
$dbi = DBIx::Custom->connect;
|
|
2627
|
+eval { $dbi->execute('drop table table1') };
|
2588
|
2628
|
$dbi->execute($create_table1);
|
2589
|
2629
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
|
2590
|
2630
|
$dbi->update(
|
...
|
...
|
@@ -2600,6 +2640,7 @@ is_deeply($rows, [{key1 => 5, key2 => 2}]);
|
2600
|
2640
|
|
2601
|
2641
|
test 'insert id and primary_key option';
|
2602
|
2642
|
$dbi = DBIx::Custom->connect;
|
|
2643
|
+eval { $dbi->execute('drop table table1') };
|
2603
|
2644
|
$dbi->execute($create_table1_2);
|
2604
|
2645
|
$dbi->insert(
|
2605
|
2646
|
primary_key => ['key1', 'key2'],
|
...
|
...
|
@@ -2624,6 +2665,7 @@ is($dbi->select(table => 'table1')->one->{key2}, 2);
|
2624
|
2665
|
is($dbi->select(table => 'table1')->one->{key3}, 3);
|
2625
|
2666
|
|
2626
|
2667
|
$dbi = DBIx::Custom->connect;
|
|
2668
|
+eval { $dbi->execute('drop table table1') };
|
2627
|
2669
|
$dbi->execute($create_table1_2);
|
2628
|
2670
|
$dbi->insert(
|
2629
|
2671
|
{key3 => 3},
|
...
|
...
|
@@ -2638,6 +2680,7 @@ is($dbi->select(table => 'table1')->one->{key3}, 3);
|
2638
|
2680
|
|
2639
|
2681
|
test 'model insert id and primary_key option';
|
2640
|
2682
|
$dbi = MyDBI6->connect;
|
|
2683
|
+eval { $dbi->execute('drop table table1') };
|
2641
|
2684
|
$dbi->execute($create_table1_2);
|
2642
|
2685
|
$dbi->model('table1')->insert(
|
2643
|
2686
|
id => [1, 2],
|
...
|
...
|
@@ -2650,6 +2693,7 @@ is($row->{key2}, 2);
|
2650
|
2693
|
is($row->{key3}, 3);
|
2651
|
2694
|
|
2652
|
2695
|
$dbi = MyDBI6->connect;
|
|
2696
|
+eval { $dbi->execute('drop table table1') };
|
2653
|
2697
|
$dbi->execute($create_table1_2);
|
2654
|
2698
|
$dbi->model('table1')->insert(
|
2655
|
2699
|
{key3 => 3},
|
...
|
...
|
@@ -2663,6 +2707,7 @@ is($row->{key3}, 3);
|
2663
|
2707
|
|
2664
|
2708
|
test 'update and id option';
|
2665
|
2709
|
$dbi = DBIx::Custom->connect;
|
|
2710
|
+eval { $dbi->execute('drop table table1') };
|
2666
|
2711
|
$dbi->execute($create_table1_2);
|
2667
|
2712
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
2668
|
2713
|
$dbi->update(
|
...
|
...
|
@@ -2688,6 +2733,7 @@ is($dbi->select(table => 'table1')->one->{key2}, 2);
|
2688
|
2733
|
is($dbi->select(table => 'table1')->one->{key3}, 4);
|
2689
|
2734
|
|
2690
|
2735
|
$dbi = DBIx::Custom->connect;
|
|
2736
|
+eval { $dbi->execute('drop table table1') };
|
2691
|
2737
|
$dbi->execute($create_table1_2);
|
2692
|
2738
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
2693
|
2739
|
$dbi->update(
|
...
|
...
|
@@ -2703,6 +2749,7 @@ is($dbi->select(table => 'table1')->one->{key3}, 4);
|
2703
|
2749
|
|
2704
|
2750
|
test 'model update and id option';
|
2705
|
2751
|
$dbi = MyDBI6->connect;
|
|
2752
|
+eval { $dbi->execute('drop table table1') };
|
2706
|
2753
|
$dbi->execute($create_table1_2);
|
2707
|
2754
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
2708
|
2755
|
$dbi->model('table1')->update(
|
...
|
...
|
@@ -2718,6 +2765,7 @@ is($row->{key3}, 4);
|
2718
|
2765
|
|
2719
|
2766
|
test 'delete and id option';
|
2720
|
2767
|
$dbi = DBIx::Custom->connect;
|
|
2768
|
+eval { $dbi->execute('drop table table1') };
|
2721
|
2769
|
$dbi->execute($create_table1_2);
|
2722
|
2770
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
2723
|
2771
|
$dbi->delete(
|
...
|
...
|
@@ -2738,6 +2786,9 @@ is_deeply($dbi->select(table => 'table1')->all, []);
|
2738
|
2786
|
|
2739
|
2787
|
test 'model delete and id option';
|
2740
|
2788
|
$dbi = MyDBI6->connect;
|
|
2789
|
+eval { $dbi->execute('drop table table1') };
|
|
2790
|
+eval { $dbi->execute('drop table table2') };
|
|
2791
|
+eval { $dbi->execute('drop table table3') };
|
2741
|
2792
|
$dbi->execute($create_table1_2);
|
2742
|
2793
|
$dbi->execute("create table table2 (key1, key2, key3)");
|
2743
|
2794
|
$dbi->execute("create table table3 (key1, key2, key3)");
|
...
|
...
|
@@ -2754,6 +2805,7 @@ is_deeply($dbi->select(table => 'table1')->all, []);
|
2754
|
2805
|
|
2755
|
2806
|
test 'select and id option';
|
2756
|
2807
|
$dbi = DBIx::Custom->connect;
|
|
2808
|
+eval { $dbi->execute('drop table table1') };
|
2757
|
2809
|
$dbi->execute($create_table1_2);
|
2758
|
2810
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
2759
|
2811
|
$result = $dbi->select(
|
...
|
...
|
@@ -2793,6 +2845,7 @@ is($row->{key3}, 3);
|
2793
|
2845
|
|
2794
|
2846
|
test 'model select_at';
|
2795
|
2847
|
$dbi = MyDBI6->connect;
|
|
2848
|
+eval { $dbi->execute('drop table table1') };
|
2796
|
2849
|
$dbi->execute($create_table1_2);
|
2797
|
2850
|
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3});
|
2798
|
2851
|
$result = $dbi->model('table1')->select(id => [1, 2]);
|
...
|
...
|
@@ -2803,6 +2856,8 @@ is($row->{key3}, 3);
|
2803
|
2856
|
|
2804
|
2857
|
test 'column separator is default .';
|
2805
|
2858
|
$dbi = MyDBI7->connect;
|
|
2859
|
+eval { $dbi->execute('drop table table1') };
|
|
2860
|
+eval { $dbi->execute('drop table table2') };
|
2806
|
2861
|
$dbi->execute($create_table1);
|
2807
|
2862
|
$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
|
2808
|
2863
|
$dbi->setup_model;
|
...
|
...
|
@@ -2824,547 +2879,585 @@ is_deeply($result->one,
|
2824
|
2879
|
{'table2.key1' => 1, 'table2.key3' => 3});
|
2825
|
2880
|
|
2826
|
2881
|
|
2827
|
|
-test 'type_rule from';
|
|
2882
|
+
|
|
2883
|
+test 'separator';
|
2828
|
2884
|
$dbi = DBIx::Custom->connect;
|
2829
|
|
-$dbi->type_rule(
|
2830
|
|
- from1 => {
|
2831
|
|
- date => sub { uc $_[0] }
|
2832
|
|
- }
|
|
2885
|
+eval { $dbi->execute('drop table table1') };
|
|
2886
|
+eval { $dbi->execute('drop table table2') };
|
|
2887
|
+$dbi->execute($create_table1);
|
|
2888
|
+$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
|
|
2889
|
+
|
|
2890
|
+$dbi->create_model(
|
|
2891
|
+ table => 'table1',
|
|
2892
|
+ join => [
|
|
2893
|
+ 'left outer join table2 on table1.key1 = table2.key1'
|
|
2894
|
+ ],
|
|
2895
|
+ primary_key => ['key1'],
|
2833
|
2896
|
);
|
2834
|
|
-$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
2835
|
|
-$dbi->insert({key1 => 'a'}, table => 'table1');
|
2836
|
|
-$result = $dbi->select(table => 'table1');
|
2837
|
|
-is($result->fetch_first->[0], 'A');
|
|
2897
|
+$model2 = $dbi->create_model(
|
|
2898
|
+ table => 'table2',
|
|
2899
|
+);
|
|
2900
|
+$dbi->setup_model;
|
|
2901
|
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
|
|
2902
|
+$dbi->insert(table => 'table2', param => {key1 => 1, key3 => 3});
|
|
2903
|
+$model = $dbi->model('table1');
|
|
2904
|
+$result = $model->select(
|
|
2905
|
+ column => [
|
|
2906
|
+ $model->mycolumn,
|
|
2907
|
+ {table2 => [qw/key1 key3/]}
|
|
2908
|
+ ],
|
|
2909
|
+ where => {'table1.key1' => 1}
|
|
2910
|
+);
|
|
2911
|
+is_deeply($result->one,
|
|
2912
|
+ {key1 => 1, key2 => 2, 'table2.key1' => 1, 'table2.key3' => 3});
|
|
2913
|
+is_deeply($model2->select->one, {key1 => 1, key3 => 3});
|
2838
|
2914
|
|
2839
|
|
-$result = $dbi->select(table => 'table1');
|
2840
|
|
-is($result->one->{key1}, 'A');
|
|
2915
|
+$dbi->separator('__');
|
|
2916
|
+$model = $dbi->model('table1');
|
|
2917
|
+$result = $model->select(
|
|
2918
|
+ column => [
|
|
2919
|
+ $model->mycolumn,
|
|
2920
|
+ {table2 => [qw/key1 key3/]}
|
|
2921
|
+ ],
|
|
2922
|
+ where => {'table1.key1' => 1}
|
|
2923
|
+);
|
|
2924
|
+is_deeply($result->one,
|
|
2925
|
+ {key1 => 1, key2 => 2, 'table2__key1' => 1, 'table2__key3' => 3});
|
|
2926
|
+is_deeply($model2->select->one, {key1 => 1, key3 => 3});
|
2841
|
2927
|
|
|
2928
|
+$dbi->separator('-');
|
|
2929
|
+$model = $dbi->model('table1');
|
|
2930
|
+$result = $model->select(
|
|
2931
|
+ column => [
|
|
2932
|
+ $model->mycolumn,
|
|
2933
|
+ {table2 => [qw/key1 key3/]}
|
|
2934
|
+ ],
|
|
2935
|
+ where => {'table1.key1' => 1}
|
|
2936
|
+);
|
|
2937
|
+is_deeply($result->one,
|
|
2938
|
+ {key1 => 1, key2 => 2, 'table2-key1' => 1, 'table2-key3' => 3});
|
|
2939
|
+is_deeply($model2->select->one, {key1 => 1, key3 => 3});
|
2842
|
2940
|
|
2843
|
|
-test 'type_rule into';
|
|
2941
|
+
|
|
2942
|
+test 'filter_off';
|
2844
|
2943
|
$dbi = DBIx::Custom->connect;
|
2845
|
|
-$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
2846
|
|
-$dbi->type_rule(
|
2847
|
|
- into1 => {
|
2848
|
|
- date => sub { uc $_[0] }
|
2849
|
|
- }
|
|
2944
|
+eval { $dbi->execute('drop table table1') };
|
|
2945
|
+eval { $dbi->execute('drop table table2') };
|
|
2946
|
+$dbi->execute($create_table1);
|
|
2947
|
+$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
|
|
2948
|
+
|
|
2949
|
+$dbi->create_model(
|
|
2950
|
+ table => 'table1',
|
|
2951
|
+ join => [
|
|
2952
|
+ 'left outer join table2 on table1.key1 = table2.key1'
|
|
2953
|
+ ],
|
|
2954
|
+ primary_key => ['key1'],
|
2850
|
2955
|
);
|
2851
|
|
-$dbi->insert({key1 => 'a'}, table => 'table1');
|
2852
|
|
-$result = $dbi->select(table => 'table1');
|
2853
|
|
-is($result->one->{key1}, 'A');
|
|
2956
|
+$dbi->setup_model;
|
|
2957
|
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
|
|
2958
|
+$model = $dbi->model('table1');
|
|
2959
|
+$result = $model->select(column => 'key1');
|
|
2960
|
+$result->filter(key1 => sub { $_[0] * 2 });
|
|
2961
|
+is_deeply($result->one, {key1 => 2});
|
2854
|
2962
|
|
|
2963
|
+test 'available_datetype';
|
2855
|
2964
|
$dbi = DBIx::Custom->connect;
|
2856
|
|
-$dbi->execute("create table table1 (key1 date, key2 datetime)");
|
2857
|
|
-$dbi->type_rule(
|
2858
|
|
- into1 => [
|
2859
|
|
- [qw/date datetime/] => sub { uc $_[0] }
|
2860
|
|
- ]
|
2861
|
|
-);
|
2862
|
|
-$dbi->insert({key1 => 'a', key2 => 'b'}, table => 'table1');
|
2863
|
|
-$result = $dbi->select(table => 'table1');
|
2864
|
|
-$row = $result->one;
|
2865
|
|
-is($row->{key1}, 'A');
|
2866
|
|
-is($row->{key2}, 'B');
|
|
2965
|
+ok($dbi->can('available_datatype'));
|
|
2966
|
+
|
2867
|
2967
|
|
|
2968
|
+test 'select prefix option';
|
2868
|
2969
|
$dbi = DBIx::Custom->connect;
|
2869
|
|
-$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
2870
|
|
-$dbi->insert({key1 => 'a', key2 => 'B'}, table => 'table1');
|
2871
|
|
-$dbi->type_rule(
|
2872
|
|
- into1 => [
|
2873
|
|
- [qw/date datetime/] => sub { uc $_[0] }
|
2874
|
|
- ]
|
|
2970
|
+eval { $dbi->execute('drop table table1') };
|
|
2971
|
+$dbi->execute($create_table1);
|
|
2972
|
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
|
|
2973
|
+$rows = $dbi->select(prefix => 'key1,', column => 'key2', table => 'table1')->all;
|
|
2974
|
+is_deeply($rows, [{key1 => 1, key2 => 2}], "table");
|
|
2975
|
+
|
|
2976
|
+
|
|
2977
|
+test 'separator';
|
|
2978
|
+$dbi = DBIx::Custom->connect;
|
|
2979
|
+is($dbi->separator, '.');
|
|
2980
|
+$dbi->separator('-');
|
|
2981
|
+is($dbi->separator, '-');
|
|
2982
|
+$dbi->separator('__');
|
|
2983
|
+is($dbi->separator, '__');
|
|
2984
|
+eval { $dbi->separator('?') };
|
|
2985
|
+like($@, qr/Separator/);
|
|
2986
|
+
|
|
2987
|
+
|
|
2988
|
+test 'map_param';
|
|
2989
|
+$dbi = DBIx::Custom->connect;
|
|
2990
|
+$param = $dbi->map_param(
|
|
2991
|
+ {id => 1, author => 'Ken', price => 1900},
|
|
2992
|
+ id => 'book.id',
|
|
2993
|
+ author => ['book.author', sub { '%' . $_[0] . '%' }],
|
|
2994
|
+ price => ['book.price', {if => sub { $_[0] eq 1900 }}]
|
2875
|
2995
|
);
|
2876
|
|
-$result = $dbi->execute(
|
2877
|
|
- "select * from table1 where key1 = :key1 and key2 = :table1.key2;",
|
2878
|
|
- param => {key1 => 'a', 'table1.key2' => 'b'}
|
|
2996
|
+is_deeply($param, {'book.id' => 1, 'book.author' => '%Ken%',
|
|
2997
|
+ 'book.price' => 1900});
|
|
2998
|
+
|
|
2999
|
+$param = $dbi->map_param(
|
|
3000
|
+ {id => 0, author => 0, price => 0},
|
|
3001
|
+ id => 'book.id',
|
|
3002
|
+ author => ['book.author', sub { '%' . $_[0] . '%' }],
|
|
3003
|
+ price => ['book.price', sub { '%' . $_[0] . '%' },
|
|
3004
|
+ {if => sub { $_[0] eq 0 }}]
|
2879
|
3005
|
);
|
2880
|
|
-$row = $result->one;
|
2881
|
|
-is($row->{key1}, 'a');
|
2882
|
|
-is($row->{key2}, 'B');
|
|
3006
|
+is_deeply($param, {'book.id' => 0, 'book.author' => '%0%', 'book.price' => '%0%'});
|
2883
|
3007
|
|
2884
|
|
-$dbi = DBIx::Custom->connect;
|
2885
|
|
-$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
2886
|
|
-$dbi->insert({key1 => 'A', key2 => 'B'}, table => 'table1');
|
2887
|
|
-$dbi->type_rule(
|
2888
|
|
- into1 => [
|
2889
|
|
- [qw/date datetime/] => sub { uc $_[0] }
|
2890
|
|
- ]
|
|
3008
|
+$param = $dbi->map_param(
|
|
3009
|
+ {id => '', author => '', price => ''},
|
|
3010
|
+ id => 'book.id',
|
|
3011
|
+ author => ['book.author', sub { '%' . $_[0] . '%' }],
|
|
3012
|
+ price => ['book.price', sub { '%' . $_[0] . '%' },
|
|
3013
|
+ {if => sub { $_[0] eq 1 }}]
|
2891
|
3014
|
);
|
2892
|
|
-$result = $dbi->execute(
|
2893
|
|
- "select * from table1 where key1 = :key1 and key2 = :table1.key2;",
|
2894
|
|
- param => {key1 => 'a', 'table1.key2' => 'b'},
|
2895
|
|
- table => 'table1'
|
|
3015
|
+is_deeply($param, {});
|
|
3016
|
+
|
|
3017
|
+$param = $dbi->map_param(
|
|
3018
|
+ {id => undef, author => undef, price => undef},
|
|
3019
|
+ id => 'book.id',
|
|
3020
|
+ price => ['book.price', {if => 'exists'}]
|
2896
|
3021
|
);
|
2897
|
|
-$row = $result->one;
|
2898
|
|
-is($row->{key1}, 'A');
|
2899
|
|
-is($row->{key2}, 'B');
|
|
3022
|
+is_deeply($param, {'book.price' => undef});
|
|
3023
|
+
|
|
3024
|
+$param = $dbi->map_param(
|
|
3025
|
+ {price => 'a'},
|
|
3026
|
+ id => ['book.id', {if => 'exists'}],
|
|
3027
|
+ price => ['book.price', sub { '%' . $_[0] }, {if => 'exists'}]
|
|
3028
|
+);
|
|
3029
|
+is_deeply($param, {'book.price' => '%a'});
|
2900
|
3030
|
|
|
3031
|
+
|
|
3032
|
+test 'table_alias';
|
2901
|
3033
|
$dbi = DBIx::Custom->connect;
|
2902
|
|
-$dbi->execute("create table table1 (key1 date, key2 datetime)");
|
2903
|
|
-$dbi->register_filter(twice => sub { $_[0] * 2 });
|
|
3034
|
+eval { $dbi->execute('drop table table1') };
|
|
3035
|
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
2904
|
3036
|
$dbi->type_rule(
|
2905
|
|
- from1 => {
|
2906
|
|
- date => 'twice',
|
2907
|
|
- },
|
2908
|
3037
|
into1 => {
|
2909
|
|
- date => 'twice',
|
|
3038
|
+ date => sub { uc $_[0] }
|
2910
|
3039
|
}
|
2911
|
3040
|
);
|
2912
|
|
-$dbi->insert({key1 => 2}, table => 'table1');
|
|
3041
|
+$dbi->execute("insert into table1 (key1) values (:table2.key1)", {'table2.key1' => 'a'},
|
|
3042
|
+ table_alias => {table2 => 'table1'});
|
2913
|
3043
|
$result = $dbi->select(table => 'table1');
|
2914
|
|
-is($result->fetch->[0], 8);
|
|
3044
|
+is($result->one->{key1}, 'A');
|
2915
|
3045
|
|
2916
|
|
-test 'type_rule and filter order';
|
2917
|
|
-$dbi = DBIx::Custom->connect;
|
2918
|
|
-$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
2919
|
|
-$dbi->type_rule(
|
2920
|
|
- into1 => {
|
2921
|
|
- date => sub { $_[0] . 'b' }
|
2922
|
|
- },
|
2923
|
|
- into2 => {
|
2924
|
|
- date => sub { $_[0] . 'c' }
|
2925
|
|
- },
|
2926
|
|
- from1 => {
|
2927
|
|
- date => sub { $_[0] . 'd' }
|
2928
|
|
- },
|
2929
|
|
- from2 => {
|
2930
|
|
- date => sub { $_[0] . 'e' }
|
2931
|
|
- }
|
2932
|
|
-);
|
2933
|
|
-$dbi->insert({key1 => '1'}, table => 'table1', filter => {key1 => sub { $_[0] . 'a' }});
|
2934
|
|
-$result = $dbi->select(table => 'table1');
|
2935
|
|
-$result->filter(key1 => sub { $_[0] . 'f' });
|
2936
|
|
-is($result->fetch_first->[0], '1abcdef');
|
2937
|
3046
|
|
|
3047
|
+test 'order';
|
2938
|
3048
|
$dbi = DBIx::Custom->connect;
|
2939
|
|
-$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
2940
|
|
-$dbi->type_rule(
|
2941
|
|
- from1 => {
|
2942
|
|
- date => sub { $_[0] . 'p' }
|
2943
|
|
- },
|
2944
|
|
- from2 => {
|
2945
|
|
- date => sub { $_[0] . 'q' }
|
2946
|
|
- },
|
2947
|
|
-);
|
2948
|
|
-$dbi->insert({key1 => '1'}, table => 'table1');
|
2949
|
|
-$result = $dbi->select(table => 'table1');
|
2950
|
|
-$result->type_rule(
|
2951
|
|
- from1 => {
|
2952
|
|
- date => sub { $_[0] . 'd' }
|
2953
|
|
- },
|
2954
|
|
- from2 => {
|
2955
|
|
- date => sub { $_[0] . 'e' }
|
2956
|
|
- }
|
2957
|
|
-);
|
2958
|
|
-$result->filter(key1 => sub { $_[0] . 'f' });
|
2959
|
|
-is($result->fetch_first->[0], '1def');
|
|
3049
|
+eval { $dbi->execute('drop table table1') };
|
|
3050
|
+$dbi->execute("create table table1 (key1, key2)");
|
|
3051
|
+$dbi->insert({key1 => 1, key2 => 1}, table => 'table1');
|
|
3052
|
+$dbi->insert({key1 => 1, key2 => 3}, table => 'table1');
|
|
3053
|
+$dbi->insert({key1 => 2, key2 => 2}, table => 'table1');
|
|
3054
|
+$dbi->insert({key1 => 2, key2 => 4}, table => 'table1');
|
|
3055
|
+my $order = $dbi->order;
|
|
3056
|
+$order->prepend('key1', 'key2 desc');
|
|
3057
|
+$result = $dbi->select(table => 'table1', append => "$order");
|
|
3058
|
+is_deeply($result->all, [{key1 => 1, key2 => 3}, {key1 => 1, key2 => 1},
|
|
3059
|
+ {key1 => 2, key2 => 4}, {key1 => 2, key2 => 2}]);
|
|
3060
|
+$order->prepend('key1 desc');
|
|
3061
|
+$result = $dbi->select(table => 'table1', append => "$order");
|
|
3062
|
+is_deeply($result->all, [{key1 => 2, key2 => 4}, {key1 => 2, key2 => 2},
|
|
3063
|
+ {key1 => 1, key2 => 3}, {key1 => 1, key2 => 1}]);
|
2960
|
3064
|
|
2961
|
|
-test 'type_rule_off';
|
2962
|
|
-$dbi = DBIx::Custom->connect;
|
2963
|
|
-$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
2964
|
|
-$dbi->type_rule(
|
2965
|
|
- from1 => {
|
2966
|
|
- date => sub { $_[0] * 2 },
|
2967
|
|
- },
|
2968
|
|
- into1 => {
|
2969
|
|
- date => sub { $_[0] * 2 },
|
2970
|
|
- }
|
2971
|
|
-);
|
2972
|
|
-$dbi->insert({key1 => 2}, table => 'table1', type_rule_off => 1);
|
2973
|
|
-$result = $dbi->select(table => 'table1', type_rule_off => 1);
|
2974
|
|
-is($result->type_rule_off->fetch->[0], 2);
|
|
3065
|
+$order = $dbi->order;
|
|
3066
|
+$order->prepend(['table1-key1'], [qw/table1-key2 desc/]);
|
|
3067
|
+$result = $dbi->select(table => 'table1',
|
|
3068
|
+ column => [[key1 => 'table1-key1'], [key2 => 'table1-key2']],
|
|
3069
|
+ append => "$order");
|
|
3070
|
+is_deeply($result->all, [{'table1-key1' => 1, 'table1-key2' => 3},
|
|
3071
|
+ {'table1-key1' => 1, 'table1-key2' => 1},
|
|
3072
|
+ {'table1-key1' => 2, 'table1-key2' => 4},
|
|
3073
|
+ {'table1-key1' => 2, 'table1-key2' => 2}]);
|
2975
|
3074
|
|
|
3075
|
+test 'tag_parse';
|
2976
|
3076
|
$dbi = DBIx::Custom->connect;
|
2977
|
|
-$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
2978
|
|
-$dbi->type_rule(
|
2979
|
|
- from1 => {
|
2980
|
|
- date => sub { $_[0] * 2 },
|
2981
|
|
- },
|
2982
|
|
- into1 => {
|
2983
|
|
- date => sub { $_[0] * 3 },
|
2984
|
|
- }
|
2985
|
|
-);
|
2986
|
|
-$dbi->insert({key1 => 2}, table => 'table1', type_rule_off => 1);
|
2987
|
|
-$result = $dbi->select(table => 'table1', type_rule_off => 1);
|
2988
|
|
-is($result->one->{key1}, 4);
|
|
3077
|
+$dbi->tag_parse(0);
|
|
3078
|
+eval { $dbi->execute('drop table table1') };
|
|
3079
|
+$dbi->execute("create table table1 (key1, key2)");
|
|
3080
|
+$dbi->insert({key1 => 1, key2 => 1}, table => 'table1');
|
|
3081
|
+eval {$dbi->execute("select * from table1 where {= key1}", {key1 => 1})};
|
|
3082
|
+ok($@);
|
2989
|
3083
|
|
|
3084
|
+test 'last_sql';
|
2990
|
3085
|
$dbi = DBIx::Custom->connect;
|
2991
|
|
-$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
2992
|
|
-$dbi->type_rule(
|
2993
|
|
- from1 => {
|
2994
|
|
- date => sub { $_[0] * 2 },
|
2995
|
|
- },
|
2996
|
|
- into1 => {
|
2997
|
|
- date => sub { $_[0] * 3 },
|
2998
|
|
- }
|
2999
|
|
-);
|
3000
|
|
-$dbi->insert({key1 => 2}, table => 'table1');
|
3001
|
|
-$result = $dbi->select(table => 'table1');
|
3002
|
|
-is($result->one->{key1}, 12);
|
|
3086
|
+eval { $dbi->execute('drop table table1') };
|
|
3087
|
+$dbi->execute("create table table1 (key1, key2)");
|
|
3088
|
+$dbi->execute('select * from table1');
|
|
3089
|
+is($dbi->last_sql, 'select * from table1;');
|
3003
|
3090
|
|
3004
|
|
-$dbi = DBIx::Custom->connect;
|
3005
|
|
-$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
3006
|
|
-$dbi->type_rule(
|
3007
|
|
- from1 => {
|
3008
|
|
- date => sub { $_[0] * 2 },
|
3009
|
|
- },
|
3010
|
|
- into1 => {
|
3011
|
|
- date => sub { $_[0] * 3 },
|
3012
|
|
- }
|
3013
|
|
-);
|
3014
|
|
-$dbi->insert({key1 => 2}, table => 'table1');
|
3015
|
|
-$result = $dbi->select(table => 'table1');
|
3016
|
|
-is($result->fetch->[0], 12);
|
|
3091
|
+eval{$dbi->execute("aaa")};
|
|
3092
|
+is($dbi->last_sql, 'aaa;');
|
3017
|
3093
|
|
|
3094
|
+test 'DBIx::Custom header';
|
3018
|
3095
|
$dbi = DBIx::Custom->connect;
|
3019
|
|
-$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
3020
|
|
-$dbi->register_filter(ppp => sub { uc $_[0] });
|
3021
|
|
-$dbi->type_rule(
|
3022
|
|
- into1 => {
|
3023
|
|
- date => 'ppp'
|
3024
|
|
- }
|
3025
|
|
-);
|
3026
|
|
-$dbi->insert({key1 => 'a'}, table => 'table1');
|
3027
|
|
-$result = $dbi->select(table => 'table1');
|
3028
|
|
-is($result->one->{key1}, 'A');
|
|
3096
|
+eval { $dbi->execute('drop table table1') };
|
|
3097
|
+$dbi->execute("create table table1 (key1, key2)");
|
|
3098
|
+$result = $dbi->execute('select key1 as h1, key2 as h2 from table1');
|
|
3099
|
+is_deeply($result->header, [qw/h1 h2/]);
|
3029
|
3100
|
|
3030
|
|
-eval{$dbi->type_rule(
|
3031
|
|
- into1 => {
|
3032
|
|
- date => 'pp'
|
3033
|
|
- }
|
3034
|
|
-)};
|
3035
|
|
-like($@, qr/not registered/);
|
|
3101
|
+test 'Named placeholder :name(operater) syntax';
|
|
3102
|
+$dbi->execute('drop table table1');
|
|
3103
|
+$dbi->execute($create_table1_2);
|
|
3104
|
+$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5});
|
|
3105
|
+$dbi->insert(table => 'table1', param => {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10});
|
3036
|
3106
|
|
3037
|
|
-$dbi = DBIx::Custom->connect;
|
3038
|
|
-$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
3039
|
|
-eval {
|
3040
|
|
- $dbi->type_rule(
|
3041
|
|
- from1 => {
|
3042
|
|
- Date => sub { $_[0] * 2 },
|
3043
|
|
- }
|
3044
|
|
- );
|
3045
|
|
-};
|
3046
|
|
-like($@, qr/lower/);
|
|
3107
|
+$source = "select * from table1 where :key1{=} and :key2{=}";
|
|
3108
|
+$result = $dbi->execute($source, param => {key1 => 1, key2 => 2});
|
|
3109
|
+$rows = $result->all;
|
|
3110
|
+is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}]);
|
3047
|
3111
|
|
3048
|
|
-eval {
|
3049
|
|
- $dbi->type_rule(
|
3050
|
|
- into1 => {
|
3051
|
|
- Date => sub { $_[0] * 2 },
|
3052
|
|
- }
|
3053
|
|
- );
|
3054
|
|
-};
|
3055
|
|
-like($@, qr/lower/);
|
|
3112
|
+$source = "select * from table1 where :key1{ = } and :key2{=}";
|
|
3113
|
+$result = $dbi->execute($source, param => {key1 => 1, key2 => 2});
|
|
3114
|
+$rows = $result->all;
|
|
3115
|
+is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}]);
|
3056
|
3116
|
|
3057
|
|
-$dbi = DBIx::Custom->connect;
|
3058
|
|
-$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
3059
|
|
-$dbi->type_rule(
|
3060
|
|
- from1 => {
|
3061
|
|
- date => sub { $_[0] * 2 },
|
3062
|
|
- },
|
3063
|
|
- into1 => {
|
3064
|
|
- date => sub { $_[0] * 3 },
|
3065
|
|
- }
|
3066
|
|
-);
|
3067
|
|
-$dbi->insert({key1 => 2}, table => 'table1');
|
3068
|
|
-$result = $dbi->select(table => 'table1');
|
3069
|
|
-$result->type_rule_off;
|
3070
|
|
-is($result->one->{key1}, 6);
|
|
3117
|
+$source = "select * from table1 where :key1{<} and :key2{=}";
|
|
3118
|
+$result = $dbi->execute($source, param => {key1 => 5, key2 => 2});
|
|
3119
|
+$rows = $result->all;
|
|
3120
|
+is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}]);
|
3071
|
3121
|
|
3072
|
|
-$dbi = DBIx::Custom->connect;
|
3073
|
|
-$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
3074
|
|
-$dbi->type_rule(
|
3075
|
|
- from1 => {
|
3076
|
|
- date => sub { $_[0] * 2 },
|
3077
|
|
- datetime => sub { $_[0] * 4 },
|
3078
|
|
- },
|
3079
|
|
-);
|
3080
|
|
-$dbi->insert({key1 => 2, key2 => 2}, table => 'table1');
|
3081
|
|
-$result = $dbi->select(table => 'table1');
|
3082
|
|
-$result->type_rule(
|
3083
|
|
- from1 => {
|
3084
|
|
- date => sub { $_[0] * 3 }
|
3085
|
|
- }
|
|
3122
|
+$source = "select * from table1 where :table1.key1{=} and :table1.key2{=}";
|
|
3123
|
+$result = $dbi->execute(
|
|
3124
|
+ $source,
|
|
3125
|
+ param => {'table1.key1' => 1, 'table1.key2' => 1},
|
|
3126
|
+ filter => {'table1.key2' => sub { $_[0] * 2 }}
|
3086
|
3127
|
);
|
3087
|
|
-$row = $result->one;
|
3088
|
|
-is($row->{key1}, 6);
|
3089
|
|
-is($row->{key2}, 2);
|
|
3128
|
+$rows = $result->all;
|
|
3129
|
+is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}]);
|
3090
|
3130
|
|
3091
|
|
-$result = $dbi->select(table => 'table1');
|
3092
|
|
-$result->type_rule(
|
3093
|
|
- from1 => {
|
3094
|
|
- date => sub { $_[0] * 3 }
|
|
3131
|
+test 'high perfomance way';
|
|
3132
|
+$dbi->execute('drop table table1');
|
|
3133
|
+$dbi->execute("create table table1 (ab, bc, ik, hi, ui, pq, dc);");
|
|
3134
|
+$rows = [
|
|
3135
|
+ {ab => 1, bc => 2, ik => 3, hi => 4, ui => 5, pq => 6, dc => 7},
|
|
3136
|
+ {ab => 1, bc => 2, ik => 3, hi => 4, ui => 5, pq => 6, dc => 8},
|
|
3137
|
+];
|
|
3138
|
+{
|
|
3139
|
+ my $query;
|
|
3140
|
+ foreach my $row (@$rows) {
|
|
3141
|
+ $query ||= $dbi->insert($row, table => 'table1', query => 1);
|
|
3142
|
+ $dbi->execute($query, $row, filter => {ab => sub { $_[0] * 2 }});
|
3095
|
3143
|
}
|
3096
|
|
-);
|
3097
|
|
-$row = $result->one;
|
3098
|
|
-is($row->{key1}, 6);
|
3099
|
|
-is($row->{key2}, 2);
|
3100
|
|
-
|
3101
|
|
-$result = $dbi->select(table => 'table1');
|
3102
|
|
-$result->type_rule(
|
3103
|
|
- from1 => {
|
3104
|
|
- date => sub { $_[0] * 3 }
|
|
3144
|
+ is_deeply($dbi->select(table => 'table1')->all,
|
|
3145
|
+ [
|
|
3146
|
+ {ab => 2, bc => 2, ik => 3, hi => 4, ui => 5, pq => 6, dc => 7},
|
|
3147
|
+ {ab => 2, bc => 2, ik => 3, hi => 4, ui => 5, pq => 6, dc => 8},
|
|
3148
|
+ ]
|
|
3149
|
+ );
|
|
3150
|
+}
|
|
3151
|
+
|
|
3152
|
+$dbi->execute('drop table table1');
|
|
3153
|
+$dbi->execute("create table table1 (ab, bc, ik, hi, ui, pq, dc);");
|
|
3154
|
+$rows = [
|
|
3155
|
+ {ab => 1, bc => 2, ik => 3, hi => 4, ui => 5, pq => 6, dc => 7},
|
|
3156
|
+ {ab => 1, bc => 2, ik => 3, hi => 4, ui => 5, pq => 6, dc => 8},
|
|
3157
|
+];
|
|
3158
|
+{
|
|
3159
|
+ my $query;
|
|
3160
|
+ my $sth;
|
|
3161
|
+ foreach my $row (@$rows) {
|
|
3162
|
+ $query ||= $dbi->insert($row, table => 'table1', query => 1);
|
|
3163
|
+ $sth ||= $query->sth;
|
|
3164
|
+ $sth->execute(map { $row->{$_} } sort keys %$row);
|
3105
|
3165
|
}
|
3106
|
|
-);
|
3107
|
|
-$row = $result->one;
|
3108
|
|
-is($row->{key1}, 6);
|
3109
|
|
-is($row->{key2}, 2);
|
3110
|
|
-$result = $dbi->select(table => 'table1');
|
3111
|
|
-$result->type_rule(
|
3112
|
|
- from1 => [date => sub { $_[0] * 3 }]
|
3113
|
|
-);
|
3114
|
|
-$row = $result->one;
|
3115
|
|
-is($row->{key1}, 6);
|
3116
|
|
-is($row->{key2}, 2);
|
3117
|
|
-$dbi->register_filter(fivetimes => sub { $_[0] * 5});
|
3118
|
|
-$result = $dbi->select(table => 'table1');
|
3119
|
|
-$result->type_rule(
|
3120
|
|
- from1 => [date => 'fivetimes']
|
3121
|
|
-);
|
3122
|
|
-$row = $result->one;
|
3123
|
|
-is($row->{key1}, 10);
|
3124
|
|
-is($row->{key2}, 2);
|
3125
|
|
-$result = $dbi->select(table => 'table1');
|
3126
|
|
-$result->type_rule(
|
3127
|
|
- from1 => [date => undef]
|
3128
|
|
-);
|
3129
|
|
-$row = $result->one;
|
3130
|
|
-is($row->{key1}, 2);
|
3131
|
|
-is($row->{key2}, 2);
|
|
3166
|
+ is_deeply($dbi->select(table => 'table1')->all,
|
|
3167
|
+ [
|
|
3168
|
+ {ab => 1, bc => 2, ik => 3, hi => 4, ui => 5, pq => 6, dc => 7},
|
|
3169
|
+ {ab => 1, bc => 2, ik => 3, hi => 4, ui => 5, pq => 6, dc => 8},
|
|
3170
|
+ ]
|
|
3171
|
+ );
|
|
3172
|
+}
|
3132
|
3173
|
|
|
3174
|
+test 'result';
|
3133
|
3175
|
$dbi = DBIx::Custom->connect;
|
3134
|
|
-$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
3135
|
|
-$dbi->type_rule(
|
3136
|
|
- from1 => {
|
3137
|
|
- date => sub { $_[0] * 2 },
|
3138
|
|
- },
|
3139
|
|
-);
|
3140
|
|
-$dbi->insert({key1 => 2}, table => 'table1');
|
|
3176
|
+eval { $dbi->execute('drop table table1') };
|
|
3177
|
+$dbi->execute($create_table1);
|
|
3178
|
+$dbi->insert({key1 => 1, key2 => 2}, table => 'table1');
|
|
3179
|
+$dbi->insert({key1 => 3, key2 => 4}, table => 'table1');
|
|
3180
|
+
|
3141
|
3181
|
$result = $dbi->select(table => 'table1');
|
3142
|
|
-$result->filter(key1 => sub { $_[0] * 3 });
|
3143
|
|
-is($result->one->{key1}, 12);
|
|
3182
|
+@rows = ();
|
|
3183
|
+while (my $row = $result->fetch) {
|
|
3184
|
+ push @rows, [@$row];
|
|
3185
|
+}
|
|
3186
|
+is_deeply(\@rows, [[1, 2], [3, 4]]);
|
3144
|
3187
|
|
3145
|
|
-$dbi = DBIx::Custom->connect;
|
3146
|
|
-$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
3147
|
|
-$dbi->type_rule(
|
3148
|
|
- from1 => {
|
3149
|
|
- date => sub { $_[0] * 2 },
|
3150
|
|
- },
|
3151
|
|
-);
|
3152
|
|
-$dbi->insert({key1 => 2}, table => 'table1');
|
3153
|
3188
|
$result = $dbi->select(table => 'table1');
|
3154
|
|
-$result->filter(key1 => sub { $_[0] * 3 });
|
3155
|
|
-is($result->fetch->[0], 12);
|
|
3189
|
+@rows = ();
|
|
3190
|
+while (my $row = $result->fetch_hash) {
|
|
3191
|
+ push @rows, {%$row};
|
|
3192
|
+}
|
|
3193
|
+is_deeply(\@rows, [{key1 => 1, key2 => 2}, {key1 => 3, key2 => 4}]);
|
3156
|
3194
|
|
3157
|
|
-$dbi = DBIx::Custom->connect;
|
3158
|
|
-$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
3159
|
|
-$dbi->type_rule(
|
3160
|
|
- into1 => {
|
3161
|
|
- date => sub { $_[0] . 'b' }
|
3162
|
|
- },
|
3163
|
|
- into2 => {
|
3164
|
|
- date => sub { $_[0] . 'c' }
|
3165
|
|
- },
|
3166
|
|
- from1 => {
|
3167
|
|
- date => sub { $_[0] . 'd' }
|
3168
|
|
- },
|
3169
|
|
- from2 => {
|
3170
|
|
- date => sub { $_[0] . 'e' }
|
3171
|
|
- }
|
3172
|
|
-);
|
3173
|
|
-$dbi->insert({key1 => '1'}, table => 'table1', type_rule_off => 1);
|
3174
|
3195
|
$result = $dbi->select(table => 'table1');
|
3175
|
|
-is($result->type_rule_off->fetch_first->[0], '1');
|
|
3196
|
+$row = $result->fetch_first;
|
|
3197
|
+is_deeply($row, [1, 2], "row");
|
|
3198
|
+$row = $result->fetch;
|
|
3199
|
+ok(!$row, "finished");
|
|
3200
|
+
|
3176
|
3201
|
$result = $dbi->select(table => 'table1');
|
3177
|
|
-is($result->type_rule_on->fetch_first->[0], '1de');
|
|
3202
|
+$row = $result->fetch_hash_first;
|
|
3203
|
+is_deeply($row, {key1 => 1, key2 => 2}, "row");
|
|
3204
|
+$row = $result->fetch_hash;
|
|
3205
|
+ok(!$row, "finished");
|
|
3206
|
+
|
|
3207
|
+$dbi->execute('create table table2 (key1, key2);');
|
|
3208
|
+$result = $dbi->select(table => 'table2');
|
|
3209
|
+$row = $result->fetch_hash_first;
|
|
3210
|
+ok(!$row, "no row fetch");
|
3178
|
3211
|
|
3179
|
3212
|
$dbi = DBIx::Custom->connect;
|
3180
|
|
-$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
3181
|
|
-$dbi->type_rule(
|
3182
|
|
- into1 => {
|
3183
|
|
- date => sub { $_[0] . 'b' }
|
3184
|
|
- },
|
3185
|
|
- into2 => {
|
3186
|
|
- date => sub { $_[0] . 'c' }
|
3187
|
|
- },
|
3188
|
|
- from1 => {
|
3189
|
|
- date => sub { $_[0] . 'd' }
|
3190
|
|
- },
|
3191
|
|
- from2 => {
|
3192
|
|
- date => sub { $_[0] . 'e' }
|
3193
|
|
- }
|
3194
|
|
-);
|
3195
|
|
-$dbi->insert({key1 => '1'}, table => 'table1', type_rule1_off => 1);
|
|
3213
|
+eval { $dbi->execute('drop table table1') };
|
|
3214
|
+$dbi->execute($create_table1);
|
|
3215
|
+$dbi->insert({key1 => 1, key2 => 2}, table => 'table1');
|
|
3216
|
+$dbi->insert({key1 => 3, key2 => 4}, table => 'table1');
|
|
3217
|
+$dbi->insert({key1 => 5, key2 => 6}, table => 'table1');
|
|
3218
|
+$dbi->insert({key1 => 7, key2 => 8}, table => 'table1');
|
|
3219
|
+$dbi->insert({key1 => 9, key2 => 10}, table => 'table1');
|
3196
|
3220
|
$result = $dbi->select(table => 'table1');
|
3197
|
|
-is($result->type_rule1_off->fetch_first->[0], '1ce');
|
|
3221
|
+$rows = $result->fetch_multi(2);
|
|
3222
|
+is_deeply($rows, [[1, 2],
|
|
3223
|
+ [3, 4]], "fetch_multi first");
|
|
3224
|
+$rows = $result->fetch_multi(2);
|
|
3225
|
+is_deeply($rows, [[5, 6],
|
|
3226
|
+ [7, 8]], "fetch_multi secound");
|
|
3227
|
+$rows = $result->fetch_multi(2);
|
|
3228
|
+is_deeply($rows, [[9, 10]], "fetch_multi third");
|
|
3229
|
+$rows = $result->fetch_multi(2);
|
|
3230
|
+ok(!$rows);
|
|
3231
|
+
|
3198
|
3232
|
$result = $dbi->select(table => 'table1');
|
3199
|
|
-is($result->type_rule1_on->fetch_first->[0], '1cde');
|
|
3233
|
+eval {$result->fetch_multi};
|
|
3234
|
+like($@, qr/Row count must be specified/, "Not specified row count");
|
3200
|
3235
|
|
3201
|
|
-$dbi = DBIx::Custom->connect;
|
3202
|
|
-$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
3203
|
|
-$dbi->type_rule(
|
3204
|
|
- into1 => {
|
3205
|
|
- date => sub { $_[0] . 'b' }
|
3206
|
|
- },
|
3207
|
|
- into2 => {
|
3208
|
|
- date => sub { $_[0] . 'c' }
|
3209
|
|
- },
|
3210
|
|
- from1 => {
|
3211
|
|
- date => sub { $_[0] . 'd' }
|
3212
|
|
- },
|
3213
|
|
- from2 => {
|
3214
|
|
- date => sub { $_[0] . 'e' }
|
3215
|
|
- }
|
3216
|
|
-);
|
3217
|
|
-$dbi->insert({key1 => '1'}, table => 'table1', type_rule2_off => 1);
|
3218
|
3236
|
$result = $dbi->select(table => 'table1');
|
3219
|
|
-is($result->type_rule2_off->fetch_first->[0], '1bd');
|
|
3237
|
+$rows = $result->fetch_hash_multi(2);
|
|
3238
|
+is_deeply($rows, [{key1 => 1, key2 => 2},
|
|
3239
|
+ {key1 => 3, key2 => 4}], "fetch_multi first");
|
|
3240
|
+$rows = $result->fetch_hash_multi(2);
|
|
3241
|
+is_deeply($rows, [{key1 => 5, key2 => 6},
|
|
3242
|
+ {key1 => 7, key2 => 8}], "fetch_multi secound");
|
|
3243
|
+$rows = $result->fetch_hash_multi(2);
|
|
3244
|
+is_deeply($rows, [{key1 => 9, key2 => 10}], "fetch_multi third");
|
|
3245
|
+$rows = $result->fetch_hash_multi(2);
|
|
3246
|
+ok(!$rows);
|
|
3247
|
+
|
3220
|
3248
|
$result = $dbi->select(table => 'table1');
|
3221
|
|
-is($result->type_rule2_on->fetch_first->[0], '1bde');
|
|
3249
|
+eval {$result->fetch_hash_multi};
|
|
3250
|
+like($@, qr/Row count must be specified/, "Not specified row count");
|
3222
|
3251
|
|
3223
|
|
-test 'separator';
|
3224
|
3252
|
$dbi = DBIx::Custom->connect;
|
|
3253
|
+eval { $dbi->execute('drop table table1') };
|
3225
|
3254
|
$dbi->execute($create_table1);
|
3226
|
|
-$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
|
3227
|
|
-
|
3228
|
|
-$dbi->create_model(
|
3229
|
|
- table => 'table1',
|
3230
|
|
- join => [
|
3231
|
|
- 'left outer join table2 on table1.key1 = table2.key1'
|
3232
|
|
- ],
|
3233
|
|
- primary_key => ['key1'],
|
3234
|
|
-);
|
3235
|
|
-$model2 = $dbi->create_model(
|
3236
|
|
- table => 'table2',
|
3237
|
|
-);
|
3238
|
|
-$dbi->setup_model;
|
3239
|
|
-$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
|
3240
|
|
-$dbi->insert(table => 'table2', param => {key1 => 1, key3 => 3});
|
3241
|
|
-$model = $dbi->model('table1');
|
3242
|
|
-$result = $model->select(
|
3243
|
|
- column => [
|
3244
|
|
- $model->mycolumn,
|
3245
|
|
- {table2 => [qw/key1 key3/]}
|
3246
|
|
- ],
|
3247
|
|
- where => {'table1.key1' => 1}
|
3248
|
|
-);
|
3249
|
|
-is_deeply($result->one,
|
3250
|
|
- {key1 => 1, key2 => 2, 'table2.key1' => 1, 'table2.key3' => 3});
|
3251
|
|
-is_deeply($model2->select->one, {key1 => 1, key3 => 3});
|
|
3255
|
+$dbi->insert({key1 => 1, key2 => 2}, table => 'table1');
|
|
3256
|
+$dbi->insert({key1 => 3, key2 => 4}, table => 'table1');
|
3252
|
3257
|
|
3253
|
|
-$dbi->separator('__');
|
3254
|
|
-$model = $dbi->model('table1');
|
3255
|
|
-$result = $model->select(
|
3256
|
|
- column => [
|
3257
|
|
- $model->mycolumn,
|
3258
|
|
- {table2 => [qw/key1 key3/]}
|
3259
|
|
- ],
|
3260
|
|
- where => {'table1.key1' => 1}
|
3261
|
|
-);
|
3262
|
|
-is_deeply($result->one,
|
3263
|
|
- {key1 => 1, key2 => 2, 'table2__key1' => 1, 'table2__key3' => 3});
|
3264
|
|
-is_deeply($model2->select->one, {key1 => 1, key3 => 3});
|
|
3258
|
+test 'fetch_all';
|
|
3259
|
+$result = $dbi->select(table => 'table1');
|
|
3260
|
+$rows = $result->fetch_all;
|
|
3261
|
+is_deeply($rows, [[1, 2], [3, 4]]);
|
3265
|
3262
|
|
3266
|
|
-$dbi->separator('-');
|
3267
|
|
-$model = $dbi->model('table1');
|
3268
|
|
-$result = $model->select(
|
3269
|
|
- column => [
|
3270
|
|
- $model->mycolumn,
|
3271
|
|
- {table2 => [qw/key1 key3/]}
|
3272
|
|
- ],
|
3273
|
|
- where => {'table1.key1' => 1}
|
3274
|
|
-);
|
3275
|
|
-is_deeply($result->one,
|
3276
|
|
- {key1 => 1, key2 => 2, 'table2-key1' => 1, 'table2-key3' => 3});
|
3277
|
|
-is_deeply($model2->select->one, {key1 => 1, key3 => 3});
|
|
3263
|
+$result = $dbi->select(table => 'table1');
|
|
3264
|
+$rows = $result->fetch_hash_all;
|
|
3265
|
+is_deeply($rows, [{key1 => 1, key2 => 2}, {key1 => 3, key2 => 4}]);
|
3278
|
3266
|
|
|
3267
|
+$result = $dbi->select(table => 'table1');
|
|
3268
|
+$result->dbi->filters({three_times => sub { $_[0] * 3}});
|
|
3269
|
+$result->filter({key1 => 'three_times'});
|
3279
|
3270
|
|
3280
|
|
-test 'filter_off';
|
3281
|
|
-$dbi = DBIx::Custom->connect;
|
3282
|
|
-$dbi->execute($create_table1);
|
3283
|
|
-$dbi->execute('create table table2 (key1 char(255), key3 char(255));');
|
|
3271
|
+$rows = $result->fetch_all;
|
|
3272
|
+is_deeply($rows, [[3, 2], [9, 4]], "array");
|
3284
|
3273
|
|
3285
|
|
-$dbi->create_model(
|
3286
|
|
- table => 'table1',
|
3287
|
|
- join => [
|
3288
|
|
- 'left outer join table2 on table1.key1 = table2.key1'
|
3289
|
|
- ],
|
3290
|
|
- primary_key => ['key1'],
|
|
3274
|
+$result = $dbi->select(table => 'table1');
|
|
3275
|
+$result->dbi->filters({three_times => sub { $_[0] * 3}});
|
|
3276
|
+$result->filter({key1 => 'three_times'});
|
|
3277
|
+$rows = $result->fetch_hash_all;
|
|
3278
|
+is_deeply($rows, [{key1 => 3, key2 => 2}, {key1 => 9, key2 => 4}], "hash");
|
|
3279
|
+
|
|
3280
|
+test "query_builder";
|
|
3281
|
+$datas = [
|
|
3282
|
+ # Basic tests
|
|
3283
|
+ { name => 'placeholder basic',
|
|
3284
|
+ source => "a {? k1} b {= k2} {<> k3} {> k4} {< k5} {>= k6} {<= k7} {like k8}", ,
|
|
3285
|
+ sql_expected => "a ? b k2 = ? k3 <> ? k4 > ? k5 < ? k6 >= ? k7 <= ? k8 like ?;",
|
|
3286
|
+ columns_expected => [qw/k1 k2 k3 k4 k5 k6 k7 k8/]
|
|
3287
|
+ },
|
|
3288
|
+ {
|
|
3289
|
+ name => 'placeholder in',
|
|
3290
|
+ source => "{in k1 3};",
|
|
3291
|
+ sql_expected => "k1 in (?, ?, ?);",
|
|
3292
|
+ columns_expected => [qw/k1 k1 k1/]
|
|
3293
|
+ },
|
|
3294
|
+
|
|
3295
|
+ # Table name
|
|
3296
|
+ {
|
|
3297
|
+ name => 'placeholder with table name',
|
|
3298
|
+ source => "{= a.k1} {= a.k2}",
|
|
3299
|
+ sql_expected => "a.k1 = ? a.k2 = ?;",
|
|
3300
|
+ columns_expected => [qw/a.k1 a.k2/]
|
|
3301
|
+ },
|
|
3302
|
+ {
|
|
3303
|
+ name => 'placeholder in with table name',
|
|
3304
|
+ source => "{in a.k1 2} {in b.k2 2}",
|
|
3305
|
+ sql_expected => "a.k1 in (?, ?) b.k2 in (?, ?);",
|
|
3306
|
+ columns_expected => [qw/a.k1 a.k1 b.k2 b.k2/]
|
|
3307
|
+ },
|
|
3308
|
+ {
|
|
3309
|
+ name => 'not contain tag',
|
|
3310
|
+ source => "aaa",
|
|
3311
|
+ sql_expected => "aaa;",
|
|
3312
|
+ columns_expected => [],
|
|
3313
|
+ }
|
|
3314
|
+];
|
|
3315
|
+
|
|
3316
|
+for (my $i = 0; $i < @$datas; $i++) {
|
|
3317
|
+ my $data = $datas->[$i];
|
|
3318
|
+ my $builder = DBIx::Custom->new->query_builder;
|
|
3319
|
+ my $query = $builder->build_query($data->{source});
|
|
3320
|
+ is($query->{sql}, $data->{sql_expected}, "$data->{name} : sql");
|
|
3321
|
+ is_deeply($query->columns, $data->{columns_expected}, "$data->{name} : columns");
|
|
3322
|
+}
|
|
3323
|
+
|
|
3324
|
+$builder = DBIx::Custom->new->query_builder;
|
|
3325
|
+$ret_val = $builder->register_tag(
|
|
3326
|
+ p => sub {
|
|
3327
|
+ my @args = @_;
|
|
3328
|
+
|
|
3329
|
+ my $expand = "? $args[0] $args[1]";
|
|
3330
|
+ my $columns = [2];
|
|
3331
|
+ return [$expand, $columns];
|
|
3332
|
+ }
|
3291
|
3333
|
);
|
3292
|
|
-$dbi->setup_model;
|
3293
|
|
-$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
|
3294
|
|
-$model = $dbi->model('table1');
|
3295
|
|
-$result = $model->select(column => 'key1');
|
3296
|
|
-$result->filter(key1 => sub { $_[0] * 2 });
|
3297
|
|
-is_deeply($result->one, {key1 => 2});
|
3298
|
3334
|
|
3299
|
|
-test 'available_datetype';
|
3300
|
|
-$dbi = DBIx::Custom->connect;
|
3301
|
|
-ok($dbi->can('available_datatype'));
|
|
3335
|
+$query = $builder->build_query("{p a b}");
|
|
3336
|
+is($query->{sql}, "? a b;", "register_tag sql");
|
|
3337
|
+is_deeply($query->{columns}, [2], "register_tag columns");
|
|
3338
|
+isa_ok($ret_val, 'DBIx::Custom::QueryBuilder');
|
3302
|
3339
|
|
|
3340
|
+$builder = DBIx::Custom->new->query_builder;
|
3303
|
3341
|
|
3304
|
|
-test 'select prefix option';
|
3305
|
|
-$dbi = DBIx::Custom->connect;
|
3306
|
|
-$dbi->execute($create_table1);
|
3307
|
|
-$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2});
|
3308
|
|
-$rows = $dbi->select(prefix => 'key1,', column => 'key2', table => 'table1')->all;
|
3309
|
|
-is_deeply($rows, [{key1 => 1, key2 => 2}], "table");
|
|
3342
|
+eval{$builder->build_query('{? }')};
|
|
3343
|
+like($@, qr/\QColumn name must be specified in tag "{? }"/, "? not arguments");
|
3310
|
3344
|
|
|
3345
|
+eval{$builder->build_query("{a }")};
|
|
3346
|
+like($@, qr/\QTag "a" is not registered/, "tag not exist");
|
3311
|
3347
|
|
3312
|
|
-test 'separator';
|
3313
|
|
-$dbi = DBIx::Custom->connect;
|
3314
|
|
-is($dbi->separator, '.');
|
3315
|
|
-$dbi->separator('-');
|
3316
|
|
-is($dbi->separator, '-');
|
3317
|
|
-$dbi->separator('__');
|
3318
|
|
-is($dbi->separator, '__');
|
3319
|
|
-eval { $dbi->separator('?') };
|
3320
|
|
-like($@, qr/Separator/);
|
|
3348
|
+$builder->register_tag({
|
|
3349
|
+ q => 'string'
|
|
3350
|
+});
|
3321
|
3351
|
|
|
3352
|
+eval{$builder->build_query("{q}", {})};
|
|
3353
|
+like($@, qr/Tag "q" must be sub reference/, "tag not code ref");
|
3322
|
3354
|
|
3323
|
|
-test 'map_param';
|
3324
|
|
-$dbi = DBIx::Custom->connect;
|
3325
|
|
-$param = $dbi->map_param(
|
3326
|
|
- {id => 1, author => 'Ken', price => 1900},
|
3327
|
|
- id => 'book.id',
|
3328
|
|
- author => ['book.author', sub { '%' . $_[0] . '%' }],
|
3329
|
|
- price => ['book.price', {if => sub { $_[0] eq 1900 }}]
|
3330
|
|
-);
|
3331
|
|
-is_deeply($param, {'book.id' => 1, 'book.author' => '%Ken%',
|
3332
|
|
- 'book.price' => 1900});
|
|
3355
|
+$builder->register_tag({
|
|
3356
|
+ r => sub {}
|
|
3357
|
+});
|
3333
|
3358
|
|
3334
|
|
-$param = $dbi->map_param(
|
3335
|
|
- {id => 0, author => 0, price => 0},
|
3336
|
|
- id => 'book.id',
|
3337
|
|
- author => ['book.author', sub { '%' . $_[0] . '%' }],
|
3338
|
|
- price => ['book.price', sub { '%' . $_[0] . '%' },
|
3339
|
|
- {if => sub { $_[0] eq 0 }}]
|
|
3359
|
+eval{$builder->build_query("{r}")};
|
|
3360
|
+like($@, qr/\QTag "r" must return [STRING, ARRAY_REFERENCE]/, "tag return noting");
|
|
3361
|
+
|
|
3362
|
+$builder->register_tag({
|
|
3363
|
+ s => sub { return ["a", ""]}
|
|
3364
|
+});
|
|
3365
|
+
|
|
3366
|
+eval{$builder->build_query("{s}")};
|
|
3367
|
+like($@, qr/\QTag "s" must return [STRING, ARRAY_REFERENCE]/, "tag return not array columns");
|
|
3368
|
+
|
|
3369
|
+$builder->register_tag(
|
|
3370
|
+ t => sub {return ["a", []]}
|
3340
|
3371
|
);
|
3341
|
|
-is_deeply($param, {'book.id' => 0, 'book.author' => '%0%', 'book.price' => '%0%'});
|
3342
|
3372
|
|
3343
|
|
-$param = $dbi->map_param(
|
3344
|
|
- {id => '', author => '', price => ''},
|
3345
|
|
- id => 'book.id',
|
3346
|
|
- author => ['book.author', sub { '%' . $_[0] . '%' }],
|
3347
|
|
- price => ['book.price', sub { '%' . $_[0] . '%' },
|
3348
|
|
- {if => sub { $_[0] eq 1 }}]
|
|
3373
|
+
|
|
3374
|
+test 'General error case';
|
|
3375
|
+$builder = DBIx::Custom->new->query_builder;
|
|
3376
|
+$builder->register_tag(
|
|
3377
|
+ a => sub {
|
|
3378
|
+ return ["? ? ?", ['']];
|
|
3379
|
+ }
|
3349
|
3380
|
);
|
3350
|
|
-is_deeply($param, {});
|
|
3381
|
+eval{$builder->build_query("{a}")};
|
|
3382
|
+like($@, qr/\QPlaceholder count/, "placeholder count is invalid");
|
3351
|
3383
|
|
3352
|
|
-$param = $dbi->map_param(
|
3353
|
|
- {id => undef, author => undef, price => undef},
|
3354
|
|
- id => 'book.id',
|
3355
|
|
- price => ['book.price', {if => 'exists'}]
|
|
3384
|
+
|
|
3385
|
+test 'Default tag Error case';
|
|
3386
|
+eval{$builder->build_query("{= }")};
|
|
3387
|
+like($@, qr/Column name must be specified in tag "{= }"/, "basic '=' : key not exist");
|
|
3388
|
+
|
|
3389
|
+eval{$builder->build_query("{in }")};
|
|
3390
|
+like($@, qr/Column name and count of values must be specified in tag "{in }"/, "in : key not exist");
|
|
3391
|
+
|
|
3392
|
+eval{$builder->build_query("{in a}")};
|
|
3393
|
+like($@, qr/\QColumn name and count of values must be specified in tag "{in }"/,
|
|
3394
|
+ "in : key not exist");
|
|
3395
|
+
|
|
3396
|
+eval{$builder->build_query("{in a r}")};
|
|
3397
|
+like($@, qr/\QColumn name and count of values must be specified in tag "{in }"/,
|
|
3398
|
+ "in : key not exist");
|
|
3399
|
+
|
|
3400
|
+test 'variouse source';
|
|
3401
|
+$source = "a {= b} c \\{ \\} {= \\{} {= \\}} d;";
|
|
3402
|
+$query = $builder->build_query($source);
|
|
3403
|
+is($query->sql, 'a b = ? c { } { = ? } = ? d;', "basic : 1");
|
|
3404
|
+
|
|
3405
|
+$source = "abc;";
|
|
3406
|
+$query = $builder->build_query($source);
|
|
3407
|
+is($query->sql, 'abc;', "basic : 2");
|
|
3408
|
+
|
|
3409
|
+$source = "{= a}";
|
|
3410
|
+$query = $builder->build_query($source);
|
|
3411
|
+is($query->sql, 'a = ?;', "only tag");
|
|
3412
|
+
|
|
3413
|
+$source = "000;";
|
|
3414
|
+$query = $builder->build_query($source);
|
|
3415
|
+is($query->sql, '000;', "contain 0 value");
|
|
3416
|
+
|
|
3417
|
+$source = "a {= b} }";
|
|
3418
|
+eval{$builder->build_query($source)};
|
|
3419
|
+like($@, qr/unexpected "}"/, "error : 1");
|
|
3420
|
+
|
|
3421
|
+$source = "a {= {}";
|
|
3422
|
+eval{$builder->build_query($source)};
|
|
3423
|
+like($@, qr/unexpected "{"/, "error : 2");
|
|
3424
|
+
|
|
3425
|
+### SQLite test
|
|
3426
|
+test 'type option'; # DEPRECATED!
|
|
3427
|
+$dbi = DBIx::Custom->connect(
|
|
3428
|
+ data_source => 'dbi:SQLite:dbname=:memory:',
|
|
3429
|
+ dbi_option => {
|
|
3430
|
+ $DBD::SQLite::VERSION > 1.26 ? (sqlite_unicode => 1) : (unicode => 1)
|
|
3431
|
+ }
|
3356
|
3432
|
);
|
3357
|
|
-is_deeply($param, {'book.price' => undef});
|
|
3433
|
+$binary = pack("I3", 1, 2, 3);
|
|
3434
|
+eval { $dbi->execute('drop table table1') };
|
|
3435
|
+$dbi->execute('create table table1(key1, key2)');
|
|
3436
|
+$dbi->insert(table => 'table1', param => {key1 => $binary, key2 => 'あ'}, type => [key1 => DBI::SQL_BLOB]);
|
|
3437
|
+$result = $dbi->select(table => 'table1');
|
|
3438
|
+$row = $result->one;
|
|
3439
|
+is_deeply($row, {key1 => $binary, key2 => 'あ'}, "basic");
|
|
3440
|
+$result = $dbi->execute('select length(key1) as key1_length from table1');
|
|
3441
|
+$row = $result->one;
|
|
3442
|
+is($row->{key1_length}, length $binary);
|
3358
|
3443
|
|
3359
|
|
-$param = $dbi->map_param(
|
3360
|
|
- {price => 'a'},
|
3361
|
|
- id => ['book.id', {if => 'exists'}],
|
3362
|
|
- price => ['book.price', sub { '%' . $_[0] }, {if => 'exists'}]
|
|
3444
|
+test 'type_rule from';
|
|
3445
|
+$dbi = DBIx::Custom->connect;
|
|
3446
|
+$dbi->type_rule(
|
|
3447
|
+ from1 => {
|
|
3448
|
+ date => sub { uc $_[0] }
|
|
3449
|
+ }
|
3363
|
3450
|
);
|
3364
|
|
-is_deeply($param, {'book.price' => '%a'});
|
|
3451
|
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
3452
|
+$dbi->insert({key1 => 'a'}, table => 'table1');
|
|
3453
|
+$result = $dbi->select(table => 'table1');
|
|
3454
|
+is($result->fetch_first->[0], 'A');
|
3365
|
3455
|
|
|
3456
|
+$result = $dbi->select(table => 'table1');
|
|
3457
|
+is($result->one->{key1}, 'A');
|
3366
|
3458
|
|
3367
|
|
-test 'table_alias';
|
|
3459
|
+
|
|
3460
|
+test 'type_rule into';
|
3368
|
3461
|
$dbi = DBIx::Custom->connect;
|
3369
|
3462
|
$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
3370
|
3463
|
$dbi->type_rule(
|
...
|
...
|
@@ -3372,380 +3465,374 @@ $dbi->type_rule(
|
3372
|
3465
|
date => sub { uc $_[0] }
|
3373
|
3466
|
}
|
3374
|
3467
|
);
|
3375
|
|
-$dbi->execute("insert into table1 (key1) values (:table2.key1)", {'table2.key1' => 'a'},
|
3376
|
|
- table_alias => {table2 => 'table1'});
|
|
3468
|
+$dbi->insert({key1 => 'a'}, table => 'table1');
|
3377
|
3469
|
$result = $dbi->select(table => 'table1');
|
3378
|
3470
|
is($result->one->{key1}, 'A');
|
3379
|
3471
|
|
3380
|
|
-
|
3381
|
|
-test 'order';
|
3382
|
3472
|
$dbi = DBIx::Custom->connect;
|
3383
|
|
-$dbi->execute("create table table1 (key1, key2)");
|
3384
|
|
-$dbi->insert({key1 => 1, key2 => 1}, table => 'table1');
|
3385
|
|
-$dbi->insert({key1 => 1, key2 => 3}, table => 'table1');
|
3386
|
|
-$dbi->insert({key1 => 2, key2 => 2}, table => 'table1');
|
3387
|
|
-$dbi->insert({key1 => 2, key2 => 4}, table => 'table1');
|
3388
|
|
-my $order = $dbi->order;
|
3389
|
|
-$order->prepend('key1', 'key2 desc');
|
3390
|
|
-$result = $dbi->select(table => 'table1', append => "$order");
|
3391
|
|
-is_deeply($result->all, [{key1 => 1, key2 => 3}, {key1 => 1, key2 => 1},
|
3392
|
|
- {key1 => 2, key2 => 4}, {key1 => 2, key2 => 2}]);
|
3393
|
|
-$order->prepend('key1 desc');
|
3394
|
|
-$result = $dbi->select(table => 'table1', append => "$order");
|
3395
|
|
-is_deeply($result->all, [{key1 => 2, key2 => 4}, {key1 => 2, key2 => 2},
|
3396
|
|
- {key1 => 1, key2 => 3}, {key1 => 1, key2 => 1}]);
|
3397
|
|
-
|
3398
|
|
-$order = $dbi->order;
|
3399
|
|
-$order->prepend(['table1-key1'], [qw/table1-key2 desc/]);
|
3400
|
|
-$result = $dbi->select(table => 'table1',
|
3401
|
|
- column => [[key1 => 'table1-key1'], [key2 => 'table1-key2']],
|
3402
|
|
- append => "$order");
|
3403
|
|
-is_deeply($result->all, [{'table1-key1' => 1, 'table1-key2' => 3},
|
3404
|
|
- {'table1-key1' => 1, 'table1-key2' => 1},
|
3405
|
|
- {'table1-key1' => 2, 'table1-key2' => 4},
|
3406
|
|
- {'table1-key1' => 2, 'table1-key2' => 2}]);
|
|
3473
|
+$dbi->execute("create table table1 (key1 date, key2 datetime)");
|
|
3474
|
+$dbi->type_rule(
|
|
3475
|
+ into1 => [
|
|
3476
|
+ [qw/date datetime/] => sub { uc $_[0] }
|
|
3477
|
+ ]
|
|
3478
|
+);
|
|
3479
|
+$dbi->insert({key1 => 'a', key2 => 'b'}, table => 'table1');
|
|
3480
|
+$result = $dbi->select(table => 'table1');
|
|
3481
|
+$row = $result->one;
|
|
3482
|
+is($row->{key1}, 'A');
|
|
3483
|
+is($row->{key2}, 'B');
|
3407
|
3484
|
|
3408
|
|
-test 'tag_parse';
|
3409
|
3485
|
$dbi = DBIx::Custom->connect;
|
3410
|
|
-$dbi->tag_parse(0);
|
3411
|
|
-$dbi->execute("create table table1 (key1, key2)");
|
3412
|
|
-$dbi->insert({key1 => 1, key2 => 1}, table => 'table1');
|
3413
|
|
-eval {$dbi->execute("select * from table1 where {= key1}", {key1 => 1})};
|
3414
|
|
-ok($@);
|
|
3486
|
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
3487
|
+$dbi->insert({key1 => 'a', key2 => 'B'}, table => 'table1');
|
|
3488
|
+$dbi->type_rule(
|
|
3489
|
+ into1 => [
|
|
3490
|
+ [qw/date datetime/] => sub { uc $_[0] }
|
|
3491
|
+ ]
|
|
3492
|
+);
|
|
3493
|
+$result = $dbi->execute(
|
|
3494
|
+ "select * from table1 where key1 = :key1 and key2 = :table1.key2;",
|
|
3495
|
+ param => {key1 => 'a', 'table1.key2' => 'b'}
|
|
3496
|
+);
|
|
3497
|
+$row = $result->one;
|
|
3498
|
+is($row->{key1}, 'a');
|
|
3499
|
+is($row->{key2}, 'B');
|
3415
|
3500
|
|
3416
|
|
-test 'last_sql';
|
3417
|
3501
|
$dbi = DBIx::Custom->connect;
|
3418
|
|
-$dbi->execute("create table table1 (key1, key2)");
|
3419
|
|
-$dbi->execute('select * from table1');
|
3420
|
|
-is($dbi->last_sql, 'select * from table1;');
|
|
3502
|
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
3503
|
+$dbi->insert({key1 => 'A', key2 => 'B'}, table => 'table1');
|
|
3504
|
+$dbi->type_rule(
|
|
3505
|
+ into1 => [
|
|
3506
|
+ [qw/date datetime/] => sub { uc $_[0] }
|
|
3507
|
+ ]
|
|
3508
|
+);
|
|
3509
|
+$result = $dbi->execute(
|
|
3510
|
+ "select * from table1 where key1 = :key1 and key2 = :table1.key2;",
|
|
3511
|
+ param => {key1 => 'a', 'table1.key2' => 'b'},
|
|
3512
|
+ table => 'table1'
|
|
3513
|
+);
|
|
3514
|
+$row = $result->one;
|
|
3515
|
+is($row->{key1}, 'A');
|
|
3516
|
+is($row->{key2}, 'B');
|
3421
|
3517
|
|
3422
|
|
-eval{$dbi->execute("aaa")};
|
3423
|
|
-is($dbi->last_sql, 'aaa;');
|
|
3518
|
+$dbi = DBIx::Custom->connect;
|
|
3519
|
+$dbi->execute("create table table1 (key1 date, key2 datetime)");
|
|
3520
|
+$dbi->register_filter(twice => sub { $_[0] * 2 });
|
|
3521
|
+$dbi->type_rule(
|
|
3522
|
+ from1 => {
|
|
3523
|
+ date => 'twice',
|
|
3524
|
+ },
|
|
3525
|
+ into1 => {
|
|
3526
|
+ date => 'twice',
|
|
3527
|
+ }
|
|
3528
|
+);
|
|
3529
|
+$dbi->insert({key1 => 2}, table => 'table1');
|
|
3530
|
+$result = $dbi->select(table => 'table1');
|
|
3531
|
+is($result->fetch->[0], 8);
|
3424
|
3532
|
|
3425
|
|
-test 'DBIx::Custom header';
|
|
3533
|
+test 'type_rule and filter order';
|
3426
|
3534
|
$dbi = DBIx::Custom->connect;
|
3427
|
|
-$dbi->execute("create table table1 (key1, key2)");
|
3428
|
|
-$result = $dbi->execute('select key1 as h1, key2 as h2 from table1');
|
3429
|
|
-is_deeply($result->header, [qw/h1 h2/]);
|
|
3535
|
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
3536
|
+$dbi->type_rule(
|
|
3537
|
+ into1 => {
|
|
3538
|
+ date => sub { $_[0] . 'b' }
|
|
3539
|
+ },
|
|
3540
|
+ into2 => {
|
|
3541
|
+ date => sub { $_[0] . 'c' }
|
|
3542
|
+ },
|
|
3543
|
+ from1 => {
|
|
3544
|
+ date => sub { $_[0] . 'd' }
|
|
3545
|
+ },
|
|
3546
|
+ from2 => {
|
|
3547
|
+ date => sub { $_[0] . 'e' }
|
|
3548
|
+ }
|
|
3549
|
+);
|
|
3550
|
+$dbi->insert({key1 => '1'}, table => 'table1', filter => {key1 => sub { $_[0] . 'a' }});
|
|
3551
|
+$result = $dbi->select(table => 'table1');
|
|
3552
|
+$result->filter(key1 => sub { $_[0] . 'f' });
|
|
3553
|
+is($result->fetch_first->[0], '1abcdef');
|
3430
|
3554
|
|
3431
|
|
-test 'Named placeholder :name(operater) syntax';
|
3432
|
|
-$dbi->execute('drop table table1');
|
3433
|
|
-$dbi->execute($create_table1_2);
|
3434
|
|
-$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5});
|
3435
|
|
-$dbi->insert(table => 'table1', param => {key1 => 6, key2 => 7, key3 => 8, key4 => 9, key5 => 10});
|
|
3555
|
+$dbi = DBIx::Custom->connect;
|
|
3556
|
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
3557
|
+$dbi->type_rule(
|
|
3558
|
+ from1 => {
|
|
3559
|
+ date => sub { $_[0] . 'p' }
|
|
3560
|
+ },
|
|
3561
|
+ from2 => {
|
|
3562
|
+ date => sub { $_[0] . 'q' }
|
|
3563
|
+ },
|
|
3564
|
+);
|
|
3565
|
+$dbi->insert({key1 => '1'}, table => 'table1');
|
|
3566
|
+$result = $dbi->select(table => 'table1');
|
|
3567
|
+$result->type_rule(
|
|
3568
|
+ from1 => {
|
|
3569
|
+ date => sub { $_[0] . 'd' }
|
|
3570
|
+ },
|
|
3571
|
+ from2 => {
|
|
3572
|
+ date => sub { $_[0] . 'e' }
|
|
3573
|
+ }
|
|
3574
|
+);
|
|
3575
|
+$result->filter(key1 => sub { $_[0] . 'f' });
|
|
3576
|
+is($result->fetch_first->[0], '1def');
|
3436
|
3577
|
|
3437
|
|
-$source = "select * from table1 where :key1{=} and :key2{=}";
|
3438
|
|
-$result = $dbi->execute($source, param => {key1 => 1, key2 => 2});
|
3439
|
|
-$rows = $result->all;
|
3440
|
|
-is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}]);
|
|
3578
|
+test 'type_rule_off';
|
|
3579
|
+$dbi = DBIx::Custom->connect;
|
|
3580
|
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
3581
|
+$dbi->type_rule(
|
|
3582
|
+ from1 => {
|
|
3583
|
+ date => sub { $_[0] * 2 },
|
|
3584
|
+ },
|
|
3585
|
+ into1 => {
|
|
3586
|
+ date => sub { $_[0] * 2 },
|
|
3587
|
+ }
|
|
3588
|
+);
|
|
3589
|
+$dbi->insert({key1 => 2}, table => 'table1', type_rule_off => 1);
|
|
3590
|
+$result = $dbi->select(table => 'table1', type_rule_off => 1);
|
|
3591
|
+is($result->type_rule_off->fetch->[0], 2);
|
3441
|
3592
|
|
3442
|
|
-$source = "select * from table1 where :key1{ = } and :key2{=}";
|
3443
|
|
-$result = $dbi->execute($source, param => {key1 => 1, key2 => 2});
|
3444
|
|
-$rows = $result->all;
|
3445
|
|
-is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}]);
|
|
3593
|
+$dbi = DBIx::Custom->connect;
|
|
3594
|
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
3595
|
+$dbi->type_rule(
|
|
3596
|
+ from1 => {
|
|
3597
|
+ date => sub { $_[0] * 2 },
|
|
3598
|
+ },
|
|
3599
|
+ into1 => {
|
|
3600
|
+ date => sub { $_[0] * 3 },
|
|
3601
|
+ }
|
|
3602
|
+);
|
|
3603
|
+$dbi->insert({key1 => 2}, table => 'table1', type_rule_off => 1);
|
|
3604
|
+$result = $dbi->select(table => 'table1', type_rule_off => 1);
|
|
3605
|
+is($result->one->{key1}, 4);
|
3446
|
3606
|
|
3447
|
|
-$source = "select * from table1 where :key1{<} and :key2{=}";
|
3448
|
|
-$result = $dbi->execute($source, param => {key1 => 5, key2 => 2});
|
3449
|
|
-$rows = $result->all;
|
3450
|
|
-is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}]);
|
|
3607
|
+$dbi = DBIx::Custom->connect;
|
|
3608
|
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
3609
|
+$dbi->type_rule(
|
|
3610
|
+ from1 => {
|
|
3611
|
+ date => sub { $_[0] * 2 },
|
|
3612
|
+ },
|
|
3613
|
+ into1 => {
|
|
3614
|
+ date => sub { $_[0] * 3 },
|
|
3615
|
+ }
|
|
3616
|
+);
|
|
3617
|
+$dbi->insert({key1 => 2}, table => 'table1');
|
|
3618
|
+$result = $dbi->select(table => 'table1');
|
|
3619
|
+is($result->one->{key1}, 12);
|
3451
|
3620
|
|
3452
|
|
-$source = "select * from table1 where :table1.key1{=} and :table1.key2{=}";
|
3453
|
|
-$result = $dbi->execute(
|
3454
|
|
- $source,
|
3455
|
|
- param => {'table1.key1' => 1, 'table1.key2' => 1},
|
3456
|
|
- filter => {'table1.key2' => sub { $_[0] * 2 }}
|
|
3621
|
+$dbi = DBIx::Custom->connect;
|
|
3622
|
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
3623
|
+$dbi->type_rule(
|
|
3624
|
+ from1 => {
|
|
3625
|
+ date => sub { $_[0] * 2 },
|
|
3626
|
+ },
|
|
3627
|
+ into1 => {
|
|
3628
|
+ date => sub { $_[0] * 3 },
|
|
3629
|
+ }
|
3457
|
3630
|
);
|
3458
|
|
-$rows = $result->all;
|
3459
|
|
-is_deeply($rows, [{key1 => 1, key2 => 2, key3 => 3, key4 => 4, key5 => 5}]);
|
|
3631
|
+$dbi->insert({key1 => 2}, table => 'table1');
|
|
3632
|
+$result = $dbi->select(table => 'table1');
|
|
3633
|
+is($result->fetch->[0], 12);
|
3460
|
3634
|
|
3461
|
|
-test 'high perfomance way';
|
3462
|
|
-$dbi->execute('drop table table1');
|
3463
|
|
-$dbi->execute("create table table1 (ab, bc, ik, hi, ui, pq, dc);");
|
3464
|
|
-$rows = [
|
3465
|
|
- {ab => 1, bc => 2, ik => 3, hi => 4, ui => 5, pq => 6, dc => 7},
|
3466
|
|
- {ab => 1, bc => 2, ik => 3, hi => 4, ui => 5, pq => 6, dc => 8},
|
3467
|
|
-];
|
3468
|
|
-{
|
3469
|
|
- my $query;
|
3470
|
|
- foreach my $row (@$rows) {
|
3471
|
|
- $query ||= $dbi->insert($row, table => 'table1', query => 1);
|
3472
|
|
- $dbi->execute($query, $row, filter => {ab => sub { $_[0] * 2 }});
|
|
3635
|
+$dbi = DBIx::Custom->connect;
|
|
3636
|
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
3637
|
+$dbi->register_filter(ppp => sub { uc $_[0] });
|
|
3638
|
+$dbi->type_rule(
|
|
3639
|
+ into1 => {
|
|
3640
|
+ date => 'ppp'
|
3473
|
3641
|
}
|
3474
|
|
- is_deeply($dbi->select(table => 'table1')->all,
|
3475
|
|
- [
|
3476
|
|
- {ab => 2, bc => 2, ik => 3, hi => 4, ui => 5, pq => 6, dc => 7},
|
3477
|
|
- {ab => 2, bc => 2, ik => 3, hi => 4, ui => 5, pq => 6, dc => 8},
|
3478
|
|
- ]
|
3479
|
|
- );
|
3480
|
|
-}
|
|
3642
|
+);
|
|
3643
|
+$dbi->insert({key1 => 'a'}, table => 'table1');
|
|
3644
|
+$result = $dbi->select(table => 'table1');
|
|
3645
|
+is($result->one->{key1}, 'A');
|
3481
|
3646
|
|
3482
|
|
-$dbi->execute('drop table table1');
|
3483
|
|
-$dbi->execute("create table table1 (ab, bc, ik, hi, ui, pq, dc);");
|
3484
|
|
-$rows = [
|
3485
|
|
- {ab => 1, bc => 2, ik => 3, hi => 4, ui => 5, pq => 6, dc => 7},
|
3486
|
|
- {ab => 1, bc => 2, ik => 3, hi => 4, ui => 5, pq => 6, dc => 8},
|
3487
|
|
-];
|
3488
|
|
-{
|
3489
|
|
- my $query;
|
3490
|
|
- my $sth;
|
3491
|
|
- foreach my $row (@$rows) {
|
3492
|
|
- $query ||= $dbi->insert($row, table => 'table1', query => 1);
|
3493
|
|
- $sth ||= $query->sth;
|
3494
|
|
- $sth->execute(map { $row->{$_} } sort keys %$row);
|
|
3647
|
+eval{$dbi->type_rule(
|
|
3648
|
+ into1 => {
|
|
3649
|
+ date => 'pp'
|
3495
|
3650
|
}
|
3496
|
|
- is_deeply($dbi->select(table => 'table1')->all,
|
3497
|
|
- [
|
3498
|
|
- {ab => 1, bc => 2, ik => 3, hi => 4, ui => 5, pq => 6, dc => 7},
|
3499
|
|
- {ab => 1, bc => 2, ik => 3, hi => 4, ui => 5, pq => 6, dc => 8},
|
3500
|
|
- ]
|
3501
|
|
- );
|
3502
|
|
-}
|
|
3651
|
+)};
|
|
3652
|
+like($@, qr/not registered/);
|
3503
|
3653
|
|
3504
|
|
-test 'result';
|
3505
|
3654
|
$dbi = DBIx::Custom->connect;
|
3506
|
|
-$dbi->execute($create_table1);
|
3507
|
|
-$dbi->insert({key1 => 1, key2 => 2}, table => 'table1');
|
3508
|
|
-$dbi->insert({key1 => 3, key2 => 4}, table => 'table1');
|
|
3655
|
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
3656
|
+eval {
|
|
3657
|
+ $dbi->type_rule(
|
|
3658
|
+ from1 => {
|
|
3659
|
+ Date => sub { $_[0] * 2 },
|
|
3660
|
+ }
|
|
3661
|
+ );
|
|
3662
|
+};
|
|
3663
|
+like($@, qr/lower/);
|
3509
|
3664
|
|
3510
|
|
-$result = $dbi->select(table => 'table1');
|
3511
|
|
-@rows = ();
|
3512
|
|
-while (my $row = $result->fetch) {
|
3513
|
|
- push @rows, [@$row];
|
3514
|
|
-}
|
3515
|
|
-is_deeply(\@rows, [[1, 2], [3, 4]]);
|
|
3665
|
+eval {
|
|
3666
|
+ $dbi->type_rule(
|
|
3667
|
+ into1 => {
|
|
3668
|
+ Date => sub { $_[0] * 2 },
|
|
3669
|
+ }
|
|
3670
|
+ );
|
|
3671
|
+};
|
|
3672
|
+like($@, qr/lower/);
|
3516
|
3673
|
|
|
3674
|
+$dbi = DBIx::Custom->connect;
|
|
3675
|
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
3676
|
+$dbi->type_rule(
|
|
3677
|
+ from1 => {
|
|
3678
|
+ date => sub { $_[0] * 2 },
|
|
3679
|
+ },
|
|
3680
|
+ into1 => {
|
|
3681
|
+ date => sub { $_[0] * 3 },
|
|
3682
|
+ }
|
|
3683
|
+);
|
|
3684
|
+$dbi->insert({key1 => 2}, table => 'table1');
|
3517
|
3685
|
$result = $dbi->select(table => 'table1');
|
3518
|
|
-@rows = ();
|
3519
|
|
-while (my $row = $result->fetch_hash) {
|
3520
|
|
- push @rows, {%$row};
|
3521
|
|
-}
|
3522
|
|
-is_deeply(\@rows, [{key1 => 1, key2 => 2}, {key1 => 3, key2 => 4}]);
|
|
3686
|
+$result->type_rule_off;
|
|
3687
|
+is($result->one->{key1}, 6);
|
3523
|
3688
|
|
|
3689
|
+$dbi = DBIx::Custom->connect;
|
|
3690
|
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
3691
|
+$dbi->type_rule(
|
|
3692
|
+ from1 => {
|
|
3693
|
+ date => sub { $_[0] * 2 },
|
|
3694
|
+ datetime => sub { $_[0] * 4 },
|
|
3695
|
+ },
|
|
3696
|
+);
|
|
3697
|
+$dbi->insert({key1 => 2, key2 => 2}, table => 'table1');
|
3524
|
3698
|
$result = $dbi->select(table => 'table1');
|
3525
|
|
-$row = $result->fetch_first;
|
3526
|
|
-is_deeply($row, [1, 2], "row");
|
3527
|
|
-$row = $result->fetch;
|
3528
|
|
-ok(!$row, "finished");
|
|
3699
|
+$result->type_rule(
|
|
3700
|
+ from1 => {
|
|
3701
|
+ date => sub { $_[0] * 3 }
|
|
3702
|
+ }
|
|
3703
|
+);
|
|
3704
|
+$row = $result->one;
|
|
3705
|
+is($row->{key1}, 6);
|
|
3706
|
+is($row->{key2}, 2);
|
3529
|
3707
|
|
3530
|
3708
|
$result = $dbi->select(table => 'table1');
|
3531
|
|
-$row = $result->fetch_hash_first;
|
3532
|
|
-is_deeply($row, {key1 => 1, key2 => 2}, "row");
|
3533
|
|
-$row = $result->fetch_hash;
|
3534
|
|
-ok(!$row, "finished");
|
3535
|
|
-
|
3536
|
|
-$dbi->execute('create table table2 (key1, key2);');
|
3537
|
|
-$result = $dbi->select(table => 'table2');
|
3538
|
|
-$row = $result->fetch_hash_first;
|
3539
|
|
-ok(!$row, "no row fetch");
|
|
3709
|
+$result->type_rule(
|
|
3710
|
+ from1 => {
|
|
3711
|
+ date => sub { $_[0] * 3 }
|
|
3712
|
+ }
|
|
3713
|
+);
|
|
3714
|
+$row = $result->one;
|
|
3715
|
+is($row->{key1}, 6);
|
|
3716
|
+is($row->{key2}, 2);
|
3540
|
3717
|
|
3541
|
|
-$dbi = DBIx::Custom->connect;
|
3542
|
|
-$dbi->execute($create_table1);
|
3543
|
|
-$dbi->insert({key1 => 1, key2 => 2}, table => 'table1');
|
3544
|
|
-$dbi->insert({key1 => 3, key2 => 4}, table => 'table1');
|
3545
|
|
-$dbi->insert({key1 => 5, key2 => 6}, table => 'table1');
|
3546
|
|
-$dbi->insert({key1 => 7, key2 => 8}, table => 'table1');
|
3547
|
|
-$dbi->insert({key1 => 9, key2 => 10}, table => 'table1');
|
3548
|
3718
|
$result = $dbi->select(table => 'table1');
|
3549
|
|
-$rows = $result->fetch_multi(2);
|
3550
|
|
-is_deeply($rows, [[1, 2],
|
3551
|
|
- [3, 4]], "fetch_multi first");
|
3552
|
|
-$rows = $result->fetch_multi(2);
|
3553
|
|
-is_deeply($rows, [[5, 6],
|
3554
|
|
- [7, 8]], "fetch_multi secound");
|
3555
|
|
-$rows = $result->fetch_multi(2);
|
3556
|
|
-is_deeply($rows, [[9, 10]], "fetch_multi third");
|
3557
|
|
-$rows = $result->fetch_multi(2);
|
3558
|
|
-ok(!$rows);
|
3559
|
|
-
|
|
3719
|
+$result->type_rule(
|
|
3720
|
+ from1 => {
|
|
3721
|
+ date => sub { $_[0] * 3 }
|
|
3722
|
+ }
|
|
3723
|
+);
|
|
3724
|
+$row = $result->one;
|
|
3725
|
+is($row->{key1}, 6);
|
|
3726
|
+is($row->{key2}, 2);
|
3560
|
3727
|
$result = $dbi->select(table => 'table1');
|
3561
|
|
-eval {$result->fetch_multi};
|
3562
|
|
-like($@, qr/Row count must be specified/, "Not specified row count");
|
3563
|
|
-
|
|
3728
|
+$result->type_rule(
|
|
3729
|
+ from1 => [date => sub { $_[0] * 3 }]
|
|
3730
|
+);
|
|
3731
|
+$row = $result->one;
|
|
3732
|
+is($row->{key1}, 6);
|
|
3733
|
+is($row->{key2}, 2);
|
|
3734
|
+$dbi->register_filter(fivetimes => sub { $_[0] * 5});
|
3564
|
3735
|
$result = $dbi->select(table => 'table1');
|
3565
|
|
-$rows = $result->fetch_hash_multi(2);
|
3566
|
|
-is_deeply($rows, [{key1 => 1, key2 => 2},
|
3567
|
|
- {key1 => 3, key2 => 4}], "fetch_multi first");
|
3568
|
|
-$rows = $result->fetch_hash_multi(2);
|
3569
|
|
-is_deeply($rows, [{key1 => 5, key2 => 6},
|
3570
|
|
- {key1 => 7, key2 => 8}], "fetch_multi secound");
|
3571
|
|
-$rows = $result->fetch_hash_multi(2);
|
3572
|
|
-is_deeply($rows, [{key1 => 9, key2 => 10}], "fetch_multi third");
|
3573
|
|
-$rows = $result->fetch_hash_multi(2);
|
3574
|
|
-ok(!$rows);
|
3575
|
|
-
|
|
3736
|
+$result->type_rule(
|
|
3737
|
+ from1 => [date => 'fivetimes']
|
|
3738
|
+);
|
|
3739
|
+$row = $result->one;
|
|
3740
|
+is($row->{key1}, 10);
|
|
3741
|
+is($row->{key2}, 2);
|
3576
|
3742
|
$result = $dbi->select(table => 'table1');
|
3577
|
|
-eval {$result->fetch_hash_multi};
|
3578
|
|
-like($@, qr/Row count must be specified/, "Not specified row count");
|
|
3743
|
+$result->type_rule(
|
|
3744
|
+ from1 => [date => undef]
|
|
3745
|
+);
|
|
3746
|
+$row = $result->one;
|
|
3747
|
+is($row->{key1}, 2);
|
|
3748
|
+is($row->{key2}, 2);
|
3579
|
3749
|
|
3580
|
3750
|
$dbi = DBIx::Custom->connect;
|
3581
|
|
-$dbi->execute($create_table1);
|
3582
|
|
-$dbi->insert({key1 => 1, key2 => 2}, table => 'table1');
|
3583
|
|
-$dbi->insert({key1 => 3, key2 => 4}, table => 'table1');
|
3584
|
|
-
|
3585
|
|
-test 'fetch_all';
|
|
3751
|
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
3752
|
+$dbi->type_rule(
|
|
3753
|
+ from1 => {
|
|
3754
|
+ date => sub { $_[0] * 2 },
|
|
3755
|
+ },
|
|
3756
|
+);
|
|
3757
|
+$dbi->insert({key1 => 2}, table => 'table1');
|
3586
|
3758
|
$result = $dbi->select(table => 'table1');
|
3587
|
|
-$rows = $result->fetch_all;
|
3588
|
|
-is_deeply($rows, [[1, 2], [3, 4]]);
|
|
3759
|
+$result->filter(key1 => sub { $_[0] * 3 });
|
|
3760
|
+is($result->one->{key1}, 12);
|
3589
|
3761
|
|
|
3762
|
+$dbi = DBIx::Custom->connect;
|
|
3763
|
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
3764
|
+$dbi->type_rule(
|
|
3765
|
+ from1 => {
|
|
3766
|
+ date => sub { $_[0] * 2 },
|
|
3767
|
+ },
|
|
3768
|
+);
|
|
3769
|
+$dbi->insert({key1 => 2}, table => 'table1');
|
3590
|
3770
|
$result = $dbi->select(table => 'table1');
|
3591
|
|
-$rows = $result->fetch_hash_all;
|
3592
|
|
-is_deeply($rows, [{key1 => 1, key2 => 2}, {key1 => 3, key2 => 4}]);
|
|
3771
|
+$result->filter(key1 => sub { $_[0] * 3 });
|
|
3772
|
+is($result->fetch->[0], 12);
|
3593
|
3773
|
|
|
3774
|
+$dbi = DBIx::Custom->connect;
|
|
3775
|
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
3776
|
+$dbi->type_rule(
|
|
3777
|
+ into1 => {
|
|
3778
|
+ date => sub { $_[0] . 'b' }
|
|
3779
|
+ },
|
|
3780
|
+ into2 => {
|
|
3781
|
+ date => sub { $_[0] . 'c' }
|
|
3782
|
+ },
|
|
3783
|
+ from1 => {
|
|
3784
|
+ date => sub { $_[0] . 'd' }
|
|
3785
|
+ },
|
|
3786
|
+ from2 => {
|
|
3787
|
+ date => sub { $_[0] . 'e' }
|
|
3788
|
+ }
|
|
3789
|
+);
|
|
3790
|
+$dbi->insert({key1 => '1'}, table => 'table1', type_rule_off => 1);
|
3594
|
3791
|
$result = $dbi->select(table => 'table1');
|
3595
|
|
-$result->dbi->filters({three_times => sub { $_[0] * 3}});
|
3596
|
|
-$result->filter({key1 => 'three_times'});
|
3597
|
|
-
|
3598
|
|
-$rows = $result->fetch_all;
|
3599
|
|
-is_deeply($rows, [[3, 2], [9, 4]], "array");
|
3600
|
|
-
|
|
3792
|
+is($result->type_rule_off->fetch_first->[0], '1');
|
3601
|
3793
|
$result = $dbi->select(table => 'table1');
|
3602
|
|
-$result->dbi->filters({three_times => sub { $_[0] * 3}});
|
3603
|
|
-$result->filter({key1 => 'three_times'});
|
3604
|
|
-$rows = $result->fetch_hash_all;
|
3605
|
|
-is_deeply($rows, [{key1 => 3, key2 => 2}, {key1 => 9, key2 => 4}], "hash");
|
|
3794
|
+is($result->type_rule_on->fetch_first->[0], '1de');
|
3606
|
3795
|
|
3607
|
|
-test "query_builder";
|
3608
|
|
-$datas = [
|
3609
|
|
- # Basic tests
|
3610
|
|
- { name => 'placeholder basic',
|
3611
|
|
- source => "a {? k1} b {= k2} {<> k3} {> k4} {< k5} {>= k6} {<= k7} {like k8}", ,
|
3612
|
|
- sql_expected => "a ? b k2 = ? k3 <> ? k4 > ? k5 < ? k6 >= ? k7 <= ? k8 like ?;",
|
3613
|
|
- columns_expected => [qw/k1 k2 k3 k4 k5 k6 k7 k8/]
|
3614
|
|
- },
|
3615
|
|
- {
|
3616
|
|
- name => 'placeholder in',
|
3617
|
|
- source => "{in k1 3};",
|
3618
|
|
- sql_expected => "k1 in (?, ?, ?);",
|
3619
|
|
- columns_expected => [qw/k1 k1 k1/]
|
|
3796
|
+$dbi = DBIx::Custom->connect;
|
|
3797
|
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
3798
|
+$dbi->type_rule(
|
|
3799
|
+ into1 => {
|
|
3800
|
+ date => sub { $_[0] . 'b' }
|
3620
|
3801
|
},
|
3621
|
|
-
|
3622
|
|
- # Table name
|
3623
|
|
- {
|
3624
|
|
- name => 'placeholder with table name',
|
3625
|
|
- source => "{= a.k1} {= a.k2}",
|
3626
|
|
- sql_expected => "a.k1 = ? a.k2 = ?;",
|
3627
|
|
- columns_expected => [qw/a.k1 a.k2/]
|
|
3802
|
+ into2 => {
|
|
3803
|
+ date => sub { $_[0] . 'c' }
|
3628
|
3804
|
},
|
3629
|
|
- {
|
3630
|
|
- name => 'placeholder in with table name',
|
3631
|
|
- source => "{in a.k1 2} {in b.k2 2}",
|
3632
|
|
- sql_expected => "a.k1 in (?, ?) b.k2 in (?, ?);",
|
3633
|
|
- columns_expected => [qw/a.k1 a.k1 b.k2 b.k2/]
|
|
3805
|
+ from1 => {
|
|
3806
|
+ date => sub { $_[0] . 'd' }
|
3634
|
3807
|
},
|
3635
|
|
- {
|
3636
|
|
- name => 'not contain tag',
|
3637
|
|
- source => "aaa",
|
3638
|
|
- sql_expected => "aaa;",
|
3639
|
|
- columns_expected => [],
|
3640
|
|
- }
|
3641
|
|
-];
|
3642
|
|
-
|
3643
|
|
-for (my $i = 0; $i < @$datas; $i++) {
|
3644
|
|
- my $data = $datas->[$i];
|
3645
|
|
- my $builder = DBIx::Custom->new->query_builder;
|
3646
|
|
- my $query = $builder->build_query($data->{source});
|
3647
|
|
- is($query->{sql}, $data->{sql_expected}, "$data->{name} : sql");
|
3648
|
|
- is_deeply($query->columns, $data->{columns_expected}, "$data->{name} : columns");
|
3649
|
|
-}
|
3650
|
|
-
|
3651
|
|
-$builder = DBIx::Custom->new->query_builder;
|
3652
|
|
-$ret_val = $builder->register_tag(
|
3653
|
|
- p => sub {
|
3654
|
|
- my @args = @_;
|
3655
|
|
-
|
3656
|
|
- my $expand = "? $args[0] $args[1]";
|
3657
|
|
- my $columns = [2];
|
3658
|
|
- return [$expand, $columns];
|
|
3808
|
+ from2 => {
|
|
3809
|
+ date => sub { $_[0] . 'e' }
|
3659
|
3810
|
}
|
3660
|
3811
|
);
|
|
3812
|
+$dbi->insert({key1 => '1'}, table => 'table1', type_rule1_off => 1);
|
|
3813
|
+$result = $dbi->select(table => 'table1');
|
|
3814
|
+is($result->type_rule1_off->fetch_first->[0], '1ce');
|
|
3815
|
+$result = $dbi->select(table => 'table1');
|
|
3816
|
+is($result->type_rule1_on->fetch_first->[0], '1cde');
|
3661
|
3817
|
|
3662
|
|
-$query = $builder->build_query("{p a b}");
|
3663
|
|
-is($query->{sql}, "? a b;", "register_tag sql");
|
3664
|
|
-is_deeply($query->{columns}, [2], "register_tag columns");
|
3665
|
|
-isa_ok($ret_val, 'DBIx::Custom::QueryBuilder');
|
3666
|
|
-
|
3667
|
|
-$builder = DBIx::Custom->new->query_builder;
|
3668
|
|
-
|
3669
|
|
-eval{$builder->build_query('{? }')};
|
3670
|
|
-like($@, qr/\QColumn name must be specified in tag "{? }"/, "? not arguments");
|
3671
|
|
-
|
3672
|
|
-eval{$builder->build_query("{a }")};
|
3673
|
|
-like($@, qr/\QTag "a" is not registered/, "tag not exist");
|
3674
|
|
-
|
3675
|
|
-$builder->register_tag({
|
3676
|
|
- q => 'string'
|
3677
|
|
-});
|
3678
|
|
-
|
3679
|
|
-eval{$builder->build_query("{q}", {})};
|
3680
|
|
-like($@, qr/Tag "q" must be sub reference/, "tag not code ref");
|
3681
|
|
-
|
3682
|
|
-$builder->register_tag({
|
3683
|
|
- r => sub {}
|
3684
|
|
-});
|
3685
|
|
-
|
3686
|
|
-eval{$builder->build_query("{r}")};
|
3687
|
|
-like($@, qr/\QTag "r" must return [STRING, ARRAY_REFERENCE]/, "tag return noting");
|
3688
|
|
-
|
3689
|
|
-$builder->register_tag({
|
3690
|
|
- s => sub { return ["a", ""]}
|
3691
|
|
-});
|
3692
|
|
-
|
3693
|
|
-eval{$builder->build_query("{s}")};
|
3694
|
|
-like($@, qr/\QTag "s" must return [STRING, ARRAY_REFERENCE]/, "tag return not array columns");
|
3695
|
|
-
|
3696
|
|
-$builder->register_tag(
|
3697
|
|
- t => sub {return ["a", []]}
|
3698
|
|
-);
|
3699
|
|
-
|
3700
|
|
-
|
3701
|
|
-test 'General error case';
|
3702
|
|
-$builder = DBIx::Custom->new->query_builder;
|
3703
|
|
-$builder->register_tag(
|
3704
|
|
- a => sub {
|
3705
|
|
- return ["? ? ?", ['']];
|
|
3818
|
+$dbi = DBIx::Custom->connect;
|
|
3819
|
+$dbi->execute("create table table1 (key1 Date, key2 datetime)");
|
|
3820
|
+$dbi->type_rule(
|
|
3821
|
+ into1 => {
|
|
3822
|
+ date => sub { $_[0] . 'b' }
|
|
3823
|
+ },
|
|
3824
|
+ into2 => {
|
|
3825
|
+ date => sub { $_[0] . 'c' }
|
|
3826
|
+ },
|
|
3827
|
+ from1 => {
|
|
3828
|
+ date => sub { $_[0] . 'd' }
|
|
3829
|
+ },
|
|
3830
|
+ from2 => {
|
|
3831
|
+ date => sub { $_[0] . 'e' }
|
3706
|
3832
|
}
|
3707
|
3833
|
);
|
3708
|
|
-eval{$builder->build_query("{a}")};
|
3709
|
|
-like($@, qr/\QPlaceholder count/, "placeholder count is invalid");
|
3710
|
|
-
|
3711
|
|
-
|
3712
|
|
-test 'Default tag Error case';
|
3713
|
|
-eval{$builder->build_query("{= }")};
|
3714
|
|
-like($@, qr/Column name must be specified in tag "{= }"/, "basic '=' : key not exist");
|
3715
|
|
-
|
3716
|
|
-eval{$builder->build_query("{in }")};
|
3717
|
|
-like($@, qr/Column name and count of values must be specified in tag "{in }"/, "in : key not exist");
|
3718
|
|
-
|
3719
|
|
-eval{$builder->build_query("{in a}")};
|
3720
|
|
-like($@, qr/\QColumn name and count of values must be specified in tag "{in }"/,
|
3721
|
|
- "in : key not exist");
|
3722
|
|
-
|
3723
|
|
-eval{$builder->build_query("{in a r}")};
|
3724
|
|
-like($@, qr/\QColumn name and count of values must be specified in tag "{in }"/,
|
3725
|
|
- "in : key not exist");
|
3726
|
|
-
|
3727
|
|
-test 'variouse source';
|
3728
|
|
-$source = "a {= b} c \\{ \\} {= \\{} {= \\}} d;";
|
3729
|
|
-$query = $builder->build_query($source);
|
3730
|
|
-is($query->sql, 'a b = ? c { } { = ? } = ? d;', "basic : 1");
|
3731
|
|
-
|
3732
|
|
-$source = "abc;";
|
3733
|
|
-$query = $builder->build_query($source);
|
3734
|
|
-is($query->sql, 'abc;', "basic : 2");
|
3735
|
|
-
|
3736
|
|
-$source = "{= a}";
|
3737
|
|
-$query = $builder->build_query($source);
|
3738
|
|
-is($query->sql, 'a = ?;', "only tag");
|
3739
|
|
-
|
3740
|
|
-$source = "000;";
|
3741
|
|
-$query = $builder->build_query($source);
|
3742
|
|
-is($query->sql, '000;', "contain 0 value");
|
3743
|
|
-
|
3744
|
|
-$source = "a {= b} }";
|
3745
|
|
-eval{$builder->build_query($source)};
|
3746
|
|
-like($@, qr/unexpected "}"/, "error : 1");
|
3747
|
|
-
|
3748
|
|
-$source = "a {= {}";
|
3749
|
|
-eval{$builder->build_query($source)};
|
3750
|
|
-like($@, qr/unexpected "{"/, "error : 2");
|
3751
|
|
-
|
|
3834
|
+$dbi->insert({key1 => '1'}, table => 'table1', type_rule2_off => 1);
|
|
3835
|
+$result = $dbi->select(table => 'table1');
|
|
3836
|
+is($result->type_rule2_off->fetch_first->[0], '1bd');
|
|
3837
|
+$result = $dbi->select(table => 'table1');
|
|
3838
|
+is($result->type_rule2_on->fetch_first->[0], '1bde');
|