transactd 2.4.5 → 3.0.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 (145) hide show
  1. checksums.yaml +4 -4
  2. data/CMakeLists.txt +1 -1
  3. data/README-JA.md +52 -529
  4. data/README.md +52 -523
  5. data/bin/common/tdclc_32_3_0.dll +0 -0
  6. data/bin/common/tdclc_64_3_0.dll +0 -0
  7. data/build/common/system.cmake +2 -1
  8. data/build/common/transactd_cl_common.cmake +3 -6
  9. data/build/swig/ruby/ruby.swg +85 -28
  10. data/build/swig/ruby/tdclrb_wrap.cpp +3195 -1578
  11. data/build/swig/tdcl.i +161 -5
  12. data/build/tdclc/CMakeLists.txt +1 -0
  13. data/build/tdclc/tdclc.cbproj +7 -1
  14. data/build/tdclc/tdclc.rc +4 -4
  15. data/build/tdclcpp/tdclcpp.rc +4 -4
  16. data/build/tdclcpp/tdclcpp_bc.cbproj +2 -5
  17. data/build/tdclrb/tdclrb.rc +4 -4
  18. data/source/bzs/db/blobStructs.h +1 -1
  19. data/source/bzs/db/engine/mysql/database.cpp +199 -74
  20. data/source/bzs/db/engine/mysql/database.h +47 -18
  21. data/source/bzs/db/engine/mysql/dbManager.cpp +1 -0
  22. data/source/bzs/db/engine/mysql/mysqlInternal.h +32 -8
  23. data/source/bzs/db/protocol/tdap/btrDate.cpp +110 -75
  24. data/source/bzs/db/protocol/tdap/btrDate.h +46 -21
  25. data/source/bzs/db/protocol/tdap/client/activeTable.cpp +18 -18
  26. data/source/bzs/db/protocol/tdap/client/activeTable.h +25 -25
  27. data/source/bzs/db/protocol/tdap/client/activeTableImple.h +10 -4
  28. data/source/bzs/db/protocol/tdap/client/client.cpp +6 -5
  29. data/source/bzs/db/protocol/tdap/client/client.h +82 -15
  30. data/source/bzs/db/protocol/tdap/client/database.cpp +531 -142
  31. data/source/bzs/db/protocol/tdap/client/database.h +19 -6
  32. data/source/bzs/db/protocol/tdap/client/dbDef.cpp +461 -408
  33. data/source/bzs/db/protocol/tdap/client/dbDef.h +11 -17
  34. data/source/bzs/db/protocol/tdap/client/dllmain.cpp +61 -13
  35. data/source/bzs/db/protocol/tdap/client/field.cpp +1592 -1398
  36. data/source/bzs/db/protocol/tdap/client/field.h +110 -121
  37. data/source/bzs/db/protocol/tdap/client/fields.h +40 -10
  38. data/source/bzs/db/protocol/tdap/client/filter.h +69 -55
  39. data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +296 -164
  40. data/source/bzs/db/protocol/tdap/client/groupQuery.h +77 -25
  41. data/source/bzs/db/protocol/tdap/client/memRecord.cpp +31 -13
  42. data/source/bzs/db/protocol/tdap/client/memRecord.h +31 -21
  43. data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +1 -1
  44. data/source/bzs/db/protocol/tdap/client/nsDatabase.h +4 -1
  45. data/source/bzs/db/protocol/tdap/client/nsTable.cpp +69 -24
  46. data/source/bzs/db/protocol/tdap/client/nsTable.h +3 -1
  47. data/source/bzs/db/protocol/tdap/client/recordset.cpp +1 -0
  48. data/source/bzs/db/protocol/tdap/client/recordsetImple.h +46 -27
  49. data/source/bzs/db/protocol/tdap/client/request.h +2 -1
  50. data/source/bzs/db/protocol/tdap/client/serializer.cpp +44 -9
  51. data/source/bzs/db/protocol/tdap/client/serializer.h +1 -1
  52. data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +182 -76
  53. data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +23 -12
  54. data/source/bzs/db/protocol/tdap/client/stringConverter.h +8 -10
  55. data/source/bzs/db/protocol/tdap/client/table.cpp +172 -93
  56. data/source/bzs/db/protocol/tdap/client/table.h +112 -37
  57. data/source/bzs/db/protocol/tdap/client/trdboostapi.h +17 -0
  58. data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +0 -1
  59. data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +0 -2
  60. data/source/bzs/db/protocol/tdap/client/trdormapi.h +1 -1
  61. data/source/bzs/db/protocol/tdap/fieldComp.h +698 -14
  62. data/source/bzs/db/protocol/tdap/myDateTime.cpp +723 -307
  63. data/source/bzs/db/protocol/tdap/myDateTime.h +294 -0
  64. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +164 -54
  65. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +6 -3
  66. data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +133 -550
  67. data/source/bzs/db/protocol/tdap/mysql/request.h +6 -5
  68. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +217 -82
  69. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +1 -1
  70. data/source/bzs/db/protocol/tdap/tdapRequest.h +4 -9
  71. data/source/bzs/db/protocol/tdap/tdapSchema.cpp +808 -17
  72. data/source/bzs/db/protocol/tdap/tdapSchema.h +656 -164
  73. data/source/bzs/db/protocol/tdap/tdapcapi.h +130 -28
  74. data/source/bzs/db/protocol/tdap/uri.h +40 -32
  75. data/source/bzs/db/transactd/connManager.cpp +1 -1
  76. data/source/bzs/db/transactd/transactd.cpp +7 -0
  77. data/source/bzs/env/compiler.h +107 -94
  78. data/source/bzs/env/crosscompile.cpp +24 -12
  79. data/source/bzs/env/crosscompile.h +75 -6
  80. data/source/bzs/env/mbcswchrLinux.cpp +2 -2
  81. data/source/bzs/env/tcharMinGW.h +4 -0
  82. data/source/bzs/example/changeSchema.cpp +22 -17
  83. data/source/bzs/example/queryData.cpp +4 -0
  84. data/source/bzs/netsvc/client/iconnection.h +3 -1
  85. data/source/bzs/netsvc/client/tcpClient.h +10 -3
  86. data/source/bzs/rtl/stringBuffers.cpp +7 -0
  87. data/source/bzs/test/tdclatl/bench_query_atl.js +6 -0
  88. data/source/bzs/test/tdclatl/bench_tdclatl.js +8 -1
  89. data/source/bzs/test/tdclatl/test_query_atl.js +22 -2
  90. data/source/bzs/test/tdclatl/test_v3.js +1017 -0
  91. data/source/bzs/test/tdclphp/transactd_Test.php +55 -21
  92. data/source/bzs/test/tdclphp/transactd_datetime_Test.php +0 -5
  93. data/source/bzs/test/tdclphp/transactd_pool_Test.php +2 -0
  94. data/source/bzs/test/tdclphp/transactd_v3_Test.php +743 -0
  95. data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +0 -5
  96. data/source/bzs/test/tdclrb/transactd_pool_spec.rb +2 -0
  97. data/source/bzs/test/tdclrb/transactd_spec.rb +39 -16
  98. data/source/bzs/test/tdclrb/transactd_v3_spec.rb +748 -0
  99. data/source/bzs/test/transactdBench/transactdBench.cpp +55 -58
  100. data/source/bzs/test/transactdBench/transactdBench2.cpp +1 -3
  101. data/source/bzs/test/trdclengn/testField.h +3305 -0
  102. data/source/bzs/test/trdclengn/test_tdclcpp_v3.cpp +1050 -0
  103. data/source/bzs/test/trdclengn/test_trdclengn.cpp +112 -190
  104. data/source/bzs/test/trdclengn/testbase.h +137 -0
  105. data/source/global/ormsrcgen/srcgen.cpp +23 -12
  106. data/source/global/ormsrcgen/template/ormDataClass_template.h +2 -0
  107. data/source/global/querystmts/querystmts.cpp +2 -3
  108. data/source/global/tdclatl/Bitset.cpp +38 -0
  109. data/source/global/tdclatl/Bitset.h +63 -0
  110. data/source/global/tdclatl/Database.cpp +59 -18
  111. data/source/global/tdclatl/Database.h +7 -4
  112. data/source/global/tdclatl/DbDef.cpp +6 -6
  113. data/source/global/tdclatl/DbDef.h +2 -1
  114. data/source/global/tdclatl/Field.cpp +112 -0
  115. data/source/global/tdclatl/Field.h +19 -5
  116. data/source/global/tdclatl/FieldDef.cpp +137 -16
  117. data/source/global/tdclatl/FieldDef.h +18 -2
  118. data/source/global/tdclatl/FieldDefs.cpp +54 -1
  119. data/source/global/tdclatl/FieldDefs.h +3 -0
  120. data/source/global/tdclatl/GroupQuery.cpp +8 -8
  121. data/source/global/tdclatl/QueryBase.cpp +65 -0
  122. data/source/global/tdclatl/QueryBase.h +10 -0
  123. data/source/global/tdclatl/Record.cpp +33 -2
  124. data/source/global/tdclatl/Record.h +3 -1
  125. data/source/global/tdclatl/RecordsetQuery.cpp +42 -0
  126. data/source/global/tdclatl/RecordsetQuery.h +8 -0
  127. data/source/global/tdclatl/Table.cpp +127 -3
  128. data/source/global/tdclatl/Table.h +10 -1
  129. data/source/global/tdclatl/TableDef.cpp +41 -8
  130. data/source/global/tdclatl/TableDef.h +7 -2
  131. data/source/global/tdclatl/activeTable.cpp +40 -71
  132. data/source/global/tdclatl/resource.h +0 -0
  133. data/source/global/tdclatl/tdclatl.idl +222 -28
  134. data/source/linux/tchar.h +100 -96
  135. data/transactd.gemspec +2 -2
  136. metadata +13 -11
  137. data/BUILD_UNIX-JA.md +0 -161
  138. data/BUILD_WIN-JA.md +0 -326
  139. data/README_ORMSRCGEN-JA.md +0 -115
  140. data/README_ORMSRCGEN.md +0 -118
  141. data/RELEASE_NOTE-JA.md +0 -356
  142. data/RELEASE_NOTE.md +0 -360
  143. data/bin/common/tdclc_32_2_4.dll +0 -0
  144. data/bin/common/tdclc_64_2_4.dll +0 -0
  145. data/source/bzs/test/trdclengn/test_blob.cpp +0 -375
