layouttrans.hpp 4.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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 __LAYOUTTRANS_HPP_
  14. #define __LAYOUTTRANS_HPP_
  15. #include "deffield.hpp"
  16. #include "rtlkey.hpp"
  17. #include "jhtree.hpp"
  18. #include "thorhelper.hpp"
  19. #ifdef _DEBUG
  20. #define DEBUG_HELPERS_REQUIRED
  21. #endif
  22. class THORHELPER_API IRecordLayoutTranslator : public IInterface
  23. {
  24. public:
  25. class THORHELPER_API Failure : public CInterface
  26. {
  27. public:
  28. typedef enum { BadStructure = 1, MissingDiskField, UnkeyedDiskField, UntranslatableField, UnsupportedFilter } Code;
  29. virtual Code queryCode() const = 0;
  30. virtual StringBuffer & getDetail(StringBuffer & out) const = 0;
  31. };
  32. class SegmentMonitorContext : public IInterface, public IIndexReadContext
  33. {
  34. public:
  35. virtual unsigned ordinality() const = 0;
  36. virtual IKeySegmentMonitor * item(unsigned i) const = 0;
  37. virtual void reset() = 0;
  38. };
  39. class RowTransformContext : public CInterface
  40. {
  41. public:
  42. RowTransformContext(unsigned _num);
  43. ~RowTransformContext();
  44. void init(unsigned seq, unsigned num) { sizes[seq] = new unsigned[num]; ptrs[seq] = new byte const *[num]; }
  45. void set(unsigned seq, unsigned i, size32_t size, byte const * ptr) { sizes[seq][i] = size; ptrs[seq][i] = ptr; }
  46. void setFposIn(offset_t fpos) { fposIn = fpos; }
  47. size32_t querySize(unsigned seq, unsigned i) const { return sizes[seq][i]; }
  48. byte const * queryPointer(unsigned seq, unsigned i) const { return ptrs[seq][i]; }
  49. offset_t const * queryFposIn() const { return &fposIn; }
  50. private:
  51. unsigned num;
  52. size32_t * * sizes;
  53. byte const * * * ptrs;
  54. offset_t fposIn;
  55. };
  56. virtual bool querySuccess() const = 0;
  57. virtual Failure const & queryFailure() const = 0;
  58. virtual size32_t queryActivityKeySize() const = 0;
  59. virtual size32_t queryDiskKeySize() const = 0;
  60. virtual void checkSizes(char const * filename, size32_t activitySize, size32_t diskSize) const = 0;
  61. virtual bool queryKeysTransformed() const = 0;
  62. virtual SegmentMonitorContext * getSegmentMonitorContext() = 0;
  63. virtual void createDiskSegmentMonitors(SegmentMonitorContext const & in, IIndexReadContext & out) = 0;
  64. virtual RowTransformContext * getRowTransformContext() = 0;
  65. virtual size32_t transformRow(RowTransformContext * ctx, byte const * in, size32_t inSize, byte * out, size32_t outBuffSize, offset_t & fpos) const = 0;
  66. #ifdef DEBUG_HELPERS_REQUIRED
  67. virtual StringBuffer & getMappingsAsString(StringBuffer & out) const = 0;
  68. #endif
  69. };
  70. extern THORHELPER_API IRecordLayoutTranslator * createRecordLayoutTranslator(IDefRecordMeta const * diskMeta, IDefRecordMeta const * activityMeta);
  71. extern THORHELPER_API IRecordLayoutTranslator * createRecordLayoutTranslator(size32_t diskMetaSize, const void *diskMetaData, size32_t activityMetaSize, const void *activityMetaData);
  72. class THORHELPER_API IRecordLayoutTranslatorCache : public IInterface
  73. {
  74. public:
  75. virtual IRecordLayoutTranslator * get(size32_t diskMetaSize, void const * diskMetaData, size32_t activityMetaSize, void const * activityMetaData, IDefRecordMeta const * activityMeta = NULL) = 0; //if activityMeta is NULL, it is calculated by deserializing from buffer --- but option to supply so caller can deserialize once and use many
  76. virtual unsigned count() const = 0;
  77. };
  78. extern THORHELPER_API IRecordLayoutTranslatorCache * createRecordLayoutTranslatorCache();
  79. #endif