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
@@ -0,0 +1,137 @@
1
+ #ifndef BZS_TEST_TRDCLENGN_TESTBASE_H
2
+ #define BZS_TEST_TRDCLENGN_TESTBASE_H
3
+ /* =================================================================
4
+ Copyright (C) 2015 BizStation Corp All rights reserved.
5
+
6
+ This program is free software; you can redistribute it and/or
7
+ modify it under the terms of the GNU General Public License
8
+ as published by the Free Software Foundation; either version 2
9
+ of the License, or (at your option) any later version.
10
+
11
+ This program is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU General Public License for more details.
15
+
16
+ You should have received a copy of the GNU General Public License
17
+ along with this program; if not, write to the Free Software
18
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
19
+ 02111-1307, USA.
20
+ ================================================================= */
21
+ //#include <boost/test/test_tools.hpp>
22
+
23
+ #if defined(__BCPLUSPLUS__)
24
+ #pragma warn -8012
25
+ #pragma warn -8022
26
+ #endif
27
+ #include <boost/test/included/unit_test.hpp>
28
+ #ifndef BOOST_TEST_MESSAGE
29
+ #define BOOST_TEST_MESSAGE BOOST_MESSAGE
30
+ #endif
31
+ #if defined(__BCPLUSPLUS__)
32
+ #pragma warn .8012
33
+ #pragma warn .8022
34
+ #endif
35
+
36
+ #include <bzs/db/protocol/tdap/client/database.h>
37
+ #include <bzs/db/protocol/tdap/client/table.h>
38
+ #include <bzs/db/protocol/tdap/client/dbDef.h>
39
+ #include <bzs/db/protocol/tdap/mysql/characterset.h>
40
+ #include <bzs/db/protocol/tdap/tdapcapi.h>
41
+ #include <bzs/db/protocol/tdap/client/stringConverter.h>
42
+ #include <stdio.h>
43
+ #include <bzs/db/protocol/tdap/client/filter.h>
44
+ #include <bzs/example/queryData.h>
45
+ #include <bzs/db/protocol/tdap/client/activeTable.h>
46
+ #include <bzs/db/protocol/tdap/myDateTime.h>
47
+
48
+ using namespace bzs::db::protocol::tdap::client;
49
+ using namespace bzs::db::protocol::tdap;
50
+ using namespace std;
51
+
52
+ #define TDAP
53
+ #ifdef TDAP
54
+ #define PROTOCOL _T("tdap")
55
+ #else
56
+ #define PROTOCOL _T("btrv")
57
+ #endif
58
+ static _TCHAR HOSTNAME[MAX_PATH] = { _T("127.0.0.1") };
59
+ #define DBNAME _T("test")
60
+ #define BDFNAME _T("test")
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
+ const _TCHAR* makeUri(const _TCHAR* protocol, const _TCHAR* host,
68
+ const _TCHAR* dbname, const _TCHAR* dbfile=_T(""))
69
+ {
70
+ connectParams cp(protocol, host, dbname, dbfile, g_userName, g_password);
71
+ _tcscpy_s(g_uri, 260, cp.uri());
72
+ return g_uri;
73
+ }
74
+
75
+ static bool use_nullfield = false;
76
+ static bool use_mysqlNullMode = true;
77
+
78
+ boost::unit_test::test_suite* init_unit_test_suite(int argc, char* argv[]);
79
+
80
+ boost::unit_test::test_suite* init_unit_test_suite(int argc, char* argv[])
81
+ {
82
+ for (int i = 1; i < argc; ++i)
83
+ {
84
+ if (strstr(argv[i], "--host=") == argv[i])
85
+ {
86
+ #ifdef _UNICODE
87
+ MultiByteToWideChar(CP_ACP,
88
+ (CP_ACP == CP_UTF8) ? 0 : MB_PRECOMPOSED,
89
+ argv[i] + 7, -1, HOSTNAME, MAX_PATH);
90
+ #else
91
+ strcpy_s(HOSTNAME, MAX_PATH, argv[i] + 7);
92
+ #endif
93
+ }
94
+ if (strstr(argv[i], "--user=") == argv[i])
95
+ {
96
+ #ifdef _UNICODE
97
+ MultiByteToWideChar(CP_ACP,
98
+ (CP_ACP == CP_UTF8) ? 0 : MB_PRECOMPOSED,
99
+ argv[i] + 7, -1, g_userName, MYSQL_USERNAME_MAX+1);
100
+ #else
101
+ strcpy_s(g_userName, MYSQL_USERNAME_MAX+1, argv[i] + 7);
102
+ #endif
103
+ }
104
+
105
+ if (strstr(argv[i], "--pwd=") == argv[i])
106
+ {
107
+ #ifdef _UNICODE
108
+ MultiByteToWideChar(CP_ACP,
109
+ (CP_ACP == CP_UTF8) ? 0 : MB_PRECOMPOSED,
110
+ argv[i] + 6, -1, g_password, MAX_PATH);
111
+ #else
112
+ strcpy_s(g_password, MAX_PATH, argv[i] + 6);
113
+ #endif
114
+ }
115
+ if (strstr(argv[i], "--nullfield=") == argv[i])
116
+ use_nullfield = atol(argv[i] + 12) != 0;
117
+ if (strstr(argv[i], "--mysqlnull=") == argv[i])
118
+ use_mysqlNullMode = atol(argv[i] + 12) != 0;
119
+ }
120
+ printf("Transactd test ... \nMay look like progress is stopped, \n"
121
+ "but it is such as record lock test, please wait.\n");
122
+ if (!use_mysqlNullMode)
123
+ database::setCompatibleMode(database::CMP_MODE_OLD_NULL);
124
+ return 0;
125
+ }
126
+
127
+ #ifdef _WIN32
128
+ #ifdef _UNICODE
129
+ static const uchar_td g_td_charsetIndex = CHARSET_UTF8;
130
+ #else
131
+ static const uchar_td g_td_charsetIndex = CHARSET_CP932;
132
+ #endif
133
+ #else
134
+ static const uchar_td g_td_charsetIndex = CHARSET_UTF8;
135
+ #endif
136
+
137
+ #endif // BZS_TEST_TRDCLENGN_TESTBASE_H
@@ -144,7 +144,7 @@ int cppSrcGen::typeNum(int type)
144
144
  t = 1;
