thorxmlread.hpp 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  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 : public CInterface, implements IColumnProvider
  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. IMPLEMENT_IINTERFACE
  40. //IColumnProvider
  41. virtual bool getBool(const char * name);
  42. virtual void getData(size32_t len, void * text, const char * name);
  43. virtual void getDataX(size32_t & len, void * & text, const char * name);
  44. virtual __int64 getInt(const char * name);
  45. virtual void getQString(size32_t len, char * text, const char * name);
  46. virtual void getString(size32_t len, char * text, const char * name);
  47. virtual void getStringX(size32_t & len, char * & text, const char * name);
  48. virtual void getUnicodeX(size32_t & len, UChar * & text, const char * name);
  49. virtual void getUtf8X(size32_t & len, char * & text, const char * path);
  50. virtual bool getIsSetAll(const char * path);
  51. virtual IColumnProviderIterator * getChildIterator(const char * path);
  52. virtual bool readBool(const char * path, bool _default);
  53. virtual void readData(size32_t len, void * text, const char * path, size32_t _lenDefault, const void * _default);
  54. virtual void readDataX(size32_t & len, void * & text, const char * path, size32_t _lenDefault, const void * _default);
  55. virtual __int64 readInt(const char * path, __int64 _default);
  56. virtual void readQString(size32_t len, char * text, const char * path, size32_t _lenDefault, const char * _default);
  57. virtual void readString(size32_t len, char * text, const char * path, size32_t _lenDefault, const char * _default);
  58. virtual void readStringX(size32_t & len, char * & text, const char * path, size32_t _lenDefault, const char * _default);
  59. virtual void readUnicodeX(size32_t & len, UChar * & text, const char * path, size32_t _lenDefault, const UChar * _default);
  60. virtual bool readIsSetAll(const char * path, bool _default);
  61. virtual void readUtf8X(size32_t & len, char * & text, const char * path, size32_t _lenDefault, const char * _default);
  62. virtual void getDataRaw(size32_t len, void * text, const char * name);
  63. virtual void getDataRawX(size32_t & len, void * & text, const char * name);
  64. virtual void readDataRaw(size32_t len, void * text, const char * path, size32_t _lenDefault, const void * _default);
  65. virtual void readDataRawX(size32_t & len, void * & text, const char * path, size32_t _lenDefault, const void * _default);
  66. };
  67. class thorhelper_decl XmlColumnIterator : public CInterface, implements IColumnProviderIterator
  68. {
  69. public:
  70. XmlColumnIterator(IPropertyTreeIterator * _iter);
  71. IMPLEMENT_IINTERFACE;
  72. virtual IColumnProvider * first();
  73. virtual IColumnProvider * next();
  74. protected:
  75. void setCurrent();
  76. protected:
  77. Owned<IPropertyTreeIterator> iter;
  78. Linked<XmlDatasetColumnProvider> cur;
  79. };
  80. class thorhelper_decl XmlSetColumnProvider : public XmlColumnProvider
  81. {
  82. public:
  83. IMPLEMENT_IINTERFACE
  84. //IColumnProvider
  85. virtual bool getBool(const char * name);
  86. virtual void getData(size32_t len, void * text, const char * name);
  87. virtual void getDataX(size32_t & len, void * & text, const char * name);
  88. virtual __int64 getInt(const char * name);
  89. virtual void getQString(size32_t len, char * text, const char * name);
  90. virtual void getString(size32_t len, char * text, const char * name);
  91. virtual void getStringX(size32_t & len, char * & text, const char * name);
  92. virtual void getUnicodeX(size32_t & len, UChar * & text, const char * name);
  93. virtual void getUtf8X(size32_t & len, char * & text, const char * path);
  94. virtual bool getIsSetAll(const char * path);
  95. virtual IColumnProviderIterator * getChildIterator(const char * path);
  96. virtual bool readBool(const char * path, bool _default);
  97. virtual void readData(size32_t len, void * text, const char * path, size32_t _lenDefault, const void * _default);
  98. virtual void readDataX(size32_t & len, void * & text, const char * path, size32_t _lenDefault, const void * _default);
  99. virtual __int64 readInt(const char * path, __int64 _default);
  100. virtual void readQString(size32_t len, char * text, const char * path, size32_t _lenDefault, const char * _default);
  101. virtual void readString(size32_t len, char * text, const char * path, size32_t _lenDefault, const char * _default);
  102. virtual void readStringX(size32_t & len, char * & text, const char * path, size32_t _lenDefault, const char * _default);
  103. virtual void readUnicodeX(size32_t & len, UChar * & text, const char * path, size32_t _lenDefault, const UChar * _default);
  104. virtual bool readIsSetAll(const char * path, bool _default);
  105. virtual void readUtf8X(size32_t & len, char * & text, const char * path, size32_t _lenDefault, const char * _default);
  106. virtual void getDataRaw(size32_t len, void * text, const char * name);
  107. virtual void getDataRawX(size32_t & len, void * & text, const char * name);
  108. virtual void readDataRaw(size32_t len, void * text, const char * path, size32_t _lenDefault, const void * _default);
  109. virtual void readDataRawX(size32_t & len, void * & text, const char * path, size32_t _lenDefault, const void * _default);
  110. };
  111. class thorhelper_decl CXmlToRawTransformer : public CInterface, implements IXmlToRawTransformer
  112. {
  113. public:
  114. CXmlToRawTransformer(IXmlToRowTransformer & _rowTransformer, PTreeReaderOptions _xmlReadFlags)
  115. : rowTransformer(&_rowTransformer), xmlReadFlags(_xmlReadFlags)
  116. {
  117. }
  118. IMPLEMENT_IINTERFACE
  119. virtual IDataVal & transform(IDataVal & result, size32_t len, const void * text, bool isDataset);
  120. virtual IDataVal & transformTree(IDataVal & result, IPropertyTree &tree, bool isDataset);
  121. protected:
  122. Linked<IXmlToRowTransformer> rowTransformer;
  123. PTreeReaderOptions xmlReadFlags;
  124. };
  125. class thorhelper_decl CCsvToRawTransformer : public CInterface, implements ICsvToRawTransformer
  126. {
  127. public:
  128. CCsvToRawTransformer(ICsvToRowTransformer & _rowTransformer) { rowTransformer.set(&_rowTransformer); }
  129. IMPLEMENT_IINTERFACE
  130. virtual IDataVal & transform(IDataVal & result, size32_t len, const void * text, bool isDataset);
  131. protected:
  132. Owned<ICsvToRowTransformer> rowTransformer;
  133. };
  134. #if 0
  135. class thorhelper_decl CSVColumnProvider : public CInterface, implements IColumnProvider
  136. {
  137. CSVSplitter csvSplitter;
  138. public:
  139. IMPLEMENT_IINTERFACE;
  140. inline size32_t splitLine(size32_t maxLen, const byte * start) { return csvSplitter.splitLine(maxLen, start); }
  141. virtual void getData(size32_t & len, void * & text, const char * name) { UNIMPLEMENTED; }
  142. virtual __int64 getInt(const char * name) { UNIMPLEMENTED; }
  143. virtual void getString(size32_t & len, char * & text, const char * name) { UNIMPLEMENTED; }
  144. virtual void getUnicode(size32_t & len, UChar * & text, const char * name) { UNIMPLEMENTED; }
  145. };
  146. class thorhelper_decl CCsvToRawTransformer : public CInterface, implements IXmlToRawTransformer
  147. {
  148. public:
  149. CCsvToRawTransformer(IXmlToRowTransformer & _rowTransformer) { rowTransformer.set(&_rowTransformer); }
  150. IMPLEMENT_IINTERFACE
  151. virtual IDataVal & transform(IDataVal & result, size32_t len, const void * text, bool isDataset);
  152. protected:
  153. Owned<IXmlToRowTransformer> rowTransformer;
  154. CSVColumnProvider csvSplitter;
  155. };
  156. #endif
  157. extern thorhelper_decl IXmlToRawTransformer * createXmlRawTransformer(IXmlToRowTransformer * xmlTransformer, PTreeReaderOptions xmlReadFlags=ptr_ignoreWhiteSpace);
  158. extern thorhelper_decl ICsvToRawTransformer * createCsvRawTransformer(ICsvToRowTransformer * csvTransformer);
  159. #ifndef CHEAP_UCHAR_DEF
  160. #include "unicode/utf.h"
  161. #endif
  162. interface IXMLSelect : extends IInterface
  163. {
  164. virtual void match(IColumnProvider &entry, offset_t startOffset, offset_t endOffset) = 0;
  165. };
  166. interface IXMLParse : extends IInterface
  167. {
  168. virtual bool next() = 0;
  169. virtual void reset() = 0;
  170. };
  171. thorhelper_decl IXMLParse *createXMLParse(const char *filename, const char *xpath, IXMLSelect &iselect, PTreeReaderOptions xmlOptions=ptr_none, bool contentRequired=true);
  172. thorhelper_decl IXMLParse *createXMLParse(ISimpleReadStream &stream, const char *xpath, IXMLSelect &iselect, PTreeReaderOptions xmlOptions=ptr_none, bool contentRequired=true);
  173. thorhelper_decl IXMLParse *createXMLParse(const void *buffer, unsigned bufLen, const char *xpath, IXMLSelect &iselect, PTreeReaderOptions xmlOptions=ptr_none, bool contentRequired=true);
  174. thorhelper_decl IXMLParse *createXMLParseString(const char *str, const char *xpath, IXMLSelect &iselect, PTreeReaderOptions xmlOptions=ptr_none, bool contentRequired=true);
  175. thorhelper_decl size32_t createRowFromXml(ARowBuilder & rowBuilder, size32_t size, const char * utf8, IXmlToRowTransformer * xmlTransformer, bool stripWhitespace);
  176. thorhelper_decl const void * createRowFromXml(IEngineRowAllocator * rowAllocator, size32_t len, const char * utf8, IXmlToRowTransformer * xmlTransformer, bool stripWhitespace);
  177. #endif // THORXMLREAD_HPP