transactd 3.5.0 → 3.6.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/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
|
/*--------------------------------------------------------------------------------*/
|