transactd 3.1.0 → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/common/tdclc_32_3_2.dll +0 -0
- data/bin/common/{tdclc_64_3_1.dll → tdclc_64_3_2.dll} +0 -0
- data/build/swig/ruby/ruby.swg +3 -0
- data/build/swig/ruby/tdclrb_wrap.cpp +2413 -126
- data/build/swig/tdcl.i +120 -9
- data/build/tdclc/tdclc.cbproj +4 -1
- data/build/tdclc/tdclc.rc +4 -4
- data/build/tdclcpp/tdclcpp.rc +4 -4
- data/build/tdclcpp/tdclcpp_bc.cbproj +8 -1
- data/build/tdclrb/tdclrb.rc +4 -4
- data/source/bzs/db/engine/mysql/database.cpp +138 -130
- data/source/bzs/db/engine/mysql/database.h +43 -48
- data/source/bzs/db/engine/mysql/dbManager.cpp +81 -96
- data/source/bzs/db/engine/mysql/dbManager.h +13 -22
- data/source/bzs/db/engine/mysql/mysqlInternal.h +157 -291
- data/source/bzs/db/engine/mysql/mysqlProtocol.cpp +425 -0
- data/source/bzs/db/engine/mysql/mysqlProtocol.h +72 -0
- data/source/bzs/db/engine/mysql/mysqlThd.cpp +8 -6
- data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +7 -3
- data/source/bzs/db/protocol/hs/hsCommandExecuter.h +1 -0
- data/source/bzs/db/protocol/tdap/client/client.h +22 -8
- data/source/bzs/db/protocol/tdap/client/connMgr.cpp +225 -21
- data/source/bzs/db/protocol/tdap/client/connMgr.h +42 -16
- data/source/bzs/db/protocol/tdap/client/database.cpp +58 -15
- data/source/bzs/db/protocol/tdap/client/database.h +3 -3
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +93 -85
- data/source/bzs/db/protocol/tdap/client/dbDef.h +1 -2
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +9 -5
- data/source/bzs/db/protocol/tdap/client/filter.h +2 -2
- data/source/bzs/db/protocol/tdap/client/groupComp.h +2 -2
- data/source/bzs/db/protocol/tdap/client/memRecord.cpp +1 -1
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +71 -12
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +7 -1
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +35 -2
- data/source/bzs/db/protocol/tdap/client/nsTable.h +1 -0
- data/source/bzs/db/protocol/tdap/client/recordset.cpp +5 -1
- data/source/bzs/db/protocol/tdap/client/recordset.h +15 -0
- data/source/bzs/db/protocol/tdap/client/recordsetImple.h +21 -16
- data/source/bzs/db/protocol/tdap/client/serializer.cpp +32 -11
- data/source/bzs/db/protocol/tdap/client/serializer.h +4 -1
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +3 -2
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +3 -0
- data/source/bzs/db/protocol/tdap/client/table.cpp +18 -14
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +8 -3
- data/source/bzs/db/protocol/tdap/mysql/characterset.cpp +1 -0
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +83 -43
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +3 -1
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +7 -7
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +247 -137
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +9 -9
- data/source/bzs/db/protocol/tdap/tdapSchema.cpp +1 -4
- data/source/bzs/db/protocol/tdap/tdapSchema.h +3 -7
- data/source/bzs/db/protocol/tdap/tdapcapi.h +23 -3
- data/source/bzs/db/protocol/tdap/uri.h +40 -0
- data/source/bzs/db/transactd/appModule.cpp +14 -5
- data/source/bzs/db/transactd/appModule.h +10 -1
- data/source/bzs/db/transactd/connManager.cpp +93 -48
- data/source/bzs/db/transactd/connManager.h +10 -7
- data/source/bzs/db/transactd/connectionRecord.h +114 -19
- data/source/bzs/env/tstring.h +2 -0
- data/source/bzs/example/changeSchema.cpp +1 -1
- data/source/bzs/example/changeSchema_c.cpp +1 -1
- data/source/bzs/example/insertRecords.cpp +2 -1
- data/source/bzs/example/insertRecords_c.cpp +2 -1
- data/source/bzs/example/queryData.cpp +5 -2
- data/source/bzs/netsvc/server/IAppModule.h +6 -0
- data/source/bzs/test/tdclatl/test_v3.js +75 -0
- data/source/bzs/test/tdclphp/transactd_v3_Test.php +104 -7
- data/source/bzs/test/tdclrb/transactd_v3_spec.rb +84 -0
- data/source/bzs/test/trdclengn/testField.h +66 -6
- data/source/bzs/test/trdclengn/test_tdclcpp_v3.cpp +10 -1
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +85 -0
- data/source/bzs/test/trdclengn/testbase.h +1 -1
- data/source/global/tdclatl/BinlogPos.cpp +64 -0
- data/source/global/tdclatl/BinlogPos.h +84 -0
- data/source/global/tdclatl/ConnMgr.cpp +285 -0
- data/source/global/tdclatl/ConnMgr.h +83 -0
- data/source/global/tdclatl/ConnRecord.cpp +123 -0
- data/source/global/tdclatl/ConnRecord.h +69 -0
- data/source/global/tdclatl/ConnRecords.cpp +57 -0
- data/source/global/tdclatl/ConnRecords.h +55 -0
- data/source/global/tdclatl/Database.cpp +36 -0
- data/source/global/tdclatl/Database.h +4 -0
- data/source/global/tdclatl/Table.cpp +14 -1
- data/source/global/tdclatl/Table.h +1 -0
- data/source/global/tdclatl/resource.h +0 -0
- data/source/global/tdclatl/tdclatl.idl +148 -4
- metadata +14 -4
- data/bin/common/tdclc_32_3_1.dll +0 -0
@@ -20,6 +20,7 @@
|
|
20
20
|
================================================================= */
|
21
21
|
#include "testbase.h"
|
22
22
|
#include <bzs/db/protocol/tdap/btrDate.h>
|
23
|
+
#include <bzs/db/protocol/tdap/client/connMgr.h>
|
23
24
|
#include <limits.h>
|
24
25
|
#include <stdlib.h>
|
25
26
|
|
@@ -45,7 +46,7 @@ const char* test_records = "INSERT INTO `setenumbit` (`id`, `set5`, `set64`, `en
|
|
45
46
|
"(3, '', '', '0', '0', b'0', b'00000000', b'00000000', b'00000000'),"
|
46
47
|
"(4, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);";
|
47
48
|
|
48
|
-
|
49
|
+
const char* test_view = "create view idlessthan5 as select * from scores where id < 5";
|
49
50
|
|
50
51
|
short createFieldStoreDataBase(database* db)
|
51
52
|
{
|
@@ -55,6 +56,7 @@ short createFieldStoreDataBase(database* db)
|
|
55
56
|
db->open(makeUri(PROTOCOL, HOSTNAME, DBNAMEV3, BDFNAME));
|
56
57
|
if (db->stat()) return db->stat();
|
57
58
|
db->drop();
|
59
|
+
if (db->stat()) return db->stat();
|
58
60
|
db->create(makeUri(PROTOCOL, HOSTNAME, DBNAMEV3, BDFNAME));
|
59
61
|
}
|
60
62
|
if (db->stat()) return db->stat();
|
@@ -527,9 +529,9 @@ short createTestScores(database* db)
|
|
527
529
|
td->primaryKeyNum = 0;
|
528
530
|
|
529
531
|
short fieldnum = 0;
|
530
|
-
|
531
|
-
|
532
|
-
fd = insertField(def, tableid, ++fieldnum, _T("score"), ft_integer, 4);
|
532
|
+
insertField(def, tableid, fieldnum, _T("id"), ft_autoinc, 4);
|
533
|
+
insertField(def, tableid, ++fieldnum, _T("subject"), ft_integer, 4);
|
534
|
+
fielddef* fd = insertField(def, tableid, ++fieldnum, _T("score"), ft_integer, 4);
|
533
535
|
fd->setNullable(true);
|
534
536
|
|
535
537
|
keydef* kd = insertKey(def, tableid, 0);
|
@@ -2310,13 +2312,13 @@ void testSetEnumBit()
|
|
2310
2312
|
|
2311
2313
|
BOOST_CHECK(rs[1][_T("id")] == 2);
|
2312
2314
|
BOOST_CHECK(rs[1][_T("set5")].i64() == 31);
|
2313
|
-
BOOST_CHECK(rs[1][_T("set64")].i64() == 0x8000000000000001);
|
2315
|
+
BOOST_CHECK(rs[1][_T("set64")].i64() == (__int64)0x8000000000000001);
|
2314
2316
|
BOOST_CHECK(rs[1][_T("enum2")].i64() == 1);
|
2315
2317
|
BOOST_CHECK(rs[1][_T("enum260")].i64() == 260);
|
2316
2318
|
BOOST_CHECK(rs[1][_T("bit1")].i64() == 1);
|
2317
2319
|
BOOST_CHECK(rs[1][_T("bit8")].i64() == 0xFF);
|
2318
2320
|
BOOST_CHECK(rs[1][_T("bit32")].i64() == 0xFFFFFFFF);
|
2319
|
-
BOOST_CHECK(rs[1][_T("bit64")].i64() == 0xFFFFFFFFFFFFFFFF);
|
2321
|
+
BOOST_CHECK(rs[1][_T("bit64")].i64() == (__int64)0xFFFFFFFFFFFFFFFF);
|
2320
2322
|
|
2321
2323
|
BOOST_CHECK(rs[2][_T("id")] == 3);
|
2322
2324
|
BOOST_CHECK(rs[2][_T("set5")].i64() == 0);
|
@@ -3332,6 +3334,64 @@ void testSnapshotWithbinlog()
|
|
3332
3334
|
BOOST_CHECK(tb->stat() == STATUS_ALREADY_INSNAPSHOT);
|
3333
3335
|
|
3334
3336
|
db->endSnapshot();
|
3337
|
+
db->createTable(test_view);// create view for next test
|
3338
|
+
BOOST_CHECK(db->stat() == 0);
|
3339
|
+
}
|
3340
|
+
|
3341
|
+
|
3342
|
+
void testTableList()
|
3343
|
+
{
|
3344
|
+
nsdatabase::setCheckTablePtr(true);
|
3345
|
+
database_ptr db = createDatabaseObject();
|
3346
|
+
connMgr_ptr mgr(createConnMgr(db.get()));
|
3347
|
+
mgr->connect(makeUri(PROTOCOL, HOSTNAME, _T("")));
|
3348
|
+
BOOST_CHECK(mgr->stat() == 0);
|
3349
|
+
{
|
3350
|
+
const connMgr::records& recs = mgr->tables(DBNAMEV3);
|
3351
|
+
BOOST_CHECK(mgr->stat() == 0);
|
3352
|
+
BOOST_CHECK(recs.size() == 10); //8 + setenumbit + test.bdf
|
3353
|
+
}
|
3354
|
+
{
|
3355
|
+
const connMgr::records& recs = mgr->views(DBNAMEV3);
|
3356
|
+
BOOST_CHECK(mgr->stat() == 0);
|
3357
|
+
BOOST_CHECK(recs.size() == 1);
|
3358
|
+
BOOST_CHECK(recs[0].name == std::string("idlessthan5"));
|
3359
|
+
}
|
3360
|
+
{
|
3361
|
+
const connMgr::records& recs = mgr->schemaTables(DBNAMEV3);
|
3362
|
+
BOOST_CHECK(mgr->stat() == 0);
|
3363
|
+
BOOST_CHECK(recs.size() == 1);
|
3364
|
+
BOOST_CHECK(recs[0].name == std::string("test"));
|
3365
|
+
}
|
3366
|
+
{
|
3367
|
+
mgr->slaveStatus();
|
3368
|
+
BOOST_CHECK(mgr->stat() == 0);
|
3369
|
+
}
|
3370
|
+
mgr->disconnect();
|
3371
|
+
|
3372
|
+
}
|
3373
|
+
|
3374
|
+
void testCreateInfo()
|
3375
|
+
{
|
3376
|
+
nsdatabase::setCheckTablePtr(true);
|
3377
|
+
database_ptr db = createDatabaseObject();
|
3378
|
+
openDatabase(db, makeUri(PROTOCOL, HOSTNAME, DBNAMEV3, BDFNAME), TYPE_SCHEMA_BDF,TD_OPEN_READONLY);
|
3379
|
+
BOOST_CHECK(db->stat() == 0);
|
3380
|
+
|
3381
|
+
char buf[2048];
|
3382
|
+
uint_td size = 2048;
|
3383
|
+
db->getCreateViewSql(_T("idlessthan5"), buf, &size);
|
3384
|
+
BOOST_CHECK(db->stat() == 0);
|
3385
|
+
BOOST_CHECK(size > 20);
|
3386
|
+
|
3387
|
+
table* tb = db->openTable(1, TD_OPEN_READONLY);
|
3388
|
+
BOOST_CHECK(db->stat() == 0);
|
3389
|
+
size = 2048;
|
3390
|
+
tb->getCreateSql(buf, &size);
|
3391
|
+
BOOST_CHECK(db->stat() == 0);
|
3392
|
+
BOOST_CHECK(size > 1000);
|
3393
|
+
db->close();
|
3394
|
+
BOOST_CHECK(db->stat() == 0);
|
3335
3395
|
}
|
3336
3396
|
|
3337
3397
|
#pragma warning(default : 4996)
|
@@ -1053,5 +1053,14 @@ BOOST_AUTO_TEST_CASE(snapshot_binlog)
|
|
1053
1053
|
}
|
1054
1054
|
BOOST_AUTO_TEST_SUITE_END()
|
1055
1055
|
|
1056
|
-
|
1056
|
+
BOOST_AUTO_TEST_SUITE(tablelist)
|
1057
|
+
BOOST_AUTO_TEST_CASE(tablelist)
|
1058
|
+
{
|
1059
|
+
testTableList();
|
1060
|
+
}
|
1061
|
+
BOOST_AUTO_TEST_CASE(createInfo)
|
1062
|
+
{
|
1063
|
+
testCreateInfo();
|
1064
|
+
}
|
1065
|
+
BOOST_AUTO_TEST_SUITE_END()
|
1057
1066
|
// ------------------------------------------------------------------------
|
@@ -3073,6 +3073,8 @@ void stringFileterCreateTable(database* db, int id, const _TCHAR* name,
|
|
3073
3073
|
}
|
3074
3074
|
|
3075
3075
|
fd->keylen = fd->len;
|
3076
|
+
if (use_nullfield)
|
3077
|
+
fd->setNullable(true, true);
|
3076
3078
|
def->updateTableDef(id);
|
3077
3079
|
BOOST_CHECK_MESSAGE(0 == def->stat(),
|
3078
3080
|
"updateTableDef 2 stat = " << def->stat());
|
@@ -3091,6 +3093,8 @@ void stringFileterCreateTable(database* db, int id, const _TCHAR* name,
|
|
3091
3093
|
fd->len = 12; // 8+4
|
3092
3094
|
}
|
3093
3095
|
fd->keylen = fd->len;
|
3096
|
+
if (use_nullfield)
|
3097
|
+
fd->setNullable(true, true);
|
3094
3098
|
def->updateTableDef(id);
|
3095
3099
|
BOOST_CHECK_MESSAGE(0 == def->stat(), "updateTableDef 3");
|
3096
3100
|
|
@@ -3294,6 +3298,86 @@ void doTestSF(table* tb)
|
|
3294
3298
|
"doTestReadSF2 field value");
|
3295
3299
|
}
|
3296
3300
|
|
3301
|
+
void doTestSF_Select(table* tb)
|
3302
|
+
{
|
3303
|
+
tb->setKeyNum(0);
|
3304
|
+
tb->clearBuffer();
|
3305
|
+
|
3306
|
+
tb->setFilter(_T("select id,name,namew name = 'あい*'"), 0, 10);
|
3307
|
+
|
3308
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
|
3309
|
+
|
3310
|
+
tb->seekFirst();
|
3311
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
|
3312
|
+
|
3313
|
+
tb->findNext(false);
|
3314
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
|
3315
|
+
BOOST_CHECK_MESSAGE(_tstring(_T("あいうえおかきくこ")) ==
|
3316
|
+
_tstring(tb->getFVstr(1)),
|
3317
|
+
"doTestReadSF2");
|
3318
|
+
BOOST_CHECK_MESSAGE(2 == (int)tb->recordCount(), "doTestReadSF2");
|
3319
|
+
|
3320
|
+
tb->setFilter(_T("select id,name,namew name <> 'あい*'"), 0, 10);
|
3321
|
+
BOOST_CHECK_MESSAGE(3 == (int)tb->recordCount(), "doTestReadSF2");
|
3322
|
+
tb->clearBuffer();
|
3323
|
+
tb->setFilter(_T("select id,name,namew name <> 'あい*'"), 0, 10);
|
3324
|
+
tb->seekFirst();
|
3325
|
+
tb->findNext(false);
|
3326
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1 stat = " << tb->stat());
|
3327
|
+
BOOST_CHECK_MESSAGE(_tstring(_T("A123456")) == _tstring(tb->getFVstr(2)),
|
3328
|
+
"doTestReadSF1");
|
3329
|
+
|
3330
|
+
tb->findNext();
|
3331
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
|
3332
|
+
BOOST_CHECK_MESSAGE(_tstring(_T("おはようございます")) ==
|
3333
|
+
_tstring(tb->getFVstr(2)),
|
3334
|
+
"doTestReadSF1");
|
3335
|
+
|
3336
|
+
tb->findNext();
|
3337
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
|
3338
|
+
BOOST_CHECK_MESSAGE(_tstring(_T("おめでとうございます。")) ==
|
3339
|
+
_tstring(tb->getFVstr(2)),
|
3340
|
+
"doTestReadSF1");
|
3341
|
+
tb->findNext();
|
3342
|
+
BOOST_CHECK_MESSAGE(9 == tb->stat(), "doTestReadSF1");
|
3343
|
+
|
3344
|
+
tb->clearBuffer();
|
3345
|
+
tb->seekLast();
|
3346
|
+
tb->findPrev(false);
|
3347
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
|
3348
|
+
BOOST_CHECK_MESSAGE(_tstring(_T("おめでとうございます。")) ==
|
3349
|
+
_tstring(tb->getFVstr(2)),
|
3350
|
+
"doTestReadSF1");
|
3351
|
+
|
3352
|
+
tb->findPrev();
|
3353
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
|
3354
|
+
BOOST_CHECK_MESSAGE(_tstring(_T("おはようございます")) ==
|
3355
|
+
_tstring(tb->getFVstr(2)),
|
3356
|
+
"doTestReadSF1");
|
3357
|
+
|
3358
|
+
tb->findPrev(false);
|
3359
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
|
3360
|
+
BOOST_CHECK_MESSAGE(_tstring(_T("A123456")) == _tstring(tb->getFVstr(2)),
|
3361
|
+
"doTestReadSF1");
|
3362
|
+
|
3363
|
+
tb->findPrev();
|
3364
|
+
BOOST_CHECK_MESSAGE(9 == tb->stat(), "doTestReadSF1");
|
3365
|
+
|
3366
|
+
tb->setFilter(_T("select id,name,namew name = 'あい'"), 0, 10);
|
3367
|
+
BOOST_CHECK_MESSAGE(0 == (int)tb->recordCount(), "doTestReadSF2");
|
3368
|
+
|
3369
|
+
tb->setFilter(_T("select id,name,namew name <> ''"), 0, 10);
|
3370
|
+
BOOST_CHECK_MESSAGE(5 == (int)tb->recordCount(), "doTestReadSF2");
|
3371
|
+
|
3372
|
+
// test setFilter don't change field value
|
3373
|
+
tb->clearBuffer();
|
3374
|
+
tb->setFV(_T("name"), _T("ABCDE"));
|
3375
|
+
tb->setFilter(_T("select id,name,namew name = 'あい'"), 0, 10);
|
3376
|
+
BOOST_CHECK_MESSAGE(_tstring(_T("ABCDE")) == _tstring(tb->getFVstr(1)),
|
3377
|
+
"doTestReadSF2 field value");
|
3378
|
+
}
|
3379
|
+
|
3380
|
+
|
3297
3381
|
void doTestUpdateSF(table* tb)
|
3298
3382
|
{
|
3299
3383
|
|
@@ -3344,6 +3428,7 @@ void doTestStringFileter(database* db, int id, const _TCHAR* name,
|
|
3344
3428
|
doInsertStringFileter(tb);
|
3345
3429
|
doTestReadSF(tb);
|
3346
3430
|
doTestSF(tb);
|
3431
|
+
doTestSF_Select(tb);
|
3347
3432
|
doTestUpdateSF(tb);
|
3348
3433
|
tb->release();
|
3349
3434
|
}
|
@@ -72,7 +72,7 @@ const _TCHAR* makeUri(const _TCHAR* protocol, const _TCHAR* host,
|
|
72
72
|
return g_uri;
|
73
73
|
}
|
74
74
|
|
75
|
-
static bool use_nullfield =
|
75
|
+
static bool use_nullfield = true;
|
76
76
|
static bool use_mysqlNullMode = true;
|
77
77
|
|
78
78
|
boost::unit_test::test_suite* init_unit_test_suite(int argc, char* argv[]);
|
@@ -0,0 +1,64 @@
|
|
1
|
+
/*=================================================================
|
2
|
+
Copyright (C) 2016 BizStation Corp All rights reserved.
|
3
|
+
|
4
|
+
This program is free software; you can redistribute it and/or
|
5
|
+
modify it under the terms of the GNU General Public License
|
6
|
+
as published by the Free Software Foundation; either version 2
|
7
|
+
of the License, or (at your option) any later version.
|
8
|
+
|
9
|
+
This program is distributed in the hope that it will be useful,
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
GNU General Public License for more details.
|
13
|
+
|
14
|
+
You should have received a copy of the GNU General Public License
|
15
|
+
along with this program; if not, write to the Free Software
|
16
|
+
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
17
|
+
02111-1307, USA.
|
18
|
+
=================================================================*/
|
19
|
+
// BinlogPos.cpp : CBinlogPos �̎���
|
20
|
+
|
21
|
+
#include "stdafx.h"
|
22
|
+
#include "BinlogPos.h"
|
23
|
+
|
24
|
+
|
25
|
+
// CBinlogPos
|
26
|
+
#ifdef _WIN64
|
27
|
+
STDMETHODIMP CBinlogPos::get_Pos(__int64* retVal)
|
28
|
+
{
|
29
|
+
*retVal = (__int64)m_pos.pos;
|
30
|
+
return S_OK;
|
31
|
+
}
|
32
|
+
#else
|
33
|
+
STDMETHODIMP CBinlogPos::get_Pos(int* retVal)
|
34
|
+
{
|
35
|
+
*retVal = (int)m_pos.pos;
|
36
|
+
return S_OK;
|
37
|
+
}
|
38
|
+
#endif
|
39
|
+
|
40
|
+
STDMETHODIMP CBinlogPos::get_Type(short* retVal)
|
41
|
+
{
|
42
|
+
*retVal = (short)m_pos.type;
|
43
|
+
return S_OK;
|
44
|
+
}
|
45
|
+
|
46
|
+
STDMETHODIMP CBinlogPos::get_Filename(BSTR* retVal)
|
47
|
+
{
|
48
|
+
CComBSTR ret;
|
49
|
+
ret = m_pos.filename;
|
50
|
+
*retVal = ret.Copy();
|
51
|
+
return S_OK;
|
52
|
+
}
|
53
|
+
|
54
|
+
STDMETHODIMP CBinlogPos::get_Gtid(BSTR* retVal)
|
55
|
+
{
|
56
|
+
CComBSTR ret;
|
57
|
+
ret = m_pos.gtid;
|
58
|
+
*retVal = ret.Copy();
|
59
|
+
return S_OK;
|
60
|
+
}
|
61
|
+
|
62
|
+
|
63
|
+
|
64
|
+
|
@@ -0,0 +1,84 @@
|
|
1
|
+
/*=================================================================
|
2
|
+
Copyright (C) 2016 BizStation Corp All rights reserved.
|
3
|
+
|
4
|
+
This program is free software; you can redistribute it and/or
|
5
|
+
modify it under the terms of the GNU General Public License
|
6
|
+
as published by the Free Software Foundation; either version 2
|
7
|
+
of the License, or (at your option) any later version.
|
8
|
+
|
9
|
+
This program is distributed in the hope that it will be useful,
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
GNU General Public License for more details.
|
13
|
+
|
14
|
+
You should have received a copy of the GNU General Public License
|
15
|
+
along with this program; if not, write to the Free Software
|
16
|
+
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
17
|
+
02111-1307, USA.
|
18
|
+
=================================================================*/
|
19
|
+
// BinlogPos.h : CBinlogPos �̐錾
|
20
|
+
|
21
|
+
#pragma once
|
22
|
+
#include "resource.h" // ���C�� �V���{��
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
#include "tdclatl_i.h"
|
27
|
+
#include <bzs/db/protocol/tdap/client/nsdatabase.h>
|
28
|
+
|
29
|
+
|
30
|
+
#if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
|
31
|
+
#error "DCOM �̊��S�T�|�[�g���܂�ł��Ȃ� Windows Mobile �v���b�g�t�H�[���̂悤�� Windows CE �v���b�g�t�H�[���ł́A�P��X���b�h COM �I�u�W�F�N�g�͐������T�|�[�g����Ă��܂���BATL ���P��X���b�h COM �I�u�W�F�N�g�̍쐬���T�|�[�g���邱�ƁA����т��̒P��X���b�h COM �I�u�W�F�N�g�̎����̎g�p�������邱�Ƃ���������ɂ́A_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA ���`���Ă��������B���g�p�� rgs �t�@�C���̃X���b�h ���f���� 'Free' �ɐݒ肳��Ă���ADCOM Windows CE �ȊO�̃v���b�g�t�H�[���ŃT�|�[�g�����B��̃X���b�h ���f���Ɛݒ肳��Ă��܂����B"
|
32
|
+
#endif
|
33
|
+
|
34
|
+
using namespace ATL;
|
35
|
+
|
36
|
+
|
37
|
+
// CBitset
|
38
|
+
|
39
|
+
class ATL_NO_VTABLE CBinlogPos :
|
40
|
+
public CComObjectRootEx<CComSingleThreadModel>,
|
41
|
+
public CComCoClass<CBinlogPos, &CLSID_BinlogPos>,
|
42
|
+
public IDispatchImpl<IBinlogPos, &IID_IBinlogPos, &LIBID_transactd, /*wMajor =*/ 1, /*wMinor =*/ 0>
|
43
|
+
{
|
44
|
+
|
45
|
+
public:
|
46
|
+
bzs::db::protocol::tdap::client::binlogPos m_pos;
|
47
|
+
|
48
|
+
CBinlogPos()
|
49
|
+
{
|
50
|
+
}
|
51
|
+
|
52
|
+
DECLARE_REGISTRY_RESOURCEID(IDR_BITSET)
|
53
|
+
|
54
|
+
|
55
|
+
BEGIN_COM_MAP(CBinlogPos)
|
56
|
+
COM_INTERFACE_ENTRY(IBinlogPos)
|
57
|
+
COM_INTERFACE_ENTRY(IDispatch)
|
58
|
+
END_COM_MAP()
|
59
|
+
|
60
|
+
|
61
|
+
|
62
|
+
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
63
|
+
|
64
|
+
HRESULT FinalConstruct()
|
65
|
+
{
|
66
|
+
return S_OK;
|
67
|
+
}
|
68
|
+
|
69
|
+
void FinalRelease()
|
70
|
+
{
|
71
|
+
}
|
72
|
+
|
73
|
+
public:
|
74
|
+
#ifdef _WIN64
|
75
|
+
STDMETHOD(get_Pos)(__int64* retVal);
|
76
|
+
#else
|
77
|
+
STDMETHOD(get_Pos)(int* retVal);
|
78
|
+
#endif
|
79
|
+
STDMETHOD(get_Type)(short* retVal);
|
80
|
+
STDMETHOD(get_Filename)(BSTR* retVal);
|
81
|
+
STDMETHOD(get_Gtid)(BSTR* retVal);
|
82
|
+
};
|
83
|
+
|
84
|
+
//OBJECT_ENTRY_AUTO(__uuidof(Bitset), CBitset)
|
@@ -0,0 +1,285 @@
|
|
1
|
+
/*=================================================================
|
2
|
+
Copyright (C) 2016 BizStation Corp All rights reserved.
|
3
|
+
|
4
|
+
This program is free software; you can redistribute it and/or
|
5
|
+
modify it under the terms of the GNU General Public License
|
6
|
+
as published by the Free Software Foundation; either version 2
|
7
|
+
of the License, or (at your option) any later version.
|
8
|
+
|
9
|
+
This program is distributed in the hope that it will be useful,
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
GNU General Public License for more details.
|
13
|
+
|
14
|
+
You should have received a copy of the GNU General Public License
|
15
|
+
along with this program; if not, write to the Free Software
|
16
|
+
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
17
|
+
02111-1307, USA.
|
18
|
+
=================================================================*/
|
19
|
+
#include "stdafx.h"
|
20
|
+
#include "ConnMgr.h"
|
21
|
+
#include "ConnRecords.h"
|
22
|
+
#include "Database.h"
|
23
|
+
|
24
|
+
using namespace bzs::db::protocol::tdap::client;
|
25
|
+
|
26
|
+
STDMETHODIMP CConnMgr::InterfaceSupportsErrorInfo(REFIID riid)
|
27
|
+
{
|
28
|
+
static const IID* const arr[] =
|
29
|
+
{
|
30
|
+
&IID_IConnMgr
|
31
|
+
};
|
32
|
+
|
33
|
+
for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
|
34
|
+
{
|
35
|
+
if (InlineIsEqualGUID(*arr[i],riid))
|
36
|
+
return S_OK;
|
37
|
+
}
|
38
|
+
return S_FALSE;
|
39
|
+
}
|
40
|
+
|
41
|
+
STDMETHODIMP CConnMgr::SetDatabase(VARIANT Value)
|
42
|
+
{
|
43
|
+
try
|
44
|
+
{
|
45
|
+
if (Value.vt != VT_DISPATCH)
|
46
|
+
{
|
47
|
+
_TCHAR tmp[256];
|
48
|
+
wsprintf(tmp, _T("SetDatabase Type error type = %d"), Value.vt);
|
49
|
+
return Error(tmp, IID_IConnMgr);
|
50
|
+
}
|
51
|
+
|
52
|
+
CDatabase* p = dynamic_cast<CDatabase*>(Value.pdispVal);
|
53
|
+
if (p)
|
54
|
+
{
|
55
|
+
m_mgr = connMgr::create(p->database());
|
56
|
+
return S_OK;
|
57
|
+
}
|
58
|
+
return Error(_T("SetDatabase Type error"), IID_IConnMgr);
|
59
|
+
}
|
60
|
+
catch (bzs::rtl::exception& e)
|
61
|
+
{
|
62
|
+
return Error((*bzs::rtl::getMsg(e)).c_str(), IID_IConnMgr);
|
63
|
+
}
|
64
|
+
}
|
65
|
+
|
66
|
+
|
67
|
+
STDMETHODIMP CConnMgr::Connect(BSTR uri, VARIANT_BOOL* retVal)
|
68
|
+
{
|
69
|
+
if (m_mgr == NULL) Error(_T("No database error"), IID_IConnMgr);
|
70
|
+
m_mgr->connect(uri);
|
71
|
+
return S_OK;
|
72
|
+
}
|
73
|
+
|
74
|
+
STDMETHODIMP CConnMgr::Disconnect()
|
75
|
+
{
|
76
|
+
if (m_mgr == NULL) Error(_T("No database error"), IID_IConnMgr);
|
77
|
+
m_mgr->disconnect();
|
78
|
+
return S_OK;
|
79
|
+
}
|
80
|
+
|
81
|
+
void setResult(CComObject<CConnRecords>* obj, IConnRecords** retVal)
|
82
|
+
{
|
83
|
+
IConnRecords* recs;
|
84
|
+
obj->QueryInterface(IID_IConnRecords, (void**)&recs);
|
85
|
+
_ASSERTE(recs);
|
86
|
+
*retVal = recs;
|
87
|
+
|
88
|
+
}
|
89
|
+
|
90
|
+
STDMETHODIMP CConnMgr::Databases(IConnRecords** retVal)
|
91
|
+
{
|
92
|
+
if (m_mgr == NULL) Error(_T("No database error"), IID_IConnMgr);
|
93
|
+
CComObject<CConnRecords>* obj;
|
94
|
+
CComObject<CConnRecords>::CreateInstance(&obj);
|
95
|
+
if (!obj)
|
96
|
+
return Error("CreateInstance ConnRecords", IID_IConnMgr);
|
97
|
+
obj->m_recs = m_mgr->databases();
|
98
|
+
setResult(obj, retVal);
|
99
|
+
return S_OK;
|
100
|
+
}
|
101
|
+
|
102
|
+
STDMETHODIMP CConnMgr::Tables(BSTR dbname, IConnRecords** retVal)
|
103
|
+
{
|
104
|
+
if (m_mgr == NULL) Error(_T("No database error"), IID_IConnMgr);
|
105
|
+
CComObject<CConnRecords>* obj;
|
106
|
+
CComObject<CConnRecords>::CreateInstance(&obj);
|
107
|
+
if (!obj)
|
108
|
+
return Error("CreateInstance ConnRecords", IID_IConnMgr);
|
109
|
+
obj->m_recs = m_mgr->tables(dbname);
|
110
|
+
setResult(obj, retVal);
|
111
|
+
return S_OK;
|
112
|
+
}
|
113
|
+
|
114
|
+
STDMETHODIMP CConnMgr::Views(BSTR dbname, IConnRecords** retVal)
|
115
|
+
{
|
116
|
+
if (m_mgr == NULL) Error(_T("No database error"), IID_IConnMgr);
|
117
|
+
CComObject<CConnRecords>* obj;
|
118
|
+
CComObject<CConnRecords>::CreateInstance(&obj);
|
119
|
+
if (!obj)
|
120
|
+
return Error("CreateInstance ConnRecords", IID_IConnMgr);
|
121
|
+
obj->m_recs = m_mgr->views(dbname);
|
122
|
+
setResult(obj, retVal);
|
123
|
+
return S_OK;
|
124
|
+
}
|
125
|
+
|
126
|
+
STDMETHODIMP CConnMgr::SchemaTables(BSTR dbname, IConnRecords** retVal)
|
127
|
+
{
|
128
|
+
if (m_mgr == NULL) Error(_T("No database error"), IID_IConnMgr);
|
129
|
+
CComObject<CConnRecords>* obj;
|
130
|
+
CComObject<CConnRecords>::CreateInstance(&obj);
|
131
|
+
if (!obj)
|
132
|
+
return Error("CreateInstance ConnRecords", IID_IConnMgr);
|
133
|
+
obj->m_recs = m_mgr->schemaTables(dbname);
|
134
|
+
setResult(obj, retVal);
|
135
|
+
return S_OK;
|
136
|
+
}
|
137
|
+
|
138
|
+
STDMETHODIMP CConnMgr::Sysvars(IConnRecords** retVal)
|
139
|
+
{
|
140
|
+
if (m_mgr == NULL) Error(_T("No database error"), IID_IConnMgr);
|
141
|
+
CComObject<CConnRecords>* obj;
|
142
|
+
CComObject<CConnRecords>::CreateInstance(&obj);
|
143
|
+
if (!obj)
|
144
|
+
return Error("CreateInstance ConnRecords", IID_IConnMgr);
|
145
|
+
obj->m_recs = m_mgr->sysvars();
|
146
|
+
setResult(obj, retVal);
|
147
|
+
return S_OK;
|
148
|
+
}
|
149
|
+
|
150
|
+
STDMETHODIMP CConnMgr::SlaveStatus(IConnRecords** retVal)
|
151
|
+
{
|
152
|
+
if (m_mgr == NULL) Error(_T("No database error"), IID_IConnMgr);
|
153
|
+
CComObject<CConnRecords>* obj;
|
154
|
+
CComObject<CConnRecords>::CreateInstance(&obj);
|
155
|
+
if (!obj)
|
156
|
+
return Error("CreateInstance ConnRecords", IID_IConnMgr);
|
157
|
+
obj->m_recs = m_mgr->slaveStatus();
|
158
|
+
setResult(obj, retVal);
|
159
|
+
return S_OK;
|
160
|
+
}
|
161
|
+
|
162
|
+
STDMETHODIMP CConnMgr::Connections(IConnRecords** retVal)
|
163
|
+
{
|
164
|
+
if (m_mgr == NULL) Error(_T("No database error"), IID_IConnMgr);
|
165
|
+
CComObject<CConnRecords>* obj;
|
166
|
+
CComObject<CConnRecords>::CreateInstance(&obj);
|
167
|
+
if (!obj)
|
168
|
+
return Error("CreateInstance ConnRecords", IID_IConnMgr);
|
169
|
+
obj->m_recs = m_mgr->connections();
|
170
|
+
setResult(obj, retVal);
|
171
|
+
return S_OK;
|
172
|
+
}
|
173
|
+
|
174
|
+
#ifdef _WIN64
|
175
|
+
STDMETHODIMP CConnMgr::InUseDatabases(__int64 connid, IConnRecords** retVal)
|
176
|
+
{
|
177
|
+
if (m_mgr == NULL) Error(_T("No database error"), IID_IConnMgr);
|
178
|
+
CComObject<CConnRecords>* obj;
|
179
|
+
CComObject<CConnRecords>::CreateInstance(&obj);
|
180
|
+
if (!obj)
|
181
|
+
return Error("CreateInstance ConnRecords", IID_IConnMgr);
|
182
|
+
obj->m_recs = m_mgr->inUseDatabases(connid);
|
183
|
+
setResult(obj, retVal);
|
184
|
+
return S_OK;
|
185
|
+
}
|
186
|
+
|
187
|
+
STDMETHODIMP CConnMgr::InUseTables(__int64 connid, int db, IConnRecords** retVal)
|
188
|
+
{
|
189
|
+
if (m_mgr == NULL) Error(_T("No database error"), IID_IConnMgr);
|
190
|
+
CComObject<CConnRecords>* obj;
|
191
|
+
CComObject<CConnRecords>::CreateInstance(&obj);
|
192
|
+
if (!obj)
|
193
|
+
return Error("CreateInstance ConnRecords", IID_IConnMgr);
|
194
|
+
obj->m_recs = m_mgr->inUseTables(connid, db);
|
195
|
+
setResult(obj, retVal);
|
196
|
+
return S_OK;
|
197
|
+
}
|
198
|
+
|
199
|
+
STDMETHODIMP CConnMgr::PostDisconnectOne(__int64 connid)
|
200
|
+
{
|
201
|
+
if (m_mgr == NULL) Error(_T("No database error"), IID_IConnMgr);
|
202
|
+
m_mgr->postDisconnectOne(connid);
|
203
|
+
return S_OK;
|
204
|
+
}
|
205
|
+
|
206
|
+
#else
|
207
|
+
|
208
|
+
STDMETHODIMP CConnMgr::InUseDatabases(BSTR connid, IConnRecords** retVal)
|
209
|
+
{
|
210
|
+
if (m_mgr == NULL) Error(_T("No database error"), IID_IConnMgr);
|
211
|
+
CComObject<CConnRecords>* obj;
|
212
|
+
CComObject<CConnRecords>::CreateInstance(&obj);
|
213
|
+
if (!obj)
|
214
|
+
return Error("CreateInstance ConnRecords", IID_IConnMgr);
|
215
|
+
obj->m_recs = m_mgr->inUseDatabases(_wtoi64(connid));
|
216
|
+
setResult(obj, retVal);
|
217
|
+
return S_OK;
|
218
|
+
}
|
219
|
+
|
220
|
+
STDMETHODIMP CConnMgr::InUseTables(BSTR connid, int db, IConnRecords** retVal)
|
221
|
+
{
|
222
|
+
if (m_mgr == NULL) Error(_T("No database error"), IID_IConnMgr);
|
223
|
+
CComObject<CConnRecords>* obj;
|
224
|
+
CComObject<CConnRecords>::CreateInstance(&obj);
|
225
|
+
if (!obj)
|
226
|
+
return Error("CreateInstance ConnRecords", IID_IConnMgr);
|
227
|
+
obj->m_recs = m_mgr->inUseTables(_wtoi64(connid), db);
|
228
|
+
setResult(obj, retVal);
|
229
|
+
return S_OK;
|
230
|
+
}
|
231
|
+
|
232
|
+
STDMETHODIMP CConnMgr::PostDisconnectOne(BSTR connid)
|
233
|
+
{
|
234
|
+
if (m_mgr == NULL) Error(_T("No database error"), IID_IConnMgr);
|
235
|
+
m_mgr->postDisconnectOne(_wtoi64(connid));
|
236
|
+
return S_OK;
|
237
|
+
}
|
238
|
+
|
239
|
+
#endif
|
240
|
+
|
241
|
+
STDMETHODIMP CConnMgr::PostDisconnectAll()
|
242
|
+
{
|
243
|
+
if (m_mgr == NULL) Error(_T("No database error"), IID_IConnMgr);
|
244
|
+
m_mgr->postDisconnectAll();
|
245
|
+
return S_OK;
|
246
|
+
}
|
247
|
+
|
248
|
+
STDMETHODIMP CConnMgr::get_Stat(short* retVal)
|
249
|
+
{
|
250
|
+
if (m_mgr == NULL) Error(_T("No database error"), IID_IConnMgr);
|
251
|
+
*retVal = m_mgr->stat();
|
252
|
+
return S_OK;
|
253
|
+
}
|
254
|
+
|
255
|
+
STDMETHODIMP CConnMgr::TdapErr(OLE_HANDLE hWnd, BSTR* retVal)
|
256
|
+
{
|
257
|
+
return S_OK;
|
258
|
+
}
|
259
|
+
|
260
|
+
STDMETHODIMP CConnMgr::RemoveSystemDb(IConnRecords** retVal)
|
261
|
+
{
|
262
|
+
CConnRecords* p = dynamic_cast<CConnRecords*>(*retVal);
|
263
|
+
if (p)
|
264
|
+
{
|
265
|
+
connMgr::removeSystemDb(p->m_recs);
|
266
|
+
return S_OK;
|
267
|
+
}
|
268
|
+
return Error(_T("Invalid object"), IID_IConnMgr);
|
269
|
+
}
|
270
|
+
|
271
|
+
STDMETHODIMP CConnMgr::SlaveStatusName(int index, BSTR* retVal)
|
272
|
+
{
|
273
|
+
CComBSTR ret= connMgr::slaveStatusName(index);
|
274
|
+
*retVal = ret.Copy();
|
275
|
+
return S_OK;
|
276
|
+
}
|
277
|
+
|
278
|
+
STDMETHODIMP CConnMgr::SysvarName(int index, BSTR* retVal)
|
279
|
+
{
|
280
|
+
CComBSTR ret= connMgr::sysvarName(index);
|
281
|
+
*retVal = ret.Copy();
|
282
|
+
return S_OK;
|
283
|
+
}
|
284
|
+
|
285
|
+
|