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
@@ -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
+