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
@@ -25,7 +25,7 @@
|
|
25
25
|
#include "bulkInsert.h"
|
26
26
|
#include <bzs/db/protocol/tdap/tdapRequest.h>
|
27
27
|
#include <bzs/rtl/strtrim.h>
|
28
|
-
#include <bzs/db/protocol/tdap/myDateTime.
|
28
|
+
#include <bzs/db/protocol/tdap/myDateTime.h>
|
29
29
|
#include <bzs/rtl/stringBuffers.h>
|
30
30
|
#include "stringConverter.h"
|
31
31
|
#include <boost/timer.hpp>
|
@@ -80,16 +80,19 @@ struct tbimpl
|
|
80
80
|
|
81
81
|
struct
|
82
82
|
{
|
83
|
-
unsigned char exBookMarking
|
83
|
+
unsigned char exBookMarking : 1;
|
84
84
|
unsigned char smartUpDateFlag : 1;
|
85
|
-
unsigned char dataPacked
|
85
|
+
unsigned char dataPacked : 1;
|
86
|
+
unsigned char useIncrimented : 1;
|
87
|
+
unsigned char getSchemaOpen : 1;
|
86
88
|
};
|
87
89
|
|
88
90
|
tbimpl(table& tb)
|
89
91
|
: bookMarks(NULL), fields(tb), rc(NULL), mraPtr(NULL),
|
90
92
|
dataBak(NULL), smartUpDate(NULL), bfAtcPtr(NULL), optionalData(NULL),
|
91
93
|
dataBufferLen(0), bookMarksMemSize(0), maxBookMarkedCount(0),
|
92
|
-
onRecordCountFunc(NULL), smartUpDateFlag(false), dataPacked(false)
|
94
|
+
onRecordCountFunc(NULL), smartUpDateFlag(false), dataPacked(false), useIncrimented(false),
|
95
|
+
getSchemaOpen(false)
|
93
96
|
{
|
94
97
|
memset(&keyNumIndex[0], 0, 128);
|
95
98
|
}
|
@@ -119,15 +122,6 @@ struct tbimpl
|
|
119
122
|
return NULL;
|
120
123
|
}
|
121
124
|
|
122
|
-
/*inline bookmark_td* bookmarksPtr(unsigned int index)
|
123
|
-
{
|
124
|
-
boost::mutex::scoped_lock lck(bookmarkMutex);
|
125
|
-
unsigned int pos = index * 6 + 2;
|
126
|
-
if ((index < maxBookMarkedCount) && bookMarks)
|
127
|
-
return (bookmark_td*)((char*)bookMarks + pos);
|
128
|
-
return NULL;
|
129
|
-
}*/
|
130
|
-
|
131
125
|
inline short insertBookmarks(unsigned int start, void* data, ushort_td len,
|
132
126
|
ushort_td count)
|
133
127
|
{
|
@@ -295,34 +289,43 @@ public:
|
|
295
289
|
if (!mra) return;
|
296
290
|
if (m_rowCount)
|
297
291
|
{
|
298
|
-
|
299
292
|
unsigned char* bd = NULL; //blob data
|
300
|
-
if (m_filter->hasManyJoin()
|
293
|
+
if (m_filter->hasManyJoin() &&
|
294
|
+
((mra->joinType() & mra_innerjoin) || mra->joinType() & mra_outerjoin))
|
301
295
|
hasManyJoinMra(m_rowCount, data);
|
302
296
|
size_t recordLen = m_filter->fieldSelected()
|
303
297
|
? m_filter->totalFieldLen()
|
304
|
-
: m_tb->tableDef()->
|
298
|
+
: m_tb->tableDef()->recordlen();
|
305
299
|
mra->init(m_rowCount, recordLen, m_memblockType, m_tb);
|
306
300
|
if (hd)
|
307
|
-
bd = mra->allocBlobBlock(hd->dataSize);
|
301
|
+
bd = mra->allocBlobBlock(hd->dataSize);
|
308
302
|
|
309
303
|
// copy each row data
|
310
304
|
int bookmarkSize = m_filter->bookmarkSize();
|
311
305
|
const tabledef* td = m_tb->tableDef();
|
312
306
|
ushort_td fieldCount = m_filter->fieldCount();
|
313
307
|
m_tmpPtr = mra->ptr(m_row, mra_current_block);
|
314
|
-
|
308
|
+
int selNullbytes = m_filter->selectedNullbytes();
|
315
309
|
while (m_row < m_rowCount)
|
316
310
|
{
|
317
311
|
if ((m_len == 0) && m_filter->isSeeksMode() && fieldCount)
|
318
|
-
mra->
|
312
|
+
mra->setInvalidMemblock(m_row, true);
|
319
313
|
else
|
320
314
|
{
|
321
315
|
if (m_filter->fieldSelected())
|
322
316
|
{
|
323
|
-
uchar_td* fieldPtr = m_ptr;
|
324
317
|
int resultOffset = 0;
|
325
318
|
int blobFieldNum = 0;
|
319
|
+
uchar_td* fieldPtr = m_ptr;
|
320
|
+
|
321
|
+
//Copy null bytes
|
322
|
+
if (selNullbytes)
|
323
|
+
{
|
324
|
+
memcpy(m_tmpPtr, fieldPtr, selNullbytes);
|
325
|
+
fieldPtr += selNullbytes;
|
326
|
+
resultOffset += selNullbytes;
|
327
|
+
}
|
328
|
+
|
326
329
|
for (int i = 0; i < fieldCount; i++)
|
327
330
|
{
|
328
331
|
const fielddef& fd =
|
@@ -341,7 +344,7 @@ public:
|
|
341
344
|
{
|
342
345
|
if (m_tb->valiableFormatType())
|
343
346
|
{
|
344
|
-
memset(m_tmpPtr, 0, td->
|
347
|
+
memset(m_tmpPtr, 0, td->recordlen());
|
345
348
|
memcpy(m_tmpPtr, m_ptr, m_len);
|
346
349
|
m_unpackLen = td->unPack((char*)m_tmpPtr, m_len);
|
347
350
|
}
|
@@ -399,7 +402,7 @@ public:
|
|
399
402
|
{
|
400
403
|
|
401
404
|
m_seekMultiStat = STATUS_NOT_FOUND_TI;
|
402
|
-
memset(m_tmpPtr, 0, td->
|
405
|
+
memset(m_tmpPtr, 0, td->recordlen());
|
403
406
|
return m_tmpPtr;
|
404
407
|
}
|
405
408
|
else
|
@@ -407,20 +410,34 @@ public:
|
|
407
410
|
m_seekMultiStat = 0;
|
408
411
|
if (m_filter->fieldSelected())
|
409
412
|
{
|
410
|
-
int
|
411
|
-
uchar_td* fieldPtr = m_ptr;
|
412
|
-
memset(m_tmpPtr, 0, td->
|
413
|
+
int selNullbytes = m_filter->selectedNullbytes();
|
414
|
+
uchar_td* fieldPtr = m_ptr + selNullbytes;
|
415
|
+
memset(m_tmpPtr, 0, td->recordlen());
|
416
|
+
int nullfields = 0;
|
413
417
|
for (int i = 0; i < fieldCount; i++)
|
414
418
|
{
|
415
419
|
const fielddef& fd =
|
416
420
|
td->fieldDefs[m_filter->selectFieldIndexes()[i]];
|
417
|
-
|
418
|
-
|
421
|
+
fieldPtr += fd.unPackCopy(m_tmpPtr + fd.pos + td->nullbytes(), fieldPtr);
|
422
|
+
|
423
|
+
//Copy null results
|
424
|
+
if (selNullbytes && fd.isNullable() && fd.nullbytes())
|
425
|
+
{
|
426
|
+
uchar_td* p = m_ptr + (nullfields + 7) / 8;
|
427
|
+
bool nullResult = (*p & (1L << (nullfields % 8))) != 0;
|
428
|
+
p = m_tmpPtr + (fd.nullbit() / 8);
|
429
|
+
int bit = fd.nullbit() % 8 ;
|
430
|
+
if (nullResult)
|
431
|
+
(*p) |= (unsigned char)(1L << bit);
|
432
|
+
else
|
433
|
+
(*p) &= (unsigned char)~(1L << bit);
|
434
|
+
++nullfields;
|
435
|
+
}
|
419
436
|
}
|
420
437
|
}
|
421
438
|
else if (m_tb->valiableFormatType())
|
422
439
|
{
|
423
|
-
memset(m_tmpPtr, 0, td->
|
440
|
+
memset(m_tmpPtr, 0, td->recordlen());
|
424
441
|
memcpy(m_tmpPtr, m_ptr, m_len);
|
425
442
|
m_unpackLen = td->unPack((char*)m_tmpPtr, m_len);
|
426
443
|
}
|
@@ -481,6 +498,11 @@ table::table(nsdatabase* pbe) : nstable(pbe)
|
|
481
498
|
|
482
499
|
table::~table()
|
483
500
|
{
|
501
|
+
if (m_impl->useIncrimented)
|
502
|
+
{
|
503
|
+
if (((database*)nsdb())->dbDef())
|
504
|
+
--((*m_tableDef)->m_inUse);
|
505
|
+
}
|
484
506
|
delete m_impl->rc;
|
485
507
|
m_fddefs->release();
|
486
508
|
delete m_impl;
|
@@ -494,7 +516,7 @@ void* __STDCALL table::DDBA(client::table* tb, uint_td size)
|
|
494
516
|
void* table::doDdba(uint_td size)
|
495
517
|
{
|
496
518
|
if (m_impl->filterPtr)
|
497
|
-
size += tableDef()->
|
519
|
+
size += tableDef()->recordlen();
|
498
520
|
return reallocDataBuffer(size);
|
499
521
|
}
|
500
522
|
|
@@ -765,7 +787,7 @@ void table::btrvGetExtend(ushort_td op)
|
|
765
787
|
if (m_impl->rc->rowCount() && (!m_impl->exBookMarking))
|
766
788
|
{
|
767
789
|
m_pdata = (void*)m_impl->rc->setRow(0);
|
768
|
-
m_datalen = tableDef()->
|
790
|
+
m_datalen = tableDef()->recordlen();
|
769
791
|
|
770
792
|
m_stat = m_impl->rc->seekMultiStat();
|
771
793
|
}else if (!filter->isStatContinue())
|
@@ -862,7 +884,7 @@ bool table::doSeekMultiAfter(int row)
|
|
862
884
|
else if (!checkStatus(m_stat))
|
863
885
|
return false;
|
864
886
|
if (m_stat)
|
865
|
-
m_impl->mraPtr->
|
887
|
+
m_impl->mraPtr->setInvalidMemblock(row, true);
|
866
888
|
else
|
867
889
|
{
|
868
890
|
uchar_td* dst = m_impl->mraPtr->ptr(row, mra_current_block);
|
@@ -893,7 +915,7 @@ void table::btrvSeekMulti()
|
|
893
915
|
m_impl->rc->reset();
|
894
916
|
size_t recordLen = m_impl->filterPtr->fieldSelected()
|
895
917
|
? m_impl->filterPtr->totalSelectFieldLen()
|
896
|
-
: tableDef()->
|
918
|
+
: tableDef()->recordlen();
|
897
919
|
if (!hasManyJoin)
|
898
920
|
m_impl->mraPtr->init(seeks.size(), recordLen, mra_first, this);
|
899
921
|
|
@@ -932,7 +954,7 @@ void table::btrvSeekMulti()
|
|
932
954
|
}
|
933
955
|
}
|
934
956
|
else
|
935
|
-
m_impl->mraPtr->
|
957
|
+
m_impl->mraPtr->setInvalidMemblock(0, true);
|
936
958
|
}
|
937
959
|
else
|
938
960
|
{
|
@@ -984,7 +1006,7 @@ void table::doFind(ushort_td op, bool notIncCurrent)
|
|
984
1006
|
setSeekValueField(row);
|
985
1007
|
|
986
1008
|
// m_datalen = m_impl->rc->len();
|
987
|
-
m_datalen = tableDef()->
|
1009
|
+
m_datalen = tableDef()->recordlen();
|
988
1010
|
}
|
989
1011
|
else if (m_impl->rc->isEndOfRow(row))
|
990
1012
|
{
|
@@ -1218,11 +1240,19 @@ void table::setFilter(const _TCHAR* str, ushort_td RejectCount,
|
|
1218
1240
|
}
|
1219
1241
|
}
|
1220
1242
|
|
1221
|
-
void table::clearBuffer()
|
1243
|
+
void table::clearBuffer(eNullReset resetType)
|
1222
1244
|
{
|
1223
1245
|
m_impl->rc->reset();
|
1224
1246
|
m_pdata = m_impl->dataBak;
|
1225
|
-
|
1247
|
+
tabledef* td = (*m_tableDef);
|
1248
|
+
if (td->isMysqlNullMode() && td->defaultImage)
|
1249
|
+
{
|
1250
|
+
memcpy(m_pdata, td->defaultImage, m_buflen);
|
1251
|
+
if (resetType == clearNull)
|
1252
|
+
memset(m_pdata, 0x00, td->nullbytes());
|
1253
|
+
}
|
1254
|
+
else
|
1255
|
+
memset(m_pdata, 0x00, m_buflen);
|
1226
1256
|
if ((bulkIns() == NULL) && blobFieldUsed())
|
1227
1257
|
resetSendBlob();
|
1228
1258
|
}
|
@@ -1266,7 +1296,7 @@ void table::doCreateIndex(bool SpecifyKeyNum)
|
|
1266
1296
|
{
|
1267
1297
|
uint_td len = m_datalen;
|
1268
1298
|
m_pdata = (*m_tableDef);
|
1269
|
-
m_datalen = (*m_tableDef)->
|
1299
|
+
m_datalen = (*m_tableDef)->size();
|
1270
1300
|
// tdclc check datalen, m_pdata is tabledef if bigger than sizeof(keySpec) * 8
|
1271
1301
|
if (m_datalen <= sizeof(keySpec) * 8)
|
1272
1302
|
m_datalen = sizeof(keySpec) * 8 + 10;
|
@@ -1291,10 +1321,10 @@ void table::doCreateIndex(bool SpecifyKeyNum)
|
|
1291
1321
|
void table::smartUpdate()
|
1292
1322
|
{
|
1293
1323
|
if (!m_impl->smartUpDate)
|
1294
|
-
m_impl->smartUpDate = malloc((*m_tableDef)->
|
1324
|
+
m_impl->smartUpDate = malloc((*m_tableDef)->recordlen());
|
1295
1325
|
if (m_impl->smartUpDate)
|
1296
1326
|
{
|
1297
|
-
memcpy(m_impl->smartUpDate, data(), (*m_tableDef)->
|
1327
|
+
memcpy(m_impl->smartUpDate, data(), (*m_tableDef)->recordlen());
|
1298
1328
|
m_impl->smartUpDateFlag = true;
|
1299
1329
|
}
|
1300
1330
|
else
|
@@ -1338,7 +1368,7 @@ bool table::onUpdateCheck(eUpdateType type)
|
|
1338
1368
|
else if (m_impl->smartUpDateFlag)
|
1339
1369
|
{
|
1340
1370
|
m_stat = 0;
|
1341
|
-
if (memcmp(m_impl->smartUpDate, data(), (*m_tableDef)->
|
1371
|
+
if (memcmp(m_impl->smartUpDate, data(), (*m_tableDef)->recordlen()) == 0)
|
1342
1372
|
{
|
1343
1373
|
m_impl->smartUpDateFlag = false;
|
1344
1374
|
return false;
|
@@ -1401,7 +1431,7 @@ void* table::attachBuffer(void* NewPtr, bool unpack, size_t size)
|
|
1401
1431
|
m_impl->bfAtcPtr = m_pdata;
|
1402
1432
|
oldptr = m_pdata;
|
1403
1433
|
m_pdata = NewPtr;
|
1404
|
-
ushort_td len = (*m_tableDef)->
|
1434
|
+
ushort_td len = (*m_tableDef)->recordlen();
|
1405
1435
|
if (unpack)
|
1406
1436
|
len = (*m_tableDef)->unPack((char*)m_pdata, size);
|
1407
1437
|
m_datalen = len;
|
@@ -1415,18 +1445,32 @@ void table::dettachBuffer()
|
|
1415
1445
|
m_impl->bfAtcPtr = NULL;
|
1416
1446
|
}
|
1417
1447
|
|
1418
|
-
void table::
|
1448
|
+
inline void table::incTabledefRefCount(tabledef* td, bool mysqlMullmode)
|
1419
1449
|
{
|
1420
|
-
|
1450
|
+
if (m_impl->useIncrimented == false)
|
1451
|
+
{
|
1452
|
+
td->m_mysqlNullMode = mysqlMullmode;
|
1453
|
+
if (td->m_inUse == 0)
|
1454
|
+
td->calcReclordlen();
|
1455
|
+
++td->m_inUse;
|
1456
|
+
m_impl->useIncrimented = true;
|
1457
|
+
}
|
1421
1458
|
}
|
1422
1459
|
|
1423
|
-
void table::
|
1460
|
+
void table::init(tabledef** Def, short fnum, bool regularDir, bool mysqlnull)
|
1461
|
+
{
|
1462
|
+
doInit(Def, fnum, regularDir, mysqlnull);
|
1463
|
+
}
|
1464
|
+
|
1465
|
+
void table::doInit(tabledef** Def, short fnum, bool /*regularDir*/, bool mysqlnull)
|
1424
1466
|
{
|
1425
1467
|
m_tableDef = Def;
|
1426
1468
|
tabledef* td = *m_tableDef;
|
1469
|
+
|
1470
|
+
incTabledefRefCount(td, mysqlnull);
|
1427
1471
|
m_fddefs->addAllFileds(td);
|
1428
1472
|
m_fddefs->cv()->setCodePage(mysql::codePage(td->charsetIndex));
|
1429
|
-
ushort_td len = td->
|
1473
|
+
ushort_td len = td->recordlen();
|
1430
1474
|
if (len == 0)
|
1431
1475
|
{
|
1432
1476
|
m_stat = STATUS_INVALID_RECLEN;
|
@@ -1455,13 +1499,16 @@ keylen_td table::writeKeyDataTo(uchar_td* to, int keySize)
|
|
1455
1499
|
uchar_td* start = to;
|
1456
1500
|
if (keySize == 0)
|
1457
1501
|
keySize = keydef.segmentCount;
|
1458
|
-
|
1502
|
+
bool transactd = isUseTransactd();
|
1459
1503
|
for (int j = 0; j < keySize; j++)
|
1460
1504
|
{
|
1461
1505
|
int fdnum = keydef.segments[j].fieldNum;
|
1506
|
+
FLAGS f = keydef.segments[j].flags;
|
1507
|
+
bool isNull = getFVNull(fdnum);
|
1508
|
+
if ((f.bit9 | f.bit3) && (transactd == true))
|
1509
|
+
isNull = false;
|
1462
1510
|
fielddef& fd = (*m_tableDef)->fieldDefs[fdnum];
|
1463
|
-
|
1464
|
-
to = fd.keyCopy(to, from);
|
1511
|
+
to = fd.keyCopy(to, (uchar_td*)fieldPtr(fdnum), 0xff, isNull);
|
1465
1512
|
}
|
1466
1513
|
return (keylen_td)(to - start);
|
1467
1514
|
}
|
@@ -1473,7 +1520,6 @@ keylen_td table::writeKeyData()
|
|
1473
1520
|
return writeKeyDataTo((uchar_td*)m_impl->keybuf, 0);
|
1474
1521
|
}
|
1475
1522
|
|
1476
|
-
|
1477
1523
|
uint_td table::unPack(char* ptr, size_t size)
|
1478
1524
|
{
|
1479
1525
|
m_impl->dataPacked = false;
|
@@ -1491,7 +1537,7 @@ uint_td table::doGetWriteImageLen()
|
|
1491
1537
|
tabledef* td = (*m_tableDef);
|
1492
1538
|
if (!blobFieldUsed() && !valiableFormatType() &&
|
1493
1539
|
(td->flags.bit0 == false))
|
1494
|
-
return td->
|
1540
|
+
return td->recordlen();
|
1495
1541
|
// Make blob pointer list
|
1496
1542
|
if (blobFieldUsed())
|
1497
1543
|
{
|
@@ -1512,7 +1558,7 @@ uint_td table::doGetWriteImageLen()
|
|
1512
1558
|
addSendBlob(NULL);
|
1513
1559
|
|
1514
1560
|
if (valiableFormatType())
|
1515
|
-
return pack((char*)m_pdata, td->
|
1561
|
+
return pack((char*)m_pdata, td->recordlen());
|
1516
1562
|
else
|
1517
1563
|
{
|
1518
1564
|
fielddef* fd = &td->fieldDefs[td->fieldCount - 1];
|
@@ -1633,11 +1679,11 @@ void table::onReadAfter()
|
|
1633
1679
|
const blobHeader* hd = getBlobHeader();
|
1634
1680
|
setBlobFieldPointer((char*)m_pdata, hd);
|
1635
1681
|
}
|
1636
|
-
if ((*m_tableDef)->
|
1637
|
-
memset((char*)m_pdata + m_datalen, 0, (*m_tableDef)->
|
1682
|
+
if ((*m_tableDef)->recordlen() - m_datalen > 0)
|
1683
|
+
memset((char*)m_pdata + m_datalen, 0, (*m_tableDef)->recordlen() - m_datalen);
|
1638
1684
|
}
|
1639
1685
|
|
1640
|
-
short table::fieldNumByName(const _TCHAR* name)
|
1686
|
+
short table::fieldNumByName(const _TCHAR* name) const
|
1641
1687
|
{
|
1642
1688
|
return m_fddefs->indexByName(name);
|
1643
1689
|
}
|
@@ -1646,14 +1692,14 @@ void* table::fieldPtr(short index) const
|
|
1646
1692
|
{
|
1647
1693
|
if (!checkIndex(index))
|
1648
1694
|
return NULL;
|
1649
|
-
return m_impl->fields
|
1695
|
+
return m_impl->fields.getFieldNoCheck(index).ptr();
|
1650
1696
|
}
|
1651
1697
|
|
1652
1698
|
void table::setFVA(short index, const char* data)
|
1653
1699
|
{
|
1654
1700
|
if (!checkIndex(index))
|
1655
1701
|
return;
|
1656
|
-
m_impl->fields
|
1702
|
+
m_impl->fields.getFieldNoCheck(index).setFVA(data);
|
1657
1703
|
}
|
1658
1704
|
|
1659
1705
|
#ifdef _WIN32
|
@@ -1662,7 +1708,7 @@ void table::setFVW(short index, const wchar_t* data)
|
|
1662
1708
|
{
|
1663
1709
|
if (!checkIndex(index))
|
1664
1710
|
return;
|
1665
|
-
m_impl->fields
|
1711
|
+
m_impl->fields.getFieldNoCheck(index).setFVW(data);
|
1666
1712
|
}
|
1667
1713
|
|
1668
1714
|
void table::setFVW(const _TCHAR* FieldName, const wchar_t* data)
|
@@ -1670,7 +1716,7 @@ void table::setFVW(const _TCHAR* FieldName, const wchar_t* data)
|
|
1670
1716
|
short index = fieldNumByName(FieldName);
|
1671
1717
|
if (!checkIndex(index))
|
1672
1718
|
return;
|
1673
|
-
m_impl->fields
|
1719
|
+
m_impl->fields.getFieldNoCheck(index).setFVW(data);
|
1674
1720
|
}
|
1675
1721
|
|
1676
1722
|
#endif //_WIN32
|
@@ -1687,14 +1733,14 @@ void table::setFV(short index, int data)
|
|
1687
1733
|
{
|
1688
1734
|
if (!checkIndex(index))
|
1689
1735
|
return;
|
1690
|
-
m_impl->fields
|
1736
|
+
m_impl->fields.getFieldNoCheck(index).setFV(data);
|
1691
1737
|
}
|
1692
1738
|
|
1693
1739
|
void table::setFV(short index, double data)
|
1694
1740
|
{
|
1695
1741
|
if (!checkIndex(index))
|
1696
1742
|
return;
|
1697
|
-
m_impl->fields
|
1743
|
+
m_impl->fields.getFieldNoCheck(index).setFV(data);
|
1698
1744
|
}
|
1699
1745
|
|
1700
1746
|
void table::setFV(short index, short data)
|
@@ -1713,100 +1759,100 @@ void table::setFV(short index, float data)
|
|
1713
1759
|
setFV(index, value);
|
1714
1760
|
}
|
1715
1761
|
|
1716
|
-
short table::getFVsht(short index)
|
1762
|
+
short table::getFVsht(short index) const
|
1717
1763
|
{
|
1718
1764
|
return (short)getFVlng(index);
|
1719
1765
|
}
|
1720
1766
|
|
1721
|
-
int table::getFVlng(short index)
|
1767
|
+
int table::getFVlng(short index) const
|
1722
1768
|
{
|
1723
1769
|
if (!checkIndex(index))
|
1724
1770
|
return 0;
|
1725
|
-
return m_impl->fields
|
1771
|
+
return m_impl->fields.getFieldNoCheck(index).getFVlng();
|
1726
1772
|
}
|
1727
1773
|
|
1728
|
-
float table::getFVflt(short index)
|
1774
|
+
float table::getFVflt(short index) const
|
1729
1775
|
{
|
1730
1776
|
return (float)getFVdbl(index);
|
1731
1777
|
}
|
1732
1778
|
|
1733
|
-
double table::getFVdbl(short index)
|
1779
|
+
double table::getFVdbl(short index) const
|
1734
1780
|
{
|
1735
1781
|
if (!checkIndex(index))
|
1736
1782
|
return 0;
|
1737
|
-
return m_impl->fields
|
1783
|
+
return m_impl->fields.getFieldNoCheck(index).getFVdbl();
|
1738
1784
|
}
|
1739
1785
|
|
1740
|
-
unsigned char table::getFVbyt(short index)
|
1786
|
+
unsigned char table::getFVbyt(short index) const
|
1741
1787
|
{
|
1742
1788
|
return (unsigned char)getFVlng(index);
|
1743
1789
|
}
|
1744
1790
|
|
1745
1791
|
#ifdef _WIN32
|
1746
1792
|
|
1747
|
-
const wchar_t* table::getFVWstr(short index)
|
1793
|
+
const wchar_t* table::getFVWstr(short index) const
|
1748
1794
|
{
|
1749
1795
|
if (!checkIndex(index))
|
1750
1796
|
return NULL;
|
1751
|
-
return m_impl->fields
|
1797
|
+
return m_impl->fields.getFieldNoCheck(index).getFVWstr();
|
1752
1798
|
}
|
1753
1799
|
|
1754
|
-
const wchar_t* table::getFVWstr(const _TCHAR* FieldName)
|
1800
|
+
const wchar_t* table::getFVWstr(const _TCHAR* FieldName) const
|
1755
1801
|
{
|
1756
1802
|
short index = fieldNumByName(FieldName);
|
1757
1803
|
return getFVWstr(index);
|
1758
1804
|
}
|
1759
1805
|
#endif //_WIN32
|
1760
1806
|
|
1761
|
-
const char* table::getFVAstr(short index)
|
1807
|
+
const char* table::getFVAstr(short index) const
|
1762
1808
|
{
|
1763
1809
|
if (index == -1)
|
1764
1810
|
return NULL;
|
1765
|
-
return m_impl->fields
|
1811
|
+
return m_impl->fields.getFieldNoCheck(index).getFVAstr();
|
1766
1812
|
}
|
1767
1813
|
|
1768
|
-
int table::getFVint(short index)
|
1814
|
+
int table::getFVint(short index) const
|
1769
1815
|
{
|
1770
1816
|
return (int)getFVlng(index);
|
1771
1817
|
}
|
1772
1818
|
|
1773
|
-
int table::getFVint(const _TCHAR* FieldName)
|
1819
|
+
int table::getFVint(const _TCHAR* FieldName) const
|
1774
1820
|
{
|
1775
1821
|
short index = fieldNumByName(FieldName);
|
1776
1822
|
return (int)getFVlng(index);
|
1777
1823
|
}
|
1778
1824
|
|
1779
|
-
int table::getFVlng(const _TCHAR* FieldName)
|
1825
|
+
int table::getFVlng(const _TCHAR* FieldName) const
|
1780
1826
|
{
|
1781
1827
|
short index = fieldNumByName(FieldName);
|
1782
1828
|
return getFVlng(index);
|
1783
1829
|
}
|
1784
1830
|
|
1785
|
-
const char* table::getFVAstr(const _TCHAR* FieldName)
|
1831
|
+
const char* table::getFVAstr(const _TCHAR* FieldName) const
|
1786
1832
|
{
|
1787
1833
|
short index = fieldNumByName(FieldName);
|
1788
1834
|
return getFVAstr(index);
|
1789
1835
|
}
|
1790
1836
|
|
1791
|
-
double table::getFVdbl(const _TCHAR* FieldName)
|
1837
|
+
double table::getFVdbl(const _TCHAR* FieldName) const
|
1792
1838
|
{
|
1793
1839
|
short index = fieldNumByName(FieldName);
|
1794
1840
|
return getFVdbl(index);
|
1795
1841
|
}
|
1796
1842
|
|
1797
|
-
unsigned char table::getFVbyt(const _TCHAR* FieldName)
|
1843
|
+
unsigned char table::getFVbyt(const _TCHAR* FieldName) const
|
1798
1844
|
{
|
1799
1845
|
short index = fieldNumByName(FieldName);
|
1800
1846
|
return getFVbyt(index);
|
1801
1847
|
}
|
1802
1848
|
|
1803
|
-
short table::getFVsht(const _TCHAR* FieldName)
|
1849
|
+
short table::getFVsht(const _TCHAR* FieldName) const
|
1804
1850
|
{
|
1805
1851
|
short index = fieldNumByName(FieldName);
|
1806
1852
|
return getFVsht(index);
|
1807
1853
|
}
|
1808
1854
|
|
1809
|
-
float table::getFVflt(const _TCHAR* FieldName)
|
1855
|
+
float table::getFVflt(const _TCHAR* FieldName) const
|
1810
1856
|
{
|
1811
1857
|
short index = fieldNumByName(FieldName);
|
1812
1858
|
return getFVflt(index);
|
@@ -1848,7 +1894,7 @@ void table::setFV(const _TCHAR* FieldName, short data)
|
|
1848
1894
|
setFV(index, data);
|
1849
1895
|
}
|
1850
1896
|
|
1851
|
-
__int64 table::getFV64(const _TCHAR* FieldName)
|
1897
|
+
__int64 table::getFV64(const _TCHAR* FieldName) const
|
1852
1898
|
{
|
1853
1899
|
short index = fieldNumByName(FieldName);
|
1854
1900
|
return getFV64(index);
|
@@ -1860,18 +1906,18 @@ void table::setFV(const _TCHAR* FieldName, __int64 data)
|
|
1860
1906
|
setFV(index, data);
|
1861
1907
|
}
|
1862
1908
|
|
1863
|
-
__int64 table::getFV64(short index)
|
1909
|
+
__int64 table::getFV64(short index) const
|
1864
1910
|
{
|
1865
1911
|
if (!checkIndex(index))
|
1866
1912
|
return 0;
|
1867
|
-
return m_impl->fields
|
1913
|
+
return m_impl->fields.getFieldNoCheck(index).getFV64();
|
1868
1914
|
}
|
1869
1915
|
|
1870
1916
|
void table::setFV(short index, __int64 data)
|
1871
1917
|
{
|
1872
1918
|
if (!checkIndex(index))
|
1873
1919
|
return;
|
1874
|
-
m_impl->fields
|
1920
|
+
m_impl->fields.getFieldNoCheck(index).setFV(data);
|
1875
1921
|
}
|
1876
1922
|
|
1877
1923
|
void table::setFV(const _TCHAR* FieldName, const void* data, uint_td size)
|
@@ -1880,6 +1926,32 @@ void table::setFV(const _TCHAR* FieldName, const void* data, uint_td size)
|
|
1880
1926
|
setFV(index, data, size);
|
1881
1927
|
}
|
1882
1928
|
|
1929
|
+
bool table::getFVNull(short index) const
|
1930
|
+
{
|
1931
|
+
if (!checkIndex(index))
|
1932
|
+
return false;
|
1933
|
+
return m_impl->fields.getFieldNoCheck(index).isNull();
|
1934
|
+
}
|
1935
|
+
|
1936
|
+
bool table::getFVNull(const _TCHAR* FieldName) const
|
1937
|
+
{
|
1938
|
+
short index = fieldNumByName(FieldName);
|
1939
|
+
return getFVNull(index);
|
1940
|
+
}
|
1941
|
+
|
1942
|
+
void table::setFVNull(short index, bool v)
|
1943
|
+
{
|
1944
|
+
if (!checkIndex(index))
|
1945
|
+
return;
|
1946
|
+
m_impl->fields.getFieldNoCheck(index).setNull(v);
|
1947
|
+
}
|
1948
|
+
|
1949
|
+
void table::setFVNull(const _TCHAR* FieldName, bool v)
|
1950
|
+
{
|
1951
|
+
short index = fieldNumByName(FieldName);
|
1952
|
+
setFVNull(index, v);
|
1953
|
+
}
|
1954
|
+
|
1883
1955
|
/* if blob and text ,set binary data that is only set pointer. it is not copied.
|
1884
1956
|
* Caller must hold data until it sends to the server.
|
1885
1957
|
*/
|
@@ -1887,10 +1959,10 @@ void table::setFV(short index, const void* data, uint_td size)
|
|
1887
1959
|
{
|
1888
1960
|
if (!checkIndex(index))
|
1889
1961
|
return;
|
1890
|
-
m_impl->fields
|
1962
|
+
m_impl->fields.getFieldNoCheck(index).setFV(data, size);
|
1891
1963
|
}
|
1892
1964
|
|
1893
|
-
void* table::getFVbin(const _TCHAR* FieldName, uint_td& size)
|
1965
|
+
void* table::getFVbin(const _TCHAR* FieldName, uint_td& size) const
|
1894
1966
|
{
|
1895
1967
|
short index = fieldNumByName(FieldName);
|
1896
1968
|
return getFVbin(index, size);
|
@@ -1899,11 +1971,11 @@ void* table::getFVbin(const _TCHAR* FieldName, uint_td& size)
|
|
1899
1971
|
/* offset is writen at data that is first address of data
|
1900
1972
|
* text is not converted to unicode form stored charset.
|
1901
1973
|
*/
|
1902
|
-
void* table::getFVbin(short index, uint_td& size)
|
1974
|
+
void* table::getFVbin(short index, uint_td& size) const
|
1903
1975
|
{
|
1904
1976
|
if (!checkIndex(index))
|
1905
1977
|
return NULL;
|
1906
|
-
return m_impl->fields
|
1978
|
+
return m_impl->fields.getFieldNoCheck(index).getFVbin(size);
|
1907
1979
|
}
|
1908
1980
|
|
1909
1981
|
bool table::checkIndex(short index) const
|
@@ -1952,11 +2024,6 @@ bookmark_td table::bookmarks(unsigned int index) const
|
|
1952
2024
|
return bm;
|
1953
2025
|
}
|
1954
2026
|
|
1955
|
-
/*bookmark_td* table::bookmarksPtr(unsigned int index) const
|
1956
|
-
{
|
1957
|
-
return m_impl->bookmarksPtr(index);
|
1958
|
-
}*/
|
1959
|
-
|
1960
2027
|
short_td table::doBtrvErr(HWND hWnd, _TCHAR* retbuf)
|
1961
2028
|
{
|
1962
2029
|
return nstable::tdapErr(hWnd, m_stat, (*m_tableDef)->tableName(), retbuf);
|
@@ -2566,6 +2633,12 @@ int makeSupplyValues(const _TCHAR* values[], int size,
|
|
2566
2633
|
{
|
2567
2634
|
if (size == 0) return 0;
|
2568
2635
|
memset(values, sizeof(_TCHAR*), size);
|
2636
|
+
if (value == NULL)
|
2637
|
+
{
|
2638
|
+
THROW_BZS_ERROR_WITH_CODEMSG(STATUS_FILTERSTRING_ERROR,
|
2639
|
+
_T("Invalid the value, The value is NULL."));
|
2640
|
+
//return 0;
|
2641
|
+
}
|
2569
2642
|
values[0] = value;
|
2570
2643
|
if (size < 2 || !value1) return 1;
|
2571
2644
|
values[1] = value1;
|
@@ -2597,6 +2670,12 @@ bool supplyValues(pq_handle& filter, const _TCHAR* values[], int size)
|
|
2597
2670
|
|
2598
2671
|
bool supplyValue(pq_handle& filter, int index, const _TCHAR* v)
|
2599
2672
|
{
|
2673
|
+
if (v == NULL)
|
2674
|
+
{
|
2675
|
+
THROW_BZS_ERROR_WITH_CODEMSG(STATUS_FILTERSTRING_ERROR,
|
2676
|
+
_T("Invalid the supplyValue, The supplyValue is NULL."));
|
2677
|
+
//return 0;
|
2678
|
+
}
|
2600
2679
|
return filter->supplyValue(index, v);
|
2601
2680
|
}
|
2602
2681
|
|