transactd 2.4.5 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CMakeLists.txt +1 -1
- data/README-JA.md +52 -529
- data/README.md +52 -523
- data/bin/common/tdclc_32_3_0.dll +0 -0
- data/bin/common/tdclc_64_3_0.dll +0 -0
- data/build/common/system.cmake +2 -1
- data/build/common/transactd_cl_common.cmake +3 -6
- data/build/swig/ruby/ruby.swg +85 -28
- data/build/swig/ruby/tdclrb_wrap.cpp +3195 -1578
- data/build/swig/tdcl.i +161 -5
- data/build/tdclc/CMakeLists.txt +1 -0
- data/build/tdclc/tdclc.cbproj +7 -1
- data/build/tdclc/tdclc.rc +4 -4
- data/build/tdclcpp/tdclcpp.rc +4 -4
- data/build/tdclcpp/tdclcpp_bc.cbproj +2 -5
- data/build/tdclrb/tdclrb.rc +4 -4
- data/source/bzs/db/blobStructs.h +1 -1
- data/source/bzs/db/engine/mysql/database.cpp +199 -74
- data/source/bzs/db/engine/mysql/database.h +47 -18
- data/source/bzs/db/engine/mysql/dbManager.cpp +1 -0
- data/source/bzs/db/engine/mysql/mysqlInternal.h +32 -8
- data/source/bzs/db/protocol/tdap/btrDate.cpp +110 -75
- data/source/bzs/db/protocol/tdap/btrDate.h +46 -21
- data/source/bzs/db/protocol/tdap/client/activeTable.cpp +18 -18
- data/source/bzs/db/protocol/tdap/client/activeTable.h +25 -25
- data/source/bzs/db/protocol/tdap/client/activeTableImple.h +10 -4
- data/source/bzs/db/protocol/tdap/client/client.cpp +6 -5
- data/source/bzs/db/protocol/tdap/client/client.h +82 -15
- data/source/bzs/db/protocol/tdap/client/database.cpp +531 -142
- data/source/bzs/db/protocol/tdap/client/database.h +19 -6
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +461 -408
- data/source/bzs/db/protocol/tdap/client/dbDef.h +11 -17
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +61 -13
- data/source/bzs/db/protocol/tdap/client/field.cpp +1592 -1398
- data/source/bzs/db/protocol/tdap/client/field.h +110 -121
- data/source/bzs/db/protocol/tdap/client/fields.h +40 -10
- data/source/bzs/db/protocol/tdap/client/filter.h +69 -55
- data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +296 -164
- data/source/bzs/db/protocol/tdap/client/groupQuery.h +77 -25
- data/source/bzs/db/protocol/tdap/client/memRecord.cpp +31 -13
- data/source/bzs/db/protocol/tdap/client/memRecord.h +31 -21
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +1 -1
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +4 -1
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +69 -24
- data/source/bzs/db/protocol/tdap/client/nsTable.h +3 -1
- data/source/bzs/db/protocol/tdap/client/recordset.cpp +1 -0
- data/source/bzs/db/protocol/tdap/client/recordsetImple.h +46 -27
- data/source/bzs/db/protocol/tdap/client/request.h +2 -1
- data/source/bzs/db/protocol/tdap/client/serializer.cpp +44 -9
- data/source/bzs/db/protocol/tdap/client/serializer.h +1 -1
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +182 -76
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +23 -12
- data/source/bzs/db/protocol/tdap/client/stringConverter.h +8 -10
- data/source/bzs/db/protocol/tdap/client/table.cpp +172 -93
- data/source/bzs/db/protocol/tdap/client/table.h +112 -37
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +17 -0
- data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +0 -1
- data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +0 -2
- data/source/bzs/db/protocol/tdap/client/trdormapi.h +1 -1
- data/source/bzs/db/protocol/tdap/fieldComp.h +698 -14
- data/source/bzs/db/protocol/tdap/myDateTime.cpp +723 -307
- data/source/bzs/db/protocol/tdap/myDateTime.h +294 -0
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +164 -54
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +6 -3
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +133 -550
- data/source/bzs/db/protocol/tdap/mysql/request.h +6 -5
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +217 -82
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +1 -1
- data/source/bzs/db/protocol/tdap/tdapRequest.h +4 -9
- data/source/bzs/db/protocol/tdap/tdapSchema.cpp +808 -17
- data/source/bzs/db/protocol/tdap/tdapSchema.h +656 -164
- data/source/bzs/db/protocol/tdap/tdapcapi.h +130 -28
- data/source/bzs/db/protocol/tdap/uri.h +40 -32
- data/source/bzs/db/transactd/connManager.cpp +1 -1
- data/source/bzs/db/transactd/transactd.cpp +7 -0
- data/source/bzs/env/compiler.h +107 -94
- data/source/bzs/env/crosscompile.cpp +24 -12
- data/source/bzs/env/crosscompile.h +75 -6
- data/source/bzs/env/mbcswchrLinux.cpp +2 -2
- data/source/bzs/env/tcharMinGW.h +4 -0
- data/source/bzs/example/changeSchema.cpp +22 -17
- data/source/bzs/example/queryData.cpp +4 -0
- data/source/bzs/netsvc/client/iconnection.h +3 -1
- data/source/bzs/netsvc/client/tcpClient.h +10 -3
- data/source/bzs/rtl/stringBuffers.cpp +7 -0
- data/source/bzs/test/tdclatl/bench_query_atl.js +6 -0
- data/source/bzs/test/tdclatl/bench_tdclatl.js +8 -1
- data/source/bzs/test/tdclatl/test_query_atl.js +22 -2
- data/source/bzs/test/tdclatl/test_v3.js +1017 -0
- data/source/bzs/test/tdclphp/transactd_Test.php +55 -21
- data/source/bzs/test/tdclphp/transactd_datetime_Test.php +0 -5
- data/source/bzs/test/tdclphp/transactd_pool_Test.php +2 -0
- data/source/bzs/test/tdclphp/transactd_v3_Test.php +743 -0
- data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +0 -5
- data/source/bzs/test/tdclrb/transactd_pool_spec.rb +2 -0
- data/source/bzs/test/tdclrb/transactd_spec.rb +39 -16
- data/source/bzs/test/tdclrb/transactd_v3_spec.rb +748 -0
- data/source/bzs/test/transactdBench/transactdBench.cpp +55 -58
- data/source/bzs/test/transactdBench/transactdBench2.cpp +1 -3
- data/source/bzs/test/trdclengn/testField.h +3305 -0
- data/source/bzs/test/trdclengn/test_tdclcpp_v3.cpp +1050 -0
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +112 -190
- data/source/bzs/test/trdclengn/testbase.h +137 -0
- data/source/global/ormsrcgen/srcgen.cpp +23 -12
- data/source/global/ormsrcgen/template/ormDataClass_template.h +2 -0
- data/source/global/querystmts/querystmts.cpp +2 -3
- data/source/global/tdclatl/Bitset.cpp +38 -0
- data/source/global/tdclatl/Bitset.h +63 -0
- data/source/global/tdclatl/Database.cpp +59 -18
- data/source/global/tdclatl/Database.h +7 -4
- data/source/global/tdclatl/DbDef.cpp +6 -6
- data/source/global/tdclatl/DbDef.h +2 -1
- data/source/global/tdclatl/Field.cpp +112 -0
- data/source/global/tdclatl/Field.h +19 -5
- data/source/global/tdclatl/FieldDef.cpp +137 -16
- data/source/global/tdclatl/FieldDef.h +18 -2
- data/source/global/tdclatl/FieldDefs.cpp +54 -1
- data/source/global/tdclatl/FieldDefs.h +3 -0
- data/source/global/tdclatl/GroupQuery.cpp +8 -8
- data/source/global/tdclatl/QueryBase.cpp +65 -0
- data/source/global/tdclatl/QueryBase.h +10 -0
- data/source/global/tdclatl/Record.cpp +33 -2
- data/source/global/tdclatl/Record.h +3 -1
- data/source/global/tdclatl/RecordsetQuery.cpp +42 -0
- data/source/global/tdclatl/RecordsetQuery.h +8 -0
- data/source/global/tdclatl/Table.cpp +127 -3
- data/source/global/tdclatl/Table.h +10 -1
- data/source/global/tdclatl/TableDef.cpp +41 -8
- data/source/global/tdclatl/TableDef.h +7 -2
- data/source/global/tdclatl/activeTable.cpp +40 -71
- data/source/global/tdclatl/resource.h +0 -0
- data/source/global/tdclatl/tdclatl.idl +222 -28
- data/source/linux/tchar.h +100 -96
- data/transactd.gemspec +2 -2
- metadata +13 -11
- data/BUILD_UNIX-JA.md +0 -161
- data/BUILD_WIN-JA.md +0 -326
- data/README_ORMSRCGEN-JA.md +0 -115
- data/README_ORMSRCGEN.md +0 -118
- data/RELEASE_NOTE-JA.md +0 -356
- data/RELEASE_NOTE.md +0 -360
- data/bin/common/tdclc_32_2_4.dll +0 -0
- data/bin/common/tdclc_64_2_4.dll +0 -0
- 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;
|
@@ -71,8 +71,7 @@ bool readInputValues(const char* filename,
|
|
71
71
|
FILE* fp = fopen(filename, "rt");
|
72
72
|
if (!fp)
|
73
73
|
{
|
74
|
-
|
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
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
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
|
-
|
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
|
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(
|
436
|
+
STDMETHODIMP CDatabase::CreateTable(VARIANT FileNumOrSql, BSTR Uri,
|
436
437
|
VARIANT_BOOL* Value)
|
437
438
|
{
|
438
|
-
|
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
|
-
|
142
|
+
short KeyNum, int MaxSkip,
|
143
143
|
short* Value);
|
144
|
-
STDMETHOD(CreateTable)(
|
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
|
+
|