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
@@ -49,14 +49,28 @@ public:
49
49
  void FinalRelease() {}
50
50
 
51
51
  public:
52
- STDMETHOD(get_Text)(BSTR* Value);
53
- STDMETHOD(get_Vlng)(int* Value);
54
52
  STDMETHOD(put_Text)(BSTR Value);
53
+ STDMETHOD(get_Text)(BSTR* Value);
55
54
  STDMETHOD(put_Vlng)(int Value);
56
- STDMETHOD(get_V64)(__int64* Value);
55
+ STDMETHOD(get_Vlng)(int* Value);
57
56
  STDMETHOD(put_V64)(__int64 Value);
58
- STDMETHOD(get_Vbin)(BSTR* Value);
57
+ STDMETHOD(get_V64)(__int64* Value);
58
+ STDMETHOD(put_Vdbl)(double Value);
59
59
  STDMETHOD(get_Vdbl)(double* Value);
60
60
  STDMETHOD(put_Vbin)(BSTR Value);
61
- STDMETHOD(put_Vdbl)(double Value);
61
+ STDMETHOD(get_Vbin)(BSTR* Value);
62
+
63
+ STDMETHOD(IsNull)(VARIANT_BOOL* Value);
64
+ STDMETHOD(SetNull)(VARIANT_BOOL Value);
65
+ STDMETHOD(SetValue)(VARIANT Value);
66
+ STDMETHOD(SetBin)(BSTR Value);
67
+ STDMETHOD(I)(int* Value);
68
+ STDMETHOD(I64)(__int64* Value);
69
+ STDMETHOD(D)(double* Value);
70
+ STDMETHOD(Bin)(BSTR* Value);
71
+ STDMETHOD(Str)(BSTR* Value);
72
+ STDMETHOD(get_Type)(short* Value);
73
+ STDMETHOD(get_Len)(short* Value);
74
+ STDMETHOD(GetBits)(IBitset** Value);
75
+
62
76
  };
@@ -19,6 +19,8 @@
19
19
  #include "stdafx.h"
20
20
  #include "FieldDef.h"
21
21
  #include "Flags.h"
22
+ #include "Bitset.h"
23
+
22
24
  STDMETHODIMP CFieldDef::InterfaceSupportsErrorInfo(REFIID riid)
23
25
  {
24
26
  static const IID* const arr[] =
@@ -122,20 +124,6 @@ STDMETHODIMP CFieldDef::put_Min(double Value)
122
124
  return S_OK;
123
125
  }
124
126
 
125
- STDMETHODIMP CFieldDef::get_DefValue(double* Value)
126
- {
127
- *Value = const_fielddef()->defValue;
128
- return S_OK;
129
- }
130
-
131
- STDMETHODIMP CFieldDef::put_DefValue(double Value)
132
- {
133
- if (!isWritabale())
134
- return write_error();
135
- fielddef()->defValue = Value;
136
- return S_OK;
137
- }
138
-
139
127
  STDMETHODIMP CFieldDef::get_LookTable(unsigned char* Value)