@@ -25,6 +25,7 @@
25
25
  #include "PreparedQuery.h"
26
26
  #include <bzs/db/protocol/tdap/client/fields.h>
27
27
  #include "Bookmark.h"
28
+ #include "Bitset.h"
28
29
 
29
30
  using namespace bzs::db::protocol::tdap;
30
31
 
@@ -48,8 +49,10 @@ short CTableTd::GetFieldNum(VARIANT* Index)
48
49
  short index = -1;
49
50
  if (Index->vt == VT_BSTR)
50
51
  index = m_tb->fieldNumByName(Index->bstrVal);
51
- else if ((Index->vt == VT_I2) || (Index->vt == VT_I4))
52
+ else if (Index->vt == VT_I2)
52
53
  index = Index->iVal;
54
+ else if (Index->vt == VT_I4)
55
+ index = (short)Index->lVal;
53
56
  return index;
54
57
  }
55
58
 
@@ -90,6 +93,100 @@ STDMETHODIMP CTableTd::put_Vlng(VARIANT Index, int Value)
90
93
  return S_OK;
91
94
  }
92
95
 
96
+ STDMETHODIMP CTableTd::SetFVNull(VARIANT Index, VARIANT_BOOL Value)
97
+ {
98
+ short index = GetFieldNum(&Index);
99
+ if (index < 0)
100
+ return Error("Invalid index", IID_ITable);
101
+ m_tb->setFVNull(index, Value != 0);
102
+ return S_OK;
103
+ }
104
+
105
+ STDMETHODIMP CTableTd::GetFVNull(VARIANT Index, VARIANT_BOOL* Value)
106
+ {
107
+ short index = GetFieldNum(&Index);
108
+ if (index < 0)
109
+ return Error("Invalid index", IID_ITable);
110
+ *Value = m_tb->getFVNull(index);
111
+ return S_OK;
112
+ }
113
+
114
+
115
+ STDMETHODIMP CTableTd::GetFVint(VARIANT Index, int* Value)
116
+ {
117
+ short index = GetFieldNum(&Index);
118
+ if (index < 0)
119
+ return Error("Invalid index", IID_ITable);
120
+ *Value = m_tb->getFVint(index);
121
+ return S_OK;
122
+ }
123
+
124
+ STDMETHODIMP CTableTd::GetFV64(VARIANT Index, __int64* Value)
125
+ {
126
+ short index = GetFieldNum(&Index);
127
+ if (index < 0)
128
+ return Error("Invalid index", IID_ITable);
129
+ *Value = m_tb->getFV64(index);
130
+ return S_OK;
131
+ }
132
+
133
+ STDMETHODIMP CTableTd::GetFVdbl(VARIANT Index, double* Value)
134
+ {
135
+ short index = GetFieldNum(&Index);
136
+ if (index < 0)
137
+ return Error("Invalid index", IID_ITable);
138
+ *Value = m_tb->getFVdbl(index);
139
+ return S_OK;
140
+ }
141
+
142
+ STDMETHODIMP CTableTd::GetFVstr(VARIANT Index, BSTR* Value)
143
+ {
144
+ short index = GetFieldNum(&Index);
145
+ if (index < 0)
146
+ return Error("Invalid index", IID_ITable);
147
+
148
+ *Value = ::SysAllocString(m_tb->getFVstr(index));
149
+ return S_OK;
150
+ }
151
+
152
+ STDMETHODIMP CTableTd::SetFV(VARIANT Index, VARIANT Value)
153
+ {
154
+ short index = GetFieldNum(&Index);
155
+ if (index < 0)
156
+ return Error("Invalid index", IID_ITable);
157
+
158
+ if (Value.vt == VT_BSTR)
159
+ m_tb->setFV(index, Value.bstrVal);
160
+ else if (Value.vt == VT_R4)
161
+ m_tb->setFV(index, Value.fltVal);
162
+ else if (Value.vt == VT_R8)
163
+ m_tb->setFV(index, Value.dblVal);
164
+ else if (Value.vt == VT_I2)
165
+ m_tb->setFV(index, Value.iVal);
166
+ else if (Value.vt == VT_I4 || Value.vt == VT_INT)
167
+ m_tb->setFV(index, Value.lVal);
168
+ else if (Value.vt == VT_I8)
169
+ m_tb->setFV(index, Value.llVal);
170
+ else if (Value.vt == VT_NULL)
171
+ m_tb->setFV(index, (wchar_t*)NULL);
172
+ else if ((Value.vt == VT_DISPATCH) && Value.pdispVal)
173
+ {
174
+ CBitset* b = dynamic_cast<CBitset*>(Value.pdispVal);
175
+ if (b)
176
+ m_tb->setFV(index, b->m_bitset.internalValue());
177
+ }
178
+ else
179
+ {
180
+ VariantChangeType( &Value, &Value, 0, VT_BSTR );
181
+ if (Value.bstrVal[0])
182
+ m_tb->setFV(index, Value.bstrVal);
183
+ else
184
+ m_tb->setFV(index, L"");
185
+ }
186
+ return S_OK;
187
+ }
188
+
189
+
93
190
  STDMETHODIMP CTableTd::get_V64(VARIANT Index, __int64* Value)
94
191
  {
95
192
  short index = GetFieldNum(&Index);
@@ -182,9 +279,11 @@ STDMETHODIMP CTableTd::Delete(VARIANT_BOOL inkey)
182
279
  return S_OK;
183
280
  }
184
281
 
185
- STDMETHODIMP CTableTd::ClearBuffer()
282
+ STDMETHODIMP CTableTd::ClearBuffer(eNullReset resetType)
186
283
  {
187
- m_tb->clearBuffer();
284
+
285
+ m_tb->clearBuffer((resetType == defaultNull) ?
286
+ client::table::defaultNull : client::table::clearNull);
188
287
  return S_OK;
189
288
  }
190
289
 
@@ -728,6 +827,31 @@ STDMETHODIMP CTableTd::get_Bookmarks(long index, IBookmark** retVal)
728
827
  return S_OK;
729
828
  }
730
829
 
830
+ STDMETHODIMP CTableTd::SetTimestampMode(eTimeStampMode mode)
831
+ {
832
+ m_tb->setTimestampMode((int)mode);
833
+ return S_OK;
834
+ }
835
+
836
+ STDMETHODIMP CTableTd::GetFVbits(VARIANT Index, IBitset** Value)
837
+ {
838
+ short index = GetFieldNum(&Index);
839
+ if (index < 0)
840
+ return Error("Invalid index", IID_ITable);
841
+
842
+ CComObject<CBitset>* b;
843
+ CComObject<CBitset>::CreateInstance(&b);
844
+ if (!b)
845
+ return Error("CreateInstance Bitset", IID_ITable);
846
+ b->m_bitset = bzs::db::protocol::tdap::bitset(m_tb->getFV64(index));
847
+ CBitset* bi;
848
+ b->QueryInterface(IID_IBitset, (void**)&bi);
849
+ _ASSERTE(bi);
850
+ *Value = bi;
851
+ return S_OK;
852
+ }
853
+
854
+
731
855
  void __stdcall onRecordCount(bzs::db::protocol::tdap::client::table* tb,
732
856
  int count, bool& cancel)
