Column-oriented GPU-accelerated Database Management System
CoGaDB
/home/sebastian/gpudbms/trunk/cogadb/include/query_processing/column_algebra.hpp
Go to the documentation of this file.
00001 #pragma once
00002 
00003 #include <query_processing/definitions.hpp>
00004 #include <util/get_name.hpp>
00005 
00006 //              typedef hype::queryprocessing::OperatorMapper_Helper_Template<ColumnPtr>::Map_Init_Function ColumnWise_Map_Init_Function;
00007 //              typedef hype::queryprocessing::OperatorMapper_Helper_Template<ColumnPtr>::Physical_Operator_Map ColumnWise_Physical_Operator_Map;
00008 //              typedef hype::queryprocessing::OperatorMapper_Helper_Template<ColumnPtr>::Physical_Operator_Map_Ptr ColumnWise_Physical_Operator_Map_Ptr;
00009 //              typedef hype::queryprocessing::OperatorMapper_Helper_Template<ColumnPtr>::TypedOperatorPtr ColumnWise_TypedOperatorPtr;
00010 //              typedef hype::queryprocessing::OperatorMapper_Helper_Template<ColumnPtr>::TypedLogicalNode ColumnWise_TypedLogicalNode;
00011 //              typedef hype::queryprocessing::OperatorMapper_Helper_Template<ColumnPtr>::PhysicalQueryPlanPtr ColumnWise_PhysicalQueryPlanPtr;
00012 //
00013 //              typedef hype::queryprocessing::LogicalQueryPlan<ColumnPtr> ColumnWise_LogicalQueryPlan;
00014 
00015 namespace CoGaDB {
00016     namespace query_processing {
00017         namespace physical_operator {
00018 
00019             class CPU_ColumnAlgebraOperation : public hype::queryprocessing::BinaryOperator<ColumnPtr, ColumnPtr, ColumnPtr> {
00020             public:
00021                 typedef hype::queryprocessing::OperatorMapper_Helper_Template<ColumnPtr>::TypedOperatorPtr ColumnWise_TypedOperatorPtr;
00022 
00023                 CPU_ColumnAlgebraOperation(const hype::SchedulingDecision& sched_dec,
00024                         ColumnWise_TypedOperatorPtr left_child,
00025                         ColumnWise_TypedOperatorPtr right_child,
00026                         ColumnAlgebraOperation op,
00027                         MaterializationStatus mat_stat = MATERIALIZE) : BinaryOperator<ColumnPtr, ColumnPtr, ColumnPtr>(sched_dec, left_child, right_child),
00028                 op_(op),
00029                 mat_stat_(mat_stat) {
00030                 }
00031 
00032                 virtual bool execute() {
00033                     std::cout << "Execute Column Operator CPU" << std::endl;
00034 
00035                     if (op_ == ADD) {
00036                         this->getInputDataLeftChild()->add(this->getInputDataRightChild());
00037                     } else if (op_ == SUB) {
00038                         this->getInputDataLeftChild()->minus(this->getInputDataRightChild());
00039                     } else if (op_ == MUL) {
00040                         this->getInputDataLeftChild()->multiply(this->getInputDataRightChild());
00041                     } else if (op_ == DIV) {
00042                         this->getInputDataLeftChild()->division(this->getInputDataRightChild());
00043                     }
00044 
00045                     this->result_ = this->getInputDataLeftChild();
00046 
00047                     if (this->result_)
00048                         return true;
00049                     else
00050                         return false;
00051                 }
00052 
00053                 virtual ~CPU_ColumnAlgebraOperation() {
00054                 }
00055             private:
00056                 ColumnAlgebraOperation op_;
00057                 MaterializationStatus mat_stat_;
00058             };
00059 
00060             class GPU_ColumnAlgebraOperation : public hype::queryprocessing::BinaryOperator<gpu::GPU_Base_ColumnPtr, gpu::GPU_Base_ColumnPtr, gpu::GPU_Base_ColumnPtr> {
00061             public:
00062                 typedef hype::queryprocessing::OperatorMapper_Helper_Template<gpu::GPU_Base_ColumnPtr>::TypedOperatorPtr GPU_ColumnWise_TypedOperatorPtr;
00063 
00064                 GPU_ColumnAlgebraOperation(const hype::SchedulingDecision& sched_dec,
00065                         GPU_ColumnWise_TypedOperatorPtr left_child,
00066                         GPU_ColumnWise_TypedOperatorPtr right_child,
00067                         ColumnAlgebraOperation op,
00068                         MaterializationStatus mat_stat = MATERIALIZE) : BinaryOperator<gpu::GPU_Base_ColumnPtr, gpu::GPU_Base_ColumnPtr, gpu::GPU_Base_ColumnPtr>(sched_dec, left_child, right_child),
00069                 op_(op),
00070                 mat_stat_(mat_stat) {
00071                 }
00072 
00073                 virtual bool execute() {
00074                     std::cout << "Execute Column Operator GPU" << std::endl;
00075                     //const TablePtr sort(TablePtr table, const std::string& column_name, SortOrder order=ASCENDING, MaterializationStatus mat_stat=MATERIALIZE, ComputeDevice comp_dev=CPU);
00076                     //this->result_=BaseTable::sort(this->getInputData(), column_name_,order_, mat_stat_,CPU);
00077                     //JoinAlgorithm{SORT_MERGE_JOIN,NESTED_LOOP_JOIN,HASH_JOIN};
00078                     //this->result_=BaseTable::join(this->getInputDataLeftChild(), join_column1_name_, this->getInputDataRightChild(), join_column2_name_, NESTED_LOOP_JOIN, mat_stat_, CPU);
00079 
00080                     if (this->result_)
00081                         return true;
00082                     else
00083                         return false;
00084                 }
00085 
00086                 virtual ~GPU_ColumnAlgebraOperation() {
00087                 }
00088             private:
00089                 ColumnAlgebraOperation op_;
00090                 MaterializationStatus mat_stat_;
00091             };
00092 
00093             ColumnWise_Physical_Operator_Map_Ptr map_init_function_column_algebra_operator(); //erfordert dass object auf unterschiedliche Processing devices gleich behandelt werden kann, was aber in diesem Fall nicht gegeben ist, weil CPU und GPU columns nix miteinander zu tun haben! ->
00094             ColumnWise_TypedOperatorPtr create_CPU_ColumnAlgebraOperator(ColumnWise_TypedLogicalNode& logical_node, const hype::SchedulingDecision&, ColumnWise_TypedOperatorPtr left_child, ColumnWise_TypedOperatorPtr right_child);
00095             GPU_ColumnWise_TypedOperatorPtr create_GPU_ColumnAlgebraOperator(GPU_ColumnWise_TypedLogicalNode& logical_node, const hype::SchedulingDecision&, GPU_ColumnWise_TypedOperatorPtr left_child, GPU_ColumnWise_TypedOperatorPtr right_child);
00096 
00097         }//end namespace physical_operator
00098 
00099         //extern Map_Init_Function init_function_Join_operator;
00100 
00101         //Map_Init_Function init_function_Join_operator=physical_operator::map_init_function_Join_operator; //boost::bind();
00102 
00103         namespace logical_operator {
00104 
00105             class Logical_ColumnAlgebraOperation : public hype::queryprocessing::TypedNode_Impl<ColumnPtr, physical_operator::map_init_function_column_algebra_operator> //init_function_Join_operator>
00106             {
00107             public:
00108 
00109                 Logical_ColumnAlgebraOperation(ColumnAlgebraOperation op,
00110                         MaterializationStatus mat_stat = MATERIALIZE) : TypedNode_Impl<ColumnPtr, physical_operator::map_init_function_column_algebra_operator>(),
00111                 op_(op),
00112                 mat_stat_(mat_stat) {
00113                 }
00114 
00115                 virtual unsigned int getOutputResultSize() const {
00116                     return 0;
00117                 }
00118 
00119                 virtual double getCalculatedSelectivity() const {
00120                     return 1;
00121                 }
00122 
00123                 virtual std::string getOperationName() const {
00124                     return util::getName(op_);
00125                 }
00126 
00127                 virtual ColumnAlgebraOperation getColumnAlgebraOperation() const {
00128                     return op_;
00129                 }
00130 
00131                 const MaterializationStatus& getMaterializationStatus() const {
00132                     return mat_stat_;
00133                 }
00134             private:
00135                 ColumnAlgebraOperation op_;
00136                 MaterializationStatus mat_stat_;
00137             };
00138 
00139         }//end namespace logical_operator
00140 
00141     }//end namespace query_processing
00142 
00143 }; //end namespace CogaDB
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines