Advertisement
zamotivator

Untitled

Jul 3rd, 2012
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.75 KB | None | 0 0
  1. oleg (0) /storage/work/trunk$ svn diff include/
  2. Index: include/query/Aggregate.h
  3. ===================================================================
  4. --- include/query/Aggregate.h (revision 5176)
  5. +++ include/query/Aggregate.h (working copy)
  6. @@ -132,7 +132,18 @@
  7. }
  8. }
  9.  
  10. - virtual void merge(Value& dstState, Value const& srcState) = 0;
  11. + virtual void merge(Value& dstState, Value const& srcState)
  12. + {
  13. + if (srcState.isNull()) {
  14. + return;
  15. + }
  16. + if (dstState.isNull()) {
  17. + dstState = srcState;
  18. + } else {
  19. + mergeNotNull(dstState, srcState);
  20. + }
  21. + }
  22. + virtual void mergeNotNull(Value& dstState, Value const& srcState) = 0;
  23. virtual void finalResult(Value& result, Value const& state) = 0;
  24. };
  25.  
  26. @@ -200,7 +211,7 @@
  27. }
  28. }
  29.  
  30. - void merge(Value& dstState, Value const& srcState)
  31. + void mergeNotNull(Value& dstState, Value const& srcState)
  32. {
  33. A<T, TR>::merge(*static_cast< typename A<T, TR>::State* >(dstState.data()), *static_cast< typename A<T, TR>::State* >(srcState.data()));
  34. }
  35. @@ -293,7 +304,7 @@
  36. }
  37. }
  38.  
  39. - void merge(Value& dstState, Value const& srcState)
  40. + void mergeNotNull(Value& dstState, Value const& srcState)
  41. {
  42. A<T, TR>::merge(*static_cast< typename A<T, TR>::State* >(dstState.data()), *static_cast< typename A<T, TR>::State* >(srcState.data()));
  43. }
  44. oleg (0) /storage/work/trunk$ svn diff src
  45. Index: src/query/ops/aggregates/Aggregator.h
  46. ===================================================================
  47. --- src/query/ops/aggregates/Aggregator.h (revision 5176)
  48. +++ src/query/ops/aggregates/Aggregator.h (working copy)
  49. @@ -485,7 +485,7 @@
  50. {
  51. setOutputPosition(stateArrayIterator, stateChunkIterator, bucket.first, i);
  52. Value& state = stateChunkIterator->getItem();
  53. - if (state.getMissingReason()==0)
  54. + if (state.getMissingReason() >= 0)
  55. {
  56. _aggs[i]->initializeState(state);
  57. }
  58. @@ -505,7 +505,7 @@
  59. setOutputPosition(stateArrayIterator, stateChunkIterator, bucket.first, i);
  60. Value& state = stateChunkIterator->getItem();
  61. const RLEPayload* payload = bucket.second.getPayload();
  62. - if (state.getMissingReason()==0)
  63. + if (state.getMissingReason() >= 0)
  64. {
  65. _aggs[i]->initializeState(state);
  66. }
  67. Index: src/array/Array.cpp
  68. ===================================================================
  69. --- src/array/Array.cpp (revision 5176)
  70. +++ src/array/Array.cpp (working copy)
  71. @@ -395,11 +395,7 @@
  72. if (!dstIterator->setPosition(srcIterator->getPosition()))
  73. throw SYSTEM_EXCEPTION(SCIDB_SE_MERGE, SCIDB_LE_OPERATION_FAILED) << "setPosition";
  74. Value& val2 = dstIterator->getItem();
  75. - if (!val2.isNull())
  76. - {
  77. - aggregate->merge(val, val2);
  78. -
  79. - }
  80. + aggregate->merge(val, val2);
  81. dstIterator->writeItem(val);
  82. }
  83. ++(*srcIterator);
  84. @@ -471,10 +467,7 @@
  85. if (!dstIterator->setPosition(cpos))
  86. throw SYSTEM_EXCEPTION(SCIDB_SE_MERGE, SCIDB_LE_OPERATION_FAILED) << "setPosition";
  87. Value& val2 = dstIterator->getItem();
  88. - if (!val2.isNull())
  89. - {
  90. - aggregate->merge(val, val2);
  91. - }
  92. + aggregate->merge(val, val2);
  93. dstIterator->writeItem(val);
  94. ++inputIter;
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement