Browse Source

HPCC-11922 Move isnumeric flag out of IxmlWriter methods

Implement new IxmlWriterExt method for numeric represented as strings

Signed-off-by: rpastrana <rodrigo.pastrana@lexisnexis.com>
rpastrana 10 years ago
parent
commit
8be2855da5

+ 2 - 2
common/thorhelper/roxiedebug.cpp

@@ -410,7 +410,7 @@ public:
     virtual void outputInlineXml(const char *xml){}
     virtual void outputQuoted(const char *text) { }
 
-    virtual void outputString(unsigned len, const char *field, const char *fieldname, bool isnumeric)
+    virtual void outputString(unsigned len, const char *field, const char *fieldname)
     {
         if (!matchSeen && checkFieldName(fieldname) && (len >= searchStringLength))
         {
@@ -480,7 +480,7 @@ public:
     {
         // Searching/breaking on unicode not supported at the moment
     }
-    virtual void outputQString(unsigned len, const char *field, const char *fieldname, bool isnumeric)
+    virtual void outputQString(unsigned len, const char *field, const char *fieldname)
     {
         if (!matchSeen && checkFieldName(fieldname))
         {

+ 27 - 11
common/thorhelper/thorxmlwrite.cpp

@@ -75,7 +75,7 @@ void CommonXmlWriter::outputQuoted(const char *text)
     out.append(text);
 }
 
-void CommonXmlWriter::outputString(unsigned len, const char *field, const char *fieldname, bool isnumeric)
+void CommonXmlWriter::outputString(unsigned len, const char *field, const char *fieldname)
 {
     if (flags & XWFtrim)
         len = rtlTrimStrLen(len, field);
@@ -94,7 +94,7 @@ void CommonXmlWriter::outputString(unsigned len, const char *field, const char *
 }
 
 
-void CommonXmlWriter::outputQString(unsigned len, const char *field, const char *fieldname, bool isnumeric)
+void CommonXmlWriter::outputQString(unsigned len, const char *field, const char *fieldname)
 {
     MemoryAttr tempBuffer;
     char * temp;
@@ -103,7 +103,8 @@ void CommonXmlWriter::outputQString(unsigned len, const char *field, const char
     else
         temp = (char *)tempBuffer.allocate(len);
     rtlQStrToStr(len, temp, len, field);
-    outputString(len, temp, fieldname, isnumeric);
+//    outputString(len, temp, fieldname, isnumeric);
+    outputString(len, temp, fieldname);
 }
 
 
@@ -439,17 +440,31 @@ void CommonJsonWriter::outputQuoted(const char *text)
     appendJSONValue(out, NULL, text);
 }
 
-void CommonJsonWriter::outputString(unsigned len, const char *field, const char *fieldname, bool isnumeric)
+void CommonJsonWriter::outputNumericString(const char *field, const char *fieldname)
+{
+    unsigned len = (size32_t)strlen(field);
+
+    if (flags & XWFtrim)
+        len = rtlTrimStrLen(len, field);
+    if ((flags & XWFopt) && (rtlTrimStrLen(len, field) == 0))
+        return;
+    checkDelimit();
+
+    appendJSONStringValue(out, checkItemName(fieldname), len, field, true, false);
+}
+
+void CommonJsonWriter::outputString(unsigned len, const char *field, const char *fieldname)
 {
     if (flags & XWFtrim)
         len = rtlTrimStrLen(len, field);
     if ((flags & XWFopt) && (rtlTrimStrLen(len, field) == 0))
         return;
     checkDelimit();
-    appendJSONStringValue(out, checkItemName(fieldname), len, field, !isnumeric);
+
+    appendJSONStringValue(out, checkItemName(fieldname), len, field, true);
 }
 
-void CommonJsonWriter::outputQString(unsigned len, const char *field, const char *fieldname, bool isnumeric)
+void CommonJsonWriter::outputQString(unsigned len, const char *field, const char *fieldname)
 {
     MemoryAttr tempBuffer;
     char * temp;
@@ -458,7 +473,8 @@ void CommonJsonWriter::outputQString(unsigned len, const char *field, const char
     else
         temp = (char *)tempBuffer.allocate(len);
     rtlQStrToStr(len, temp, len, field);
-    outputString(len, temp, fieldname, isnumeric);
+    //outputString(len, temp, fieldname, isnumeric);
+    outputString(len, temp, fieldname);
 }
 
 void CommonJsonWriter::outputBool(bool field, const char *fieldname)
@@ -790,7 +806,7 @@ CommonEncodedXmlWriter::CommonEncodedXmlWriter(unsigned _flags, unsigned initial
 {
 }
 
-void CommonEncodedXmlWriter::outputString(unsigned len, const char *field, const char *fieldname, bool isnumeric)
+void CommonEncodedXmlWriter::outputString(unsigned len, const char *field, const char *fieldname)
 {
     if (flags & XWFtrim)
         len = rtlTrimStrLen(len, field);
@@ -1015,13 +1031,13 @@ void SimpleOutputWriter::outputQuoted(const char *text)
     out.append(text);
 }
 
-void SimpleOutputWriter::outputString(unsigned len, const char *field, const char *, bool isnumeric)
+void SimpleOutputWriter::outputString(unsigned len, const char *field, const char *)
 {
     outputFieldSeparator();
     out.append(len, field);
 }
 
-void SimpleOutputWriter::outputQString(unsigned len, const char *field, const char *fieldname, bool isnumeric)
+void SimpleOutputWriter::outputQString(unsigned len, const char *field, const char *fieldname)
 {
     MemoryAttr tempBuffer;
     char * temp;
@@ -1030,7 +1046,7 @@ void SimpleOutputWriter::outputQString(unsigned len, const char *field, const ch
     else
         temp = (char *)tempBuffer.allocate(len);
     rtlQStrToStr(len, temp, len, field);
-    outputString(len, temp, fieldname, isnumeric);
+    outputString(len, temp, fieldname);
 }
 
 void SimpleOutputWriter::outputBool(bool field, const char *)

+ 12 - 7
common/thorhelper/thorxmlwrite.hpp

@@ -43,6 +43,10 @@ interface IXmlWriterExt : extends IXmlWriter
     virtual size32_t length() const = 0;
     virtual const char *str() const = 0;
     virtual void rewindTo(unsigned int prevlen) = 0;
+    virtual void outputNumericString(const char *field, const char *fieldname)
+    {
+        outputCString(field, fieldname);
+    }
 };
 
 class thorhelper_decl CommonXmlWriter : public CInterface, implements IXmlWriterExt
@@ -57,8 +61,8 @@ public:
 
     virtual void outputInlineXml(const char *text){closeTag(); out.append(text); flush(false);} //for appending raw xml content
     virtual void outputQuoted(const char *text);
-    virtual void outputQString(unsigned len, const char *field, const char *fieldname, bool isnumeric);
-    virtual void outputString(unsigned len, const char *field, const char *fieldname, bool isnumeric);
+    virtual void outputQString(unsigned len, const char *field, const char *fieldname);
+    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);
@@ -123,8 +127,8 @@ public:
             outputUtf8(strlen(text), text, "xml");
     }
     virtual void outputQuoted(const char *text);
-    virtual void outputQString(unsigned len, const char *field, const char *fieldname, bool isnumeric=false);
-    virtual void outputString(unsigned len, const char *field, const char *fieldname, bool isnumeric=false);
+    virtual void outputQString(unsigned len, const char *field, const char *fieldname);
+    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);
@@ -142,6 +146,7 @@ public:
     virtual void outputEndArray(const char *fieldname);
     virtual void outputSetAll();
     virtual void outputXmlns(const char *name, const char *uri){}
+    virtual void outputNumericString(const char *field, const char *fieldname);
 
     //IXmlWriterExt
     virtual IXmlWriterExt & clear();
@@ -193,7 +198,7 @@ class thorhelper_decl CommonEncodedXmlWriter : public CommonXmlWriter
 public:
     CommonEncodedXmlWriter(unsigned _flags, unsigned initialIndent=0, IXmlStreamFlusher *_flusher=NULL);
 
-    virtual void outputString(unsigned len, const char *field, const char *fieldname, bool isnumeric);
+    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);
@@ -231,8 +236,8 @@ public:
     const char * str() const                                { return out.str(); }
 
     virtual void outputQuoted(const char *text);
-    virtual void outputQString(unsigned len, const char *field, const char *fieldname, bool isnumeric);
-    virtual void outputString(unsigned len, const char *field, const char *fieldname, bool isnumeric);
+    virtual void outputQString(unsigned len, const char *field, const char *fieldname);
+    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);

+ 3 - 3
rtl/include/eclhelper.hpp

@@ -158,7 +158,7 @@ interface IXmlWriter : public IInterface
 {
 public:
     virtual void outputQuoted(const char *text) = 0;
-    virtual void outputString(unsigned len, const char *field, const char *fieldname, bool isnumeric = false) = 0;
+    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;
@@ -167,7 +167,7 @@ public:
     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;
     virtual void outputUnicode(unsigned len, const UChar *field, const char *fieldname) = 0;
-    virtual void outputQString(unsigned len, const char *field, const char *fieldname, bool isnumeric = false) = 0;
+    virtual void outputQString(unsigned len, const char *field, const char *fieldname) = 0;
     virtual void outputBeginDataset(const char *dsname, bool nestChildren) = 0;
     virtual void outputEndDataset(const char *dsname) = 0;
     virtual void outputBeginNested(const char *fieldname, bool nestChildren) = 0;
@@ -178,7 +178,7 @@ public:
     virtual void outputEndArray(const char *fieldname) = 0;
     virtual void outputInlineXml(const char *text) = 0; //for appending raw xml content
     virtual void outputXmlns(const char *name, const char *uri) = 0;
-    inline void outputCString(const char *field, const char *fieldname, bool isnumeric = false) { outputString((size32_t)strlen(field), field, fieldname, isnumeric); }
+    inline void outputCString(const char *field, const char *fieldname) { outputString((size32_t)strlen(field), field, fieldname); }
 };
 
 interface IFieldProcessor : public IInterface