733
857
  {
@@ -85,7 +85,7 @@ public:
85
85
  STDMETHOD(get_TableDef)(ITableDef** Value);
86
86
  STDMETHOD(Insert)(eUpdateType ncc);
87
87
  STDMETHOD(Delete)(VARIANT_BOOL inkey);
88
- STDMETHOD(ClearBuffer)();
88
+ STDMETHOD(ClearBuffer)(eNullReset resetType);
89
89
  STDMETHOD(Close)();
90
90
  STDMETHOD(SeekFirst)(eLockType lockBias);
91
91
  STDMETHOD(SeekLast)(eLockType lockBias);
@@ -165,5 +165,14 @@ public:
165
165
  STDMETHOD(get_LastFindDirection)(short* Value);
166
166
  STDMETHOD(get_BookmarkLen)(unsigned short* Value);
167
167
  STDMETHOD(get_Bookmarks)(long index, IBookmark** Value);
168
+ STDMETHOD(GetFVNull)(VARIANT Index, VARIANT_BOOL* Value);
169
+ STDMETHOD(SetFVNull)(VARIANT Index, VARIANT_BOOL Value);
170
+ STDMETHOD(GetFVint)(VARIANT Index, int* Value);
171
+ STDMETHOD(GetFV64)(VARIANT Index, __int64* Value);
172
+ STDMETHOD(GetFVdbl)(VARIANT Index, double* Value);
173
+ STDMETHOD(GetFVstr)(VARIANT Index, BSTR* Value);
174
+ STDMETHOD(SetFV)(VARIANT Index, VARIANT Value);
175
+ STDMETHOD(SetTimestampMode)(eTimeStampMode mode);
176
+ STDMETHOD(GetFVbits)(VARIANT Index, IBitset** Value);
168
177
 
169
178
  };
