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
@@ -72,12 +72,6 @@ protected:
|
|
72
72
|
|
73
73
|
class DLLLIB fielddefs : public fieldShare
|
74
74
|
{
|
75
|
-
struct infoImple* m_imple;
|
76
|
-
void aliasing(fielddef* p) const;
|
77
|
-
fielddefs();
|
78
|
-
~fielddefs();
|
79
|
-
fielddefs(const fielddefs& r);
|
80
|
-
fielddefs& operator=(const fielddefs& r);
|
81
75
|
friend class table;
|
82
76
|
friend class recordsetImple;
|
83
77
|
friend class writableRecord;
|
@@ -85,21 +79,26 @@ class DLLLIB fielddefs : public fieldShare
|
|
85
79
|
friend class recordsetQuery;
|
86
80
|
friend struct recordsetQueryImple;
|
87
81
|
friend class fieldsBase;
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
82
|
+
friend class fields;
|
83
|
+
friend class field;
|
84
|
+
|
85
|
+
struct infoImple* m_imple;
|
86
|
+
void aliasing(fielddef* p) const;
|
87
|
+
fielddefs();
|
88
|
+
~fielddefs();
|
89
|
+
fielddefs(const fielddefs& r);
|
90
|
+
fielddefs& operator=(const fielddefs& r);
|
91
|
+
bool mysqlnullEnable() const;
|
92
92
|
bool canUnion(const fielddefs& r) const;
|
93
93
|
size_t totalFieldLen() const;
|
94
94
|
void resetUpdateIndicator();
|
95
95
|
void setAliases(const aliasMap_type* p);
|
96
|
-
void push_back(const fielddef* p
|
96
|
+
void push_back(const fielddef* p);
|
97
|
+
void calcFieldPos(int startIndex, bool mysqlNull);
|
97
98
|
void remove(int index);
|
98
99
|
void reserve(size_t size);
|
99
100
|
public:
|
100
101
|
void clear();
|
101
|
-
|
102
|
-
public:
|
103
102
|
fielddefs* clone() const;
|
104
103
|
int indexByName(const std::_tstring& name) const;
|
105
104
|
const fielddef& operator[](int index) const;
|
@@ -107,70 +106,91 @@ public:
|
|
107
106
|
const fielddef& operator[](const std::_tstring& name) const;
|
108
107
|
bool checkIndex(int index) const;
|
109
108
|
size_t size() const;
|
109
|
+
void addAllFileds(const tabledef* def);
|
110
|
+
void addSelectedFields(const class table* tb);
|
110
111
|
void release();
|
111
112
|
static fielddefs* create();
|
112
113
|
};
|
113
114
|
|
114
|
-
/** @cond INTERNAL */
|
115
|
-
|
116
|
-
typedef int (*compFieldFunc)(const class field& l, const class field& r,
|
117
|
-
char logType);
|
118
|
-
extern int compWString(const field& l, const field& r, char logType);
|
119
|
-
extern int compiWString(const field& l, const field& r, char logType);
|
120
|
-
|
121
|
-
/** @endcond */
|
122
|
-
|
123
115
|
class DLLLIB field
|
124
116
|
{
|
125
117
|
friend class table;
|
126
118
|
friend class fieldsBase;
|
127
|
-
friend class CField;
|
119
|
+
friend class CField; // atl interface
|
120
|
+
friend class memoryRecord; // nullPtr()
|
121
|
+
friend class recordsetQuery; //nullcomp
|
122
|
+
friend class recordsetImple; //offsetBlobPtr
|
123
|
+
friend struct logic; //isCompPartAndMakeValue
|
128
124
|
/** @cond INTERNAL */
|
129
125
|
friend int compBlob(const field& l, const field& r, char logType);
|
130
126
|
/** @endcond */
|
131
127
|
fielddef* m_fd;
|
132
128
|
unsigned char* m_ptr;
|
133
129
|
const class fielddefs* m_fds;
|
134
|
-
|
130
|
+
mutable unsigned char* m_cachedNullPtr;
|
131
|
+
mutable unsigned char m_nullbit;
|
132
|
+
unsigned char m_nullSign;
|
133
|
+
|
134
|
+
void nullPtrCache() const;
|
135
135
|
int blobLenBytes() const { return m_fd->blobLenBytes(); }
|
136
|
+
__int64 readValue64() const;
|
137
|
+
void storeValue64(__int64 value);
|
138
|
+
double readValueDbl() const;
|
139
|
+
void storeValueDbl(double value);
|
140
|
+
void storeValueStrA(const char* data);
|
141
|
+
const char* readValueStrA() const;
|
142
|
+
#ifdef _WIN32
|
143
|
+
void storeValueStrW(const WCHAR* data);
|
144
|
+
const WCHAR* readValueStrW() const;
|
145
|
+
#endif
|
146
|
+
void storeValueNumeric(double data);
|
147
|
+
double readValueNumeric() const;
|
148
|
+
void storeValueDecimal(double data);
|
149
|
+
double readValueDecimal() const;
|
150
|
+
void* nullPtr() const;
|
151
|
+
int nullComp(const field& r, char log) const;
|
152
|
+
int nullComp(char log) const;
|
153
|
+
bool isCompPartAndMakeValue();
|
154
|
+
void offsetBlobPtr(size_t offset);
|
136
155
|
|
137
|
-
private:
|
138
156
|
// ---- bigin regacy interfaces ---- //
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
157
|
+
const char* getFVAstr() const;
|
158
|
+
#ifdef _WIN32
|
159
|
+
const wchar_t* getFVWstr() const;
|
160
|
+
#endif
|
143
161
|
__int64 getFV64() const;
|
144
|
-
float getFVflt() const;
|
145
162
|
double getFVdbl() const;
|
146
163
|
void* getFVbin(uint_td& size) const;
|
147
|
-
|
164
|
+
inline unsigned char getFVbyt() const { return (unsigned char)getFV64();}
|
165
|
+
inline short getFVsht() const { return (short)getFV64();}
|
166
|
+
inline int getFVint() const { return (int)getFV64();}
|
167
|
+
inline int getFVlng() const { return (int)getFV64();}
|
168
|
+
inline float getFVflt() const { return (float)getFVdbl();}
|
169
|
+
|
148
170
|
#ifdef _WIN32
|
149
|
-
const wchar_t* getFVWstr() const;
|
150
171
|
void setFVW(const wchar_t* data);
|
151
172
|
#endif
|
152
|
-
void setFV(float data);
|
153
173
|
void setFV(double data);
|
154
|
-
void setFV(unsigned char data);
|
155
|
-
void setFV(short data);
|
156
|
-
void setFV(int data);
|
157
174
|
void setFV(__int64 data);
|
158
175
|
void setFVA(const char* data);
|
159
176
|
void setFV(const void* data, uint_td size);
|
160
177
|
#ifdef _UNICODE
|
161
178
|
inline const wchar_t* getFVstr() const { return getFVWstr(); };
|
162
179
|
inline void setFV(const wchar_t* data) { setFVW(data); };
|
180
|
+
inline void setFV(const std::wstring& p) { setFVW(p.c_str()); }
|
163
181
|
#else
|
164
182
|
inline const char* getFVstr() const { return getFVAstr(); };
|
165
|
-
inline void setFV(const char* data) { setFVA(data); };
|
166
183
|
#endif
|
167
|
-
|
168
|
-
|
169
|
-
void
|
170
|
-
void
|
184
|
+
inline void setFV(const char* data) { setFVA(data); };
|
185
|
+
inline void setFV(float data){ setFV((double)data); }
|
186
|
+
inline void setFV(unsigned char data) { setFV((__int64)data); }
|
187
|
+
inline void setFV(short data) { setFV((__int64)data); }
|
188
|
+
inline void setFV(int data) { setFV((__int64)data); }
|
189
|
+
inline void setFV(const std::string& p) { setFVA(p.c_str()); };
|
190
|
+
inline void setFV(const bitset& v) { setFV(v.internalValue()); };
|
191
|
+
|
171
192
|
// ---- end regacy interfaces ---- //
|
172
193
|
|
173
|
-
|
174
194
|
/** @cond INTERNAL */
|
175
195
|
#if defined(SWIG) || \
|
176
196
|
defined(SWIG_BUILDING) // SWIG Wrapper need public constructor
|
@@ -181,13 +201,26 @@ public:
|
|
181
201
|
|
182
202
|
public:
|
183
203
|
/** @cond INTERNAL */
|
184
|
-
|
185
|
-
|
204
|
+
// nullPtr and nullbit is all field same.
|
205
|
+
inline field(unsigned char* ptr, const fielddef& fd, const fielddefs* fds,
|
206
|
+
bool nullField = false)
|
207
|
+
: m_fd((fielddef*)&fd), m_ptr(ptr), m_fds(fds), m_cachedNullPtr(NULL), m_nullbit(0)
|
208
|
+
{
|
209
|
+
if (nullField)
|
210
|
+
{
|
211
|
+
m_cachedNullPtr = (unsigned char*)&m_nullSign;
|
212
|
+
m_nullSign = 0xff;
|
213
|
+
m_nullbit = 1;
|
214
|
+
}
|
215
|
+
}
|
186
216
|
/** @endcond */
|
187
217
|
|
188
|
-
|
189
|
-
inline field(const field& r) : m_fd(r.m_fd), m_ptr(r.m_ptr), m_fds(r.m_fds)
|
218
|
+
/* swig using copy constructor */
|
219
|
+
inline field(const field& r) : m_fd(r.m_fd), m_ptr(r.m_ptr), m_fds(r.m_fds),
|
220
|
+
m_cachedNullPtr(NULL),m_nullbit(r.m_nullbit), m_nullSign(r.m_nullSign)
|
190
221
|
{
|
222
|
+
if (r.m_cachedNullPtr == (unsigned char*)&r.m_nullSign)
|
223
|
+
m_cachedNullPtr = (unsigned char*)&m_nullSign;
|
191
224
|
}
|
192
225
|
|
193
226
|
inline field& operator=(const field& r)
|
@@ -195,6 +228,12 @@ public:
|
|
195
228
|
m_fd = r.m_fd;
|
196
229
|
m_ptr = r.m_ptr;
|
197
230
|
m_fds = r.m_fds;
|
231
|
+
m_nullSign = r.m_nullSign;
|
232
|
+
m_nullbit = r.m_nullbit;
|
233
|
+
if (r.m_cachedNullPtr == (unsigned char*)&r.m_nullSign)
|
234
|
+
m_cachedNullPtr = (unsigned char*)&m_nullSign;
|
235
|
+
else
|
236
|
+
m_cachedNullPtr = NULL;
|
198
237
|
return *this;
|
199
238
|
}
|
200
239
|
|
@@ -220,106 +259,55 @@ public:
|
|
220
259
|
|
221
260
|
inline double d() const { return getFVdbl(); }
|
222
261
|
|
223
|
-
|
224
|
-
{
|
225
|
-
setFV(p);
|
226
|
-
m_fd->enableFlags.bitE = true;
|
227
|
-
return *this;
|
228
|
-
}
|
229
|
-
|
230
|
-
inline field& operator=(const std::_tstring& p)
|
231
|
-
{
|
232
|
-
setFV(p.c_str());
|
233
|
-
m_fd->enableFlags.bitE = true;
|
234
|
-
return *this;
|
235
|
-
}
|
236
|
-
|
237
|
-
#ifdef _UNICODE
|
238
|
-
inline field& operator=(const char* p)
|
239
|
-
{
|
240
|
-
setFVA(p);
|
241
|
-
m_fd->enableFlags.bitE = true;
|
242
|
-
return *this;
|
243
|
-
}
|
262
|
+
bool isNull() const;
|
244
263
|
|
245
|
-
|
264
|
+
void setNull(bool v);
|
265
|
+
|
266
|
+
template <class T>
|
267
|
+
inline field& operator=(const T c)
|
246
268
|
{
|
247
|
-
|
269
|
+
setFV(c);
|
248
270
|
m_fd->enableFlags.bitE = true;
|
249
271
|
return *this;
|
250
272
|
}
|
251
273
|
|
252
|
-
|
274
|
+
inline bool operator!=(const _TCHAR* p) const { return !operator==(p); }
|
253
275
|
|
254
|
-
inline
|
276
|
+
inline bool operator==(const _TCHAR* p) const
|
255
277
|
{
|
256
|
-
|
257
|
-
m_fd->enableFlags.bitE = true;
|
258
|
-
return *this;
|
278
|
+
return (isNull() == false) && (_tcscmp(p, c_str()) == 0);
|
259
279
|
}
|
260
280
|
|
261
|
-
inline
|
262
|
-
{
|
263
|
-
setFV(v);
|
264
|
-
m_fd->enableFlags.bitE = true;
|
265
|
-
return *this;
|
266
|
-
}
|
281
|
+
inline bool operator!=(int v) const { return !operator==(v); }
|
282
|
+
inline bool operator==(int v) const { return (isNull() == false) && (v == i()); }
|
267
283
|
|
268
|
-
inline
|
269
|
-
{
|
270
|
-
setFV(v);
|
271
|
-
m_fd->enableFlags.bitE = true;
|
272
|
-
return *this;
|
273
|
-
}
|
284
|
+
inline bool operator!=(short v) const { return !operator==(v); }
|
285
|
+
inline bool operator==(short v) const { return (isNull() == false) && (v == i16()); }
|
274
286
|
|
275
|
-
inline
|
276
|
-
{
|
277
|
-
setFV(v);
|
278
|
-
m_fd->enableFlags.bitE = true;
|
279
|
-
return *this;
|
280
|
-
}
|
281
|
-
|
282
|
-
inline bool operator!=(const _TCHAR* p)
|
283
|
-
{
|
284
|
-
return (_tcscmp(p, c_str()) != 0);
|
285
|
-
};
|
286
|
-
inline bool operator==(const _TCHAR* p)
|
287
|
-
{
|
288
|
-
return (_tcscmp(p, c_str()) == 0);
|
289
|
-
};
|
287
|
+
inline bool operator!=(__int64 v) const { return !operator==(v); }
|
288
|
+
inline bool operator==(__int64 v) const { return (isNull() == false) && (v == i64()); }
|
290
289
|
|
291
|
-
inline bool operator!=(
|
292
|
-
inline bool operator==(
|
290
|
+
inline bool operator!=(float v) const { return !operator==(v); }
|
291
|
+
inline bool operator==(float v) const { return (isNull() == false) && (v == f()); }
|
293
292
|
|
294
|
-
inline bool operator!=(
|
295
|
-
inline bool operator==(
|
296
|
-
|
297
|
-
inline bool operator!=(__int64 v) { return (v != i64()); };
|
298
|
-
inline bool operator==(__int64 v) { return (v == i64()); };
|
299
|
-
|
300
|
-
inline bool operator!=(float v) { return (v != f()); };
|
301
|
-
inline bool operator==(float v) { return (v == f()); };
|
302
|
-
|
303
|
-
inline bool operator!=(double v) { return (v != d()); };
|
304
|
-
inline bool operator==(double v) { return (v == d()); };
|
293
|
+
inline bool operator!=(double v) const { return !operator==(v); }
|
294
|
+
inline bool operator==(double v) const { return (isNull() == false) && (v == d()); }
|
305
295
|
|
306
296
|
inline void setBin(const void* data, uint_td size)
|
307
297
|
{
|
308
298
|
setFV(data, size);
|
309
299
|
m_fd->enableFlags.bitE = true;
|
310
300
|
}
|
311
|
-
inline void* getBin(uint_td& size) { return getFVbin(size); };
|
301
|
+
inline void* getBin(uint_td& size) const { return getFVbin(size); };
|
312
302
|
|
313
|
-
|
303
|
+
inline bitset getBits() const { return bitset(i64());}
|
314
304
|
|
315
|
-
|
316
|
-
bool isCompPartAndMakeValue();
|
317
|
-
void offsetBlobPtr(size_t offset);
|
318
|
-
compFieldFunc getCompFunc(char logType) const;
|
319
|
-
/** @endcond */
|
305
|
+
int comp(const field& r, char logType = CMPLOGICAL_VAR_COMP_ALL) const;
|
320
306
|
};
|
321
307
|
|
308
|
+
|
322
309
|
/** @cond INTERNAL */
|
310
|
+
#ifndef SWIG
|
323
311
|
/* For template tget type num by type.*/
|
324
312
|
|
325
313
|
inline int getFieldType(int)
|
@@ -389,6 +377,7 @@ inline const _TCHAR* fieldValue(const field& fd, const _TCHAR*)
|
|
389
377
|
|
390
378
|
DLLLIB const fielddef& dummyFd();
|
391
379
|
|
380
|
+
#endif // ndef SWIG
|
392
381
|
/** @endcond */
|
393
382
|
|
394
383
|
} // namespace client
|
@@ -122,16 +122,21 @@ class autoMemory;
|
|
122
122
|
/* copyable */
|
123
123
|
class fieldsBase : public refarymem
|
124
124
|
{
|
125
|
-
friend class multiRecordAlocatorImple;
|
126
|
-
friend class recordsetImple;
|
127
|
-
friend class recordsetQuery;
|
125
|
+
friend class multiRecordAlocatorImple; // null_ptr setInvalidMemblock ...
|
126
|
+
friend class recordsetImple; // setRecordData setFielddefs
|
127
|
+
friend class recordsetQuery; // setRecordData
|
128
|
+
friend class groupQueryImple; // setInvalidMemblock
|
128
129
|
|
129
130
|
virtual unsigned char* ptr(int index) const = 0;
|
131
|
+
virtual unsigned char* nullPtr(int index) const = 0;
|
132
|
+
virtual int memoryBlockIndex(int index) const { return 0;}
|
133
|
+
virtual int memoryBlockIndexCache() const { return 0;}
|
130
134
|
|
131
135
|
protected:
|
132
136
|
/** @cond INTERNAL */
|
133
137
|
fielddefs* m_fns;
|
134
|
-
|
138
|
+
unsigned int m_InvalidFlags;
|
139
|
+
|
135
140
|
virtual table* tbptr() const { return NULL; }
|
136
141
|
|
137
142
|
void throwIndexError(short index) const
|
@@ -151,7 +156,7 @@ protected:
|
|
151
156
|
}
|
152
157
|
|
153
158
|
explicit inline fieldsBase(fielddefs* fns)
|
154
|
-
: refarymem(), m_fns(fns),
|
159
|
+
: refarymem(), m_fns(fns), m_InvalidFlags(0)
|
155
160
|
{
|
156
161
|
}
|
157
162
|
|
@@ -161,24 +166,44 @@ protected:
|
|
161
166
|
|
162
167
|
virtual void setRecordData(autoMemory* am, unsigned char* ptr, size_t size,
|
163
168
|
short* endFieldIndex, bool owner = false){};
|
169
|
+
|
170
|
+
inline void setInvalidMemblock(short index)
|
171
|
+
{
|
172
|
+
int num = memoryBlockIndex(index);
|
173
|
+
m_InvalidFlags |= ((2L << num) | 1L);
|
174
|
+
}
|
175
|
+
|
164
176
|
/** @endcond */
|
165
177
|
public:
|
166
178
|
|
167
179
|
virtual ~fieldsBase(){};
|
168
180
|
|
169
|
-
inline
|
181
|
+
inline bool isInvalidRecord() const
|
182
|
+
{
|
183
|
+
return (m_InvalidFlags & 1) != 0;
|
184
|
+
}
|
170
185
|
|
171
|
-
inline bool
|
186
|
+
inline void setInvalidRecord(bool v)
|
187
|
+
{
|
188
|
+
if (v)
|
189
|
+
m_InvalidFlags |= 1L;
|
190
|
+
else
|
191
|
+
m_InvalidFlags &= ~1L;
|
192
|
+
}
|
172
193
|
|
173
194
|
inline field getFieldNoCheck(short index) const
|
174
195
|
{
|
175
|
-
|
196
|
+
unsigned char* p = ptr(index);
|
197
|
+
bool nullfield = (m_InvalidFlags &
|
198
|
+
(2L << memoryBlockIndexCache())) != 0;
|
199
|
+
|
200
|
+
return field(p, (*m_fns)[index], m_fns, nullfield);
|
176
201
|
}
|
177
202
|
|
178
203
|
inline field operator[](short index) const
|
179
204
|
{
|
180
205
|
if (m_fns->checkIndex(index))
|
181
|
-
return
|
206
|
+
return getFieldNoCheck(index);
|
182
207
|
|
183
208
|
throwIndexError(index);
|
184
209
|
return field(NULL, dummyFd(), m_fns);
|
@@ -229,7 +254,12 @@ class fields : public fieldsBase
|
|
229
254
|
|
230
255
|
inline unsigned char* ptr(int index) const
|
231
256
|
{
|
232
|
-
return (
|
257
|
+
return nullPtr(index) + (*m_fns)[index].nullbytes();
|
258
|
+
}
|
259
|
+
|
260
|
+
inline unsigned char* nullPtr(int index) const
|
261
|
+
{
|
262
|
+
return ((unsigned char*)m_tb.data());
|
233
263
|
}
|
234
264
|
|
235
265
|
table* tbptr() const { return &m_tb; }
|