transactd 3.6.1 → 3.7.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/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
|