transactd 2.2.0 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/BUILD_UNIX-JA +6 -6
- data/README +20 -18
- data/README-JA +19 -17
- data/RELEASE_NOTE +144 -0
- data/RELEASE_NOTE-JA +153 -0
- data/bin/common/tdclc_32_2_3.dll +0 -0
- data/bin/common/tdclc_64_2_3.dll +0 -0
- data/build/common/get_ruby_path.cmake +1 -1
- data/build/swig/ruby/ruby.swg +10 -9
- data/build/swig/ruby/tdclrb_wrap.cpp +1416 -561
- data/build/swig/tdcl.i +30 -3
- data/build/tdclc/tdclc.cbproj +1 -1
- data/build/tdclc/tdclc.rc +4 -4
- data/build/tdclcpp/BUILDNUMBER.txt +1 -0
- data/build/tdclcpp/tdclcpp.rc +4 -4
- data/build/tdclcpp/tdclcpp_bc.cbproj +1 -1
- data/build/tdclrb/BUILDNUMBER.txt +1 -0
- data/build/tdclrb/tdclrb.rc +4 -4
- data/source/bzs/db/engine/mysql/database.cpp +85 -41
- data/source/bzs/db/engine/mysql/database.h +35 -5
- data/source/bzs/db/engine/mysql/mysqlInternal.h +189 -37
- data/source/bzs/db/engine/mysql/mysqlThd.cpp +21 -21
- data/source/bzs/db/protocol/tdap/client/activeTable.cpp +11 -0
- data/source/bzs/db/protocol/tdap/client/activeTable.h +1 -1
- data/source/bzs/db/protocol/tdap/client/activeTableImple.h +11 -4
- data/source/bzs/db/protocol/tdap/client/client.h +30 -1
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +2 -1
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +35 -5
- data/source/bzs/db/protocol/tdap/client/field.cpp +100 -51
- data/source/bzs/db/protocol/tdap/client/field.h +7 -7
- data/source/bzs/db/protocol/tdap/client/filter.h +20 -6
- data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +337 -58
- data/source/bzs/db/protocol/tdap/client/groupQuery.h +56 -13
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +83 -5
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +4 -1
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +2 -2
- data/source/bzs/db/protocol/tdap/client/nsTable.h +2 -1
- data/source/bzs/db/protocol/tdap/client/pooledDatabaseManager.h +20 -6
- data/source/bzs/db/protocol/tdap/client/recordset.cpp +7 -0
- data/source/bzs/db/protocol/tdap/client/recordsetImple.h +8 -4
- data/source/bzs/db/protocol/tdap/client/request.h +11 -1
- data/source/bzs/db/protocol/tdap/client/serializer.cpp +40 -2
- data/source/bzs/db/protocol/tdap/client/serializer.h +4 -2
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +1 -0
- data/source/bzs/db/protocol/tdap/client/stringConverter.h +4 -4
- data/source/bzs/db/protocol/tdap/client/table.cpp +124 -71
- data/source/bzs/db/protocol/tdap/client/table.h +8 -7
- data/source/bzs/db/protocol/tdap/client/trdormapi.h +33 -1
- data/source/bzs/db/protocol/tdap/fieldComp.h +1 -1
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +3 -1
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +20 -4
- data/source/bzs/db/protocol/tdap/mysql/request.h +14 -0
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +132 -69
- data/source/bzs/db/protocol/tdap/tdapRequest.h +18 -4
- data/source/bzs/db/protocol/tdap/tdapSchema.cpp +32 -22
- data/source/bzs/db/protocol/tdap/tdapSchema.h +69 -4
- data/source/bzs/db/protocol/tdap/tdapcapi.h +13 -5
- data/source/bzs/db/protocol/tdap/uri.h +4 -4
- data/source/bzs/db/transactd/transactd.cpp +6 -5
- data/source/bzs/env/crosscompile.cpp +17 -0
- data/source/bzs/env/crosscompile.h +4 -1
- data/source/bzs/env/mbcswchrLinux.cpp +3 -0
- data/source/bzs/example/deleteRecords.cpp +13 -0
- data/source/bzs/example/deleteRecords_c.cpp +8 -1
- data/source/bzs/example/insertRecords.cpp +14 -0
- data/source/bzs/example/insertRecords_c.cpp +8 -1
- data/source/bzs/example/ormap_c.cpp +8 -1
- data/source/bzs/example/queryData.cpp +92 -2
- data/source/bzs/example/queryData.h +3 -1
- data/source/bzs/example/readRecords.cpp +13 -0
- data/source/bzs/example/readRecords_c.cpp +8 -1
- data/source/bzs/example/updateRecords.cpp +13 -0
- data/source/bzs/example/updateRecords_c.cpp +8 -1
- data/source/bzs/example/update_with_transaction.cpp +13 -0
- data/source/bzs/example/update_with_transaction_c.cpp +8 -1
- data/source/bzs/example/useORMRecord.cpp +9 -3
- data/source/bzs/netsvc/client/iconnection.h +8 -0
- data/source/bzs/netsvc/client/tcpClient.cpp +61 -16
- data/source/bzs/netsvc/client/tcpClient.h +430 -214
- data/source/bzs/netsvc/server/serverPipe.cpp +2 -2
- data/source/bzs/test/tdclphp/transactd_Test.php +115 -19
- data/source/bzs/test/tdclphp/transactd_blob_Test.php +33 -5
- data/source/bzs/test/tdclphp/transactd_kanjischema_Test.php +21 -3
- data/source/bzs/test/tdclphp/transactd_pool_Test.php +17 -3
- data/source/bzs/test/tdclrb/transactd_blob_spec.rb +26 -8
- data/source/bzs/test/tdclrb/transactd_kanjischema_spec.rb +13 -6
- data/source/bzs/test/tdclrb/transactd_pool_spec.rb +14 -8
- data/source/bzs/test/tdclrb/transactd_spec.rb +117 -27
- data/source/bzs/test/transactdBench/scaling_bench.cpp +5 -5
- data/source/bzs/test/transactdBench/workerBase.h +2 -2
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +898 -51
- data/source/global/tdclatl/Database.cpp +12 -0
- data/source/global/tdclatl/Database.h +4 -0
- data/source/global/tdclatl/FieldDef.cpp +19 -0
- data/source/global/tdclatl/FieldDef.h +4 -0
- data/source/global/tdclatl/FieldDefs.cpp +14 -16
- data/source/global/tdclatl/GroupQuery.cpp +21 -16
- data/source/global/tdclatl/GroupQuery.h +1 -1
- data/source/global/tdclatl/QueryBase.cpp +14 -0
- data/source/global/tdclatl/QueryBase.h +2 -0
- data/source/global/tdclatl/Record.cpp +41 -10
- data/source/global/tdclatl/Record.h +1 -1
- data/source/global/tdclatl/Recordset.cpp +117 -31
- data/source/global/tdclatl/Recordset.h +6 -5
- data/source/global/tdclatl/Table.cpp +24 -28
- data/source/global/tdclatl/Table.h +3 -4
- data/source/global/tdclatl/activeTable.cpp +149 -103
- data/source/global/tdclatl/activeTable.h +1 -1
- data/source/global/tdclatl/tdclatl.idl +38 -18
- data/transactd.gemspec +1 -1
- metadata +8 -4
- data/bin/common/tdclc_32_2_2.dll +0 -0
- data/bin/common/tdclc_64_2_2.dll +0 -0
@@ -65,8 +65,7 @@ struct Imple
|
|
65
65
|
};
|
66
66
|
|
67
67
|
fieldShare::fieldShare()
|
68
|
-
: m_imple(new Imple()), myDateTimeValueByBtrv(true),
|
69
|
-
usePadChar(true), logicalToString(false)
|
68
|
+
: m_imple(new Imple()), myDateTimeValueByBtrv(true), logicalToString(false)
|
70
69
|
{
|
71
70
|
}
|
72
71
|
|
@@ -75,12 +74,12 @@ fieldShare::~fieldShare()
|
|
75
74
|
delete m_imple;
|
76
75
|
}
|
77
76
|
|
78
|
-
stringConverter* fieldShare::cv()
|
77
|
+
stringConverter* fieldShare::cv() const
|
79
78
|
{
|
80
79
|
return m_imple->cv;
|
81
80
|
}
|
82
81
|
|
83
|
-
bzs::rtl::stringBuffer* fieldShare::strBufs()
|
82
|
+
bzs::rtl::stringBuffer* fieldShare::strBufs() const
|
84
83
|
{
|
85
84
|
return &m_imple->strBufs;
|
86
85
|
}
|
@@ -160,7 +159,11 @@ void fielddefs::addAllFileds(tabledef* def)
|
|
160
159
|
{
|
161
160
|
m_imple->fields.clear();
|
162
161
|
for (int i = 0; i < def->fieldCount; ++i)
|
163
|
-
|
162
|
+
{
|
163
|
+
fielddef* fd = &def->fieldDefs[i];
|
164
|
+
fd->setPadCharDefaultSettings();
|
165
|
+
push_back(fd);
|
166
|
+
}
|
164
167
|
}
|
165
168
|
|
166
169
|
void fielddefs::push_back(const fielddef* p, bool rePosition)
|
@@ -357,7 +360,6 @@ inline __int64 getValue64(const fielddef& fd, const uchar_td* ptr)
|
|
357
360
|
case ft_uinteger:
|
358
361
|
case ft_logical:
|
359
362
|
case ft_bit:
|
360
|
-
case ft_currency:
|
361
363
|
case ft_date:
|
362
364
|
case ft_time:
|
363
365
|
case ft_timestamp:
|
@@ -386,6 +388,24 @@ inline __int64 getValue64(const fielddef& fd, const uchar_td* ptr)
|
|
386
388
|
ret = *((__int64*)(ptr + fd.pos));
|
387
389
|
break;
|
388
390
|
}
|
391
|
+
break;
|
392
|
+
case ft_currency:
|
393
|
+
ret = (*((__int64*)((char*)ptr + fd.pos)) / 10000);
|
394
|
+
break;
|
395
|
+
case ft_bfloat:
|
396
|
+
case ft_float:
|
397
|
+
switch (fd.len)
|
398
|
+
{
|
399
|
+
case 4:
|
400
|
+
ret = (__int64)*((float*)((char*)ptr + fd.pos));
|
401
|
+
break;
|
402
|
+
case 8:
|
403
|
+
ret = (__int64)*((double*)((char*)ptr + fd.pos));
|
404
|
+
case 10: // long double
|
405
|
+
ret = (__int64)*((long double*)((char*)ptr + fd.pos));
|
406
|
+
break;
|
407
|
+
}
|
408
|
+
break;
|
389
409
|
}
|
390
410
|
}
|
391
411
|
return ret;
|
@@ -455,16 +475,18 @@ void field::setFVA(const char* data)
|
|
455
475
|
switch (m_fd->type)
|
456
476
|
{
|
457
477
|
case ft_string:
|
458
|
-
|
459
|
-
|
478
|
+
if (m_fd->usePadChar())
|
479
|
+
return store<stringStore, char, char>(p, data, *m_fd, m_fds->cv());
|
480
|
+
return store<binaryStore, char, char>(p, data, *m_fd, m_fds->cv());
|
460
481
|
case ft_note:
|
461
482
|
case ft_zstring:
|
462
483
|
return store<zstringStore, char, char>(p, data, *m_fd, m_fds->cv());
|
463
484
|
case ft_wzstring:
|
464
485
|
return store<wzstringStore, WCHAR, char>(p, data, *m_fd, m_fds->cv());
|
465
486
|
case ft_wstring:
|
466
|
-
|
467
|
-
|
487
|
+
if (m_fd->usePadChar())
|
488
|
+
return store<wstringStore, WCHAR, char>(p, data, *m_fd, m_fds->cv());
|
489
|
+
return store<wbinaryStore, WCHAR, char>(p, data, *m_fd, m_fds->cv());
|
468
490
|
case ft_mychar:
|
469
491
|
return store<myCharStore, char, char>(p, data, *m_fd, m_fds->cv());
|
470
492
|
case ft_myvarchar:
|
@@ -483,7 +505,7 @@ void field::setFVA(const char* data)
|
|
483
505
|
case ft_mytext:
|
484
506
|
{
|
485
507
|
char* tmp = blobStore<char>(p, data, *m_fd, m_fds->cv());
|
486
|
-
m_fds->blobPushBack(tmp);
|
508
|
+
const_cast<fielddefs*>(m_fds)->blobPushBack(tmp);
|
487
509
|
return;
|
488
510
|
}
|
489
511
|
case ft_decimal:
|
@@ -577,16 +599,18 @@ void field::setFVW(const wchar_t* data)
|
|
577
599
|
switch (m_fd->type)
|
578
600
|
{
|
579
601
|
case ft_string:
|
580
|
-
|
581
|
-
|
602
|
+
if (m_fd->usePadChar())
|
603
|
+
return store<stringStore, char, WCHAR>(p, data, *m_fd, m_fds->cv());
|
604
|
+
return store<binaryStore, char, WCHAR>(p, data, *m_fd, m_fds->cv());
|
582
605
|
case ft_note:
|
583
606
|
case ft_zstring:
|
584
607
|
return store<zstringStore, char, WCHAR>(p, data, *m_fd, m_fds->cv());
|
585
608
|
case ft_wzstring:
|
586
609
|
return store<wzstringStore, WCHAR, WCHAR>(p, data, *m_fd, m_fds->cv());
|
587
610
|
case ft_wstring:
|
588
|
-
|
589
|
-
|
611
|
+
if (m_fd->usePadChar())
|
612
|
+
return store<wstringStore, WCHAR, WCHAR>(p, data, *m_fd, m_fds->cv());
|
613
|
+
return store<wbinaryStore, WCHAR, WCHAR>(p, data, *m_fd, m_fds->cv());
|
590
614
|
case ft_mychar:
|
591
615
|
return store<myCharStore, char, WCHAR>(p, data, *m_fd, m_fds->cv());
|
592
616
|
case ft_myvarchar:
|
@@ -607,7 +631,7 @@ void field::setFVW(const wchar_t* data)
|
|
607
631
|
case ft_mytext:
|
608
632
|
{
|
609
633
|
char* tmp = blobStore<WCHAR>(p, data, *m_fd, m_fds->cv());
|
610
|
-
m_fds->blobPushBack(tmp);
|
634
|
+
const_cast<fielddefs*>(m_fds)->blobPushBack(tmp);
|
611
635
|
return;
|
612
636
|
}
|
613
637
|
|
@@ -1110,7 +1134,7 @@ const wchar_t* field::getFVWstr() const
|
|
1110
1134
|
{
|
1111
1135
|
case ft_string:
|
1112
1136
|
return read<stringStore, char, WCHAR>(data, m_fds->strBufs(), *m_fd,
|
1113
|
-
m_fds->cv(),
|
1137
|
+
m_fds->cv(), m_fd->trimPadChar());
|
1114
1138
|
case ft_note:
|
1115
1139
|
case ft_zstring:
|
1116
1140
|
return read<zstringStore, char, WCHAR>(data, m_fds->strBufs(), *m_fd,
|
@@ -1120,10 +1144,10 @@ const wchar_t* field::getFVWstr() const
|
|
1120
1144
|
m_fds->cv());
|
1121
1145
|
case ft_wstring:
|
1122
1146
|
return read<wstringStore, WCHAR, WCHAR>(
|
1123
|
-
data, m_fds->strBufs(), *m_fd, m_fds->cv(),
|
1147
|
+
data, m_fds->strBufs(), *m_fd, m_fds->cv(), m_fd->trimPadChar());
|
1124
1148
|
case ft_mychar:
|
1125
1149
|
return read<myCharStore, char, WCHAR>(data, m_fds->strBufs(), *m_fd,
|
1126
|
-
m_fds->cv(),
|
1150
|
+
m_fds->cv(), m_fd->trimPadChar());
|
1127
1151
|
case ft_myvarchar:
|
1128
1152
|
return read<myVarCharStore, char, WCHAR>(data, m_fds->strBufs(), *m_fd,
|
1129
1153
|
m_fds->cv());
|
@@ -1133,7 +1157,7 @@ const wchar_t* field::getFVWstr() const
|
|
1133
1157
|
*m_fd, m_fds->cv());
|
1134
1158
|
case ft_mywchar:
|
1135
1159
|
return read<myWcharStore, WCHAR, WCHAR>(
|
1136
|
-
data, m_fds->strBufs(), *m_fd, m_fds->cv(),
|
1160
|
+
data, m_fds->strBufs(), *m_fd, m_fds->cv(), m_fd->trimPadChar());
|
1137
1161
|
case ft_mywvarchar:
|
1138
1162
|
return read<myWvarCharStore, WCHAR, WCHAR>(data, m_fds->strBufs(),
|
1139
1163
|
*m_fd, m_fds->cv());
|
@@ -1257,7 +1281,7 @@ const char* field::getFVAstr() const
|
|
1257
1281
|
|
1258
1282
|
case ft_string:
|
1259
1283
|
return read<stringStore, char, char>(data, m_fds->strBufs(), *m_fd,
|
1260
|
-
m_fds->cv(),
|
1284
|
+
m_fds->cv(), m_fd->trimPadChar());
|
1261
1285
|
case ft_note:
|
1262
1286
|
case ft_zstring:
|
1263
1287
|
return read<zstringStore, char, char>(data, m_fds->strBufs(), *m_fd,
|
@@ -1267,10 +1291,10 @@ const char* field::getFVAstr() const
|
|
1267
1291
|
m_fds->cv());
|
1268
1292
|
case ft_wstring:
|
1269
1293
|
return read<wstringStore, WCHAR, char>(data, m_fds->strBufs(), *m_fd,
|
1270
|
-
m_fds->cv(),
|
1294
|
+
m_fds->cv(), m_fd->trimPadChar());
|
1271
1295
|
case ft_mychar:
|
1272
1296
|
return read<myCharStore, char, char>(data, m_fds->strBufs(), *m_fd,
|
1273
|
-
m_fds->cv(),
|
1297
|
+
m_fds->cv(), m_fd->trimPadChar());
|
1274
1298
|
case ft_myvarchar:
|
1275
1299
|
return read<myVarCharStore, char, char>(data, m_fds->strBufs(), *m_fd,
|
1276
1300
|
m_fds->cv());
|
@@ -1280,7 +1304,7 @@ const char* field::getFVAstr() const
|
|
1280
1304
|
m_fds->cv());
|
1281
1305
|
case ft_mywchar:
|
1282
1306
|
return read<myWcharStore, WCHAR, char>(data, m_fds->strBufs(), *m_fd,
|
1283
|
-
m_fds->cv(),
|
1307
|
+
m_fds->cv(), m_fd->trimPadChar());
|
1284
1308
|
case ft_mywvarchar:
|
1285
1309
|
return read<myWvarCharStore, WCHAR, char>(data, m_fds->strBufs(), *m_fd,
|
1286
1310
|
m_fds->cv());
|
@@ -1410,6 +1434,8 @@ __int64 field::getFV64() const
|
|
1410
1434
|
case ft_mydatetime:
|
1411
1435
|
case ft_mytimestamp:
|
1412
1436
|
return (__int64) * ((__int64*)((char*)m_ptr + m_fd->pos));
|
1437
|
+
case ft_float:
|
1438
|
+
return (__int64) *((double*)((char*)m_ptr + m_fd->pos));
|
1413
1439
|
}
|
1414
1440
|
return 0;
|
1415
1441
|
case 7:
|
@@ -1501,6 +1527,7 @@ void field::setFV(const void* data, uint_td size)
|
|
1501
1527
|
{
|
1502
1528
|
if (!m_ptr)
|
1503
1529
|
return;
|
1530
|
+
char* p = (char*)m_ptr + m_fd->pos;
|
1504
1531
|
switch (m_fd->type)
|
1505
1532
|
{
|
1506
1533
|
case ft_myvarbinary:
|
@@ -1511,33 +1538,33 @@ void field::setFV(const void* data, uint_td size)
|
|
1511
1538
|
{
|
1512
1539
|
int sizeByte = m_fd->varLenBytes();
|
1513
1540
|
size = std::min<uint_td>((uint_td)(m_fd->len - sizeByte), size);
|
1514
|
-
memset(
|
1515
|
-
memcpy(
|
1516
|
-
memcpy(
|
1541
|
+
memset(p, 0, m_fd->len);
|
1542
|
+
memcpy(p, &size, sizeByte);
|
1543
|
+
memcpy(p + sizeByte, data, size);
|
1517
1544
|
break;
|
1518
1545
|
}
|
1519
1546
|
case ft_myblob:
|
1520
1547
|
case ft_mytext:
|
1521
1548
|
{
|
1522
1549
|
int sizeByte = m_fd->len - 8;
|
1523
|
-
memset(
|
1524
|
-
memcpy(
|
1525
|
-
memcpy(
|
1550
|
+
memset(p, 0, m_fd->len);
|
1551
|
+
memcpy(p, &size, sizeByte);
|
1552
|
+
memcpy(p + sizeByte, &data, sizeof(char*));
|
1526
1553
|
break;
|
1527
1554
|
}
|
1528
1555
|
case ft_lvar:
|
1529
1556
|
{
|
1530
1557
|
int sizeByte = 2;
|
1531
1558
|
size = std::min<uint_td>((uint_td)(m_fd->len - sizeByte), size);
|
1532
|
-
memset(
|
1533
|
-
memcpy(
|
1534
|
-
memcpy(
|
1559
|
+
memset(p, 0, m_fd->len);
|
1560
|
+
memcpy(p, &size, sizeByte);
|
1561
|
+
memcpy(p + sizeByte, data, size);
|
1535
1562
|
break;
|
1536
1563
|
}
|
1537
1564
|
default:
|
1538
1565
|
size = std::min<uint_td>((uint_td)m_fd->len, size);
|
1539
|
-
memset(
|
1540
|
-
memcpy(
|
1566
|
+
memset(p, 0, m_fd->len);
|
1567
|
+
memcpy(p, data, size);
|
1541
1568
|
}
|
1542
1569
|
}
|
1543
1570
|
|
@@ -1549,6 +1576,7 @@ void* field::getFVbin(uint_td& size) const
|
|
1549
1576
|
if (!m_ptr)
|
1550
1577
|
return 0;
|
1551
1578
|
|
1579
|
+
char* p = (char*)m_ptr + m_fd->pos;
|
1552
1580
|
switch (m_fd->type)
|
1553
1581
|
{
|
1554
1582
|
case ft_myvarbinary:
|
@@ -1559,18 +1587,18 @@ void* field::getFVbin(uint_td& size) const
|
|
1559
1587
|
{
|
1560
1588
|
int sizeByte = m_fd->varLenBytes();
|
1561
1589
|
size = 0;
|
1562
|
-
memcpy(&size,
|
1563
|
-
return (void*)(
|
1590
|
+
memcpy(&size, p, sizeByte);
|
1591
|
+
return (void*)(p + sizeByte);
|
1564
1592
|
}
|
1565
1593
|
case ft_myblob:
|
1566
1594
|
case ft_mytext:
|
1567
1595
|
{
|
1568
1596
|
int sizeByte = m_fd->len - 8;
|
1569
1597
|
size = 0;
|
1570
|
-
memcpy(&size,
|
1598
|
+
memcpy(&size, p, sizeByte);
|
1571
1599
|
if (size)
|
1572
1600
|
{
|
1573
|
-
char** ptr = (char**)(
|
1601
|
+
char** ptr = (char**)(p + sizeByte);
|
1574
1602
|
return (void*)*ptr;
|
1575
1603
|
}
|
1576
1604
|
return NULL;
|
@@ -1579,9 +1607,12 @@ void* field::getFVbin(uint_td& size) const
|
|
1579
1607
|
{
|
1580
1608
|
int sizeByte = 2;
|
1581
1609
|
size = 0;
|
1582
|
-
memcpy(&size,
|
1583
|
-
return (void*)(
|
1610
|
+
memcpy(&size, p, sizeByte);
|
1611
|
+
return (void*)(p + sizeByte);
|
1584
1612
|
}
|
1613
|
+
default:
|
1614
|
+
size = m_fd->len;
|
1615
|
+
return (void*)(p);
|
1585
1616
|
}
|
1586
1617
|
return NULL;
|
1587
1618
|
}
|
@@ -1818,27 +1849,27 @@ inline int compNumberU24(const field& l, const field& r, char logType)
|
|
1818
1849
|
|
1819
1850
|
inline int compMem(const field& l, const field& r, char logType)
|
1820
1851
|
{
|
1821
|
-
return memcmp((const char*)l.ptr(), (const char*)r.ptr(),
|
1852
|
+
return memcmp((const char*)l.ptr(), (const char*)r.ptr(), r.len());
|
1822
1853
|
}
|
1823
1854
|
|
1824
1855
|
inline int compString(const field& l, const field& r, char logType)
|
1825
1856
|
{
|
1826
|
-
return strncmp((const char*)l.ptr(), (const char*)r.ptr(),
|
1857
|
+
return strncmp((const char*)l.ptr(), (const char*)r.ptr(), r.len());
|
1827
1858
|
}
|
1828
1859
|
|
1829
1860
|
inline int compiString(const field& l, const field& r, char logType)
|
1830
1861
|
{
|
1831
|
-
return _strnicmp((const char*)l.ptr(), (const char*)r.ptr(),
|
1862
|
+
return _strnicmp((const char*)l.ptr(), (const char*)r.ptr(), r.len());
|
1832
1863
|
}
|
1833
1864
|
|
1834
|
-
|
1865
|
+
int compWString(const field& l, const field& r, char logType)
|
1835
1866
|
{
|
1836
|
-
return wcsncmp16((char16_t*)l.ptr(), (char16_t*)r.ptr(),
|
1867
|
+
return wcsncmp16((char16_t*)l.ptr(), (char16_t*)r.ptr(), r.len());
|
1837
1868
|
}
|
1838
1869
|
|
1839
|
-
|
1870
|
+
int compiWString(const field& l, const field& r, char logType)
|
1840
1871
|
{
|
1841
|
-
return wcsnicmp16((char16_t*)l.ptr(), (char16_t*)r.ptr(),
|
1872
|
+
return wcsnicmp16((char16_t*)l.ptr(), (char16_t*)r.ptr(), r.len());
|
1842
1873
|
}
|
1843
1874
|
|
1844
1875
|
template <class T>
|
@@ -1964,18 +1995,36 @@ bool field::isCompPartAndMakeValue()
|
|
1964
1995
|
bool ret = false;
|
1965
1996
|
if (m_fd->isStringType())
|
1966
1997
|
{
|
1998
|
+
m_fd->setPadCharSettings(false, true);
|
1999
|
+
/*bool trim = m_fd->trimPadChar();
|
2000
|
+
bool use = m_fd->usePadChar();
|
2001
|
+
bool sp = (!trim || use);
|
2002
|
+
if (sp)
|
2003
|
+
m_fd->setPadCharSettings(false, true);*/
|
1967
2004
|
_TCHAR* p = (_TCHAR*)getFVstr();
|
1968
2005
|
if (p)
|
1969
2006
|
{
|
1970
2007
|
size_t n = _tcslen(p);
|
1971
|
-
if (n
|
2008
|
+
if (n)
|
1972
2009
|
{
|
1973
|
-
p[n - 1]
|
1974
|
-
|
2010
|
+
if (p[n - 1] == _T('*'))
|
2011
|
+
{
|
2012
|
+
p[n - 1] = 0x00;
|
2013
|
+
if (m_fd->type == ft_mychar)
|
2014
|
+
m_fd->type = ft_string;
|
2015
|
+
else if (m_fd->type == ft_mywchar)
|
2016
|
+
m_fd->type = ft_wstring;
|
2017
|
+
m_fd->setPadCharSettings(false, true);
|
2018
|
+
setFV(p);
|
2019
|
+
|
2020
|
+
ret = true;
|
2021
|
+
}
|
1975
2022
|
}
|
1976
2023
|
}
|
1977
2024
|
else
|
1978
2025
|
setFV(_T(""));
|
2026
|
+
/*if (sp)
|
2027
|
+
m_fd->setPadCharSettings(use, trim); */
|
1979
2028
|
}
|
1980
2029
|
return ret;
|
1981
2030
|
}
|
@@ -53,8 +53,6 @@ private:
|
|
53
53
|
struct
|
54
54
|
{
|
55
55
|
unsigned char myDateTimeValueByBtrv : 1;
|
56
|
-
unsigned char trimPadChar : 1;
|
57
|
-
unsigned char usePadChar : 1;
|
58
56
|
unsigned char logicalToString : 1;
|
59
57
|
};
|
60
58
|
fieldShare(const fieldShare&); // no implememt
|
@@ -64,8 +62,8 @@ protected:
|
|
64
62
|
fieldShare();
|
65
63
|
|
66
64
|
virtual ~fieldShare();
|
67
|
-
stringConverter* cv();
|
68
|
-
bzs::rtl::stringBuffer* strBufs();
|
65
|
+
stringConverter* cv() const;
|
66
|
+
bzs::rtl::stringBuffer* strBufs() const;
|
69
67
|
void blobPushBack(char* p);
|
70
68
|
void blobClear();
|
71
69
|
};
|
@@ -115,6 +113,8 @@ public:
|
|
115
113
|
|
116
114
|
typedef int (*compFieldFunc)(const class field& l, const class field& r,
|
117
115
|
char logType);
|
116
|
+
extern int compWString(const field& l, const field& r, char logType);
|
117
|
+
extern int compiWString(const field& l, const field& r, char logType);
|
118
118
|
|
119
119
|
/** @endcond */
|
120
120
|
|
@@ -128,9 +128,8 @@ class DLLLIB field
|
|
128
128
|
/** @endcond */
|
129
129
|
fielddef* m_fd;
|
130
130
|
unsigned char* m_ptr;
|
131
|
-
class fielddefs* m_fds;
|
131
|
+
const class fielddefs* m_fds;
|
132
132
|
|
133
|
-
compFieldFunc getCompFunc(char logType) const;
|
134
133
|
int blobLenBytes() const { return m_fd->blobLenBytes(); }
|
135
134
|
|
136
135
|
private:
|
@@ -180,7 +179,7 @@ public:
|
|
180
179
|
|
181
180
|
public:
|
182
181
|
/** @cond INTERNAL */
|
183
|
-
inline field(unsigned char* ptr, const fielddef& fd, fielddefs* fds)
|
182
|
+
inline field(unsigned char* ptr, const fielddef& fd, const fielddefs* fds)
|
184
183
|
: m_fd((fielddef*)&fd), m_ptr(ptr), m_fds(fds){};
|
185
184
|
/** @endcond */
|
186
185
|
|
@@ -314,6 +313,7 @@ public:
|
|
314
313
|
/** @cond INTERNAL */
|
315
314
|
bool isCompPartAndMakeValue();
|
316
315
|
void offsetBlobPtr(size_t offset);
|
316
|
+
compFieldFunc getCompFunc(char logType) const;
|
317
317
|
/** @endcond */
|
318
318
|
};
|
319
319
|
|
@@ -42,7 +42,7 @@ namespace client
|
|
42
42
|
|
43
43
|
|
44
44
|
/** Length of compare
|
45
|
-
* if part of string or zstring then return strlen.
|
45
|
+
* if part of string or zstring then return strlen * sizeof(char or wchar).
|
46
46
|
*/
|
47
47
|
inline uint_td compDataLen(const fielddef& fd, const uchar_td* ptr, bool part)
|
48
48
|
{
|
@@ -50,14 +50,16 @@ inline uint_td compDataLen(const fielddef& fd, const uchar_td* ptr, bool part)
|
|
50
50
|
if (part)
|
51
51
|
{
|
52
52
|
if ((fd.type == ft_string) || (fd.type == ft_zstring) ||
|
53
|
-
|
53
|
+
(fd.type == ft_note) || (fd.type == ft_mychar))
|
54
54
|
length = (uint_td)strlen((const char*)ptr);
|
55
|
-
else if ((fd.type == ft_wstring) || (fd.type == ft_wzstring)
|
56
|
-
|
55
|
+
else if ((fd.type == ft_wstring) || (fd.type == ft_wzstring) ||
|
56
|
+
(fd.type == ft_mywchar))
|
57
|
+
length = (uint_td)strlen16((char16_t*)ptr)*sizeof(char16_t);
|
57
58
|
}
|
58
59
|
return length;
|
59
60
|
}
|
60
61
|
|
62
|
+
|
61
63
|
inline bool verType(uchar_td type)
|
62
64
|
{
|
63
65
|
if (((type >= ft_myvarchar) && (type <= ft_mywvarbinary)) ||
|
@@ -362,9 +364,11 @@ public:
|
|
362
364
|
memcpy(data + varlen, fdd.keyData(buf), copylen);
|
363
365
|
delete [] buf;
|
364
366
|
}
|
365
|
-
|
367
|
+
|
366
368
|
if (!part && (fdd.varLenBytes() || fdd.blobLenBytes()))
|
367
369
|
logType |= CMPLOGICAL_VAR_COMP_ALL; // match complate
|
370
|
+
else
|
371
|
+
logType &= ~CMPLOGICAL_VAR_COMP_ALL;
|
368
372
|
}
|
369
373
|
|
370
374
|
bool setParam(table* tb, const _TCHAR* name, const _TCHAR* type,
|
@@ -592,6 +596,12 @@ class filter
|
|
592
596
|
|
593
597
|
};
|
594
598
|
|
599
|
+
struct
|
600
|
+
{
|
601
|
+
bool m_stopAtLimit : 1;
|
602
|
+
|
603
|
+
};
|
604
|
+
|
595
605
|
struct bufSize
|
596
606
|
{
|
597
607
|
bufSize():logic(0), seeks(0), select(0),retRowSize(0) {}
|
@@ -801,6 +811,8 @@ class filter
|
|
801
811
|
queryBase::combineCondition);
|
802
812
|
m_withBookmark = q->isBookmarkAlso();
|
803
813
|
m_cachedOptimize = q->getOptimize();
|
814
|
+
m_stopAtLimit = q->isStopAtLimit();
|
815
|
+
|
804
816
|
|
805
817
|
if (q->isAll())
|
806
818
|
addAllFields();
|
@@ -981,7 +993,7 @@ class filter
|
|
981
993
|
: m_tb(tb), m_seeksWritedCount(0), m_extendBuflen(0), m_stat(0),
|
982
994
|
m_preparedId(0),m_ignoreFields(false), m_seeksMode(false),
|
983
995
|
m_useOptimize(true),m_withBookmark(true), m_hasManyJoin(false),
|
984
|
-
m_preparingMode(false),m_ddba(false)
|
996
|
+
m_preparingMode(false),m_ddba(false),m_stopAtLimit(false)
|
985
997
|
{
|
986
998
|
m_isTransactd = m_tb->isUseTransactd();
|
987
999
|
m_ddba = m_isTransactd;
|
@@ -1272,6 +1284,8 @@ public:
|
|
1272
1284
|
return false;
|
1273
1285
|
}
|
1274
1286
|
|
1287
|
+
inline bool isStopAtLimit() const {return m_stopAtLimit; }
|
1288
|
+
|
1275
1289
|
bool checkFindDirection(ushort_td op)
|
1276
1290
|
{
|
1277
1291
|
bool ret;
|