transactd 2.4.5 → 3.0.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.
Files changed (145) hide show
  1. checksums.yaml +4 -4
  2. data/CMakeLists.txt +1 -1
  3. data/README-JA.md +52 -529
  4. data/README.md +52 -523
  5. data/bin/common/tdclc_32_3_0.dll +0 -0
  6. data/bin/common/tdclc_64_3_0.dll +0 -0
  7. data/build/common/system.cmake +2 -1
  8. data/build/common/transactd_cl_common.cmake +3 -6
  9. data/build/swig/ruby/ruby.swg +85 -28
  10. data/build/swig/ruby/tdclrb_wrap.cpp +3195 -1578
  11. data/build/swig/tdcl.i +161 -5
  12. data/build/tdclc/CMakeLists.txt +1 -0
  13. data/build/tdclc/tdclc.cbproj +7 -1
  14. data/build/tdclc/tdclc.rc +4 -4
  15. data/build/tdclcpp/tdclcpp.rc +4 -4
  16. data/build/tdclcpp/tdclcpp_bc.cbproj +2 -5
  17. data/build/tdclrb/tdclrb.rc +4 -4
  18. data/source/bzs/db/blobStructs.h +1 -1
  19. data/source/bzs/db/engine/mysql/database.cpp +199 -74
  20. data/source/bzs/db/engine/mysql/database.h +47 -18
  21. data/source/bzs/db/engine/mysql/dbManager.cpp +1 -0
  22. data/source/bzs/db/engine/mysql/mysqlInternal.h +32 -8
  23. data/source/bzs/db/protocol/tdap/btrDate.cpp +110 -75
  24. data/source/bzs/db/protocol/tdap/btrDate.h +46 -21
  25. data/source/bzs/db/protocol/tdap/client/activeTable.cpp +18 -18
  26. data/source/bzs/db/protocol/tdap/client/activeTable.h +25 -25
  27. data/source/bzs/db/protocol/tdap/client/activeTableImple.h +10 -4
  28. data/source/bzs/db/protocol/tdap/client/client.cpp +6 -5
  29. data/source/bzs/db/protocol/tdap/client/client.h +82 -15
  30. data/source/bzs/db/protocol/tdap/client/database.cpp +531 -142
  31. data/source/bzs/db/protocol/tdap/client/database.h +19 -6
  32. data/source/bzs/db/protocol/tdap/client/dbDef.cpp +461 -408
  33. data/source/bzs/db/protocol/tdap/client/dbDef.h +11 -17
  34. data/source/bzs/db/protocol/tdap/client/dllmain.cpp +61 -13
  35. data/source/bzs/db/protocol/tdap/client/field.cpp +1592 -1398
  36. data/source/bzs/db/protocol/tdap/client/field.h +110 -121
  37. data/source/bzs/db/protocol/tdap/client/fields.h +40 -10
  38. data/source/bzs/db/protocol/tdap/client/filter.h +69 -55
  39. data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +296 -164
  40. data/source/bzs/db/protocol/tdap/client/groupQuery.h +77 -25
  41. data/source/bzs/db/protocol/tdap/client/memRecord.cpp +31 -13
  42. data/source/bzs/db/protocol/tdap/client/memRecord.h +31 -21
  43. data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +1 -1
  44. data/source/bzs/db/protocol/tdap/client/nsDatabase.h +4 -1
  45. data/source/bzs/db/protocol/tdap/client/nsTable.cpp +69 -24
  46. data/source/bzs/db/protocol/tdap/client/nsTable.h +3 -1
  47. data/source/bzs/db/protocol/tdap/client/recordset.cpp +1 -0
  48. data/source/bzs/db/protocol/tdap/client/recordsetImple.h +46 -27
  49. data/source/bzs/db/protocol/tdap/client/request.h +2 -1
  50. data/source/bzs/db/protocol/tdap/client/serializer.cpp +44 -9
  51. data/source/bzs/db/protocol/tdap/client/serializer.h +1 -1
  52. data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +182 -76
  53. data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +23 -12
  54. data/source/bzs/db/protocol/tdap/client/stringConverter.h +8 -10
  55. data/source/bzs/db/protocol/tdap/client/table.cpp +172 -93
  56. data/source/bzs/db/protocol/tdap/client/table.h +112 -37
  57. data/source/bzs/db/protocol/tdap/client/trdboostapi.h +17 -0
  58. data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +0 -1
  59. data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +0 -2
  60. data/source/bzs/db/protocol/tdap/client/trdormapi.h +1 -1
  61. data/source/bzs/db/protocol/tdap/fieldComp.h +698 -14
  62. data/source/bzs/db/protocol/tdap/myDateTime.cpp +723 -307
  63. data/source/bzs/db/protocol/tdap/myDateTime.h +294 -0
  64. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +164 -54
  65. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +6 -3
  66. data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +133 -550
  67. data/source/bzs/db/protocol/tdap/mysql/request.h +6 -5
  68. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +217 -82
  69. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +1 -1
  70. data/source/bzs/db/protocol/tdap/tdapRequest.h +4 -9
  71. data/source/bzs/db/protocol/tdap/tdapSchema.cpp +808 -17
  72. data/source/bzs/db/protocol/tdap/tdapSchema.h +656 -164
  73. data/source/bzs/db/protocol/tdap/tdapcapi.h +130 -28
  74. data/source/bzs/db/protocol/tdap/uri.h +40 -32
  75. data/source/bzs/db/transactd/connManager.cpp +1 -1
  76. data/source/bzs/db/transactd/transactd.cpp +7 -0
  77. data/source/bzs/env/compiler.h +107 -94
  78. data/source/bzs/env/crosscompile.cpp +24 -12
  79. data/source/bzs/env/crosscompile.h +75 -6
  80. data/source/bzs/env/mbcswchrLinux.cpp +2 -2
  81. data/source/bzs/env/tcharMinGW.h +4 -0
  82. data/source/bzs/example/changeSchema.cpp +22 -17
  83. data/source/bzs/example/queryData.cpp +4 -0
  84. data/source/bzs/netsvc/client/iconnection.h +3 -1
  85. data/source/bzs/netsvc/client/tcpClient.h +10 -3
  86. data/source/bzs/rtl/stringBuffers.cpp +7 -0
  87. data/source/bzs/test/tdclatl/bench_query_atl.js +6 -0
  88. data/source/bzs/test/tdclatl/bench_tdclatl.js +8 -1
  89. data/source/bzs/test/tdclatl/test_query_atl.js +22 -2
  90. data/source/bzs/test/tdclatl/test_v3.js +1017 -0
  91. data/source/bzs/test/tdclphp/transactd_Test.php +55 -21
  92. data/source/bzs/test/tdclphp/transactd_datetime_Test.php +0 -5
  93. data/source/bzs/test/tdclphp/transactd_pool_Test.php +2 -0
  94. data/source/bzs/test/tdclphp/transactd_v3_Test.php +743 -0
  95. data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +0 -5
  96. data/source/bzs/test/tdclrb/transactd_pool_spec.rb +2 -0
  97. data/source/bzs/test/tdclrb/transactd_spec.rb +39 -16
  98. data/source/bzs/test/tdclrb/transactd_v3_spec.rb +748 -0
  99. data/source/bzs/test/transactdBench/transactdBench.cpp +55 -58
  100. data/source/bzs/test/transactdBench/transactdBench2.cpp +1 -3
  101. data/source/bzs/test/trdclengn/testField.h +3305 -0
  102. data/source/bzs/test/trdclengn/test_tdclcpp_v3.cpp +1050 -0
  103. data/source/bzs/test/trdclengn/test_trdclengn.cpp +112 -190
  104. data/source/bzs/test/trdclengn/testbase.h +137 -0
  105. data/source/global/ormsrcgen/srcgen.cpp +23 -12
  106. data/source/global/ormsrcgen/template/ormDataClass_template.h +2 -0
  107. data/source/global/querystmts/querystmts.cpp +2 -3
  108. data/source/global/tdclatl/Bitset.cpp +38 -0
  109. data/source/global/tdclatl/Bitset.h +63 -0
  110. data/source/global/tdclatl/Database.cpp +59 -18
  111. data/source/global/tdclatl/Database.h +7 -4
  112. data/source/global/tdclatl/DbDef.cpp +6 -6
  113. data/source/global/tdclatl/DbDef.h +2 -1
  114. data/source/global/tdclatl/Field.cpp +112 -0
  115. data/source/global/tdclatl/Field.h +19 -5
  116. data/source/global/tdclatl/FieldDef.cpp +137 -16
  117. data/source/global/tdclatl/FieldDef.h +18 -2
  118. data/source/global/tdclatl/FieldDefs.cpp +54 -1
  119. data/source/global/tdclatl/FieldDefs.h +3 -0
  120. data/source/global/tdclatl/GroupQuery.cpp +8 -8
  121. data/source/global/tdclatl/QueryBase.cpp +65 -0
  122. data/source/global/tdclatl/QueryBase.h +10 -0
  123. data/source/global/tdclatl/Record.cpp +33 -2
  124. data/source/global/tdclatl/Record.h +3 -1
  125. data/source/global/tdclatl/RecordsetQuery.cpp +42 -0
  126. data/source/global/tdclatl/RecordsetQuery.h +8 -0
  127. data/source/global/tdclatl/Table.cpp +127 -3
  128. data/source/global/tdclatl/Table.h +10 -1
  129. data/source/global/tdclatl/TableDef.cpp +41 -8
  130. data/source/global/tdclatl/TableDef.h +7 -2
  131. data/source/global/tdclatl/activeTable.cpp +40 -71
  132. data/source/global/tdclatl/resource.h +0 -0
  133. data/source/global/tdclatl/tdclatl.idl +222 -28
  134. data/source/linux/tchar.h +100 -96
  135. data/transactd.gemspec +2 -2
  136. metadata +13 -11
  137. data/BUILD_UNIX-JA.md +0 -161
  138. data/BUILD_WIN-JA.md +0 -326
  139. data/README_ORMSRCGEN-JA.md +0 -115
  140. data/README_ORMSRCGEN.md +0 -118
  141. data/RELEASE_NOTE-JA.md +0 -356
  142. data/RELEASE_NOTE.md +0 -360
  143. data/bin/common/tdclc_32_2_4.dll +0 -0
  144. data/bin/common/tdclc_64_2_4.dll +0 -0
  145. data/source/bzs/test/trdclengn/test_blob.cpp +0 -375
