transactd 1.1.2 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
+
|