145
145
  else if (t == ft_logical)
146
146
  t = 1;
147
- else if (t == ft_uinteger)
147
+ else if (t == ft_uinteger || t == ft_myyear)
148
148
  t = 1;
149
149
  else if (t == ft_currency)
150
150
  t = 1;
@@ -161,7 +161,7 @@ int cppSrcGen::typeNum(int type)
161
161
  t = 4;
162
162
  else if ((t == ft_datetime) || (t == ft_mydatetime))
163
163
  t = 30;
164
- else if ((t == ft_lvar) || (t == ft_blob) || (t == ft_myblob))
164
+ else if ((t == ft_lvar) || (t == ft_blob) || (t == ft_myblob)|| (t == ft_mygeometry) || (t == ft_myjson))
165
165
  t = ft_lvar;
166
166
  return t;
167
167
  }
@@ -225,10 +225,8 @@ const char* cppSrcGen::typeString(int type, int size)
225
225
  return "double";
226
226
  THROW_BZS_ERROR_WITH_MSG(_T("Invalid float size"));
227
227
  case ft_date:
228
- case ft_mydate:
229
228
  return "td::btrDate";
230
229
  case ft_time:
231
- case ft_mytime:
232
230
  return "td::btrTime";
233
231
  case ft_datetime:
234
232
  case ft_timestamp:
@@ -247,6 +245,9 @@ const char* cppSrcGen::typeString(int type, int size)
247
245
  return "_tstring";
248
246
  case ft_uinteger:
249
247
  case ft_autoIncUnsigned:
248
+ case ft_bit:
249
+ case ft_set:
250
+ case ft_enum:
250
251
  if (size == 1)
251
252
  return "unsigned char";
252
253
  else if (size == 2)
@@ -256,14 +257,24 @@ const char* cppSrcGen::typeString(int type, int size)
256
257
  else if (size == 8)
