fileview.hpp 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. /*##############################################################################
  2. Copyright (C) 2011 HPCC Systems.
  3. All rights reserved. This program is free software: you can redistribute it and/or modify
  4. it under the terms of the GNU Affero General Public License as
  5. published by the Free Software Foundation, either version 3 of the
  6. License, or (at your option) any later version.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU Affero General Public License for more details.
  11. You should have received a copy of the GNU Affero General Public License
  12. along with this program. If not, see <http://www.gnu.org/licenses/>.
  13. ############################################################################## */
  14. #ifndef FILEVIEW_INCL
  15. #define FILEVIEW_INCL
  16. #ifdef _WIN32
  17. #ifdef FILEVIEW2_EXPORTS
  18. #define FILEVIEW_API __declspec(dllexport)
  19. #else
  20. #define FILEVIEW_API __declspec(dllimport)
  21. #endif
  22. #else
  23. #define FILEVIEW_API
  24. #endif
  25. #include "workunit.hpp"
  26. #define UNKNOWN_NUM_ROWS (I64C(0x7FFFFFFFFFFFFFFF))
  27. enum DisplayType
  28. {
  29. TypeBoolean = 0,
  30. TypeInteger = 1,
  31. TypeUnsignedInteger = 2,
  32. TypeReal = 3,
  33. TypeString = 4,
  34. TypeData = 5,
  35. TypeUnicode = 6,
  36. TypeUnknown = 7,
  37. TypeBeginIfBlock = 8,
  38. TypeEndIfBlock = 9,
  39. TypeBeginRecord = 10,
  40. TypeEndRecord = 11,
  41. TypeSet = 12,
  42. TypeDataset = 13
  43. };
  44. enum ResultSetType
  45. {
  46. TYPE_FORWARD_ONLY = 0,
  47. TYPE_SCROLL_INSENSITIVE = 1,
  48. TYPE_SCROLL_SENSITIVE = 2
  49. };
  50. interface IResultSetMetaData : extends IInterface
  51. {
  52. virtual IResultSetMetaData * getChildMeta(int column) const = 0;
  53. virtual int getColumnCount() const = 0;
  54. virtual DisplayType getColumnDisplayType(int column) const = 0;
  55. virtual IStringVal & getColumnLabel(IStringVal & s, int column) const = 0;
  56. virtual IStringVal & getColumnEclType(IStringVal & s, int column) const = 0;
  57. virtual IStringVal & getColumnXmlType(IStringVal & s, int column) const = 0;
  58. virtual bool isSigned(int column) const = 0;
  59. virtual bool isEBCDIC(int column) const = 0;
  60. virtual bool isBigEndian(int column) const = 0;
  61. virtual unsigned getColumnRawType(int column) const = 0;
  62. virtual unsigned getColumnRawSize(int column) const = 0;
  63. virtual IStringVal & getXmlSchema(IStringVal & s, bool addHeader) const = 0;
  64. virtual unsigned getNumKeyedColumns() const = 0;
  65. virtual IStringVal & getXmlXPathSchema(IStringVal & str, bool addHeader) const = 0;
  66. virtual bool hasGetTranslation(int column) const = 0;
  67. virtual bool hasSetTranslation(int column) const = 0;
  68. virtual IStringVal & getNaturalColumnLabel(IStringVal & s, int column) const = 0;
  69. virtual bool isVirtual(int column) const = 0;
  70. };
  71. typedef double xdouble;
  72. interface IResultSet : extends IInterface
  73. {
  74. virtual bool absolute(__int64 row) = 0;
  75. virtual void afterLast() = 0;
  76. virtual void beforeFirst() = 0;
  77. virtual int findColumn(const char * columnName) const = 0;
  78. virtual bool first() = 0;
  79. virtual bool getBoolean(int columnIndex) = 0;
  80. virtual IDataVal & getBytes(IDataVal & d, int columnIndex) = 0;
  81. virtual xdouble getDouble(int columnIndex) = 0;
  82. virtual int getFetchSize() const = 0;
  83. virtual __int64 getInt(int columnIndex) = 0;
  84. virtual int getType() = 0;
  85. virtual const IResultSetMetaData & getMetaData() const = 0;
  86. virtual __int64 getNumRows() const = 0;
  87. virtual IDataVal & getRaw(IDataVal & d, int columnIndex) = 0;
  88. virtual IDataVal & getRawRow(IDataVal & d) = 0;
  89. virtual IStringVal & getString(IStringVal & ret, int columnIndex) = 0;
  90. virtual bool isAfterLast() const = 0;
  91. virtual bool isBeforeFirst() const = 0;
  92. virtual bool isFirst() const = 0;
  93. virtual bool isLast() const = 0;
  94. virtual bool isNull(int columnIndex) const = 0;
  95. virtual bool last() = 0;
  96. virtual bool next() = 0;
  97. virtual bool previous() = 0;
  98. virtual bool relative(__int64 rows) = 0;
  99. virtual void setFetchSize(int rows) = 0;
  100. virtual bool supportsRandomSeek() const = 0;
  101. virtual IStringVal & getDisplayText(IStringVal & ret, int columnIndex) = 0;
  102. virtual void beginAccess() = 0;
  103. virtual void endAccess() = 0;
  104. virtual IStringVal & getXml(IStringVal & ret, int columnIndex) = 0;
  105. };
  106. interface INewResultSet;
  107. interface IResultSetCursor : extends IInterface
  108. {
  109. virtual bool absolute(__int64 row) = 0;
  110. virtual void afterLast() = 0;
  111. virtual void beforeFirst() = 0;
  112. virtual bool fetch(__int64 fileoffset) = 0;
  113. virtual bool first() = 0;
  114. virtual bool getBoolean(int columnIndex) = 0;
  115. virtual IDataVal & getBytes(IDataVal & d, int columnIndex) = 0;
  116. virtual xdouble getDouble(int columnIndex) = 0;
  117. virtual int getFetchSize() const = 0;
  118. virtual IResultSetCursor * getChildren(int columnIndex) const = 0;
  119. virtual bool getIsAll(int columnIndex) const = 0;
  120. virtual __int64 getInt(int columnIndex) = 0;
  121. virtual IDataVal & getRaw(IDataVal & d, int columnIndex) = 0;
  122. virtual IDataVal & getRawRow(IDataVal & d) = 0;
  123. virtual IStringVal & getString(IStringVal & ret, int columnIndex) = 0;
  124. virtual bool isAfterLast() const = 0;
  125. virtual bool isBeforeFirst() const = 0;
  126. virtual bool isFirst() const = 0;
  127. virtual bool isLast() const = 0;
  128. virtual bool isNull(int columnIndex) const = 0;
  129. virtual bool isValid() const = 0;
  130. virtual bool last() = 0;
  131. virtual bool next() = 0;
  132. virtual bool previous() = 0;
  133. virtual INewResultSet * queryResultSet() = 0;
  134. virtual bool relative(__int64 rows) = 0;
  135. virtual void serialize(IDataVal & d) = 0;
  136. virtual IStringVal & getDisplayText(IStringVal & ret, int columnIndex) = 0;
  137. virtual IStringVal & getXml(IStringVal & ret, int columnIndex) = 0;
  138. virtual IStringVal & getXmlRow(IStringVal & ret) = 0;
  139. virtual __int64 getNumRows() const = 0;
  140. };
  141. interface INewResultSet;
  142. interface IResultSetFilter : extends IInterface
  143. {
  144. virtual void clearFilter(unsigned columnIndex) = 0;
  145. virtual void addFilter(unsigned columnIndex, const char * value) = 0;
  146. virtual void addFilter(unsigned columnIndex, unsigned length, const char * utf8Value) = 0;
  147. virtual void addNaturalFilter(unsigned columnIndex, unsigned length, const char * utf8Value) = 0;
  148. virtual void clearFilters() = 0;
  149. };
  150. interface IFilteredResultSet : extends IResultSetFilter
  151. {
  152. virtual INewResultSet * create() = 0;
  153. };
  154. //Following interface is stateless, and can be shared...
  155. interface INewResultSet : extends IInterface
  156. {
  157. virtual IResultSetCursor * createCursor() = 0;
  158. virtual IResultSetCursor * createCursor(IDataVal & buffer) = 0;
  159. virtual IFilteredResultSet * createFiltered() = 0;
  160. virtual IResultSetCursor * createSortedCursor(unsigned column, bool descend) = 0;
  161. virtual const IResultSetMetaData & getMetaData() const = 0;
  162. virtual __int64 getNumRows() const = 0;
  163. virtual bool supportsRandomSeek() const = 0;
  164. };
  165. interface IResultSetFactory : extends IInterface
  166. {
  167. virtual IResultSet * createResultSet(IConstWUResult * wuResult, const char * wuid) = 0;
  168. virtual IResultSet * createFileResultSet(const char * logicalFile, const char * cluster) = 0;
  169. virtual INewResultSet * createNewResultSet(IConstWUResult * wuResult, const char * wuid) = 0;
  170. virtual INewResultSet * createNewFileResultSet(const char * logicalFile, const char * cluster) = 0;
  171. virtual INewResultSet * createNewResultSet(const char * wuid, unsigned sequence, const char * name) = 0;
  172. virtual INewResultSet * createNewFileResultSet(const char * logicalFile) = 0;
  173. virtual IResultSetMetaData * createResultSetMeta(IConstWUResult * wuResult) = 0;
  174. virtual IResultSetMetaData * createResultSetMeta(const char * wuid, unsigned sequence, const char * name) = 0;
  175. };
  176. //provided to wrap the exceptions for clarion....
  177. extern "C" FILEVIEW_API IResultSet* createResultSet(IResultSetFactory & factory, IStringVal & error, IConstWUResult * wuResult, const char * wuid);
  178. extern "C" FILEVIEW_API IResultSet* createFileResultSet(IResultSetFactory & factory, IStringVal & error, const char * logicalFile, const char * queue = NULL, const char * cluster = NULL);
  179. extern "C" FILEVIEW_API INewResultSet* createNewResultSet(IResultSetFactory & factory, IStringVal & error, IConstWUResult * wuResult, const char * wuid);
  180. extern "C" FILEVIEW_API INewResultSet* createNewFileResultSet(IResultSetFactory & factory, IStringVal & error, const char * logicalFile, const char * queue, const char * cluster);
  181. extern "C" FILEVIEW_API INewResultSet* createNewResultSetSeqName(IResultSetFactory & factory, IStringVal & error, const char * wuid, unsigned sequence, const char * name);
  182. extern "C" FILEVIEW_API IResultSetFactory * getResultSetFactory(const char * username, const char * password);
  183. extern "C" FILEVIEW_API IResultSetFactory * getSecResultSetFactory(ISecManager &secmgr, ISecUser &secuser);
  184. extern "C" FILEVIEW_API IResultSetFactory * getRemoteResultSetFactory(const char * remoteServer, const char * username, const char * password);
  185. extern "C" FILEVIEW_API IResultSetFactory * getSecRemoteResultSetFactory(const char * remoteServer, ISecManager &secmgr, ISecUser &secuser);
  186. //Formatting applied remotely, so it can be accessed between different operating systems...
  187. extern "C" FILEVIEW_API IResultSetFactory * getRemoteResultSetFactory(const char * remoteServer, const char * username, const char * password);
  188. extern "C" FILEVIEW_API int findResultSetColumn(const INewResultSet * results, const char * columnName);
  189. extern "C" FILEVIEW_API unsigned getResultCursorXml(IStringVal & ret, IResultSetCursor * cursor, const char * name, unsigned start=0, unsigned count=0, const char * schemaName=NULL);
  190. extern "C" FILEVIEW_API unsigned getResultXml(IStringVal & ret, INewResultSet * cursor, const char* name, unsigned start=0, unsigned count=0, const char * schemaName=NULL);
  191. extern "C" FILEVIEW_API unsigned getResultCursorBin(MemoryBuffer & ret, IResultSetCursor * cursor, unsigned start=0, unsigned count=0);
  192. extern "C" FILEVIEW_API unsigned getResultBin(MemoryBuffer & ret, INewResultSet * cursor, unsigned start=0, unsigned count=0);
  193. extern "C" FILEVIEW_API IStringVal& getFullWorkUnitResultsXML(const char *user, const char *pw, const IConstWorkUnit *wu, IStringVal &str, bool inclschema, WUExceptionSeverity minSeverity=ExceptionSeverityInformation);
  194. extern FILEVIEW_API void startRemoteDataSourceServer(const char * queue, const char * cluster);
  195. extern FILEVIEW_API void stopRemoteDataSourceServer();
  196. #endif