transactd 3.5.0 → 3.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/common/{tdclc_32_3_5.dll → tdclc_32_3_6.dll} +0 -0
- data/bin/common/tdclc_64_3_6.dll +0 -0
- data/build/swig/ruby/tdclrb_wrap.cpp +12524 -24430
- data/build/swig/tdcl.i +5 -0
- data/build/tdclc/tdclc.cbproj +1 -1
- data/build/tdclc/tdclc.rc +4 -4
- data/build/tdclcpp/tdclcpp.rc +4 -4
- data/build/tdclcpp/tdclcpp_bc.cbproj +1 -1
- data/build/tdclrb/tdclrb.rc +4 -4
- data/source/bzs/db/engine/mysql/database.cpp +210 -184
- data/source/bzs/db/engine/mysql/database.h +276 -105
- data/source/bzs/db/engine/mysql/mysqlInternal.h +37 -0
- data/source/bzs/db/engine/mysql/mysqlProtocol.cpp +1 -0
- data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +4 -4
- data/source/bzs/db/protocol/tdap/client/activeTable.h +1 -1
- data/source/bzs/db/protocol/tdap/client/activeTableImple.h +1 -0
- data/source/bzs/db/protocol/tdap/client/connMgr.cpp +1 -1
- data/source/bzs/db/protocol/tdap/client/database.cpp +7 -4
- data/source/bzs/db/protocol/tdap/client/database.h +6 -1
- data/source/bzs/db/protocol/tdap/client/databaseManager.h +2 -2
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +21 -9
- data/source/bzs/db/protocol/tdap/client/dbDef.h +1 -1
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +10 -2
- data/source/bzs/db/protocol/tdap/client/field.cpp +29 -5
- data/source/bzs/db/protocol/tdap/client/field.h +3 -1
- data/source/bzs/db/protocol/tdap/client/fieldNameAlias.cpp +5 -0
- data/source/bzs/db/protocol/tdap/client/fieldNameAlias.h +1 -0
- data/source/bzs/db/protocol/tdap/client/fields.h +9 -2
- data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +8 -4
- data/source/bzs/db/protocol/tdap/client/memRecord.cpp +18 -5
- data/source/bzs/db/protocol/tdap/client/memRecord.h +2 -2
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +46 -13
- data/source/bzs/db/protocol/tdap/client/nsTable.h +5 -0
- data/source/bzs/db/protocol/tdap/client/recordset.cpp +5 -0
- data/source/bzs/db/protocol/tdap/client/recordset.h +1 -0
- data/source/bzs/db/protocol/tdap/client/recordsetImple.h +6 -2
- data/source/bzs/db/protocol/tdap/client/request.h +46 -38
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +2 -3
- data/source/bzs/db/protocol/tdap/client/stringConverter.h +29 -13
- data/source/bzs/db/protocol/tdap/client/table.cpp +60 -10
- data/source/bzs/db/protocol/tdap/client/table.h +4 -1
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +18 -1
- data/source/bzs/db/protocol/tdap/client/trdormapi.h +10 -4
- data/source/bzs/db/protocol/tdap/fieldComp.h +1 -1
- data/source/bzs/db/protocol/tdap/mysql/characterset.h +1 -0
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +11 -4
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +2 -1
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +52 -94
- data/source/bzs/db/protocol/tdap/mysql/request.h +20 -13
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +92 -60
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +4 -4
- data/source/bzs/db/protocol/tdap/tdapRequest.h +11 -0
- data/source/bzs/db/protocol/tdap/tdapSchema.cpp +83 -34
- data/source/bzs/db/protocol/tdap/tdapSchema.h +5 -1
- data/source/bzs/db/protocol/tdap/tdapcapi.h +7 -3
- data/source/bzs/example/ormap_c.cpp +2 -2
- data/source/bzs/netsvc/server/serverPipe.cpp +35 -1
- data/source/bzs/test/tdclatl/test_v3.js +48 -1
- data/source/bzs/test/tdclphp/bench.php +89 -76
- data/source/bzs/test/tdclphp/transactd_Test.php +691 -687
- data/source/bzs/test/tdclphp/transactd_blob_Test.php +46 -43
- data/source/bzs/test/tdclphp/transactd_datetime_Test.php +46 -43
- data/source/bzs/test/tdclphp/transactd_kanjischema_Test.php +33 -33
- data/source/bzs/test/tdclphp/transactd_pool_Test.php +29 -25
- data/source/bzs/test/tdclphp/transactd_v3_Test.php +653 -183
- data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +40 -4
- data/source/bzs/test/tdclrb/transactd_fetch_spec.rb +785 -0
- data/source/bzs/test/tdclrb/transactd_pool_spec.rb +21 -1
- data/source/bzs/test/tdclrb/transactd_setget_spec.rb +450 -0
- data/source/bzs/test/tdclrb/transactd_spec.rb +14 -2
- data/source/bzs/test/tdclrb/transactd_v3_spec.rb +1192 -11
- data/source/bzs/test/trdclengn/testField.h +522 -1
- data/source/bzs/test/trdclengn/test_tdclcpp_v3.cpp +37 -1
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +62 -4
- data/source/global/tdclatl/RecordsetQuery.cpp +2 -1
- data/source/global/tdclatl/RecordsetQuery.h +1 -1
- data/source/global/tdclatl/Table.cpp +17 -0
- data/source/global/tdclatl/Table.h +3 -1
- data/source/global/tdclatl/tdclatl.idl +7 -2
- data/transactd.gemspec +1 -1
- metadata +7 -5
- data/bin/common/tdclc_64_3_5.dll +0 -0
@@ -64,6 +64,7 @@ namespace client {class table;}
|
|
64
64
|
#define P_MASK_PB_BOOKMARK 512 // posblk bookmark writen
|
65
65
|
#define P_MASK_PB_ERASE_BM 1024 // posblk bookmark erase command
|
66
66
|
#define P_MASK_PB_LOCKED 2048 // posblk row locked
|
67
|
+
#define P_MASK_DB_AINC_VAL 4096 // databuf autoinc value, packed_pos 2, size 2 value
|
67
68
|
|
68
69
|
|
69
70
|
#define P_MASK_ALL \
|
@@ -132,6 +133,16 @@ struct clientID
|
|
132
133
|
ushort_td id;
|
133
134
|
};
|
134
135
|
|
136
|
+
|
137
|
+
struct autoIncPackInfo
|
138
|
+
{
|
139
|
+
unsigned short pos;
|
140
|
+
unsigned short len;
|
141
|
+
__int64 value;
|
142
|
+
|
143
|
+
autoIncPackInfo() : pos(0), len(0), value(0){}
|
144
|
+
};
|
145
|
+
|
135
146
|
#pragma pack(pop)
|
136
147
|
pragma_pop;
|
137
148
|
|
@@ -24,11 +24,32 @@
|
|
24
24
|
#include <bzs/db/protocol/tdap/mysql/characterset.h>
|
25
25
|
#ifdef _WIN32
|
26
26
|
#include <windows.h>
|
27
|
-
|
27
|
+
size_t mbcconv(const char* from, size_t fsize, char* to, size_t tsize, int fromCodePage, int toCodePage)
|
28
|
+
{
|
29
|
+
assert(tsize < 511);
|
30
|
+
size_t size = 0;
|
31
|
+
WCHAR ws[512]={NULL};
|
32
|
+
size = MultiByteToWideChar(fromCodePage, (fromCodePage == CP_UTF8) ? 0 : MB_PRECOMPOSED,
|
33
|
+
from, -1, ws, (int)511);
|
34
|
+
to[tsize - 1] = 0x00;
|
35
|
+
size = WideCharToMultiByte(toCodePage, (toCodePage == CP_UTF8) ? 0 : WC_COMPOSITECHECK,
|
36
|
+
ws, -1, to, (int)tsize, NULL, NULL);
|
37
|
+
if (size == 0)
|
38
|
+
size = tsize - (to[tsize - 1] ? 0 : 1);
|
39
|
+
return size;
|
40
|
+
}
|
41
|
+
#endif //_WIN32
|
28
42
|
|
29
43
|
#ifdef LINUX
|
30
44
|
#include <bzs/env/mbcswchrLinux.h>
|
31
45
|
using namespace bzs::env;
|
46
|
+
inline size_t mbcconv(const char* from, size_t fsize, char* to, size_t tsize, int fromCodePage, int toCodePage)
|
47
|
+
{
|
48
|
+
if (fromCodePage == CP_UTF8)
|
49
|
+
return bzs::env::u8tombc(from, fsize, to, tsize);
|
50
|
+
else
|
51
|
+
return bzs::env::mbctou8(from, fsize, to, tsize);
|
52
|
+
}
|
32
53
|
#endif
|
33
54
|
#pragma package(smart_init)
|
34
55
|
|
@@ -181,39 +202,39 @@ void tabledef::setTableName(const wchar_t* s)
|
|
181
202
|
|
182
203
|
const char* fielddef::name() const
|
183
204
|
{
|
184
|
-
|
205
|
+
/*#ifndef _UNICODE
|
185
206
|
if (m_schemaCodePage != CP_UTF8)
|
186
207
|
{
|
187
208
|
char* p = namebufA();
|
188
|
-
mbctou8(m_name, strlen(m_name), p, MYSQL_FDNAME_SIZE);
|
209
|
+
mbcconv(m_name, strlen(m_name), p, MYSQL_FDNAME_SIZE, m_schemaCodePage, CP_UTF8); //mbctou8(m_name, strlen(m_name), p, MYSQL_FDNAME_SIZE);
|
189
210
|
return p;
|
190
211
|
}
|
191
|
-
#endif
|
212
|
+
#endif*/
|
192
213
|
return m_name;
|
193
214
|
}
|
194
215
|
|
195
216
|
const char* fielddef::name(char* buf) const
|
196
217
|
{
|
197
|
-
|
218
|
+
/*#ifndef _UNICODE
|
198
219
|
if (m_schemaCodePage != CP_UTF8)
|
199
220
|
{
|
200
|
-
mbctou8(m_name, strlen(m_name), buf, MYSQL_FDNAME_SIZE);
|
221
|
+
mbcconv(m_name, strlen(m_name), buf, MYSQL_FDNAME_SIZE, m_schemaCodePage, CP_UTF8); //mbctou8(m_name, strlen(m_name), buf, MYSQL_FDNAME_SIZE);
|
201
222
|
return buf;
|
202
223
|
}
|
203
|
-
#endif
|
224
|
+
#endif*/
|
204
225
|
return m_name;
|
205
226
|
}
|
206
227
|
|
207
228
|
const char* fielddef::chainChar() const
|
208
229
|
{
|
209
|
-
|
230
|
+
/*#ifndef _UNICODE
|
210
231
|
if (m_schemaCodePage != CP_UTF8)
|
211
232
|
{
|
212
233
|
char* p = namebufA();
|
213
|
-
mbctou8(m_chainChar, strlen(m_chainChar), p, 2);
|
234
|
+
mbcconv(m_chainChar, strlen(m_chainChar), p, 2, m_schemaCodePage, CP_UTF8); //mbctou8(m_chainChar, strlen(m_chainChar), p, 2);
|
214
235
|
return p;
|
215
236
|
}
|
216
|
-
#endif
|
237
|
+
#endif*/
|
217
238
|
return m_chainChar;
|
218
239
|
}
|
219
240
|
|
@@ -225,79 +246,80 @@ const char* fielddef::defaultValue_str() const
|
|
225
246
|
|
226
247
|
void fielddef::setName(const char* s)
|
227
248
|
{
|
228
|
-
|
249
|
+
/*#ifndef _UNICODE
|
229
250
|
if (m_schemaCodePage != CP_UTF8)
|
230
|
-
u8tombc(s, strlen(s), m_name, FIELD_NAME_SIZE);
|
251
|
+
mbcconv(s, strlen(s), m_name, FIELD_NAME_SIZE, CP_UTF8, m_schemaCodePage); //u8tombc(s, strlen(s), m_name, FIELD_NAME_SIZE);
|
231
252
|
else
|
232
|
-
#endif
|
253
|
+
#endif*/
|
233
254
|
strncpy_s(m_name, FIELD_NAME_SIZE, s, sizeof(m_name) - 1);
|
234
255
|
}
|
235
256
|
|
236
257
|
void fielddef::setChainChar(const char* s)
|
237
258
|
{
|
238
|
-
|
259
|
+
/*#ifndef _UNICODE
|
239
260
|
if (m_schemaCodePage != CP_UTF8)
|
240
|
-
u8tombc(s, strlen(s), m_chainChar, 2);
|
261
|
+
mbcconv(s, strlen(s), m_chainChar, 2, CP_UTF8, m_schemaCodePage); //u8tombc(s, strlen(s), m_chainChar, 2);
|
241
262
|
else
|
242
|
-
#endif
|
263
|
+
#endif*/
|
243
264
|
strncpy_s(m_chainChar, 2, s, sizeof(m_chainChar) - 1);
|
244
265
|
}
|
245
266
|
|
246
267
|
const char* tabledef::fileName() const
|
247
268
|
{
|
248
|
-
|
269
|
+
/*#ifndef _UNICODE
|
249
270
|
if (schemaCodePage != CP_UTF8)
|
250
271
|
{
|
251
272
|
char* p = namebufA();
|
252
|
-
mbctou8(m_fileName, strlen(m_fileName), p, FILE_NAME_SIZE);
|
273
|
+
mbcconv(m_fileName, strlen(m_fileName), p, FILE_NAME_SIZE, schemaCodePage, CP_UTF8); //mbctou8(m_fileName, strlen(m_fileName), p, FILE_NAME_SIZE);
|
253
274
|
return p;
|
254
275
|
}
|
255
|
-
#endif
|
276
|
+
#endif*/
|
256
277
|
return m_fileName;
|
257
278
|
}
|
258
279
|
|
259
280
|
const char* tabledef::tableName() const
|
260
281
|
{
|
261
|
-
|
282
|
+
/*#ifndef _UNICODE
|
262
283
|
if (schemaCodePage != CP_UTF8)
|
263
284
|
{
|
264
285
|
char* p = namebufA();
|
265
|
-
mbctou8(m_tableName, strlen(m_tableName), p, TABLE_NAME_SIZE);
|
286
|
+
mbcconv(m_tableName, strlen(m_tableName), p, TABLE_NAME_SIZE, schemaCodePage, CP_UTF8); //mbctou8(m_tableName, strlen(m_tableName), p, TABLE_NAME_SIZE);
|
266
287
|
return p;
|
267
288
|
}
|
268
|
-
#endif
|
289
|
+
#endif*/
|
269
290
|
return m_tableName;
|
270
291
|
}
|
271
292
|
|
272
293
|
void tabledef::setFileName(const char* s)
|
273
294
|
{
|
274
|
-
|
295
|
+
/*#ifndef _UNICODE
|
275
296
|
if (schemaCodePage != CP_UTF8)
|
276
|
-
u8tombc(s, strlen(s), m_fileName, FILE_NAME_SIZE);
|
297
|
+
mbcconv(s, strlen(s), m_fileName, FILE_NAME_SIZE, CP_UTF8, schemaCodePage); //u8tombc(s, strlen(s), m_fileName, FILE_NAME_SIZE);
|
277
298
|
else
|
278
|
-
#endif
|
299
|
+
#endif*/
|
279
300
|
setFileNameA(s);
|
280
301
|
}
|
281
302
|
|
282
303
|
void tabledef::setTableName(const char* s)
|
283
304
|
{
|
284
|
-
|
305
|
+
/*#ifndef _UNICODE
|
285
306
|
if (schemaCodePage != CP_UTF8)
|
286
|
-
u8tombc(s, strlen(s), m_tableName, TABLE_NAME_SIZE);
|
307
|
+
mbcconv(s, strlen(s), m_tableName, TABLE_NAME_SIZE, CP_UTF8, schemaCodePage); //u8tombc(s, strlen(s), m_tableName, TABLE_NAME_SIZE);
|
287
308
|
else
|
288
|
-
#endif
|
309
|
+
#endif*/
|
289
310
|
setTableNameA(s);
|
290
311
|
}
|
291
312
|
|
292
313
|
const char* tabledef::toChar(char* buf, const char* s, int size) const
|
293
314
|
{
|
294
|
-
|
315
|
+
/*#ifndef _UNICODE
|
295
316
|
if (schemaCodePage != CP_UTF8)
|
296
317
|
{
|
297
|
-
u8tombc(s, strlen(s), buf, size);
|
318
|
+
//u8tombc(s, strlen(s), buf, size);
|
319
|
+
mbcconv(s, strlen(s), buf, size, CP_UTF8, schemaCodePage);
|
298
320
|
return buf;
|
299
321
|
}
|
300
|
-
#endif
|
322
|
+
#endif*/
|
301
323
|
strncpy_s(buf, size, s, size - 1);
|
302
324
|
return buf;
|
303
325
|
}
|
@@ -651,7 +673,7 @@ bool isCompatibleType(uchar_td l, uchar_td r, ushort_td rlen, uchar_td rchar)
|
|
651
673
|
}
|
652
674
|
|
653
675
|
short fielddef::synchronize(const fielddef* fd)
|
654
|
-
{
|
676
|
+
{ // this is server. fd is current
|
655
677
|
viewNum = fd->viewNum;
|
656
678
|
viewWidth = fd->viewWidth;
|
657
679
|
max = fd->max;
|
@@ -669,15 +691,16 @@ short fielddef::synchronize(const fielddef* fd)
|
|
669
691
|
lookDBNum = fd->lookDBNum;
|
670
692
|
uchar_td nullable = m_options & FIELD_OPTION_NULLABLE;
|
671
693
|
m_options = fd->m_options;
|
694
|
+
m_options &= ~FIELD_OPTION_NULLABLE;
|
672
695
|
m_options |= nullable;
|
673
696
|
bool defaultNull = enableFlags.bitF;
|
674
|
-
enableFlags = fd->enableFlags;
|
697
|
+
enableFlags.all = fd->enableFlags.all;
|
675
698
|
enableFlags.bitF = defaultNull;
|
676
699
|
if (type == ft_mychar || type == ft_string || type == ft_mywchar || type == ft_wstring)
|
677
700
|
m_padCharOptions = fd->m_padCharOptions;
|
678
701
|
if (fd->type == ft_myfixedbinary && len - 2 == fd->len)
|
679
702
|
{
|
680
|
-
len = fd->len
|
703
|
+
len = fd->len;
|
681
704
|
type = fd->type;
|
682
705
|
}
|
683
706
|
if (len == fd->len && isCompatibleType(type, fd->type, fd->len, fd->m_charsetIndex))
|
@@ -784,6 +807,7 @@ bool tabledef::operator==(const tabledef& r) const
|
|
784
807
|
(keyCount == r.keyCount) &&
|
785
808
|
(version == r.version) &&
|
786
809
|
(charsetIndex == r.charsetIndex) &&
|
810
|
+
(m_utimeFieldNum == r.m_utimeFieldNum) &&
|
787
811
|
(flags.all == r.flags.all) &&
|
788
812
|
(primaryKeyNum == r.primaryKeyNum) &&
|
789
813
|
(parentKeyNum == r.parentKeyNum) &&
|
@@ -918,6 +942,9 @@ void tabledef::calcReclordlen(bool force)
|
|
918
942
|
else if (defaultValue && fd.isBlob())
|
919
943
|
fd.setDefaultValue(0.0f);
|
920
944
|
|
945
|
+
if (m_utimeFieldNum == 0xffff && fd.isTimeStampOnUpdate())
|
946
|
+
m_utimeFieldNum = i;
|
947
|
+
|
921
948
|
if (m_srvMajorVer)
|
922
949
|
{
|
923
950
|
if (isLegacyTimeFormat(fd))
|
@@ -1107,6 +1134,7 @@ short tabledef::synchronize(const tabledef* td)
|
|
1107
1134
|
version = td->version;
|
1108
1135
|
m_inUse = td->m_inUse;
|
1109
1136
|
m_mysqlNullMode = td->m_mysqlNullMode;
|
1137
|
+
m_utimeFieldNum = td->m_utimeFieldNum;
|
1110
1138
|
parentKeyNum = td->parentKeyNum;
|
1111
1139
|
replicaKeyNum = td->replicaKeyNum;
|
1112
1140
|
optionFlags = td->optionFlags;
|
@@ -1135,6 +1163,27 @@ short tabledef::synchronize(const tabledef* td)
|
|
1135
1163
|
return 0;
|
1136
1164
|
}
|
1137
1165
|
|
1166
|
+
void tabledef::convertToUtf8Schema()
|
1167
|
+
{
|
1168
|
+
if (schemaCodePage != CP_UTF8)
|
1169
|
+
{
|
1170
|
+
char* p = namebufA();
|
1171
|
+
mbcconv(m_tableName, strlen(m_tableName), p, TABLE_NAME_SIZE, schemaCodePage, CP_UTF8);
|
1172
|
+
strcpy_s(m_tableName, TABLE_NAME_SIZE, p);
|
1173
|
+
mbcconv(m_fileName, strlen(m_fileName), p, FILE_NAME_SIZE, schemaCodePage, CP_UTF8);
|
1174
|
+
strcpy_s(m_fileName, FILE_NAME_SIZE, p);
|
1175
|
+
for (int i = 0;i < fieldCount; ++i)
|
1176
|
+
{
|
1177
|
+
fielddef* fd = &fieldDefs[i];
|
1178
|
+
mbcconv(fd->m_name, strlen(fd->m_name), p, FIELD_NAME_SIZE, schemaCodePage, CP_UTF8);
|
1179
|
+
strcpy_s(fd->m_name, FIELD_NAME_SIZE, p);
|
1180
|
+
mbcconv(fd->m_chainChar, strlen(fd->m_chainChar), p, 2, schemaCodePage, CP_UTF8);
|
1181
|
+
strcpy_s(fd->m_chainChar, 2, p);
|
1182
|
+
}
|
1183
|
+
schemaCodePage = CP_UTF8;
|
1184
|
+
}
|
1185
|
+
}
|
1186
|
+
|
1138
1187
|
ushort_td lenByCharnum(uchar_td type, uchar_td charsetIndex, ushort_td charnum)
|
1139
1188
|
{
|
1140
1189
|
ushort_td len = charnum;
|
@@ -1069,6 +1069,7 @@ struct PACKAGE tabledef
|
|
1069
1069
|
{
|
1070
1070
|
memset(this, 0, sizeof(tabledef));
|
1071
1071
|
formatVersion = FORMAT_VERSON_CURRENT;
|
1072
|
+
m_utimeFieldNum = -1;
|
1072
1073
|
primaryKeyNum = -1;
|
1073
1074
|
parentKeyNum = -1;
|
1074
1075
|
replicaKeyNum = -1;
|
@@ -1084,6 +1085,7 @@ struct PACKAGE tabledef
|
|
1084
1085
|
const wchar_t* tableName() const; // table name
|
1085
1086
|
void setFileName(const wchar_t* s);
|
1086
1087
|
void setTableName(const wchar_t* s);
|
1088
|
+
void convertToUtf8Schema();
|
1087
1089
|
private:
|
1088
1090
|
const char* toChar(char* buf, const wchar_t* s, int size) const;
|
1089
1091
|
#else
|
@@ -1107,6 +1109,7 @@ private:
|
|
1107
1109
|
const char* tableName() const;
|
1108
1110
|
void setFileName(const char* s);
|
1109
1111
|
void setTableName(const char* s);
|
1112
|
+
void convertToUtf8Schema();
|
1110
1113
|
private:
|
1111
1114
|
const char* toChar(char* buf, const char* s, int size) const;
|
1112
1115
|
#endif // MYSQL_DYNAMIC_PLUGIN
|
@@ -1229,7 +1232,8 @@ private:
|
|
1229
1232
|
bool m_useInMariadb ; // use in mariadb
|
1230
1233
|
uchar_td m_srvMajorVer; // server major version;
|
1231
1234
|
uchar_td m_srvMinorVer; // server minor version;
|
1232
|
-
|
1235
|
+
ushort_td m_utimeFieldNum; // uodate timestamp field number
|
1236
|
+
uchar_td m_filler0[8]; // reserved
|
1233
1237
|
public:
|
1234
1238
|
FLAGS flags; // file flags
|
1235
1239
|
uchar_td primaryKeyNum; // Primary key number. -1 is no primary.
|
@@ -187,8 +187,10 @@ typedef void (__STDCALL* REGISTER_RESOLVER_PTR)(HANAME_RESOLVER_PTR func);
|
|
187
187
|
|
188
188
|
/** TD_GET_SCHEMA sub operations
|
189
189
|
*/
|
190
|
+
#define SC_SUBOP_TABLEDEF 0
|
190
191
|
#define SC_SUBOP_BY_SQL -1
|
191
192
|
#define SC_SUBOP_VIEW_BY_SQL -2
|
193
|
+
#define SC_SUBOP_TABLEDEF_BIN_STR -3
|
192
194
|
|
193
195
|
/** TD_GET_STASTISTICS sub operations
|
194
196
|
*/
|
@@ -387,12 +389,14 @@ enum combineType
|
|
387
389
|
#define TD_OPEN_MASK_MYSQL_NULL -16
|
388
390
|
#define TD_OPEN_MASK_GETSHCHEMA -32
|
389
391
|
#define TD_OPEN_MASK_GETDEFAULTIMAGE -64
|
392
|
+
#define TD_OPEN_MASK_BIN_STR -128
|
390
393
|
|
391
394
|
#define IS_MODE_READONLY(mode) (((0 - mode) & 2) != 0)
|
392
395
|
#define IS_MODE_EXCLUSIVE(mode) (((0 - mode) & 4) != 0)
|
393
396
|
#define IS_MODE_MYSQL_NULL(mode) (((0 - mode) & 16) != 0)
|
394
397
|
#define IS_MODE_GETSCHEMA(mode) (((0 - mode) & 32) != 0)
|
395
398
|
#define IS_MODE_GETDEFAULTIMAGE(mode) (((0 - mode) & 64) != 0)
|
399
|
+
#define IS_MODE_BIN_STR(mode) (((0 - mode) & 128) != 0)
|
396
400
|
/** @endcond */
|
397
401
|
|
398
402
|
/** field algin
|
@@ -665,7 +669,7 @@ struct handshale_t
|
|
665
669
|
If you change this version then you need change The ($TargetName) project options too.
|
666
670
|
*/
|
667
671
|
#define C_INTERFACE_VER_MAJOR "3"//##1 Build marker! Don't remove
|
668
|
-
#define C_INTERFACE_VER_MINOR "
|
672
|
+
#define C_INTERFACE_VER_MINOR "6"//##2 Build marker! Don't remove
|
669
673
|
#define C_INTERFACE_VER_RELEASE "0"//##3 Build marker! Don't remove
|
670
674
|
|
671
675
|
/* dnamic load library name.
|
@@ -729,7 +733,7 @@ struct handshale_t
|
|
729
733
|
*/
|
730
734
|
|
731
735
|
#define CPP_INTERFACE_VER_MAJOR "3"//##4 Build marker! Don't remove
|
732
|
-
#define CPP_INTERFACE_VER_MINOR "
|
736
|
+
#define CPP_INTERFACE_VER_MINOR "6"//##5 Build marker! Don't remove
|
733
737
|
#define CPP_INTERFACE_VER_RELEASE "0"//##6 Build marker! Don't remove
|
734
738
|
|
735
739
|
/* use autolink tdclcpp */
|
@@ -766,7 +770,7 @@ struct handshale_t
|
|
766
770
|
|
767
771
|
|
768
772
|
#define TRANSACTD_VER_MAJOR 3//##7 Build marker! Don't remove
|
769
|
-
#define TRANSACTD_VER_MINOR
|
773
|
+
#define TRANSACTD_VER_MINOR 6//##8 Build marker! Don't remove
|
770
774
|
#define TRANSACTD_VER_RELEASE 0//##9 Build marker! Don't remove
|
771
775
|
|
772
776
|
#endif // BZS_DB_PROTOCOL_TDAP_TDAPCAPI_H
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*=================================================================
|
2
|
-
Copyright (C) 2014 BizStation Corp All rights reserved.
|
2
|
+
Copyright (C) 2014,2016 BizStation Corp All rights reserved.
|
3
3
|
|
4
4
|
This program is free software; you can redistribute it and/or
|
5
5
|
modify it under the terms of the GNU General Public License
|
@@ -522,7 +522,7 @@ void readUsers(databaseManager& db, std::vector<user_ptr>& users)
|
|
522
522
|
users_orm users_hdr(m);
|
523
523
|
ut.readMap(users_hdr, q);
|
524
524
|
|
525
|
-
/* Using
|
525
|
+
/* Using client filter exsample.
|
526
526
|
Set a client filter function or function object to read method.
|
527
527
|
*/
|
528
528
|
ut.index(keynum_group).keyValue(find_group_id).read(users, q, isMatch);
|
@@ -29,6 +29,9 @@
|
|
29
29
|
#include <boost/enable_shared_from_this.hpp>
|
30
30
|
#include "IAppModule.h"
|
31
31
|
#include <bzs/rtl/exception.h>
|
32
|
+
#include <windows.h>
|
33
|
+
#include <stdio.h>
|
34
|
+
|
32
35
|
|
33
36
|
using namespace boost;
|
34
37
|
using namespace boost::asio;
|
@@ -166,10 +169,41 @@ class exitCheckHnadler : public IExitCheckHandler
|
|
166
169
|
bool m_cancel;
|
167
170
|
IAppModule* m_module;
|
168
171
|
|
172
|
+
/*
|
173
|
+
Enable Privilege of SE_DEBUG_NAME for system process. ex IIS
|
174
|
+
*/
|
175
|
+
BOOL setPrivilege()
|
176
|
+
{
|
177
|
+
HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, GetCurrentProcessId());
|
178
|
+
HANDLE hToken;
|
179
|
+
OpenProcessToken(hProc, TOKEN_ADJUST_PRIVILEGES, &hToken);
|
180
|
+
CloseHandle(hProc);
|
181
|
+
TOKEN_PRIVILEGES tp;
|
182
|
+
LUID luid;
|
183
|
+
|
184
|
+
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid))
|
185
|
+
{
|
186
|
+
CloseHandle(hToken);
|
187
|
+
return FALSE;
|
188
|
+
}
|
189
|
+
tp.PrivilegeCount = 1;
|
190
|
+
tp.Privileges[0].Luid = luid;
|
191
|
+
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
|
192
|
+
|
193
|
+
BOOL ret = AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES),
|
194
|
+
(PTOKEN_PRIVILEGES) NULL, (PDWORD) NULL);
|
195
|
+
CloseHandle(hToken);
|
196
|
+
if (!ret) return FALSE;
|
197
|
+
return (GetLastError() != ERROR_NOT_ALL_ASSIGNED);
|
198
|
+
}
|
199
|
+
|
169
200
|
public:
|
170
201
|
exitCheckHnadler(DWORD procId) : m_cancel(false), m_module(NULL)
|
171
202
|
{
|
203
|
+
setPrivilege();
|
172
204
|
m_procHandle = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, procId);
|
205
|
+
if (!m_procHandle)
|
206
|
+
server::erh->printError("Pipe client process handle access denied");
|
173
207
|
}
|
174
208
|
|
175
209
|
~exitCheckHnadler()
|
@@ -188,7 +222,7 @@ public:
|
|
188
222
|
if (m_procHandle && GetExitCodeProcess(m_procHandle, &ExitCode))
|
189
223
|
{
|
190
224
|
if (STILL_ACTIVE != ExitCode)
|
191
|
-
return true;
|
225
|
+
return true;
|
192
226
|
}
|
193
227
|
if (m_module && m_module->isShutDown())
|
194
228
|
return true;
|
@@ -197,6 +197,7 @@ var joinWhereFields = 2;
|
|
197
197
|
|
198
198
|
var CMP_MODE_MYSQL_NULL = 1;
|
199
199
|
var CMP_MODE_OLD_NULL = 0;
|
200
|
+
var CMP_MODE_BINFD_DEFAULT_STR = 2;
|
200
201
|
|
201
202
|
var clearNull = 0;
|
202
203
|
var defaultNull = 1;
|
@@ -864,6 +865,47 @@ function testConnMgr(uri)
|
|
864
865
|
}
|
865
866
|
|
866
867
|
|
868
|
+
function testUTCC(db)
|
869
|
+
{
|
870
|
+
var tb = db.OpenTable("user", OPEN_NORMAL);
|
871
|
+
checkEqual(db.Stat, 0, "OpenTable user");
|
872
|
+
|
873
|
+
var tb2 = db.OpenTable("user", OPEN_NORMAL);
|
874
|
+
checkEqual(db.Stat, 0, "OpenTable user");
|
875
|
+
|
876
|
+
db.beginTrn();
|
877
|
+
tb.seekFirst();
|
878
|
+
checkEqual(tb.Stat, 0, "seekFirst");
|
879
|
+
|
880
|
+
tb2.seekFirst();
|
881
|
+
checkEqual(tb2.Stat, 0, "seekFirst2");
|
882
|
+
|
883
|
+
tb2.SetFV(1, "ABC");
|
884
|
+
tb2.Update();
|
885
|
+
checkEqual(tb2.Stat, 0, "seekFirst2");
|
886
|
+
|
887
|
+
checkEqual(tb.updateConflictCheck, false, "updateConflictCheck");
|
888
|
+
var ret = tb.SetUpdateConflictCheck(true);
|
889
|
+
checkEqual(ret, true, "SetUpdateConflictCheck");
|
890
|
+
checkEqual(tb.updateConflictCheck, true, "updateConflictCheck");
|
891
|
+
|
892
|
+
tb.SetFV(1, "EFG");
|
893
|
+
tb.Update();
|
894
|
+
checkEqual(tb.Stat, STATUS_CHANGE_CONFLICT, "Update UTCC");
|
895
|
+
db.abortTrn();
|
896
|
+
}
|
897
|
+
|
898
|
+
|
899
|
+
function tesAlias(db)
|
900
|
+
{
|
901
|
+
var tb = db.OpenTable("user", OPEN_NORMAL);
|
902
|
+
checkEqual(db.Stat, 0, "OpenTable user");
|
903
|
+
tb.setAlias("���O", "name");
|
904
|
+
tb.SetFV("name", "EFG");
|
905
|
+
checkEqual(tb.Stat, 0, "Alias");
|
906
|
+
tb.close();
|
907
|
+
}
|
908
|
+
|
867
909
|
/*--------------------------------------------------------------------------------*/
|
868
910
|
function test(atu, ate, db)
|
869
911
|
{
|
@@ -953,7 +995,7 @@ function test(atu, ate, db)
|
|
953
995
|
// getSqlStringForCreateTable
|
954
996
|
var sql = db.GetSqlStringForCreateTable("extention");
|
955
997
|
checkEqual(db.Stat, 0, "GetSqlStringForCreateTable");
|
956
|
-
checkEqual(sql, 'CREATE TABLE `extention` (`id` INT NOT NULL ,`comment` VARCHAR(60) binary NULL DEFAULT NULL,`bits` BIGINT NOT NULL ,
|
998
|
+
checkEqual(sql, 'CREATE TABLE `extention` (`id` INT NOT NULL ,`comment` VARCHAR(60) binary NULL DEFAULT NULL,`bits` BIGINT NOT NULL , PRIMARY KEY(`id`)) ENGINE=InnoDB default charset=cp932',
|
957
999
|
"GetSqlStringForCreateTable");
|
958
1000
|
|
959
1001
|
// setValidationTarget(bool isMariadb, uchar_td srvMinorVersion)
|
@@ -1171,6 +1213,11 @@ function test(atu, ate, db)
|
|
1171
1213
|
// connMgr
|
1172
1214
|
testConnMgr(db.uri);
|
1173
1215
|
|
1216
|
+
// UTCC
|
1217
|
+
testUTCC(db);
|
1218
|
+
|
1219
|
+
//Alias
|
1220
|
+
tesAlias(db);
|
1174
1221
|
//WScript.Echo(" -- End Test -- ");
|
1175
1222
|
}
|
1176
1223
|
/*--------------------------------------------------------------------------------*/
|