Column-oriented GPU-accelerated Database Management System
CoGaDB
/home/sebastian/gpudbms/trunk/cogadb/include/core/base_column.hpp
Go to the documentation of this file.
00001 
00002 #pragma once
00003 //STL includes
00004 #include <typeinfo>
00005 //boost includes
00006 #include <boost/archive/binary_oarchive.hpp>
00007 #include <boost/archive/binary_iarchive.hpp>
00008 #include <boost/serialization/binary_object.hpp>
00009 #include <boost/serialization/vector.hpp>
00010 #include <boost/serialization/list.hpp>
00011 //CoGaDB includes
00012 #include <core/global_definitions.hpp>
00013 
00014 namespace CoGaDB{
00015 /* \brief a PositionList is an STL vector of TID values*/
00016 typedef std::vector<TID> PositionList;
00017 /* \brief a PositionListPtr is a a references counted smart pointer to a PositionList object*/
00018 typedef shared_pointer_namespace::shared_ptr<PositionList> PositionListPtr;
00019 /* \brief a PositionListPair is an STL pair consisting of two PositionListPtr objects
00020  *  \details This type is returned by binary operators, e.g., joins*/
00021 typedef std::pair<PositionListPtr,PositionListPtr> PositionListPair;
00022 /* \brief a PositionListPairPtr is a a references counted smart pointer to a PositionListPair object*/
00023 typedef shared_pointer_namespace::shared_ptr<PositionListPair> PositionListPairPtr;
00024 
00025 class Table; //forward declaration
00026 
00038 class ColumnBase{
00039         public:
00041         typedef shared_pointer_namespace::shared_ptr<ColumnBase> ColumnPtr;
00042         /***************** constructors and destructor *****************/
00043         ColumnBase(const std::string& name, AttributeType db_type);
00044         virtual ~ColumnBase();
00045         /***************** methods *****************/   
00048         virtual bool insert(const boost::any& new_Value)=0;
00051         virtual bool update(TID tid, const boost::any& new_Value)=0;
00054         virtual bool update(PositionListPtr tids, const boost::any& new_value) = 0;             
00057         virtual bool remove(TID tid)=0;
00061         virtual bool remove(PositionListPtr tid)=0;     
00065         virtual const boost::any get(TID tid)=0; //not const, because operator [] does not provide const return type and the child classes rely on []
00067         virtual void print() const throw()=0;
00069         virtual size_t size() const throw()=0;
00071         virtual unsigned int getSizeinBytes() const throw()=0;
00074         virtual const ColumnPtr copy() const=0;
00077         virtual const ColumnPtr gather(PositionListPtr tid_list)=0;        
00080         virtual const ColumnPtr materialize() throw() =0;
00081         /***************** relational operations on Columns which return a PositionListPtr/PositionListPairPtr *****************/
00084         virtual const PositionListPtr sort(SortOrder order=ASCENDING)= 0; 
00087         virtual const PositionListPtr selection(const boost::any& value_for_comparison, const ValueComparator comp)= 0;
00091         virtual const PositionListPtr selection(ColumnPtr, const ValueComparator comp)= 0;        
00095         virtual const PositionListPtr parallel_selection(const boost::any& value_for_comparison, const ValueComparator comp, unsigned int number_of_threads) = 0;
00098         virtual const PositionListPairPtr hash_join(ColumnPtr join_column)=0;
00101         virtual const PositionListPairPtr parallel_hash_join(ColumnPtr join_column,unsigned int number_of_threads)=0;
00104         virtual const PositionListPairPtr sort_merge_join(ColumnPtr join_column)=0;
00107         virtual const PositionListPairPtr nested_loop_join(ColumnPtr join_column)=0;
00108         /***************** column algebra operations *****************/ 
00111         virtual bool add(const boost::any& new_Value) = 0;
00114         virtual bool add(ColumnPtr column) = 0;
00117         virtual bool minus(const boost::any& new_Value) = 0;
00120         virtual bool minus(ColumnPtr column) = 0;       
00123         virtual bool multiply(const boost::any& new_Value) = 0;
00126         virtual bool multiply(ColumnPtr column) = 0;
00129         virtual bool division(const boost::any& new_Value) = 0; 
00132         virtual bool division(ColumnPtr column) = 0;    
00133         /***************** persistency operations *****************/            
00136         virtual bool store(const std::string& path) = 0;
00140         virtual bool load(const std::string& path) = 0;
00143         /***************** misc operations *****************/   
00144         virtual bool isMaterialized() const  throw() = 0;
00147         virtual bool isCompressed() const  throw() = 0; 
00149         virtual const std::type_info& type() const throw() = 0;
00151         AttributeType getType() const throw();
00154         const std::string getName() const throw();
00156         void setName(const std::string& value) throw();        
00159         virtual bool is_equal(ColumnPtr column) = 0;    
00161         virtual int compareValuesAtIndexes(TID id1, TID id2) = 0;       
00162         
00163         protected:
00165         std::string name_;
00167         AttributeType db_type_;
00168 //      Table& table_;
00169 };
00170 
00172 typedef ColumnBase::ColumnPtr ColumnPtr;
00173 
00174 typedef std::vector<ColumnPtr> ColumnVector;
00175 typedef shared_pointer_namespace::shared_ptr<ColumnVector> ColumnVectorPtr;
00176 
00178 const ColumnPtr createColumn(AttributeType type, const std::string& name);
00179 
00181 PositionListPtr computePositionListUnion(PositionListPtr tids1, PositionListPtr tids2);
00183 PositionListPtr computePositionListIntersection(PositionListPtr tids1, PositionListPtr tids2);
00184 
00185 
00186 }; //end namespace CogaDB
00187 
00188 
00189 //extend boost namespace to add serialization feature to my own types
00190 namespace boost {
00191 namespace serialization {
00192 
00193 template<class Archive>
00194 void serialize(Archive & ar, std::pair<CoGaDB::AttributeType,std::string> & pair, const unsigned int ) //version)
00195 {
00196         
00197     ar & pair.first;
00198     ar & pair.second;
00199     
00200 }
00201 
00202 } // namespace serialization
00203 } // namespace boost
00204 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines