transactd 2.4.5 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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