@@ -16,115 +16,13 @@
16
16
  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17
17
  02111-1307, USA.
18
18
  ================================================================= */
19
- //#define BOOST_TEST_MODULE
20
-
21
- #if defined(__BCPLUSPLUS__)
22
- #pragma warn -8012
23
- #pragma warn -8022
24
- #endif
25
- #include <boost/test/included/unit_test.hpp>
26
- #ifndef BOOST_TEST_MESSAGE
27
- #define BOOST_TEST_MESSAGE BOOST_MESSAGE
28
- #endif
29
- #if defined(__BCPLUSPLUS__)
30
- #pragma warn .8012
31
- #pragma warn .8022
32
- #endif
33
-
34
- #include <bzs/db/protocol/tdap/client/database.h>
35
- #include <bzs/db/protocol/tdap/client/table.h>
36
- #include <bzs/db/protocol/tdap/client/dbDef.h>
37
- #include <bzs/db/protocol/tdap/mysql/characterset.h>
38
- #include <bzs/db/protocol/tdap/tdapcapi.h>
39
- #include <bzs/db/protocol/tdap/client/stringConverter.h>
40
- #include <stdio.h>
41
- #include <bzs/db/protocol/tdap/client/filter.h>
42
- #include <bzs/example/queryData.h>
43
- #include <bzs/db/protocol/tdap/client/activeTable.h>
19
+ #include "testbase.h"
44
20
  #include <bzs/db/protocol/tdap/client/pooledDatabaseManager.h>
