transactd 3.6.1 → 3.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/bin/common/{tdclc_32_3_6.dll → tdclc_32_3_7.dll} +0 -0
  3. data/bin/common/{tdclc_64_3_6.dll → tdclc_64_3_7.dll} +0 -0
  4. data/build/swig/ruby/tdclrb_wrap.cpp +125 -17
  5. data/build/tdclc/tdclc.cbproj +1 -1
  6. data/build/tdclc/tdclc.rc +4 -4
  7. data/build/tdclcpp/tdclcpp.rc +4 -4
  8. data/build/tdclcpp/tdclcpp_bc.cbproj +1 -1
  9. data/build/tdclrb/tdclrb.rc +4 -4
  10. data/source/bzs/db/protocol/tdap/client/field.cpp +24 -0
  11. data/source/bzs/db/protocol/tdap/client/field.h +2 -0
  12. data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +243 -59
  13. data/source/bzs/db/protocol/tdap/client/groupQuery.h +8 -0
  14. data/source/bzs/db/protocol/tdap/client/memRecord.cpp +19 -6
  15. data/source/bzs/db/protocol/tdap/client/memRecord.h +10 -1
  16. data/source/bzs/db/protocol/tdap/client/recordset.cpp +17 -0
  17. data/source/bzs/db/protocol/tdap/client/recordset.h +3 -0
  18. data/source/bzs/db/protocol/tdap/client/recordsetImple.h +131 -30
  19. data/source/bzs/db/protocol/tdap/client/table.cpp +11 -2
  20. data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +1 -0
  21. data/source/bzs/db/protocol/tdap/tdapcapi.h +5 -5
  22. data/source/bzs/test/tdclatl/test_v3.js +22 -0
  23. data/source/bzs/test/tdclphp/transactd_v3_Test.php +35 -0
  24. data/source/bzs/test/tdclrb/transactd_v3_spec.rb +40 -0
  25. data/source/bzs/test/trdclengn/testField.h +320 -0
  26. data/source/bzs/test/trdclengn/test_tdclcpp_v3.cpp +9 -0
  27. data/source/global/tdclatl/Recordset.cpp +44 -2
  28. data/source/global/tdclatl/Recordset.h +6 -2
  29. data/source/global/tdclatl/tdclatl.idl +5 -1
  30. 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 ActiveTable::UnionRecordset param 1"), IID_IRecordset);
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.6.1
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-11 00:00:00.000000000 Z
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/tdclc_32_3_6.dll
23
- - bin/common/tdclc_64_3_6.dll
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