thorxmlread.hpp 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. /*##############################################################################
  2. HPCC SYSTEMS software Copyright (C) 2012 HPCC Systems®.
  3. Licensed under the Apache License, Version 2.0 (the "License");
  4. you may not use this file except in compliance with the License.
  5. You may obtain a copy of the License at
  6. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. ############################################################################## */
  13. #ifndef THORXMLREAD_HPP
  14. #define THORXMLREAD_HPP
  15. #ifdef _WIN32
  16. #ifdef THORHELPER_EXPORTS
  17. #define thorhelper_decl __declspec(dllexport)
  18. #else
  19. #define thorhelper_decl __declspec(dllimport)
  20. #endif
  21. #else
  22. #define thorhelper_decl
  23. #endif
  24. #include "eclhelper.hpp"
  25. #include "jptree.hpp"
  26. #include "thorhelper.hpp"
  27. #include "csvsplitter.hpp"
  28. class thorhelper_decl XmlColumnProvider : implements IColumnProvider, public CInterface
  29. {
  30. public:
  31. IMPLEMENT_IINTERFACE;
  32. void setRow(IPropertyTree * _row) { row.set(_row); }
  33. protected:
  34. Owned<IPropertyTree> row;
  35. };
  36. class thorhelper_decl XmlDatasetColumnProvider : public XmlColumnProvider
  37. {
  38. public:
  39. //IColumnProvider
  40. virtual bool getBool(const char * name);
  41. virtual void getData(size32_t len, void * text, const char * name);
  42. virtual void getDataX(size32_t & len, void * & text, const char * name);
  43. virtual __int64 getInt(const char * name);
  44. virtual void getQString(size32_t len, char * text, const char * name);
  45. virtual void getString(size32_t len, char * text, const char * name);
  46. virtual void getStringX(size32_t & len, char * & text, const char * name);
  47. virtual void getUnicodeX(size32_t & len, UChar * & text, const char * name);
  48. virtual void getUtf8X(size32_t & len, char * & text, const char * path);
  49. virtual bool getIsSetAll(const char * path);
  50. virtual IColumnProviderIterator * getChildIterator(const char * path);
  51. virtual bool readBool(const char * path, bool _default);
  52. virtual void readData(size32_t len, void * text, const char * path, size32_t _lenDefault, const void * _default);
  53. virtual void readDataX(size32_t & len, void * & text, const char * path, size32_t _lenDefault, const void * _default);
  54. virtual __int64 readInt(const char * path, __int64 _default);
  55. virtual void readQString(size32_t len, char * text, const char * path, size32_t _lenDefault, const char * _default);
  56. virtual void readString(size32_t len, char * text, const char * path, size32_t _lenDefault, const char * _default);
  57. virtual void readStringX(size32_t & len, char * & text, const char * path, size32_t _lenDefault, const char * _default);
  58. virtual void readUnicodeX(size32_t & len, UChar * & text, const char * path, size32_t _lenDefault, const UChar * _default);
  59. virtual bool readIsSetAll(const char * path, bool _default);
  60. virtual void readUtf8X(size32_t & len, char * & text, const char * path, size32_t _lenDefault, const char * _default);
  61. virtual void getDataRaw(size32_t len, void * text, const char * name);
  62. virtual void getDataRawX(size32_t & len, void * & text, const char * name);
  63. virtual void readDataRaw(size32_t len, void * text, const char * path, size32_t _lenDefault, const void * _default);
  64. virtual void readDataRawX(size32_t & len, void * & text, const char * path, size32_t _lenDefault, const void * _default);
  65. };
  66. class thorhelper_decl XmlColumnIterator : implements IColumnProviderIterator, public CInterface
  67. {
  68. public:
  69. XmlColumnIterator(IPropertyTreeIterator * _iter);
  70. IMPLEMENT_IINTERFACE;
  71. virtual IColumnProvider * first();
  72. virtual IColumnProvider * next();
  73. protected:
  74. void setCurrent();
  75. protected:
  76. Owned<IPropertyTreeIterator> iter;
  77. Linked<XmlDatasetColumnProvider> cur;
  78. };
  79. class thorhelper_decl XmlSetColumnProvider : public XmlColumnProvider
  80. {
  81. public:
  82. //IColumnProvider
  83. virtual bool getBool(const char * name);
  84. virtual void getData(size32_t len, void * text, const char * name);
  85. virtual void getDataX(size32_t & len, void * & text, const char * name);
  86. virtual __int64 getInt(const char * name);
  87. virtual void getQString(size32_t len, char * text, const char * name);
  88. virtual void getString(size32_t len, char * text, const char * name);
  89. virtual void getStringX(size32_t & len, char * & text, const char * name);
  90. virtual void getUnicodeX(size32_t & len, UChar * & text, const char * name);
  91. virtual void getUtf8X(size32_t & len, char * & text, const char * path);
  92. virtual bool getIsSetAll(const char * path);
  93. virtual IColumnProviderIterator * getChildIterator(const char * path);
  94. virtual bool readBool(const char * path, bool _default);
  95. virtual void readData(size32_t len, void * text, const char * path, size32_t _lenDefault, const void * _default);
  96. virtual void readDataX(size32_t & len, void * & text, const char * path, size32_t _lenDefault, const void * _default);
  97. virtual __int64 readInt(const char * path, __int64 _default);
  98. virtual void readQString(size32_t len, char * text, const char * path, size32_t _lenDefault, const char * _default);
  99. virtual void readString(size32_t len, char * text, const char * path, size32_t _lenDefault, const char * _default);
  100. virtual void readStringX(size32_t & len, char * & text, const char * path, size32_t _lenDefault, const char * _default);
  101. virtual void readUnicodeX(size32_t & len, UChar * & text, const char * path, size32_t _lenDefault, const UChar * _default);
  102. virtual bool readIsSetAll(const char * path, bool _default);
  103. virtual void readUtf8X(size32_t & len, char * & text, const char * path, size32_t _lenDefault, const char * _default);
  104. virtual void getDataRaw(size32_t len, void * text, const char * name);
  105. virtual void getDataRawX(size32_t & len, void * & text, const char * name);
  106. virtual void readDataRaw(size32_t len, void * text, const char * path, size32_t _lenDefault, const void * _default);
  107. virtual void readDataRawX(size32_t & len, void * & text, const char * path, size32_t _lenDefault, const void * _default);
  108. };
  109. class thorhelper_decl CXmlToRawTransformer : implements IXmlToRawTransformer, public CInterface
  110. {
  111. public:
  112. CXmlToRawTransformer(IXmlToRowTransformer & _rowTransformer, PTreeReaderOptions _xmlReadFlags)
  113. : rowTransformer(&_rowTransformer), xmlReadFlags(_xmlReadFlags)
  114. {
  115. }
  116. IMPLEMENT_IINTERFACE
  117. virtual IDataVal & transform(IDataVal & result, size32_t len, const void * text, bool isDataset);
  118. virtual IDataVal & transformTree(IDataVal & result, IPropertyTree &tree, bool isDataset);
  119. protected:
  120. Linked<IXmlToRowTransformer> rowTransformer;
  121. PTreeReaderOptions xmlReadFlags;
  122. };
  123. class thorhelper_decl CCsvToRawTransformer : implements ICsvToRawTransformer, public CInterface
  124. {
  125. public:
  126. CCsvToRawTransformer(ICsvToRowTransformer & _rowTransformer) { rowTransformer.set(&_rowTransformer); }
  127. IMPLEMENT_IINTERFACE
  128. virtual IDataVal & transform(IDataVal & result, size32_t len, const void * text, bool isDataset);
  129. protected:
  130. Owned<ICsvToRowTransformer> rowTransformer;
  131. };
  132. #if 0
  133. class thorhelper_decl CSVColumnProvider : implements IColumnProvider, public CInterface
  134. {
  135. CSVSplitter csvSplitter;
  136. public:
  137. IMPLEMENT_IINTERFACE;
  138. inline size32_t splitLine(size32_t maxLen, const byte * start) { return csvSplitter.splitLine(maxLen, start); }
  139. virtual void getData(size32_t & len, void * & text, const char * name) { UNIMPLEMENTED; }
  140. virtual __int64 getInt(const char * name) { UNIMPLEMENTED; }
  141. virtual void getString(size32_t & len, char * & text, const char * name) { UNIMPLEMENTED; }
  142. virtual void getUnicode(size32_t & len, UChar * & text, const char * name) { UNIMPLEMENTED; }
  143. };
  144. class thorhelper_decl CCsvToRawTransformer : implements IXmlToRawTransformer, public CInterface
  145. {
  146. public:
  147. CCsvToRawTransformer(IXmlToRowTransformer & _rowTransformer) { rowTransformer.set(&_rowTransformer); }
  148. IMPLEMENT_IINTERFACE
  149. virtual IDataVal & transform(IDataVal & result, size32_t len, const void * text, bool isDataset);
  150. protected:
  151. Owned<IXmlToRowTransformer> rowTransformer;
  152. CSVColumnProvider csvSplitter;
  153. };
  154. #endif
  155. extern thorhelper_decl IXmlToRawTransformer * createXmlRawTransformer(IXmlToRowTransformer * xmlTransformer, PTreeReaderOptions xmlReadFlags=ptr_ignoreWhiteSpace);
  156. extern thorhelper_decl ICsvToRawTransformer * createCsvRawTransformer(ICsvToRowTransformer * csvTransformer);
  157. #ifndef CHEAP_UCHAR_DEF
  158. #include "unicode/utf.h"
  159. #endif
  160. interface IXMLSelect : extends IInterface
  161. {
  162. virtual void match(IColumnProvider &entry, offset_t startOffset, offset_t endOffset) = 0;
  163. };
  164. interface IXMLParse : extends IInterface
  165. {
  166. virtual bool next() = 0;
  167. virtual void reset() = 0;
  168. };
  169. thorhelper_decl IXMLParse *createXMLParse(const char *filename, const char *xpath, IXMLSelect &iselect, PTreeReaderOptions xmlOptions=ptr_none, bool contentRequired=true);
  170. thorhelper_decl IXMLParse *createXMLParse(ISimpleReadStream &stream, const char *xpath, IXMLSelect &iselect, PTreeReaderOptions xmlOptions=ptr_none, bool contentRequired=true);
  171. thorhelper_decl IXMLParse *createXMLParse(const void *buffer, unsigned bufLen, const char *xpath, IXMLSelect &iselect, PTreeReaderOptions xmlOptions=ptr_none, bool contentRequired=true);
  172. thorhelper_decl IXMLParse *createXMLParseString(const char *str, const char *xpath, IXMLSelect &iselect, PTreeReaderOptions xmlOptions=ptr_none, bool contentRequired=true);
  173. thorhelper_decl size32_t createRowFromXml(ARowBuilder & rowBuilder, size32_t size, const char * utf8, IXmlToRowTransformer * xmlTransformer, bool stripWhitespace);
  174. thorhelper_decl const void * createRowFromXml(IEngineRowAllocator * rowAllocator, size32_t len, const char * utf8, IXmlToRowTransformer * xmlTransformer, bool stripWhitespace);
  175. thorhelper_decl IXMLParse *createJSONParse(const char *filename, const char *xpath, IXMLSelect &iselect, PTreeReaderOptions xmlOptions=ptr_none, bool contentRequired=true);
  176. thorhelper_decl IXMLParse *createJSONParse(ISimpleReadStream &stream, const char *xpath, IXMLSelect &iselect, PTreeReaderOptions xmlOptions=ptr_none, bool contentRequired=true);
  177. thorhelper_decl IXMLParse *createJSONParse(const void *buffer, unsigned bufLen, const char *xpath, IXMLSelect &iselect, PTreeReaderOptions xmlOptions=ptr_none, bool contentRequired=true, bool keepRootArray=false);
  178. thorhelper_decl IXMLParse *createJSONParseString(const char *str, const char *xpath, IXMLSelect &iselect, PTreeReaderOptions xmlOptions=ptr_none, bool contentRequired=true);
  179. thorhelper_decl size32_t createRowFromJson(ARowBuilder & rowBuilder, size32_t size, const char * utf8, IXmlToRowTransformer * xmlTransformer, bool stripWhitespace);
  180. thorhelper_decl const void * createRowFromJson(IEngineRowAllocator * rowAllocator, size32_t len, const char * utf8, IXmlToRowTransformer * xmlTransformer, bool stripWhitespace);
  181. #endif // THORXMLREAD_HPP