140
128
  {
141
129
  *Value = const_fielddef()->lookTable;
@@ -299,12 +287,145 @@ STDMETHODIMP CFieldDef::SetPadCharSettings(VARIANT_BOOL set, VARIANT_BOOL trim)
299
287
 
300
288
  STDMETHODIMP CFieldDef::get_UsePadChar(VARIANT_BOOL* Value)
301
289
  {
302
- *Value = fielddef()->usePadChar();
290
+ *Value = fielddef()->isUsePadChar();
303
291
  return S_OK;
304
292
  }
305
293
 
306
294
  STDMETHODIMP CFieldDef::get_TrimPadChar(VARIANT_BOOL* Value)
307
295
  {
308
- *Value = fielddef()->trimPadChar();
296
+ *Value = fielddef()->isTrimPadChar();
309
297
  return S_OK;
310
298
  }
299
+
300
+ STDMETHODIMP CFieldDef::put_DefaultValue(VARIANT Value)
301
+ {
302
+ if (Value.vt == VT_BSTR)
303
+ fielddef()->setDefaultValue(Value.bstrVal);
304
+ else if (Value.vt == VT_R4)
305
+ fielddef()->setDefaultValue(Value.fltVal);
306
+ else if (Value.vt == VT_R8)
307
+ fielddef()->setDefaultValue(Value.dblVal);
308
+ else if (Value.vt == VT_I2)
309
+ fielddef()->setDefaultValue((__int64)Value.iVal);
310
+ else if (Value.vt == VT_I4 || Value.vt == VT_INT)
311
+ fielddef()->setDefaultValue((__int64)Value.lVal);
312
+ else if (Value.vt == VT_I8)
313
+ fielddef()->setDefaultValue((__int64)Value.llVal);
314
+ else if ((Value.vt == VT_DISPATCH) && Value.pdispVal)
315
+ {
316
+ CBitset* b = dynamic_cast<CBitset*>(Value.pdispVal);
317
+ if (b)
318
+ fielddef()->setDefaultValue(b->m_bitset.internalValue());
319
+ else
320
+ return Error("FieldDef DefaultValue param", IID_IFieldDef);
321
+ }
322
+ else
323
+ {
324
+ VariantChangeType( &Value, &Value, 0, VT_BSTR );
325
+ if (Value.bstrVal[0])
326
+ fielddef()->setDefaultValue(Value.bstrVal);
327
+ }
328
+ return S_OK;
329
+ }
330
+
331
+ STDMETHODIMP CFieldDef::get_DefaultValue(VARIANT* Value)
332
+ {
333
+ CComBSTR ret;
334
+ ret = const_fielddef()->defaultValue_str();
335
+
336
+ VariantClear(Value);
337
+ Value->vt = VT_BSTR;
338
+ Value->bstrVal = ret.Copy();
339
+
340
+ return S_OK;
341
+ }
342
+
343
+ STDMETHODIMP CFieldDef::get_PadCharType(VARIANT_BOOL* Value)
344
+ {
345
+ *Value = const_fielddef()->isPadCharType();
346
+ return S_OK;
347
+ }
348
+
349
+ STDMETHODIMP CFieldDef::get_DateTimeType(VARIANT_BOOL* Value)
350
+ {
351
+ *Value = const_fielddef()->isDateTimeType();
352
+ return S_OK;
353
+ }
354
+
355
+ STDMETHODIMP CFieldDef::get_ValidCharNum(VARIANT_BOOL* Value)
356
+ {
357
+ *Value = const_fielddef()->isValidCharNum();
358
+ return S_OK;
359
+ }
360
+
361
+ STDMETHODIMP CFieldDef::get_Nullable(VARIANT_BOOL* Value)
362
+ {
363
+ *Value = const_fielddef()->isNullable();
364
+ return S_OK;
365
+ }
366
+
367
+ STDMETHODIMP CFieldDef::SetNullable(VARIANT_BOOL Value, VARIANT_BOOL DefaultNull)
368
+ {
369
+ fielddef()->setNullable(Value != 0, DefaultNull != 0);
370
+ return S_OK;
371
+ }
372
+
373
+ STDMETHODIMP CFieldDef::put_TimeStampOnUpdate(VARIANT_BOOL Value)
374
+ {
375
+ fielddef()->setTimeStampOnUpdate(Value != 0);
376
+ return S_OK;
377
+ }
378
+
379
+ STDMETHODIMP CFieldDef::get_TimeStampOnUpdate(VARIANT_BOOL* Value)
380
+ {
381
+ *Value = const_fielddef()->isTimeStampOnUpdate();
382
+ return S_OK;
383
+ }
384
+
385
+ STDMETHODIMP CFieldDef::get_DefaultNull(VARIANT_BOOL* Value)
386
+ {
387
+ *Value = const_fielddef()->isDefaultNull();
388
+ return S_OK;
389
+ }
390
+
391
+ STDMETHODIMP CFieldDef::put_Digits(short Value)
392
+ {
393
+ fielddef()->digits = Value;
394
+ return S_OK;
395
+ }
396
+
397
+ STDMETHODIMP CFieldDef::get_Digits(short* Value)
398
+ {
399
+ *Value = fielddef()->digits;
400
+ return S_OK;
401
+ }
402
+
403
+ STDMETHODIMP CFieldDef::get_IsIntegerType(VARIANT_BOOL* Value)
404
+ {
405
+ *Value = fielddef()->isIntegerType();
406
+ return S_OK;
407
+ }
408
+
409
+ STDMETHODIMP CFieldDef::get_IsNumericType(VARIANT_BOOL* Value)
410
+ {
411
+ *Value = fielddef()->isNumericType();
412
+ return S_OK;
413
+ }
414
+
415
+ STDMETHODIMP CFieldDef::get_IsDateTimeType(VARIANT_BOOL* Value)
416
+ {
417
+ *Value = fielddef()->isDateTimeType();
418
+ return S_OK;
419
+ }
420
+
421
+ STDMETHODIMP CFieldDef::SetDecimalDigits(int Digits, int Decimals)
422
+ {
423
+ fielddef()->setDecimalDigits(Digits, Decimals);
424
+ return S_OK;
425
+ }
426
+
427
+
428
+
429
+
430
+
431
+
@@ -77,14 +77,12 @@ public:
77
77
  STDMETHOD(get_Decimals)(unsigned char* Value);
78
78
  STDMETHOD(get_Max)(double* Value);
79
79
  STDMETHOD(get_Min)(double* Value);
80
- STDMETHOD(get_DefValue)(double* Value);
81
80
  STDMETHOD(get_LookTable)(unsigned char* Value);
82
81
  STDMETHOD(get_LookField)(unsigned char* Value);
83
82
  STDMETHOD(get_LookViewField)(short Index, unsigned char* Value);
84
83
  STDMETHOD(get_EnableFlags)(IFlags** Value);
85
84
 
86
85
  STDMETHOD(put_Decimals)(unsigned char Value);
87
- STDMETHOD(put_DefValue)(double Value);
88
86
  STDMETHOD(put_EnableFlags)(IFlags* Value);
89
87
  STDMETHOD(put_Len)(short Value);
90
88
  STDMETHOD(put_LookField)(unsigned char Value);
@@ -110,5 +108,23 @@ public:
110
108
  STDMETHOD(SetPadCharSettings)(VARIANT_BOOL set, VARIANT_BOOL trim);
111
109
  STDMETHOD(get_UsePadChar)(VARIANT_BOOL* Value);
112
110
  STDMETHOD(get_TrimPadChar)(VARIANT_BOOL* Value);
111
+
112
+ STDMETHOD(put_DefaultValue)(VARIANT Value);
113
+ STDMETHOD(get_DefaultValue)(VARIANT* Value);
114
+
115
+ STDMETHOD(get_PadCharType)(VARIANT_BOOL* Value);
116
+ STDMETHOD(get_DateTimeType)(VARIANT_BOOL* Value);
117
+ STDMETHOD(get_ValidCharNum)(VARIANT_BOOL* Value);
118
+ STDMETHOD(get_Nullable)(VARIANT_BOOL* Value);
119
+ STDMETHOD(SetNullable)(VARIANT_BOOL Value, VARIANT_BOOL DefaultNull);
120
+ STDMETHOD(put_TimeStampOnUpdate)(VARIANT_BOOL Value);
121
+ STDMETHOD(get_TimeStampOnUpdate)(VARIANT_BOOL* Value);
122
+ STDMETHOD(get_DefaultNull)(VARIANT_BOOL* Value);
123
+ STDMETHOD(put_Digits)(short Value);
124
+ STDMETHOD(get_Digits)(short* Value);
125
+ STDMETHOD(get_IsIntegerType)(VARIANT_BOOL* Value);
126
+ STDMETHOD(get_IsNumericType)(VARIANT_BOOL* Value);
127
+ STDMETHOD(get_IsDateTimeType)(VARIANT_BOOL* Value);
128
+ STDMETHOD(SetDecimalDigits)(int Digits, int Decimals);
113
129
 
114
130
  };
