Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- oleg (0) /storage/work/trunk$ svn diff include/
- Index: include/query/Aggregate.h
- ===================================================================
- --- include/query/Aggregate.h (revision 5176)
- +++ include/query/Aggregate.h (working copy)
- @@ -132,7 +132,18 @@
- }
- }
- - virtual void merge(Value& dstState, Value const& srcState) = 0;
- + virtual void merge(Value& dstState, Value const& srcState)
- + {
- + if (srcState.isNull()) {
- + return;
- + }
- + if (dstState.isNull()) {
- + dstState = srcState;
- + } else {
- + mergeNotNull(dstState, srcState);
- + }
- + }
- + virtual void mergeNotNull(Value& dstState, Value const& srcState) = 0;
- virtual void finalResult(Value& result, Value const& state) = 0;
- };
- @@ -200,7 +211,7 @@
- }
- }
- - void merge(Value& dstState, Value const& srcState)
- + void mergeNotNull(Value& dstState, Value const& srcState)
- {
- A<T, TR>::merge(*static_cast< typename A<T, TR>::State* >(dstState.data()), *static_cast< typename A<T, TR>::State* >(srcState.data()));
- }
- @@ -293,7 +304,7 @@
- }
- }
- - void merge(Value& dstState, Value const& srcState)
- + void mergeNotNull(Value& dstState, Value const& srcState)
- {
- A<T, TR>::merge(*static_cast< typename A<T, TR>::State* >(dstState.data()), *static_cast< typename A<T, TR>::State* >(srcState.data()));
- }
- oleg (0) /storage/work/trunk$ svn diff src
- Index: src/query/ops/aggregates/Aggregator.h
- ===================================================================
- --- src/query/ops/aggregates/Aggregator.h (revision 5176)
- +++ src/query/ops/aggregates/Aggregator.h (working copy)
- @@ -485,7 +485,7 @@
- {
- setOutputPosition(stateArrayIterator, stateChunkIterator, bucket.first, i);
- Value& state = stateChunkIterator->getItem();
- - if (state.getMissingReason()==0)
- + if (state.getMissingReason() >= 0)
- {
- _aggs[i]->initializeState(state);
- }
- @@ -505,7 +505,7 @@
- setOutputPosition(stateArrayIterator, stateChunkIterator, bucket.first, i);
- Value& state = stateChunkIterator->getItem();
- const RLEPayload* payload = bucket.second.getPayload();
- - if (state.getMissingReason()==0)
- + if (state.getMissingReason() >= 0)
- {
- _aggs[i]->initializeState(state);
- }
- Index: src/array/Array.cpp
- ===================================================================
- --- src/array/Array.cpp (revision 5176)
- +++ src/array/Array.cpp (working copy)
- @@ -395,11 +395,7 @@
- if (!dstIterator->setPosition(srcIterator->getPosition()))
- throw SYSTEM_EXCEPTION(SCIDB_SE_MERGE, SCIDB_LE_OPERATION_FAILED) << "setPosition";
- Value& val2 = dstIterator->getItem();
- - if (!val2.isNull())
- - {
- - aggregate->merge(val, val2);
- -
- - }
- + aggregate->merge(val, val2);
- dstIterator->writeItem(val);
- }
- ++(*srcIterator);
- @@ -471,10 +467,7 @@
- if (!dstIterator->setPosition(cpos))
- throw SYSTEM_EXCEPTION(SCIDB_SE_MERGE, SCIDB_LE_OPERATION_FAILED) << "setPosition";
- Value& val2 = dstIterator->getItem();
- - if (!val2.isNull())
- - {
- - aggregate->merge(val, val2);
- - }
- + aggregate->merge(val, val2);
- dstIterator->writeItem(val);
- ++inputIter;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement