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
@@ -111,26 +111,26 @@ public:
|
|
111
111
|
|
112
112
|
writableRecord& getWritableRecord();
|
113
113
|
|
114
|
-
|
114
|
+
recordset& join(recordset& rs, queryBase& q, const _TCHAR* name1,
|
115
115
|
const _TCHAR* name2 = NULL, const _TCHAR* name3 = NULL,
|
116
116
|
const _TCHAR* name4 = NULL, const _TCHAR* name5 = NULL,
|
117
117
|
const _TCHAR* name6 = NULL, const _TCHAR* name7 = NULL,
|
118
118
|
const _TCHAR* name8 = NULL);
|
119
119
|
|
120
|
-
|
120
|
+
recordset&
|
121
121
|
outerJoin(recordset& rs, queryBase& q, const _TCHAR* name1,
|
122
122
|
const _TCHAR* name2 = NULL, const _TCHAR* name3 = NULL,
|
123
123
|
const _TCHAR* name4 = NULL, const _TCHAR* name5 = NULL,
|
124
124
|
const _TCHAR* name6 = NULL, const _TCHAR* name7 = NULL,
|
125
125
|
const _TCHAR* name8 = NULL);
|
126
126
|
|
127
|
-
|
127
|
+
recordset& join(recordset& rs, pq_handle& q, const _TCHAR* name1,
|
128
128
|
const _TCHAR* name2 = NULL, const _TCHAR* name3 = NULL,
|
129
129
|
const _TCHAR* name4 = NULL, const _TCHAR* name5 = NULL,
|
130
130
|
const _TCHAR* name6 = NULL, const _TCHAR* name7 = NULL,
|
131
131
|
const _TCHAR* name8 = NULL);
|
132
132
|
|
133
|
-
|
133
|
+
recordset&
|
134
134
|
outerJoin(recordset& rs, pq_handle& q, const _TCHAR* name1,
|
135
135
|
const _TCHAR* name2 = NULL, const _TCHAR* name3 = NULL,
|
136
136
|
const _TCHAR* name4 = NULL, const _TCHAR* name5 = NULL,
|
@@ -141,42 +141,42 @@ public:
|
|
141
141
|
table_ptr table() const;
|
142
142
|
activeTable& option(int v);
|
143
143
|
pq_handle prepare(queryBase& q, bool serverPrepare = false);
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
144
|
+
recordset& read(recordset& rs, queryBase& q);
|
145
|
+
recordset& read(recordset& rs, queryBase& q, validationFunc func);
|
146
|
+
recordset& read(recordset& rs, pq_handle& q);
|
147
|
+
recordset& read(recordset& rs, pq_handle& q, validationFunc func);
|
148
|
+
recordset& readMore(recordset& rs);
|
149
149
|
/** @cond INTERNAL */
|
150
150
|
template<class T0>
|
151
|
-
|
151
|
+
recordset& read(recordset& rs, pq_handle& q, const T0 v0)
|
152
152
|
{
|
153
153
|
_supplyValue(q, 0, v0);
|
154
154
|
read(rs, q);
|
155
|
-
return
|
155
|
+
return rs;
|
156
156
|
}
|
157
157
|
|
158
158
|
template<class T0, class T1>
|
159
|
-
|
159
|
+
recordset& read(recordset& rs, pq_handle& q, const T0 v0, const T1 v1)
|
160
160
|
{
|
161
161
|
_supplyValue(q, 0, v0);
|
162
162
|
_supplyValue(q, 1, v1);
|
163
163
|
read(rs, q);
|
164
|
-
return
|
164
|
+
return rs;
|
165
165
|
}
|
166
166
|
|
167
167
|
template<class T0, class T1, class T2>
|
168
|
-
|
168
|
+
recordset& read(recordset& rs, pq_handle& q, const T0 v0, const T1 v1,
|
169
169
|
const T2 v2)
|
170
170
|
{
|
171
171
|
_supplyValue(q, 0, v0);
|
172
172
|
_supplyValue(q, 1, v1);
|
173
173
|
_supplyValue(q, 2, v2);
|
174
174
|
read(rs, q);
|
175
|
-
return
|
175
|
+
return rs;
|
176
176
|
}
|
177
177
|
|
178
178
|
template<class T0, class T1, class T2, class T3>
|
179
|
-
|
179
|
+
recordset& read(recordset& rs, pq_handle& q, const T0 v0, const T1 v1,
|
180
180
|
const T2 v2, const T3 v3)
|
181
181
|
{
|
182
182
|
_supplyValue(q, 0, v0);
|
@@ -184,11 +184,11 @@ public:
|
|
184
184
|
_supplyValue(q, 2, v2);
|
185
185
|
_supplyValue(q, 3, v3);
|
186
186
|
read(rs, q);
|
187
|
-
return
|
187
|
+
return rs;
|
188
188
|
}
|
189
189
|
|
190
190
|
template<class T0, class T1, class T2, class T3, class T4>
|
191
|
-
|
191
|
+
recordset& read(recordset& rs, pq_handle& q, const T0 v0, const T1 v1,
|
192
192
|
const T2 v2, const T3 v3, const T4 v4)
|
193
193
|
{
|
194
194
|
_supplyValue(q, 0, v0);
|
@@ -197,11 +197,11 @@ public:
|
|
197
197
|
_supplyValue(q, 3, v3);
|
198
198
|
_supplyValue(q, 4, v4);
|
199
199
|
read(rs, q);
|
200
|
-
return
|
200
|
+
return rs;
|
201
201
|
}
|
202
202
|
|
203
203
|
template<class T0, class T1, class T2, class T3, class T4, class T5>
|
204
|
-
|
204
|
+
recordset& read(recordset& rs, pq_handle& q, const T0 v0, const T1 v1,
|
205
205
|
const T2 v2, const T3 v3, const T4 v4, const T5 v5)
|
206
206
|
{
|
207
207
|
_supplyValue(q, 0, v0);
|
@@ -211,11 +211,11 @@ public:
|
|
211
211
|
_supplyValue(q, 4, v4);
|
212
212
|
_supplyValue(q, 5, v5);
|
213
213
|
read(rs, q);
|
214
|
-
return
|
214
|
+
return rs;
|
215
215
|
}
|
216
216
|
|
217
217
|
template<class T0, class T1, class T2, class T3, class T4, class T5, class T6>
|
218
|
-
|
218
|
+
recordset& read(recordset& rs, pq_handle& q, const T0 v0, const T1 v1,
|
219
219
|
const T2 v2, const T3 v3, const T4 v4, const T5 v5,
|
220
220
|
const T6 v6)
|
221
221
|
{
|
@@ -227,12 +227,12 @@ public:
|
|
227
227
|
_supplyValue(q, 5, v5);
|
228
228
|
_supplyValue(q, 6, v6);
|
229
229
|
read(rs, q);
|
230
|
-
return
|
230
|
+
return rs;
|
231
231
|
}
|
232
232
|
|
233
233
|
template<class T0, class T1, class T2, class T3, class T4, class T5, class T6,
|
234
234
|
class T7>
|
235
|
-
|
235
|
+
recordset& read(recordset& rs, pq_handle& q, const T0 v0, const T1 v1,
|
236
236
|
const T2 v2, const T3 v3, const T4 v4, const T5 v5,
|
237
237
|
const T6 v6, const T7 v7)
|
238
238
|
{
|
@@ -245,7 +245,7 @@ public:
|
|
245
245
|
_supplyValue(q, 6, v6);
|
246
246
|
_supplyValue(q, 7, v7);
|
247
247
|
read(rs, q);
|
248
|
-
return
|
248
|
+
return rs;
|
249
249
|
}
|
250
250
|
/** @endcond */
|
251
251
|
|
@@ -234,7 +234,8 @@ class activeTableImple : public activeObject<map_orm>
|
|
234
234
|
}
|
235
235
|
else if (joinFields[i].type == JOIN_KEYVALUE_TYPE_PTR)
|
236
236
|
{
|
237
|
-
ptr[i] =
|
237
|
+
ptr[i] = (mdl[fieldIndexes[i]].isNull()) ? NULL :
|
238
|
+
(const uchar_td*)mdl[fieldIndexes[i]].ptr();
|
238
239
|
len[i] = joinFields[i].len;
|
239
240
|
}
|
240
241
|
else
|
@@ -242,10 +243,15 @@ class activeTableImple : public activeObject<map_orm>
|
|
242
243
|
// if target field type is different then we need convrt type
|
243
244
|
const fielddef& f = td->fieldDefs[kd->segments[i].fieldNum];
|
244
245
|
field fd(buf_ptr - f.pos, f, fds);
|
245
|
-
fd = mdl[fieldIndexes[i]].c_str();
|
246
|
-
ptr[i] = buf_ptr;
|
247
246
|
len[i] = f.isStringType() ? 0xff : f.len;
|
248
|
-
|
247
|
+
if (mdl[fieldIndexes[i]].isNull())
|
248
|
+
ptr[i] = NULL;
|
249
|
+
else
|
250
|
+
{
|
251
|
+
fd = mdl[fieldIndexes[i]].c_str();// operator=(const _TCHAR* p)
|
252
|
+
ptr[i] = buf_ptr;
|
253
|
+
buf_ptr += f.len;
|
254
|
+
}
|
249
255
|
}
|
250
256
|
}
|
251
257
|
|
@@ -63,6 +63,7 @@ short errorCode(const boost::system::error_code& e)
|
|
63
63
|
case 32: //write:brokn pipe
|
64
64
|
case 111: //connect: Connection refused
|
65
65
|
case 10061:
|
66
|
+
case 10053:
|
66
67
|
ret = ERROR_TD_CONNECTION_FAILURE;
|
67
68
|
break;
|
68
69
|
case 104: //write: Connection reset by peer
|
@@ -95,15 +96,15 @@ int client::getServerCharsetIndex()
|
|
95
96
|
|
96
97
|
request req = m_req;
|
97
98
|
req.paramMask = P_MASK_POSBLK | P_MASK_DATA | P_MASK_DATALEN;
|
98
|
-
trdVersiton
|
99
|
-
memset(&
|
100
|
-
ver
|
99
|
+
trdVersiton vers;
|
100
|
+
memset(&vers, 0, sizeof(trdVersiton));
|
101
|
+
clsrv_ver& ver = vers.desc;
|
101
102
|
ver.clMajor = (ushort_td)atoi(C_INTERFACE_VER_MAJOR);
|
102
103
|
ver.clMinor = (ushort_td)atoi(C_INTERFACE_VER_MINOR);
|
103
104
|
ver.clRelease = (ushort_td)atoi(C_INTERFACE_VER_RELEASE);
|
104
105
|
uint_td len = sizeof(trdVersiton);
|
105
106
|
req.op = TD_GETSERVER_CHARSET;
|
106
|
-
req.data = &
|
107
|
+
req.data = &vers;
|
107
108
|
req.datalen = &len;
|
108
109
|
|
109
110
|
mutex::scoped_lock lck(m_mutex);
|
@@ -117,7 +118,7 @@ int client::getServerCharsetIndex()
|
|
117
118
|
{
|
118
119
|
if (!checkVersion(ver))
|
119
120
|
return -1;
|
120
|
-
c->setCharsetServer(mysql::charsetIndex(
|
121
|
+
c->setCharsetServer(mysql::charsetIndex(vers.cherserServer));
|
121
122
|
return c->charsetServer();
|
122
123
|
}
|
123
124
|
}
|
@@ -82,7 +82,7 @@ class client
|
|
82
82
|
|
83
83
|
std::vector<char> m_sendbuf;
|
84
84
|
|
85
|
-
bool checkVersion(
|
85
|
+
bool checkVersion(clsrv_ver& ver)
|
86
86
|
{
|
87
87
|
if ((ver.srvMajor < 2) || ((ver.srvMajor == 2) && (ver.srvMinor < 3)))
|
88
88
|
return false;
|
@@ -150,13 +150,16 @@ class client
|
|
150
150
|
handshale_t* hst = (handshale_t*)c->read();
|
151
151
|
if (c->error()) return false;
|
152
152
|
bool auth = (hst->size == sizeof(handshale_t));
|
153
|
-
bool min = (hst->size == (sizeof(handshale_t)
|
154
|
-
|
155
|
-
|
153
|
+
bool min = (hst->size == (sizeof(handshale_t) - sizeof(hst->scramble)));
|
154
|
+
memcpy(c->versions(), &hst->ver.desc, sizeof(clsrv_ver));
|
155
|
+
|
156
156
|
if (min || auth)
|
157
157
|
{
|
158
|
-
if (!checkVersion(hst->ver))
|
158
|
+
if (!checkVersion(hst->ver.desc))
|
159
|
+
{
|
160
|
+
m_preResult = SERVER_CLIENT_NOT_COMPATIBLE;
|
159
161
|
return false;
|
162
|
+
}
|
160
163
|
c->setCharsetServer(mysql::charsetIndex(hst->ver.cherserServer));
|
161
164
|
m_req.cid->lock_wait_timeout = hst->lock_wait_timeout;
|
162
165
|
m_req.cid->transaction_isolation = hst->transaction_isolation;
|
@@ -190,7 +193,10 @@ class client
|
|
190
193
|
}
|
191
194
|
|
192
195
|
public:
|
193
|
-
client() : m_cryptPwd(NULL), m_disconnected(
|
196
|
+
client() : m_cryptPwd(NULL), m_disconnected(false), m_connecting(false)
|
197
|
+
{
|
198
|
+
}
|
199
|
+
|
194
200
|
~client()
|
195
201
|
{
|
196
202
|
if (m_cryptPwd)
|
@@ -216,6 +222,23 @@ public:
|
|
216
222
|
|
217
223
|
inline request& req() { return m_req; }
|
218
224
|
|
225
|
+
inline const clsrv_ver* ver()
|
226
|
+
{
|
227
|
+
if (m_req.cid->con)
|
228
|
+
return (clsrv_ver*)m_req.cid->con->versions();
|
229
|
+
return NULL;
|
230
|
+
}
|
231
|
+
inline bool isSupportFunction(short op)
|
232
|
+
{
|
233
|
+
if (op == TD_GET_SCHEMA)
|
234
|
+
{
|
235
|
+
const clsrv_ver* v = ver();
|
236
|
+
if (!v) return false;
|
237
|
+
return (v->srvMajor > 2) || ((v->srvMajor == 2) && (v->srvMinor >= 6));
|
238
|
+
}
|
239
|
+
return false;
|
240
|
+
}
|
241
|
+
|
219
242
|
inline void setParam(ushort_td op, posblk* pbk, void_td* data,
|
220
243
|
uint_td* datalen, void_td* keybuf, keylen_td keylen,
|
221
244
|
char_td keyNum, clientID* cid)
|
@@ -253,6 +276,7 @@ public:
|
|
253
276
|
{
|
254
277
|
if (!m_req.cid->con)
|
255
278
|
{
|
279
|
+
m_preResult = 0;
|
256
280
|
endpoint_t ep;
|
257
281
|
endPoint((const char*)m_req.keybuf, &ep);
|
258
282
|
if (ep.host[0] == 0x00)
|
@@ -264,7 +288,7 @@ public:
|
|
264
288
|
setCon(c);
|
265
289
|
m_connecting = true;
|
266
290
|
}
|
267
|
-
else
|
291
|
+
else if (m_preResult == 0)
|
268
292
|
m_preResult = ERROR_TD_HOSTNAME_NOT_FOUND;
|
269
293
|
}
|
270
294
|
m_disconnected = !m_req.cid->con;
|
@@ -272,19 +296,47 @@ public:
|
|
272
296
|
|
273
297
|
inline void createIndex()
|
274
298
|
{
|
299
|
+
if (!ver())
|
300
|
+
{
|
301
|
+
m_preResult = ERROR_TD_NOT_CONNECTED;
|
302
|
+
return;
|
303
|
+
}
|
275
304
|
m_req.paramMask = P_MASK_NOKEYBUF;
|
276
305
|
int charsetIndexServer = getServerCharsetIndex();
|
277
306
|
unsigned char keynum = m_req.keyNum;
|
278
307
|
bool specifyKeyNum = (keynum >= 0x80);
|
279
308
|
if (keynum >= 0x80)
|
280
309
|
keynum -= 0x80;
|
281
|
-
m_sql = sqlCreateIndex((tabledef*)m_req.data, keynum,
|
282
|
-
specifyKeyNum, charsetIndexServer);
|
310
|
+
m_sql = sqlBuilder::sqlCreateIndex((tabledef*)m_req.data, keynum,
|
311
|
+
specifyKeyNum, charsetIndexServer, ver());
|
283
312
|
m_req.data = (ushort_td*)m_sql.c_str();
|
284
313
|
m_tmplen = (uint_td)(m_sql.size() + 1);
|
285
314
|
m_req.datalen = &m_tmplen;
|
286
315
|
}
|
287
316
|
|
317
|
+
inline void getSqlCreate()
|
318
|
+
{
|
319
|
+
if (!ver())
|
320
|
+
{
|
321
|
+
m_req.result = ERROR_TD_NOT_CONNECTED;
|
322
|
+
return;
|
323
|
+
}
|
324
|
+
_TCHAR tmp[MAX_PATH*2]={0};
|
325
|
+
stripAuth((const char*)m_req.keybuf, tmp, MAX_PATH);
|
326
|
+
std::string name = getTableName(tmp);
|
327
|
+
int charsetIndexServer = getServerCharsetIndex();
|
328
|
+
std::string sql = sqlBuilder::sqlCreateTable(name.c_str(), (tabledef*)m_req.data,
|
329
|
+
charsetIndexServer, ver());
|
330
|
+
uint_td datalen = *m_req.datalen;
|
331
|
+
*m_req.datalen = (uint_td)(sql.size() + 1);
|
332
|
+
if (datalen <= sql.size())
|
333
|
+
{
|
334
|
+
m_req.result = STATUS_BUFFERTOOSMALL;
|
335
|
+
return;
|
336
|
+
}
|
337
|
+
strcpy_s((char*)m_req.data, *m_req.datalen, sql.c_str());
|
338
|
+
}
|
339
|
+
|
288
340
|
inline void create()
|
289
341
|
{
|
290
342
|
m_req.paramMask = P_MASK_ALL;
|
@@ -298,15 +350,27 @@ public:
|
|
298
350
|
m_req.paramMask &= ~P_MASK_POSBLK;
|
299
351
|
std::string name = getTableName(tmp);
|
300
352
|
int charsetIndexServer = getServerCharsetIndex();
|
301
|
-
if ((
|
353
|
+
if (!ver())
|
354
|
+
{
|
355
|
+
m_preResult = ERROR_TD_NOT_CONNECTED;
|
356
|
+
return;
|
357
|
+
}
|
358
|
+
if ((m_req.keyNum == CR_SUBOP_BY_TABLEDEF) ||
|
359
|
+
(m_req.keyNum == CR_SUBOP_BY_TABLEDEF_NOCKECK)) // make by tabledef
|
302
360
|
{
|
303
|
-
m_sql = sqlCreateTable(name.c_str(), (tabledef*)m_req.data,
|
304
|
-
charsetIndexServer);
|
305
|
-
m_req.keyNum -= 2; // 1= exists check
|
361
|
+
m_sql = sqlBuilder::sqlCreateTable(name.c_str(), (tabledef*)m_req.data,
|
362
|
+
charsetIndexServer, ver());
|
363
|
+
m_req.keyNum -= 2; // -1= exists check 0 = no exists check
|
364
|
+
}
|
365
|
+
else if ((m_req.keyNum == CR_SUBOP_BY_SQL) ||
|
366
|
+
(m_req.keyNum == CR_SUBOP_BY_SQL_NOCKECK)) // make by sql
|
367
|
+
{
|
368
|
+
m_sql = (char*)m_req.data;
|
369
|
+
m_req.keyNum -= 4; // -1= exists check 0 = no exists check
|
306
370
|
}
|
307
371
|
else
|
308
|
-
m_sql = sqlCreateTable(name.c_str(), (fileSpec*)m_req.data,
|
309
|
-
charsetIndexServer);
|
372
|
+
m_sql = sqlBuilder::sqlCreateTable(name.c_str(), (fileSpec*)m_req.data,
|
373
|
+
charsetIndexServer, ver());
|
310
374
|
m_req.data = (ushort_td*)m_sql.c_str();
|
311
375
|
m_tmplen = (uint_td)(m_sql.size() + 1);
|
312
376
|
m_req.datalen = &m_tmplen;
|
@@ -379,7 +443,10 @@ public:
|
|
379
443
|
m_preResult = SERVER_CLIENT_NOT_COMPATIBLE;
|
380
444
|
}
|
381
445
|
else
|
446
|
+
{
|
382
447
|
buildDualChasetKeybuf();
|
448
|
+
m_disconnected = false;
|
449
|
+
}
|
383
450
|
}
|
384
451
|
else
|
385
452
|
m_preResult = errorCode(m_cons->connectError());
|