45
21
  #include <boost/thread.hpp>
46
22
 
47
- using namespace bzs::db::protocol::tdap::client;
48
- using namespace bzs::db::protocol::tdap;
49
- using namespace std;
50
-
51
- #define TDAP
52
- #ifdef TDAP
53
- #define PROTOCOL _T("tdap")
54
- #else
55
- #define PROTOCOL _T("btrv")
56
- #endif
57
- static _TCHAR HOSTNAME[MAX_PATH] = { _T("127.0.0.1") };
58
- #define DBNAME _T("test")
59
- #define BDFNAME _T("test")
60
- // #define ISOLATION_REPEATABLE_READ
61
- #define ISOLATION_READ_COMMITTED
62
-
63
- static _TCHAR g_uri[MAX_PATH];
64
- static _TCHAR g_userName[MYSQL_USERNAME_MAX + 1]={0x00};
65
- static _TCHAR g_password[MAX_PATH]={0x00};
66
-
67
23
  static const short fdi_id = 0;
68
24
  static const short fdi_name = 1;
69
25
 
70
- boost::unit_test::test_suite* init_unit_test_suite(int argc, char* argv[]);
71
-
72
- boost::unit_test::test_suite* init_unit_test_suite(int argc, char* argv[])
73
- {
74
- for (int i = 1; i < argc; ++i)
75
- {
76
- if (strstr(argv[i], "--host=") == argv[i])
77
- {
78
- #ifdef _UNICODE
79
- MultiByteToWideChar(CP_ACP,
80
- (CP_ACP == CP_UTF8) ? 0 : MB_PRECOMPOSED,
81
- argv[i] + 7, -1, HOSTNAME, MAX_PATH);
82
- #else
83
- strcpy_s(HOSTNAME, MAX_PATH, argv[i] + 7);
84
- #endif
85
- }
86
- if (strstr(argv[i], "--user=") == argv[i])
87
- {
88
- #ifdef _UNICODE
89
- MultiByteToWideChar(CP_ACP,
90
- (CP_ACP == CP_UTF8) ? 0 : MB_PRECOMPOSED,
91
- argv[i] + 7, -1, g_userName, MYSQL_USERNAME_MAX+1);
92
- #else
93
- strcpy_s(g_userName, MYSQL_USERNAME_MAX+1, argv[i] + 7);
94
- #endif
95
- }
96
- if (strstr(argv[i], "--pwd=") == argv[i])
97
- {
98
- #ifdef _UNICODE
99
- MultiByteToWideChar(CP_ACP,
100
- (CP_ACP == CP_UTF8) ? 0 : MB_PRECOMPOSED,
101
- argv[i] + 6, -1, g_password, MAX_PATH);
102
- #else
103
- strcpy_s(g_password, MAX_PATH, argv[i] + 6);
104
- #endif
105
- }
106
- }
107
- printf("Transactd test ... \nMay look like progress is stopped, \n"
108
- "but it is such as record lock test, please wait.\n");
109
-
110
- return 0;
111
- }
112
-
113
-
114
-
115
- const _TCHAR* makeUri(const _TCHAR* protocol, const _TCHAR* host,
116
- const _TCHAR* dbname, const _TCHAR* dbfile=_T(""))
117
- {
118
- connectParams cp(protocol, host, dbname, dbfile, g_userName, g_password);
119
- _tcscpy_s(g_uri, 260, cp.uri());
120
- /*if (dbfile)
121
- _stprintf_s(g_uri, MAX_PATH, _T("%s://%s/%s?dbfile=%s"), protocol, host,
122
- dbname, dbfile);
123
- else
124
- _stprintf_s(g_uri, MAX_PATH, _T("%s://%s/%s"), protocol, host, dbname);*/
125
- return g_uri;
126
- }
127
-
128
26
  class fixture
129
27
  {
130
28
  mutable database* m_db;
@@ -250,6 +148,8 @@ void testClone(database* db)
250
148
  BOOST_CHECK_MESSAGE(ret == false, "testTablePtr");
251
149
  }
252
150
 
151
+
152
+ #define NAMEFIELD_TYPE ft_myvarbinary
253
153
  void testCreateNewDataBase(database* db)