@@ -276,15 +276,9 @@ STDMETHODIMP CTableDef::put_FixedRecordLen(unsigned short Value)
276
276
  return S_OK;
277
277
  }
278
278
 
279
- STDMETHODIMP CTableDef::get_MaxRecordLen(unsigned short* Value)
279
+ STDMETHODIMP CTableDef::get_RecordLen(unsigned short* Value)
280
280
  {
281
- *Value = (*m_tabledefPtr)->maxRecordLen;
282
- return S_OK;
283
- }
284
-
285
- STDMETHODIMP CTableDef::put_MaxRecordLen(unsigned short Value)
286
- {
287
- (*m_tabledefPtr)->maxRecordLen = Value;
281
+ *Value = (*m_tabledefPtr)->recordlen();
288
282
  return S_OK;
289
283
  }
290
284
 
@@ -305,3 +299,42 @@ STDMETHODIMP CTableDef::get_Version(unsigned short* Value)
305
299
  *Value = (*m_tabledefPtr)->version;
306
300
  return S_OK;
307
301
  }
302
+
303
+ STDMETHODIMP CTableDef::get_FieldNumByName(BSTR Name, short* Value)
304
+ {
305
+ *Value = (*m_tabledefPtr)->fieldNumByName(Name);
306
+ return S_OK;
307
+ }
308
+
309
+ STDMETHODIMP CTableDef::get_Nullfields(short* Value)
310
+ {
311
+ *Value = (*m_tabledefPtr)->nullfields();
312
+ return S_OK;
313
+ }
314
+
315
+ STDMETHODIMP CTableDef::get_InUse(short* Value)
316
+ {
317
+ *Value = (*m_tabledefPtr)->inUse();
318
+ return S_OK;
319
+ }
320
+
321
+ STDMETHODIMP CTableDef::get_MysqlNullMode(VARIANT_BOOL* Value)
322
+ {
323
+ *Value = (*m_tabledefPtr)->isMysqlNullMode();
324
+ return S_OK;
325
+ }
326
+
327
+ STDMETHODIMP CTableDef::get_Size(int* Value)
328
+ {
329
+ *Value = (*m_tabledefPtr)->size();
330
+ return S_OK;
331
+ }
332
+
333
+ STDMETHODIMP CTableDef::SetValidationTarget(VARIANT_BOOL isMariadb, short srvMinorVersion)
334
+ {
335
+ (*m_tabledefPtr)->setValidationTarget(isMariadb, (uchar_td)srvMinorVersion);
336
+ return S_OK;
337
+ }
338
+
339
+
340
+
@@ -80,9 +80,14 @@ public:
80
80
  STDMETHOD(put_PrimaryKeyNum)(unsigned char Value);