257
258
  return "unsigned __int64";
258
259
  THROW_BZS_ERROR_WITH_MSG(_T("Invalid uint size"));
260
+ case ft_myyear:
261
+ return "unsigned short";
259
262
  case ft_lvar:
260
263
  case ft_myblob:
264
+ case ft_mygeometry:
265
+ case ft_myjson:
261
266
  return "void*";
267
+ case ft_mydate:
268
+ return "td::myDate";
269
+ case ft_mytime:
270
+ return "td::myTime";
271
+ case ft_mydatetime:
272
+ return "td::myDateTime";
273
+ case ft_mytimestamp:
274
+ return "td::myTimeStamp";
262
275
  case ft_numericsts:
263
276
  case ft_numericsa:
264
277
  case ft_decimal:
265
- case ft_mydatetime:
266
- case ft_mytimestamp:
267
278
  THROW_BZS_ERROR_WITH_MSG(_T("non support type"));
268
279
  default:
269
280
  THROW_BZS_ERROR_WITH_MSG(_T("invalid field type"));
@@ -297,9 +308,9 @@ string cppSrcGen::makeDataMembaInitString()
297
308
  retVal += LF "\t\t";
298
309
  }
299
310
  }
300
- if ((t == ft_time) || (t == ft_date))
311
+ if ((t == ft_time) || (t == ft_date) || (t == ft_mydate))
301
312
  retVal2 = retVal2 + "\t\t" + name + ".i = 0;" LF;
302
- else if (t == ft_datetime)
313
+ else if ((t == ft_datetime) || (t == ft_mytime) || (t == ft_mydatetime)|| (t == ft_mytimestamp))
303
314
  retVal2 = retVal2 + "\t\t" + name + ".i64 = 0;" LF;
304
315
  }
305
316
  removeEndchar(retVal);
@@ -507,9 +518,9 @@ string cppSrcGen::makeMapWriteStringLine(int index)
507
518
  int t = typeNum(fd->type);
508
519
 
509
520
  string s = "\tfds[m_fdi." + name + "] = m." + membaNameGet(name) + "()";
510
- if ((t == ft_time) || (t == ft_date))
521
+ if ((t == ft_time) || (t == ft_date) || (t == ft_mydate))
511
522
  s += string(".i");
512
- else if (t == ft_datetime)
523
+ else if ((t == ft_datetime) || (t == ft_mytime) || (t == ft_mydatetime)|| (t == ft_mytimestamp))
513
524
  s += string(".i64");
514
525
  else if (t == ft_lvar)
515
526
  {
@@ -556,9 +567,9 @@ string cppSrcGen::makeMapKeyCompString()
556
567
  tostr = "";
557
568
  tostrend = "";
558
569
  }
559
- if ((t == ft_time) || (t == ft_date))
570
+ if ((t == ft_time) || (t == ft_date) || (t == ft_mydate))
560
571
  s += string(".i");
561
- else if (t == ft_datetime)
572
+ else if ((t == ft_datetime) || (t == ft_mytime) || (t == ft_mydatetime)|| (t == ft_mytimestamp))
562
573
  s += string(".i64");
563
574
  string tmp;
564
575
  size_t size = 0;
@@ -5,6 +5,8 @@
5
5
  #include <boost/shared_ptr.hpp>
6
6
  #include <vector>
7
7
  #include <bzs/db/protocol/tdap/btrDate.h>
8
+ #include <bzs/db/protocol/tdap/myDateTime.h>
9
+
8
10
  namespace td = bzs::db::protocol::tdap;
9
11
 
10
12
  % nameSpaceBegin %