254
154
  {
255
155
 
@@ -275,14 +175,10 @@ void testCreateNewDataBase(database* db)
275
175
  {
276
176
  /* user table */
277
177
  tabledef td;
278
- memset(&td, 0, sizeof(tabledef));
279
178
  td.setTableName(_T("user"));
280
179
  td.setFileName(_T("user.dat"));
281
180
  td.id = 1;
282
- td.primaryKeyNum = -1;
283
- td.parentKeyNum = -1;
284
- td.replicaKeyNum = -1;
285
- td.pageSize = 2048;
181
+
286
182
  #ifdef _WIN32
287
183
  td.charsetIndex = CHARSET_CP932;
288
184
  #else
@@ -308,13 +204,15 @@ void testCreateNewDataBase(database* db)
308
204
  //test padChar only string or wstring
309
205
  fd->type = ft_string;
310
206
  fd->setPadCharSettings(true, false);
311
- BOOST_CHECK(fd->usePadChar() == true);
312
- BOOST_CHECK(fd->trimPadChar() == false);
207
+ BOOST_CHECK(fd->isUsePadChar() == true);
208
+ BOOST_CHECK(fd->isTrimPadChar() == false);
313
209
  fd->setPadCharSettings(false, true);
314
- BOOST_CHECK(fd->usePadChar() == false);
315
- BOOST_CHECK(fd->trimPadChar() == true);
210
+ BOOST_CHECK(fd->isUsePadChar() == false);
211
+ BOOST_CHECK(fd->isTrimPadChar() == true);
316
212
 
317
- fd->type = ft_zstring;
213
+ //fd->type = ft_zstring;
214
+ fd->type = NAMEFIELD_TYPE;
215
+ fd->setNullable(use_nullfield);
318
216
  def->updateTableDef(1);
319
217
  BOOST_CHECK_MESSAGE(0 == def->stat(),
320
218
  "updateTableDef 2 stat = " << def->stat());
@@ -323,6 +221,7 @@ void testCreateNewDataBase(database* db)
323
221
  fd->setName(_T("select"));
324
222
  fd->type = ft_integer;
325
223
  fd->len = (ushort_td)4;
224
+ fd->setNullable(use_nullfield);
326
225
  def->updateTableDef(1);
327
226
  BOOST_CHECK_MESSAGE(0 == def->stat(),
328
227
  "updateTableDef 2 stat = " << def->stat());
@@ -331,6 +230,7 @@ void testCreateNewDataBase(database* db)
331
230
  fd->setName(_T("in"));
332
231
  fd->type = ft_integer;
333
232
  fd->len = (ushort_td)4;
233
+ fd->setNullable(use_nullfield);
334
234
  def->updateTableDef(1);
335
235
  BOOST_CHECK_MESSAGE(0 == def->stat(),
336
236
  "updateTableDef 2 stat = " << def->stat());
@@ -399,34 +299,34 @@ void testVersion(database* db)
399
299
  if (_tcscmp(PROTOCOL, _T("tdap")) == 0)
400
300
  {
401
301
  BOOST_CHECK_MESSAGE(
402
- atoi(CPP_INTERFACE_VER_MAJOR) == vv.versions[0].majorVersion,
403
- "clent_Major = " << vv.versions[0].majorVersion);
302
+ atoi(CPP_INTERFACE_VER_MAJOR) == vv.versions[VER_IDX_CLINET].majorVersion,
303
+ "clent_Major = " << vv.versions[VER_IDX_CLINET].majorVersion);
404
304
  BOOST_CHECK_MESSAGE(
405
- atoi(CPP_INTERFACE_VER_MINOR) == vv.versions[0].minorVersion,
406
- "clent_Miner = " << vv.versions[0].minorVersion);
407
- BOOST_CHECK_MESSAGE((int)'N' == (int)vv.versions[0].type,
408
- "clent_Type = " << vv.versions[0].type);
305
+ atoi(CPP_INTERFACE_VER_MINOR) == vv.versions[VER_IDX_CLINET].minorVersion,
306
+ "clent_Miner = " << vv.versions[VER_IDX_CLINET].minorVersion);
307
+ BOOST_CHECK_MESSAGE((int)'N' == (int)vv.versions[VER_IDX_CLINET].type,
308
+ "clent_Type = " << vv.versions[VER_IDX_CLINET].type);
409
309
 
410
310
  BOOST_CHECK_MESSAGE(
411
- ((5 == vv.versions[1].majorVersion) ||
412
- (10 == vv.versions[1].majorVersion)),
413
- "mysql_server_Major = " << vv.versions[1].majorVersion);
311
+ ((5 == vv.versions[VER_IDX_DB_SERVER].majorVersion) ||
312
+ (10 == vv.versions[VER_IDX_DB_SERVER].majorVersion)),
313
+ "mysql_server_Major = " << vv.versions[VER_IDX_DB_SERVER].majorVersion);
414
314
  BOOST_CHECK_MESSAGE(
415
- ((5 <= vv.versions[1].minorVersion) ||
416
- (0 == vv.versions[1].minorVersion) ||
417
- (1 == vv.versions[1].minorVersion)),
418
- "mysql_server_Miner = " << vv.versions[1].minorVersion);
419
- BOOST_CHECK_MESSAGE((int)'M' == (int)vv.versions[1].type,
420
- "mysql_server_Type = " << vv.versions[1].type);
315
+ ((5 <= vv.versions[VER_IDX_DB_SERVER].minorVersion) ||
316
+ (1 >= vv.versions[VER_IDX_DB_SERVER].minorVersion)),
317
+ "mysql_server_Miner = " << vv.versions[VER_IDX_DB_SERVER].minorVersion);
318
+ int type = (int)vv.versions[VER_IDX_DB_SERVER].type;
319
+ BOOST_CHECK_MESSAGE(((int)'M' == type) || ((int)'A' == type),
320
+ "mysql_server_Type = " << vv.versions[VER_IDX_DB_SERVER].type);
421
321
 
422
322
  BOOST_CHECK_MESSAGE(
423
- TRANSACTD_VER_MAJOR == vv.versions[2].majorVersion,
424
- "server_Major = " << vv.versions[2].majorVersion);
323
+ TRANSACTD_VER_MAJOR == vv.versions[VER_IDX_PLUGIN].majorVersion,
324
+ "server_Major = " << vv.versions[VER_IDX_PLUGIN].majorVersion);
425
325
  BOOST_CHECK_MESSAGE(
426
- TRANSACTD_VER_MINOR == vv.versions[2].minorVersion,
427
- "server_Miner = " << vv.versions[2].minorVersion);
428
- BOOST_CHECK_MESSAGE((int)'T' == (int)vv.versions[2].type,
429
- "server_Type = " << vv.versions[2].type);
326
+ TRANSACTD_VER_MINOR == vv.versions[VER_IDX_PLUGIN].minorVersion,
327
+ "server_Miner = " << vv.versions[VER_IDX_PLUGIN].minorVersion);
328
+ BOOST_CHECK_MESSAGE((int)'T' == (int)vv.versions[VER_IDX_PLUGIN].type,
329
+ "server_Type = " << vv.versions[VER_IDX_PLUGIN].type);
430
330
  }
