12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- /*##############################################################################
- HPCC SYSTEMS software Copyright (C) 2012 HPCC Systems.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- ############################################################################## */
- #ifndef __LAYOUTTRANS_HPP_
- #define __LAYOUTTRANS_HPP_
- #include "deffield.hpp"
- #include "rtlkey.hpp"
- #include "jhtree.hpp"
- #include "thorhelper.hpp"
- #ifdef _DEBUG
- #define DEBUG_HELPERS_REQUIRED
- #endif
- class THORHELPER_API IRecordLayoutTranslator : public IInterface
- {
- public:
- class THORHELPER_API Failure : public CInterface
- {
- public:
- typedef enum { BadStructure = 1, MissingDiskField, UnkeyedDiskField, UntranslatableField, UnsupportedFilter } Code;
-
- virtual Code queryCode() const = 0;
- virtual StringBuffer & getDetail(StringBuffer & out) const = 0;
- };
- class SegmentMonitorContext : public IInterface, public IIndexReadContext
- {
- public:
- virtual unsigned ordinality() const = 0;
- virtual IKeySegmentMonitor * item(unsigned i) const = 0;
- virtual void reset() = 0;
- };
- class RowTransformContext : public CInterface
- {
- public:
- RowTransformContext(unsigned _num);
- ~RowTransformContext();
- void init(unsigned seq, unsigned num) { sizes[seq] = new unsigned[num]; ptrs[seq] = new byte const *[num]; }
- void set(unsigned seq, unsigned i, size32_t size, byte const * ptr) { sizes[seq][i] = size; ptrs[seq][i] = ptr; }
- void setFposIn(offset_t fpos) { fposIn = fpos; }
- size32_t querySize(unsigned seq, unsigned i) const { return sizes[seq][i]; }
- byte const * queryPointer(unsigned seq, unsigned i) const { return ptrs[seq][i]; }
- offset_t const * queryFposIn() const { return &fposIn; }
- private:
- unsigned num;
- size32_t * * sizes;
- byte const * * * ptrs;
- offset_t fposIn;
- };
- virtual bool querySuccess() const = 0;
- virtual Failure const & queryFailure() const = 0;
- virtual size32_t queryActivityKeySize() const = 0;
- virtual size32_t queryDiskKeySize() const = 0;
- virtual void checkSizes(char const * filename, size32_t activitySize, size32_t diskSize) const = 0;
- virtual bool queryKeysTransformed() const = 0;
- virtual SegmentMonitorContext * getSegmentMonitorContext() = 0;
- virtual void createDiskSegmentMonitors(SegmentMonitorContext const & in, IIndexReadContext & out) = 0;
- virtual RowTransformContext * getRowTransformContext() = 0;
- virtual size32_t transformRow(RowTransformContext * ctx, byte const * in, size32_t inSize, byte * out, size32_t outBuffSize, offset_t & fpos) const = 0;
- #ifdef DEBUG_HELPERS_REQUIRED
- virtual StringBuffer & getMappingsAsString(StringBuffer & out) const = 0;
- #endif
- };
- extern THORHELPER_API IRecordLayoutTranslator * createRecordLayoutTranslator(IDefRecordMeta const * diskMeta, IDefRecordMeta const * activityMeta);
- extern THORHELPER_API IRecordLayoutTranslator * createRecordLayoutTranslator(size32_t diskMetaSize, const void *diskMetaData, size32_t activityMetaSize, const void *activityMetaData);
- class THORHELPER_API IRecordLayoutTranslatorCache : public IInterface
- {
- public:
- 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
- virtual unsigned count() const = 0;
- };
- extern THORHELPER_API IRecordLayoutTranslatorCache * createRecordLayoutTranslatorCache();
- #endif
|