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