transactd 3.6.1 → 3.7.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_6.dll → tdclc_32_3_7.dll} +0 -0
- data/bin/common/{tdclc_64_3_6.dll → tdclc_64_3_7.dll} +0 -0
- data/build/swig/ruby/tdclrb_wrap.cpp +125 -17
- data/build/tdclc/tdclc.cbproj +1 -1
- data/build/tdclc/tdclc.rc +4 -4
- data/build/tdclcpp/tdclcpp.rc +4 -4
- data/build/tdclcpp/tdclcpp_bc.cbproj +1 -1
- data/build/tdclrb/tdclrb.rc +4 -4
- data/source/bzs/db/protocol/tdap/client/field.cpp +24 -0
- data/source/bzs/db/protocol/tdap/client/field.h +2 -0
- data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +243 -59
- data/source/bzs/db/protocol/tdap/client/groupQuery.h +8 -0
- data/source/bzs/db/protocol/tdap/client/memRecord.cpp +19 -6
- data/source/bzs/db/protocol/tdap/client/memRecord.h +10 -1
- data/source/bzs/db/protocol/tdap/client/recordset.cpp +17 -0
- data/source/bzs/db/protocol/tdap/client/recordset.h +3 -0
- data/source/bzs/db/protocol/tdap/client/recordsetImple.h +131 -30
- data/source/bzs/db/protocol/tdap/client/table.cpp +11 -2
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +1 -0
- data/source/bzs/db/protocol/tdap/tdapcapi.h +5 -5
- data/source/bzs/test/tdclatl/test_v3.js +22 -0
- data/source/bzs/test/tdclphp/transactd_v3_Test.php +35 -0
- data/source/bzs/test/tdclrb/transactd_v3_spec.rb +40 -0
- data/source/bzs/test/trdclengn/testField.h +320 -0
- data/source/bzs/test/trdclengn/test_tdclcpp_v3.cpp +9 -0
- data/source/global/tdclatl/Recordset.cpp +44 -2
- data/source/global/tdclatl/Recordset.h +6 -2
- data/source/global/tdclatl/tdclatl.idl +5 -1
- metadata +4 -4
@@ -3940,6 +3940,326 @@ void test_UTCC_wt_delete()
|
|
3940
3940
|
db->abortTrn();
|
3941
3941
|
}
|
3942
3942
|
|
3943
|
+
|
3944
|
+
void test_join()
|
3945
|
+
{
|
3946
|
+
|
3947
|
+
database_ptr db = createDatabaseObject();
|
3948
|
+
openDatabase(db, makeUri(PROTOCOL, HOSTNAME, DBNAMEV3, BDFNAME), TYPE_SCHEMA_BDF);
|
3949
|
+
|
3950
|
+
activeTable at(db, _T("users"));
|
3951
|
+
recordset rs;
|
3952
|
+
query q;
|
3953
|
+
q.select(_T("id"), _T("group"));
|
3954
|
+
at.index(0).keyValue(0).read(rs, q);
|
3955
|
+
BOOST_CHECK_MESSAGE(rs.size() == 13, "rs.size() = " << rs.size());
|
3956
|
+
recordset& rs2 = *rs.clone();
|
3957
|
+
|
3958
|
+
activeTable atg(db, _T("groups"));
|
3959
|
+
recordset rsg;
|
3960
|
+
atg.index(0).keyValue(0).read(rsg, q.reset());
|
3961
|
+
recordset& rsg2 = *rsg.clone();
|
3962
|
+
|
3963
|
+
recordsetQuery rq;
|
3964
|
+
rq.when(_T("pri_id"), _T("="), _T("group"));
|
3965
|
+
rsg2.join(rs, rq);
|
3966
|
+
/*
|
3967
|
+
rsg.dump();
|
3968
|
+
+--------+------+----------------+------+-------+
|
3969
|
+
| pri_id | id | name | id | group |
|
3970
|
+
+--------+------+----------------+------+-------+
|
3971
|
+
| 1 | 1 | Administrators | 1 | 1 |
|
3972
|
+
| 1 | 1 | Administrators | 10 | 1 |
|
3973
|
+
| 2 | 2 | Users | 2 | 2 |
|
3974
|
+
| 2 | 2 | Users | 4 | 2 |
|
3975
|
+
| 2 | 2 | Users | 7 | 2 |
|
3976
|
+
| 3 | 3 | Guests | 8 | 3 |
|
3977
|
+
| 3 | 3 | Guests | 11 | 3 |
|
3978
|
+
| 4 | NULL | Unknowns | 6 | 4 |
|
3979
|
+
| 4 | NULL | Unknowns | 9 | 4 |
|
3980
|
+
+--------+------+----------------+------+-------+
|
3981
|
+
select
|
3982
|
+
groups.pri_id, groups.id, groups.name, users.id,users.group
|
3983
|
+
from
|
3984
|
+
groups
|
3985
|
+
inner join users on groups.pri_id = users.group;
|
3986
|
+
*/
|
3987
|
+
BOOST_CHECK(rsg2.size() == 9);
|
3988
|
+
for (size_t i = 0;i < rsg2.size(); ++i)
|
3989
|
+
BOOST_CHECK(rsg2[i][(short)0].i() == rsg2[i][4].i());
|
3990
|
+
|
3991
|
+
|
3992
|
+
rq.reset().when(_T("group"), _T("="), _T("pri_id"));
|
3993
|
+
rs2.outerJoin(rsg, rq);
|
3994
|
+
/*
|
3995
|
+
rs2.dump();
|
3996
|
+
+------+-------+--------+------+----------------+
|
3997
|
+
| id | group | pri_id | id | name |
|
3998
|
+
+------+-------+--------+------+----------------+
|
3999
|
+
| 1 | 1 | 1 | 1 | Administrators |
|
4000
|
+
| 2 | 2 | 2 | 2 | Users |
|
4001
|
+
| 3 | NULL | NULL | NULL | NULL |
|
4002
|
+
| 4 | 2 | 2 | 2 | Users |
|
4003
|
+
| 5 | NULL | NULL | NULL | NULL |
|
4004
|
+
| 6 | 4 | 4 | NULL | Unknowns |
|
4005
|
+
| 7 | 2 | 2 | 2 | Users |
|
4006
|
+
| 8 | 3 | 3 | 3 | Guests |
|
4007
|
+
| 9 | 4 | 4 | NULL | Unknowns |
|
4008
|
+
| 10 | 1 | 1 | 1 | Administrators |
|
4009
|
+
| 11 | 3 | 3 | 3 | Guests |
|
4010
|
+
| 12 | NULL | NULL | NULL | NULL |
|
4011
|
+
| 13 | NULL | NULL | NULL | NULL |
|
4012
|
+
+------+-------+--------+------+----------------+
|
4013
|
+
select
|
4014
|
+
users.id, users.group, groups.pri_id, groups.id, groups.name
|
4015
|
+
from
|
4016
|
+
users
|
4017
|
+
left outer join groups on users.group = groups.pri_id
|
4018
|
+
order by
|
4019
|
+
users.id;
|
4020
|
+
*/
|
4021
|
+
BOOST_CHECK(rs2.size() == 13);
|
4022
|
+
for (size_t i = 0;i < rs2.size(); ++i)
|
4023
|
+
{
|
4024
|
+
BOOST_CHECK(rs2[i][1].i() == rs2[i][2].i());
|
4025
|
+
BOOST_CHECK(rs2[i][1].isNull() == rs2[i][2].isNull());
|
4026
|
+
}
|
4027
|
+
rsg2 = *rsg.clone();
|
4028
|
+
rs2 = *rs.clone();
|
4029
|
+
|
4030
|
+
rq.reset().when(_T("group"), _T("="), _T("pri_id"));
|
4031
|
+
rs2.join(rsg, rq);
|
4032
|
+
/*
|
4033
|
+
rs2.dump();
|
4034
|
+
+------+-------+--------+------+----------------+
|
4035
|
+
| id | group | pri_id | id | name |
|
4036
|
+
+------+-------+--------+------+----------------+
|
4037
|
+
| 1 | 1 | 1 | 1 | Administrators |
|
4038
|
+
| 2 | 2 | 2 | 2 | Users |
|
4039
|
+
| 4 | 2 | 2 | 2 | Users |
|
4040
|
+
| 6 | 4 | 4 | NULL | Unknowns |
|
4041
|
+
| 7 | 2 | 2 | 2 | Users |
|
4042
|
+
| 8 | 3 | 3 | 3 | Guests |
|
4043
|
+
| 9 | 4 | 4 | NULL | Unknowns |
|
4044
|
+
| 10 | 1 | 1 | 1 | Administrators |
|
4045
|
+
| 11 | 3 | 3 | 3 | Guests |
|
4046
|
+
+------+-------+--------+------+----------------+
|
4047
|
+
select
|
4048
|
+
users.id, users.group, groups.pri_id, groups.id, groups.name
|
4049
|
+
from
|
4050
|
+
users
|
4051
|
+
inner join groups on users.group = groups.pri_id
|
4052
|
+
order by
|
4053
|
+
users.id;
|
4054
|
+
*/
|
4055
|
+
BOOST_CHECK(rs2.size() == 9);
|
4056
|
+
for (size_t i = 0;i < rs2.size(); ++i)
|
4057
|
+
{
|
4058
|
+
BOOST_CHECK(rs2[i][1].i() == rs2[i][2].i());
|
4059
|
+
BOOST_CHECK(rs2[i][1].isNull() == rs2[i][4].isNull());
|
4060
|
+
}
|
4061
|
+
|
4062
|
+
rq.reset().when(_T("id"), _T("="), _T("group"));
|
4063
|
+
rsg2.outerJoin(rs, rq);
|
4064
|
+
/*
|
4065
|
+
rsg2.dump();
|
4066
|
+
+--------+------+----------------+------+-------+
|
4067
|
+
| pri_id | id | name | id | group |
|
4068
|
+
+--------+------+----------------+------+-------+
|
4069
|
+
| 1 | 1 | Administrators | 1 | 1 |
|
4070
|
+
| 1 | 1 | Administrators | 10 | 1 |
|
4071
|
+
| 2 | 2 | Users | 2 | 2 |
|
4072
|
+
| 2 | 2 | Users | 4 | 2 |
|
4073
|
+
| 2 | 2 | Users | 7 | 2 |
|
4074
|
+
| 3 | 3 | Guests | 8 | 3 |
|
4075
|
+
| 3 | 3 | Guests | 11 | 3 |
|
4076
|
+
| 4 | NULL | Unknowns | NULL | NULL |
|
4077
|
+
+--------+------+----------------+------+-------+
|
4078
|
+
select
|
4079
|
+
groups.pri_id, groups.id, groups.name, users.id, users.group
|
4080
|
+
from
|
4081
|
+
groups
|
4082
|
+
left outer join users on groups.id = users.group
|
4083
|
+
order by
|
4084
|
+
groups.pri_id;
|
4085
|
+
*/
|
4086
|
+
BOOST_CHECK(rsg2.size() == 8);
|
4087
|
+
for (size_t i = 0;i < rsg2.size(); ++i)
|
4088
|
+
{
|
4089
|
+
BOOST_CHECK(rsg2[i][1].i() == rsg2[i][4].i());
|
4090
|
+
BOOST_CHECK(rsg2[i][1].isNull() == rsg2[i][4].isNull());
|
4091
|
+
}
|
4092
|
+
|
4093
|
+
rsg2 = *rsg.clone();
|
4094
|
+
rs2 = *rs.clone();
|
4095
|
+
|
4096
|
+
rq.reset().when(_T("group"), _T("<"), _T("pri_id"));
|
4097
|
+
rs2.outerJoin(rsg, rq);
|
4098
|
+
/*
|
4099
|
+
rs2.dump();
|
4100
|
+
+------+-------+--------+------+----------+
|
4101
|
+
| id | group | pri_id | id | name |
|
4102
|
+
+------+-------+--------+------+----------+
|
4103
|
+
| 1 | 1 | 2 | 2 | Users |
|
4104
|
+
| 1 | 1 | 3 | 3 | Guests |
|
4105
|
+
| 1 | 1 | 4 | NULL | Unknowns |
|
4106
|
+
| 2 | 2 | 3 | 3 | Guests |
|
4107
|
+
| 2 | 2 | 4 | NULL | Unknowns |
|
4108
|
+
| 3 | NULL | NULL | NULL | NULL |
|
4109
|
+
| 4 | 2 | 3 | 3 | Guests |
|
4110
|
+
| 4 | 2 | 4 | NULL | Unknowns |
|
4111
|
+
| 5 | NULL | NULL | NULL | NULL |
|
4112
|
+
| 6 | 4 | NULL | NULL | NULL |
|
4113
|
+
| 7 | 2 | 3 | 3 | Guests |
|
4114
|
+
| 7 | 2 | 4 | NULL | Unknowns |
|
4115
|
+
| 8 | 3 | 4 | NULL | Unknowns |
|
4116
|
+
| 9 | 4 | NULL | NULL | NULL |
|
4117
|
+
| 10 | 1 | 2 | 2 | Users |
|
4118
|
+
| 10 | 1 | 3 | 3 | Guests |
|
4119
|
+
| 10 | 1 | 4 | NULL | Unknowns |
|
4120
|
+
| 11 | 3 | 4 | NULL | Unknowns |
|
4121
|
+
| 12 | NULL | NULL | NULL | NULL |
|
4122
|
+
| 13 | NULL | NULL | NULL | NULL |
|
4123
|
+
+------+-------+--------+------+----------+
|
4124
|
+
select
|
4125
|
+
users.id, users.group, groups.pri_id, groups.id, groups.name
|
4126
|
+
from
|
4127
|
+
users
|
4128
|
+
left outer join groups on users.group < groups.pri_id
|
4129
|
+
order by
|
4130
|
+
users.id;
|
4131
|
+
*/
|
4132
|
+
BOOST_CHECK(rs2.size() == 20);
|
4133
|
+
for (size_t i = 0;i < rs2.size(); ++i)
|
4134
|
+
{
|
4135
|
+
if (rs2[i][1].i() == 4)
|
4136
|
+
BOOST_CHECK(rs2[i][2].isNull());
|
4137
|
+
else if (!rs2[i][1].isNull())
|
4138
|
+
BOOST_CHECK(rs2[i][1].i() < rs2[i][2].i());
|
4139
|
+
else
|
4140
|
+
BOOST_CHECK(rs2[i][1].isNull() == rs2[i][2].isNull());
|
4141
|
+
}
|
4142
|
+
|
4143
|
+
// joined recordset clone
|
4144
|
+
recordset& rs3 = *rs2.clone();
|
4145
|
+
BOOST_CHECK(rs2.size() == 20);
|
4146
|
+
for (size_t i = 0;i < rs2.size(); ++i)
|
4147
|
+
{
|
4148
|
+
if (rs3[i][1].i() == 4)
|
4149
|
+
BOOST_CHECK(rs3[i][2].isNull());
|
4150
|
+
else if (!rs3[i][1].isNull())
|
4151
|
+
BOOST_CHECK(rs3[i][1].i() < rs3[i][2].i());
|
4152
|
+
else
|
4153
|
+
BOOST_CHECK(rs3[i][1].isNull() == rs3[i][2].isNull());
|
4154
|
+
}
|
4155
|
+
// more join
|
4156
|
+
rq.reset().when(_T("group"), _T("="), _T("pri_id"));
|
4157
|
+
rs3.join(rsg, rq);
|
4158
|
+
/*
|
4159
|
+
rs3.dump();
|
4160
|
+
+------+-------+--------+------+----------+--------+------+----------------+
|
4161
|
+
| id | group | pri_id | id | name | pri_id | id | name |
|
4162
|
+
+------+-------+--------+------+----------+--------+------+----------------+
|
4163
|
+
| 1 | 1 | 2 | 2 | Users | 1 | 1 | Administrators |
|
4164
|
+
| 1 | 1 | 3 | 3 | Guests | 1 | 1 | Administrators |
|
4165
|
+
| 1 | 1 | 4 | NULL | Unknowns | 1 | 1 | Administrators |
|
4166
|
+
| 2 | 2 | 3 | 3 | Guests | 2 | 2 | Users |
|
4167
|
+
| 2 | 2 | 4 | NULL | Unknowns | 2 | 2 | Users |
|
4168
|
+
| 4 | 2 | 3 | 3 | Guests | 2 | 2 | Users |
|
4169
|
+
| 4 | 2 | 4 | NULL | Unknowns | 2 | 2 | Users |
|
4170
|
+
| 6 | 4 | NULL | NULL | NULL | 4 | NULL | Unknowns |
|
4171
|
+
| 7 | 2 | 3 | 3 | Guests | 2 | 2 | Users |
|
4172
|
+
| 7 | 2 | 4 | NULL | Unknowns | 2 | 2 | Users |
|
4173
|
+
| 8 | 3 | 4 | NULL | Unknowns | 3 | 3 | Guests |
|
4174
|
+
| 9 | 4 | NULL | NULL | NULL | 4 | NULL | Unknowns |
|
4175
|
+
| 10 | 1 | 2 | 2 | Users | 1 | 1 | Administrators |
|
4176
|
+
| 10 | 1 | 3 | 3 | Guests | 1 | 1 | Administrators |
|
4177
|
+
| 10 | 1 | 4 | NULL | Unknowns | 1 | 1 | Administrators |
|
4178
|
+
| 11 | 3 | 4 | NULL | Unknowns | 3 | 3 | Guests |
|
4179
|
+
+------+-------+--------+------+----------+--------+------+----------------+
|
4180
|
+
*/
|
4181
|
+
|
4182
|
+
rs3.release();
|
4183
|
+
|
4184
|
+
rs2 = *rs.clone();
|
4185
|
+
rq.reset().when(_T("group"), _T("<"), _T("pri_id"));
|
4186
|
+
rs2.join(rsg, rq);
|
4187
|
+
/*
|
4188
|
+
rs2.dump();
|
4189
|
+
+------+-------+--------+------+----------+
|
4190
|
+
| id | group | pri_id | id | name |
|
4191
|
+
+------+-------+--------+------+----------+
|
4192
|
+
| 1 | 1 | 2 | 2 | Users |
|
4193
|
+
| 1 | 1 | 3 | 3 | Guests |
|
4194
|
+
| 1 | 1 | 4 | NULL | Unknowns |
|
4195
|
+
| 2 | 2 | 3 | 3 | Guests |
|
4196
|
+
| 2 | 2 | 4 | NULL | Unknowns |
|
4197
|
+
| 4 | 2 | 3 | 3 | Guests |
|
4198
|
+
| 4 | 2 | 4 | NULL | Unknowns |
|
4199
|
+
| 7 | 2 | 3 | 3 | Guests |
|
4200
|
+
| 7 | 2 | 4 | NULL | Unknowns |
|
4201
|
+
| 8 | 3 | 4 | NULL | Unknowns |
|
4202
|
+
| 10 | 1 | 2 | 2 | Users |
|
4203
|
+
| 10 | 1 | 3 | 3 | Guests |
|
4204
|
+
| 10 | 1 | 4 | NULL | Unknowns |
|
4205
|
+
| 11 | 3 | 4 | NULL | Unknowns |
|
4206
|
+
+------+-------+--------+------+----------+
|
4207
|
+
select
|
4208
|
+
users.id, users.group, groups.pri_id, groups.id, groups.name
|
4209
|
+
from
|
4210
|
+
users
|
4211
|
+
inner join groups on users.group < groups.pri_id
|
4212
|
+
order by
|
4213
|
+
users.id,groups.pri_id;
|
4214
|
+
|
4215
|
+
*/
|
4216
|
+
BOOST_CHECK(rs2.size() == 14);
|
4217
|
+
for (size_t i = 0;i < rs2.size(); ++i)
|
4218
|
+
{
|
4219
|
+
BOOST_CHECK(rs2[i][1].i() < rs2[i][2].i());
|
4220
|
+
}
|
4221
|
+
|
4222
|
+
rs2 = *rs.clone();
|
4223
|
+
rq.reset().when(_T("group"), _T("="), _T("pri_id"))
|
4224
|
+
.and_(_T("group"), _T("="), _T("id"));
|
4225
|
+
rs2.join(rsg, rq);
|
4226
|
+
/*
|
4227
|
+
rs2.dump();
|
4228
|
+
+------+-------+--------+------+----------------+
|
4229
|
+
| id | group | pri_id | id | name |
|
4230
|
+
+------+-------+--------+------+----------------+
|
4231
|
+
| 1 | 1 | 1 | 1 | Administrators |
|
4232
|
+
| 2 | 2 | 2 | 2 | Users |
|
4233
|
+
| 4 | 2 | 2 | 2 | Users |
|
4234
|
+
| 7 | 2 | 2 | 2 | Users |
|
4235
|
+
| 8 | 3 | 3 | 3 | Guests |
|
4236
|
+
| 10 | 1 | 1 | 1 | Administrators |
|
4237
|
+
| 11 | 3 | 3 | 3 | Guests |
|
4238
|
+
+------+-------+--------+------+----------------+
|
4239
|
+
select
|
4240
|
+
users.id, users.group, groups.pri_id, groups.id, groups.name
|
4241
|
+
from
|
4242
|
+
users
|
4243
|
+
inner join groups on users.group = groups.pri_id and users.group = groups.id
|
4244
|
+
order by
|
4245
|
+
users.id;
|
4246
|
+
*/
|
4247
|
+
BOOST_CHECK(rs2.size() == 7);
|
4248
|
+
for (size_t i = 0;i < rs2.size(); ++i)
|
4249
|
+
{
|
4250
|
+
BOOST_CHECK(rs2[i][1].i() == rs2[i][2].i());
|
4251
|
+
BOOST_CHECK(rs2[i][1].i() == rs2[i][3].i());
|
4252
|
+
}
|
4253
|
+
rsg2.release();
|
4254
|
+
rs2.release();
|
4255
|
+
|
4256
|
+
/*catch(bzs::rtl::exception& e)
|
4257
|
+
{
|
4258
|
+
*bzs::rtl::getCode(e);
|
4259
|
+
_tprintf(bzs::rtl::getMsg(e)->c_str());
|
4260
|
+
}*/
|
4261
|
+
}
|
4262
|
+
|
3943
4263
|
#pragma warning(default : 4996)
|
3944
4264
|
|
3945
4265
|
#endif // BZS_TEST_TRDCLENGN_TESTFIELD_H
|
@@ -1102,6 +1102,15 @@ BOOST_AUTO_TEST_CASE(table_utcc1)
|
|
1102
1102
|
}
|
1103
1103
|
|
1104
1104
|
BOOST_AUTO_TEST_SUITE_END()
|
1105
|
+
|
1106
|
+
BOOST_AUTO_TEST_SUITE(recordset)
|
1107
|
+
BOOST_AUTO_TEST_CASE(join)
|
1108
|
+
{
|
1109
|
+
test_join();
|
1110
|
+
|
1111
|
+
}
|
1112
|
+
|
1113
|
+
BOOST_AUTO_TEST_SUITE_END()
|
1105
1114
|
|
1106
1115
|
|
1107
1116
|
// ------------------------------------------------------------------------
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*=================================================================
|
2
|
-
Copyright (C) 2014 BizStation Corp All rights reserved.
|
2
|
+
Copyright (C) 2014-2016 BizStation Corp All rights reserved.
|
3
3
|
|
4
4
|
This program is free software; you can redistribute it and/or
|
5
5
|
modify it under the terms of the GNU General Public License
|
@@ -371,7 +371,7 @@ STDMETHODIMP CARecordset::UnionRecordset(IRecordset* rs, IRecordset** retVal)
|
|
371
371
|
{
|
372
372
|
CARecordset* p = dynamic_cast<CARecordset*>(rs);
|
373
373
|
if (!p)
|
374
|
-
return Error(_T("Invalid
|
374
|
+
return Error(_T("Invalid Recordset::UnionRecordset param 1"), IID_IRecordset);
|
375
375
|
*m_rs += *(p->m_rs);
|
376
376
|
setResult(retVal);
|
377
377
|
return S_OK;
|
@@ -382,3 +382,45 @@ STDMETHODIMP CARecordset::UnionRecordset(IRecordset* rs, IRecordset** retVal)
|
|
382
382
|
}
|
383
383
|
}
|
384
384
|
|
385
|
+
STDMETHODIMP CARecordset::Join(IRecordset* irs, IRecordsetQuery* igq, IRecordset** retVal)
|
386
|
+
{
|
387
|
+
try
|
388
|
+
{
|
389
|
+
CARecordset* rs = dynamic_cast<CARecordset*>(irs);
|
390
|
+
if (!rs)
|
391
|
+
return Error(_T("Invalid Recordset::Join param 1"), IID_IRecordset);
|
392
|
+
|
393
|
+
CRecordsetQuery* rq = dynamic_cast<CRecordsetQuery*>(igq);
|
394
|
+
if (!rq)
|
395
|
+
return Error(_T("Invalid Recordset::Join param 2"), IID_IRecordset);
|
396
|
+
m_rs->join(*rs->m_rs, rq->m_qb);
|
397
|
+
setResult(retVal);
|
398
|
+
return S_OK;
|
399
|
+
}
|
400
|
+
catch (bzs::rtl::exception& e)
|
401
|
+
{
|
402
|
+
return Error((*bzs::rtl::getMsg(e)).c_str(), IID_IRecordset);
|
403
|
+
}
|
404
|
+
}
|
405
|
+
|
406
|
+
|
407
|
+
STDMETHODIMP CARecordset::OuterJoin(IRecordset* irs, IRecordsetQuery* igq, IRecordset** retVal)
|
408
|
+
{
|
409
|
+
try
|
410
|
+
{
|
411
|
+
CARecordset* rs = dynamic_cast<CARecordset*>(irs);
|
412
|
+
if (!rs)
|
413
|
+
return Error(_T("Invalid Recordset::Join param 1"), IID_IRecordset);
|
414
|
+
|
415
|
+
CRecordsetQuery* rq = dynamic_cast<CRecordsetQuery*>(igq);
|
416
|
+
if (!rq)
|
417
|
+
return Error(_T("Invalid Recordset::Join param 2"), IID_IRecordset);
|
418
|
+
m_rs->outerJoin(*rs->m_rs, rq->m_qb);
|
419
|
+
setResult(retVal);
|
420
|
+
return S_OK;
|
421
|
+
}
|
422
|
+
catch (bzs::rtl::exception& e)
|
423
|
+
{
|
424
|
+
return Error((*bzs::rtl::getMsg(e)).c_str(), IID_IRecordset);
|
425
|
+
}
|
426
|
+
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#pragma once
|
2
2
|
/*=================================================================
|
3
|
-
Copyright (C) 2014 BizStation Corp All rights reserved.
|
3
|
+
Copyright (C) 2014-2016 BizStation Corp All rights reserved.
|
4
4
|
|
5
5
|
This program is free software; you can redistribute it and/or
|
6
6
|
modify it under the terms of the GNU General Public License
|
@@ -87,5 +87,9 @@ public:
|
|
87
87
|
STDMETHOD(Clear)();
|
88
88
|
STDMETHOD(ClearRecords)();
|
89
89
|
STDMETHOD(UnionRecordset)(IRecordset* rs, IRecordset** retVal);
|
90
|
-
|
90
|
+
STDMETHOD(Join)(IRecordset* rs, IRecordsetQuery* gq, IRecordset** retVal);
|
91
|
+
STDMETHOD(OuterJoin)(IRecordset* rs, IRecordsetQuery* gq, IRecordset** retVal);
|
92
|
+
|
91
93
|
};
|
94
|
+
|
95
|
+
|
@@ -1431,7 +1431,7 @@ interface IRecordset : IDispatch
|
|
1431
1431
|
HRESULT _stdcall Size([out, retval]unsigned long* retVal);
|
1432
1432
|
|
1433
1433
|
[id(0x000000F)]
|
1434
|
-
HRESULT _stdcall MatchBy(IRecordsetQuery* gq, [out, retval] IRecordset** retVal);
|
1434
|
+
HRESULT _stdcall MatchBy([in] IRecordsetQuery* gq, [out, retval] IRecordset** retVal);
|
1435
1435
|
|
1436
1436
|
[id(0x0000010)]
|
1437
1437
|
HRESULT _stdcall Clone([out, retval] IRecordset** retVal);
|
@@ -1448,7 +1448,11 @@ interface IRecordset : IDispatch
|
|
1448
1448
|
[id(0x0000015)]
|
1449
1449
|
HRESULT _stdcall UnionRecordset([in] IRecordset* rs, [out, retval] IRecordset** retVal);
|
1450
1450
|
|
1451
|
+
[id(0x0000016)]
|
1452
|
+
HRESULT _stdcall Join([in] IRecordset* rs, [in] IRecordsetQuery* gq, [out, retval] IRecordset** retVal);
|
1451
1453
|
|
1454
|
+
[id(0x0000017)]
|
1455
|
+
HRESULT _stdcall OuterJoin([in] IRecordset* rs, [in] IRecordsetQuery* gq, [out, retval] IRecordset** retVal);
|
1452
1456
|
|
1453
1457
|
};
|
1454
1458
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: transactd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- BizStation Corp.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-12-13 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Transactd client for ruby gem
|
14
14
|
email: transactd@bizstation.jp
|
@@ -19,8 +19,8 @@ extra_rdoc_files: []
|
|
19
19
|
files:
|
20
20
|
- CMakeLists.txt
|
21
21
|
- build/tdclrb/bldgem/extconf.rb
|
22
|
-
- bin/common/
|
23
|
-
- bin/common/
|
22
|
+
- bin/common/tdclc_32_3_7.dll
|
23
|
+
- bin/common/tdclc_64_3_7.dll
|
24
24
|
- source/bzs/db/blobBuffer.h
|
25
25
|
- source/bzs/db/blobStructs.h
|
26
26
|
- source/bzs/db/engine/mysql/bookmark.h
|