Column-oriented GPU-accelerated Database Management System
CoGaDB
/home/sebastian/gpudbms/trunk/cogadb/include/query_processing/column_processing/cpu_algebra_operator.hpp
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines