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