431
331
  }
432
332
  }
@@ -462,8 +362,6 @@ void testInsert(database* db)
462
362
  tb->clearBuffer();
463
363
  tb->setFV((short)0, i);
464
364
  tb->setFV((short)1, i);
465
- if (i == 87170)
466
- i = 87170;
467
365
  tb->insert();
468
366
  }
469
367
  tb->commitBulkInsert();
@@ -747,7 +645,7 @@ void testPrepareServer(database* db)
747
645
  v = 50;
748
646
  tb->setFV((short)0, v);
749
647
  tb->seek();
750
- BOOST_CHECK_MESSAGE(0 == tb->stat(), "seek");
648
+ BOOST_CHECK_MESSAGE(0 == tb->stat(), "seek stat = " << tb->stat());
751
649
  tb->findNext(false);
752
650
  findNextLoop(tb, v, 100);
753
651
 
@@ -1557,7 +1455,7 @@ void testTransactionLockReadCommited(database* db)
1557
1455
  BOOST_CHECK_MESSAGE(0 == tb2->stat(), "tb->seekNext");
1558
1456
  // Try lock(X) whith lock(IX)
1559
1457
  tb2->update();
1560
- BOOST_CHECK_MESSAGE(STATUS_LOCK_ERROR == tb2->stat(), "tb->update");
1458
+ BOOST_CHECK_MESSAGE(STATUS_LOCK_ERROR == tb2->stat(), "tb2->update stat = " << tb2->stat());
1561
1459
 
1562
1460
  /* ---------------------------------------------------------*/
1563
1461
  /* Test single record lock Transaction and Transaction lock */
@@ -1663,7 +1561,7 @@ void testTransactionLockReadCommited(database* db)
1663
1561
  tb2->seekFirst();
1664
1562
  BOOST_CHECK_MESSAGE(0 == tb2->stat(), "tb2->seekFirst");
1665
1563
  tb2->update();
1666
- BOOST_CHECK_MESSAGE(STATUS_LOCK_ERROR == tb2->stat(), "tb2->update");
1564
+ BOOST_CHECK_MESSAGE(STATUS_LOCK_ERROR == tb2->stat(), "tb2->update stat = " << tb2->stat());
1667
1565
 
1668
1566
  db->endTrn();
1669
1567
  /* -------------------------------------------------*/
@@ -1972,15 +1870,18 @@ void testExclusive()
1972
1870
  db2->close();
1973
1871
 
1974
1872
  // Normal open
1873
+ /* Since MySQL 5.7 : D_OPEN_READONLY_EXCLUSIVE + TD_OPEN_NORMAL is fail,
1874
+ It's correct.
1875
+ */
1876
+
1975
1877
  db2->connect(makeUri(PROTOCOL, HOSTNAME, DBNAME), true);
1976
- db2->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME),
1977
- TYPE_SCHEMA_BDF, TD_OPEN_NORMAL);
1878
+ db2->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME), TYPE_SCHEMA_BDF, TD_OPEN_NORMAL);
1879
+
1978
1880
  if (MySQL5_7)
1979
- BOOST_CHECK_MESSAGE(STATUS_CANNOT_LOCK_TABLE == db2->stat()
1980
- , "Normal open");
1881
+ BOOST_CHECK_MESSAGE(STATUS_CANNOT_LOCK_TABLE == db2->stat() , "Normal open");
1981
1882
  else
1982
- BOOST_CHECK_MESSAGE(0 == db2->stat()
1983
- , "Normal open");
1883
+ BOOST_CHECK_MESSAGE(0 == db2->stat(), "Normal open");
1884
+
1984
1885
  db2->close();
1985
1886
 
1986
1887
  // Write Exclusive open
@@ -2339,11 +2240,11 @@ void testReconnect(database* db)
2339
2240
  //Check restore lock
2340
2241
  tb2->setFV(fdi_id, 10);
2341
2242
  tb2->seek(ROW_LOCK_X);
2342
- BOOST_CHECK_MESSAGE(STATUS_LOCK_ERROR == tb2->stat(), "tb->seek stat = " << tb2->stat());
2243
+ BOOST_CHECK_MESSAGE(STATUS_LOCK_ERROR == tb2->stat(), "tb->seek stat = " << tb2->stat()); //0
2343
2244
 
2344
2245
  tb->seekNext();
2345
- BOOST_CHECK_MESSAGE(0 == tb->stat(), "tb->seek stat = " << tb->stat());
2346
- BOOST_CHECK_MESSAGE(11 == tb->getFVint(fdi_id), "getFVint 11 bad = " << tb->getFVint(fdi_id));
2246
+ BOOST_CHECK_MESSAGE(0 == tb->stat(), "tb->seek stat = " << tb->stat());//8
2247
+ BOOST_CHECK_MESSAGE(11 == tb->getFVint(fdi_id), "getFVint 11 bad = " << tb->getFVint(fdi_id));//10
2347
2248
 
2348
2249
  tb2->setFV(fdi_id, 11);
2349
2250
  tb2->seek(ROW_LOCK_X);
@@ -2452,7 +2353,7 @@ void testLogin(database* db)
2452
2353
  // invalid database name
2453
2354
  testDropDatabase(db);
2454
2355
  db->disconnect();
