transactd 1.0.1
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 +7 -0
- data/BUILD_UNIX-JA +174 -0
- data/BUILD_WIN-JA +256 -0
- data/CMakeLists.txt +96 -0
- data/COPYING +339 -0
- data/README +406 -0
- data/README-JA +424 -0
- data/bin/common/tdclc_32_1_0.dll +0 -0
- data/bin/common/tdclc_64_1_0.dll +0 -0
- data/build/common/check_for_link_iconv.cmake +73 -0
- data/build/common/copyifgreater.cmd +30 -0
- data/build/common/copyifgreater.js +290 -0
- data/build/common/get_boost_libs.cmake +106 -0
- data/build/common/get_ruby_path.cmake +115 -0
- data/build/common/options.cmake +127 -0
- data/build/common/smart_install.cmake +263 -0
- data/build/common/system.cmake +122 -0
- data/build/common/transactd.rc.in +52 -0
- data/build/common/transactd_cl_common.cmake +101 -0
- data/build/common/transactd_cl_output.cmake +93 -0
- data/build/common/transactd_common.cmake +237 -0
- data/build/common/transactd_required.cmake +28 -0
- data/build/swig/ruby/generate.cmake.in +35 -0
- data/build/swig/ruby/generate.cmd.in +19 -0
- data/build/swig/ruby/ruby.swg +101 -0
- data/build/swig/tdcl.i +188 -0
- data/build/tdclc/BUILDNUMBER.txt +1 -0
- data/build/tdclc/CMakeLists.txt +170 -0
- data/build/tdclc/tdclc_32.cbproj +181 -0
- data/build/tdclc/tdclc_64.cbproj +205 -0
- data/build/tdclcpp/BUILDNUMBER.txt +1 -0
- data/build/tdclcpp/CMakeLists.txt +142 -0
- data/build/tdclcpp/tdclcpp_bcb_32.cbproj +239 -0
- data/build/tdclcpp/tdclcpp_bcb_64.cbproj +304 -0
- data/build/tdclrb/BUILDNUMBER.txt +1 -0
- data/build/tdclrb/CMakeLists.txt +258 -0
- data/build/tdclrb/GEM_VERSION +3 -0
- data/build/tdclrb/bldgem/extconf.rb +123 -0
- data/build/tdclrb/gem/INSTALLLOG.win32 +9 -0
- data/build/tdclrb/gem/Makefile.win32-VS +65 -0
- data/build/tdclrb/gem/Makefile.win32-prebuilt +48 -0
- data/build/tdclrb/gem/detect.rb +31 -0
- data/build/tdclrb/gem/helper.rb +113 -0
- data/build/tdclrb/gem/transactd.rb +22 -0
- data/build/tdclrb/gem_output.cmake +44 -0
- data/source/bzs/db/IBlobBuffer.h +51 -0
- data/source/bzs/db/blobBuffer.h +177 -0
- data/source/bzs/db/blobStructs.h +85 -0
- data/source/bzs/db/engine/mysql/IReadRecords.h +52 -0
- data/source/bzs/db/engine/mysql/bookmark.h +195 -0
- data/source/bzs/db/engine/mysql/database.cpp +1882 -0
- data/source/bzs/db/engine/mysql/database.h +465 -0
- data/source/bzs/db/engine/mysql/dbManager.cpp +303 -0
- data/source/bzs/db/engine/mysql/dbManager.h +143 -0
- data/source/bzs/db/engine/mysql/errorMessage.cpp +75 -0
- data/source/bzs/db/engine/mysql/errorMessage.h +43 -0
- data/source/bzs/db/engine/mysql/fieldAccess.h +158 -0
- data/source/bzs/db/engine/mysql/mydebuglog.cpp +349 -0
- data/source/bzs/db/engine/mysql/mydebuglog.h +89 -0
- data/source/bzs/db/engine/mysql/mysqlInternal.h +171 -0
- data/source/bzs/db/engine/mysql/mysqlThd.cpp +169 -0
- data/source/bzs/db/engine/mysql/mysqlThd.h +35 -0
- data/source/bzs/db/engine/mysql/percentageKey.h +260 -0
- data/source/bzs/db/protocol/ICommandExecuter.h +49 -0
- data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +689 -0
- data/source/bzs/db/protocol/hs/hsCommandExecuter.h +228 -0
- data/source/bzs/db/protocol/tdap/btrDate.cpp +437 -0
- data/source/bzs/db/protocol/tdap/btrDate.h +227 -0
- data/source/bzs/db/protocol/tdap/client/bulkInsert.h +127 -0
- data/source/bzs/db/protocol/tdap/client/client.cpp +106 -0
- data/source/bzs/db/protocol/tdap/client/client.h +292 -0
- data/source/bzs/db/protocol/tdap/client/connMgr.cpp +144 -0
- data/source/bzs/db/protocol/tdap/client/connMgr.h +82 -0
- data/source/bzs/db/protocol/tdap/client/database.cpp +863 -0
- data/source/bzs/db/protocol/tdap/client/database.h +118 -0
- data/source/bzs/db/protocol/tdap/client/databaseFactory.cpp +100 -0
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +1640 -0
- data/source/bzs/db/protocol/tdap/client/dbDef.h +135 -0
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +434 -0
- data/source/bzs/db/protocol/tdap/client/errorMessage.cpp +92 -0
- data/source/bzs/db/protocol/tdap/client/errorMessage_ja.cpp +98 -0
- data/source/bzs/db/protocol/tdap/client/fieldDDF.cpp +174 -0
- data/source/bzs/db/protocol/tdap/client/fieldDDF.h +91 -0
- data/source/bzs/db/protocol/tdap/client/fileDDF.cpp +140 -0
- data/source/bzs/db/protocol/tdap/client/fileDDF.h +86 -0
- data/source/bzs/db/protocol/tdap/client/filter.cpp +527 -0
- data/source/bzs/db/protocol/tdap/client/filter.h +154 -0
- data/source/bzs/db/protocol/tdap/client/indexDDF.cpp +137 -0
- data/source/bzs/db/protocol/tdap/client/indexDDF.h +84 -0
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +724 -0
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +123 -0
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +899 -0
- data/source/bzs/db/protocol/tdap/client/nsTable.h +199 -0
- data/source/bzs/db/protocol/tdap/client/request.h +198 -0
- data/source/bzs/db/protocol/tdap/client/sharedData.cpp +58 -0
- data/source/bzs/db/protocol/tdap/client/sharedData.h +56 -0
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +574 -0
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +53 -0
- data/source/bzs/db/protocol/tdap/client/stringConverter.h +627 -0
- data/source/bzs/db/protocol/tdap/client/table.cpp +2613 -0
- data/source/bzs/db/protocol/tdap/client/table.h +221 -0
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +1096 -0
- data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +179 -0
- data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +40 -0
- data/source/bzs/db/protocol/tdap/client/trnsctcl.def +11 -0
- data/source/bzs/db/protocol/tdap/myDateTime.cpp +500 -0
- data/source/bzs/db/protocol/tdap/mysql/characterset.cpp +184 -0
- data/source/bzs/db/protocol/tdap/mysql/characterset.h +60 -0
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +284 -0
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +53 -0
- data/source/bzs/db/protocol/tdap/mysql/debuglog.cpp +383 -0
- data/source/bzs/db/protocol/tdap/mysql/debuglog.h +106 -0
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +680 -0
- data/source/bzs/db/protocol/tdap/mysql/request.h +202 -0
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +1020 -0
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +141 -0
- data/source/bzs/db/protocol/tdap/tdapRequest.h +190 -0
- data/source/bzs/db/protocol/tdap/tdapSchema.cpp +295 -0
- data/source/bzs/db/protocol/tdap/tdapSchema.h +558 -0
- data/source/bzs/db/protocol/tdap/tdapcapi.h +423 -0
- data/source/bzs/db/transactd/appBuilderImple.h +55 -0
- data/source/bzs/db/transactd/appModule.cpp +183 -0
- data/source/bzs/db/transactd/appModule.h +80 -0
- data/source/bzs/db/transactd/connManager.cpp +201 -0
- data/source/bzs/db/transactd/connManager.h +60 -0
- data/source/bzs/db/transactd/connectionRecord.h +69 -0
- data/source/bzs/db/transactd/transactd.cpp +325 -0
- data/source/bzs/env/compiler.h +135 -0
- data/source/bzs/env/crosscompile.cpp +130 -0
- data/source/bzs/env/crosscompile.h +150 -0
- data/source/bzs/env/fileopen.h +36 -0
- data/source/bzs/env/mbcswchrLinux.cpp +40 -0
- data/source/bzs/env/mbcswchrLinux.h +88 -0
- data/source/bzs/env/tstring.h +183 -0
- data/source/bzs/example/changeSchema.cpp +117 -0
- data/source/bzs/example/changeSchema_c.cpp +78 -0
- data/source/bzs/example/connection_pool_c.cpp +171 -0
- data/source/bzs/example/createDatabase.cpp +305 -0
- data/source/bzs/example/createDatabase_c.cpp +202 -0
- data/source/bzs/example/deleteRecords.cpp +87 -0
- data/source/bzs/example/deleteRecords_c.cpp +57 -0
- data/source/bzs/example/dropDatabase.cpp +59 -0
- data/source/bzs/example/dropDatabase_c.cpp +34 -0
- data/source/bzs/example/insertRecords.cpp +212 -0
- data/source/bzs/example/insertRecords_c.cpp +153 -0
- data/source/bzs/example/readRecords.cpp +141 -0
- data/source/bzs/example/readRecords_c.cpp +107 -0
- data/source/bzs/example/updateRecords.cpp +99 -0
- data/source/bzs/example/updateRecords_c.cpp +71 -0
- data/source/bzs/example/update_with_transaction.cpp +104 -0
- data/source/bzs/example/update_with_transaction_c.cpp +80 -0
- data/source/bzs/netsvc/client/tcpClient.cpp +226 -0
- data/source/bzs/netsvc/client/tcpClient.h +489 -0
- data/source/bzs/netsvc/server/IAppModule.h +94 -0
- data/source/bzs/netsvc/server/iserver.h +65 -0
- data/source/bzs/netsvc/server/serverCpt.cpp +522 -0
- data/source/bzs/netsvc/server/serverCpt.h +88 -0
- data/source/bzs/netsvc/server/serverPipe.cpp +705 -0
- data/source/bzs/netsvc/server/serverPipe.h +96 -0
- data/source/bzs/netsvc/server/serverTpool.cpp +416 -0
- data/source/bzs/netsvc/server/serverTpool.h +84 -0
- data/source/bzs/rtl/benchmark.cpp +96 -0
- data/source/bzs/rtl/benchmark.h +65 -0
- data/source/bzs/rtl/datetime.cpp +375 -0
- data/source/bzs/rtl/datetime.h +53 -0
- data/source/bzs/rtl/debuglog.cpp +106 -0
- data/source/bzs/rtl/debuglog.h +97 -0
- data/source/bzs/rtl/exception.h +116 -0
- data/source/bzs/rtl/stl_uty.cpp +35 -0
- data/source/bzs/rtl/stl_uty.h +29 -0
- data/source/bzs/rtl/stringBuffers.cpp +101 -0
- data/source/bzs/rtl/stringBuffers.h +58 -0
- data/source/bzs/rtl/strtrim.cpp +135 -0
- data/source/bzs/rtl/strtrim.h +46 -0
- data/source/bzs/test/tdclatl/bench_tdclatl.js +445 -0
- data/source/bzs/test/tdclrb/bench_tdclcpp.rb +375 -0
- data/source/bzs/test/tdclrb/prepare.rb +226 -0
- data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +172 -0
- data/source/bzs/test/tdclrb/transactd_kanjischema_spec.rb +208 -0
- data/source/bzs/test/tdclrb/transactd_spec.rb +1536 -0
- data/source/bzs/test/transactdBench/transactdBench.cpp +430 -0
- data/source/bzs/test/transactdBench/transactdBench2.cpp +342 -0
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +2030 -0
- data/source/global/tdclatl/Database.cpp +503 -0
- data/source/global/tdclatl/Database.h +139 -0
- data/source/global/tdclatl/DbDef.cpp +242 -0
- data/source/global/tdclatl/DbDef.h +79 -0
- data/source/global/tdclatl/Field.cpp +92 -0
- data/source/global/tdclatl/Field.h +59 -0
- data/source/global/tdclatl/FieldDef.cpp +238 -0
- data/source/global/tdclatl/FieldDef.h +87 -0
- data/source/global/tdclatl/Flags.cpp +111 -0
- data/source/global/tdclatl/Flags.h +55 -0
- data/source/global/tdclatl/KeyDef.cpp +51 -0
- data/source/global/tdclatl/KeyDef.h +55 -0
- data/source/global/tdclatl/KeySegment.cpp +55 -0
- data/source/global/tdclatl/Table.cpp +600 -0
- data/source/global/tdclatl/Table.h +144 -0
- data/source/global/tdclatl/TableDef.cpp +291 -0
- data/source/global/tdclatl/TableDef.h +86 -0
- data/source/global/tdclatl/TdVersion.cpp +74 -0
- data/source/global/tdclatl/TdVersion.h +54 -0
- data/source/global/tdclatl/_IDatabaseEvents_CP.h +113 -0
- data/source/global/tdclatl/dllmain.cpp +30 -0
- data/source/global/tdclatl/dllmain.h +27 -0
- data/source/global/tdclatl/keySegment.h +57 -0
- data/source/global/tdclatl/resource.h +0 -0
- data/source/global/tdclatl/stdafx.cpp +2 -0
- data/source/global/tdclatl/stdafx.h +25 -0
- data/source/global/tdclatl/targetver.h +4 -0
- data/source/global/tdclatl/tdclatl.cpp +68 -0
- data/source/global/tdclatl/tdclatl.def +10 -0
- data/source/global/tdclatl/tdclatl.idl +1035 -0
- data/source/linux/charsetConvert.h +112 -0
- data/source/linux/linuxTypes.h +33 -0
- data/source/linux/tchar.h +428 -0
- data/transactd.gemspec +97 -0
- metadata +267 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
#include <stdio.h>
|
|
2
|
+
#include <bzs/db/protocol/tdap/client/database.h>
|
|
3
|
+
#include <bzs/db/protocol/tdap/client/table.h>
|
|
4
|
+
#include <bzs/db/protocol/tdap/client/dbdef.h>
|
|
5
|
+
#include <vector>
|
|
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
|
+
static const short fieldnum_id = 0;
|
|
23
|
+
static const short fieldnum_name = 1;
|
|
24
|
+
static const short fieldnum_group = 2;
|
|
25
|
+
static const short fieldnum_tel = 3;
|
|
26
|
+
static const char_td keynum_group = 1;
|
|
27
|
+
|
|
28
|
+
/** User class */
|
|
29
|
+
class user
|
|
30
|
+
{
|
|
31
|
+
public:
|
|
32
|
+
int id;
|
|
33
|
+
std::_tstring name;
|
|
34
|
+
int group;
|
|
35
|
+
std::_tstring tel;
|
|
36
|
+
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/** dump user to screen */
|
|
40
|
+
void dumpUser(const user* user)
|
|
41
|
+
{
|
|
42
|
+
_tprintf(_T(" id %d\n") ,user->id);
|
|
43
|
+
_tprintf(_T(" name %s\n") ,user->name.c_str());
|
|
44
|
+
_tprintf(_T(" group %d\n") ,user->group);
|
|
45
|
+
_tprintf(_T(" tel %s\n\n") ,user->tel.c_str());
|
|
46
|
+
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** O/R mapping functional object*/
|
|
50
|
+
class userMappper
|
|
51
|
+
{
|
|
52
|
+
std::vector<user*>& m_users;
|
|
53
|
+
public:
|
|
54
|
+
userMappper(std::vector<user*>& users):m_users(users){}
|
|
55
|
+
void operator()(table* tb)
|
|
56
|
+
{
|
|
57
|
+
user* u = new user();
|
|
58
|
+
u->id = tb->getFVint(fieldnum_id);
|
|
59
|
+
u->name = tb->getFVstr(fieldnum_name);
|
|
60
|
+
u->group = tb->getFVint(fieldnum_group);
|
|
61
|
+
u->tel = tb->getFVstr(fieldnum_tel);
|
|
62
|
+
m_users.push_back(u);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
/** show database operation error
|
|
67
|
+
*/
|
|
68
|
+
void showError(const _TCHAR* caption,const _TCHAR* tableName, short statusCode)
|
|
69
|
+
{
|
|
70
|
+
_TCHAR tmp[1024]={0x00};
|
|
71
|
+
nstable::tdapErr(0x00, statusCode, tableName, tmp);
|
|
72
|
+
_tprintf(_T("%s error No.%ld %s\n"),caption, statusCode, tmp);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
bool readUsers(table* tb, std::vector<user*>& users)
|
|
76
|
+
{
|
|
77
|
+
userMappper ormap(users);
|
|
78
|
+
tb->clearBuffer();
|
|
79
|
+
tb->setKeyNum(keynum_group); //use group key
|
|
80
|
+
tb->setFV(fieldnum_group, 3);// set group = 3;
|
|
81
|
+
tb->seekGreater(true /*orEqual*/);
|
|
82
|
+
if (tb->stat() == 0)
|
|
83
|
+
tb->setFilter(_T("group = 3"), 1/*rejectCount*/, 0/*max records*/);
|
|
84
|
+
while (1)
|
|
85
|
+
{
|
|
86
|
+
if (tb->stat() != 0)
|
|
87
|
+
{
|
|
88
|
+
if (tb->stat() == STATUS_EOF)
|
|
89
|
+
return true;
|
|
90
|
+
showError(_T("read user"), tb->tableDef()->tableName(), tb->stat());
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
ormap(tb);
|
|
94
|
+
tb->findNext();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** Open database
|
|
99
|
+
*/
|
|
100
|
+
bool openDatabase(database* db, const _TCHAR* uri)
|
|
101
|
+
{
|
|
102
|
+
db->open(uri, TYPE_SCHEMA_BDF);
|
|
103
|
+
if (db->stat() != 0)
|
|
104
|
+
{
|
|
105
|
+
showError(_T("open daatabase"), NULL, db->stat());
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
#pragma argsused
|
|
112
|
+
int _tmain(int argc, _TCHAR* argv[])
|
|
113
|
+
{
|
|
114
|
+
int result = 0;
|
|
115
|
+
static const _TCHAR* uri = _T("tdap://localhost/test?dbfile=test.bdf");
|
|
116
|
+
database* db = database::create();
|
|
117
|
+
|
|
118
|
+
if (openDatabase(db, uri))
|
|
119
|
+
{
|
|
120
|
+
table* tbu = db->openTable(_T("user"));
|
|
121
|
+
if (db->stat() != 0)
|
|
122
|
+
showError(_T("open user table"), NULL, db->stat());
|
|
123
|
+
else
|
|
124
|
+
{
|
|
125
|
+
std::vector<user*> users;
|
|
126
|
+
if (readUsers(tbu, users))
|
|
127
|
+
{
|
|
128
|
+
_tprintf(_T("Read records success.\nRecord count = %d\n"), users.size());
|
|
129
|
+
std::for_each(users.begin(), users.end(), dumpUser);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
for (size_t i=0;i<users.size();++i)
|
|
133
|
+
delete users[i];
|
|
134
|
+
|
|
135
|
+
tbu->release();
|
|
136
|
+
}
|
|
137
|
+
db->close();
|
|
138
|
+
}
|
|
139
|
+
database::destroy(db);
|
|
140
|
+
return result;
|
|
141
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
#include <bzs/db/protocol/tdap/client/trdboostapi.h>
|
|
2
|
+
#include <iostream>
|
|
3
|
+
#include <vector>
|
|
4
|
+
|
|
5
|
+
using namespace bzs::db::protocol::tdap::client;
|
|
6
|
+
using namespace bzs::db::protocol::tdap;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
@brief Read records and manual O/R mapping example
|
|
10
|
+
|
|
11
|
+
This program read records of the "user" table where group = 3.
|
|
12
|
+
And O/R mapping to the user class.
|
|
13
|
+
This program use the filter operation on server side.
|
|
14
|
+
|
|
15
|
+
Please execute "create database" , "change schema" and "insert records" example
|
|
16
|
+
before execute this example.
|
|
17
|
+
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
static const short fieldnum_id = 0;
|
|
21
|
+
static const short fieldnum_name = 1;
|
|
22
|
+
static const short fieldnum_group = 2;
|
|
23
|
+
static const short fieldnum_tel = 3;
|
|
24
|
+
static const char_td keynum_group = 1;
|
|
25
|
+
|
|
26
|
+
/** User class */
|
|
27
|
+
class user
|
|
28
|
+
{
|
|
29
|
+
public:
|
|
30
|
+
int id;
|
|
31
|
+
std::string name;
|
|
32
|
+
int group;
|
|
33
|
+
std::string tel;
|
|
34
|
+
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
typedef boost::shared_ptr<user> user_ptr;
|
|
38
|
+
|
|
39
|
+
/** dump user to screen */
|
|
40
|
+
void dumpUser(const user_ptr& user)
|
|
41
|
+
{
|
|
42
|
+
std::cout << " id " << user->id << std::endl;
|
|
43
|
+
std::cout << " name " << user->name << std::endl;
|
|
44
|
+
std::cout << " group " << user->group << std::endl;
|
|
45
|
+
std::cout << " tel " << user->tel << std::endl << std::endl;
|
|
46
|
+
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** OR mapping functional object*/
|
|
50
|
+
class userMappper
|
|
51
|
+
{
|
|
52
|
+
std::vector<user_ptr>& m_users;
|
|
53
|
+
public:
|
|
54
|
+
userMappper(std::vector<user_ptr>& users):m_users(users){}
|
|
55
|
+
void operator()(const fields& fds)
|
|
56
|
+
{
|
|
57
|
+
user_ptr u(new user());
|
|
58
|
+
u->id = fds[fieldnum_id].i();
|
|
59
|
+
u->name = fds[fieldnum_name].a_str(); //get by ansi string
|
|
60
|
+
u->group = fds[fieldnum_group].i();
|
|
61
|
+
u->tel = fds[fieldnum_tel].a_str(); //get by ansi string
|
|
62
|
+
m_users.push_back(u);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
void readUsers(table_ptr tb, std::vector<user_ptr>& users)
|
|
67
|
+
{
|
|
68
|
+
|
|
69
|
+
// Get filterIterator. This filter is execute on server side.
|
|
70
|
+
filterParams fp( _T("group = 3"), 1 , 0);
|
|
71
|
+
findIterator itsf = find(tb, keynum_group, fp, 3);
|
|
72
|
+
|
|
73
|
+
// O/R mapping functional object
|
|
74
|
+
userMappper ormap(users);
|
|
75
|
+
|
|
76
|
+
//loop each group=1 records
|
|
77
|
+
for_each(itsf, ormap);
|
|
78
|
+
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
#pragma argsused
|
|
82
|
+
int _tmain(int argc, _TCHAR* argv[])
|
|
83
|
+
{
|
|
84
|
+
database_ptr db = createDatadaseObject();
|
|
85
|
+
try
|
|
86
|
+
{
|
|
87
|
+
connectParams param(_T("tdap"), _T("localhost"), _T("test"), _T("test"));
|
|
88
|
+
openDatabase(db, param);
|
|
89
|
+
|
|
90
|
+
table_ptr tb = openTable(db, _T("user"));
|
|
91
|
+
std::vector<user_ptr> users;
|
|
92
|
+
readUsers(tb, users);
|
|
93
|
+
|
|
94
|
+
std::cout << "Read records success.\nRecord count = " << users.size() << std::endl;
|
|
95
|
+
|
|
96
|
+
//dump users to screen.
|
|
97
|
+
std::for_each(users.begin(), users.end(), dumpUser);
|
|
98
|
+
|
|
99
|
+
return 0;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
catch(bzs::rtl::exception& e)
|
|
103
|
+
{
|
|
104
|
+
std::tcout << *bzs::rtl::getMsg(e) << std::endl;
|
|
105
|
+
}
|
|
106
|
+
return 1;
|
|
107
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
#include <stdio.h>
|
|
2
|
+
#include <bzs/db/protocol/tdap/client/database.h>
|
|
3
|
+
#include <bzs/db/protocol/tdap/client/table.h>
|
|
4
|
+
#include <bzs/db/protocol/tdap/client/dbdef.h>
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
using namespace bzs::db::protocol::tdap::client;
|
|
8
|
+
using namespace bzs::db::protocol::tdap;
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
@brief read and update example
|
|
13
|
+
|
|
14
|
+
This program updates some records of a "user" table.
|
|
15
|
+
Change group of user in group 1 to 3
|
|
16
|
+
|
|
17
|
+
Please execute "create database" , "change schema" and "insert records" example
|
|
18
|
+
before execute this example.
|
|
19
|
+
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
static const short fieldnum_id = 0;
|
|
24
|
+
static const short fieldnum_name = 1;
|
|
25
|
+
static const short fieldnum_group = 2;
|
|
26
|
+
static const short fieldnum_tel = 3;
|
|
27
|
+
|
|
28
|
+
static const char_td keynum_group = 1;
|
|
29
|
+
/** show database operation error
|
|
30
|
+
*/
|
|
31
|
+
void showError(const _TCHAR* caption,const _TCHAR* tableName, short statusCode)
|
|
32
|
+
{
|
|
33
|
+
_TCHAR tmp[1024]={0x00};
|
|
34
|
+
nstable::tdapErr(0x00, statusCode, tableName, tmp);
|
|
35
|
+
_tprintf(_T("%s error No.%ld %s\n"),caption, statusCode, tmp);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
bool updateUsers(table* tb)
|
|
40
|
+
{
|
|
41
|
+
tb->clearBuffer();
|
|
42
|
+
tb->setKeyNum(keynum_group); //use group key
|
|
43
|
+
tb->setFV(fieldnum_group, 1);// set group = 1;
|
|
44
|
+
tb->seekGreater(true /*orEqual*/);
|
|
45
|
+
while (tb->stat() == 0)
|
|
46
|
+
{
|
|
47
|
+
//check group value.
|
|
48
|
+
if (tb->getFVint(fieldnum_group) != 1)
|
|
49
|
+
break;
|
|
50
|
+
|
|
51
|
+
//update group
|
|
52
|
+
tb->setFV(fieldnum_group, 3); //change group 1 to 3
|
|
53
|
+
tb->update(nstable::changeCurrentNcc); //Important ncc=true !
|
|
54
|
+
if (tb->stat()!=0)
|
|
55
|
+
showError(_T("update user"), tb->tableDef()->tableName(), tb->stat());
|
|
56
|
+
else
|
|
57
|
+
tb->seekNext();
|
|
58
|
+
}
|
|
59
|
+
return ((tb->stat() == STATUS_EOF)||(tb->stat()== 0));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
/** Open database
|
|
65
|
+
*/
|
|
66
|
+
bool openDatabase(database* db, const _TCHAR* uri)
|
|
67
|
+
{
|
|
68
|
+
db->open(uri, TYPE_SCHEMA_BDF);
|
|
69
|
+
if (db->stat() != 0)
|
|
70
|
+
{
|
|
71
|
+
showError(_T("open daatabase"), NULL, db->stat());
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
#pragma argsused
|
|
78
|
+
int _tmain(int argc, _TCHAR* argv[])
|
|
79
|
+
{
|
|
80
|
+
int result = 0;
|
|
81
|
+
static const _TCHAR* uri = _T("tdap://localhost/test?dbfile=test.bdf");
|
|
82
|
+
database* db = database::create();
|
|
83
|
+
|
|
84
|
+
if (openDatabase(db, uri))
|
|
85
|
+
{
|
|
86
|
+
table* tbu = db->openTable(_T("user"));
|
|
87
|
+
if (db->stat() != 0)
|
|
88
|
+
showError(_T("open user table"), NULL, db->stat());
|
|
89
|
+
else
|
|
90
|
+
{
|
|
91
|
+
if (updateUsers(tbu))
|
|
92
|
+
_tprintf(_T("Update records success. \n"));
|
|
93
|
+
tbu->release();
|
|
94
|
+
}
|
|
95
|
+
db->close();
|
|
96
|
+
}
|
|
97
|
+
database::destroy(db);
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
#include <bzs/db/protocol/tdap/client/trdboostapi.h>
|
|
2
|
+
#include <iostream>
|
|
3
|
+
|
|
4
|
+
using namespace bzs::db::protocol::tdap::client;
|
|
5
|
+
using namespace bzs::db::protocol::tdap;
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
@brief read and update records example
|
|
10
|
+
|
|
11
|
+
This program updates some records of a "user" table.
|
|
12
|
+
Change group of user in group 1 to 3
|
|
13
|
+
|
|
14
|
+
Please execute "create database" , "change schema" and "insert records" example
|
|
15
|
+
before execute this example.
|
|
16
|
+
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
static const short fieldnum_id = 0;
|
|
21
|
+
static const short fieldnum_group = 2;
|
|
22
|
+
static const char_td keynum_group = 1;
|
|
23
|
+
|
|
24
|
+
int isGroupOne(const fields& fds)
|
|
25
|
+
{
|
|
26
|
+
return (fds[fieldnum_group].i() == 1)? filter_validate_value
|
|
27
|
+
: filter_invalidate_value;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
void changeGroupTo3(const fields& fds)
|
|
31
|
+
{
|
|
32
|
+
fds[fieldnum_group] = 3;
|
|
33
|
+
updateRecord(fds);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
void updateUsers(table_ptr tb)
|
|
37
|
+
{
|
|
38
|
+
// Execute seekGreaterOrEqual with key number and key value
|
|
39
|
+
indexIterator it = readIndex_v(tb, eSeekGreaterOrEqual, keynum_group, 1);
|
|
40
|
+
|
|
41
|
+
// Wrap filtered iterator
|
|
42
|
+
filterdIndexIterator itf(it, isGroupOne);
|
|
43
|
+
|
|
44
|
+
//loop each group=1 records and update to 3
|
|
45
|
+
for_each(itf, changeGroupTo3);
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
#pragma argsused
|
|
52
|
+
int _tmain(int argc, _TCHAR* argv[])
|
|
53
|
+
{
|
|
54
|
+
database_ptr db = createDatadaseObject();
|
|
55
|
+
try
|
|
56
|
+
{
|
|
57
|
+
connectParams param(_T("tdap"), _T("localhost"), _T("test"), _T("test"));
|
|
58
|
+
openDatabase(db, param);
|
|
59
|
+
|
|
60
|
+
table_ptr tb = openTable(db, _T("user"));
|
|
61
|
+
updateUsers(tb);
|
|
62
|
+
std::cout << "Insert records success." << std::endl;
|
|
63
|
+
return 0;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
catch(bzs::rtl::exception& e)
|
|
67
|
+
{
|
|
68
|
+
std::tcout << *bzs::rtl::getMsg(e) << std::endl;
|
|
69
|
+
}
|
|
70
|
+
return 1;
|
|
71
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
#include <stdio.h>
|
|
2
|
+
#include <bzs/db/protocol/tdap/client/database.h>
|
|
3
|
+
#include <bzs/db/protocol/tdap/client/table.h>
|
|
4
|
+
#include <bzs/db/protocol/tdap/client/dbdef.h>
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
using namespace bzs::db::protocol::tdap::client;
|
|
8
|
+
using namespace bzs::db::protocol::tdap;
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
@brief update records in transaction example
|
|
13
|
+
|
|
14
|
+
This program updates some records of a "user" table.
|
|
15
|
+
Change group of user in group 1 to 3
|
|
16
|
+
|
|
17
|
+
Please execute "create database" , "change schema" and "insert records" example
|
|
18
|
+
before execute this example.
|
|
19
|
+
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
static const short fieldnum_id = 0;
|
|
24
|
+
static const short fieldnum_name = 1;
|
|
25
|
+
static const short fieldnum_group = 2;
|
|
26
|
+
static const short fieldnum_tel = 3;
|
|
27
|
+
|
|
28
|
+
static const char_td keynum_group = 1;
|
|
29
|
+
/** show database operation error
|
|
30
|
+
*/
|
|
31
|
+
void showError(const _TCHAR* caption,const _TCHAR* tableName, short statusCode)
|
|
32
|
+
{
|
|
33
|
+
_TCHAR tmp[1024]={0x00};
|
|
34
|
+
nstable::tdapErr(0x00, statusCode, tableName, tmp);
|
|
35
|
+
_tprintf(_T("%s error No.%ld %s\n"),caption, statusCode, tmp);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
bool updateUsers(table* tb)
|
|
40
|
+
{
|
|
41
|
+
tb->clearBuffer();
|
|
42
|
+
tb->setKeyNum(keynum_group); //use group key
|
|
43
|
+
tb->setFV(fieldnum_group, 1);// set group = 1;
|
|
44
|
+
tb->seekGreater(true /*orEqual*/);
|
|
45
|
+
while (tb->stat() == 0)
|
|
46
|
+
{
|
|
47
|
+
//check group value.
|
|
48
|
+
if (tb->getFVint(fieldnum_group) != 1)
|
|
49
|
+
break;
|
|
50
|
+
|
|
51
|
+
//update group
|
|
52
|
+
tb->setFV(fieldnum_group, 3); //change group 1 to 3
|
|
53
|
+
tb->update(nstable::changeCurrentNcc /*ncc=true*/); //Important ncc=true !
|
|
54
|
+
if (tb->stat()!=0)
|
|
55
|
+
showError(_T("update user"), tb->tableDef()->tableName(), tb->stat());
|
|
56
|
+
else
|
|
57
|
+
tb->seekNext();
|
|
58
|
+
}
|
|
59
|
+
return ((tb->stat() == STATUS_EOF)||(tb->stat()== 0));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
/** Open database
|
|
65
|
+
*/
|
|
66
|
+
bool openDatabase(database* db, const _TCHAR* uri)
|
|
67
|
+
{
|
|
68
|
+
db->open(uri, TYPE_SCHEMA_BDF);
|
|
69
|
+
if (db->stat() != 0)
|
|
70
|
+
{
|
|
71
|
+
showError(_T("open daatabase"), NULL, db->stat());
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
#pragma argsused
|
|
78
|
+
int _tmain(int argc, _TCHAR* argv[])
|
|
79
|
+
{
|
|
80
|
+
int result = 0;
|
|
81
|
+
static const _TCHAR* uri = _T("tdap://localhost/test?dbfile=test.bdf");
|
|
82
|
+
database* db = database::create();
|
|
83
|
+
|
|
84
|
+
if (openDatabase(db, uri))
|
|
85
|
+
{
|
|
86
|
+
table* tbu = db->openTable(_T("user"));
|
|
87
|
+
if (db->stat() != 0)
|
|
88
|
+
showError(_T("open user table"), NULL, db->stat());
|
|
89
|
+
else
|
|
90
|
+
{
|
|
91
|
+
db->beginTrn();
|
|
92
|
+
if (updateUsers(tbu))
|
|
93
|
+
{
|
|
94
|
+
db->endTrn();
|
|
95
|
+
_tprintf(_T("Update records success. \n"));
|
|
96
|
+
}else
|
|
97
|
+
db->abortTrn();
|
|
98
|
+
tbu->release();
|
|
99
|
+
}
|
|
100
|
+
db->close();
|
|
101
|
+
}
|
|
102
|
+
database::destroy(db);
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#include <bzs/db/protocol/tdap/client/trdboostapi.h>
|
|
2
|
+
#include <iostream>
|
|
3
|
+
|
|
4
|
+
using namespace bzs::db::protocol::tdap::client;
|
|
5
|
+
using namespace bzs::db::protocol::tdap;
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
@brief update records in transaction example
|
|
10
|
+
|
|
11
|
+
This program updates some records of a "user" table.
|
|
12
|
+
Change group of user in group 1 to 3
|
|
13
|
+
|
|
14
|
+
Please execute "create database" , "change schema" and "insert records" example
|
|
15
|
+
before execute this example.
|
|
16
|
+
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
static const short fieldnum_id = 0;
|
|
21
|
+
static const short fieldnum_group = 2;
|
|
22
|
+
static const char_td keynum_group = 1;
|
|
23
|
+
|
|
24
|
+
int isGroupOne(const fields& fds)
|
|
25
|
+
{
|
|
26
|
+
return (fds[fieldnum_group].i() == 1)? filter_validate_value
|
|
27
|
+
: filter_invalidate_value;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
void changeGroup1To3(const fields& fds)
|
|
31
|
+
{
|
|
32
|
+
fds[fieldnum_group] = 3;
|
|
33
|
+
updateRecord(fds);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
void updateUsers(table_ptr tb)
|
|
37
|
+
{
|
|
38
|
+
// Execute seekGreaterOrEqual with key number and key value
|
|
39
|
+
indexIterator it = readIndex_v(tb, eSeekGreaterOrEqual, keynum_group, 1);
|
|
40
|
+
|
|
41
|
+
// Wrap filtered iterator
|
|
42
|
+
filterdIndexIterator itf(it, isGroupOne);
|
|
43
|
+
|
|
44
|
+
//loop each group=1 records and update
|
|
45
|
+
for_each(itf, changeGroup1To3);
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
#pragma argsused
|
|
52
|
+
int _tmain(int argc, _TCHAR* argv[])
|
|
53
|
+
{
|
|
54
|
+
database_ptr db = createDatadaseObject();
|
|
55
|
+
try
|
|
56
|
+
{
|
|
57
|
+
connectParams param(_T("tdap"), _T("localhost"), _T("test"), _T("test"));
|
|
58
|
+
openDatabase(db, param);
|
|
59
|
+
|
|
60
|
+
table_ptr tb = openTable(db, _T("user"));
|
|
61
|
+
transaction trn(db);
|
|
62
|
+
|
|
63
|
+
//start transaction
|
|
64
|
+
trn.begin();
|
|
65
|
+
|
|
66
|
+
updateUsers(tb);
|
|
67
|
+
|
|
68
|
+
//Commit transaction. If an error throwed then abort transaction automaticaly.
|
|
69
|
+
trn.end();
|
|
70
|
+
|
|
71
|
+
std::cout << "Insert records success." << std::endl;
|
|
72
|
+
return 0;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
catch(bzs::rtl::exception& e)
|
|
76
|
+
{
|
|
77
|
+
std::tcout << *bzs::rtl::getMsg(e) << std::endl;
|
|
78
|
+
}
|
|
79
|
+
return 1;
|
|
80
|
+
}
|