fvdatasource.hpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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 FVDATASOURCE_HPP
  14. #define FVDATASOURCE_HPP
  15. #include "fileview.hpp"
  16. #include "deftype.hpp"
  17. enum
  18. {
  19. FVFFnone = 0,
  20. FVFFbeginif = 1,
  21. FVFFendif = 2,
  22. FVFFbeginrecord = 3,
  23. FVFFendrecord = 4,
  24. FVFFdataset = 5,
  25. FVFFset = 6,
  26. FVFFvirtual = 7,
  27. FVFFblob = 8
  28. };
  29. interface IFvDataSource;
  30. interface IFvDataSourceMetaData : extends IInterface
  31. {
  32. virtual unsigned numColumns() const = 0;
  33. virtual ITypeInfo * queryType(unsigned column) const = 0;
  34. virtual const char * queryName(unsigned column) const = 0;
  35. virtual const char * queryXPath(unsigned column) const = 0;
  36. virtual void serialize(MemoryBuffer & buffer) const = 0;
  37. virtual bool supportsRandomSeek() const = 0;
  38. virtual unsigned queryFieldFlags(unsigned column) const = 0;
  39. virtual IFvDataSourceMetaData * queryChildMeta(unsigned column) const = 0;
  40. virtual IFvDataSource * createChildDataSource(unsigned column, unsigned len, const void * data) = 0;
  41. virtual unsigned numKeyedColumns() const = 0;
  42. inline bool isVirtual(unsigned column) const { return queryFieldFlags(column) == FVFFvirtual; }
  43. virtual const char *queryXmlTag(unsigned column) const = 0;
  44. virtual const char *queryXmlTag() const = 0;
  45. virtual const IntArray &queryAttrList() const = 0;
  46. virtual const IntArray &queryAttrList(unsigned column) const = 0;
  47. virtual bool mixedContent(unsigned column) const = 0;
  48. virtual bool mixedContent() const = 0;
  49. };
  50. IFvDataSourceMetaData * deserializeDataSourceMeta(MemoryBuffer & in);
  51. #define BEFORE_FIRST_ROW ((__int64)-1)
  52. #define AFTER_LAST_ROW ((__int64)-2)
  53. interface IFvDataSource : extends IInterface
  54. {
  55. virtual IFvDataSourceMetaData * queryMetaData() = 0;
  56. virtual void applyFilter() { }
  57. virtual IFvDataSource * cloneForFilter() { return NULL; }
  58. virtual __int64 numRows(bool force = false) = 0;
  59. virtual bool fetchRow(MemoryBuffer & out, __int64 offset) = 0;
  60. virtual bool fetchRawRow(MemoryBuffer & out, __int64 offset) = 0;
  61. virtual bool getRow(MemoryBuffer & out, __int64 row) = 0;
  62. virtual bool getRawRow(MemoryBuffer & out, __int64 row) = 0;
  63. virtual bool addFilter(unsigned offset, unsigned matchLen, unsigned len, const void * data) { return false; } // more: support ranges
  64. virtual void onClose() = 0;
  65. virtual void onOpen() = 0;
  66. virtual bool isIndex() = 0;
  67. };
  68. //not public outside of the dll
  69. class ADataSource : public CInterface, implements IFvDataSource
  70. {
  71. public:
  72. IMPLEMENT_IINTERFACE
  73. virtual bool init() = 0;
  74. };
  75. IFvDataSource * createDataSource(IConstWUResult * wuResult, const char * wuid, const char * username, const char * password);
  76. IFvDataSource * createFileDataSource(IDistributedFile * df, const char * logicalName, const char * cluster, const char * username, const char * password);
  77. IFvDataSource * createFileDataSource(const char * logicalName, const char * cluster, const char * username, const char * password);
  78. IFvDataSource * createRemoteDataSource(const SocketEndpoint & ep, const char * username, const char * password, const char * wuid, unsigned sequence, const char * name);
  79. IFvDataSource * createRemoteFileDataSource(const SocketEndpoint & ep, const char * username, const char * password, const char * logicalName);
  80. IFvDataSourceMetaData * createMetaData(IConstWUResult * wuResult);
  81. IConstWUResult * resolveResult(const char * wuid, unsigned sequence, const char * name);
  82. IConstWUResult * secResolveResult(ISecManager &secmgr, ISecUser &secuser, const char * wuid, unsigned sequence, const char * name);
  83. #endif