2455
- BOOST_CHECK_MESSAGE(0 == db->stat(),
2356
+ BOOST_CHECK_MESSAGE(STATUS_PROGRAM_ERROR == db->stat(),
2456
2357
  "databese disconnect db->stat() = " << db->stat());
2457
2358
 
2458
2359
  db->connect(makeUri(PROTOCOL, HOSTNAME, DBNAME));
@@ -2461,7 +2362,7 @@ void testLogin(database* db)
2461
2362
 
2462
2363
  //connect is failed, no need disconnet.
2463
2364
  db->disconnect();
2464
- BOOST_CHECK_MESSAGE(1 == db->stat(),
2365
+ BOOST_CHECK_MESSAGE(STATUS_PROGRAM_ERROR == db->stat(),
2465
2366
  "databese disconnect db->stat() = " << db->stat());
2466
2367
  }
2467
2368
 
@@ -2484,22 +2385,14 @@ void doCreateVarTable(database* db, int id, const _TCHAR* name, char fieldType,
2484
2385
  // create table
2485
2386
  dbdef* def = db->dbDef();
2486
2387
  tabledef td;
2487
- memset(&td, 0, sizeof(td));
2488
2388
  td.setTableName(name);
2489
2389
  _TCHAR buf[267];
2490
2390
  _tcscpy_s(buf, 100, name);
2491
2391
  _tcscat_s(buf, 100, _T(".dat"));
2492
2392
  td.setFileName(buf);
2493
2393
  td.id = id;
2494
- td.keyCount = 0;
2495
- td.fieldCount = 0;
2496
- td.flags.all = 0;
2497
-
2498
- td.primaryKeyNum = -1;
2499
- td.parentKeyNum = -1;
2500
- td.replicaKeyNum = -1;
2501
2394
 
2502
- td.pageSize = 2048;
2395
+ td.primaryKeyNum = 0;
2503
2396
 
2504
2397
  td.charsetIndex = charset;
2505
2398
 
@@ -2571,7 +2464,7 @@ bool isUtf16leSupport(database* db)
2571
2464
  {
2572
2465
  btrVersions vv;
2573
2466
  db->getBtrVersion(&vv);
2574
- if ((int)'M' == (int)vv.versions[1].type)
2467
+ if ((int)'M' == (int)vv.versions[1].type || (int)'A' == (int)vv.versions[1].type)
2575
2468
  {
2576
2469
  if (vv.versions[1].majorVersion > 5)
2577
2470
  return true;
@@ -3272,8 +3165,9 @@ void doInsertStringFileter(table* tb)
3272
3165
  tb->setFV(_T("namew"), _T("おめでとうございます。"));
3273
3166
  tb->insert();
3274
3167
  BOOST_CHECK_MESSAGE(0 == tb->stat(), "InsertStringFileter 4");
3275
- tb->commitBulkInsert();
3168
+ int n = tb->commitBulkInsert();
3276
3169
  BOOST_CHECK_MESSAGE(0 == tb->stat(), "InsertStringFileter 5");
3170
+ BOOST_CHECK_MESSAGE(n == 3, "InsertStringFileter 5");
3277
3171
  }
3278
3172
 
3279
3173
  void doTestReadSF(table* tb)
@@ -3682,18 +3576,22 @@ void testLogic(database* db)
3682
3576
  {
3683
3577
  table* tb = openTable(db);
3684
3578
  logic lc;
3579
+ db->dbDef()->tableDefs(1)->fieldDefs[1].type = ft_zstring;
3685
3580
 
3686
3581
  lc.setParam(tb, _T("name"), _T("="), _T("abc"), eCend);
3687
3582
 
3688
3583
  BOOST_CHECK_MESSAGE(lc.type == ft_zstring, " logic.type");
3689
- BOOST_CHECK_MESSAGE(lc.len == 33, " logic.len");
3584
+
3690
3585
  BOOST_CHECK_MESSAGE(lc.pos == 4, " logic.pos");
3691
3586
  BOOST_CHECK_MESSAGE(lc.logType == 1, " logic.logType");
3692
3587
  BOOST_CHECK_MESSAGE(lc.opr == eCend, " logic.opr");
3693
- BOOST_CHECK_MESSAGE(strcmp((char*)lc.data, "abc") == 0, " logic.data");
3694
-
3695
3588
  int len = lc.size();
3589
+ BOOST_CHECK_MESSAGE(lc.len == 33, " logic.len");
3590
+ BOOST_CHECK_MESSAGE(strcmp((char*)lc.data, "abc") == 0, " logic.data");
3696
3591
  BOOST_CHECK_MESSAGE(len == 7 + 33, " logic.writeBuffer");
3592
+
3593
+
3594
+
3697
3595
 
3698
3596
  // compField invalid filed name
3699
3597
  bool ret = lc.setParam(tb, _T("name"), _T("="), _T("1"), eCend, true);
@@ -4292,8 +4190,7 @@ void testJoin(database* db)
4292
4190
  gq.addFunction(&count3).keyField(_T("group")); //.resultField(_T("count"));
4293
4191
  rs.groupBy(gq);
4294
4192
  BOOST_CHECK_MESSAGE(rs.size() == 5,
4295
- "group by2 rs.size()==" << rsv->size());
4296
-
4193
+ "group by2 rs.size()==" << rs.size());
4297
4194
  // having
4298
4195
  recordsetQuery rq;
4299
4196
  rq.when(_T("gropu1_count"), _T("="), 1).or_(_T("gropu1_count"), _T("="), 2);
@@ -4524,10 +4421,10 @@ void testServerPrepareJoin(database* db)
4524
4421
  atu.keyValue(1).read(rs, stmt1, 15000);
4525
4422
  ate.outerJoin(rs, stmt2, _T("id"));
4526
4423
  BOOST_CHECK_MESSAGE(rs.size() == 15000, "outerJoin rs.size()== 15000");
4424
+ BOOST_CHECK_MESSAGE(rs[NO_RECORD_ID-1].isInvalidRecord() == true, "outerJoin isInvalidRecord");
4527
4425
  atg.outerJoin(rs, stmt3, _T("group"));
4528
4426
  BOOST_CHECK_MESSAGE(rs.size() == 15000, "join2 rs.size()== 15000");
4529
4427
 
4530
- BOOST_CHECK_MESSAGE(rs[NO_RECORD_ID-1].isInvalidRecord() == true, "outerJoin isInvalidRecord");
4531
4428
  BOOST_CHECK_MESSAGE(rs[NO_RECORD_ID][_T("comment")].i() == NO_RECORD_ID+1, "row of 6 = '6 comment'");
4532
4429
  vs = rs[NO_RECORD_ID][_T("blob")].c_str();
4533
4430
  ret = _tcscmp(vs, _T("6 blob")) == 0;
@@ -4541,6 +4438,7 @@ void testServerPrepareJoin(database* db)
4541
4438
  ate.outerJoin(rs, stmt2, _T("id"));
4542
4439
  BOOST_CHECK_MESSAGE(rs.size() == 15000, "outerJoin rs.size()== 15000");
4543
4440
  BOOST_CHECK_MESSAGE(rs[NO_RECORD_ID-1].isInvalidRecord() == true, "outerJoin isInvalidRecord");
4441
+ BOOST_CHECK_MESSAGE(rs[NO_RECORD_ID-1][_T("comment")].isNull() == true, "outerJoin NULL");
4544
4442
  BOOST_CHECK_MESSAGE(rs[NO_RECORD_ID][_T("comment")].i() == NO_RECORD_ID+1, "row of 6 = '6 comment'");
4545
4443
  vs = rs[NO_RECORD_ID][_T("blob")].c_str();
4546
4444
  ret = _tcscmp(vs, _T("6 blob")) == 0;
@@ -4553,7 +4451,8 @@ void testServerPrepareJoin(database* db)
4553
4451
  // Test clone blob field
4554
4452
  recordset& rs2 = *rs.clone();
4555
4453
  BOOST_CHECK_MESSAGE(rs2.size() == 15000, "outerJoin rs2.size()== 15000");
4556
- BOOST_CHECK_MESSAGE(rs2[NO_RECORD_ID-1].isInvalidRecord() == true, "outerJoin isInvalidRecord");
4454
+ //BOOST_CHECK_MESSAGE(rs2[NO_RECORD_ID-1].isInvalidRecord() == true, "outerJoin isInvalidRecord");
4455
+ BOOST_CHECK_MESSAGE(rs[NO_RECORD_ID-1][_T("comment")].isNull() == true, "outerJoin NULL");
4557
4456
  BOOST_CHECK_MESSAGE(rs2[NO_RECORD_ID][_T("comment")].i() == NO_RECORD_ID+1, "row of 6 = '6 comment'");
4558
4457
  vs = rs2[NO_RECORD_ID][_T("blob")].c_str();
4559
4458
  ret = _tcscmp(vs, _T("6 blob")) == 0;
@@ -4940,10 +4839,10 @@ void createFilterTestDb(database* db)
4940
4839
  td.setTableName(_T("user"));
4941
4840
  td.setFileName(_T("user.dat"));
4942
4841
  td.id = 1;
4943
- td.primaryKeyNum = -1;
4842
+ /*td.primaryKeyNum = -1;
4944
4843
  td.parentKeyNum = -1;
4945
4844
  td.replicaKeyNum = -1;
4946
- td.pageSize = 2048;
4845
+ td.pageSize = 2048;*/
4947
4846
  #ifdef _WIN32
4948
4847
  td.charsetIndex = CHARSET_CP932;
4949
4848
  #else
@@ -5011,7 +4910,7 @@ void doTestReadByQuery(int num, activeTable& at, recordset& rs, Q& q,
5011
4910
  setReject(q);
5012
4911
  at.index(0).keyValue(0).read(rs, q);
5013
4912
  BOOST_CHECK_MESSAGE(compSize == (int)rs.size(),
5014
- num << " " << msg << " rs.size() = " << rs.size());
4913
+ num << " " << msg << " " << compSize << " --> bad rs.size() = " << rs.size());
5015
4914
  }
5016
4915
 
5017
4916
  void testFilterOfServer(database* db)
@@ -5028,7 +4927,8 @@ void testFilterOfServer(database* db)
5028
4927
 
5029
4928
  q.reset().where(fdf_names[i], _T("="), _T(""));
5030
4929
  int n = 3;
5031
- if (atu.table()->tableDef()->fieldDefs[i+1].usePadChar())
4930
+ fielddef* fd = &atu.table()->tableDef()->fieldDefs[i+1];
4931
+ if (fd->isUsePadChar())
5032
4932
  n += 1;
5033
4933
  doTestReadByQuery(i, atu, rs, q, n, "");
5034
4934
  q.where(fdf_names[i], _T("=i"), _T(""));
@@ -5119,12 +5019,12 @@ void testFilterOfServer(database* db)
5119
5019
  }
5120
5020
  }