@@ -71,8 +71,7 @@ bool readInputValues(const char* filename,
71
71
  FILE* fp = fopen(filename, "rt");
72
72
  if (!fp)
73
73
  {
74
- _ftprintf(stderr, _T("Error ! Can not open the input file (%s)\n"),
75
- filename);
74
+ fprintf(stderr, "Error ! Can not open the input file (%s)\n", filename);
76
75
  return false;
77
76
  }
78
77
  char tmp[5];
@@ -215,7 +214,7 @@ int _tmain(int argc, _TCHAR* argv[])
215
214
  if (pm.print)
216
215
  printResult(rs);
217
216
  char tmp[120];
218
- sprintf_s(tmp, 120, "OK, %lu record(s) :", rs.size());
217
+ sprintf_s(tmp, 120, "OK, %lu record(s) :", (unsigned long)rs.size());
219
218
  bzs::rtl::benchmark::showTimes(t, tmp);
220
219
 
221
220
  fflush(stdout);
@@ -0,0 +1,38 @@
1
+ // Bitset.cpp : CBitset �̎���
2
+
3
+ #include "stdafx.h"
4
+ #include "Bitset.h"
5
+
6
+
7
+ // CBitset
8
+
9
+ STDMETHODIMP CBitset::get_Bit(short Index, VARIANT_BOOL* Value)
10
+ {
11
+ *Value = m_bitset.get(Index);
12
+ return S_OK;
13
+ }
14
+
15
+ STDMETHODIMP CBitset::put_Bit(short Index, VARIANT_BOOL Value)
16
+ {
17
+ m_bitset.set(Index, (Value != 0));
18
+ return S_OK;
19
+ }
20
+
21
+ STDMETHODIMP CBitset::Equals(IBitset* bitset, VARIANT_BOOL* retVal)
22
+ {
23
+ CBitset* b = dynamic_cast<CBitset*>(bitset);
24
+ if (!b) return Error("Invalid param.", IID_IBitset);
25
+ *retVal = (m_bitset == b->m_bitset);
26
+ return S_OK;
27
+ }
28
+
29
+ STDMETHODIMP CBitset::Contains(IBitset* bitset, VARIANT_BOOL all, VARIANT_BOOL* retVal)
30
+ {
31
+ CBitset* b = dynamic_cast<CBitset*>(bitset);
32
+ if (!b) return Error("Invalid param bitset.", IID_IBitset);
33
+ *retVal = m_bitset.contains(b->m_bitset, (all != 0));
34
+ return S_OK;
35
+ }
36
+
37
+
38
+
@@ -0,0 +1,63 @@
1
+ // Bitset.h : CBitset �̐錾
2
+
3
+ #pragma once
4
+ #include "resource.h" // ���C�� �V���{��
5
+
6
+
7
+
8
+ #include "tdclatl_i.h"
9
+ #include <bzs/db/protocol/tdap/client/table.h>
10
+
11
+
12
+ #if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
13
+ #error "DCOM �̊��S�T�|�[�g���܂�ł��Ȃ� Windows Mobile �v���b�g�t�H�[���̂悤�� Windows CE �v���b�g�t�H�[���ł́A�P��X���b�h COM �I�u�W�F�N�g�͐������T�|�[�g����Ă��܂���BATL ���P��X���b�h COM �I�u�W�F�N�g�̍쐬���T�|�[�g���邱�ƁA����т��̒P��X���b�h COM �I�u�W�F�N�g�̎����̎g�p�����‚��邱�Ƃ���������ɂ́A_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA ���`���Ă��������B���g�p�� rgs �t�@�C���̃X���b�h ���f���� 'Free' �ɐݒ肳��Ă���ADCOM Windows CE �ȊO�̃v���b�g�t�H�[���ŃT�|�[�g�����B��̃X���b�h ���f���Ɛݒ肳��Ă��܂����B"
14
+ #endif
15
+
16
+ using namespace ATL;
17
+
18
+
19
+ // CBitset
20
+
21
+ class ATL_NO_VTABLE CBitset :
22
+ public CComObjectRootEx<CComSingleThreadModel>,
23
+ public CComCoClass<CBitset, &CLSID_Bitset>,
24
+ public IDispatchImpl<IBitset, &IID_IBitset, &LIBID_transactd, /*wMajor =*/ 1, /*wMinor =*/ 0>
25
+ {
26
+
27
+ public:
28
+ bzs::db::protocol::tdap::bitset m_bitset;
29
+
30
+ CBitset()
31
+ {
32
+ }
33
+
34
+ DECLARE_REGISTRY_RESOURCEID(IDR_BITSET)
35
+
36
+
37
+ BEGIN_COM_MAP(CBitset)
38
+ COM_INTERFACE_ENTRY(IBitset)
39
+ COM_INTERFACE_ENTRY(IDispatch)
40
+ END_COM_MAP()
41
+
42
+
43
+
44
+ DECLARE_PROTECT_FINAL_CONSTRUCT()
45
+
46
+ HRESULT FinalConstruct()
47
+ {
48
+ return S_OK;
49
+ }
50
+
51
+ void FinalRelease()
52
+ {
53
+ }
54
+
55
+ public:
56
+
57
+ STDMETHOD(get_Bit)(short Index, VARIANT_BOOL* retVal);
58
+ STDMETHOD(put_Bit)(short Index, VARIANT_BOOL Value);
59
+ STDMETHOD(Equals)(IBitset* bitset, VARIANT_BOOL* retVal);
60
+ STDMETHOD(Contains)(IBitset* bitset, VARIANT_BOOL Value, VARIANT_BOOL* retVal);
61
+ };
62
+
63
+ OBJECT_ENTRY_AUTO(__uuidof(Bitset), CBitset)
@@ -78,15 +78,17 @@ STDMETHODIMP CDatabase::OpenTable(VARIANT TableID, eOpenMode Mode,
78
78
  *ret = NULL;
79
79
  table* tb = NULL;
80
80
  if (TableID.vt == VT_BSTR)
81
- tb = m_db->openTable(TableID.bstrVal, Mode, (bool)AutoCreate, OwnerName,
82
- Uri);
83
- else if ((TableID.vt == VT_I2) || (TableID.vt == VT_I4))
84
- tb = m_db->openTable(TableID.iVal, Mode, (bool)AutoCreate, OwnerName,
85
- Uri);
81
+ tb = m_db->openTable(TableID.bstrVal, Mode, (bool)AutoCreate, OwnerName, Uri);
82
+ else if (TableID.vt == VT_I2)
83
+ tb = m_db->openTable(TableID.iVal, Mode, (bool)AutoCreate, OwnerName, Uri);
84
+ else if (TableID.vt == VT_I4)
85
+ tb = m_db->openTable((short)TableID.lVal, Mode, (bool)AutoCreate, OwnerName, Uri);
86
+ else
87
+ return Error("Invalid param 1 OpenTable ", IID_IDatabase);
86
88
 
87
89
  if (m_db->stat() != 0)
88
90
  return S_OK;
89
- //return Error("Invalid tableid", IID_IDatabase);
91
+
90
92
 
91
93
  CComObject<CTableTd>* ptb;
92
94
  CComObject<CTableTd>::CreateInstance(&ptb);
@@ -418,8 +420,7 @@ STDMETHODIMP CDatabase::ConvertTable(short TableIndex, VARIANT_BOOL Turbo,
418
420
  }
419
421
 
420
422
  STDMETHODIMP CDatabase::CopyTableData(ITable* Dest, ITable* Src,
421
- VARIANT_BOOL Turbo, int Offset,
422
- short KeyNum, int MaxSkip, short* Value)
423
+ VARIANT_BOOL Turbo, short KeyNum, int MaxSkip, short* Value)
423
424
  {
424
425
  CTableTd* dest = dynamic_cast<CTableTd*>(Dest);
425
426
  CTableTd* src = dynamic_cast<CTableTd*>(Src);
@@ -432,10 +433,20 @@ STDMETHODIMP CDatabase::CopyTableData(ITable* Dest, ITable* Src,
432
433
  return S_OK;
433
434
  }
434
435
 
435
- STDMETHODIMP CDatabase::CreateTable(short FileNum, BSTR Uri,
436
+ STDMETHODIMP CDatabase::CreateTable(VARIANT FileNumOrSql, BSTR Uri,
436
437
  VARIANT_BOOL* Value)
437
438
  {
438
- *Value = m_db->createTable(FileNum, Uri);
439
+ if (FileNumOrSql.vt == VT_BSTR && Uri[0]==0x00)
440
+ {
441
+
442
+ int size = WideCharToMultiByte(CP_UTF8, 0, FileNumOrSql.bstrVal, -1, NULL, 0, NULL, NULL);
443
+ char* p = new char[size + 1];
444
+ WideCharToMultiByte(CP_UTF8, 0, FileNumOrSql.bstrVal, -1, p, size + 1, NULL, NULL);
445
+ *Value = m_db->createTable(p);
446
+ delete [] p;
447
+ }
448
+ else
449
+ *Value = m_db->createTable(FileNumOrSql.iVal, Uri);
439
450
  return S_OK;
440
451
  }
441
452
 
@@ -445,14 +456,6 @@ STDMETHODIMP CDatabase::ExistsTableFile(short TableIndex, BSTR OwnerName)
445
456
  return S_OK;
446
457
  }
447
458
 
448
- STDMETHODIMP CDatabase::GetTableUri(short FileNum, BSTR* Value)
449
- {
450
- wchar_t tmp[MAX_PATH] = { NULL };
451
- m_db->getTableUri(tmp, FileNum);
452
- *Value = ::SysAllocString(tmp);
453
- return S_OK;
454
- }
455
-
456
459
  STDMETHODIMP CDatabase::get_IsOpened(VARIANT_BOOL* Value)
457
460
  {
458
461
  *Value = m_db->isOpened();
@@ -531,6 +534,42 @@ STDMETHODIMP CDatabase::get_TrxLockWaitTimeoutServer(int* Value)
531
534
  return S_OK;
532
535
  }
533
536
 
537
+ STDMETHODIMP CDatabase::put_AutoSchemaUseNullkey(VARIANT_BOOL Value)
538
+ {
539
+ m_db->setAutoSchemaUseNullkey(Value);
540
+ return S_OK;
541
+ }
542
+
543
+ STDMETHODIMP CDatabase::get_AutoSchemaUseNullkey(VARIANT_BOOL* Value)
544
+ {
545
+ *Value = m_db->autoSchemaUseNullkey();
546
+ return S_OK;
547
+ }
548
+
549
+ STDMETHODIMP CDatabase::put_CompatibleMode(int Value)
550
+ {
551
+ database::setCompatibleMode(Value);
552
+ return S_OK;
553
+ }
554
+
555
+ STDMETHODIMP CDatabase::get_CompatibleMode(int* Value)
556
+ {
557
+ *Value = database::compatibleMode();
558
+ return S_OK;
559
+ }
560
+
561
+ STDMETHODIMP CDatabase::GetSqlStringForCreateTable(BSTR tableName, BSTR* retVal)
562
+ {
563
+ uint_td size = 65000;
564
+ char* tmp = new char[size];
565
+ CComBSTR ret;
566
+
567
+ ret = m_db->getSqlStringForCreateTable(tableName, tmp, &size);
568
+ *retVal = ret.Copy();
569
+ delete [] tmp;
570
+ return S_OK;
571
+ }
572
+
534
573
  void __stdcall onCopyData(database* db, int recordCount, int count,
535
574
  bool& cancel)
536
575
  {
@@ -557,3 +596,5 @@ bool __stdcall onDeleteRecord(database* db, table* tb, bool inkey)
557
596
  cdb->Fire_OnDeleteRecord(dbPtr, tbPtr, &tmp);
558
597
  return (tmp != 0);
559
598
  }
599
+
600
+
@@ -139,11 +139,10 @@ public:
139
139
  STDMETHOD(ConvertTable)(short TableIndex, VARIANT_BOOL Turbo,
140
140
  BSTR OwnerName);
141
141
  STDMETHOD(CopyTableData)(ITable* Dest, ITable* Src, VARIANT_BOOL Turbo,
142
- int Offset, short KeyNum, int MaxSkip,
142
+ short KeyNum, int MaxSkip,
143
143
  short* Value);
144
- STDMETHOD(CreateTable)(short FileNum, BSTR Uri, VARIANT_BOOL* Value);
144
+ STDMETHOD(CreateTable)(VARIANT FileNumOrSql, BSTR Uri, VARIANT_BOOL* Value);
145
145
  STDMETHOD(ExistsTableFile)(short TableIndex, BSTR OwnerName);
146
- STDMETHOD(GetTableUri)(short FileNum, BSTR* Value);
147
146
  STDMETHOD(get_IsOpened)(VARIANT_BOOL* Value);
148
147
  STDMETHOD(get_TableReadOnly)(VARIANT_BOOL* Value);
149
148
  STDMETHOD(put_TableReadOnly)(VARIANT_BOOL Value);
@@ -157,7 +156,11 @@ public:
157
156
  STDMETHOD(get_MaxTables)(int* Value);
158
157
  STDMETHOD(get_TrxIsolationServer)(eSrvIsorationType* Value);
159
158
  STDMETHOD(get_TrxLockWaitTimeoutServer)(int* Value);
160
-
159
+ STDMETHOD(put_AutoSchemaUseNullkey)(VARIANT_BOOL Value);
160
+ STDMETHOD(get_AutoSchemaUseNullkey)(VARIANT_BOOL* Value);
161
+ STDMETHOD(put_CompatibleMode)(int Value);
162
+ STDMETHOD(get_CompatibleMode)(int* Value);
163
+ STDMETHOD(GetSqlStringForCreateTable)(BSTR tableName, BSTR* retValue);
161
164
  };
162
165
 
163
166
  OBJECT_ENTRY_AUTO(__uuidof(Database), CDatabase)
@@ -175,12 +175,6 @@ STDMETHODIMP CDbDef::FindKeynumByFieldNum(short TableIndex, short Index,
175
175
  return S_OK;
176
176
  }
177
177
 
178
- STDMETHODIMP CDbDef::GetRecordLen(short TableIndex, unsigned short* Value)
179
- {
180
- *Value = m_dbDef->getRecordLen(TableIndex);
181
- return S_OK;
182
- }
183
-
184
178
  STDMETHODIMP CDbDef::get_OpenMode(eOpenMode* Value)
185
179
  {
186
180
  *Value = (eOpenMode)m_dbDef->openMode();
@@ -254,3 +248,9 @@ STDMETHODIMP CDbDef::ValidateTableDef(short TableIndex, short* Value)
254
248
  *Value = m_dbDef->validateTableDef(TableIndex);
255
249
  return S_OK;
256
250
  }
251
+
252
+ STDMETHODIMP CDbDef::SynchronizeSeverSchema(short TableIndex)
253
+ {
254
+ m_dbDef->synchronizeSeverSchema(TableIndex);
255
+ return S_OK;
256
+ }
@@ -66,7 +66,6 @@ public:
66
66
  unsigned int* Value);