81
81
  STDMETHOD(get_FixedRecordLen)(unsigned short* Value);
82
82
  STDMETHOD(put_FixedRecordLen)(unsigned short Value);
83
- STDMETHOD(get_MaxRecordLen)(unsigned short* Value);
84
- STDMETHOD(put_MaxRecordLen)(unsigned short Value);
83
+ STDMETHOD(get_RecordLen)(unsigned short* Value);
85
84
  STDMETHOD(get_SchemaCodePage)(unsigned int* Value);
86
85
  STDMETHOD(put_SchemaCodePage)(unsigned int Value);
87
86
  STDMETHOD(get_Version)(unsigned short* Value);
87
+ STDMETHOD(get_FieldNumByName)(BSTR Name, short* Value);
88
+ STDMETHOD(get_Nullfields)(short* Value);
89
+ STDMETHOD(get_InUse)(short* Value);
90
+ STDMETHOD(get_MysqlNullMode)(VARIANT_BOOL* Value);
91
+ STDMETHOD(get_Size)(int* Value);
92
+ STDMETHOD(SetValidationTarget)(VARIANT_BOOL isMariadb, short srvMinorVersion);
88
93
  };
@@ -26,6 +26,7 @@
26
26
  #include "PooledDbManager.h"
27
27
  #include "PreparedQuery.h"
28
28
  #include "Table.h"
29
+ #include "Bitset.h"
29
30
 
30
31
  using namespace bzs::db::protocol::tdap::client;
31
32
  using namespace bzs::db::protocol::tdap;
@@ -105,85 +106,53 @@ STDMETHODIMP CActiveTable::Index(short Value, IActiveTable** retVal)
105
106
  }
106
107
  }
107
108
 
109
+ wchar_t* convWCHAR(VARIANT& Value)
110
+ {
111
+ wchar_t* v = NULL;
112
+
113
+ if ((Value.vt == VT_DISPATCH) && Value.pdispVal)
114
+ {
115
+ CBitset* b = dynamic_cast<CBitset*>(Value.pdispVal);
116
+ if (b)
117
+ {
118
+ VariantInit(&Value);
119
+ Value.vt = VT_UI8;
120
+ Value.ullVal = b->m_bitset.internalValue();
121
+ }
122
+ }
123
+ if (Value.vt == VT_NULL)
124
+ v = NULL;
125
+ else if (Value.vt != VT_BSTR)
126
+ {
127
+ VariantChangeType(&Value, &Value, 0, VT_BSTR);
128
+ v = Value.bstrVal;
129
+ }
130
+ else
131
+ v = Value.bstrVal;
132
+
133
+ return v;
134
+
135
+ }
136
+
108
137
  STDMETHODIMP CActiveTable::KeyValue(VARIANT Value0, VARIANT Value1,
109
138
  VARIANT Value2, VARIANT Value3,
110
139
  VARIANT Value4, VARIANT Value5,
111
140
  VARIANT Value6, VARIANT Value7,
112
141
  IActiveTable** retVal)
