Go to the documentation of this file.00001 #ifndef INCLUDE_ORA_QUERYABLEVECTORSTREAMER_H
00002 #define INCLUDE_ORA_QUERYABLEVECTORSTREAMER_H
00003
00004 #include "PVectorStreamer.h"
00005 #include "DataElement.h"
00006
00007 #include <memory>
00008 #include <boost/shared_ptr.hpp>
00009
00010 #include "Reflex/Type.h"
00011
00012 namespace ora {
00013
00014 class MappingElement;
00015 class ContainerSchema;
00016 class IRelationalData;
00017 class IArrayHandler;
00018 class MultiRecordInsertOperation;
00019 class IVectorLoader;
00020
00021 class QueryableVectorWriter: public IRelationalWriter {
00022
00023 public:
00025 QueryableVectorWriter( const Reflex::Type& objectType, MappingElement& mapping, ContainerSchema& contSchema );
00026 virtual ~QueryableVectorWriter();
00027
00028 bool build( DataElement& offset, IRelationalData& relationalData, RelationalBuffer& operationBuffer );
00029 void setRecordId( const std::vector<int>& identity );
00030 void write( int oid,const void* data );
00031 private:
00032 Reflex::Type m_objectType;
00033 DataElement* m_offset;
00034 DataElement m_localElement;
00035 private:
00036 PVectorWriter m_writer;
00037 };
00038
00039 class QueryableVectorUpdater : public IRelationalUpdater {
00040
00041 public:
00042
00044 QueryableVectorUpdater(const Reflex::Type& objectType, MappingElement& mapping, ContainerSchema& contSchema );
00045 virtual ~QueryableVectorUpdater();
00046
00047 bool build( DataElement& offset, IRelationalData& relationalData, RelationalBuffer& operationBuffer);
00048 void setRecordId( const std::vector<int>& identity );
00049 void update( int oid,const void* data );
00050
00051 private:
00052 Reflex::Type m_objectType;
00053 DataElement* m_offset;
00054 DataElement m_localElement;
00055 private:
00056 PVectorUpdater m_updater;
00057 };
00058
00059 class QueryableVectorReader : public IRelationalReader {
00060
00061 public:
00062
00064 QueryableVectorReader(const Reflex::Type& objectType, MappingElement& mapping, ContainerSchema& contSchema );
00065
00066 virtual ~QueryableVectorReader();
00067
00068 bool build( DataElement& offset, IRelationalData& relationalData );
00069 void select( int oid );
00070 void setRecordId( const std::vector<int>& identity );
00071 void read( void* address );
00072 void clear();
00073
00074 private:
00075 Reflex::Type m_objectType;
00076 MappingElement& m_mapping;
00077 ContainerSchema& m_schema;
00078 DataElement* m_dataElement;
00079 std::vector<boost::shared_ptr<IVectorLoader> > m_loaders;
00080 std::vector<int> m_tmpIds;
00081 };
00082
00083 class QueryableVectorStreamer : public IRelationalStreamer
00084 {
00085 public:
00086 QueryableVectorStreamer( const Reflex::Type& objectType, MappingElement& mapping, ContainerSchema& contSchema );
00087
00088 ~QueryableVectorStreamer();
00089
00090 IRelationalWriter* newWriter();
00091
00092 IRelationalUpdater* newUpdater();
00093
00094 IRelationalReader* newReader();
00095
00096 private:
00097 Reflex::Type m_objectType;
00098 MappingElement& m_mapping;
00099 ContainerSchema& m_schema;
00100 };
00101
00102
00103 }
00104
00105 #endif
00106
00107