67
67
  STDMETHOD(FindKeynumByFieldNum)(short TableIndex, short Index,
68
68
  unsigned short* Value);
69
- STDMETHOD(GetRecordLen)(short TableIndex, unsigned short* Value);
70
69
  STDMETHOD(get_OpenMode)(eOpenMode* Value);
71
70
  STDMETHOD(PopBackup)(short TableIndex);
72
71
  STDMETHOD(PushBackup)(short TableIndex);
@@ -78,4 +77,6 @@ public:
78
77
  STDMETHOD(TdapErr)(OLE_HANDLE hWnd, BSTR* Value);
79
78
  STDMETHOD(StatMsg)(BSTR* Value);
80
79
  STDMETHOD(ValidateTableDef)(short TableIndex, short* Value);
80
+ STDMETHOD(SynchronizeSeverSchema)(short TableIndex);
81
+
81
82
  };
@@ -18,6 +18,7 @@
18
18
  =================================================================*/
19
19
  #include "stdafx.h"
20
20
  #include "Field.h"
21
+ #include "Bitset.h"
21
22
 
22
23
  STDMETHODIMP CField::get_Text(BSTR* Value)
23
24
  {
@@ -85,3 +86,114 @@ STDMETHODIMP CField::put_Vdbl(double Value)
85
86
  m_fd.operator=(Value);
86
87
  return S_OK;
87
88
  }