@@ -19,6 +19,9 @@
19
19
  #include "stdafx.h"
20
20
  #include "FieldDefs.h"
21
21
  #include "FieldDef.h"
22
+ #include "TableDef.h"
23
+ #include "Table.h"
24
+
22
25
  STDMETHODIMP CFieldDefs::InterfaceSupportsErrorInfo(REFIID riid)
23
26
  {
24
27
  static const IID* const arr[] =
@@ -45,8 +48,10 @@ short CFieldDefs::GetFieldNum(VARIANT* Index)
45
48
  short index = -1;
46
49
  if (Index->vt == VT_BSTR)
47
50
  index = m_fds->indexByName(Index->bstrVal);
48
- else if ((Index->vt == VT_I2) || (Index->vt == VT_I4))
51
+ else if (Index->vt == VT_I2)
49
52
  index = Index->iVal;
53
+ else if (Index->vt == VT_I4)
54
+ index = (short)Index->lVal;
50
55
  return index;
51
56
  }
52
57
 
@@ -81,3 +86,51 @@ STDMETHODIMP CFieldDefs::get_Size(short* retVal)
81
86
  *retVal = (short)m_fds->size();
82
87
  return S_OK;
83
88
  }
89
+
90
+ /*
91
+ STDMETHODIMP CFieldDefs::AddAllFileds(ITableDef* Def)
92
+ {
93
+ try
94
+ {
95
+ if (Def)
96
+ {
97
+ CTableDef* def = dynamic_cast<CTableDef*>(Def);
98
+ if (def)
99
+ {
100
+ const_cast<bzs::db::protocol::tdap::client::fielddefs*>(m_fds)
101
+ ->addAllFileds(*(def->m_tabledefPtr));
102
+ return S_OK;
103
+ }
104
+ }
105
+ return Error("Invalid param Def", IID_IFieldDefs);
106
+
107
+ }
108
+ catch (bzs::rtl::exception& e)
109
+ {
110
+ return Error((*bzs::rtl::getMsg(e)).c_str(), IID_IFieldDefs);
111
+ }
112
+ }
113
+
114
+ STDMETHODIMP CFieldDefs::AddSelectedFields(ITable* Table)
115
+ {
116
+ try
117
+ {
118
+ if (Table)
119
+ {
120
+ CTableTd* tb = dynamic_cast<CTableTd*>(Table);
121
+ if (tb)
122
+ {
123
+ const_cast<bzs::db::protocol::tdap::client::fielddefs*>(m_fds)
124
+ ->addSelectedFields(tb->m_tb.get());
125
+ return S_OK;
126
+ }
127
+ }
128
+ return Error("Invalid param Def", IID_IFieldDefs);
129
+
130
+ }
131
+ catch (bzs::rtl::exception& e)
132
+ {
133
+ return Error((*bzs::rtl::getMsg(e)).c_str(), IID_IFieldDefs);
134
+ }
135
+
136
+ }*/
@@ -57,4 +57,7 @@ public:
57
57
  STDMETHOD(IndexByName)(BSTR Name, short* retVal);
