Column-oriented GPU-accelerated Database Management System
CoGaDB
|
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