Go to the documentation of this file.00001 #ifndef INCLUDE_ORA_BLOBSTREAMER_H
00002 #define INCLUDE_ORA_BLOBSTREAMER_H
00003
00004 #include "IRelationalStreamer.h"
00005
00006 #include "Reflex/Type.h"
00007
00008 namespace ora {
00009
00010 class MappingElement;
00011 class ContainerSchema;
00012 class DataElement;
00013 class IBlobStreamingService;
00014
00015 class BlobWriterBase {
00016
00017 public:
00018 BlobWriterBase( const Reflex::Type& objectType, MappingElement& mapping, ContainerSchema& contSchema );
00019
00020 virtual ~BlobWriterBase();
00021
00022 bool buildDataElement( DataElement& dataElement, IRelationalData& relationalData, RelationalBuffer& operationBuffer );
00023
00024 void bindData( const void* data );
00025
00026 private:
00027 Reflex::Type m_objectType;
00028 MappingElement& m_mapping;
00029 int m_columnIndex;
00030 ContainerSchema& m_schema;
00031
00032 private:
00033 DataElement* m_dataElement;
00034 IRelationalData* m_relationalData;
00035 RelationalBuffer* m_relationalBuffer;
00036 IBlobStreamingService* m_blobWriter;
00037 bool m_useCompression;
00038 };
00039
00040 class BlobWriter : public BlobWriterBase, public IRelationalWriter {
00041
00042 public:
00043 BlobWriter( const Reflex::Type& objectType, MappingElement& mapping, ContainerSchema& contSchema );
00044
00045 virtual ~BlobWriter();
00046
00047 bool build(DataElement& dataElement, IRelationalData& relationalData, RelationalBuffer& operationBuffer);
00048
00049 void setRecordId( const std::vector<int>& identity );
00050
00051 void write( int oid, const void* data );
00052
00053 };
00054
00055
00056 class BlobUpdater : public BlobWriterBase, public IRelationalUpdater {
00057
00058 public:
00059 BlobUpdater( const Reflex::Type& objectType, MappingElement& mapping, ContainerSchema& contSchema );
00060
00061 virtual ~BlobUpdater();
00062
00063 bool build(DataElement& dataElement, IRelationalData& relationalData, RelationalBuffer& operationBuffer);
00064
00065 void setRecordId( const std::vector<int>& identity );
00066
00067 void update( int oid, const void* data );
00068
00069 };
00070
00071 class BlobReader : public IRelationalReader {
00072
00073 public:
00074 BlobReader( const Reflex::Type& objectType, MappingElement& mapping, ContainerSchema& contSchema );
00075
00076 virtual ~BlobReader();
00077
00078 bool build(DataElement& dataElement, IRelationalData& relationalData );
00079
00080 void select( int oid );
00081
00082 void setRecordId( const std::vector<int>& identity );
00083
00084 void read( void* data );
00085
00086 void clear();
00087
00088 private:
00089 Reflex::Type m_objectType;
00090 MappingElement& m_mapping;
00091 int m_columnIndex;
00092 ContainerSchema& m_schema;
00093
00094 private:
00095 DataElement* m_dataElement;
00096 IRelationalData* m_relationalData;
00097 IBlobStreamingService* m_blobReader;
00098
00099 };
00100
00101 class BlobStreamer : public IRelationalStreamer
00102 {
00103 public:
00104 BlobStreamer( const Reflex::Type& objectType, MappingElement& mapping, ContainerSchema& contSchema );
00105
00106 ~BlobStreamer();
00107
00108 IRelationalWriter* newWriter();
00109
00110 IRelationalUpdater* newUpdater();
00111
00112 IRelationalReader* newReader();
00113
00114 private:
00115 Reflex::Type m_objectType;
00116 MappingElement& m_mapping;
00117 ContainerSchema& m_schema;
00118 };
00119
00120 }
00121
00122
00123 #endif
00124
00125
00126