58
58
  STDMETHOD(get_FieldDef)(VARIANT Name, IFieldDef** retVal);
59
59
  STDMETHOD(get_Size)(short* retVal);
60
+ //STDMETHOD(AddAllFileds)(ITableDef* Def);
61
+ //STDMETHOD(AddSelectedFields)(ITable* Table);
62
+
60
63
  };
@@ -92,25 +92,25 @@ STDMETHODIMP CGroupQuery::AddFunction(eGroupFunc func, VARIANT targetNames,
92
92
  if (targetNames.vt == VT_DISPATCH)
93
93
  fn = dynamic_cast<CFieldNames*>(targetNames.pdispVal);
94
94
 
95
- if ((func != fcount) && !fn)
95
+ if ((func != f_count) && !fn)
96
96
  return Error("Invalid targetNames", IID_IGroupQuery);
97
97
  if (fn)
98
98
  fns = fn->m_fnsPtr;
99
99
  boost::shared_ptr<groupFuncBase> f;
100
100
 
101
- if (func == fsum)
101
+ if (func == f_sum)
102
102
  f.reset(sum::create(*fns, resultName), boost::bind(&sum::release, _1));
103
- else if (func == fmin)
103
+ else if (func == f_min)
104
104
  f.reset(min::create(*fns, resultName), boost::bind(&min::release, _1));
105
- else if (func == fmax)
105
+ else if (func == f_max)
106
106
  f.reset(max::create(*fns, resultName), boost::bind(&max::release, _1));
107
- else if (func == favg)
107
+ else if (func == f_avg)
108
108
  f.reset(avg::create(*fns, resultName), boost::bind(&avg::release, _1));
109
- else if (func == ffirst)
109
+ else if (func == f_first)
110
110
  f.reset(first::create(*fns, resultName), boost::bind(&first::release, _1));
111
- else if (func == flast)
111
+ else if (func == f_last)
112
112
  f.reset(last::create(*fns, resultName), boost::bind(&last::release, _1));
113
- else if (func == fcount)
113
+ else if (func == f_count)
114
114
  {
115
115
  if (resultName[0])
116
116
  f.reset(count::create(resultName), boost::bind(&count::release, _1));
@@ -367,3 +367,68 @@ STDMETHODIMP CQueryBase::IsSeekByBookmarks(VARIANT_BOOL* retVal)
367
367
  *retVal = m_qb.isSeekByBookmarks();
368
368
  return S_OK;
369
369
  }
370
+
371
+
372
+ STDMETHODIMP CQueryBase::WhereIsNull(BSTR Name, IQueryBase** retVal)
373
+ {
374
+ m_qb.addLogic(Name, _T("<==>"), _T(""));
375
+ setResult(retVal);
376
+ return S_OK;
377
+ }
378
+
379
+ STDMETHODIMP CQueryBase::AndIsNull(BSTR Name,IQueryBase** retVal)
380
+ {
381
+ m_qb.addLogic(_T("and"), Name, _T("<==>"), _T(""));
382
+ setResult(retVal);
383
+ return S_OK;
384
+ }
385
+
386
+ STDMETHODIMP CQueryBase::OrIsNull(BSTR Name, IQueryBase** retVal)
387
+ {
388
+ m_qb.addLogic(_T("or"), Name, _T("<==>"), _T(""));
389
+ setResult(retVal);
390
+ return S_OK;
391
+ }
392
+
393
+ STDMETHODIMP CQueryBase::WhereIsNotNull(BSTR Name, IQueryBase** retVal)
394
+ {
395
+ m_qb.addLogic(Name, _T("<!=>"), _T(""));
396
+ setResult(retVal);
397
+ return S_OK;
398
+ }
399
+
400
+ STDMETHODIMP CQueryBase::AndIsNotNull(BSTR Name,IQueryBase** retVal)
401
+ {
402
+ m_qb.addLogic(_T("and"), Name, _T("<!=>"), _T(""));
403
+ setResult(retVal);
404
+ return S_OK;
405
+ }
406
+
407
+ STDMETHODIMP CQueryBase::OrIsNotNull(BSTR Name, IQueryBase** retVal)
408
+ {
409
+ m_qb.addLogic(_T("or"), Name, _T("<!=>"), _T(""));
410
+ setResult(retVal);
411
+ return S_OK;
412
+ }
413
+
414
+ STDMETHODIMP CQueryBase::SegmentsForInValue(int Value, IQueryBase** retVal)
415
+ {
416
+ m_qb.joinKeySize(Value);
417
+ setResult(retVal);
418
+ return S_OK;
419
+ }
420
+
421
+ STDMETHODIMP CQueryBase::JoinKeySize(int Value, IQueryBase** retVal)
422
+ {
423
+ m_qb.joinKeySize(Value);
424
+ setResult(retVal);
425
+ return S_OK;
426
+ }
427
+
428
+ STDMETHODIMP CQueryBase::GetJoinKeySize(int* retVal)
429
+ {
430
+ *retVal = m_qb.getJoinKeySize();
431
+ return S_OK;
432
+ }
433
+
434
+
@@ -96,6 +96,16 @@ public:
96
96
  STDMETHOD(IsSeekByBookmarks)(VARIANT_BOOL* retVal);
97
97
  STDMETHOD(AddSeekKeyValue)(VARIANT Value, VARIANT_BOOL Reset);
98
98
  STDMETHOD(AddSeekBookmark)(VARIANT Value, VARIANT_BOOL Reset);
99
+ STDMETHOD(WhereIsNull)(BSTR Name, IQueryBase** retVal);
100
+ STDMETHOD(AndIsNull)(BSTR Name,IQueryBase** retVal);
101
+ STDMETHOD(OrIsNull)(BSTR Name, IQueryBase** retVal);
102
+ STDMETHOD(WhereIsNotNull)(BSTR Name, IQueryBase** retVal);
103
+ STDMETHOD(AndIsNotNull)(BSTR Name,IQueryBase** retVal);
104
+ STDMETHOD(OrIsNotNull)(BSTR Name, IQueryBase** retVal);
105
+ STDMETHOD(SegmentsForInValue)(int Value, IQueryBase** retVal);
106
+ STDMETHOD(JoinKeySize)(int Value, IQueryBase** retVal);
107
+ STDMETHOD(GetJoinKeySize)(int* retVal);
108
+
99
109
 
100
110
  };
