Explorar el Código

HPCC-18678 Invalid assert(_offset=0) in diskread.ecl

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman hace 7 años
padre
commit
ea50eae100
Se han modificado 4 ficheros con 8 adiciones y 9 borrados
  1. 3 3
      ecl/hqlcpp/hqlsource.cpp
  2. 1 1
      ecl/hqlcpp/hqlsource.ipp
  3. 3 4
      rtl/eclrtl/rtlkey.cpp
  4. 1 1
      rtl/eclrtl/rtlkey.hpp

+ 3 - 3
ecl/hqlcpp/hqlsource.cpp

@@ -4490,7 +4490,7 @@ void MonitorExtractor::buildKeySegmentExpr(BuildMonitorState & buildState, KeySe
         if (selectorInfo.expandNeeded || selectorInfo.isComputed)
             generateFormatWrapping(createMonitorText, selectorInfo.selector, selectorInfo.expandedSelector, buildState.curOffset);
         else if (selectorInfo.mapOffset)
-            generateOffsetWrapping(createMonitorText, selectorInfo.selector, buildState.curOffset);
+            generateOffsetWrapping(createMonitorText, selectorInfo.selector);
 
         appendCtx->addQuotedF("%s->append(%s);", buildState.listName, createMonitorText.str());
     }
@@ -4542,11 +4542,11 @@ interface IKeySegmentFormatTranslator : public IInterface
 };
 */
 
-void MonitorExtractor::generateOffsetWrapping(StringBuffer & createMonitorText, IHqlExpression * selector, unsigned curOffset)
+void MonitorExtractor::generateOffsetWrapping(StringBuffer & createMonitorText, IHqlExpression * selector)
 {
     unsigned curFieldIdx = getFieldNumber(tableExpr->queryNormalizedSelector(), selector);
     StringBuffer s;
-    s.clear().append("createNewVarOffsetKeySegmentMonitor(").append(createMonitorText).append(",").append(curOffset).append(",").append(curFieldIdx).append(")");
+    s.clear().append("createNewVarOffsetKeySegmentMonitor(").append(createMonitorText).append(",").append(curFieldIdx).append(")");
     createMonitorText.swapWith(s);
 }
 

+ 1 - 1
ecl/hqlcpp/hqlsource.ipp

@@ -188,7 +188,7 @@ protected:
     void expandSelects(IHqlExpression * expr, IHqlSimpleScope * expandedScope, IHqlExpression * keySelector, IHqlExpression * expandedSelector);;
     bool extractOrFilter(KeyConditionInfo & matches, IHqlExpression * filter, KeyedKind keyedKind);
     void generateFormatWrapping(StringBuffer & createMonitorText, IHqlExpression * selector, IHqlExpression * expandedSelector, unsigned curOffset);
-    void generateOffsetWrapping(StringBuffer & createMonitorText, IHqlExpression * selector, unsigned curOffset);
+    void generateOffsetWrapping(StringBuffer & createMonitorText, IHqlExpression * selector);
     IHqlExpression * getMonitorValueAddress(BuildCtx & ctx, IHqlExpression * value);
     IHqlExpression * getRangeLimit(ITypeInfo * fieldType, IHqlExpression * lengthExpr, IHqlExpression * value, int whichBoundary);
     IHqlExpression * invertTransforms(IHqlExpression * left, IHqlExpression * right);

+ 3 - 4
rtl/eclrtl/rtlkey.cpp

@@ -807,10 +807,9 @@ protected:
 class CNewVarOffsetKeySegmentMonitor : public CIndirectKeySegmentMonitor
 {
 public:
-    CNewVarOffsetKeySegmentMonitor(IKeySegmentMonitor * _base, unsigned _offset, unsigned _fieldIdx)
+    CNewVarOffsetKeySegmentMonitor(IKeySegmentMonitor * _base, unsigned _fieldIdx)
     : CIndirectKeySegmentMonitor(_base, 0), fieldIdx(_fieldIdx)
     {
-        assert(_offset == 0);   // We no longer use partial size for offset
     }
 
     CNewVarOffsetKeySegmentMonitor(MemoryBuffer &mb)
@@ -1271,9 +1270,9 @@ ECLRTL_API IKeySegmentMonitor *createDummyKeySegmentMonitor(unsigned _offset, un
 //  return new CDummyKeySegmentMonitor(_offset, _size, isSigned, isLittleEndian);
 }
 
-ECLRTL_API IKeySegmentMonitor *createNewVarOffsetKeySegmentMonitor(IKeySegmentMonitor * base, unsigned offset, unsigned fieldIdx)
+ECLRTL_API IKeySegmentMonitor *createNewVarOffsetKeySegmentMonitor(IKeySegmentMonitor * base, unsigned fieldIdx)
 {
-    return new CNewVarOffsetKeySegmentMonitor(base, offset, fieldIdx);
+    return new CNewVarOffsetKeySegmentMonitor(base, fieldIdx);
 }
 
 ECLRTL_API IKeySegmentMonitor *createTranslatedKeySegmentMonitor(IKeySegmentMonitor * base, unsigned offset, IKeySegmentFormatTranslator * translator)

+ 1 - 1
rtl/eclrtl/rtlkey.hpp

@@ -180,7 +180,7 @@ ECLRTL_API IKeySegmentMonitor *createSingleLittleSignedKeySegmentMonitor(bool op
 ECLRTL_API IKeySegmentMonitor *createSingleLittleKeySegmentMonitor(bool optional, unsigned offset, unsigned size, const void * value);
 
 //takes over ownership of base
-ECLRTL_API IKeySegmentMonitor *createNewVarOffsetKeySegmentMonitor(IKeySegmentMonitor * base, unsigned offset, unsigned fieldIdx);
+ECLRTL_API IKeySegmentMonitor *createNewVarOffsetKeySegmentMonitor(IKeySegmentMonitor * base, unsigned fieldIdx);
 
 //takes over ownership of both arguments
 ECLRTL_API IKeySegmentMonitor *createTranslatedKeySegmentMonitor(IKeySegmentMonitor * base, unsigned offset, IKeySegmentFormatTranslator * translator);