transactd 1.1.2 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CMakeLists.txt +37 -4
- data/bin/common/tdclc_32_1_2.dll +0 -0
- data/bin/common/tdclc_64_1_2.dll +0 -0
- data/build/common/transactd_cl_common.cmake +0 -1
- data/build/common/transactd_common.cmake +26 -6
- data/build/swig/php/generate.cmake.in +58 -0
- data/build/swig/php/generate.cmd.in +41 -0
- data/build/swig/php/php.swg +155 -0
- data/build/swig/ruby/ruby.swg +38 -0
- data/build/swig/tdcl.i +133 -3
- data/build/tdclc/CMakeLists.txt +4 -1
- data/build/tdclc/tdclc_32.cbproj +1 -1
- data/build/tdclc/tdclc_64.cbproj +1 -1
- data/build/tdclcpp/CMakeLists.txt +1 -1
- data/build/tdclcpp/tdclcpp_bcb_32.cbproj +1 -4
- data/build/tdclcpp/tdclcpp_bcb_64.cbproj +0 -3
- data/build/tdclrb/CMakeLists.txt +1 -1
- data/build/tdclrb/GEM_VERSION +2 -2
- data/source/bzs/db/engine/mysql/IReadRecords.h +1 -1
- data/source/bzs/db/engine/mysql/bookmark.h +3 -3
- data/source/bzs/db/engine/mysql/database.cpp +95 -19
- data/source/bzs/db/engine/mysql/database.h +6 -6
- data/source/bzs/db/engine/mysql/mysqlInternal.h +43 -1
- data/source/bzs/db/engine/mysql/mysqlThd.cpp +10 -8
- data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +1 -1
- data/source/bzs/db/protocol/tdap/btrDate.h +2 -2
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +15 -8
- data/source/bzs/db/protocol/tdap/client/dbDef.h +2 -2
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +4 -0
- data/source/bzs/db/protocol/tdap/client/fieldDDF.cpp +0 -5
- data/source/bzs/db/protocol/tdap/client/fileDDF.cpp +0 -4
- data/source/bzs/db/protocol/tdap/client/filter.cpp +0 -484
- data/source/bzs/db/protocol/tdap/client/filter.h +696 -84
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +13 -3
- data/source/bzs/db/protocol/tdap/client/nsTable.h +12 -6
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +2 -1
- data/source/bzs/db/protocol/tdap/client/stringConverter.h +1 -0
- data/source/bzs/db/protocol/tdap/client/table.cpp +519 -75
- data/source/bzs/db/protocol/tdap/client/table.h +49 -7
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +145 -124
- data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +39 -0
- data/source/bzs/db/protocol/tdap/client/trdormapi.h +872 -0
- data/source/bzs/db/protocol/tdap/myDateTime.cpp +8 -8
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +7 -9
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +406 -195
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +64 -13
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +2 -1
- data/source/bzs/db/protocol/tdap/tdapSchema.cpp +35 -3
- data/source/bzs/db/protocol/tdap/tdapSchema.h +11 -3
- data/source/bzs/db/protocol/tdap/tdapcapi.h +63 -53
- data/source/bzs/env/crosscompile.h +8 -3
- data/source/bzs/example/connection_pool_c.cpp +1 -7
- data/source/bzs/example/useORM.cpp +585 -0
- data/source/bzs/rtl/exception.h +6 -0
- data/source/bzs/test/tdclatl/bench_tdclatl.js +12 -7
- data/source/bzs/test/tdclphp/transactd_Test.php +1845 -0
- data/source/bzs/test/tdclphp/transactd_blob_Test.php +325 -0
- data/source/bzs/test/tdclphp/transactd_datetime_Test.php +183 -0
- data/source/bzs/test/tdclphp/transactd_kanjischema_Test.php +212 -0
- data/source/bzs/test/tdclrb/transactd_blob_spec.rb +332 -0
- data/source/bzs/test/tdclrb/transactd_spec.rb +256 -1
- data/source/bzs/test/trdclengn/test_blob.cpp +327 -0
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +485 -5
- data/source/global/tdclatl/QueryBase.cpp +231 -0
- data/source/global/tdclatl/QueryBase.h +96 -0
- data/source/global/tdclatl/Table.cpp +24 -0
- data/source/global/tdclatl/Table.h +2 -1
- data/source/global/tdclatl/resource.h +0 -0
- data/source/global/tdclatl/tdclatl.idl +88 -2
- metadata +16 -3
- data/bin/common/tdclc_32_1_1.dll +0 -0
- data/bin/common/tdclc_64_1_1.dll +0 -0
@@ -27,6 +27,8 @@
|
|
27
27
|
#include <bzs/db/protocol/tdap/tdapcapi.h>
|
28
28
|
#include <bzs/db/protocol/tdap/client/stringConverter.h>
|
29
29
|
#include <stdio.h>
|
30
|
+
#include <bzs/db/protocol/tdap/client/filter.h>
|
31
|
+
|
30
32
|
|
31
33
|
using namespace bzs::db::protocol::tdap::client;
|
32
34
|
using namespace bzs::db::protocol::tdap;
|
@@ -164,6 +166,20 @@ void testCreateNewDataBase(database* db)
|
|
164
166
|
def->updateTableDef(1);
|
165
167
|
BOOST_CHECK_MESSAGE(0 == def->stat(), "updateTableDef 2 stat = " << def->stat());
|
166
168
|
|
169
|
+
fd = def->insertField(1, 2);
|
170
|
+
fd->setName(_T("select"));
|
171
|
+
fd->type = ft_integer;
|
172
|
+
fd->len = (ushort_td)4;
|
173
|
+
def->updateTableDef(1);
|
174
|
+
BOOST_CHECK_MESSAGE(0 == def->stat(), "updateTableDef 2 stat = " << def->stat());
|
175
|
+
|
176
|
+
fd = def->insertField(1, 3);
|
177
|
+
fd->setName(_T("in"));
|
178
|
+
fd->type = ft_integer;
|
179
|
+
fd->len = (ushort_td)4;
|
180
|
+
def->updateTableDef(1);
|
181
|
+
BOOST_CHECK_MESSAGE(0 == def->stat(), "updateTableDef 2 stat = " << def->stat());
|
182
|
+
|
167
183
|
keydef* kd = def->insertKey(1, 0);
|
168
184
|
kd->segments[0].fieldNum = 0;
|
169
185
|
kd->segments[0].flags.bit8 = 1; // extended key type
|
@@ -278,6 +294,7 @@ void testFind(database* db)
|
|
278
294
|
--i;
|
279
295
|
}
|
280
296
|
|
297
|
+
tb->clearBuffer();
|
281
298
|
v = 20000;
|
282
299
|
tb->setFV((short)0, v);
|
283
300
|
tb->find(table::findForword);
|
@@ -305,6 +322,93 @@ void testFindNext(database* db)
|
|
305
322
|
tb->release();
|
306
323
|
}
|
307
324
|
|
325
|
+
void testFindIn(database* db)
|
326
|
+
{
|
327
|
+
|
328
|
+
table* tb = openTable(db);
|
329
|
+
tb->setKeyNum(0);
|
330
|
+
tb->clearBuffer();
|
331
|
+
queryBase q;
|
332
|
+
q.addSeekKeyValue(_T("10"), true);
|
333
|
+
q.addSeekKeyValue(_T("300000"));
|
334
|
+
q.addSeekKeyValue(_T("50"));
|
335
|
+
q.addSeekKeyValue(_T("-1"));
|
336
|
+
q.addSeekKeyValue(_T("80"));
|
337
|
+
q.addSeekKeyValue(_T("5000"));
|
338
|
+
|
339
|
+
|
340
|
+
|
341
|
+
tb->setQuery(&q);
|
342
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "find in stat = " << tb->stat());
|
343
|
+
tb->find();
|
344
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "find in stat = " << tb->stat());
|
345
|
+
BOOST_CHECK_MESSAGE(tb->getFVint(fdi_id) == 10, "find in 10");
|
346
|
+
tb->findNext();
|
347
|
+
BOOST_CHECK_MESSAGE(tb->stat() == 4, "find in 300000");
|
348
|
+
|
349
|
+
_TCHAR msg[1024];
|
350
|
+
tb->keyValueDescription(msg, 1024);
|
351
|
+
int comp = _tcscmp(_T("table:user\nstat:4\nid = 300000\n"), msg);
|
352
|
+
BOOST_CHECK_MESSAGE(comp == 0, "find in keyValueDescription");
|
353
|
+
|
354
|
+
tb->findNext();
|
355
|
+
BOOST_CHECK_MESSAGE(tb->getFVint(fdi_id) == 50, "find in 50");
|
356
|
+
tb->findNext();
|
357
|
+
BOOST_CHECK_MESSAGE(tb->stat() == 4, "find in -1");
|
358
|
+
|
359
|
+
tb->keyValueDescription(msg, 1024);
|
360
|
+
comp = _tcscmp(_T("table:user\nstat:4\nid = -1\n"), msg);
|
361
|
+
BOOST_CHECK_MESSAGE(comp == 0, "find in keyValueDescription");
|
362
|
+
|
363
|
+
tb->findNext();
|
364
|
+
BOOST_CHECK_MESSAGE(tb->getFVint(fdi_id) == 80, "find in 80");
|
365
|
+
tb->findNext();
|
366
|
+
BOOST_CHECK_MESSAGE(tb->getFVint(fdi_id) == 5000, "find in 5000");
|
367
|
+
tb->findNext();
|
368
|
+
BOOST_CHECK_MESSAGE(STATUS_EOF == tb->stat(), "find in more");
|
369
|
+
|
370
|
+
// Many params
|
371
|
+
_TCHAR buf[20];
|
372
|
+
_ltot_s(1, buf, 20, 10);
|
373
|
+
q.addSeekKeyValue(buf, true);
|
374
|
+
|
375
|
+
for (int i=2;i<=10000;++i)
|
376
|
+
{
|
377
|
+
_ltot_s(i, buf, 20, 10);
|
378
|
+
q.addSeekKeyValue(buf);
|
379
|
+
}
|
380
|
+
tb->setQuery(&q);
|
381
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "find in stat = " << tb->stat());
|
382
|
+
|
383
|
+
tb->find();
|
384
|
+
int i = 0;
|
385
|
+
while (0 == tb->stat())
|
386
|
+
{
|
387
|
+
|
388
|
+
BOOST_CHECK_MESSAGE(++i == tb->getFVint(fdi_id), "findNext in value");
|
389
|
+
tb->findNext(true);
|
390
|
+
}
|
391
|
+
BOOST_CHECK_MESSAGE(i == 10000, "findNext in count");
|
392
|
+
BOOST_CHECK_MESSAGE(9 == tb->stat(), "find in end stat = " << tb->stat());
|
393
|
+
|
394
|
+
//LogicalCountLimit
|
395
|
+
q.addField(_T("id"));
|
396
|
+
tb->setQuery(&q);
|
397
|
+
|
398
|
+
tb->find();
|
399
|
+
i = 0;
|
400
|
+
while (0 == tb->stat())
|
401
|
+
{
|
402
|
+
|
403
|
+
BOOST_CHECK_MESSAGE(++i == tb->getFVint(fdi_id), "findNext in value");
|
404
|
+
tb->findNext(true);
|
405
|
+
}
|
406
|
+
BOOST_CHECK_MESSAGE(i == 10000, "findNext in count");
|
407
|
+
BOOST_CHECK_MESSAGE(9 == tb->stat(), "find in end stat = " << tb->stat());
|
408
|
+
|
409
|
+
tb->release();
|
410
|
+
}
|
411
|
+
|
308
412
|
void testGetPercentage(database* db)
|
309
413
|
{
|
310
414
|
table* tb = openTable(db);
|
@@ -1533,14 +1637,14 @@ void stringFileterCreateTable(database* db, int id, const _TCHAR* name, uchar_td
|
|
1533
1637
|
// td.charsetIndex = CHARSET_CP932;
|
1534
1638
|
|
1535
1639
|
def->insertTable(&td);
|
1536
|
-
BOOST_CHECK_MESSAGE(0 == def->stat(), "insertTable");
|
1640
|
+
BOOST_CHECK_MESSAGE(0 == def->stat(), "insertTable stat = " << def->stat());
|
1537
1641
|
|
1538
1642
|
fielddef* fd = def->insertField(id, 0);
|
1539
1643
|
fd->setName(_T("id"));
|
1540
1644
|
fd->type = ft_integer;
|
1541
1645
|
fd->len = (ushort_td)4;
|
1542
1646
|
def->updateTableDef(id);
|
1543
|
-
BOOST_CHECK_MESSAGE(0 == def->stat(), "updateTableDef 1");
|
1647
|
+
BOOST_CHECK_MESSAGE(0 == def->stat(), "updateTableDef 1 stat = " << def->stat());
|
1544
1648
|
|
1545
1649
|
fd = def->insertField(id, 1);
|
1546
1650
|
fd->setName(_T("name"));
|
@@ -1559,7 +1663,7 @@ void stringFileterCreateTable(database* db, int id, const _TCHAR* name, uchar_td
|
|
1559
1663
|
|
1560
1664
|
fd->keylen = fd->len;
|
1561
1665
|
def->updateTableDef(id);
|
1562
|
-
BOOST_CHECK_MESSAGE(0 == def->stat(), "updateTableDef 2");
|
1666
|
+
BOOST_CHECK_MESSAGE(0 == def->stat(), "updateTableDef 2 stat = " << def->stat());
|
1563
1667
|
|
1564
1668
|
fd = def->insertField(id, 2);
|
1565
1669
|
fd->setName(_T("namew"));
|
@@ -1609,6 +1713,7 @@ void stringFileterCreateTable(database* db, int id, const _TCHAR* name, uchar_td
|
|
1609
1713
|
|
1610
1714
|
void doInsertStringFileter(table* tb)
|
1611
1715
|
{
|
1716
|
+
tb->beginBulkInsert(BULKBUFSIZE);
|
1612
1717
|
tb->clearBuffer();
|
1613
1718
|
int id = 1;
|
1614
1719
|
tb->setFV(_T("id"), id);
|
@@ -1623,6 +1728,7 @@ void doInsertStringFileter(table* tb)
|
|
1623
1728
|
tb->setFV(_T("namew"), _T("A123456"));
|
1624
1729
|
tb->insert();
|
1625
1730
|
|
1731
|
+
|
1626
1732
|
tb->clearBuffer();
|
1627
1733
|
id = 3;
|
1628
1734
|
tb->setFV(_T("id"), id);
|
@@ -1643,7 +1749,7 @@ void doInsertStringFileter(table* tb)
|
|
1643
1749
|
tb->setFV(_T("name"), _T("おめでとうございます。"));
|
1644
1750
|
tb->setFV(_T("namew"), _T("おめでとうございます。"));
|
1645
1751
|
tb->insert();
|
1646
|
-
|
1752
|
+
tb->commitBulkInsert();
|
1647
1753
|
}
|
1648
1754
|
|
1649
1755
|
void doTestReadSF(table* tb)
|
@@ -1683,15 +1789,52 @@ void doTestSF(table* tb)
|
|
1683
1789
|
tb->setKeyNum(0);
|
1684
1790
|
tb->clearBuffer();
|
1685
1791
|
|
1792
|
+
|
1793
|
+
|
1686
1794
|
tb->setFilter(_T("name = 'あい*'"), 0, 10);
|
1795
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
|
1687
1796
|
tb->seekFirst();
|
1797
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
|
1688
1798
|
tb->findNext(false);
|
1689
1799
|
BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
|
1690
1800
|
BOOST_CHECK_MESSAGE(_tstring(_T("あいうえおかきくこ")) == _tstring(tb->getFVstr(1)), "doTestReadSF2");
|
1691
1801
|
BOOST_CHECK_MESSAGE(2 == (int)tb->recordCount(), "doTestReadSF2");
|
1692
1802
|
|
1803
|
+
|
1693
1804
|
tb->setFilter(_T("name <> 'あい*'"), 0, 10);
|
1694
1805
|
BOOST_CHECK_MESSAGE(3 == (int)tb->recordCount(), "doTestReadSF2");
|
1806
|
+
tb->clearBuffer();
|
1807
|
+
tb->seekFirst();
|
1808
|
+
tb->findNext(false);
|
1809
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
|
1810
|
+
BOOST_CHECK_MESSAGE(_tstring(_T("A123456")) == _tstring(tb->getFVstr(2)), "doTestReadSF1");
|
1811
|
+
|
1812
|
+
tb->findNext();
|
1813
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
|
1814
|
+
BOOST_CHECK_MESSAGE(_tstring(_T("おはようございます")) == _tstring(tb->getFVstr(2)), "doTestReadSF1");
|
1815
|
+
|
1816
|
+
tb->findNext();
|
1817
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
|
1818
|
+
BOOST_CHECK_MESSAGE(_tstring(_T("おめでとうございます。")) == _tstring(tb->getFVstr(2)), "doTestReadSF1");
|
1819
|
+
tb->findNext();
|
1820
|
+
BOOST_CHECK_MESSAGE(9 == tb->stat(), "doTestReadSF1");
|
1821
|
+
|
1822
|
+
tb->clearBuffer();
|
1823
|
+
tb->seekLast();
|
1824
|
+
tb->findPrev(false);
|
1825
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
|
1826
|
+
BOOST_CHECK_MESSAGE(_tstring(_T("おめでとうございます。")) == _tstring(tb->getFVstr(2)), "doTestReadSF1");
|
1827
|
+
|
1828
|
+
tb->findPrev();
|
1829
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
|
1830
|
+
BOOST_CHECK_MESSAGE(_tstring(_T("おはようございます")) == _tstring(tb->getFVstr(2)), "doTestReadSF1");
|
1831
|
+
|
1832
|
+
tb->findPrev(false);
|
1833
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
|
1834
|
+
BOOST_CHECK_MESSAGE(_tstring(_T("A123456")) == _tstring(tb->getFVstr(2)), "doTestReadSF1");
|
1835
|
+
|
1836
|
+
tb->findPrev();
|
1837
|
+
BOOST_CHECK_MESSAGE(9 == tb->stat(), "doTestReadSF1");
|
1695
1838
|
|
1696
1839
|
tb->setFilter(_T("name = 'あい'"), 0, 10);
|
1697
1840
|
BOOST_CHECK_MESSAGE(0 == (int)tb->recordCount(), "doTestReadSF2");
|
@@ -1699,6 +1842,42 @@ void doTestSF(table* tb)
|
|
1699
1842
|
tb->setFilter(_T("name <> ''"), 0, 10);
|
1700
1843
|
BOOST_CHECK_MESSAGE(5 == (int)tb->recordCount(), "doTestReadSF2");
|
1701
1844
|
|
1845
|
+
//test setFilter don't change field value
|
1846
|
+
tb->clearBuffer();
|
1847
|
+
tb->setFV(_T("name"), _T("ABCDE"));
|
1848
|
+
tb->setFilter(_T("name = 'あい'"), 0, 10);
|
1849
|
+
BOOST_CHECK_MESSAGE(_tstring(_T("ABCDE")) == _tstring(tb->getFVstr(1)), "doTestReadSF2 field value");
|
1850
|
+
|
1851
|
+
}
|
1852
|
+
|
1853
|
+
void doTestUpdateSF(table* tb)
|
1854
|
+
{
|
1855
|
+
|
1856
|
+
tb->setKeyNum(0);
|
1857
|
+
tb->clearBuffer();
|
1858
|
+
tb->seekFirst();
|
1859
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestUpdateSF stat = " << tb->stat());
|
1860
|
+
tb->setFV(_T("name"), _T("ABCDE"));
|
1861
|
+
tb->setFV(_T("namew"), _T("ABCDEW"));
|
1862
|
+
tb->update();
|
1863
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestUpdateSF stat = " << tb->stat());
|
1864
|
+
tb->seekNext();
|
1865
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestUpdateSF stat = " << tb->stat());
|
1866
|
+
|
1867
|
+
tb->setFV(_T("name"), _T("ABCDE2"));
|
1868
|
+
tb->setFV(_T("namew"), _T("ABCDEW2"));
|
1869
|
+
tb->update();
|
1870
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestUpdateSF stat = " << tb->stat());
|
1871
|
+
|
1872
|
+
tb->seekFirst();
|
1873
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestUpdateSF stat = " << tb->stat());
|
1874
|
+
BOOST_CHECK_MESSAGE(_tstring(_T("ABCDE")) == _tstring(tb->getFVstr(1)), "doTestUpdateSF");
|
1875
|
+
BOOST_CHECK_MESSAGE(_tstring(_T("ABCDEW")) == _tstring(tb->getFVstr(2)), "doTestUpdateSF" );
|
1876
|
+
tb->seekNext();
|
1877
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestUpdateSF stat = " << tb->stat());
|
1878
|
+
BOOST_CHECK_MESSAGE(_tstring(_T("ABCDE2")) == _tstring(tb->getFVstr(1)), "doTestUpdateSF");
|
1879
|
+
BOOST_CHECK_MESSAGE(_tstring(_T("ABCDEW2")) == _tstring(tb->getFVstr(2)), "doTestUpdateSF" );
|
1880
|
+
|
1702
1881
|
}
|
1703
1882
|
|
1704
1883
|
void doTestStringFileter(database* db, int id, const _TCHAR* name, uchar_td type, uchar_td type2)
|
@@ -1711,6 +1890,7 @@ void doTestStringFileter(database* db, int id, const _TCHAR* name, uchar_td type
|
|
1711
1890
|
doInsertStringFileter(tb);
|
1712
1891
|
doTestReadSF(tb);
|
1713
1892
|
doTestSF(tb);
|
1893
|
+
doTestUpdateSF(tb);
|
1714
1894
|
tb->release();
|
1715
1895
|
}
|
1716
1896
|
|
@@ -1894,6 +2074,278 @@ void testGetEqualKanji(database* db)
|
|
1894
2074
|
|
1895
2075
|
}
|
1896
2076
|
|
2077
|
+
// ------------------------------------------------------------------------
|
2078
|
+
void testResultField(database* db)
|
2079
|
+
{
|
2080
|
+
table* tb = openTable(db);
|
2081
|
+
resultField rf;
|
2082
|
+
rf.setParam(tb, _T("name"));
|
2083
|
+
|
2084
|
+
BOOST_CHECK_MESSAGE(rf.len == 33, " resultField.setParam");
|
2085
|
+
BOOST_CHECK_MESSAGE(rf.pos == 4, " resultField.setParam");
|
2086
|
+
|
2087
|
+
size_t len = rf.writeBuffer(0, true) - (unsigned char*)0;
|
2088
|
+
BOOST_CHECK_MESSAGE(len == 4, " resultField.writeBuffer");
|
2089
|
+
|
2090
|
+
}
|
2091
|
+
|
2092
|
+
void testResultDef()
|
2093
|
+
{
|
2094
|
+
resultDef rd;
|
2095
|
+
|
2096
|
+
rd.reset();
|
2097
|
+
BOOST_CHECK_MESSAGE(rd.maxRows == 0, " resultDef.maxRows");
|
2098
|
+
BOOST_CHECK_MESSAGE(rd.fieldCount == 0, " resultDef.fieldCount");
|
2099
|
+
|
2100
|
+
size_t len = rd.writeBuffer(0, true) - (unsigned char*)0;
|
2101
|
+
BOOST_CHECK_MESSAGE(len == 4, " resultDef.writeBuffer");
|
2102
|
+
|
2103
|
+
|
2104
|
+
}
|
2105
|
+
|
2106
|
+
|
2107
|
+
void testLogic(database* db)
|
2108
|
+
{
|
2109
|
+
table* tb = openTable(db);
|
2110
|
+
logic lc;
|
2111
|
+
|
2112
|
+
lc.setParam(tb, _T("name"), _T("="), _T("abc"), eCend);
|
2113
|
+
|
2114
|
+
|
2115
|
+
BOOST_CHECK_MESSAGE(lc.type == ft_zstring, " logic.type");
|
2116
|
+
BOOST_CHECK_MESSAGE(lc.len == 33, " logic.len");
|
2117
|
+
BOOST_CHECK_MESSAGE(lc.pos == 4, " logic.pos");
|
2118
|
+
BOOST_CHECK_MESSAGE(lc.logType == 1, " logic.logType");
|
2119
|
+
BOOST_CHECK_MESSAGE(lc.opr == eCend, " logic.opr");
|
2120
|
+
BOOST_CHECK_MESSAGE(strcmp((char*)lc.data, "abc")==0, " logic.data");
|
2121
|
+
|
2122
|
+
size_t len = lc.writeBuffer(0, true, false) - (unsigned char*)0;
|
2123
|
+
BOOST_CHECK_MESSAGE(len == 7+33, " logic.writeBuffer");
|
2124
|
+
|
2125
|
+
//compField invalid filed name
|
2126
|
+
bool ret = lc.setParam(tb, _T("name"), _T("="), _T("1"), eCend, true);
|
2127
|
+
BOOST_CHECK_MESSAGE(ret == false, " logic invalid filed name");
|
2128
|
+
|
2129
|
+
//compField
|
2130
|
+
ret = lc.setParam(tb, _T("name"), _T("="), _T("id"), eCend, true);
|
2131
|
+
BOOST_CHECK_MESSAGE(ret == true, " logic filed name");
|
2132
|
+
BOOST_CHECK_MESSAGE(lc.type == ft_zstring, " logic.type");
|
2133
|
+
BOOST_CHECK_MESSAGE(lc.len == 33, " logic.len");
|
2134
|
+
BOOST_CHECK_MESSAGE(lc.pos == 4, " logic.pos");
|
2135
|
+
BOOST_CHECK_MESSAGE(lc.logType == 1+CMPLOGICAL_FIELD, " logic.logType compField");
|
2136
|
+
BOOST_CHECK_MESSAGE(lc.opr == eCend, " logic.opr");
|
2137
|
+
BOOST_CHECK_MESSAGE(*((short*)lc.data) == 0, " logic.data");
|
2138
|
+
len = lc.writeBuffer(0, true, false) - (unsigned char*)0;
|
2139
|
+
BOOST_CHECK_MESSAGE(len == 7+2, " logic.writeBuffer");
|
2140
|
+
|
2141
|
+
//invalid filed name
|
2142
|
+
ret = lc.setParam(tb, _T("name1"), _T("="), _T("id"), eCend, true);
|
2143
|
+
BOOST_CHECK_MESSAGE(ret == false, " logic invalid filed name2");
|
2144
|
+
|
2145
|
+
//wildcard
|
2146
|
+
ret = lc.setParam(tb, _T("name"), _T("="), _T("abc*"), eCend, false);
|
2147
|
+
BOOST_CHECK_MESSAGE(lc.type == ft_zstring, " logic.type");
|
2148
|
+
BOOST_CHECK_MESSAGE(lc.len == 3, " logic.len");
|
2149
|
+
BOOST_CHECK_MESSAGE(lc.pos == 4, " logic.pos");
|
2150
|
+
BOOST_CHECK_MESSAGE(lc.logType == 1, " logic.logType");
|
2151
|
+
BOOST_CHECK_MESSAGE(lc.opr == eCend, " logic.opr");
|
2152
|
+
BOOST_CHECK_MESSAGE(strcmp((char*)lc.data, "abc")==0, " logic.data");
|
2153
|
+
|
2154
|
+
len = lc.writeBuffer(0, true, false) - (unsigned char*)0;
|
2155
|
+
BOOST_CHECK_MESSAGE(len == 7+3, " logic.writeBuffer");
|
2156
|
+
|
2157
|
+
ret = lc.setParam(tb, _T("name"), _T("="), _T("漢字*"), eCend, false);
|
2158
|
+
BOOST_CHECK_MESSAGE(strcmp((char*)lc.data, "漢字")==0, " logic.data");
|
2159
|
+
|
2160
|
+
len = lc.writeBuffer(0, true, false) - (unsigned char*)0;
|
2161
|
+
BOOST_CHECK_MESSAGE(len == 7 + (_tcslen(_T("漢字"))*sizeof(_TCHAR))
|
2162
|
+
, " logic.writeBuffer len =" << len);
|
2163
|
+
|
2164
|
+
|
2165
|
+
//combine
|
2166
|
+
ret = lc.setParam(tb, _T("name"), _T("="), _T("abc*"), eCor, false);
|
2167
|
+
BOOST_CHECK_MESSAGE(lc.opr == 2, " logic.opr or");
|
2168
|
+
ret = lc.setParam(tb, _T("name"), _T("="), _T("abc*"), eCand, false);
|
2169
|
+
BOOST_CHECK_MESSAGE(lc.opr == 1, " logic.opr and");
|
2170
|
+
|
2171
|
+
//logType
|
2172
|
+
ret = lc.setParam(tb, _T("name"), _T("!="), _T("abc*"), eCend, false);
|
2173
|
+
BOOST_CHECK_MESSAGE(lc.logType == 255, " logic.logType !=");
|
2174
|
+
BOOST_CHECK_MESSAGE(ret == false, " logic invalid logType");
|
2175
|
+
|
2176
|
+
//canJoin
|
2177
|
+
|
2178
|
+
//zstring is cannot join
|
2179
|
+
lc.setParam(tb, _T("name"), _T("="), _T("1"), eCand, false);
|
2180
|
+
BOOST_CHECK_MESSAGE(lc.canJoin(false) == false, " logic canJoin");
|
2181
|
+
BOOST_CHECK_MESSAGE(lc.canJoin(true) == false, " logic canJoin");
|
2182
|
+
|
2183
|
+
lc.setParam(tb, _T("id"), _T("="), _T("1"), eCand, false);
|
2184
|
+
BOOST_CHECK_MESSAGE(lc.canJoin(false) == true, " logic canJoin");
|
2185
|
+
BOOST_CHECK_MESSAGE(lc.canJoin(true) == true, " logic canJoin");
|
2186
|
+
lc.opr = eCend;
|
2187
|
+
BOOST_CHECK_MESSAGE(lc.canJoin(true) == false, " logic canJoin");
|
2188
|
+
BOOST_CHECK_MESSAGE(lc.canJoin(false) == true, " logic canJoin");
|
2189
|
+
|
2190
|
+
lc.opr = eCor;
|
2191
|
+
BOOST_CHECK_MESSAGE(lc.canJoin(true) == false, " logic canJoin");
|
2192
|
+
BOOST_CHECK_MESSAGE(lc.canJoin(false) == true, " logic canJoin");
|
2193
|
+
|
2194
|
+
|
2195
|
+
lc.opr = eCand;
|
2196
|
+
|
2197
|
+
logic lc2;
|
2198
|
+
lc2.setParam(tb, _T("id"), _T("="), _T("1"), eCend, false);
|
2199
|
+
lc2.pos = 3;
|
2200
|
+
|
2201
|
+
lc.isNextFiled(&lc2);
|
2202
|
+
BOOST_CHECK_MESSAGE(lc.isNextFiled(&lc2) == false, " logic isNextFiled");
|
2203
|
+
lc2.pos = 4;
|
2204
|
+
BOOST_CHECK_MESSAGE(lc.isNextFiled(&lc2) == true, " logic isNextFiled");
|
2205
|
+
|
2206
|
+
//join
|
2207
|
+
lc.joinAfter(&lc2);
|
2208
|
+
BOOST_CHECK_MESSAGE(lc.len == 8, " logic joinAfter");
|
2209
|
+
|
2210
|
+
BOOST_CHECK_MESSAGE(lc.opr == eCend, " logic joinAfter");
|
2211
|
+
|
2212
|
+
header hd;
|
2213
|
+
len = hd.writeBuffer(0, true) - (unsigned char*)0;
|
2214
|
+
BOOST_CHECK_MESSAGE(len == 8, " header.writeBuffer");
|
2215
|
+
|
2216
|
+
|
2217
|
+
}
|
2218
|
+
|
2219
|
+
|
2220
|
+
|
2221
|
+
void testQuery()
|
2222
|
+
{
|
2223
|
+
queryBase q;
|
2224
|
+
q.queryString(_T("id = 0 and name = 'Abc efg'"));
|
2225
|
+
BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("id = '0' and name = 'Abc efg'")
|
2226
|
+
, "queryString");
|
2227
|
+
|
2228
|
+
q.queryString(_T(""));
|
2229
|
+
q.addLogic(_T("id"), _T("="), _T("0"));
|
2230
|
+
q.addLogic(_T("and"), _T("name"), _T("="), _T("Abc efg"));
|
2231
|
+
BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("id = '0' and name = 'Abc efg'"), "queryString");
|
2232
|
+
|
2233
|
+
q.queryString(_T("select id,name id = 0 AND name = 'Abc&' efg'"));
|
2234
|
+
BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name id = '0' AND name = 'Abc&' efg'")
|
2235
|
+
, "queryString");
|
2236
|
+
|
2237
|
+
q.queryString(_T(""));
|
2238
|
+
q.addField(_T("id"));
|
2239
|
+
q.addField(_T("name"));
|
2240
|
+
q.addLogic(_T("id"), _T("="), _T("0"));
|
2241
|
+
q.addLogic(_T("AND"), _T("name"), _T("="), _T("Abc' efg"));
|
2242
|
+
BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name id = '0' AND name = 'Abc&' efg'")
|
2243
|
+
, "queryString");
|
2244
|
+
|
2245
|
+
q.queryString(_T("select id,name id = 0 AND name = 'Abc&& efg'"));
|
2246
|
+
BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name id = '0' AND name = 'Abc&& efg'")
|
2247
|
+
, "queryString");
|
2248
|
+
|
2249
|
+
q.queryString(_T(""));
|
2250
|
+
q.addField(_T("id"));
|
2251
|
+
q.addField(_T("name"));
|
2252
|
+
q.addLogic(_T("id"), _T("="), _T("0"));
|
2253
|
+
q.addLogic(_T("AND"), _T("name"), _T("="), _T("Abc& efg"));
|
2254
|
+
BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name id = '0' AND name = 'Abc&& efg'")
|
2255
|
+
, "queryString");
|
2256
|
+
|
2257
|
+
q.queryString(_T("*"));
|
2258
|
+
BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("*"), "queryString");
|
2259
|
+
|
2260
|
+
q.queryString(_T(""));
|
2261
|
+
q.all();
|
2262
|
+
BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("*"), "queryString");
|
2263
|
+
|
2264
|
+
q.queryString(_T("Select id,name id = 2"));
|
2265
|
+
BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name id = '2'")
|
2266
|
+
, "queryString");
|
2267
|
+
|
2268
|
+
q.queryString(_T(""));
|
2269
|
+
q.addField(_T("id"));
|
2270
|
+
q.addField(_T("name"));
|
2271
|
+
q.addLogic(_T("id"), _T("="), _T("2"));
|
2272
|
+
BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name id = '2'")
|
2273
|
+
, "queryString");
|
2274
|
+
|
2275
|
+
q.queryString(_T("SELECT id,name,fc id = 2"));
|
2276
|
+
BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name,fc id = '2'")
|
2277
|
+
, "queryString");
|
2278
|
+
|
2279
|
+
q.queryString(_T(""));
|
2280
|
+
q.addField(_T("id"));
|
2281
|
+
q.addField(_T("name"));
|
2282
|
+
q.addField(_T("fc"));
|
2283
|
+
q.addLogic(_T("id"), _T("="), _T("2"));
|
2284
|
+
BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name,fc id = '2'")
|
2285
|
+
, "queryString");
|
2286
|
+
|
2287
|
+
q.queryString(_T("select id,name,fc id = 2 and name = '3'"));
|
2288
|
+
BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name,fc id = '2' and name = '3'")
|
2289
|
+
, "queryString");
|
2290
|
+
|
2291
|
+
q.queryString(_T(""));
|
2292
|
+
q.addField(_T("id"));
|
2293
|
+
q.addField(_T("name"));
|
2294
|
+
q.addField(_T("fc"));
|
2295
|
+
q.addLogic(_T("id"), _T("="), _T("2"));
|
2296
|
+
q.addLogic(_T("and"), _T("name"), _T("="), _T("3"));
|
2297
|
+
BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name,fc id = '2' and name = '3'")
|
2298
|
+
, "queryString");
|
2299
|
+
|
2300
|
+
//IN include
|
2301
|
+
q.queryString(_T("select id,name,fc IN '1','2','3'"));
|
2302
|
+
BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name,fc in '1','2','3'")
|
2303
|
+
, "queryString");
|
2304
|
+
|
2305
|
+
q.queryString(_T(""));
|
2306
|
+
q.addField(_T("id"));
|
2307
|
+
q.addField(_T("name"));
|
2308
|
+
q.addField(_T("fc"));
|
2309
|
+
q.addSeekKeyValue(_T("1"));
|
2310
|
+
q.addSeekKeyValue(_T("2"));
|
2311
|
+
q.addSeekKeyValue(_T("3"));
|
2312
|
+
BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name,fc in '1','2','3'")
|
2313
|
+
, "queryString");
|
2314
|
+
|
2315
|
+
q.queryString(_T("IN '1','2','3'"));
|
2316
|
+
BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("in '1','2','3'")
|
2317
|
+
, "queryString");
|
2318
|
+
|
2319
|
+
q.queryString(_T("IN 1,2,3"));
|
2320
|
+
BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("in '1','2','3'")
|
2321
|
+
, "queryString");
|
2322
|
+
|
2323
|
+
q.queryString(_T(""));
|
2324
|
+
q.addSeekKeyValue(_T("1"));
|
2325
|
+
q.addSeekKeyValue(_T("2"));
|
2326
|
+
q.addSeekKeyValue(_T("3"));
|
2327
|
+
BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("in '1','2','3'")
|
2328
|
+
, "queryString");
|
2329
|
+
|
2330
|
+
//special field name
|
2331
|
+
q.queryString(_T("select = 1"));
|
2332
|
+
BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select = '1'")
|
2333
|
+
, "queryString");
|
2334
|
+
|
2335
|
+
q.queryString(_T(""));
|
2336
|
+
q.addLogic(_T("select"), _T("="), _T("1"));
|
2337
|
+
BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select = '1'")
|
2338
|
+
, "queryString");
|
2339
|
+
|
2340
|
+
q.queryString(_T("in <> 1"));
|
2341
|
+
BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("in <> '1'")
|
2342
|
+
, "queryString");
|
2343
|
+
|
2344
|
+
q.queryString(_T(""));
|
2345
|
+
q.addLogic(_T("in"), _T("<>"), _T("1"));
|
2346
|
+
BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("in <> '1'")
|
2347
|
+
, "queryString");
|
2348
|
+
}
|
1897
2349
|
// ------------------------------------------------------------------------
|
1898
2350
|
BOOST_AUTO_TEST_SUITE(btrv_nativ)
|
1899
2351
|
|
@@ -1913,7 +2365,11 @@ BOOST_AUTO_TEST_SUITE(btrv_nativ)
|
|
1913
2365
|
|
1914
2366
|
BOOST_FIXTURE_TEST_CASE(find, fixture) {testFind(db());}
|
1915
2367
|
|
1916
|
-
BOOST_FIXTURE_TEST_CASE(findNext, fixture)
|
2368
|
+
BOOST_FIXTURE_TEST_CASE(findNext, fixture)
|
2369
|
+
{
|
2370
|
+
testFindNext(db());
|
2371
|
+
testFindIn(db());
|
2372
|
+
}
|
1917
2373
|
|
1918
2374
|
BOOST_FIXTURE_TEST_CASE(getPercentage, fixture) {testGetPercentage(db());}
|
1919
2375
|
|
@@ -2025,6 +2481,30 @@ BOOST_AUTO_TEST_SUITE(kanjiSchema)
|
|
2025
2481
|
|
2026
2482
|
BOOST_FIXTURE_TEST_CASE(dropDatabaseKanji, fixture) {testDropDatabaseKanji(db());}
|
2027
2483
|
|
2484
|
+
BOOST_AUTO_TEST_SUITE_END()
|
2485
|
+
|
2486
|
+
// ------------------------------------------------------------------------
|
2487
|
+
BOOST_AUTO_TEST_SUITE(filter)
|
2488
|
+
|
2489
|
+
BOOST_FIXTURE_TEST_CASE(resultField, fixture)
|
2490
|
+
{
|
2491
|
+
|
2492
|
+
if (db()->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME)))
|
2493
|
+
db()->drop();
|
2494
|
+
testCreateNewDataBase(db());
|
2495
|
+
testResultField(db());
|
2496
|
+
testResultDef();
|
2497
|
+
testLogic(db());
|
2498
|
+
testQuery();
|
2499
|
+
}
|
2500
|
+
BOOST_FIXTURE_TEST_CASE(drop, fixture)
|
2501
|
+
{
|
2502
|
+
testDropDatabase(db());
|
2503
|
+
}
|
2028
2504
|
BOOST_FIXTURE_TEST_CASE(fuga, fixture) {BOOST_CHECK_EQUAL(2 * 3, 6);}
|
2505
|
+
|
2029
2506
|
BOOST_AUTO_TEST_SUITE_END()
|
2507
|
+
|
2030
2508
|
// ------------------------------------------------------------------------
|
2509
|
+
|
2510
|
+
|