transactd 2.0.1 → 2.1.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/BUILD_UNIX-JA +6 -6
- data/README +16 -16
- data/README-JA +16 -16
- data/bin/common/tdclc_32_2_1.dll +0 -0
- data/bin/common/tdclc_64_2_1.dll +0 -0
- data/build/common/transactd_cl_common.cmake +0 -1
- data/build/common/transactd_common.cmake +28 -38
- data/build/swig/ruby/ruby.swg +36 -30
- data/build/swig/ruby/tdclrb_wrap.cpp +35016 -0
- data/build/swig/tdcl.i +217 -62
- data/build/tdclc/CMakeLists.txt +14 -26
- data/build/tdclc/libtdclcm.map +4 -0
- data/build/tdclc/tdclc.cbproj +1 -1
- data/build/tdclc/tdclc.rc +0 -0
- data/build/tdclcpp/CMakeLists.txt +7 -22
- data/build/tdclcpp/tdclcpp.rc +0 -0
- data/build/tdclcpp/tdclcpp_bc.cbproj +1 -1
- data/build/tdclrb/CMakeLists.txt +7 -49
- data/build/tdclrb/tdclrb.rc +62 -0
- data/source/bzs/db/blobBuffer.h +5 -0
- data/source/bzs/db/blobStructs.h +2 -0
- data/source/bzs/db/engine/mysql/IReadRecords.h +9 -0
- data/source/bzs/db/engine/mysql/database.cpp +391 -169
- data/source/bzs/db/engine/mysql/database.h +178 -40
- data/source/bzs/db/engine/mysql/dbManager.cpp +45 -3
- data/source/bzs/db/engine/mysql/dbManager.h +3 -39
- data/source/bzs/db/engine/mysql/errorMessage.cpp +11 -7
- data/source/bzs/db/engine/mysql/errorMessage.h +1 -1
- data/source/bzs/db/engine/mysql/mydebuglog.cpp +1 -2
- data/source/bzs/db/engine/mysql/mysqlInternal.h +8 -8
- data/source/bzs/db/engine/mysql/mysqlThd.cpp +11 -0
- data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +1 -1
- data/source/bzs/db/protocol/tdap/client/activeTable.cpp +41 -6
- data/source/bzs/db/protocol/tdap/client/activeTable.h +177 -8
- data/source/bzs/db/protocol/tdap/client/activeTableImple.h +141 -62
- data/source/bzs/db/protocol/tdap/client/client.cpp +39 -35
- data/source/bzs/db/protocol/tdap/client/client.h +52 -25
- data/source/bzs/db/protocol/tdap/client/connectionPool.cpp +17 -0
- data/source/bzs/db/protocol/tdap/client/connectionPool.h +1 -0
- data/source/bzs/db/protocol/tdap/client/database.cpp +5 -1
- data/source/bzs/db/protocol/tdap/client/database.h +1 -1
- data/source/bzs/db/protocol/tdap/client/databaseFactory.cpp +49 -12
- data/source/bzs/db/protocol/tdap/client/databaseManager.h +42 -5
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +4 -2
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +71 -41
- data/source/bzs/db/protocol/tdap/client/errorMessage_ja.cpp +49 -49
- data/source/bzs/db/protocol/tdap/client/field.cpp +22 -13
- data/source/bzs/db/protocol/tdap/client/field.h +7 -3
- data/source/bzs/db/protocol/tdap/client/fieldDDF.cpp +1 -1
- data/source/bzs/db/protocol/tdap/client/fieldNameAlias.cpp +0 -1
- data/source/bzs/db/protocol/tdap/client/fieldNameAlias.h +1 -0
- data/source/bzs/db/protocol/tdap/client/fields.h +111 -24
- data/source/bzs/db/protocol/tdap/client/fileDDF.cpp +1 -1
- data/source/bzs/db/protocol/tdap/client/filter.h +687 -310
- data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +12 -4
- data/source/bzs/db/protocol/tdap/client/indexDDF.cpp +1 -1
- data/source/bzs/db/protocol/tdap/client/memRecord.cpp +190 -32
- data/source/bzs/db/protocol/tdap/client/memRecord.h +64 -22
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +4 -4
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +4 -2
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +6 -3
- data/source/bzs/db/protocol/tdap/client/nsTable.h +1 -1
- data/source/bzs/db/protocol/tdap/client/pooledDatabaseManager.h +19 -8
- data/source/bzs/db/protocol/tdap/client/recordsetImple.h +194 -87
- data/source/bzs/db/protocol/tdap/client/request.h +84 -26
- data/source/bzs/db/protocol/tdap/client/stringConverter.h +22 -12
- data/source/bzs/db/protocol/tdap/client/table.cpp +494 -286
- data/source/bzs/db/protocol/tdap/client/table.h +48 -5
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +133 -87
- data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +22 -22
- data/source/bzs/db/protocol/tdap/client/trdormapi.h +43 -18
- data/source/bzs/db/protocol/tdap/client/trnsctcl.def +3 -3
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +1 -0
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +268 -74
- data/source/bzs/db/protocol/tdap/mysql/request.h +4 -4
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +179 -43
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +4 -4
- data/source/bzs/db/protocol/tdap/tdapRequest.h +15 -14
- data/source/bzs/db/protocol/tdap/tdapSchema.h +125 -90
- data/source/bzs/db/protocol/tdap/tdapcapi.h +46 -5
- data/source/bzs/db/transactd/appModule.h +1 -1
- data/source/bzs/db/transactd/connManager.cpp +2 -0
- data/source/bzs/db/transactd/transactd.cpp +1 -0
- data/source/bzs/env/compiler.h +10 -0
- data/source/bzs/env/mbcswchrLinux.cpp +42 -6
- data/source/bzs/env/mbcswchrLinux.h +40 -12
- data/source/bzs/example/queryData.cpp +33 -4
- data/source/bzs/netsvc/client/iconnection.h +107 -0
- data/source/bzs/netsvc/client/tcpClient.cpp +15 -1
- data/source/bzs/netsvc/client/tcpClient.h +96 -87
- data/source/bzs/netsvc/server/serverCpt.cpp +5 -6
- data/source/bzs/rtl/benchmark.cpp +2 -2
- data/source/bzs/rtl/stringBuffers.cpp +3 -3
- data/source/bzs/rtl/stringBuffers.h +2 -2
- data/source/bzs/test/tdclatl/bench_query_atl.js +92 -99
- data/source/bzs/test/tdclatl/test_query_atl.js +224 -115
- data/source/bzs/test/tdclphp/bench.php +126 -101
- data/source/bzs/test/tdclphp/transactd_Test.php +1122 -158
- data/source/bzs/test/tdclrb/bench_tdclcpp.rb +12 -14
- data/source/bzs/test/tdclrb/transactd_spec.rb +1127 -142
- data/source/bzs/test/transactdBench/query_bench.cpp +32 -15
- data/source/bzs/test/transactdBench/scaling_bench.cpp +32 -7
- data/source/bzs/test/transactdBench/transactdBench.cpp +1 -1
- data/source/bzs/test/transactdBench/workerBase.h +46 -0
- data/source/bzs/test/transactdBench/workerMySQLImple.h +15 -7
- data/source/bzs/test/transactdBench/workerTransactdImple.h +10 -18
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +1487 -174
- data/source/global/ormsrcgen/main.cpp +2 -0
- data/source/global/tdclatl/Database.cpp +2 -2
- data/source/global/tdclatl/Database.h +1 -1
- data/source/global/tdclatl/FieldDefs.cpp +0 -3
- data/source/global/tdclatl/PooledDbManager.cpp +2 -2
- data/source/global/tdclatl/PooledDbManager.h +1 -1
- data/source/global/tdclatl/PreparedQuery.cpp +53 -0
- data/source/global/tdclatl/PreparedQuery.h +61 -0
- data/source/global/tdclatl/QueryBase.cpp +2 -1
- data/source/global/tdclatl/QueryBase.h +1 -1
- data/source/global/tdclatl/Record.cpp +3 -15
- data/source/global/tdclatl/Recordset.cpp +15 -10
- data/source/global/tdclatl/Recordset.h +3 -0
- data/source/global/tdclatl/Table.cpp +42 -7
- data/source/global/tdclatl/Table.h +3 -1
- data/source/global/tdclatl/activeTable.cpp +264 -76
- data/source/global/tdclatl/activeTable.h +12 -3
- data/source/global/tdclatl/tdclatl.idl +92 -10
- data/source/linux/charsetConvert.h +7 -7
- data/transactd.gemspec +14 -27
- metadata +18 -27
- data/bin/common/tdclc_32_2_0.dll +0 -0
- data/bin/common/tdclc_64_2_0.dll +0 -0
- data/build/swig/php/generate.cmake.in +0 -56
- data/build/swig/php/generate.cmd.in +0 -47
- data/build/swig/php/php.swg +0 -197
- data/build/swig/php/transactd.no_yield.php +0 -4494
- data/build/swig/php/transactd.no_yield.php.git.patch +0 -685
- data/build/swig/php/transactd.no_yield.php.patch +0 -685
- data/build/swig/php/transactd.yield.php +0 -4461
- data/build/swig/php/transactd.yield.php.git.patch +0 -652
- data/build/swig/php/transactd.yield.php.patch +0 -652
- data/build/swig/ruby/generate.cmake.in +0 -35
- data/build/swig/ruby/generate.cmd.in +0 -19
- data/build/tdclc/BUILDNUMBER.txt +0 -1
- data/build/tdclcpp/BUILDNUMBER.txt +0 -1
- data/build/tdclrb/BUILDNUMBER.txt +0 -1
- data/build/tdclrb/GEM_RELEASE_VERSION +0 -1
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
19
19
|
02111-1307, USA.
|
|
20
20
|
=================================================================*/
|
|
21
|
-
|
|
21
|
+
#include <my_config.h>
|
|
22
22
|
#include <bzs/netsvc/server/IAppModule.h>
|
|
23
23
|
#include <bzs/db/protocol/ICommandExecuter.h>
|
|
24
24
|
|
|
@@ -98,6 +98,7 @@ void connManager::getDatabaseList(const module* mod) const
|
|
|
98
98
|
const connManager::records& connManager::getRecords(unsigned __int64 conid,
|
|
99
99
|
int dbid) const
|
|
100
100
|
{
|
|
101
|
+
//Lock module count
|
|
101
102
|
boost::mutex::scoped_lock lck(modulesMutex);
|
|
102
103
|
|
|
103
104
|
if (conid == 0)
|
|
@@ -107,6 +108,7 @@ const connManager::records& connManager::getRecords(unsigned __int64 conid,
|
|
|
107
108
|
const module* mod = getMod(conid);
|
|
108
109
|
if (mod)
|
|
109
110
|
{
|
|
111
|
+
//Lock module execute
|
|
110
112
|
boost::try_mutex::scoped_try_lock m(mod->mutex(),
|
|
111
113
|
boost::try_to_lock_t());
|
|
112
114
|
if (m.owns_lock())
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
17
17
|
02111-1307, USA.
|
|
18
18
|
=================================================================*/
|
|
19
|
+
#include <my_config.h>
|
|
19
20
|
#include <bzs/netsvc/server/serverCpt.h>
|
|
20
21
|
#include <bzs/netsvc/server/serverTpool.h>
|
|
21
22
|
#include <bzs/rtl/exception.h>
|
data/source/bzs/env/compiler.h
CHANGED
|
@@ -132,6 +132,16 @@
|
|
|
132
132
|
#endif
|
|
133
133
|
#endif
|
|
134
134
|
|
|
135
|
+
//memory leak detector
|
|
136
|
+
#ifdef _MSC_VER
|
|
137
|
+
#ifdef _DEBUG
|
|
138
|
+
#define _CRTDBG_MAP_ALLOC
|
|
139
|
+
#include <stdlib.h>
|
|
140
|
+
#include <crtdbg.h>
|
|
141
|
+
#endif // _DEBUG
|
|
142
|
+
#endif // _MSC_VER
|
|
143
|
+
|
|
144
|
+
|
|
135
145
|
// compiler name
|
|
136
146
|
#if (_MSC_VER == 1600)
|
|
137
147
|
#define COMPILER_VERSTR "vc100"
|
|
@@ -19,17 +19,53 @@
|
|
|
19
19
|
|
|
20
20
|
#include "mbcswchrLinux.h"
|
|
21
21
|
#include <stdio.h>
|
|
22
|
+
#include <pthread.h>
|
|
23
|
+
#include <bzs/env/crosscompile.h>
|
|
24
|
+
#include <assert.h>
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
#define CVT_COUNT 6
|
|
22
28
|
|
|
23
29
|
namespace bzs
|
|
24
30
|
{
|
|
25
31
|
namespace env
|
|
26
32
|
{
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
|
|
34
|
+
tls_key g_tls1=0;
|
|
35
|
+
|
|
36
|
+
void cleanupTls(void* p)
|
|
37
|
+
{
|
|
38
|
+
delete [] ((cvt*)p);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
void initCvtProcess()
|
|
42
|
+
{
|
|
43
|
+
int ret = pthread_key_create(&g_tls1, cleanupTls);
|
|
44
|
+
assert(ret == 0);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
void deinitCvtProcess()
|
|
48
|
+
{
|
|
49
|
+
pthread_key_delete(g_tls1);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
cvt& getCvt(int index)
|
|
53
|
+
{
|
|
54
|
+
cvt* p = (cvt*)pthread_getspecific(g_tls1);
|
|
55
|
+
if (p == NULL)
|
|
56
|
+
{
|
|
57
|
+
p = new cvt[CVT_COUNT];
|
|
58
|
+
p[0].setCharset("UTF-16LE", MBC_CHARSETNAME);
|
|
59
|
+
p[1].setCharset(MBC_CHARSETNAME, "UTF-16LE");
|
|
60
|
+
p[2].setCharset(MBC_CHARSETNAME, UTF8_CHARSETNAME);
|
|
61
|
+
p[3].setCharset(UTF8_CHARSETNAME, MBC_CHARSETNAME);
|
|
62
|
+
p[4].setCharset("UTF-16LE", UTF8_CHARSETNAME);
|
|
63
|
+
p[5].setCharset(UTF8_CHARSETNAME, "UTF-16LE");
|
|
64
|
+
pthread_setspecific(g_tls1, p);
|
|
65
|
+
}
|
|
66
|
+
return p[index];
|
|
67
|
+
}
|
|
68
|
+
|
|
33
69
|
|
|
34
70
|
} // namespace env
|
|
35
71
|
} // namespace bzs
|
|
@@ -32,12 +32,40 @@ namespace bzs
|
|
|
32
32
|
{
|
|
33
33
|
namespace env
|
|
34
34
|
{
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
|
|
36
|
+
void initCvtProcess();
|
|
37
|
+
void deinitCvtProcess();
|
|
38
|
+
cvt& getCvt(int index);
|
|
39
|
+
|
|
40
|
+
inline cvt& mbcscvt()
|
|
41
|
+
{
|
|
42
|
+
return getCvt(0);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
inline cvt& wchrcvt()
|
|
46
|
+
{
|
|
47
|
+
return getCvt(1);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
inline cvt& u8mbcvt()
|
|
51
|
+
{
|
|
52
|
+
return getCvt(2);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
inline cvt& mbu8cvt()
|
|
56
|
+
{
|
|
57
|
+
return getCvt(3);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
inline cvt& u8wccvt()
|
|
61
|
+
{
|
|
62
|
+
return getCvt(4);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
inline cvt& wcu8cvt()
|
|
66
|
+
{
|
|
67
|
+
return getCvt(5);
|
|
68
|
+
}
|
|
41
69
|
|
|
42
70
|
inline int WideCharToMultiByte(unsigned int codepage, unsigned int dwFlags,
|
|
43
71
|
const char16_t* lpWideCharStr, int cchWideChar,
|
|
@@ -46,9 +74,9 @@ inline int WideCharToMultiByte(unsigned int codepage, unsigned int dwFlags,
|
|
|
46
74
|
int* lpUsedDefaultChar)
|
|
47
75
|
{
|
|
48
76
|
if (codepage == CP_UTF8)
|
|
49
|
-
return wcu8cvt.conv(lpWideCharStr, (size_t)(cchWideChar + cchWideChar),
|
|
77
|
+
return wcu8cvt().conv(lpWideCharStr, (size_t)(cchWideChar + cchWideChar),
|
|
50
78
|
lpMultiByteStr, (size_t)cchMultiByte);
|
|
51
|
-
return wchrcvt.conv(lpWideCharStr, (size_t)(cchWideChar + cchWideChar),
|
|
79
|
+
return wchrcvt().conv(lpWideCharStr, (size_t)(cchWideChar + cchWideChar),
|
|
52
80
|
lpMultiByteStr, (size_t)cchMultiByte);
|
|
53
81
|
}
|
|
54
82
|
|
|
@@ -57,20 +85,20 @@ inline int MultiByteToWideChar(unsigned int codepage, unsigned int dwFlags,
|
|
|
57
85
|
char16_t* lpWideCharStr, int cchWideChar)
|
|
58
86
|
{
|
|
59
87
|
if (codepage == CP_UTF8)
|
|
60
|
-
return u8wccvt.conv(lpMultiByteStr, (size_t)cchMultiByte, lpWideCharStr,
|
|
88
|
+
return u8wccvt().conv(lpMultiByteStr, (size_t)cchMultiByte, lpWideCharStr,
|
|
61
89
|
(size_t)(cchWideChar + cchWideChar));
|
|
62
|
-
return mbcscvt.conv(lpMultiByteStr, (size_t)cchMultiByte, lpWideCharStr,
|
|
90
|
+
return mbcscvt().conv(lpMultiByteStr, (size_t)cchMultiByte, lpWideCharStr,
|
|
63
91
|
(size_t)(cchWideChar + cchWideChar));
|
|
64
92
|
}
|
|
65
93
|
|
|
66
94
|
inline int u8tombc(const char* u8, int u8size, char* mbc, int mbcsize)
|
|
67
95
|
{
|
|
68
|
-
return u8mbcvt.conv(u8, (size_t)u8size, mbc, (size_t)mbcsize);
|
|
96
|
+
return u8mbcvt().conv(u8, (size_t)u8size, mbc, (size_t)mbcsize);
|
|
69
97
|
}
|
|
70
98
|
|
|
71
99
|
inline int mbctou8(const char* mbc, int mbcsize, char* u8, int u8size)
|
|
72
100
|
{
|
|
73
|
-
return mbu8cvt.conv(mbc, (size_t)mbcsize, u8, (size_t)u8size);
|
|
101
|
+
return mbu8cvt().conv(mbc, (size_t)mbcsize, u8, (size_t)u8size);
|
|
74
102
|
}
|
|
75
103
|
|
|
76
104
|
} // namespace env
|
|
@@ -31,12 +31,12 @@ using namespace bzs::db::protocol::tdap;
|
|
|
31
31
|
|
|
32
32
|
#define USER_STRING_TYPE ft_myvarchar
|
|
33
33
|
#define GROUP_STRING_TYPE ft_myvarbinary
|
|
34
|
-
|
|
34
|
+
#define BLOB_TYPE ft_myblob
|
|
35
35
|
#else
|
|
36
36
|
|
|
37
37
|
#define USER_STRING_TYPE ft_zstring
|
|
38
38
|
#define GROUP_STRING_TYPE ft_zstring
|
|
39
|
-
|
|
39
|
+
#define BLOB_TYPE ft_blob
|
|
40
40
|
#endif
|
|
41
41
|
|
|
42
42
|
const _TCHAR* name_field_str(_TCHAR* buf)
|
|
@@ -206,9 +206,18 @@ bool createUserExtTable(dbdef* def)
|
|
|
206
206
|
fd = def->insertField(tableid, filedIndex);
|
|
207
207
|
fd->setName(_T("comment"));
|
|
208
208
|
fd->type = USER_STRING_TYPE;
|
|
209
|
-
|
|
210
209
|
fd->setLenByCharnum(60);
|
|
211
210
|
|
|
211
|
+
++filedIndex;
|
|
212
|
+
fd = def->insertField(tableid, filedIndex);
|
|
213
|
+
fd->setName(_T("blob"));
|
|
214
|
+
fd->type = BLOB_TYPE;
|
|
215
|
+
#ifndef USE_PSQL_DATABASE
|
|
216
|
+
fd->len = 10;
|
|
217
|
+
#else
|
|
218
|
+
fd->len = 16000;
|
|
219
|
+
#endif
|
|
220
|
+
|
|
212
221
|
char keyNum = 0;
|
|
213
222
|
keydef* kd = def->insertKey(tableid, keyNum);
|
|
214
223
|
keySegment* seg1 = &kd->segments[0];
|
|
@@ -323,6 +332,8 @@ bool insertData(database_ptr db, int maxId)
|
|
|
323
332
|
tbe->setFV((short)0, i);
|
|
324
333
|
_stprintf_s(tmp, 256, _T("%d comment"), i);
|
|
325
334
|
tbe->setFV(1, tmp);
|
|
335
|
+
_stprintf_s(tmp, 256, _T("%d blob"), i);
|
|
336
|
+
tbe->setFV(2, tmp);
|
|
326
337
|
tbe->insert();
|
|
327
338
|
if (tbe->stat() != 0)
|
|
328
339
|
return showTableError(tbe, _T("extention insert"));
|
|
@@ -335,6 +346,24 @@ bool insertData(database_ptr db, int maxId)
|
|
|
335
346
|
return true;
|
|
336
347
|
}
|
|
337
348
|
|
|
349
|
+
bool checkVersion(database_ptr db)
|
|
350
|
+
{
|
|
351
|
+
dbdef* def = db->dbDef();
|
|
352
|
+
if (def)
|
|
353
|
+
{
|
|
354
|
+
tabledef* td = def->tableDefs(3);
|
|
355
|
+
if (td)
|
|
356
|
+
{
|
|
357
|
+
if (td->fieldCount == 3)
|
|
358
|
+
{
|
|
359
|
+
table_ptr tb = openTable(db, _T("extention"));
|
|
360
|
+
return (tb->recordCount(false) == 20000);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
return false;
|
|
365
|
+
}
|
|
366
|
+
|
|
338
367
|
int prebuiltData(database_ptr db, const connectParams& param, bool foceCreate,
|
|
339
368
|
int maxId)
|
|
340
369
|
{
|
|
@@ -342,7 +371,7 @@ int prebuiltData(database_ptr db, const connectParams& param, bool foceCreate,
|
|
|
342
371
|
{
|
|
343
372
|
if (db->open(param.uri(), TD_OPEN_NORMAL))
|
|
344
373
|
{
|
|
345
|
-
if (foceCreate)
|
|
374
|
+
if (foceCreate || !checkVersion(db))
|
|
346
375
|
dropDatabase(db);
|
|
347
376
|
else
|
|
348
377
|
return 0;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
#ifndef BZS_NETSVC_CLINET_ICONNECTION_H
|
|
2
|
+
#define BZS_NETSVC_CLINET_ICONNECTION_H
|
|
3
|
+
/* =================================================================
|
|
4
|
+
Copyright (C) 2014 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
|
+
#ifdef __BCPLUSPLUS__
|
|
22
|
+
#pragma warn -8012
|
|
23
|
+
#endif
|
|
24
|
+
|
|
25
|
+
#include <boost/asio/ip/tcp.hpp>
|
|
26
|
+
#include <boost/asio/buffer.hpp>
|
|
27
|
+
#include <vector>
|
|
28
|
+
|
|
29
|
+
#ifdef __BCPLUSPLUS__
|
|
30
|
+
#pragma warn +8012
|
|
31
|
+
#endif
|
|
32
|
+
|
|
33
|
+
#ifdef _WIN32
|
|
34
|
+
#define USE_PIPE_CLIENT
|
|
35
|
+
#endif
|
|
36
|
+
|
|
37
|
+
#ifdef USE_PIPE_CLIENT
|
|
38
|
+
#include <boost/asio/windows/stream_handle.hpp>
|
|
39
|
+
using boost::asio::windows::stream_handle;
|
|
40
|
+
typedef stream_handle platform_stream;
|
|
41
|
+
typedef HANDLE platform_descriptor;
|
|
42
|
+
#define PIPE_EOF_ERROR_CODE boost::system::windows_error::broken_pipe
|
|
43
|
+
typedef DWORD thread_id;
|
|
44
|
+
#define threadid GetCurrentThreadId
|
|
45
|
+
#else // NOT USE_PIPE_CLIENT
|
|
46
|
+
typedef pthread_t thread_id;
|
|
47
|
+
#define threadid pthread_self
|
|
48
|
+
#endif // NOT USE_PIPE_CLIENT
|
|
49
|
+
|
|
50
|
+
namespace bzs
|
|
51
|
+
{
|
|
52
|
+
namespace netsvc
|
|
53
|
+
{
|
|
54
|
+
namespace client
|
|
55
|
+
{
|
|
56
|
+
|
|
57
|
+
typedef std::vector<boost::asio::const_buffer> buffers;
|
|
58
|
+
|
|
59
|
+
class connection;
|
|
60
|
+
|
|
61
|
+
class idirectReadHandler
|
|
62
|
+
{
|
|
63
|
+
|
|
64
|
+
public:
|
|
65
|
+
/* Call by connection at first 4byte readed.
|
|
66
|
+
size : The rest of the data size. = TotalSize - 4
|
|
67
|
+
*/
|
|
68
|
+
virtual unsigned int onRead(unsigned int size, connection* c) = 0;
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
/** The connection interface
|
|
72
|
+
*
|
|
73
|
+
*/
|
|
74
|
+
class connection
|
|
75
|
+
{
|
|
76
|
+
public:
|
|
77
|
+
virtual ~connection(){};
|
|
78
|
+
virtual void connect() = 0;
|
|
79
|
+
virtual void addref() = 0;
|
|
80
|
+
virtual void release() = 0;
|
|
81
|
+
virtual int refCount() const = 0;
|
|
82
|
+
virtual bool isConnected() const = 0;
|
|
83
|
+
virtual const boost::asio::ip::tcp::endpoint& endpoint() const = 0;
|
|
84
|
+
virtual thread_id tid() const = 0;
|
|
85
|
+
virtual char* sendBuffer(size_t size) = 0;
|
|
86
|
+
virtual unsigned int sendBufferSize() = 0;
|
|
87
|
+
virtual buffers* optionalBuffers() = 0;
|
|
88
|
+
virtual char* asyncWriteRead(unsigned int writeSize) = 0;
|
|
89
|
+
//virtual unsigned int datalen() const = 0; // additinal info at segment read
|
|
90
|
+
//virtual unsigned short rows() const = 0; // additinal info at segment read
|
|
91
|
+
virtual void setReadBufferSizeIf(size_t size) = 0;
|
|
92
|
+
virtual void setDirectReadHandler(idirectReadHandler* p) = 0;
|
|
93
|
+
virtual unsigned int directRead(void* buf, unsigned int size) = 0;
|
|
94
|
+
virtual void* directReadRemain(unsigned int size) = 0;
|
|
95
|
+
virtual bool queryFunction(unsigned int v) = 0;
|
|
96
|
+
virtual int charsetServer() const = 0;
|
|
97
|
+
virtual void setCharsetServer(int v) = 0;
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
#define CONNECTION_FUNCTION_DIRECT_READ 1
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
} // namespace client
|
|
104
|
+
} // namespace netsvc
|
|
105
|
+
} // namespace bzs
|
|
106
|
+
|
|
107
|
+
#endif // BZS_NETSVC_CLINET_ICONNECTION_H
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
17
17
|
02111-1307, USA.
|
|
18
18
|
================================================================= */
|
|
19
|
-
|
|
20
19
|
#include "tcpClient.h"
|
|
21
20
|
#include <bzs/env/crosscompile.h>
|
|
22
21
|
#if (!defined(_WIN32))
|
|
@@ -26,6 +25,7 @@
|
|
|
26
25
|
#include <boost/property_tree/ini_parser.hpp>
|
|
27
26
|
#endif
|
|
28
27
|
#endif
|
|
28
|
+
|
|
29
29
|
#pragma package(smart_init)
|
|
30
30
|
|
|
31
31
|
using namespace boost;
|
|
@@ -41,6 +41,12 @@ namespace client
|
|
|
41
41
|
|
|
42
42
|
char connections::port[PORTNUMBUF_SIZE] = { "8610" };
|
|
43
43
|
bool connections::m_usePipedLocal = true;
|
|
44
|
+
#ifdef _WIN32
|
|
45
|
+
short connections::timeout = 3000;
|
|
46
|
+
#else
|
|
47
|
+
short connections::timeout = 3;
|
|
48
|
+
#endif
|
|
49
|
+
|
|
44
50
|
|
|
45
51
|
connections::connections(const char* pipeName) : m_pipeName(pipeName)
|
|
46
52
|
{
|
|
@@ -57,6 +63,9 @@ connections::connections(const char* pipeName) : m_pipeName(pipeName)
|
|
|
57
63
|
GetPrivateProfileString("transctd_client", "port", "8610", tmp, 30,
|
|
58
64
|
buf);
|
|
59
65
|
strcpy_s(port, PORTNUMBUF_SIZE, tmp);
|
|
66
|
+
GetPrivateProfileString("transctd_client", "timeout", "3000", tmp, 30,
|
|
67
|
+
buf);
|
|
68
|
+
timeout = atol(tmp);
|
|
60
69
|
}
|
|
61
70
|
#else // NOT _WIN32
|
|
62
71
|
#if (BOOST_VERSION > 104900)
|
|
@@ -77,6 +86,11 @@ connections::connections(const char* pipeName) : m_pipeName(pipeName)
|
|
|
77
86
|
if (p == "")
|
|
78
87
|
p = "8610";
|
|
79
88
|
strcpy_s(port, PORTNUMBUF_SIZE, p.c_str());
|
|
89
|
+
|
|
90
|
+
p = pt.get<std::string>("transctd_client.timeout");
|
|
91
|
+
timeout = atol(p.c_str())/1000;
|
|
92
|
+
if (timeout == 0)
|
|
93
|
+
timeout = 3;
|
|
80
94
|
}
|
|
81
95
|
catch (...)
|
|
82
96
|
{
|
|
@@ -19,45 +19,18 @@
|
|
|
19
19
|
02111-1307, USA.
|
|
20
20
|
================================================================= */
|
|
21
21
|
|
|
22
|
-
#
|
|
23
|
-
#pragma warn -8012
|
|
24
|
-
#endif
|
|
25
|
-
#include <boost/asio/buffer.hpp>
|
|
26
|
-
#include <boost/asio/windows/stream_handle.hpp>
|
|
27
|
-
#include <boost/asio/io_service.hpp>
|
|
28
|
-
#include <boost/asio/windows/basic_handle.hpp>
|
|
29
|
-
#include <boost/asio/ip/tcp.hpp>
|
|
30
|
-
#include <boost/asio/read.hpp>
|
|
22
|
+
#include <bzs/netsvc/client/iconnection.h>
|
|
31
23
|
#include <boost/asio/write.hpp>
|
|
32
|
-
#include <boost/
|
|
33
|
-
#include <boost/asio/placeholders.hpp>
|
|
34
|
-
|
|
24
|
+
#include <boost/asio/read.hpp>
|
|
35
25
|
#include <boost/system/system_error.hpp>
|
|
36
26
|
#include <boost/thread/mutex.hpp>
|
|
37
27
|
#include <stdio.h>
|
|
38
|
-
|
|
39
|
-
#ifdef __BCPLUSPLUS__
|
|
40
|
-
#pragma warn +8012
|
|
41
|
-
#endif
|
|
42
28
|
#include <vector>
|
|
43
|
-
using namespace boost;
|
|
44
|
-
using namespace boost::system;
|
|
45
29
|
|
|
46
|
-
#ifdef _WIN32
|
|
47
|
-
#define USE_PIPE_CLIENT
|
|
48
|
-
#endif
|
|
49
30
|
|
|
50
|
-
|
|
51
|
-
using boost
|
|
52
|
-
|
|
53
|
-
typedef HANDLE platform_descriptor;
|
|
54
|
-
#define PIPE_EOF_ERROR_CODE boost::system::windows_error::broken_pipe
|
|
55
|
-
typedef DWORD thread_id;
|
|
56
|
-
#define threadid GetCurrentThreadId
|
|
57
|
-
#else // NOT USE_PIPE_CLIENT
|
|
58
|
-
typedef pthread_t thread_id;
|
|
59
|
-
#define threadid pthread_self
|
|
60
|
-
#endif // NOT USE_PIPE_CLIENT
|
|
31
|
+
|
|
32
|
+
using namespace boost;
|
|
33
|
+
using namespace boost::system;
|
|
61
34
|
|
|
62
35
|
#define READBUF_SIZE 66000
|
|
63
36
|
#define WRITEBUF_SIZE 66000
|
|
@@ -65,6 +38,9 @@ typedef pthread_t thread_id;
|
|
|
65
38
|
#define PORTNUMBUF_SIZE 10
|
|
66
39
|
#define CLIENT_ERROR_CANT_CREATEPIPE 3106
|
|
67
40
|
#define CLIENT_ERROR_SHAREMEM_DENIED 3104
|
|
41
|
+
#define CLIENT_ERROR_CONNECTION_FAILURE 3106
|
|
42
|
+
#define TIMEOUT_MILLISEC 3000
|
|
43
|
+
|
|
68
44
|
|
|
69
45
|
namespace bzs
|
|
70
46
|
{
|
|
@@ -73,10 +49,6 @@ namespace netsvc
|
|
|
73
49
|
namespace client
|
|
74
50
|
{
|
|
75
51
|
|
|
76
|
-
typedef std::vector<boost::asio::const_buffer> buffers;
|
|
77
|
-
|
|
78
|
-
class connection;
|
|
79
|
-
|
|
80
52
|
class connections
|
|
81
53
|
{
|
|
82
54
|
std::vector<connection*> m_conns;
|
|
@@ -106,33 +78,11 @@ public:
|
|
|
106
78
|
bool disconnect(connection* c);
|
|
107
79
|
|
|
108
80
|
static char port[PORTNUMBUF_SIZE];
|
|
81
|
+
static short timeout;
|
|
109
82
|
|
|
110
83
|
int connectionCount();
|
|
111
84
|
};
|
|
112
85
|
|
|
113
|
-
/** The connection interface
|
|
114
|
-
*
|
|
115
|
-
*/
|
|
116
|
-
class connection
|
|
117
|
-
{
|
|
118
|
-
public:
|
|
119
|
-
virtual ~connection(){};
|
|
120
|
-
virtual void connect() = 0;
|
|
121
|
-
virtual void addref() = 0;
|
|
122
|
-
virtual void release() = 0;
|
|
123
|
-
virtual int refCount() const = 0;
|
|
124
|
-
virtual bool isConnected() const = 0;
|
|
125
|
-
virtual const asio::ip::tcp::endpoint& endpoint() const = 0;
|
|
126
|
-
virtual thread_id tid() const = 0;
|
|
127
|
-
virtual char* sendBuffer(size_t size) = 0;
|
|
128
|
-
virtual unsigned int sendBufferSize() = 0;
|
|
129
|
-
virtual buffers* optionalBuffers() = 0;
|
|
130
|
-
virtual char* asyncWriteRead(unsigned int writeSize) = 0;
|
|
131
|
-
virtual unsigned int datalen() const = 0; // additinal info at segment read
|
|
132
|
-
virtual unsigned short rows() const = 0; // additinal info at segment read
|
|
133
|
-
virtual void setReadBufferSizeIf(size_t size) = 0;
|
|
134
|
-
};
|
|
135
|
-
|
|
136
86
|
/** Implementation of Part of the connection interface
|
|
137
87
|
*/
|
|
138
88
|
class connectionBase : public connection
|
|
@@ -142,16 +92,16 @@ protected:
|
|
|
142
92
|
|
|
143
93
|
asio::io_service m_ios;
|
|
144
94
|
asio::ip::tcp::endpoint m_ep;
|
|
145
|
-
|
|
146
|
-
int m_refCount;
|
|
147
|
-
thread_id m_tid;
|
|
148
|
-
|
|
149
95
|
std::vector<char> m_readbuf;
|
|
150
96
|
std::vector<char> m_sendbuf;
|
|
151
|
-
|
|
97
|
+
idirectReadHandler* m_reader;
|
|
152
98
|
size_t m_readLen;
|
|
99
|
+
int m_refCount;
|
|
100
|
+
thread_id m_tid;
|
|
101
|
+
int m_charsetServer;
|
|
153
102
|
bool m_connected;
|
|
154
103
|
|
|
104
|
+
|
|
155
105
|
void addref() { ++m_refCount; }
|
|
156
106
|
|
|
157
107
|
void release() { --m_refCount; }
|
|
@@ -164,12 +114,19 @@ protected:
|
|
|
164
114
|
|
|
165
115
|
thread_id tid() const { return m_tid; };
|
|
166
116
|
|
|
117
|
+
int charsetServer() const { return m_charsetServer; };
|
|
118
|
+
|
|
119
|
+
void setCharsetServer(int v) { m_charsetServer = v; }
|
|
120
|
+
|
|
167
121
|
public:
|
|
168
122
|
connectionBase(asio::ip::tcp::endpoint& ep)
|
|
169
|
-
: m_ep(ep), m_refCount(0), m_tid(threadid()),
|
|
123
|
+
: m_ep(ep), m_reader(NULL), m_refCount(0), m_tid(threadid()),
|
|
124
|
+
m_charsetServer(-1), m_connected(false)
|
|
170
125
|
{
|
|
171
126
|
}
|
|
172
127
|
|
|
128
|
+
void setDirectReadHandler(idirectReadHandler* p){ m_reader = p; }
|
|
129
|
+
|
|
173
130
|
char* sendBuffer(size_t size)
|
|
174
131
|
{
|
|
175
132
|
if (size > m_sendbuf.size())
|
|
@@ -191,18 +148,18 @@ public:
|
|
|
191
148
|
template <class T> class connectionImple : public connectionBase
|
|
192
149
|
{
|
|
193
150
|
protected:
|
|
194
|
-
unsigned int m_datalen;
|
|
195
|
-
unsigned short m_rows;
|
|
151
|
+
//unsigned int m_datalen;
|
|
152
|
+
//unsigned short m_rows;
|
|
196
153
|
T m_socket;
|
|
197
154
|
buffers m_optionalBuffes;
|
|
198
155
|
|
|
199
|
-
unsigned int datalen() const { return m_datalen; }
|
|
156
|
+
//unsigned int datalen() const { return m_datalen; }
|
|
200
157
|
|
|
201
|
-
unsigned short rows() const { return m_rows; }
|
|
158
|
+
//unsigned short rows() const { return m_rows; }
|
|
202
159
|
|
|
203
160
|
// server send any segment of lower than 0xFFFF data by asyncWrite
|
|
204
161
|
// last 4byte is 0xFFFFFFFF, that is specify end of data
|
|
205
|
-
void segmentRead()
|
|
162
|
+
/*void segmentRead()
|
|
206
163
|
{
|
|
207
164
|
bool end = false;
|
|
208
165
|
unsigned short n;
|
|
@@ -226,6 +183,31 @@ protected:
|
|
|
226
183
|
boost::asio::transfer_all());
|
|
227
184
|
boost::asio::read(m_socket, boost::asio::buffer(&m_rows, 2),
|
|
228
185
|
boost::asio::transfer_all());
|
|
186
|
+
}*/
|
|
187
|
+
bool queryFunction(unsigned int v)
|
|
188
|
+
{
|
|
189
|
+
if (v == CONNECTION_FUNCTION_DIRECT_READ)
|
|
190
|
+
return true;
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
unsigned int directRead(void* buf, unsigned int size)
|
|
195
|
+
{
|
|
196
|
+
return (unsigned int)boost::asio::read(m_socket,
|
|
197
|
+
boost::asio::buffer(buf, size),
|
|
198
|
+
boost::asio::transfer_all());
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
void* directReadRemain(unsigned int size)
|
|
202
|
+
{
|
|
203
|
+
if (size > m_readbuf.size())
|
|
204
|
+
m_readbuf.resize(size);
|
|
205
|
+
|
|
206
|
+
m_readLen += boost::asio::read(
|
|
207
|
+
m_socket,
|
|
208
|
+
boost::asio::buffer(&m_readbuf[0], size),
|
|
209
|
+
boost::asio::transfer_all());
|
|
210
|
+
return &m_readbuf[0];
|
|
229
211
|
}
|
|
230
212
|
|
|
231
213
|
void read()
|
|
@@ -234,24 +216,40 @@ protected:
|
|
|
234
216
|
throw system_error(asio::error::not_connected);
|
|
235
217
|
boost::system::error_code e;
|
|
236
218
|
m_readLen = 0;
|
|
237
|
-
m_datalen = 0;
|
|
238
|
-
m_rows = 0;
|
|
219
|
+
//m_datalen = 0;
|
|
220
|
+
//m_rows = 0;
|
|
239
221
|
unsigned int n;
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
222
|
+
|
|
223
|
+
//m_readLen += boost::asio::read(m_socket, boost::asio::buffer(&n, 4),
|
|
224
|
+
// boost::asio::transfer_all());
|
|
225
|
+
/*if (n == 0xFFFFFFFF)
|
|
243
226
|
{
|
|
244
227
|
segmentRead();
|
|
245
228
|
m_readLen += boost::asio::read(m_socket, boost::asio::buffer(&n, 4),
|
|
246
229
|
boost::asio::transfer_all());
|
|
230
|
+
}*/
|
|
231
|
+
if (m_reader)
|
|
232
|
+
{
|
|
233
|
+
m_readLen = boost::asio::read(m_socket, boost::asio::buffer(&n, 4),
|
|
234
|
+
boost::asio::transfer_all());
|
|
235
|
+
m_readLen += m_reader->onRead(n - 4, this);
|
|
236
|
+
}else
|
|
237
|
+
{
|
|
238
|
+
m_readLen = boost::asio::read(m_socket,
|
|
239
|
+
boost::asio::buffer(&m_readbuf[0],m_readbuf.size()),
|
|
240
|
+
boost::asio::transfer_at_least(4));
|
|
241
|
+
n = *((unsigned int*)(&m_readbuf[0]));
|
|
247
242
|
}
|
|
248
|
-
if (
|
|
249
|
-
|
|
250
|
-
|
|
243
|
+
if (m_readLen < n)
|
|
244
|
+
{
|
|
245
|
+
if (n > m_readbuf.size())
|
|
246
|
+
m_readbuf.resize(n);
|
|
247
|
+
|
|
251
248
|
m_readLen += boost::asio::read(
|
|
252
249
|
m_socket,
|
|
253
250
|
boost::asio::buffer(&m_readbuf[m_readLen], n - m_readLen),
|
|
254
251
|
boost::asio::transfer_all());
|
|
252
|
+
}
|
|
255
253
|
}
|
|
256
254
|
|
|
257
255
|
void write(unsigned int writeSize)
|
|
@@ -273,15 +271,16 @@ protected:
|
|
|
273
271
|
|
|
274
272
|
public:
|
|
275
273
|
connectionImple(asio::ip::tcp::endpoint& ep)
|
|
276
|
-
: connectionBase(ep)
|
|
274
|
+
: connectionBase(ep)/*, m_datalen(0)*/, m_socket(m_ios)
|
|
277
275
|
{
|
|
278
276
|
}
|
|
279
277
|
|
|
280
278
|
~connectionImple()
|
|
281
279
|
{
|
|
282
|
-
|
|
280
|
+
|
|
283
281
|
try
|
|
284
282
|
{
|
|
283
|
+
m_ios.stop();
|
|
285
284
|
m_socket.close();
|
|
286
285
|
}
|
|
287
286
|
catch (...)
|
|
@@ -299,7 +298,6 @@ public:
|
|
|
299
298
|
buffers* optionalBuffers() { return &m_optionalBuffes; }
|
|
300
299
|
};
|
|
301
300
|
|
|
302
|
-
#define TIMEOUT_SEC 3
|
|
303
301
|
|
|
304
302
|
/** Implementation of The TCP connection.
|
|
305
303
|
*/
|
|
@@ -317,7 +315,7 @@ public:
|
|
|
317
315
|
void setupTimeouts()
|
|
318
316
|
{
|
|
319
317
|
#if defined _WIN32
|
|
320
|
-
int32_t timeout =
|
|
318
|
+
int32_t timeout = connections::timeout;
|
|
321
319
|
setsockopt(m_socket.native(), SOL_SOCKET, SO_RCVTIMEO,
|
|
322
320
|
(const char*)&timeout, sizeof(timeout));
|
|
323
321
|
setsockopt(m_socket.native(), SOL_SOCKET, SO_SNDTIMEO,
|
|
@@ -325,7 +323,7 @@ public:
|
|
|
325
323
|
#else
|
|
326
324
|
struct timeval timeout;
|
|
327
325
|
timeout.tv_usec = 0;
|
|
328
|
-
timeout.tv_sec =
|
|
326
|
+
timeout.tv_sec = connections::timeout;
|
|
329
327
|
setsockopt(m_socket.native(), SOL_SOCKET, SO_RCVTIMEO, &timeout,
|
|
330
328
|
sizeof(timeout));
|
|
331
329
|
setsockopt(m_socket.native(), SOL_SOCKET, SO_SNDTIMEO, &timeout,
|
|
@@ -379,6 +377,13 @@ class pipeConnection : public connectionImple<platform_stream>
|
|
|
379
377
|
HANDLE m_sendEvent;
|
|
380
378
|
HANDLE m_mapFile;
|
|
381
379
|
|
|
380
|
+
bool queryFunction(unsigned int v)
|
|
381
|
+
{
|
|
382
|
+
if (v == CONNECTION_FUNCTION_DIRECT_READ)
|
|
383
|
+
return false;
|
|
384
|
+
return false;
|
|
385
|
+
}
|
|
386
|
+
|
|
382
387
|
char* GetErrorMessage(DWORD ErrorCode)
|
|
383
388
|
{
|
|
384
389
|
LPVOID lpMsgBuf;
|
|
@@ -517,10 +522,14 @@ public:
|
|
|
517
522
|
|
|
518
523
|
char* asyncWriteRead(unsigned int writeSize)
|
|
519
524
|
{
|
|
520
|
-
m_datalen = 0;
|
|
521
|
-
m_rows = 0;
|
|
522
|
-
SetEvent(m_sendEvent);
|
|
523
|
-
|
|
525
|
+
//m_datalen = 0;
|
|
526
|
+
//m_rows = 0;
|
|
527
|
+
BOOL ret = SetEvent(m_sendEvent);
|
|
528
|
+
if (ret == FALSE)
|
|
529
|
+
throwException("SetEvent", CLIENT_ERROR_CONNECTION_FAILURE);
|
|
530
|
+
DWORD r = WaitForSingleObject(m_recvEvent, connections::timeout);
|
|
531
|
+
if (r == WAIT_TIMEOUT)
|
|
532
|
+
throwException("SetEvent", CLIENT_ERROR_CONNECTION_FAILURE);
|
|
524
533
|
return m_readbuf_p;
|
|
525
534
|
}
|
|
526
535
|
|