89
+
90
+ STDMETHODIMP CField::IsNull(VARIANT_BOOL* Value)
91
+ {
92
+ *Value = m_fd.isNull();
93
+ return S_OK;
94
+ }
95
+
96
+ STDMETHODIMP CField::SetNull(VARIANT_BOOL Value)
97
+ {
98
+ m_fd.setNull(Value != 0);
99
+ return S_OK;
100
+ }
101
+
102
+ STDMETHODIMP CField::SetValue(VARIANT Value)
103
+ {
104
+ if (Value.vt == VT_BSTR)
105
+ m_fd = Value.bstrVal;
106
+ else if (Value.vt == VT_R4)
107
+ m_fd = Value.fltVal;
108
+ else if (Value.vt == VT_R8)
109
+ m_fd = Value.dblVal;
110
+ else if (Value.vt == VT_I2)
111
+ m_fd = Value.iVal;
112
+ else if (Value.vt == VT_I4 || Value.vt == VT_INT)
113
+ m_fd = Value.lVal;
114
+ else if (Value.vt == VT_I8)
115
+ m_fd = Value.llVal;
116
+ else if(Value.vt == VT_NULL)
117
+ m_fd = (wchar_t*)NULL;
118
+ else if ((Value.vt == VT_DISPATCH) && Value.pdispVal)
119
+ {
120
+ CBitset* b = dynamic_cast<CBitset*>(Value.pdispVal);
121
+ if (b)
122
+ m_fd = b->m_bitset.internalValue();
123
+ else
124
+ return Error("Field SetValue param", IID_IField);
125
+ }
126
+ else
127
+ {
128
+ VariantChangeType( &Value, &Value, 0, VT_BSTR );
129
+ m_fd = Value.bstrVal;
130
+ }
131
+ return S_OK;
132
+ }
133
+
134
+ STDMETHODIMP CField::I(int* Value)
135
+ {
136
+ *Value = m_fd.i();
137
+ return S_OK;
138
+ }
139
+
140
+ STDMETHODIMP CField::I64(__int64* Value)
141
+ {
142
+ *Value = m_fd.i64();
143
+ return S_OK;
144
+ }
145
+
146
+ STDMETHODIMP CField::D(double* Value)
147
+ {
148
+ *Value = m_fd.d();
149
+ return S_OK;
150
+ }
151
+
152
+ STDMETHODIMP CField::Bin(BSTR* Value)
153
+ {
154
+ uint_td size;
155
+ void* p = m_fd.getFVbin(size);
156
+ *Value = ::SysAllocStringByteLen((char*)p, size);
157
+ return S_OK;
158
+ }
159
+
160
+ STDMETHODIMP CField::SetBin(BSTR Value)
161
+ {
162
+ int len = ::SysStringByteLen(Value);
163
+ m_fd.setBin(Value, len);
164
+ return S_OK;
165
+ }
166
+
167
+ STDMETHODIMP CField::Str(BSTR* Value)
168
+ {
169
+ *Value = ::SysAllocString(m_fd.getFVstr());
170
+ return S_OK;
171
+ }
172
+
173
+ STDMETHODIMP CField::get_Type(short* Value)
174
+ {
175
+ *Value = m_fd.type();
176
+ return S_OK;
177
+ }
178
+
179
+ STDMETHODIMP CField::get_Len(short* Value)
180
+ {
181
+ *Value = m_fd.len();
182
+ return S_OK;
183
+ }
184
+
185
+ STDMETHODIMP CField::GetBits(IBitset** Value)
186
+ {
187
+ CComObject<CBitset>* b;
188
+ CComObject<CBitset>::CreateInstance(&b);
189
+ if (!b)
190
+ return Error("CreateInstance Bitset", IID_ITable);
191
+ b->m_bitset = bzs::db::protocol::tdap::bitset(m_fd.i64());
192
+ CBitset* bi;
193
+ b->QueryInterface(IID_IBitset, (void**)&bi);
194
+ _ASSERTE(bi);
195
+ *Value = bi;
196
+ return S_OK;
197
+ }
198
+
199
+