5121
5021
 
5122
- void doTestMatchBy(int num, recordset& rs, recordsetQuery& rq, int compSize, const _TCHAR* msg)
5022
+ void doTestMatchBy(int num, recordset& rs, recordsetQuery& rq, int compSize, const char* msg)
5123
5023
  {
5124
5024
  recordset* rss = rs.clone();
5125
5025
  rss->matchBy(rq);
5126
5026
  BOOST_CHECK_MESSAGE(compSize == (int)rss->size(),
5127
- num << msg << _T(" rss->size = ") << rss->size());
5027
+ num << " " << msg << " rss->size = " << rss->size());
5128
5028
  rss->release();
5129
5029
  }
5130
5030
 
@@ -5143,47 +5043,47 @@ void testFilterOfMatchBy(database* db)
5143
5043
  recordsetQuery rq;
5144
5044
  rq.when(fdf_names[i], _T("="), _T(""));
5145
5045
  int n = 3;
5146
- if (atu.table()->tableDef()->fieldDefs[i+1].usePadChar())
5046
+ if (atu.table()->tableDef()->fieldDefs[i+1].isUsePadChar())
5147
5047
  n += 1;
5148
- doTestMatchBy(i, rs, rq, n, _T(" = "));
5048
+ doTestMatchBy(i, rs, rq, n, " = ");
5149
5049
  rq.reset().when(fdf_names[i], _T("=i"), _T(""));
