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