Column-oriented GPU-accelerated Database Management System
CoGaDB
|
00001 #pragma once 00002 00003 #include <query_processing/definitions.hpp> 00004 #include <query_processing/column_processing/definitions.hpp> 00005 #include <util/getname.hpp> 00006 00007 namespace CoGaDB { 00008 namespace query_processing { 00009 namespace physical_operator { 00010 00011 class CPU_ColumnAlgebraOperation : public hype::queryprocessing::BinaryOperator<ColumnPtr, ColumnPtr, ColumnPtr> { 00012 public: 00013 //typedef hype::queryprocessing::OperatorMapper_Helper_Template<ColumnPtr>::TypedOperatorPtr ColumnWise_TypedOperatorPtr; 00014 typedef column_processing::cpu::TypedOperatorPtr TypedOperatorPtr; 00015 00016 CPU_ColumnAlgebraOperation(const hype::SchedulingDecision& sched_dec, 00017 TypedOperatorPtr left_child, 00018 TypedOperatorPtr right_child, 00019 ColumnAlgebraOperation op, 00020 MaterializationStatus mat_stat = MATERIALIZE) : BinaryOperator<ColumnPtr, ColumnPtr, ColumnPtr>(sched_dec, left_child, right_child), 00021 op_(op), 00022 mat_stat_(mat_stat) { 00023 } 00024 00025 virtual bool execute() { 00026 if (!quiet && debug && verbose) std::cout << "Execute Column Operator CPU" << std::endl; 00027 00028 if (op_ == ADD) { 00029 this->getInputDataLeftChild()->add(this->getInputDataRightChild()); 00030 } else if (op_ == SUB) { 00031 this->getInputDataLeftChild()->minus(this->getInputDataRightChild()); 00032 } else if (op_ == MUL) { 00033 this->getInputDataLeftChild()->multiply(this->getInputDataRightChild()); 00034 } else if (op_ == DIV) { 00035 this->getInputDataLeftChild()->division(this->getInputDataRightChild()); 00036 } 00037 00038 this->result_ = this->getInputDataLeftChild(); 00039 00040 if (this->result_) 00041 return true; 00042 else 00043 return false; 00044 } 00045 00046 virtual ~CPU_ColumnAlgebraOperation() { 00047 } 00048 private: 00049 ColumnAlgebraOperation op_; 00050 MaterializationStatus mat_stat_; 00051 }; 00052 00053 column_processing::cpu::Physical_Operator_Map_Ptr map_init_function_cpu_column_algebra_operator(); 00054 column_processing::cpu::TypedOperatorPtr create_CPU_ColumnAlgebraOperator(column_processing::cpu::TypedLogicalNode& logical_node, const hype::SchedulingDecision&, column_processing::cpu::TypedOperatorPtr left_child, column_processing::cpu::TypedOperatorPtr right_child); 00055 00056 // GPU_ColumnWise_TypedOperatorPtr create_GPU_ColumnAlgebraOperator(GPU_ColumnWise_TypedLogicalNode& logical_node, const hype::SchedulingDecision&, GPU_ColumnWise_TypedOperatorPtr left_child, GPU_ColumnWise_TypedOperatorPtr right_child); 00057 00058 }//end namespace physical_operator 00059 00060 namespace logical_operator { 00061 00062 class Logical_CPU_ColumnAlgebraOperation : public hype::queryprocessing::TypedNode_Impl<ColumnPtr, physical_operator::map_init_function_cpu_column_algebra_operator> //init_function_Join_operator> 00063 { 00064 public: 00065 00066 Logical_CPU_ColumnAlgebraOperation(ColumnAlgebraOperation op, 00067 MaterializationStatus mat_stat = MATERIALIZE, 00068 hype::DeviceConstraint dev_constr = hype::DeviceConstraint(hype::CPU_ONLY)) 00069 : TypedNode_Impl<ColumnPtr, physical_operator::map_init_function_cpu_column_algebra_operator>(false, dev_constr), 00070 op_(op), 00071 mat_stat_(mat_stat) { 00072 } 00073 00074 virtual unsigned int getOutputResultSize() const { 00075 return 0; 00076 } 00077 00078 virtual double getCalculatedSelectivity() const { 00079 return 1; 00080 } 00081 00082 virtual std::string getOperationName() const { 00083 return "CPU_ColumnAlgebra_Operator"; //util::getName(op_); 00084 } 00085 00086 virtual ColumnAlgebraOperation getColumnAlgebraOperation() const { 00087 return op_; 00088 } 00089 00090 const MaterializationStatus& getMaterializationStatus() const { 00091 return mat_stat_; 00092 } 00093 private: 00094 ColumnAlgebraOperation op_; 00095 MaterializationStatus mat_stat_; 00096 }; 00097 00098 }//end namespace logical_operator 00099 00100 }//end namespace query_processing 00101 00102 }; //end namespace CogaDB