transactd 2.4.5 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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)