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
|
@@ -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
|
|