transactd 1.1.2 → 1.2.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 +37 -4
- data/bin/common/tdclc_32_1_2.dll +0 -0
- data/bin/common/tdclc_64_1_2.dll +0 -0
- data/build/common/transactd_cl_common.cmake +0 -1
- data/build/common/transactd_common.cmake +26 -6
- data/build/swig/php/generate.cmake.in +58 -0
- data/build/swig/php/generate.cmd.in +41 -0
- data/build/swig/php/php.swg +155 -0
- data/build/swig/ruby/ruby.swg +38 -0
- data/build/swig/tdcl.i +133 -3
- data/build/tdclc/CMakeLists.txt +4 -1
- data/build/tdclc/tdclc_32.cbproj +1 -1
- data/build/tdclc/tdclc_64.cbproj +1 -1
- data/build/tdclcpp/CMakeLists.txt +1 -1
- data/build/tdclcpp/tdclcpp_bcb_32.cbproj +1 -4
- data/build/tdclcpp/tdclcpp_bcb_64.cbproj +0 -3
- data/build/tdclrb/CMakeLists.txt +1 -1
- data/build/tdclrb/GEM_VERSION +2 -2
- data/source/bzs/db/engine/mysql/IReadRecords.h +1 -1
- data/source/bzs/db/engine/mysql/bookmark.h +3 -3
- data/source/bzs/db/engine/mysql/database.cpp +95 -19
- data/source/bzs/db/engine/mysql/database.h +6 -6
- data/source/bzs/db/engine/mysql/mysqlInternal.h +43 -1
- data/source/bzs/db/engine/mysql/mysqlThd.cpp +10 -8
- data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +1 -1
- data/source/bzs/db/protocol/tdap/btrDate.h +2 -2
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +15 -8
- data/source/bzs/db/protocol/tdap/client/dbDef.h +2 -2
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +4 -0
- data/source/bzs/db/protocol/tdap/client/fieldDDF.cpp +0 -5
- data/source/bzs/db/protocol/tdap/client/fileDDF.cpp +0 -4
- data/source/bzs/db/protocol/tdap/client/filter.cpp +0 -484
- data/source/bzs/db/protocol/tdap/client/filter.h +696 -84
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +13 -3
- data/source/bzs/db/protocol/tdap/client/nsTable.h +12 -6
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +2 -1
- data/source/bzs/db/protocol/tdap/client/stringConverter.h +1 -0
- data/source/bzs/db/protocol/tdap/client/table.cpp +519 -75
- data/source/bzs/db/protocol/tdap/client/table.h +49 -7
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +145 -124
- data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +39 -0
- data/source/bzs/db/protocol/tdap/client/trdormapi.h +872 -0
- data/source/bzs/db/protocol/tdap/myDateTime.cpp +8 -8
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +7 -9
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +406 -195
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +64 -13
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +2 -1
- data/source/bzs/db/protocol/tdap/tdapSchema.cpp +35 -3
- data/source/bzs/db/protocol/tdap/tdapSchema.h +11 -3
- data/source/bzs/db/protocol/tdap/tdapcapi.h +63 -53
- data/source/bzs/env/crosscompile.h +8 -3
- data/source/bzs/example/connection_pool_c.cpp +1 -7
- data/source/bzs/example/useORM.cpp +585 -0
- data/source/bzs/rtl/exception.h +6 -0
- data/source/bzs/test/tdclatl/bench_tdclatl.js +12 -7
- data/source/bzs/test/tdclphp/transactd_Test.php +1845 -0
- data/source/bzs/test/tdclphp/transactd_blob_Test.php +325 -0
- data/source/bzs/test/tdclphp/transactd_datetime_Test.php +183 -0
- data/source/bzs/test/tdclphp/transactd_kanjischema_Test.php +212 -0
- data/source/bzs/test/tdclrb/transactd_blob_spec.rb +332 -0
- data/source/bzs/test/tdclrb/transactd_spec.rb +256 -1
- data/source/bzs/test/trdclengn/test_blob.cpp +327 -0
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +485 -5
- data/source/global/tdclatl/QueryBase.cpp +231 -0
- data/source/global/tdclatl/QueryBase.h +96 -0
- data/source/global/tdclatl/Table.cpp +24 -0
- data/source/global/tdclatl/Table.h +2 -1
- data/source/global/tdclatl/resource.h +0 -0
- data/source/global/tdclatl/tdclatl.idl +88 -2
- metadata +16 -3
- data/bin/common/tdclc_32_1_1.dll +0 -0
- data/bin/common/tdclc_64_1_1.dll +0 -0
|
@@ -0,0 +1,585 @@
|
|
|
1
|
+
#include <bzs/db/protocol/tdap/client/trdboostapi.h>
|
|
2
|
+
#include <iostream>
|
|
3
|
+
#include <vector>
|
|
4
|
+
#include <bzs/db/protocol/tdap/client/trdormapi.h>
|
|
5
|
+
#include <boost/iterator/iterator_facade.hpp>
|
|
6
|
+
|
|
7
|
+
using namespace bzs::db::protocol::tdap::client;
|
|
8
|
+
using namespace bzs::db::protocol::tdap;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
@brief Read records and manual O/R mapping example
|
|
12
|
+
|
|
13
|
+
This program read records of the "user" table where group = 3.
|
|
14
|
+
And O/R mapping to the user class.
|
|
15
|
+
This program use the filter operation on server side.
|
|
16
|
+
|
|
17
|
+
Please execute "create database" , "change schema" and "insert records" example
|
|
18
|
+
before execute this example.
|
|
19
|
+
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
static const char_td keynum_group = 1;
|
|
24
|
+
static const char_td primary_key = 0;
|
|
25
|
+
|
|
26
|
+
class group
|
|
27
|
+
{
|
|
28
|
+
int m_id;
|
|
29
|
+
std::string m_name;
|
|
30
|
+
protected:
|
|
31
|
+
group(void* owner):m_id(0){}
|
|
32
|
+
public:
|
|
33
|
+
|
|
34
|
+
int id() const {return m_id;}
|
|
35
|
+
const std::string& name() const {return m_name;}
|
|
36
|
+
void setId(int v){m_id = v;}
|
|
37
|
+
void setName(const char* v){m_name = v;}
|
|
38
|
+
static group* create(void* owner){return new group(owner);};
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
typedef boost::shared_ptr<group> group_ptr;
|
|
44
|
+
typedef std::vector<group_ptr> group_ptr_list;
|
|
45
|
+
typedef std::vector<group*> group_list;
|
|
46
|
+
typedef boost::shared_ptr<group_list> group_list_ptr;
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
group* create(group_ptr_list& m, int){return group::create(&m);}
|
|
51
|
+
|
|
52
|
+
class group_fdi
|
|
53
|
+
{
|
|
54
|
+
|
|
55
|
+
public:
|
|
56
|
+
short id;
|
|
57
|
+
short name;
|
|
58
|
+
|
|
59
|
+
//table*�������ɂƂ�init�����Ȃ���Ȃ�Ȃ�
|
|
60
|
+
void init(table* tb)
|
|
61
|
+
{
|
|
62
|
+
id = tb->fieldNumByName(_T("id"));
|
|
63
|
+
name = tb->fieldNumByName(_T("name"));
|
|
64
|
+
}
|
|
65
|
+
//�C���X�^���X��Ԃ�static �� create�����Ȃ���Ȃ�Ȃ�
|
|
66
|
+
//static group_fdi* create(){return new group_fdi();};
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
group_fdi* createFdi(group_fdi *){return new group_fdi();}
|
|
70
|
+
void destroyFdi(group_fdi * p){delete p;}
|
|
71
|
+
void initFdi(group_fdi * fdi, table* tb){fdi->init(tb);}
|
|
72
|
+
|
|
73
|
+
class group_orm
|
|
74
|
+
{
|
|
75
|
+
const group_fdi& m_fdi;
|
|
76
|
+
|
|
77
|
+
public:
|
|
78
|
+
|
|
79
|
+
/* mdl_typename���`���Ȃ���Ȃ�Ȃ�*/
|
|
80
|
+
typedef group mdl_typename;
|
|
81
|
+
|
|
82
|
+
/* fdi_typename���`���Ȃ���Ȃ�Ȃ�
|
|
83
|
+
fdi���g�p���Ȃ��ꍇ�̓f�t�H���g��typedef fdibase fdi_typename; �Ƃ��邱��
|
|
84
|
+
���ƂȂ�FDI���g�p����ꍇ��activeTable<group, group_fdi>�̂悤��
|
|
85
|
+
activeTable�̃C���X�^���X�쐬����fdi�̌^���w�肷�� */
|
|
86
|
+
typedef group_fdi fdi_typename;
|
|
87
|
+
|
|
88
|
+
/* fdi_typename fdi&�������Ɏ��R���X�g���N�^���K�{ */
|
|
89
|
+
group_orm(const fdi_typename& fdi):m_fdi(fdi){}
|
|
90
|
+
|
|
91
|
+
/* ���j�[�N�L�[�����Ă�Ȃ��Ȃ��̂ł��̑��̃L�[���͒�`���Ȃ��Ă悢*/
|
|
92
|
+
bool compKeyValue(group& l, group& r, int keyNum) const
|
|
93
|
+
{
|
|
94
|
+
return l.id() < r.id();
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
void setKeyValues(group& g, const fields& fds, int keyNum)
|
|
98
|
+
{
|
|
99
|
+
fds[m_fdi.id] = g.id();
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
void writeMap(group& g, const fields& fds, int optipn)
|
|
103
|
+
{
|
|
104
|
+
fds[m_fdi.id] = g.id();
|
|
105
|
+
fds[m_fdi.name] = g.name();
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
void readMap(group& g, const fields& fds, int optipn)
|
|
109
|
+
{
|
|
110
|
+
g.setId(fds[m_fdi.id].i());
|
|
111
|
+
g.setName(fds[m_fdi.name].a_str()); //get by ansi string
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
void readAuntoincValue(group& g, const fields& fds, int optipn)
|
|
115
|
+
{
|
|
116
|
+
g.setId(fds[m_fdi.id].i());
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/* �N���X������e�[�u�������������߂̊�getTableName���K�{ */
|
|
120
|
+
const _TCHAR* getTableName(){return _T("group1");}
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
/** User class */
|
|
127
|
+
class user
|
|
128
|
+
{
|
|
129
|
+
mutable group* m_grp;
|
|
130
|
+
int m_id;
|
|
131
|
+
std::string m_name;
|
|
132
|
+
std::string m_tel;
|
|
133
|
+
protected:
|
|
134
|
+
user(void* owner):m_grp(NULL),m_id(0){}
|
|
135
|
+
public:
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
group* grp()const
|
|
139
|
+
{
|
|
140
|
+
if (m_grp == NULL)
|
|
141
|
+
m_grp = group::create(0);
|
|
142
|
+
return m_grp;
|
|
143
|
+
}
|
|
144
|
+
int id() const {return m_id;}
|
|
145
|
+
const std::string& name() const {return m_name;}
|
|
146
|
+
const std::string& tel() const {return m_tel;}
|
|
147
|
+
void setId(int v){m_id = v;}
|
|
148
|
+
void setName(const char* v){m_name = v;}
|
|
149
|
+
void setTel(const char* v){m_tel = v;}
|
|
150
|
+
|
|
151
|
+
//�R���N�V��������ŕK�{�̊��@owner�ɂ̓R���N�V�����̃|�C���^���n����܂��B
|
|
152
|
+
|
|
153
|
+
static user* create(void* owner){return new user(owner);};
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
typedef boost::shared_ptr<user> user_ptr;
|
|
159
|
+
typedef std::vector<user_ptr> user_ptr_list;
|
|
160
|
+
typedef std::vector<user*> user_list;
|
|
161
|
+
typedef boost::shared_ptr<user_list> user_list_ptr;
|
|
162
|
+
|
|
163
|
+
/* �C�e���[�^������͖̂ʓ|������ǂ��A���܂��܂ȃA���S���Y�����g�����Ƃ��l�����
|
|
164
|
+
�쐬����̂��x�^�[
|
|
165
|
+
*/
|
|
166
|
+
/*class mdls;
|
|
167
|
+
class mdlsIterator : public std::iterator<std::random_access_iterator_tag, user*>
|
|
168
|
+
{
|
|
169
|
+
int m_index;
|
|
170
|
+
mdls& m_mdls;
|
|
171
|
+
public:
|
|
172
|
+
//mdlsIterator():m_mdls(*((mdls*)0)){};
|
|
173
|
+
mdlsIterator(mdls& m, int index=0);
|
|
174
|
+
//mdlsIterator& operator=(const mdlsIterator &r) ;
|
|
175
|
+
user* operator*() const;
|
|
176
|
+
mdlsIterator &operator++();
|
|
177
|
+
bool operator!=(const mdlsIterator &r) const;
|
|
178
|
+
//mdlsIterator& operator-(const mdlsIterator &r);
|
|
179
|
+
//mdlsIterator& operator+(const mdlsIterator &r);
|
|
180
|
+
};*/
|
|
181
|
+
|
|
182
|
+
class mdls;
|
|
183
|
+
|
|
184
|
+
/*user* mdlsIterator::operator*() const{return m_mdls[m_index];}
|
|
185
|
+
mdlsIterator& mdlsIterator::operator++() {++m_index; return *this;}
|
|
186
|
+
bool mdlsIterator::operator!=(const mdlsIterator &r) const {return m_index != r.m_index;}
|
|
187
|
+
*/
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
class mdlsIterator
|
|
191
|
+
: public boost::iterator_facade<mdlsIterator, user*
|
|
192
|
+
, boost::random_access_traversal_tag>
|
|
193
|
+
{
|
|
194
|
+
friend class boost::iterator_core_access;
|
|
195
|
+
size_t m_index;
|
|
196
|
+
mdls* m_mdls;
|
|
197
|
+
user*& dereference() const;
|
|
198
|
+
void increment();
|
|
199
|
+
void decrement();
|
|
200
|
+
void advance(size_t n);
|
|
201
|
+
size_t distance_to(const mdlsIterator &r)const;
|
|
202
|
+
bool equal(const mdlsIterator &r) const;
|
|
203
|
+
|
|
204
|
+
public:
|
|
205
|
+
mdlsIterator(mdls* m, int index=0);
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
class mdls
|
|
211
|
+
{
|
|
212
|
+
mutable std::vector<user*> m_users;
|
|
213
|
+
public:
|
|
214
|
+
void clear(){m_users.clear();}
|
|
215
|
+
user* add(user* u)
|
|
216
|
+
{
|
|
217
|
+
m_users.push_back(u);
|
|
218
|
+
return u;
|
|
219
|
+
}
|
|
220
|
+
user*& item(int index)const {return m_users[index];}
|
|
221
|
+
//user** item_ptr(int index)const {return &(m_users[index]);}
|
|
222
|
+
/** �I���W�i���R���N�V�����̏ꍇ�͈ȉ��̂R�̊���
|
|
223
|
+
�A�C�e���̊i�[�^������item_type����������
|
|
224
|
+
���̒lj�������ȏꍇ��adapter������Ă��������B
|
|
225
|
+
*/
|
|
226
|
+
|
|
227
|
+
size_t size(){return m_users.size();}
|
|
228
|
+
user* operator[](unsigned int index)const{return item(index);}
|
|
229
|
+
|
|
230
|
+
/*
|
|
231
|
+
�ȉ��̂Q��typedef��������K�v������
|
|
232
|
+
typedef�̓C���^�t�F�[�X�ɉe�����Ȃ��̂ŁA�ˑ��R�[�h�̍ăR���p�C���͕s�v�ł�
|
|
233
|
+
*/
|
|
234
|
+
typedef user* item_type; //�ێ�����^���w��ł��邪 vector�Ő��̏ꍇ�͎w�肷����@���Ȃ�
|
|
235
|
+
typedef mdlsIterator iterator;//�K�{
|
|
236
|
+
/*
|
|
237
|
+
push_back() begin() end()��(�C���^�t�F�[�X�̕ύX���̂�����ꍇ)
|
|
238
|
+
�������Ă����Ȃ��Ă��ǂ��B���Ȃ��ꍇ�� bzs::db::protocol::tdap::client���O��Ԃ�
|
|
239
|
+
���ꉻ����
|
|
240
|
+
template <>
|
|
241
|
+
mdlsIterator push_back(mdls& m);
|
|
242
|
+
mdlsIterator begin(mdls& m);
|
|
243
|
+
mdlsIterator end(mdls& m);
|
|
244
|
+
�̂R�̊����쐬����B
|
|
245
|
+
*/
|
|
246
|
+
//void push_back(user* u){add(u);}
|
|
247
|
+
//mdlsIterator begin(){return mdlsIterator(*this, 0);}
|
|
248
|
+
//mdlsIterator end(){return mdlsIterator(*this, size());}
|
|
249
|
+
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
/* mdlsIterator�̎��� */
|
|
253
|
+
/*mdlsIterator::mdlsIterator(mdls& m, int index):m_index(index),m_mdls(m){};
|
|
254
|
+
user* mdlsIterator::operator*() const{return m_mdls[m_index];}
|
|
255
|
+
mdlsIterator& mdlsIterator::operator++() {++m_index; return *this;}
|
|
256
|
+
bool mdlsIterator::operator!=(const mdlsIterator &r) const {return m_index != r.m_index;}
|
|
257
|
+
*/
|
|
258
|
+
void dumpUser2(const user* user)
|
|
259
|
+
{
|
|
260
|
+
std::cout << " id " << user->id() << std::endl;
|
|
261
|
+
std::cout << " name " << user->name() << std::endl;
|
|
262
|
+
std::cout << " group " << user->grp()->name() << std::endl;
|
|
263
|
+
std::cout << " tel " << user->tel() << std::endl << std::endl;
|
|
264
|
+
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
user*& mdlsIterator::dereference() const
|
|
269
|
+
{
|
|
270
|
+
//for (int i=0;i<m_mdls->size();++i)
|
|
271
|
+
// dumpUser2((*m_mdls)[i]);
|
|
272
|
+
|
|
273
|
+
return m_mdls->item(m_index);
|
|
274
|
+
//return p;
|
|
275
|
+
}
|
|
276
|
+
void mdlsIterator::increment() {++m_index;}
|
|
277
|
+
void mdlsIterator::decrement() {--m_index;}
|
|
278
|
+
void mdlsIterator::advance(size_t n){m_index+=n;}
|
|
279
|
+
size_t mdlsIterator::distance_to(const mdlsIterator &r)const{return r.m_index - m_index;}
|
|
280
|
+
bool mdlsIterator::equal(const mdlsIterator &r) const {return m_index == r.m_index;}
|
|
281
|
+
mdlsIterator::mdlsIterator(mdls* m, int index):m_index(index),m_mdls(m){}
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
//�I���W�i���R���N�V������push_back begin end�@���������Ȃ��ꍇ�͈ȉ��̖��O
|
|
286
|
+
//��Ԃɂ��ꂼ��̊����쐬����
|
|
287
|
+
namespace bzs{namespace db{namespace protocol{namespace tdap{namespace client
|
|
288
|
+
{
|
|
289
|
+
|
|
290
|
+
inline mdlsIterator begin(mdls& m){return mdlsIterator(&m, 0);}
|
|
291
|
+
|
|
292
|
+
inline mdlsIterator end(mdls& m){return mdlsIterator(&m, m.size());}
|
|
293
|
+
|
|
294
|
+
inline void push_back(mdls& m, user* u){m.add(u);}
|
|
295
|
+
}}}}}
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
user* create(mdls& m, int){return user::create(&m);}
|
|
299
|
+
user* create(user_ptr_list& m, int){return user::create(&m);}
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
class user_fdi //: public fdibase
|
|
304
|
+
{
|
|
305
|
+
|
|
306
|
+
public:
|
|
307
|
+
short id;
|
|
308
|
+
short name;
|
|
309
|
+
short tel;
|
|
310
|
+
short group;
|
|
311
|
+
void init(table* tb)
|
|
312
|
+
{
|
|
313
|
+
id = tb->fieldNumByName(_T("id"));
|
|
314
|
+
name = tb->fieldNumByName(_T("name"));
|
|
315
|
+
tel = tb->fieldNumByName(_T("tel"));
|
|
316
|
+
group = tb->fieldNumByName(_T("group"));
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
//static user_fdi* create(){return new user_fdi();}
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
user_fdi* createFdi(user_fdi *){return new user_fdi();}
|
|
323
|
+
void destroyFdi(user_fdi * p){delete p;}
|
|
324
|
+
void initFdi(user_fdi * fdi, table* tb){fdi->init(tb);}
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
class user_orm
|
|
328
|
+
{
|
|
329
|
+
const user_fdi& m_fdi;
|
|
330
|
+
|
|
331
|
+
public:
|
|
332
|
+
user_orm(const user_fdi& fdi):m_fdi(fdi){}
|
|
333
|
+
|
|
334
|
+
bool compKeyValue(user& l, user& r, int keyNum) const
|
|
335
|
+
{
|
|
336
|
+
if (keyNum==0)
|
|
337
|
+
return l.id() < r.id();
|
|
338
|
+
return 1;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
void setKeyValues(user& u, const fields& fds, int keyNum)
|
|
342
|
+
{
|
|
343
|
+
fds[m_fdi.id] = u.id();
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
void writeMap(user& u, const fields& fds, int optipn)
|
|
347
|
+
{
|
|
348
|
+
fds[m_fdi.id] = u.id();
|
|
349
|
+
fds[m_fdi.name] = u.name();
|
|
350
|
+
fds[m_fdi.tel] = u.tel();
|
|
351
|
+
fds[m_fdi.group] = u.grp()->id();
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
void readMap(user& u, const fields& fds, int optipn)
|
|
355
|
+
{
|
|
356
|
+
u.setId(fds[m_fdi.id].i());
|
|
357
|
+
u.setName(fds[m_fdi.name].a_str()); //get by ansi string
|
|
358
|
+
u.setTel(fds[m_fdi.tel].a_str()); //get by ansi string
|
|
359
|
+
u.grp()->setId(fds[m_fdi.group].i());
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
void readAuntoincValue(user& u, const fields& fds, int optipn)
|
|
363
|
+
{
|
|
364
|
+
u.setId(fds[m_fdi.id].i());
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
/* �N���X������e�[�u�������������߂̊�getTableName���K�{ */
|
|
368
|
+
const _TCHAR* getTableName(){return _T("user");}
|
|
369
|
+
|
|
370
|
+
typedef user mdl_typename;
|
|
371
|
+
typedef user_fdi fdi_typename;
|
|
372
|
+
|
|
373
|
+
/* �I���W�i���R���N�V�����������Ƃ��ɒ�`����
|
|
374
|
+
�ŏ��̌^�͂��̃}�b�v�N���X�A2�Ԗڂ̌^�̓R���N�V�����N���X
|
|
375
|
+
���ꂪ��`����Ă��Ă�vector<shared_ptr<T>>�̃R���N�V������
|
|
376
|
+
�������Ɏg���܂��B
|
|
377
|
+
*/
|
|
378
|
+
typedef mdlsHandler<user_orm, mdls> collection_orm_typename;
|
|
379
|
+
|
|
380
|
+
};
|
|
381
|
+
|
|
382
|
+
typedef user_orm::collection_orm_typename users_orm;
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
int isMatch(const fields& fds)
|
|
386
|
+
{
|
|
387
|
+
return filter_validate_value;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/** dump user to screen */
|
|
391
|
+
void dumpUser(const user_ptr& user)
|
|
392
|
+
{
|
|
393
|
+
std::cout << " id " << user->id() << std::endl;
|
|
394
|
+
std::cout << " name " << user->name() << std::endl;
|
|
395
|
+
std::cout << " group " << user->grp()->name() << std::endl;
|
|
396
|
+
std::cout << " tel " << user->tel() << std::endl << std::endl;
|
|
397
|
+
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
bool sortFunc2(const user* l, const user* r)
|
|
401
|
+
{
|
|
402
|
+
|
|
403
|
+
return l->name() < r->name();
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
void readUsers(databaseManager& db, std::vector<user_ptr>& users)
|
|
407
|
+
{
|
|
408
|
+
int id = 12;
|
|
409
|
+
int find_group_id = 3;
|
|
410
|
+
bool readMyKeyValue = false;
|
|
411
|
+
// user_orm��activeTable�̃C���X�^���X���쐬���܂��B
|
|
412
|
+
activeTable<user_orm> ut(db);
|
|
413
|
+
|
|
414
|
+
//id=12�̃��[�U�[���쐬���܂��B
|
|
415
|
+
user_ptr u(user::create(0));
|
|
416
|
+
u->setId(id);
|
|
417
|
+
u->setName("moriwaki");
|
|
418
|
+
u->setTel("81-999-9999");
|
|
419
|
+
u->grp()->setId(1);
|
|
420
|
+
ut.index(primary_key);
|
|
421
|
+
ut.save(*u);
|
|
422
|
+
|
|
423
|
+
//id=12�̃��[�U�[��ǂݎ��
|
|
424
|
+
ut.read(*u);
|
|
425
|
+
|
|
426
|
+
//id=12�̃��[�U�[�̓d�b�ԍ��̕ύX
|
|
427
|
+
u->setTel("81-999-8888");
|
|
428
|
+
ut.update(*u);
|
|
429
|
+
|
|
430
|
+
//�L�[�l��ς���Ƃ���
|
|
431
|
+
ut.index(primary_key).keyValue(u->id());
|
|
432
|
+
u->setId(13);
|
|
433
|
+
ut.update(*u, readMyKeyValue);
|
|
434
|
+
|
|
435
|
+
//id=13�̃��[�U�[�폜
|
|
436
|
+
ut.del(*u);
|
|
437
|
+
|
|
438
|
+
//�폜�̓L�[�l�����ł�OK
|
|
439
|
+
ut.index(primary_key).keyValue(12).del(); //�G���[�@���R�[�h�Ȃ�
|
|
440
|
+
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
//�J�[�\����index�ƃL�[�ʒu���w�肵�܂��B
|
|
444
|
+
//�������烌�R�[�h�̌������J�n���܂��B
|
|
445
|
+
ut.index(keynum_group).keyValue(find_group_id);
|
|
446
|
+
|
|
447
|
+
//�����������w�肵�܂��B�T�[�o�[�t�B���^�[�ł��B
|
|
448
|
+
//reject�Ŏw�肵���A���}�b�`���R�[�h���ɂȂ�ƌ����𒆎~���܂��B
|
|
449
|
+
query q;
|
|
450
|
+
q.select(_T("*")).where(_T("group"), _T("=") , find_group_id)//.or(_T("group"), _T("=") , _T("a"))
|
|
451
|
+
.reject(1);
|
|
452
|
+
|
|
453
|
+
//�ǂݎ������s�B�@���ʂ����R���N�V�����ƃN�G���[��n���܂��B
|
|
454
|
+
ut.read(users, q);
|
|
455
|
+
|
|
456
|
+
|
|
457
|
+
/*
|
|
458
|
+
�O���reads�Ŏg�p�����R���N�V������vector�ł����B�������I���W�i����
|
|
459
|
+
�R���N�V�������g�p���Ă���ꍇ������ł��傤
|
|
460
|
+
user_orm�ɃI���W�i���R���N�V�����}�b�v�̌^collection_orm_typename��
|
|
461
|
+
�m�点�Ă����Ύ����ŃC���X�^���X���쐬���n���h�����Ă���܂�*/
|
|
462
|
+
|
|
463
|
+
mdls m;
|
|
464
|
+
ut.index(keynum_group).keyValue(find_group_id).read(m, q);
|
|
465
|
+
|
|
466
|
+
|
|
467
|
+
/*
|
|
468
|
+
�I���W�i���R���N�V�����}�b�v�������ō쐬�łȂ������ŏ���������
|
|
469
|
+
�g���������Ƃ�����ł��傤���̎���readsBy���g�p���܂�*/
|
|
470
|
+
|
|
471
|
+
users_orm users_hdr(m);
|
|
472
|
+
ut.readRange(users_hdr, q);
|
|
473
|
+
|
|
474
|
+
|
|
475
|
+
/* �N���C�A���g���t�B���^�[���ȒP�Ɏg���܂��B
|
|
476
|
+
isMatch���̂悤�ȁ@const fields&�������Ɏ����int��Ԃ����Ȃ牽�ł�
|
|
477
|
+
OK�ł��B
|
|
478
|
+
*/
|
|
479
|
+
ut.index(keynum_group).keyValue(find_group_id).read(users, q, isMatch);
|
|
480
|
+
|
|
481
|
+
|
|
482
|
+
|
|
483
|
+
//group�̓ǂݎ��
|
|
484
|
+
group_ptr grp(group::create(0));
|
|
485
|
+
|
|
486
|
+
activeTable<group_orm> gt(db);
|
|
487
|
+
//shared_ptr<group>�̃C���X�^���X��*�����ēn���܂��B
|
|
488
|
+
gt.index(0).keyValue(2).read(*grp);
|
|
489
|
+
|
|
490
|
+
|
|
491
|
+
|
|
492
|
+
/*
|
|
493
|
+
���|�C���^�̃|�C���^�̎��� *�����ēn���܂��B
|
|
494
|
+
shared_ptr�ł����|�C���^�ł�*�����ē����悤�ɓn���܂��B
|
|
495
|
+
*/
|
|
496
|
+
group* g = group::create(0);
|
|
497
|
+
gt.read(*g);
|
|
498
|
+
delete g;
|
|
499
|
+
|
|
500
|
+
|
|
501
|
+
//--------------------------------------------------------
|
|
502
|
+
// Join�̂悤�ȏ���
|
|
503
|
+
//--------------------------------------------------------
|
|
504
|
+
/*
|
|
505
|
+
users����O���[�v�̃��X�g���쐬����user�Ɋ֘A�t�����O���[�v
|
|
506
|
+
��ǂݎ��܂��B
|
|
507
|
+
list���ɃR���N�V������user->grp()���̃A�h���X��n���܂��B
|
|
508
|
+
activeTable<group_orm>��readEach���ɂ��̃��X�g��n���܂��B
|
|
509
|
+
*/
|
|
510
|
+
query qe;
|
|
511
|
+
group_list_ptr grps(listup(users, &user::grp));
|
|
512
|
+
gt.index(primary_key).readEach(*grps, qe.select(_T("id"), _T("name")));
|
|
513
|
+
|
|
514
|
+
|
|
515
|
+
//�I���W�i���̃O���[�v���X�g�ł�listup���͎g���܂��B
|
|
516
|
+
group_list_ptr grps2(listup(m, &user::grp));
|
|
517
|
+
gt.index(primary_key).readEach(*grps2, qe);
|
|
518
|
+
|
|
519
|
+
|
|
520
|
+
//listup���������Ď����ōs��
|
|
521
|
+
gt.index(primary_key);
|
|
522
|
+
gt.readEach(users, &user::grp, qe.select(_T("id"), _T("name")));
|
|
523
|
+
gt.readEach(m, &user::grp, qe);
|
|
524
|
+
|
|
525
|
+
//IN
|
|
526
|
+
gt.index(primary_key);
|
|
527
|
+
qe.reset();
|
|
528
|
+
std::vector<group_ptr> gmdls;
|
|
529
|
+
gt.read(gmdls, qe.select(_T("id"), _T("name")).in(1, 2, 3));
|
|
530
|
+
|
|
531
|
+
//orderby
|
|
532
|
+
users.clear();
|
|
533
|
+
ut.index(0).keyValue(0).read(users, q.all());
|
|
534
|
+
sort(users, &user::name, &user::id);
|
|
535
|
+
|
|
536
|
+
//groupby
|
|
537
|
+
//����l�����o����
|
|
538
|
+
|
|
539
|
+
//�\�[�g�Ή��̃C�e���[�^�͑�ςł��B
|
|
540
|
+
m.clear();
|
|
541
|
+
ut.index(0).keyValue(0).read(m, q);
|
|
542
|
+
|
|
543
|
+
sort(m, &user::name);
|
|
544
|
+
std::sort(begin(m), end(m), &sortFunc2);
|
|
545
|
+
|
|
546
|
+
std::for_each(begin(m), end(m), dumpUser2);
|
|
547
|
+
|
|
548
|
+
//�e�[�u�������̑���
|
|
549
|
+
table_ptr tb = ut.table();
|
|
550
|
+
tb->clearOwnerName();
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
|
|
554
|
+
#pragma argsused
|
|
555
|
+
int _tmain(int argc, _TCHAR* argv[])
|
|
556
|
+
{
|
|
557
|
+
database_ptr db = createDatadaseObject();
|
|
558
|
+
try
|
|
559
|
+
{
|
|
560
|
+
connectParams param(_T("tdap"), _T("localhost"), _T("test"), _T("test"));
|
|
561
|
+
openDatabase(db, param);
|
|
562
|
+
|
|
563
|
+
databaseManager mgr(db);
|
|
564
|
+
std::vector<user_ptr> users;
|
|
565
|
+
|
|
566
|
+
readUsers(mgr, users);
|
|
567
|
+
std::cout << "Read records success.\nRecord count = " << users.size() << std::endl;
|
|
568
|
+
|
|
569
|
+
//dump users to screen.
|
|
570
|
+
std::for_each(users.begin(), users.end(), dumpUser);
|
|
571
|
+
|
|
572
|
+
return 0;
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
catch(bzs::rtl::exception& e)
|
|
576
|
+
{
|
|
577
|
+
std::tcout << *bzs::rtl::getMsg(e) << std::endl;
|
|
578
|
+
}
|
|
579
|
+
return 1;
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
|
|
583
|
+
|
|
584
|
+
|
|
585
|
+
|
data/source/bzs/rtl/exception.h
CHANGED
|
@@ -44,12 +44,16 @@ class exception : public std::exception
|
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
public:
|
|
47
|
+
exception(): std::exception(),m_error(0){};
|
|
47
48
|
exception(int error, const std::_tstring& message): std::exception()
|
|
48
49
|
,m_error(error),m_message(message){};
|
|
49
50
|
explicit exception(int error):std::exception(),m_error(error){};
|
|
50
51
|
explicit exception(const std::_tstring& message): std::exception(),m_message(message){};
|
|
51
52
|
const std::_tstring& getMessage(){return m_message;}
|
|
52
53
|
const int& getErrorCode(){return m_error;}
|
|
54
|
+
exception& operator<<(int error){m_error = error;return *this;}
|
|
55
|
+
exception& operator<<(const _TCHAR* msg){m_message += msg;return *this;}
|
|
56
|
+
|
|
53
57
|
|
|
54
58
|
};
|
|
55
59
|
|
|
@@ -67,6 +71,8 @@ inline const int* getCode(bzs::rtl::exception &e)
|
|
|
67
71
|
return &e.getErrorCode();
|
|
68
72
|
}
|
|
69
73
|
|
|
74
|
+
inline int errnoCode(int code){return code;}
|
|
75
|
+
inline const _TCHAR* errMessage(const _TCHAR* msg){return msg;}
|
|
70
76
|
|
|
71
77
|
|
|
72
78
|
|
|
@@ -217,6 +217,7 @@ function Reads(db, tb, start, end, name, shapshot)
|
|
|
217
217
|
/*--------------------------------------------------------------------------------*/
|
|
218
218
|
function ReadRange(db, tb, start, end, name, unit, shapshot)
|
|
219
219
|
{
|
|
220
|
+
var qb = new ActiveXObject('transactd.query');
|
|
220
221
|
var ret = true;
|
|
221
222
|
var now = new Date();
|
|
222
223
|
var ticks = now.getTime();
|
|
@@ -229,9 +230,9 @@ function ReadRange(db, tb, start, end, name, unit, shapshot)
|
|
|
229
230
|
while (en != end)
|
|
230
231
|
{
|
|
231
232
|
en = st + unit;
|
|
232
|
-
tb.Filter = "id >= " + st + " and id < " + en;
|
|
233
|
-
tb.FilterRejectCount = 1;
|
|
234
233
|
tb.ClearBuffer();
|
|
234
|
+
qb.Where("id", ">=", st).And("id", "<", en);
|
|
235
|
+
tb.SetQuery(qb);
|
|
235
236
|
tb.Vlng(fn_id) = st;
|
|
236
237
|
tb.SeekGreater(true/*orEqual*/);
|
|
237
238
|
for(var i=st;i<en;i++)
|
|
@@ -243,7 +244,6 @@ function ReadRange(db, tb, start, end, name, unit, shapshot)
|
|
|
243
244
|
break;
|
|
244
245
|
}
|
|
245
246
|
tb.FindNext();
|
|
246
|
-
|
|
247
247
|
}
|
|
248
248
|
if (ret==false) break;
|
|
249
249
|
st = en;
|
|
@@ -391,15 +391,20 @@ function main()
|
|
|
391
391
|
var end = start + count;
|
|
392
392
|
|
|
393
393
|
if (db.Open(URI, TYPE_BDF, OPEN_NORMAL, "", ""))
|
|
394
|
-
|
|
394
|
+
{
|
|
395
|
+
if (execType < 3)
|
|
396
|
+
db.Drop();
|
|
397
|
+
}
|
|
395
398
|
if (db.Stat == 3106)
|
|
396
399
|
{
|
|
397
400
|
WScript.Echo("Error! Maybe MySQL or Tranasactd is stopping! ");
|
|
398
401
|
return 1;
|
|
399
402
|
}
|
|
400
|
-
if (
|
|
401
|
-
|
|
402
|
-
|
|
403
|
+
if (execType < 3)
|
|
404
|
+
{
|
|
405
|
+
if (!createTestDataBase(db, URI))
|
|
406
|
+
return 1;
|
|
407
|
+
}
|
|
403
408
|
var now = new Date();
|
|
404
409
|
WScript.Echo("Start Bench mark Insert Items = " + count);
|
|
405
410
|
WScript.Echo(now);
|