101
111
 
@@ -24,6 +24,8 @@
24
24
 
25
25
  void CRecord::FinalRelease()
26
26
  {
27
+ if (m_fieldDefsObj != NULL)
28
+ m_fieldDefsObj->Release();
27
29
  if (m_fieldObj != NULL)
28
30
  m_fieldObj->Release();
29
31
  }
@@ -32,8 +34,10 @@ short CRecord::GetFieldNum(VARIANT* Index)
32
34
  short index = -1;
33
35
  if (Index->vt == VT_BSTR)
34
36
  index = m_rec->indexByName(Index->bstrVal);
35
- else if ((Index->vt == VT_I2) || (Index->vt == VT_I4))
37
+ else if (Index->vt == VT_I2)
36
38
  index = Index->iVal;
39
+ else if (Index->vt == VT_I4)
40
+ index = (short)Index->lVal;
37
41
  return index;
38
42
  }
39
43
 
@@ -86,6 +90,31 @@ STDMETHODIMP CRecord::get_Field(VARIANT Index, IField** retVal)
86
90
  }
87
91
  }
88
92
 
93
+ STDMETHODIMP CRecord::get_FieldDefs(IFieldDefs** retVal)
94
+ {
95
+ if (m_fieldDefsObj == NULL)
96
+ {
97
+ CComObject<CFieldDefs>::CreateInstance(&m_fieldDefsObj);
98
+ if (!m_fieldDefsObj)
99
+ return Error("CreateInstance FieldDefs", IID_IWritableRecord);
100
+ m_fieldDefsObj->AddRef();
101
+ }
102
+ try
103
+ {
104
+ m_fieldDefsObj->m_fds = m_rec->fieldDefs();
105
+ IFieldDefs* fds;
106
+ m_fieldDefsObj->QueryInterface(IID_IFieldDefs, (void**)&fds);
107
+ _ASSERTE(fds);
108
+ *retVal = fds;
109
+ return S_OK;
110
+ }
111
+ catch (bzs::rtl::exception& e)
112
+ {
113
+ return Error((*bzs::rtl::getMsg(e)).c_str(), IID_IWritableRecord);
114
+ }
115
+ }
116
+
117
+
89
118
  STDMETHODIMP CRecord::get_IsInvalidRecord(VARIANT_BOOL* retVal)