113
142
  {
114
-
115
143
  try
116
144
  {
117
- if (Value0.vt != VT_BSTR)
118
- VariantChangeType(&Value0, &Value0, 0, VT_BSTR);
119
-
120
- if (Value1.vt != VT_BSTR)
121
- VariantChangeType(&Value1, &Value1, 0, VT_BSTR);
122
- if (!Value1.bstrVal || !Value1.bstrVal[0])
123
- {
124
- m_at->keyValue(Value0.bstrVal);
125
- setResult(retVal);
126
- return S_OK;
127
- }
128
-
129
- if (Value2.vt != VT_BSTR)
130
- VariantChangeType(&Value2, &Value2, 0, VT_BSTR);
131
- if (!Value2.bstrVal || !Value2.bstrVal[0])
132
- {
133
- m_at->keyValue(Value0.bstrVal, Value1.bstrVal);
134
- setResult(retVal);
135
- return S_OK;
136
- }
137
- if (Value3.vt != VT_BSTR)
138
- VariantChangeType(&Value3, &Value3, 0, VT_BSTR);
139
- if (!Value3.bstrVal || !Value3.bstrVal[0])
140
- {
141
- m_at->keyValue(Value0.bstrVal, Value1.bstrVal, Value2.bstrVal);
142
- setResult(retVal);
143
- return S_OK;
144
- }
145
- if (Value4.vt != VT_BSTR)
146
- VariantChangeType(&Value4, &Value4, 0, VT_BSTR);
147
- if (!Value4.bstrVal || !Value4.bstrVal[0])
148
- {
149
- m_at->keyValue(Value0.bstrVal, Value1.bstrVal, Value2.bstrVal,
150
- Value3.bstrVal);
151
- setResult(retVal);
152
- return S_OK;
153
- }
154
-
155
- if (Value5.vt != VT_BSTR)
156
- VariantChangeType(&Value5, &Value5, 0, VT_BSTR);
157
- if (!Value5.bstrVal || !Value5.bstrVal[0])
158
- {
159
- m_at->keyValue(Value0.bstrVal, Value1.bstrVal, Value2.bstrVal,
160
- Value3.bstrVal, Value4.bstrVal);
161
- setResult(retVal);
162
- return S_OK;
163
- }
164
- if (Value6.vt != VT_BSTR)
165
- VariantChangeType(&Value6, &Value6, 0, VT_BSTR);
166
- if (!Value6.bstrVal || !Value6.bstrVal[0])
167
- {
168
- m_at->keyValue(Value0.bstrVal, Value1.bstrVal, Value2.bstrVal,
169
- Value3.bstrVal, Value4.bstrVal, Value5.bstrVal);
170
- setResult(retVal);
171
- return S_OK;
172
- }
173
-
174
- if (Value7.vt != VT_BSTR)
175
- VariantChangeType(&Value7, &Value7, 0, VT_BSTR);
176
- if (!Value7.bstrVal || !Value7.bstrVal[0])
177
- {
178
- m_at->keyValue(Value0.bstrVal, Value1.bstrVal, Value2.bstrVal,
179
- Value3.bstrVal, Value4.bstrVal, Value5.bstrVal,
180
- Value6.bstrVal);
181
- setResult(retVal);
182
- return S_OK;
183
- }
184
- m_at->keyValue(Value0.bstrVal, Value1.bstrVal, Value2.bstrVal,
185
- Value3.bstrVal, Value4.bstrVal, Value5.bstrVal,
186
- Value6.bstrVal, Value7.bstrVal);
145
+ wchar_t* v[8] = {NULL};
146
+ v[0] = convWCHAR(Value0);
147
+ v[1] = convWCHAR(Value1);
148
+ v[2] = convWCHAR(Value2);
149
+ v[3] = convWCHAR(Value3);
150
+ v[4] = convWCHAR(Value4);
151
+ v[5] = convWCHAR(Value5);
152
+ v[6] = convWCHAR(Value6);
153
+ v[7] = convWCHAR(Value7);
154
+
155
+ m_at->keyValue(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7]);
187
156
  setResult(retVal);
188
157
  return S_OK;
189
158
  }
Binary file