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
|
@@ -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());
|