90
119
  {
91
120
  *retVal = m_rec->isInvalidRecord();
@@ -122,8 +151,10 @@ short CWritableRecord::GetFieldNum(VARIANT* Index)
122
151
  short index = -1;
123
152
  if (Index->vt == VT_BSTR)
124
153
  index = m_rec->indexByName(Index->bstrVal);
125
- else if ((Index->vt == VT_I2) || (Index->vt == VT_I4))
154
+ else if (Index->vt == VT_I2)
126
155
  index = Index->iVal;
156
+ else if (Index->vt == VT_I4)
157
+ index = (short)Index->lVal;
127
158
  return index;
128
159
  }
129
160
 
@@ -34,11 +34,12 @@ class ATL_NO_VTABLE CRecord
34
34
  {
35
35
 
36
36
  CComObject<CField>* m_fieldObj;
37
+ CComObject<CFieldDefs>* m_fieldDefsObj;
37
38
  short GetFieldNum(VARIANT* Index);
38
39
 
39
40
  public:
40
41
  bzs::db::protocol::tdap::client::fieldsBase* m_rec;
41
- CRecord() : m_fieldObj(NULL) {}
42
+ CRecord() : m_fieldObj(NULL), m_fieldDefsObj(NULL) {}
42
43
 
43
44
  BEGIN_COM_MAP(CRecord)
44
45
  COM_INTERFACE_ENTRY(IRecord)
@@ -57,6 +58,7 @@ public:
57
58
  public:
58
59
  STDMETHOD(get_Size)(short* retVal);
59
60
  STDMETHOD(get_Field)(VARIANT Index, IField** retVal);
61
+ STDMETHOD(get_FieldDefs)(IFieldDefs** retVal);
60
62
  STDMETHOD(get_IsInvalidRecord)(VARIANT_BOOL* retVal);
61
63
  };
