Jelajahi Sumber

HPCC-12785 Output JSON BigIntegers as strings

Requires passing size of unigned and interger ECL types to
output interfaces.

Signed-off-by: Anthony Fishbeck <anthony.fishbeck@lexisnexis.com>
Anthony Fishbeck 10 tahun lalu
induk
melakukan
2647729496

+ 8 - 8
common/fileview2/fvresultset.cpp

@@ -1564,26 +1564,26 @@ void CResultSetCursor::writeXmlText(IXmlWriter &writer, int columnIndex, const c
         {
             __int64 value = getIntFromInt(type, cur, isMappedIndexField(columnIndex));
             if (type.isSigned())
-                writer.outputInt((__int64) value, name);
+                writer.outputInt((__int64) value, type.getSize(), name);
             else
-                writer.outputUInt((unsigned __int64) value, name);
+                writer.outputUInt((unsigned __int64) value, type.getSize(), name);
             break;
         }
     case type_swapint:
         {
             __int64 value = getIntFromSwapInt(type, cur, isMappedIndexField(columnIndex));
             if (type.isSigned())
-                writer.outputInt((__int64) value, name);
+                writer.outputInt((__int64) value, type.getSize(), name);
             else
-                writer.outputUInt((unsigned __int64) value, name);
+                writer.outputUInt((unsigned __int64) value, type.getSize(), name);
             break;
         }
     case type_packedint:
         {
             if (type.isSigned())
-                writer.outputInt(rtlGetPackedSigned(cur), name);
+                writer.outputInt(rtlGetPackedSigned(cur), type.getSize(), name);
             else
-                writer.outputUInt(rtlGetPackedUnsigned(cur), name);
+                writer.outputUInt(rtlGetPackedUnsigned(cur), type.getSize(), name);
             break;
         }
     case type_decimal:
@@ -3309,11 +3309,11 @@ extern FILEVIEW_API void writeFullWorkUnitResults(const char *username, const ch
 
             writer.outputBeginNested(getSeverityTagname(severity, flags), false);
             if (code)
-                writer.outputUInt(code, "Code");
+                writer.outputUInt(code, 0, "Code");
             if (filename.length())
                 writer.outputCString(filename.str(), "Filename");
             if (lineno)
-                writer.outputUInt(lineno, "Line");
+                writer.outputUInt(lineno, 0, "Line");
 
             writer.outputCString(src.str(), "Source");
             writer.outputCString(msg.str(), "Message");

+ 18 - 18
common/thorhelper/roxiedebug.cpp

@@ -444,14 +444,14 @@ public:
     {
         // MORE
     }
-    virtual void outputInt(__int64 field, const char *fieldname) 
+    virtual void outputInt(__int64 field, unsigned size, const char *fieldname)
     {
         if (intValueSet && !matchSeen && checkFieldName(fieldname))
         {
             matchSeen = checkCondition((field == intValue) ? 0 : ((field > intValue) ? 1 : -1));
         }
     }
-    virtual void outputUInt(unsigned __int64 field, const char *fieldname) 
+    virtual void outputUInt(unsigned __int64 field, unsigned size, const char *fieldname)
     {
         // NOTE - "contains" is interpreted as "equals" on numeric fields
         if (uintValueSet && !matchSeen && checkFieldName(fieldname))
@@ -851,7 +851,7 @@ void CBreakpointInfo::toXML(IXmlWriter *output) const
     }
     if (rowCount)
     {
-        output->outputInt(rowCount, "@rowCount"); 
+        output->outputInt(rowCount, 0, "@rowCount");
         output->outputCString(BreakpointCountModes[rowCountMode], "@rowCountMode"); 
     }
     ForEachItemIn(edgeIdx, activeEdges)
@@ -906,14 +906,14 @@ void DebugActivityRecord::outputProperties(IXmlWriter *output)
     {
         output->outputBeginNested("att", false); 
         output->outputCString("localTime", "@name"); 
-        output->outputUInt((unsigned) (cycle_to_nanosec(localCycles)/1000), "@value"); 
+        output->outputUInt((unsigned) (cycle_to_nanosec(localCycles)/1000), 0, "@value");
         output->outputEndNested("att");
     }
     if (totalCycles)
     {
         output->outputBeginNested("att", false); 
         output->outputCString("totalTime", "@name"); 
-        output->outputUInt((unsigned) (cycle_to_nanosec(totalCycles)/1000), "@value"); 
+        output->outputUInt((unsigned) (cycle_to_nanosec(totalCycles)/1000), 0, "@value");
         output->outputEndNested("att");
     }
 }
@@ -1321,7 +1321,7 @@ void CBaseDebugContext::deserialize(MemoryBuffer &buff)
 void CBaseServerDebugContext::doStandardResult(IXmlWriter *output) const
 {
     const char *stateString = running ? "running" : queryStateString(currentState);
-    output->outputInt(sequence, "@sequence");
+    output->outputInt(sequence, 0, "@sequence");
     output->outputString(strlen(stateString), stateString, "@state");
     if (currentNode)
         currentNode->outputId(output, "@nodeId");
@@ -1331,7 +1331,7 @@ void CBaseServerDebugContext::doStandardResult(IXmlWriter *output) const
         output->outputBool(true, "@skip");
     if (currentGraph)
         output->outputCString(currentGraph->queryGraphName(), "@graphId");
-    output->outputInt(graphChangeSequence, "@graphSequenceNum");
+    output->outputInt(graphChangeSequence, 0, "@graphSequenceNum");
     if (graphChangeSequence != prevGraphChangeSequence)
         output->outputBool(true, "@graphChanged");
     if (currentBreakpointUID != (unsigned) -1)
@@ -1343,7 +1343,7 @@ void CBaseServerDebugContext::doStandardResult(IXmlWriter *output) const
     {
         output->outputBeginNested("Exception", true);
         output->outputCString("Roxie", "Source");
-        output->outputInt(currentException->errorCode(), "Code");
+        output->outputInt(currentException->errorCode(), 0, "Code");
         StringBuffer s;
         currentException->errorMessage(s);
         output->outputString(s.length(), s.str(), "Message");
@@ -1356,7 +1356,7 @@ void CBaseServerDebugContext::_listBreakpoint(IXmlWriter *output, IBreakpointInf
     if (bp.queryMode() != BreakpointModeNone)
     {
         output->outputBeginNested("break", true);
-        output->outputInt(idx, "@idx");
+        output->outputInt(idx, 0, "@idx");
         bp.toXML(output);
         output->outputEndNested("break");
     }
@@ -1699,7 +1699,7 @@ void CBaseServerDebugContext::debugCounts(IXmlWriter *output, unsigned sinceSequ
         {
             output->outputBeginNested("edge", true);
             output->outputCString((const char *) edges.query().getKey(), "@edgeId");
-            output->outputUInt(edge->queryCount(), "@count");
+            output->outputUInt(edge->queryCount(), 0, "@count");
             output->outputEndNested("edge");
         }
         if (reset)
@@ -1803,7 +1803,7 @@ void CBaseServerDebugContext::debugGetConfig(IXmlWriter *output, const char *nam
     }
     else if (stricmp(name, "stopOnLimits")==0)
     {
-        output->outputInt(stopOnLimits, "@value");
+        output->outputInt(stopOnLimits, 0, "@value");
     }
     else if (stricmp(name, "historySize")==0)
     {
@@ -1814,11 +1814,11 @@ void CBaseServerDebugContext::debugGetConfig(IXmlWriter *output, const char *nam
             IActivityDebugContext *activityCtx = currentGraph->lookupActivityByEdgeId(id);
             if (!activityCtx)
                 throw MakeStringException(THORHELPER_DEBUG_ERROR, "Edge %s not found in current graph", id);
-            output->outputInt(activityCtx->queryHistoryCapacity(), "@value");
+            output->outputInt(activityCtx->queryHistoryCapacity(), 0, "@value");
         }
         else
         {
-            output->outputInt(defaultHistoryCapacity, "@value");
+            output->outputInt(defaultHistoryCapacity, 0, "@value");
         }
     }
     else
@@ -1996,7 +1996,7 @@ void CBaseDebugGraphManager::outputLinksForChildGraph(IXmlWriter *output, const
         StringBuffer idText;
         idText.append(childNode->idText).append('_').append(parentId);
         output->outputCString(idText.str(), "@id"); // MORE - is this guaranteed to be unique?
-        output->outputBeginNested("att", false); output->outputCString("_childGraph", "@name"); output->outputInt(1, "@value"); output->outputEndNested("att");
+        output->outputBeginNested("att", false); output->outputCString("_childGraph", "@name"); output->outputInt(1, 0, "@value"); output->outputEndNested("att");
         output->outputBeginNested("att", false); output->outputCString("_sourceActivity", "@name"); childNode->outputId(output, "@value"); output->outputEndNested("att"); // MORE!!!
         output->outputBeginNested("att", false); output->outputCString("_targetActivity", "@name"); output->outputCString(parentId, "@value"); output->outputEndNested("att");
         output->outputEndNested("edge");
@@ -2028,20 +2028,20 @@ void CBaseDebugGraphManager::outputChildGraph(IXmlWriter *output, unsigned seque
                 output->outputString(kindStr.length(), kindStr.str(), "@shortlabel");
                 if (node->activity->isPassThrough())
                 {
-                    output->outputBeginNested("att", false); output->outputCString("_isPassthrough", "@name"); output->outputInt(1, "@value"); output->outputEndNested("att");
+                    output->outputBeginNested("att", false); output->outputCString("_isPassthrough", "@name"); output->outputInt(1, 0, "@value"); output->outputEndNested("att");
                 }
                 if (node->totalCycles)
                 {
                     output->outputBeginNested("att", false); 
                     output->outputCString("totalTime", "@name"); 
-                    output->outputUInt((unsigned) (cycle_to_nanosec(node->totalCycles)/1000), "@value"); 
+                    output->outputUInt((unsigned) (cycle_to_nanosec(node->totalCycles)/1000), 0, "@value");
                     output->outputEndNested("att");
                 }
                 if (node->localCycles)
                 {
                     output->outputBeginNested("att", false); 
                     output->outputCString("localTime", "@name"); 
-                    output->outputUInt((unsigned) (cycle_to_nanosec(node->localCycles)/1000), "@value"); 
+                    output->outputUInt((unsigned) (cycle_to_nanosec(node->localCycles)/1000), 0, "@value");
                     output->outputEndNested("att");
                 }
                 node->outputProperties(output);
@@ -2246,7 +2246,7 @@ void CBaseDebugGraphManager::getXGMML(IXmlWriter *output, unsigned sequence, boo
             {
                 output->outputBeginNested("edge", true);
                 output->outputCString(dependency.edgeId, "@id");
-                output->outputBeginNested("att", false); output->outputCString("_dependsOn", "@name"); output->outputInt(1, "@value"); output->outputEndNested("att");
+                output->outputBeginNested("att", false); output->outputCString("_dependsOn", "@name"); output->outputInt(1, 0, "@value"); output->outputEndNested("att");
                 output->outputBeginNested("att", false); output->outputCString("_sourceActivity", "@name"); source->outputId(output, "@value"); output->outputEndNested("att");
                 output->outputBeginNested("att", false); output->outputCString("_targetActivity", "@name"); target->outputId(output, "@value"); output->outputEndNested("att");
                 output->outputEndNested("edge");

+ 30 - 0
common/thorhelper/roxiehelper.cpp

@@ -1126,6 +1126,17 @@ void FlushingStringBuffer::startScalar(const char *resultName, unsigned sequence
     }
 }
 
+void FlushingStringBuffer::setScalarInt(const char *resultName, unsigned sequence, __int64 value, unsigned size)
+{
+    startScalar(resultName, sequence);
+    s.appendf("%"I64F"d", value);
+}
+void FlushingStringBuffer::setScalarUInt(const char *resultName, unsigned sequence, unsigned __int64 value, unsigned size)
+{
+    startScalar(resultName, sequence);
+    s.appendf("%"I64F"u", value);
+}
+
 void FlushingStringBuffer::incrementRowCount()
 {
     CriticalBlock b(crit);
@@ -1190,6 +1201,25 @@ void FlushingJsonBuffer::startScalar(const char *resultName, unsigned sequence)
         tail.set("}]}");
     }
 }
+
+void FlushingJsonBuffer::setScalarInt(const char *resultName, unsigned sequence, __int64 value, unsigned size)
+{
+    startScalar(resultName, sequence);
+    if (size < 7)
+        s.appendf("%"I64F"d", value);
+    else
+        s.append('"').appendf("%"I64F"d", value).append('"');
+}
+
+void FlushingJsonBuffer::setScalarUInt(const char *resultName, unsigned sequence, unsigned __int64 value, unsigned size)
+{
+    startScalar(resultName, sequence);
+    if (size < 7)
+        s.appendf("%"I64F"u", value);
+    else
+        s.append('"').appendf("%"I64F"u", value).append('"');
+}
+
 //=====================================================================================================
 
 ClusterWriteHandler::ClusterWriteHandler(char const * _logicalName, char const * _activityType)

+ 4 - 0
common/thorhelper/roxiehelper.hpp

@@ -179,6 +179,8 @@ public:
     virtual void *getPayload(size32_t &length);
     virtual void startDataset(const char *elementName, const char *resultName, unsigned sequence, bool _extend = false, const IProperties *xmlns=NULL);
     virtual void startScalar(const char *resultName, unsigned sequence);
+    virtual void setScalarInt(const char *resultName, unsigned sequence, __int64 value, unsigned size);
+    virtual void setScalarUInt(const char *resultName, unsigned sequence, unsigned __int64 value, unsigned size);
     virtual void incrementRowCount();
 };
 
@@ -195,6 +197,8 @@ public:
     void encodeData(const void *data, unsigned len);
     void startDataset(const char *elementName, const char *resultName, unsigned sequence, bool _extend = false, const IProperties *xmlns=NULL);
     void startScalar(const char *resultName, unsigned sequence);
+    virtual void setScalarInt(const char *resultName, unsigned sequence, __int64 value, unsigned size);
+    virtual void setScalarUInt(const char *resultName, unsigned sequence, unsigned __int64 value, unsigned size);
 };
 
 inline const char *getFormatName(TextMarkupFormat fmt)

+ 4 - 4
common/thorhelper/thorcommon.hpp

@@ -272,9 +272,9 @@ public:
     {
         ctx->setResultDecimal(stepname, sequence, len, precision, isSigned, val);
     }
-    virtual void setResultInt(const char *name, unsigned sequence, __int64 value)
+    virtual void setResultInt(const char *name, unsigned sequence, __int64 value, unsigned size)
     {
-        ctx->setResultInt(name, sequence, value);
+        ctx->setResultInt(name, sequence, value, size);
     }
     virtual void setResultRaw(const char *name, unsigned sequence, int len, const void * data)
     {
@@ -292,9 +292,9 @@ public:
     {
         ctx->setResultString(name, sequence, len, str);
     }
-    virtual void setResultUInt(const char *name, unsigned sequence, unsigned __int64 value)
+    virtual void setResultUInt(const char *name, unsigned sequence, unsigned __int64 value, unsigned size)
     {
-        ctx->setResultUInt(name, sequence, value);
+        ctx->setResultUInt(name, sequence, value, size);
     }
     virtual void setResultUnicode(const char *name, unsigned sequence, int len, UChar const * str)
     {

+ 28 - 13
common/thorhelper/thorxmlwrite.cpp

@@ -136,7 +136,7 @@ void CommonXmlWriter::outputData(unsigned len, const void *field, const char *fi
     }
 }
 
-void CommonXmlWriter::outputInt(__int64 field, const char *fieldname)
+void CommonXmlWriter::outputInt(__int64 field, unsigned size, const char *fieldname)
 {
     if (checkForAttribute(fieldname))
         outputXmlAttrInt(field, fieldname+1, out);
@@ -150,7 +150,7 @@ void CommonXmlWriter::outputInt(__int64 field, const char *fieldname)
     }
 }
 
-void CommonXmlWriter::outputUInt(unsigned __int64 field, const char *fieldname)
+void CommonXmlWriter::outputUInt(unsigned __int64 field, unsigned size, const char *fieldname)
 {
     if (checkForAttribute(fieldname))
         outputXmlAttrUInt(field, fieldname+1, out);
@@ -486,16 +486,31 @@ void CommonJsonWriter::outputData(unsigned len, const void *field, const char *f
     appendJSONDataValue(out, checkItemName(fieldname), len, field);
 }
 
-void CommonJsonWriter::outputInt(__int64 field, const char *fieldname)
+void CommonJsonWriter::outputInt(__int64 field, unsigned size, const char *fieldname)
 {
-    checkDelimit();
-    appendJSONValue(out, checkItemName(fieldname), field);
+    if (size < 7)
+    {
+        checkDelimit();
+        appendJSONValue(out, checkItemName(fieldname), field);
+    }
+    else
+    {
+        appendJSONNameOrDelimit(out, checkItemName(fieldname));
+        out.append('"').append(field).append('"');
+    }
 }
-
-void CommonJsonWriter::outputUInt(unsigned __int64 field, const char *fieldname)
+void CommonJsonWriter::outputUInt(unsigned __int64 field, unsigned size, const char *fieldname)
 {
-    checkDelimit();
-    appendJSONValue(out, checkItemName(fieldname), field);
+    if (size < 6)
+    {
+        checkDelimit();
+        appendJSONValue(out, checkItemName(fieldname), field);
+    }
+    else
+    {
+        appendJSONNameOrDelimit(out, checkItemName(fieldname));
+        out.append('"').append(field).append('"');
+    }
 }
 
 void CommonJsonWriter::outputReal(double field, const char *fieldname)
@@ -849,7 +864,7 @@ void CommonEncodedXmlWriter::outputData(unsigned len, const void *field, const c
     }
 }
 
-void CommonEncodedXmlWriter::outputInt(__int64 field, const char *fieldname)
+void CommonEncodedXmlWriter::outputInt(__int64 field, unsigned size, const char *fieldname)
 {
     if (checkForAttribute(fieldname))
         outputXmlAttrInt(field, fieldname+1, out);
@@ -863,7 +878,7 @@ void CommonEncodedXmlWriter::outputInt(__int64 field, const char *fieldname)
     }
 }
 
-void CommonEncodedXmlWriter::outputUInt(unsigned __int64 field, const char *fieldname)
+void CommonEncodedXmlWriter::outputUInt(unsigned __int64 field, unsigned size, const char *fieldname)
 {
     if (checkForAttribute(fieldname))
         outputXmlAttrUInt(field, fieldname+1, out);
@@ -1058,13 +1073,13 @@ void SimpleOutputWriter::outputData(unsigned len, const void *field, const char
     outputXmlData(len, field, NULL, out);
 }
 
-void SimpleOutputWriter::outputInt(__int64 field, const char *)
+void SimpleOutputWriter::outputInt(__int64 field, unsigned size, const char *)
 {
     outputFieldSeparator();
     outputXmlInt(field, NULL, out);
 }
 
-void SimpleOutputWriter::outputUInt(unsigned __int64 field, const char *)
+void SimpleOutputWriter::outputUInt(unsigned __int64 field, unsigned size, const char *)
 {
     outputFieldSeparator();
     outputXmlUInt(field, NULL, out);

+ 8 - 9
common/thorhelper/thorxmlwrite.hpp

@@ -62,8 +62,8 @@ public:
     virtual void outputString(unsigned len, const char *field, const char *fieldname);
     virtual void outputBool(bool field, const char *fieldname);
     virtual void outputData(unsigned len, const void *field, const char *fieldname);
-    virtual void outputInt(__int64 field, const char *fieldname);
-    virtual void outputUInt(unsigned __int64 field, const char *fieldname);
+    virtual void outputInt(__int64 field, unsigned size, const char *fieldname);
+    virtual void outputUInt(unsigned __int64 field, unsigned size, const char *fieldname);
     virtual void outputReal(double field, const char *fieldname);
     virtual void outputDecimal(const void *field, unsigned size, unsigned precision, const char *fieldname);
     virtual void outputUDecimal(const void *field, unsigned size, unsigned precision, const char *fieldname);
@@ -133,8 +133,8 @@ public:
     virtual void outputString(unsigned len, const char *field, const char *fieldname);
     virtual void outputBool(bool field, const char *fieldname);
     virtual void outputData(unsigned len, const void *field, const char *fieldname);
-    virtual void outputInt(__int64 field, const char *fieldname);
-    virtual void outputUInt(unsigned __int64 field, const char *fieldname);
+    virtual void outputInt(__int64 field, unsigned size, const char *fieldname);
+    virtual void outputUInt(unsigned __int64 field, unsigned size, const char *fieldname);
     virtual void outputReal(double field, const char *fieldname);
     virtual void outputDecimal(const void *field, unsigned size, unsigned precision, const char *fieldname);
     virtual void outputUDecimal(const void *field, unsigned size, unsigned precision, const char *fieldname);
@@ -203,8 +203,8 @@ public:
     virtual void outputString(unsigned len, const char *field, const char *fieldname);
     virtual void outputBool(bool field, const char *fieldname);
     virtual void outputData(unsigned len, const void *field, const char *fieldname);
-    virtual void outputInt(__int64 field, const char *fieldname);
-    virtual void outputUInt(unsigned __int64 field, const char *fieldname);
+    virtual void outputInt(__int64 field, unsigned size, const char *fieldname);
+    virtual void outputUInt(unsigned __int64 field, unsigned size, const char *fieldname);
     virtual void outputReal(double field, const char *fieldname);
     virtual void outputDecimal(const void *field, unsigned size, unsigned precision, const char *fieldname);
     virtual void outputUDecimal(const void *field, unsigned size, unsigned precision, const char *fieldname);
@@ -242,8 +242,6 @@ public:
     virtual void outputString(unsigned len, const char *field, const char *fieldname);
     virtual void outputBool(bool field, const char *fieldname);
     virtual void outputData(unsigned len, const void *field, const char *fieldname);
-    virtual void outputInt(__int64 field, const char *fieldname);
-    virtual void outputUInt(unsigned __int64 field, const char *fieldname);
     virtual void outputReal(double field, const char *fieldname);
     virtual void outputDecimal(const void *field, unsigned size, unsigned precision, const char *fieldname);
     virtual void outputUDecimal(const void *field, unsigned size, unsigned precision, const char *fieldname);
@@ -259,7 +257,8 @@ public:
     virtual void outputInlineXml(const char *text){} //for appending raw xml content
     virtual void outputXmlns(const char *name, const char *uri){}
 
-
+    virtual void outputInt(__int64 field, unsigned size, const char *fieldname);
+    virtual void outputUInt(unsigned __int64 field, unsigned size, const char *fieldname);
 
     void newline();
 protected:

+ 10 - 10
ecl/eclagent/eclagent.cpp

@@ -773,13 +773,13 @@ void EclAgent::outputFormattedResult(const char * name, unsigned sequence, bool
         outputSerializer->close(sequence, false);
 }
 
-void EclAgent::setResultInt(const char * name, unsigned sequence, __int64 val)
+void EclAgent::setResultInt(const char * name, unsigned sequence, __int64 val, unsigned size)
 {
     LOG(MCsetresult, unknownJob, "setResultInt(%s,%d,%"I64F"d)", nullText(name), sequence, val);
     Owned<IWUResult> r = updateResult(name, sequence);
     if (r)
     {
-        r->setResultInt(val);   
+        r->setResultInt(val);
         r->setResultStatus(ResultStatusCalculated);
     }
     else
@@ -796,13 +796,13 @@ void EclAgent::setResultInt(const char * name, unsigned sequence, __int64 val)
     }
 }
 
-void EclAgent::setResultUInt(const char * name, unsigned sequence, unsigned __int64 val)
+void EclAgent::setResultUInt(const char * name, unsigned sequence, unsigned __int64 val, unsigned size)
 {
     LOG(MCsetresult, unknownJob, "setResultUInt(%s,%d,%"I64F"u)", nullText(name), sequence, val);
     Owned<IWUResult> r = updateResult(name, sequence);
     if (r)
     {
-        r->setResultUInt(val);  
+        r->setResultUInt(val);
         r->setResultStatus(ResultStatusCalculated);
     }
     else
@@ -3720,14 +3720,14 @@ class DebugProbe : public InputProbe, implements IActivityDebugContext
     {
         output->outputBeginNested("att", false);
         output->outputCString(name, "@name");
-        output->outputInt(value, "@value");
+        output->outputInt(value, 0, "@value");
         output->outputEndNested("att");
     }
 
     void rowToXML(IXmlWriter *output, const void *row, unsigned sequence, unsigned rowCount, bool skipped, bool limited, bool eof, bool eog) const
     {
         output->outputBeginNested("Row", true);
-        output->outputInt(sequence, "@seq");
+        output->outputInt(sequence, 0, "@seq");
         if (skipped)
             output->outputBool(true, "@skip");
         if (limited)
@@ -3738,9 +3738,9 @@ class DebugProbe : public InputProbe, implements IActivityDebugContext
             output->outputBool(true, "@eog");
         if (row)
         {
-            output->outputInt(rowCount, "@count");
+            output->outputInt(rowCount, 0, "@count");
             IOutputMetaData *meta = queryOutputMeta();
-            output->outputInt(meta->getRecordSize(row), "@size");
+            output->outputInt(meta->getRecordSize(row), 0, "@size");
             meta->toXML((const byte *) row, *output);
         }
         output->outputEndNested("Row");
@@ -3878,8 +3878,8 @@ public:
                         else
                         {
                             output->outputBeginNested("Row", true);
-                            output->outputInt(rowData->querySequence(), "@sequence");
-                            output->outputInt(rowData->queryRowCount(), "@count");
+                            output->outputInt(rowData->querySequence(), 0, "@sequence");
+                            output->outputInt(rowData->queryRowCount(), 0, "@count");
                             output->outputEndNested("Row");
                         }
                     }

+ 2 - 2
ecl/eclagent/eclagent.ipp

@@ -443,7 +443,7 @@ public:
     void setStandAloneOptions(bool _isStandAloneExe, bool _isRemoteWorkunit, bool _resolveFilesLocally, bool _writeResultsToStdout, outputFmts _outputFmt, IUserDescriptor *_standAloneUDesc);
     inline bool needToLockWorkunit() { return !isStandAloneExe; }           //If standalone exe then either no dali, or a unique remote workunit.
 
-    virtual void setResultInt(const char * stepname, unsigned sequence, __int64);
+    virtual void setResultInt(const char * stepname, unsigned sequence, __int64, unsigned size=0);
     virtual void setResultReal(const char * stepname, unsigned sequence, double);
     virtual void setResultBool(const char * stepname, unsigned sequence, bool);
     virtual void setResultString(const char * stepname, unsigned sequence, int len, const char *);
@@ -451,7 +451,7 @@ public:
     virtual void setResultDataset(const char * name, unsigned sequence, size32_t len, const void *val, unsigned numRows, bool extend);
     virtual void setResultRaw(const char * stepname, unsigned sequence, int len, const void *);
     virtual void setResultSet(const char *name, unsigned sequence, bool isAll, size32_t len, const void * data, ISetToXmlTransformer * transformer);
-    virtual void setResultUInt(const char * stepname, unsigned sequence, unsigned __int64);
+    virtual void setResultUInt(const char * stepname, unsigned sequence, unsigned __int64, unsigned size=0);
     virtual void setResultUnicode(const char *name, unsigned sequence, int len, UChar const * str);
     virtual void setResultDecimal(const char * stepname, unsigned sequence, int len, int precision, bool isSigned, const void *val);
     virtual void setResultVarString(const char * stepname, unsigned sequence, const char *);

+ 4 - 4
ecl/hqlcpp/hqlcppsys.ecl

@@ -460,11 +460,11 @@ const char * cppSystemText[]  = {
     "   outputXmlBool(boolean value, const varstring name) :    eclrtl,omethod,entrypoint='outputBool';",
     "   outputXmlData(const data value, const varstring nameo) :    eclrtl,omethod,entrypoint='outputData';",
     "   outputXmlDecimal(const data1 value, unsigned4 size, unsigned4 precision, const varstring name) :    eclrtl,omethod,entrypoint='outputDecimal';",
-    "   outputXmlInt(integer8 value, const varstring name) :    eclrtl,omethod,entrypoint='outputInt';",
+    "   outputXmlInt(integer8 value, unsigned4 size, const varstring name) :    eclrtl,omethod,entrypoint='outputInt';",
     "   outputXmlQString(const qstring value, const varstring name) :   eclrtl,omethod,entrypoint='outputQString';",
     "   outputXmlReal(real value, const varstring name) :   eclrtl,omethod,entrypoint='outputReal';",
     "   outputXmlString(const string value, const varstring name) : eclrtl,omethod,entrypoint='outputString';",
-    "   outputXmlUInt(unsigned8 value, const varstring name) :  eclrtl,omethod,entrypoint='outputUInt';",
+    "   outputXmlUInt(unsigned8 value, unsigned4 size, const varstring name) :  eclrtl,omethod,entrypoint='outputUInt';",
     "   outputXmlUnicode(const unicode value, const varstring name) :   eclrtl,omethod,entrypoint='outputUnicode';",
     "   outputXmlUtf8(const utf8 value, const varstring name) : eclrtl,omethod,entrypoint='outputUtf8';",
     "   outputXmlBeginArray(const varstring name) :  eclrtl,omethod,entrypoint='outputBeginArray';",
@@ -673,8 +673,8 @@ const char * cppSystemText[]  = {
     "   varstring getExpandLogicalName(const varstring lfn) : ctxmethod,entrypoint='getExpandLogicalName';",
     "   deleteFile(const varstring lfn) : gctxmethod,entrypoint='deleteFile';",
 
-    "   setResultInt(const varstring stepname, unsigned4 sequence, integer8 value) : ctxmethod,entrypoint='setResultInt';",
-    "   setResultUInt(const varstring stepname, unsigned4 sequence, unsigned8 value) : ctxmethod,entrypoint='setResultUInt';",
+    "   setResultInt(const varstring stepname, unsigned4 sequence, integer8 value, unsigned4 size) : ctxmethod,entrypoint='setResultInt';",
+    "   setResultUInt(const varstring stepname, unsigned4 sequence, unsigned8 value, unsigned4 size) : ctxmethod,entrypoint='setResultUInt';",
     "   setResultReal(const varstring stepname, unsigned4 sequence, real8 value) : ctxmethod,entrypoint='setResultReal';",
     "   setResultBool(const varstring stepname, unsigned4 sequence, boolean value) : ctxmethod,entrypoint='setResultBool';",
     "   setResultData(const varstring stepname, unsigned4 sequence, const data value) : ctxmethod,entrypoint='setResultData';",

+ 8 - 0
ecl/hqlcpp/hqlhtcpp.cpp

@@ -5108,6 +5108,7 @@ void HqlCppTranslator::buildSetResultInfo(BuildCtx & ctx, IHqlExpression * origi
     IIdAtom * func = NULL;
     CHqlBoundExpr valueToSave;
     LinkedHqlExpr castValue = value;
+    LinkedHqlExpr size;
     switch(retType)
     {
     case type_int:
@@ -5116,6 +5117,7 @@ void HqlCppTranslator::buildSetResultInfo(BuildCtx & ctx, IHqlExpression * origi
             bool isSigned = schemaType->isSigned();
             func = isSigned ? setResultIntId : setResultUIntId;
             schemaType.setown(makeIntType(8, isSigned));
+            size.setown(getSizetConstant(schemaType->getSize()));
             break;
         }
     case type_boolean:  func = setResultBoolId; break;
@@ -5240,6 +5242,8 @@ void HqlCppTranslator::buildSetResultInfo(BuildCtx & ctx, IHqlExpression * origi
             s.clear().append("&").append(helper);
             args.append(*createQuoted(s, makeBoolType()));
         }
+        else if (func == setResultIntId || func == setResultUIntId)
+            args.append(*getSizetConstant(schemaType->getSize()));
 
         buildFunctionCall(ctx, func, args);
     }
@@ -10883,6 +10887,7 @@ void HqlCppTranslator::buildXmlSerializeScalar(BuildCtx & ctx, IHqlExpression *
 {
     ITypeInfo * type = selected->queryType()->queryPromotedType();
     LinkedHqlExpr value = selected;
+    LinkedHqlExpr size;
     IIdAtom * func;
     switch (type->getTypeCode())
     {
@@ -10913,6 +10918,7 @@ void HqlCppTranslator::buildXmlSerializeScalar(BuildCtx & ctx, IHqlExpression *
     case type_swapint:
     case type_packedint:
     case type_bitfield:
+        size.setown(createConstant((__int64)type->getSize()));
         if (type->isSigned())
             func = outputXmlIntId;
         else
@@ -10929,6 +10935,8 @@ void HqlCppTranslator::buildXmlSerializeScalar(BuildCtx & ctx, IHqlExpression *
     HqlExprArray args;
     args.append(*createVariable("out", makeBoolType()));
     args.append(*value.getLink());
+    if (size)
+        args.append(*LINK(size));
     if (name)
         args.append(*LINK(name));
     else

+ 2 - 2
esp/esdllib/esdl_transformer2.cpp

@@ -397,13 +397,13 @@ void Esdl2Base::output_content(Esdl2TransformerContext &ctx, const char * conten
                     case ESDLT_INT16:
                     case ESDLT_INT32:
                     case ESDLT_INT64:
-                        ctx.writer->outputInt(atoi(content), tagname);
+                        ctx.writer->outputInt(atoi(content), 0, tagname);
                         break;
                     case ESDLT_UINT8:
                     case ESDLT_UINT16:
                     case ESDLT_UINT32:
                     case ESDLT_UINT64:
-                        ctx.writer->outputUInt(atoi(content), tagname);
+                        ctx.writer->outputUInt(atoi(content), 0, tagname);
                         break;
                     case ESDLT_BYTE:
                     case ESDLT_UBYTE:

+ 2 - 2
roxie/ccd/ccdactivities.cpp

@@ -468,12 +468,12 @@ public:
     virtual void setResultBool(const char *name, unsigned sequence, bool value) { throwUnexpected(); }
     virtual void setResultData(const char *name, unsigned sequence, int len, const void * data) { throwUnexpected(); }
     virtual void setResultDecimal(const char * stepname, unsigned sequence, int len, int precision, bool isSigned, const void *val) { throwUnexpected(); } 
-    virtual void setResultInt(const char *name, unsigned sequence, __int64 value) { throwUnexpected(); }
+    virtual void setResultInt(const char *name, unsigned sequence, __int64 value, unsigned size) { throwUnexpected(); }
     virtual void setResultRaw(const char *name, unsigned sequence, int len, const void * data) { throwUnexpected(); }
     virtual void setResultReal(const char * stepname, unsigned sequence, double value) { throwUnexpected(); }
     virtual void setResultSet(const char *name, unsigned sequence, bool isAll, size32_t len, const void * data, ISetToXmlTransformer * transformer) { throwUnexpected(); }
     virtual void setResultString(const char *name, unsigned sequence, int len, const char * str) { throwUnexpected(); }
-    virtual void setResultUInt(const char *name, unsigned sequence, unsigned __int64 value) { throwUnexpected(); }
+    virtual void setResultUInt(const char *name, unsigned sequence, unsigned __int64 value, unsigned size) { throwUnexpected(); }
     virtual void setResultUnicode(const char *name, unsigned sequence, int len, UChar const * str) { throwUnexpected(); }
     virtual void setResultVarString(const char * name, unsigned sequence, const char * value) { throwUnexpected(); }
     virtual void setResultVarUnicode(const char * name, unsigned sequence, UChar const * value) { throwUnexpected(); }

+ 14 - 10
roxie/ccd/ccdcontext.cpp

@@ -179,7 +179,7 @@ public:
             {
                 output->outputBeginNested("edge", true);
                 output->outputCString((const char *) edges.query().getKey(), "@edgeId");
-                output->outputUInt(edge->queryCount(), "@count");
+                output->outputUInt(edge->queryCount(), 0, "@count");
                 output->outputEndNested("edge");
             }
             if (reset)
@@ -332,7 +332,7 @@ private:
         return r->getResultInt();
     }
 
-    void setResultInt(const char * name, unsigned sequence, unsigned __int64 value)
+    void setResultInt(const char * name, unsigned sequence, unsigned __int64 value, unsigned size=0)
     {
         WorkunitUpdate w(&workunit->lock());
         w->setResultInt(name, sequence, value);
@@ -1517,12 +1517,12 @@ public:
     virtual void setResultBool(const char *name, unsigned sequence, bool value) { throwUnexpected(); }
     virtual void setResultData(const char *name, unsigned sequence, int len, const void * data) { throwUnexpected(); }
     virtual void setResultDecimal(const char * stepname, unsigned sequence, int len, int precision, bool isSigned, const void *val) { throwUnexpected(); }
-    virtual void setResultInt(const char *name, unsigned sequence, __int64 value) { throwUnexpected(); }
+    virtual void setResultInt(const char *name, unsigned sequence, __int64 value, unsigned size) { throwUnexpected(); }
     virtual void setResultRaw(const char *name, unsigned sequence, int len, const void * data) { throwUnexpected(); }
     virtual void setResultReal(const char * stepname, unsigned sequence, double value) { throwUnexpected(); }
     virtual void setResultSet(const char *name, unsigned sequence, bool isAll, size32_t len, const void * data, ISetToXmlTransformer * transformer) { throwUnexpected(); }
     virtual void setResultString(const char *name, unsigned sequence, int len, const char * str) { throwUnexpected(); }
-    virtual void setResultUInt(const char *name, unsigned sequence, unsigned __int64 value) { throwUnexpected(); }
+    virtual void setResultUInt(const char *name, unsigned sequence, unsigned __int64 value, unsigned size) { throwUnexpected(); }
     virtual void setResultUnicode(const char *name, unsigned sequence, int len, UChar const * str) { throwUnexpected(); }
     virtual void setResultVarString(const char * name, unsigned sequence, const char * value) { throwUnexpected(); }
     virtual void setResultVarUnicode(const char * name, unsigned sequence, UChar const * value) { throwUnexpected(); }
@@ -3235,7 +3235,7 @@ public:
             }
         }
     }
-    virtual void setResultInt(const char *name, unsigned sequence, __int64 value)
+    virtual void setResultInt(const char *name, unsigned sequence, __int64 value, unsigned size)
     {
         if (isSpecialResultSequence(sequence))
         {
@@ -3247,11 +3247,13 @@ public:
             FlushingStringBuffer *r = queryResult(sequence);
             if (r)
             {
-                r->startScalar(name, sequence);
                 if (isRaw)
+                {
+                    r->startScalar(name, sequence);
                     r->append(sizeof(value), (char *)&value);
+                }
                 else
-                    r->appendf("%"I64F"d", value);
+                    r->setScalarInt(name, sequence, value, size);
             }
         }
 
@@ -3277,7 +3279,7 @@ public:
         }
     }
 
-    virtual void setResultUInt(const char *name, unsigned sequence, unsigned __int64 value)
+    virtual void setResultUInt(const char *name, unsigned sequence, unsigned __int64 value, unsigned size=0)
     {
         if (isSpecialResultSequence(sequence))
         {
@@ -3289,11 +3291,13 @@ public:
             FlushingStringBuffer *r = queryResult(sequence);
             if (r)
             {
-                r->startScalar(name, sequence);
                 if (isRaw)
+                {
+                    r->startScalar(name, sequence);
                     r->append(sizeof(value), (char *)&value);
+                }
                 else
-                    r->appendf("%"I64F"u", value);
+                    r->setScalarUInt(name, sequence, value, size);
             }
         }
 

+ 7 - 7
roxie/ccd/ccddebug.cpp

@@ -509,14 +509,14 @@ class DebugProbe : public InputProbe, implements IActivityDebugContext
     {
         output->outputBeginNested("att", false);
         output->outputCString(name, "@name");
-        output->outputInt(value, "@value");
+        output->outputInt(value, 0, "@value");
         output->outputEndNested("att");
     }
 
     void rowToXML(IXmlWriter *output, const void *row, unsigned sequence, unsigned rowCount, bool skipped, bool limited, bool eof, bool eog) const
     {
         output->outputBeginNested("Row", true);
-        output->outputInt(sequence, "@seq");
+        output->outputInt(sequence, 0, "@seq");
         if (skipped)
             output->outputBool(true, "@skip");
         if (limited)
@@ -527,9 +527,9 @@ class DebugProbe : public InputProbe, implements IActivityDebugContext
             output->outputBool(true, "@eog");
         if (row)
         {
-            output->outputInt(rowCount, "@count");
+            output->outputInt(rowCount, 0, "@count");
             IOutputMetaData *meta = queryOutputMeta();
-            output->outputInt(meta->getRecordSize(row), "@size");
+            output->outputInt(meta->getRecordSize(row), 0, "@size");
             meta->toXML((const byte *) row, *output);
         }
         output->outputEndNested("Row");
@@ -675,8 +675,8 @@ public:
                         else
                         {
                             output->outputBeginNested("Row", true);
-                            output->outputInt(rowData->querySequence(), "@sequence");
-                            output->outputInt(rowData->queryRowCount(), "@count");
+                            output->outputInt(rowData->querySequence(), 0, "@sequence");
+                            output->outputInt(rowData->queryRowCount(), 0, "@count");
                             output->outputEndNested("Row");
                         }
                     }
@@ -1270,7 +1270,7 @@ public:
             output->outputBeginNested("Result", true);
             IActivityDebugContext *edge = manager->lookupActivityByEdgeId(id);
             if (edge)
-                output->outputInt(edge->queryProxyId(), "@proxyId");
+                output->outputInt(edge->queryProxyId(), 0, "@proxyId");
             output->outputEndNested("Result");
         }
         else

+ 12 - 10
rtl/eclrtl/rtlfield.cpp

@@ -201,9 +201,9 @@ size32_t RtlIntTypeInfo::process(const byte * self, const byte * selfrow, const
 size32_t RtlIntTypeInfo::toXML(const byte * self, const byte * selfrow, const RtlFieldInfo * field, IXmlWriter & target) const
 {
     if (isUnsigned())
-        target.outputUInt(rtlReadUInt(self, length), queryXPath(field));
+        target.outputUInt(rtlReadUInt(self, length), length, queryXPath(field));
     else
-        target.outputInt(rtlReadInt(self, length), queryXPath(field));
+        target.outputInt(rtlReadInt(self, length), length, queryXPath(field));
     return length;
 }
 
@@ -231,9 +231,9 @@ size32_t RtlSwapIntTypeInfo::process(const byte * self, const byte * selfrow, co
 size32_t RtlSwapIntTypeInfo::toXML(const byte * self, const byte * selfrow, const RtlFieldInfo * field, IXmlWriter & target) const
 {
     if (isUnsigned())
-        target.outputUInt(rtlReadSwapUInt(self, length), queryXPath(field));
+        target.outputUInt(rtlReadSwapUInt(self, length), length, queryXPath(field));
     else
-        target.outputInt(rtlReadSwapInt(self, length), queryXPath(field));
+        target.outputInt(rtlReadSwapInt(self, length), length, queryXPath(field));
     return length;
 }
 
@@ -265,11 +265,12 @@ size32_t RtlPackedIntTypeInfo::process(const byte * self, const byte * selfrow,
 
 size32_t RtlPackedIntTypeInfo::toXML(const byte * self, const byte * selfrow, const RtlFieldInfo * field, IXmlWriter & target) const
 {
+    size32_t fieldsize = rtlGetPackedSize(self);
     if (isUnsigned())
-        target.outputUInt(rtlGetPackedUnsigned(self), queryXPath(field));
+        target.outputUInt(rtlGetPackedUnsigned(self), fieldsize, queryXPath(field));
     else
-        target.outputInt(rtlGetPackedSigned(self), queryXPath(field));
-    return rtlGetPackedSize(self); 
+        target.outputInt(rtlGetPackedSigned(self), fieldsize, queryXPath(field));
+    return fieldsize;
 }
 
 //-------------------------------------------------------------------------------------------------------------------
@@ -1417,11 +1418,12 @@ size32_t RtlBitfieldTypeInfo::process(const byte * self, const byte * selfrow, c
 
 size32_t RtlBitfieldTypeInfo::toXML(const byte * self, const byte * selfrow, const RtlFieldInfo * field, IXmlWriter & target) const
 {
+    size32_t fieldsize = size(self, selfrow);
     if (isUnsigned())
-        target.outputUInt(unsignedValue(self), queryXPath(field));
+        target.outputUInt(unsignedValue(self), fieldsize, queryXPath(field));
     else
-        target.outputInt(signedValue(self), queryXPath(field));
-    return size(self, selfrow);
+        target.outputInt(signedValue(self), fieldsize, queryXPath(field));
+    return fieldsize;
 }
 
 //-------------------------------------------------------------------------------------------------------------------

+ 6 - 6
rtl/include/eclhelper.hpp

@@ -39,8 +39,8 @@ if the supplied pointer was not from the roxiemem heap. Usually an OwnedRoxieStr
 
 //Should be incremented whenever the virtuals in the context or a helper are changed, so
 //that a work unit can't be rerun.  Try as hard as possible to retain compatibility.
-#define ACTIVITY_INTERFACE_VERSION      156
-#define MIN_ACTIVITY_INTERFACE_VERSION  156             //minimum value that is compatible with current interface - without using selectInterface
+#define ACTIVITY_INTERFACE_VERSION      157
+#define MIN_ACTIVITY_INTERFACE_VERSION  157             //minimum value that is compatible with current interface - without using selectInterface
 
 typedef unsigned char byte;
 
@@ -161,8 +161,8 @@ public:
     virtual void outputString(unsigned len, const char *field, const char *fieldname) = 0;
     virtual void outputBool(bool field, const char *fieldname) = 0;
     virtual void outputData(unsigned len, const void *field, const char *fieldname) = 0;
-    virtual void outputInt(__int64 field, const char *fieldname) = 0;
-    virtual void outputUInt(unsigned __int64 field, const char *fieldname) = 0;
+    virtual void outputInt(__int64 field, unsigned size, const char *fieldname) = 0;
+    virtual void outputUInt(unsigned __int64 field, unsigned size, const char *fieldname) = 0;
     virtual void outputReal(double field, const char *fieldname) = 0;
     virtual void outputDecimal(const void *field, unsigned size, unsigned precision, const char *fieldname) = 0;
     virtual void outputUDecimal(const void *field, unsigned size, unsigned precision, const char *fieldname) = 0;
@@ -569,12 +569,12 @@ interface ICodeContext : public IResourceContext
     virtual void setResultBool(const char *name, unsigned sequence, bool value) = 0;
     virtual void setResultData(const char *name, unsigned sequence, int len, const void * data) = 0;
     virtual void setResultDecimal(const char * stepname, unsigned sequence, int len, int precision, bool isSigned, const void *val) = 0; 
-    virtual void setResultInt(const char *name, unsigned sequence, __int64 value) = 0;
+    virtual void setResultInt(const char *name, unsigned sequence, __int64 value, unsigned size) = 0;
     virtual void setResultRaw(const char *name, unsigned sequence, int len, const void * data) = 0;
     virtual void setResultReal(const char * stepname, unsigned sequence, double value) = 0;
     virtual void setResultSet(const char *name, unsigned sequence, bool isAll, size32_t len, const void * data, ISetToXmlTransformer * transformer) = 0;
     virtual void setResultString(const char *name, unsigned sequence, int len, const char * str) = 0;
-    virtual void setResultUInt(const char *name, unsigned sequence, unsigned __int64 value) = 0;
+    virtual void setResultUInt(const char *name, unsigned sequence, unsigned __int64 value, unsigned size) = 0;
     virtual void setResultUnicode(const char *name, unsigned sequence, int len, UChar const * str) = 0;
     virtual void setResultVarString(const char * name, unsigned sequence, const char * value) = 0;
     virtual void setResultVarUnicode(const char * name, unsigned sequence, UChar const * value) = 0;

+ 4 - 2
testing/regress/ecl/jsonout.ecl

@@ -40,6 +40,8 @@ personRecord :=
             RECORD
 string20        surname;
 string10        forename;
+integer4        category;
+integer8        uid;
 phoneRecord     homePhone;
 boolean         hasMobile;
                 ifblock(self.hasMobile)
@@ -52,8 +54,8 @@ string2         endmarker := '$$';
             END;
 
 namesTable := dataset([
-        {'Halliday','Gavin','09876',123456,true,'07967',838690, 'n/a','n/a',true,'gavin@edata.com',[{'To kill a mocking bird','Lee'},{'Zen and the art of motorcycle maintainence','Pirsig'}], ALL},
-        {'Halliday','Abigail','09876',654321,false,'','',false,[{'The cat in the hat','Suess'},{'Wolly the sheep',''}], ['Red','Yellow']}
+        {'Halliday','Gavin', 1, 1, '09876',123456,true,'07967',838690, 'n/a','n/a',true,'gavin@edata.com',[{'To kill a mocking bird','Lee'},{'Zen and the art of motorcycle maintainence','Pirsig'}], ALL},
+        {'Halliday','Abigail', 1, 2, '09876',654321,false,'','',false,[{'The cat in the hat','Suess'},{'Wolly the sheep',''}], ['Red','Yellow']}
         ], personRecord);
 
 output(namesTable,,'REGRESS::TEMP::output_object_namedArray.json',overwrite, json);

File diff ditekan karena terlalu besar
+ 6 - 6
testing/regress/ecl/key/jsonout.xml


+ 2 - 2
thorlcr/graph/thgraph.hpp

@@ -449,12 +449,12 @@ class graph_decl CGraphBase : public CInterface, implements IEclGraphResults, im
         virtual void setResultBool(const char *name, unsigned sequence, bool value) { ctx->setResultBool(name, sequence, value); }
         virtual void setResultData(const char *name, unsigned sequence, int len, const void * data) { ctx->setResultData(name, sequence, len, data); }
         virtual void setResultDecimal(const char * stepname, unsigned sequence, int len, int precision, bool isSigned, const void *val) { ctx->setResultDecimal(stepname, sequence, len, precision, isSigned, val); }
-        virtual void setResultInt(const char *name, unsigned sequence, __int64 value) { ctx->setResultInt(name, sequence, value); }
+        virtual void setResultInt(const char *name, unsigned sequence, __int64 value, unsigned size) { ctx->setResultInt(name, sequence, value, size); }
         virtual void setResultRaw(const char *name, unsigned sequence, int len, const void * data) { ctx->setResultRaw(name, sequence, len, data); }
         virtual void setResultReal(const char * stepname, unsigned sequence, double value) { ctx->setResultReal(stepname, sequence, value); }
         virtual void setResultSet(const char *name, unsigned sequence, bool isAll, size32_t len, const void * data, ISetToXmlTransformer * transformer) { ctx->setResultSet(name, sequence, isAll, len, data, transformer); }
         virtual void setResultString(const char *name, unsigned sequence, int len, const char * str) { ctx->setResultString(name, sequence, len, str); }
-        virtual void setResultUInt(const char *name, unsigned sequence, unsigned __int64 value) { ctx->setResultUInt(name, sequence, value); }
+        virtual void setResultUInt(const char *name, unsigned sequence, unsigned __int64 value, unsigned size) { ctx->setResultUInt(name, sequence, value, size); }
         virtual void setResultUnicode(const char *name, unsigned sequence, int len, UChar const * str) { ctx->setResultUnicode(name, sequence, len, str); }
         virtual void setResultVarString(const char * name, unsigned sequence, const char * value) { ctx->setResultVarString(name, sequence, value); }
         virtual void setResultVarUnicode(const char * name, unsigned sequence, UChar const * value) { ctx->setResultVarUnicode(name, sequence, value); }

+ 4 - 4
thorlcr/graph/thgraphmaster.cpp

@@ -866,12 +866,12 @@ public:
         else
             throw MakeStringException(TE_UnexpectedParameters, "Unexpected parameters to setResultDecimal");
     }
-    virtual void setResultInt(const char *name, unsigned sequence, __int64 result)
+    virtual void setResultInt(const char *name, unsigned sequence, __int64 result, unsigned size)
     {
         Owned<IWUResult> r = updateResult(name, sequence);
         if (r)
         {
-            r->setResultInt(result);    
+            r->setResultInt(result);
             r->setResultStatus(ResultStatusCalculated);
         }
         else
@@ -944,12 +944,12 @@ public:
         else
             throw MakeStringException(TE_UnexpectedParameters, "Unexpected parameters to setResultVarString");
     }
-    virtual void setResultUInt(const char *name, unsigned sequence, unsigned __int64 result)
+    virtual void setResultUInt(const char *name, unsigned sequence, unsigned __int64 result, unsigned size)
     {
         Owned<IWUResult> r = updateResult(name, sequence);
         if (r)
         {
-            r->setResultUInt(result);   
+            r->setResultUInt(result);
             r->setResultStatus(ResultStatusCalculated);
         }
         else

+ 2 - 2
thorlcr/graph/thgraphslave.cpp

@@ -927,12 +927,12 @@ public:
     virtual void setResultBool(const char *name, unsigned sequence, bool value) { throwUnexpected(); }
     virtual void setResultData(const char *name, unsigned sequence, int len, const void * data) { throwUnexpected(); }
     virtual void setResultDecimal(const char * stepname, unsigned sequence, int len, int precision, bool isSigned, const void *val) { throwUnexpected(); } 
-    virtual void setResultInt(const char *name, unsigned sequence, __int64 value) { throwUnexpected(); }
+    virtual void setResultInt(const char *name, unsigned sequence, __int64 value, unsigned size) { throwUnexpected(); }
     virtual void setResultRaw(const char *name, unsigned sequence, int len, const void * data) { throwUnexpected(); }
     virtual void setResultReal(const char * stepname, unsigned sequence, double value) { throwUnexpected(); }
     virtual void setResultSet(const char *name, unsigned sequence, bool isAll, size32_t len, const void * data, ISetToXmlTransformer * transformer) { throwUnexpected(); }
     virtual void setResultString(const char *name, unsigned sequence, int len, const char * str) { throwUnexpected(); }
-    virtual void setResultUInt(const char *name, unsigned sequence, unsigned __int64 value) { throwUnexpected(); }
+    virtual void setResultUInt(const char *name, unsigned sequence, unsigned __int64 value, unsigned size) { throwUnexpected(); }
     virtual void setResultUnicode(const char *name, unsigned sequence, int len, UChar const * str) { throwUnexpected(); }
     virtual void setResultVarString(const char * name, unsigned sequence, const char * value) { throwUnexpected(); }
     virtual void setResultVarUnicode(const char * name, unsigned sequence, UChar const * value) { throwUnexpected(); }