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.
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