62
64
 
@@ -75,6 +75,48 @@ STDMETHODIMP CRecordsetQuery::Or(BSTR Name, BSTR Logic, VARIANT Value,
75
75
  return S_OK;
76
76
  }
77
77
 
78
+ STDMETHODIMP CRecordsetQuery::WhenIsNull(BSTR Name, IRecordsetQuery** retVal)
79
+ {
80
+ m_qb.whenIsNull(Name);
81
+ setResult(retVal);
82
+ return S_OK;
83
+ }
84
+
85
+ STDMETHODIMP CRecordsetQuery::AndIsNull(BSTR Name, IRecordsetQuery** retVal)
86
+ {
87
+ m_qb.andIsNull(Name);
88
+ setResult(retVal);
89
+ return S_OK;
90
+ }
91
+
92
+ STDMETHODIMP CRecordsetQuery::OrIsNull(BSTR Name, IRecordsetQuery** retVal)
93
+ {
94
+ m_qb.orIsNull(Name);
95
+ setResult(retVal);
96
+ return S_OK;
97
+ }
98
+
99
+ STDMETHODIMP CRecordsetQuery::WhenIsNotNull(BSTR Name, IRecordsetQuery** retVal)
100
+ {
101
+ m_qb.whenIsNotNull(Name);
102
+ setResult(retVal);
103
+ return S_OK;
104
+ }
105
+
106
+ STDMETHODIMP CRecordsetQuery::AndIsNotNull(BSTR Name, IRecordsetQuery** retVal)
107
+ {
108
+ m_qb.andIsNotNull(Name);
109
+ setResult(retVal);
110
+ return S_OK;
111
+ }
112
+
113
+ STDMETHODIMP CRecordsetQuery::OrIsNotNull(BSTR Name, IRecordsetQuery** retVal)
114
+ {
115
+ m_qb.orIsNotNull(Name);
116
+ setResult(retVal);
117
+ return S_OK;
118
+ }
119
+
78
120
  STDMETHODIMP CSortField::get_Name(BSTR* Value)
79
121
  {
80
122
  return S_OK;
@@ -64,6 +64,14 @@ public:
64
64
  IRecordsetQuery** retVal);
65
65
  STDMETHOD(Or)(BSTR Name, BSTR Logic, VARIANT Value,
66
66
  IRecordsetQuery** retVal);
67
+
68
+ STDMETHOD(WhenIsNull)(BSTR Name, IRecordsetQuery** retVal);
69
+ STDMETHOD(AndIsNull)(BSTR Name,IRecordsetQuery** retVal);
70
+ STDMETHOD(OrIsNull)(BSTR Name, IRecordsetQuery** retVal);
71
+ STDMETHOD(WhenIsNotNull)(BSTR Name, IRecordsetQuery** retVal);
72
+ STDMETHOD(AndIsNotNull)(BSTR Name,IRecordsetQuery** retVal);
73
+ STDMETHOD(OrIsNotNull)(BSTR Name, IRecordsetQuery** retVal);
74
+
67
75
  };
68
76
 
69
77
  class ATL_NO_VTABLE CSortField