5150
- doTestMatchBy(i, rs, rq, n, _T(" =i "));
5050
+ doTestMatchBy(i, rs, rq, n, " =i ");
5151
5051
 
5152
5052
 
5153
5053
  // wildcard
5154
5054
  rq.reset().when(fdf_names[i], _T("="), _T("09*"));
5155
- doTestMatchBy(i, rs, rq, 5, _T(" = 09*"));
5055
+ doTestMatchBy(i, rs, rq, 5, " = 09*");
5156
5056
  rq.reset().when(fdf_names[i], _T("=i"), _T("09*"));
5157
- doTestMatchBy(i, rs, rq, 5, _T(" =i 09*"));
5057
+ doTestMatchBy(i, rs, rq, 5, " =i 09*");
5158
5058
 
5159
5059
  // match complate
5160
5060
  rq.reset().when(fdf_names[i], _T("="), _T("070"));
5161
- doTestMatchBy(i, rs, rq, 1, _T(" = 070"));
5061
+ doTestMatchBy(i, rs, rq, 1, " = 070");
5162
5062
  rq.reset().when(fdf_names[i], _T("=i"), _T("070"));
5163
- doTestMatchBy(i, rs, rq, 1, _T(" =i 070"));
5063
+ doTestMatchBy(i, rs, rq, 1, " =i 070");
5164
5064
 
5165
5065
  // match complate
5166
5066
  rq.reset().when(fdf_names[i], _T("<"), _T("09"));
5167
- doTestMatchBy(i, rs, rq, 7, _T(" < 09"));
5067
+ doTestMatchBy(i, rs, rq, 7, " < 09");
5168
5068
 
5169
5069
  rq.reset().when(fdf_names[i], _T("<i"), _T("09"));
5170
- doTestMatchBy(i, rs, rq, 7, _T(" <i 09"));
5070
+ doTestMatchBy(i, rs, rq, 7, " <i 09");
5171
5071
 
5172
5072
  // ascii
5173
5073
  rq.reset().when(fdf_names[i], _T("="), _T("a*"));
5174
- doTestMatchBy(i, rs, rq, 1, _T(" = a*"));
5074
+ doTestMatchBy(i, rs, rq, 1, " = a*");
5175
5075
 
5176
5076
  rq.reset().when(fdf_names[i], _T("=i"), _T("a*"));
5177
- doTestMatchBy(i, rs, rq, 3, _T(" =i a*"));
5077
+ doTestMatchBy(i, rs, rq, 3, " =i a*");
5178
5078
 
5179
5079
  rq.reset().when(fdf_names[i], _T("=i"), _T("A*"));
5180
- doTestMatchBy(i, rs, rq, 3, _T(" =i A*"));
5080
+ doTestMatchBy(i, rs, rq, 3, " =i A*");
5181
5081
 
5182
5082
  rq.reset().when(fdf_names[i], _T("="), _T("AA0*"));
5183
- doTestMatchBy(i, rs, rq, 0, _T(" = AA0*"));
5083
+ doTestMatchBy(i, rs, rq, 0, " = AA0*");
5184
5084
 
5185
5085
  rq.reset().when(fdf_names[i], _T("=i"), _T("AA0*"));
5186
- doTestMatchBy(i, rs, rq, 1, _T(" =i Aa0*"));
5086
+ doTestMatchBy(i, rs, rq, 1, " =i Aa0*");
5187
5087
 
5188
5088
 
5189
5089
  BOOST_CHECK_MESSAGE(FILTER_RECORDS == rs.size(), " rs.size() = " << rs.size());
@@ -5218,7 +5118,7 @@ void testBinaryField()
5218
5118
  fdd.len = 255;
5219
5119
  fdd.pos = 0;
5220
5120
 
5221
- client::field fd(buf, fdd, NULL);
5121
+ client::field fd(buf, fdd, NULL/*, NULL, 0*/);
5222
5122
  for (int i = 0 ; i < 10; ++i)
5223
5123
  {
5224
5124
  fdd.type = field_types[i];
@@ -5247,8 +5147,30 @@ BOOST_FIXTURE_TEST_CASE(createNewDataBase, fixture)
5247
5147
  {
5248
5148
  connectParams cp(PROTOCOL, HOSTNAME, DBNAME, BDFNAME, g_userName);
5249
5149
  _tprintf(_T("URI = %s\n"), cp.uri());
5250
- if (db()->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME)))
5150
+ bool ret = db()->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME));
5151
+ if (ret)
5152
+ {
5251
5153
  db()->drop();
5154
+ if (db()->stat())
5155
+ {
5156
+ printf("test database drop error No.%d\nTest is stopped !" , db()->stat());
5157
+ exit(1);
5158
+ }
5159
+ }
5160
+ db()->connect(makeUri(PROTOCOL, HOSTNAME, _T("")));
5161
+
5162
+ btrVersions v;
5163
+ db()->getBtrVersion(&v);
5164
+ if (db()->stat() ==0)
5165
+ {
5166
+ _tprintf(_T("%s-%d.%d with Transactd plugin %d.%d\n"),
5167
+ v.versions[VER_IDX_DB_SERVER].type == 'M' ? _T("mysql") : _T("mariadb"),
5168
+ v.versions[VER_IDX_DB_SERVER].majorVersion,
5169
+ v.versions[VER_IDX_DB_SERVER].minorVersion,
5170
+ v.versions[VER_IDX_PLUGIN].majorVersion,
5171
+ v.versions[VER_IDX_PLUGIN].minorVersion
5172
+ );
5173
+ }
5252
5174
  testCreateNewDataBase(db());
5253
5175
  }
5254
5176
  BOOST_FIXTURE_TEST_CASE(clone, fixture)