transactd 2.0.1 → 2.1.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/BUILD_UNIX-JA +6 -6
- data/README +16 -16
- data/README-JA +16 -16
- data/bin/common/tdclc_32_2_1.dll +0 -0
- data/bin/common/tdclc_64_2_1.dll +0 -0
- data/build/common/transactd_cl_common.cmake +0 -1
- data/build/common/transactd_common.cmake +28 -38
- data/build/swig/ruby/ruby.swg +36 -30
- data/build/swig/ruby/tdclrb_wrap.cpp +35016 -0
- data/build/swig/tdcl.i +217 -62
- data/build/tdclc/CMakeLists.txt +14 -26
- data/build/tdclc/libtdclcm.map +4 -0
- data/build/tdclc/tdclc.cbproj +1 -1
- data/build/tdclc/tdclc.rc +0 -0
- data/build/tdclcpp/CMakeLists.txt +7 -22
- data/build/tdclcpp/tdclcpp.rc +0 -0
- data/build/tdclcpp/tdclcpp_bc.cbproj +1 -1
- data/build/tdclrb/CMakeLists.txt +7 -49
- data/build/tdclrb/tdclrb.rc +62 -0
- data/source/bzs/db/blobBuffer.h +5 -0
- data/source/bzs/db/blobStructs.h +2 -0
- data/source/bzs/db/engine/mysql/IReadRecords.h +9 -0
- data/source/bzs/db/engine/mysql/database.cpp +391 -169
- data/source/bzs/db/engine/mysql/database.h +178 -40
- data/source/bzs/db/engine/mysql/dbManager.cpp +45 -3
- data/source/bzs/db/engine/mysql/dbManager.h +3 -39
- data/source/bzs/db/engine/mysql/errorMessage.cpp +11 -7
- data/source/bzs/db/engine/mysql/errorMessage.h +1 -1
- data/source/bzs/db/engine/mysql/mydebuglog.cpp +1 -2
- data/source/bzs/db/engine/mysql/mysqlInternal.h +8 -8
- data/source/bzs/db/engine/mysql/mysqlThd.cpp +11 -0
- data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +1 -1
- data/source/bzs/db/protocol/tdap/client/activeTable.cpp +41 -6
- data/source/bzs/db/protocol/tdap/client/activeTable.h +177 -8
- data/source/bzs/db/protocol/tdap/client/activeTableImple.h +141 -62
- data/source/bzs/db/protocol/tdap/client/client.cpp +39 -35
- data/source/bzs/db/protocol/tdap/client/client.h +52 -25
- data/source/bzs/db/protocol/tdap/client/connectionPool.cpp +17 -0
- data/source/bzs/db/protocol/tdap/client/connectionPool.h +1 -0
- data/source/bzs/db/protocol/tdap/client/database.cpp +5 -1
- data/source/bzs/db/protocol/tdap/client/database.h +1 -1
- data/source/bzs/db/protocol/tdap/client/databaseFactory.cpp +49 -12
- data/source/bzs/db/protocol/tdap/client/databaseManager.h +42 -5
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +4 -2
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +71 -41
- data/source/bzs/db/protocol/tdap/client/errorMessage_ja.cpp +49 -49
- data/source/bzs/db/protocol/tdap/client/field.cpp +22 -13
- data/source/bzs/db/protocol/tdap/client/field.h +7 -3
- data/source/bzs/db/protocol/tdap/client/fieldDDF.cpp +1 -1
- data/source/bzs/db/protocol/tdap/client/fieldNameAlias.cpp +0 -1
- data/source/bzs/db/protocol/tdap/client/fieldNameAlias.h +1 -0
- data/source/bzs/db/protocol/tdap/client/fields.h +111 -24
- data/source/bzs/db/protocol/tdap/client/fileDDF.cpp +1 -1
- data/source/bzs/db/protocol/tdap/client/filter.h +687 -310
- data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +12 -4
- data/source/bzs/db/protocol/tdap/client/indexDDF.cpp +1 -1
- data/source/bzs/db/protocol/tdap/client/memRecord.cpp +190 -32
- data/source/bzs/db/protocol/tdap/client/memRecord.h +64 -22
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +4 -4
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +4 -2
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +6 -3
- data/source/bzs/db/protocol/tdap/client/nsTable.h +1 -1
- data/source/bzs/db/protocol/tdap/client/pooledDatabaseManager.h +19 -8
- data/source/bzs/db/protocol/tdap/client/recordsetImple.h +194 -87
- data/source/bzs/db/protocol/tdap/client/request.h +84 -26
- data/source/bzs/db/protocol/tdap/client/stringConverter.h +22 -12
- data/source/bzs/db/protocol/tdap/client/table.cpp +494 -286
- data/source/bzs/db/protocol/tdap/client/table.h +48 -5
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +133 -87
- data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +22 -22
- data/source/bzs/db/protocol/tdap/client/trdormapi.h +43 -18
- data/source/bzs/db/protocol/tdap/client/trnsctcl.def +3 -3
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +1 -0
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +268 -74
- data/source/bzs/db/protocol/tdap/mysql/request.h +4 -4
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +179 -43
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +4 -4
- data/source/bzs/db/protocol/tdap/tdapRequest.h +15 -14
- data/source/bzs/db/protocol/tdap/tdapSchema.h +125 -90
- data/source/bzs/db/protocol/tdap/tdapcapi.h +46 -5
- data/source/bzs/db/transactd/appModule.h +1 -1
- data/source/bzs/db/transactd/connManager.cpp +2 -0
- data/source/bzs/db/transactd/transactd.cpp +1 -0
- data/source/bzs/env/compiler.h +10 -0
- data/source/bzs/env/mbcswchrLinux.cpp +42 -6
- data/source/bzs/env/mbcswchrLinux.h +40 -12
- data/source/bzs/example/queryData.cpp +33 -4
- data/source/bzs/netsvc/client/iconnection.h +107 -0
- data/source/bzs/netsvc/client/tcpClient.cpp +15 -1
- data/source/bzs/netsvc/client/tcpClient.h +96 -87
- data/source/bzs/netsvc/server/serverCpt.cpp +5 -6
- data/source/bzs/rtl/benchmark.cpp +2 -2
- data/source/bzs/rtl/stringBuffers.cpp +3 -3
- data/source/bzs/rtl/stringBuffers.h +2 -2
- data/source/bzs/test/tdclatl/bench_query_atl.js +92 -99
- data/source/bzs/test/tdclatl/test_query_atl.js +224 -115
- data/source/bzs/test/tdclphp/bench.php +126 -101
- data/source/bzs/test/tdclphp/transactd_Test.php +1122 -158
- data/source/bzs/test/tdclrb/bench_tdclcpp.rb +12 -14
- data/source/bzs/test/tdclrb/transactd_spec.rb +1127 -142
- data/source/bzs/test/transactdBench/query_bench.cpp +32 -15
- data/source/bzs/test/transactdBench/scaling_bench.cpp +32 -7
- data/source/bzs/test/transactdBench/transactdBench.cpp +1 -1
- data/source/bzs/test/transactdBench/workerBase.h +46 -0
- data/source/bzs/test/transactdBench/workerMySQLImple.h +15 -7
- data/source/bzs/test/transactdBench/workerTransactdImple.h +10 -18
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +1487 -174
- data/source/global/ormsrcgen/main.cpp +2 -0
- data/source/global/tdclatl/Database.cpp +2 -2
- data/source/global/tdclatl/Database.h +1 -1
- data/source/global/tdclatl/FieldDefs.cpp +0 -3
- data/source/global/tdclatl/PooledDbManager.cpp +2 -2
- data/source/global/tdclatl/PooledDbManager.h +1 -1
- data/source/global/tdclatl/PreparedQuery.cpp +53 -0
- data/source/global/tdclatl/PreparedQuery.h +61 -0
- data/source/global/tdclatl/QueryBase.cpp +2 -1
- data/source/global/tdclatl/QueryBase.h +1 -1
- data/source/global/tdclatl/Record.cpp +3 -15
- data/source/global/tdclatl/Recordset.cpp +15 -10
- data/source/global/tdclatl/Recordset.h +3 -0
- data/source/global/tdclatl/Table.cpp +42 -7
- data/source/global/tdclatl/Table.h +3 -1
- data/source/global/tdclatl/activeTable.cpp +264 -76
- data/source/global/tdclatl/activeTable.h +12 -3
- data/source/global/tdclatl/tdclatl.idl +92 -10
- data/source/linux/charsetConvert.h +7 -7
- data/transactd.gemspec +14 -27
- metadata +18 -27
- data/bin/common/tdclc_32_2_0.dll +0 -0
- data/bin/common/tdclc_64_2_0.dll +0 -0
- data/build/swig/php/generate.cmake.in +0 -56
- data/build/swig/php/generate.cmd.in +0 -47
- data/build/swig/php/php.swg +0 -197
- data/build/swig/php/transactd.no_yield.php +0 -4494
- data/build/swig/php/transactd.no_yield.php.git.patch +0 -685
- data/build/swig/php/transactd.no_yield.php.patch +0 -685
- data/build/swig/php/transactd.yield.php +0 -4461
- data/build/swig/php/transactd.yield.php.git.patch +0 -652
- data/build/swig/php/transactd.yield.php.patch +0 -652
- data/build/swig/ruby/generate.cmake.in +0 -35
- data/build/swig/ruby/generate.cmd.in +0 -19
- data/build/tdclc/BUILDNUMBER.txt +0 -1
- data/build/tdclcpp/BUILDNUMBER.txt +0 -1
- data/build/tdclrb/BUILDNUMBER.txt +0 -1
- data/build/tdclrb/GEM_RELEASE_VERSION +0 -1
|
@@ -157,11 +157,19 @@ struct recordsetQueryImple
|
|
|
157
157
|
std::vector<char> combine;
|
|
158
158
|
short endIndex;
|
|
159
159
|
fielddefs compFields;
|
|
160
|
-
recordsetQueryImple() {}
|
|
160
|
+
recordsetQueryImple() : row(NULL) {}
|
|
161
161
|
recordsetQueryImple(const recordsetQueryImple& r)
|
|
162
162
|
: row(r.row), compType(r.compType), indexes(r.indexes),
|
|
163
163
|
combine(r.combine), endIndex(r.endIndex), compFields(r.compFields)
|
|
164
164
|
{
|
|
165
|
+
if (row)
|
|
166
|
+
row->addref();
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
~recordsetQueryImple()
|
|
170
|
+
{
|
|
171
|
+
if (row)
|
|
172
|
+
row->release();
|
|
165
173
|
}
|
|
166
174
|
};
|
|
167
175
|
|
|
@@ -214,9 +222,9 @@ void recordsetQuery::init(const fielddefs* fdinfo)
|
|
|
214
222
|
m_imple->indexes.push_back(index);
|
|
215
223
|
m_imple->compFields.push_back(&((*fdinfo)[index]), true /*rePosition*/);
|
|
216
224
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
m_imple->row
|
|
225
|
+
m_imple->row = memoryRecord::create(m_imple->compFields);
|
|
226
|
+
m_imple->row->addref();
|
|
227
|
+
m_imple->row->setRecordData(autoMemory::create(), 0, 0, &m_imple->endIndex, true);
|
|
220
228
|
|
|
221
229
|
int index = 0;
|
|
222
230
|
for (int i = 0; i < (int)tokns.size(); i += 4)
|
|
@@ -20,6 +20,8 @@
|
|
|
20
20
|
|
|
21
21
|
#include "memRecord.h"
|
|
22
22
|
#include <bzs/db/protocol/tdap/client/trdboostapi.h>
|
|
23
|
+
#include <new>
|
|
24
|
+
|
|
23
25
|
//---------------------------------------------------------------------------
|
|
24
26
|
#pragma package(smart_init)
|
|
25
27
|
namespace bzs
|
|
@@ -33,14 +35,23 @@ namespace tdap
|
|
|
33
35
|
namespace client
|
|
34
36
|
{
|
|
35
37
|
|
|
36
|
-
autoMemory::autoMemory() : ptr(0), endFieldIndex(NULL), size(0),
|
|
38
|
+
autoMemory::autoMemory() : refarymem(), ptr(0), endFieldIndex(NULL), size(0),
|
|
39
|
+
owner(false)
|
|
37
40
|
{
|
|
38
41
|
}
|
|
39
42
|
|
|
40
|
-
autoMemory::
|
|
41
|
-
: ptr(p), endFieldIndex(NULL), size((unsigned int)s), owner(own)
|
|
42
|
-
|
|
43
|
+
void autoMemory::setParams(unsigned char* p, size_t s, short* endIndex, bool own)
|
|
43
44
|
{
|
|
45
|
+
if (owner)
|
|
46
|
+
{
|
|
47
|
+
delete[] ptr;
|
|
48
|
+
delete endFieldIndex;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
ptr = p;
|
|
52
|
+
size = (unsigned int)s;
|
|
53
|
+
owner = own;
|
|
54
|
+
endFieldIndex = endIndex;
|
|
44
55
|
if (owner)
|
|
45
56
|
{
|
|
46
57
|
ptr = new unsigned char[s];
|
|
@@ -52,8 +63,7 @@ autoMemory::autoMemory(unsigned char* p, size_t s, short* endIndex, bool own)
|
|
|
52
63
|
if (endIndex != NULL)
|
|
53
64
|
*endFieldIndex = *endIndex;
|
|
54
65
|
}
|
|
55
|
-
|
|
56
|
-
endFieldIndex = endIndex;
|
|
66
|
+
|
|
57
67
|
}
|
|
58
68
|
|
|
59
69
|
autoMemory::~autoMemory()
|
|
@@ -65,67 +75,146 @@ autoMemory::~autoMemory()
|
|
|
65
75
|
}
|
|
66
76
|
}
|
|
67
77
|
|
|
68
|
-
autoMemory::autoMemory(const autoMemory& p)
|
|
69
|
-
: ptr(p.ptr), endFieldIndex(p.endFieldIndex), size(p.size), owner(p.owner)
|
|
70
|
-
{
|
|
71
|
-
const_cast<autoMemory&>(p).owner = false;
|
|
72
|
-
// const_cast<autoMemory&>(p).ptr = NULL;
|
|
73
|
-
}
|
|
74
78
|
|
|
75
79
|
autoMemory& autoMemory::operator=(const autoMemory& p)
|
|
76
80
|
{
|
|
81
|
+
if (owner)
|
|
82
|
+
{
|
|
83
|
+
delete[] ptr;
|
|
84
|
+
delete endFieldIndex;
|
|
85
|
+
}
|
|
77
86
|
ptr = p.ptr;
|
|
78
87
|
size = p.size;
|
|
79
88
|
endFieldIndex = p.endFieldIndex;
|
|
80
89
|
owner = p.owner;
|
|
81
90
|
const_cast<autoMemory&>(p).owner = false;
|
|
82
|
-
// const_cast<autoMemory&>(p).ptr = NULL;
|
|
83
91
|
return *this;
|
|
84
92
|
}
|
|
85
93
|
|
|
94
|
+
void autoMemory::releaseMemory()
|
|
95
|
+
{
|
|
96
|
+
if (allocType() == MEM_ALLOC_TYPE_ONE)
|
|
97
|
+
delete this;
|
|
98
|
+
else
|
|
99
|
+
delete [] this;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
autoMemory* autoMemory::create(int n)
|
|
103
|
+
{
|
|
104
|
+
assert(n);
|
|
105
|
+
autoMemory* p = new autoMemory[n];
|
|
106
|
+
p->setAllocTypeThis(MEM_ALLOC_TYPE_ARRAY);
|
|
107
|
+
for (int i = 1; i < n ; ++i)
|
|
108
|
+
{
|
|
109
|
+
autoMemory* pp = p + i;
|
|
110
|
+
pp->setAllocParent(p);
|
|
111
|
+
}
|
|
112
|
+
return p;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
autoMemory* autoMemory::create()
|
|
116
|
+
{
|
|
117
|
+
autoMemory* p = new autoMemory();
|
|
118
|
+
p->setAllocTypeThis(MEM_ALLOC_TYPE_ONE);
|
|
119
|
+
return p;
|
|
120
|
+
}
|
|
121
|
+
|
|
86
122
|
//---------------------------------------------------------------------------
|
|
87
123
|
// class memoryRecord
|
|
88
124
|
//---------------------------------------------------------------------------
|
|
89
|
-
inline memoryRecord::memoryRecord(
|
|
125
|
+
inline memoryRecord::memoryRecord() : fieldsBase(NULL)
|
|
90
126
|
{
|
|
127
|
+
#ifdef JOIN_UNLIMIT
|
|
128
|
+
m_memblock.reserve(ROW_MEM_BLOCK_RESERVE);
|
|
129
|
+
#else
|
|
130
|
+
m_memblockSize = 0;
|
|
131
|
+
#endif
|
|
132
|
+
}
|
|
91
133
|
|
|
134
|
+
inline memoryRecord::memoryRecord(fielddefs& fdinfo) : fieldsBase(&fdinfo)
|
|
135
|
+
{
|
|
136
|
+
#ifdef JOIN_UNLIMIT
|
|
92
137
|
m_memblock.reserve(ROW_MEM_BLOCK_RESERVE);
|
|
138
|
+
#else
|
|
139
|
+
m_memblockSize = 0;
|
|
140
|
+
#endif
|
|
93
141
|
}
|
|
94
142
|
|
|
95
143
|
memoryRecord::memoryRecord(const memoryRecord& r)
|
|
96
|
-
: fieldsBase(r.m_fns)
|
|
144
|
+
: fieldsBase(r.m_fns)
|
|
145
|
+
{
|
|
146
|
+
#ifdef JOIN_UNLIMIT
|
|
147
|
+
m_memblock = r.m_memblock;
|
|
148
|
+
#else
|
|
149
|
+
m_memblockSize = r.m_memblockSize;
|
|
150
|
+
for (int i = 0; i < m_memblockSize; ++i)
|
|
151
|
+
m_memblock[i] = r.m_memblock[i];
|
|
152
|
+
#endif
|
|
153
|
+
for (int i = 0; i < memBlockSize(); ++i)
|
|
154
|
+
m_memblock[i]->addref();
|
|
155
|
+
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
memoryRecord::~memoryRecord()
|
|
97
159
|
{
|
|
160
|
+
for (int i = 0; i < memBlockSize(); ++i)
|
|
161
|
+
m_memblock[i]->release();
|
|
98
162
|
}
|
|
99
163
|
|
|
100
|
-
|
|
164
|
+
memoryRecord& memoryRecord::operator=(const memoryRecord& r)
|
|
101
165
|
{
|
|
102
|
-
|
|
103
|
-
|
|
166
|
+
if (this != &r)
|
|
167
|
+
{
|
|
168
|
+
m_fns = r.m_fns;
|
|
169
|
+
#ifdef JOIN_UNLIMIT
|
|
170
|
+
m_memblock = r.m_memblock;
|
|
171
|
+
#endif
|
|
172
|
+
for (int i = 0; i < memBlockSize(); ++i)
|
|
173
|
+
{
|
|
174
|
+
#ifndef JOIN_UNLIMIT
|
|
175
|
+
m_memblock[i] = r.m_memblock[i];
|
|
176
|
+
#endif
|
|
177
|
+
m_memblock[i]->addref();
|
|
178
|
+
}
|
|
104
179
|
|
|
105
|
-
|
|
180
|
+
}
|
|
181
|
+
return *this;
|
|
106
182
|
}
|
|
107
183
|
|
|
108
|
-
void memoryRecord::
|
|
109
|
-
|
|
184
|
+
void memoryRecord::clear()
|
|
185
|
+
{
|
|
186
|
+
for (int i = 0; i < memBlockSize(); ++i)
|
|
187
|
+
memset(m_memblock[i]->ptr, 0, m_memblock[i]->size);
|
|
188
|
+
m_fns->resetUpdateIndicator();
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
void memoryRecord::setRecordData(autoMemory* am, unsigned char* ptr,
|
|
192
|
+
size_t size, short* endFieldIndex, bool owner)
|
|
110
193
|
{
|
|
111
194
|
if ((size == 0) && owner)
|
|
112
195
|
{
|
|
113
|
-
size = m_fns
|
|
114
|
-
*endFieldIndex = (short)m_fns
|
|
196
|
+
size = m_fns->totalFieldLen();
|
|
197
|
+
*endFieldIndex = (short)m_fns->size();
|
|
115
198
|
}
|
|
116
|
-
|
|
199
|
+
am->setParams(ptr, size, endFieldIndex, owner);
|
|
200
|
+
am->addref();
|
|
201
|
+
#ifdef JOIN_UNLIMIT
|
|
117
202
|
m_memblock.push_back(am);
|
|
203
|
+
#else
|
|
204
|
+
m_memblock[m_memblockSize] = am;
|
|
205
|
+
++m_memblockSize;
|
|
206
|
+
#endif
|
|
118
207
|
}
|
|
119
208
|
|
|
120
209
|
void memoryRecord::copyToBuffer(table* tb, bool updateOnly) const
|
|
121
210
|
{
|
|
122
211
|
if (!updateOnly)
|
|
123
|
-
memcpy(tb->fieldPtr(0), ptr(0), m_fns
|
|
212
|
+
memcpy(tb->fieldPtr(0), ptr(0), m_fns->totalFieldLen());
|
|
124
213
|
else
|
|
125
214
|
{
|
|
126
|
-
for (int i = 0; i < (int)m_fns
|
|
215
|
+
for (int i = 0; i < (int)m_fns->size(); ++i)
|
|
127
216
|
{
|
|
128
|
-
const fielddef& fd = m_fns[i];
|
|
217
|
+
const fielddef& fd = (*m_fns)[i];
|
|
129
218
|
// ptr() return memory block first address
|
|
130
219
|
if (fd.enableFlags.bitE)
|
|
131
220
|
memcpy(tb->fieldPtr(i), ptr(i) + fd.pos, fd.len);
|
|
@@ -135,12 +224,64 @@ void memoryRecord::copyToBuffer(table* tb, bool updateOnly) const
|
|
|
135
224
|
|
|
136
225
|
memoryRecord* memoryRecord::create(fielddefs& fdinfo)
|
|
137
226
|
{
|
|
138
|
-
|
|
227
|
+
memoryRecord* p = new memoryRecord(fdinfo);
|
|
228
|
+
p->setAllocTypeThis(MEM_ALLOC_TYPE_ONE);
|
|
229
|
+
#ifdef DEBUG_TRACE_FIELDBASE_REFCOUNT
|
|
230
|
+
_TCHAR tmp[50];
|
|
231
|
+
wsprintf(tmp, _T("memoryRecord create one %p\n"), p);
|
|
232
|
+
OutputDebugString(tmp);
|
|
233
|
+
#endif
|
|
234
|
+
return p;
|
|
139
235
|
}
|
|
140
236
|
|
|
141
|
-
|
|
237
|
+
memoryRecord* memoryRecord::create(fielddefs& fdinfo, int n)
|
|
142
238
|
{
|
|
143
|
-
|
|
239
|
+
assert(n);
|
|
240
|
+
memoryRecord* p = new memoryRecord[n];
|
|
241
|
+
p->setFielddefs(&fdinfo);
|
|
242
|
+
p->setAllocTypeThis(MEM_ALLOC_TYPE_ARRAY);
|
|
243
|
+
|
|
244
|
+
for (int i = 1; i < n ; ++i)
|
|
245
|
+
{
|
|
246
|
+
memoryRecord* pp = p + i;
|
|
247
|
+
pp->setFielddefs(&fdinfo);
|
|
248
|
+
pp->setAllocParent(p);
|
|
249
|
+
}
|
|
250
|
+
#ifdef DEBUG_TRACE_FIELDBASE_REFCOUNT
|
|
251
|
+
_TCHAR tmp[50];
|
|
252
|
+
wsprintf(tmp, _T("memoryRecord create n %p\n"), p);
|
|
253
|
+
OutputDebugString(tmp);
|
|
254
|
+
#endif
|
|
255
|
+
return p;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
//copy constractor
|
|
259
|
+
memoryRecord* memoryRecord::create(const memoryRecord& m, int n)
|
|
260
|
+
{
|
|
261
|
+
assert(n);
|
|
262
|
+
memoryRecord* p = new memoryRecord[n];
|
|
263
|
+
*p = m;
|
|
264
|
+
p->setAllocTypeThis(MEM_ALLOC_TYPE_ARRAY);
|
|
265
|
+
for (int i = 1; i < n ; ++i)
|
|
266
|
+
{
|
|
267
|
+
memoryRecord* pp = p + i;
|
|
268
|
+
*pp = m;
|
|
269
|
+
pp->setAllocParent(p);
|
|
270
|
+
}
|
|
271
|
+
#ifdef DEBUG_TRACE_FIELDBASE_REFCOUNT
|
|
272
|
+
_TCHAR tmp[50];
|
|
273
|
+
wsprintf(tmp, _T("memoryRecord create copy n %p\n"), p);
|
|
274
|
+
OutputDebugString(tmp);
|
|
275
|
+
#endif
|
|
276
|
+
return p;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
void memoryRecord::releaseMemory()
|
|
280
|
+
{
|
|
281
|
+
if (allocType() == MEM_ALLOC_TYPE_ONE)
|
|
282
|
+
delete this;
|
|
283
|
+
else
|
|
284
|
+
delete [] this;
|
|
144
285
|
}
|
|
145
286
|
|
|
146
287
|
//---------------------------------------------------------------------------
|
|
@@ -154,7 +295,7 @@ writableRecord::writableRecord(table* tb, const aliasMap_type* alias)
|
|
|
154
295
|
m_fddefs->clear();
|
|
155
296
|
m_fddefs->setAliases(alias);
|
|
156
297
|
m_fddefs->copyFrom(m_tb);
|
|
157
|
-
setRecordData(0, 0, &m_endIndex, true);
|
|
298
|
+
setRecordData(autoMemory::create(), 0, 0, &m_endIndex, true);
|
|
158
299
|
}
|
|
159
300
|
|
|
160
301
|
fielddefs* writableRecord::fddefs()
|
|
@@ -221,9 +362,26 @@ void writableRecord::save()
|
|
|
221
362
|
|
|
222
363
|
writableRecord* writableRecord::create(table* tb, const aliasMap_type* alias)
|
|
223
364
|
{
|
|
224
|
-
|
|
365
|
+
writableRecord* p = new writableRecord(tb, alias);
|
|
366
|
+
p->setAllocTypeThis(MEM_ALLOC_TYPE_ONE);
|
|
367
|
+
|
|
368
|
+
#ifdef DEBUG_TRACE_FIELDBASE_REFCOUNT
|
|
369
|
+
_TCHAR tmp[50];
|
|
370
|
+
wsprintf(tmp, _T("writableRecord create one %p\n"), p);
|
|
371
|
+
OutputDebugString(tmp);
|
|
372
|
+
#endif
|
|
373
|
+
return p;
|
|
225
374
|
}
|
|
226
375
|
|
|
376
|
+
void writableRecord::releaseMemory()
|
|
377
|
+
{
|
|
378
|
+
if (allocType() == MEM_ALLOC_TYPE_ONE)
|
|
379
|
+
delete this;
|
|
380
|
+
else
|
|
381
|
+
delete [] this;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
|
|
227
385
|
} // namespace client
|
|
228
386
|
} // namespace tdap
|
|
229
387
|
} // namespace protocol
|
|
@@ -33,19 +33,23 @@ namespace client
|
|
|
33
33
|
|
|
34
34
|
/** @cond INTERNAL */
|
|
35
35
|
|
|
36
|
-
class
|
|
36
|
+
class autoMemory : public refarymem
|
|
37
37
|
{
|
|
38
|
+
void releaseMemory();
|
|
38
39
|
|
|
39
|
-
public:
|
|
40
40
|
autoMemory();
|
|
41
|
-
explicit autoMemory(unsigned char* p, size_t s, short* endIndex, bool own);
|
|
42
41
|
autoMemory(const autoMemory& p);
|
|
43
42
|
~autoMemory();
|
|
43
|
+
public:
|
|
44
|
+
void setParams(unsigned char* p, size_t s, short* endIndex, bool own);
|
|
45
|
+
|
|
44
46
|
autoMemory& operator=(const bzs::db::protocol::tdap::client::autoMemory& p);
|
|
45
47
|
unsigned char* ptr;
|
|
46
48
|
short* endFieldIndex;
|
|
47
|
-
unsigned int size;
|
|
48
|
-
bool owner;
|
|
49
|
+
unsigned int size ;
|
|
50
|
+
bool owner ;
|
|
51
|
+
static autoMemory* create(int n);
|
|
52
|
+
static autoMemory* create();
|
|
49
53
|
};
|
|
50
54
|
|
|
51
55
|
/** @endcond */
|
|
@@ -54,25 +58,45 @@ public:
|
|
|
54
58
|
#pragma warning(disable : 4275)
|
|
55
59
|
#define ROW_MEM_BLOCK_RESERVE 4
|
|
56
60
|
|
|
61
|
+
#ifndef JOINLIMIT_PER_RECORD
|
|
62
|
+
#define JOINLIMIT_PER_RECORD 0
|
|
63
|
+
#endif
|
|
64
|
+
#if (JOINLIMIT_PER_RECORD < 1)
|
|
65
|
+
#define JOIN_UNLIMIT
|
|
66
|
+
#endif
|
|
67
|
+
|
|
57
68
|
class DLLLIB memoryRecord : public fieldsBase
|
|
58
69
|
{
|
|
59
70
|
friend class multiRecordAlocatorImple;
|
|
60
71
|
friend class recordsetImple;
|
|
72
|
+
friend class recordsetQuery;
|
|
73
|
+
|
|
74
|
+
#ifdef JOIN_UNLIMIT
|
|
75
|
+
std::vector<autoMemory*> m_memblock;
|
|
76
|
+
#else
|
|
77
|
+
autoMemory* m_memblock[JOINLIMIT_PER_RECORD];
|
|
78
|
+
int m_memblockSize;
|
|
79
|
+
#endif
|
|
61
80
|
|
|
62
|
-
|
|
81
|
+
static memoryRecord* create(fielddefs& fdinfo, int n);
|
|
82
|
+
static memoryRecord* create(const memoryRecord& m, int n);
|
|
63
83
|
|
|
64
84
|
protected:
|
|
65
85
|
/** @cond INTERNAL */
|
|
86
|
+
|
|
87
|
+
inline memoryRecord();
|
|
66
88
|
inline memoryRecord(fielddefs& fdinfo);
|
|
67
89
|
memoryRecord(const memoryRecord& r);
|
|
90
|
+
~memoryRecord();
|
|
91
|
+
memoryRecord& operator=(const memoryRecord& r);
|
|
68
92
|
void copyToBuffer(table* tb, bool updateOnly = false) const;
|
|
69
93
|
|
|
70
94
|
/* return memory block first address which not field ptr address */
|
|
71
95
|
inline unsigned char* ptr(int index) const
|
|
72
96
|
{
|
|
73
97
|
for (int i = 0; i < memBlockSize(); ++i)
|
|
74
|
-
if (*(m_memblock[i]
|
|
75
|
-
return m_memblock[i]
|
|
98
|
+
if (*(m_memblock[i]->endFieldIndex) > index)
|
|
99
|
+
return m_memblock[i]->ptr;
|
|
76
100
|
assert(0);
|
|
77
101
|
return NULL;
|
|
78
102
|
}
|
|
@@ -80,33 +104,47 @@ protected:
|
|
|
80
104
|
inline const autoMemory& memBlockByField(int index) const
|
|
81
105
|
{
|
|
82
106
|
for (int i = 0; i < memBlockSize(); ++i)
|
|
83
|
-
if (*(m_memblock[i]
|
|
84
|
-
return m_memblock[i];
|
|
107
|
+
if (*(m_memblock[i]->endFieldIndex) > index)
|
|
108
|
+
return *m_memblock[i];
|
|
85
109
|
assert(0);
|
|
86
110
|
return *((autoMemory*)0);
|
|
87
111
|
}
|
|
88
112
|
|
|
89
113
|
inline const autoMemory& memBlock(int index) const
|
|
90
114
|
{
|
|
91
|
-
return m_memblock[index];
|
|
115
|
+
return *m_memblock[index];
|
|
92
116
|
}
|
|
93
|
-
|
|
117
|
+
#ifdef JOIN_UNLIMIT
|
|
94
118
|
inline int memBlockSize() const { return (int)m_memblock.size(); }
|
|
95
|
-
|
|
119
|
+
#else
|
|
120
|
+
inline int memBlockSize() const { return m_memblockSize; }
|
|
121
|
+
#endif
|
|
96
122
|
inline void copyFromBuffer(const table* tb)
|
|
97
123
|
{
|
|
98
|
-
memcpy(ptr(0), tb->fieldPtr(0), m_fns
|
|
124
|
+
memcpy(ptr(0), tb->fieldPtr(0), m_fns->totalFieldLen());
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
void removeLastMemBlock()
|
|
128
|
+
{
|
|
129
|
+
if (memBlockSize())
|
|
130
|
+
{
|
|
131
|
+
m_memblock[memBlockSize()-1]->release();
|
|
132
|
+
#ifdef JOIN_UNLIMIT
|
|
133
|
+
m_memblock.pop_back();
|
|
134
|
+
#else
|
|
135
|
+
--m_memblockSize;
|
|
136
|
+
#endif
|
|
137
|
+
}
|
|
99
138
|
}
|
|
100
|
-
|
|
139
|
+
|
|
140
|
+
void setRecordData(autoMemory* am, unsigned char* ptr, size_t size,
|
|
141
|
+
short* endFieldIndex, bool owner = false);
|
|
142
|
+
void releaseMemory();
|
|
101
143
|
|
|
102
144
|
/** @endcond */
|
|
103
145
|
public:
|
|
104
146
|
void clear(); // orverride
|
|
105
|
-
|
|
106
|
-
bool owner = false);
|
|
107
|
-
|
|
108
|
-
static memoryRecord* create(fielddefs& fdinfo);
|
|
109
|
-
static void release(fieldsBase* p);
|
|
147
|
+
static memoryRecord* create(fielddefs& fdinfo); // For SWIG
|
|
110
148
|
};
|
|
111
149
|
|
|
112
150
|
#pragma warning(default : 4275)
|
|
@@ -115,25 +153,29 @@ public:
|
|
|
115
153
|
/* non copyable*/
|
|
116
154
|
class DLLLIB writableRecord : public memoryRecord
|
|
117
155
|
{
|
|
156
|
+
friend class activeTableImple;
|
|
157
|
+
|
|
118
158
|
fielddefs* m_fddefs;
|
|
119
159
|
table* m_tb;
|
|
120
160
|
short m_endIndex;
|
|
121
161
|
|
|
162
|
+
static writableRecord* create(table* tb, const aliasMap_type* alias);
|
|
122
163
|
writableRecord(table* tb, const aliasMap_type* alias);
|
|
123
164
|
writableRecord(const writableRecord&);
|
|
124
165
|
writableRecord& operator=(const writableRecord&);
|
|
125
166
|
|
|
126
167
|
fielddefs* fddefs();
|
|
168
|
+
void releaseMemory();
|
|
169
|
+
~writableRecord();
|
|
127
170
|
|
|
128
171
|
public:
|
|
129
|
-
|
|
172
|
+
|
|
130
173
|
bool read(bool KeysetAlrady = false);
|
|
131
174
|
void insert();
|
|
132
175
|
void del(bool KeysetAlrady = false);
|
|
133
176
|
void update();
|
|
134
177
|
void save();
|
|
135
178
|
|
|
136
|
-
static writableRecord* create(table* tb, const aliasMap_type* alias);
|
|
137
179
|
};
|
|
138
180
|
|
|
139
181
|
} // namespace client
|