Column-oriented GPU-accelerated Database Management System
CoGaDB
|
00001 #pragma once 00002 00003 #include <core/selection_expression.hpp> 00004 #include <query_processing/column_processing/definitions.hpp> 00005 #include <persistence/storage_manager.hpp> 00006 00007 namespace CoGaDB { 00008 namespace query_processing { 00009 namespace physical_operator { 00010 00011 class CPU_column_constant_filter_operator : public hype::queryprocessing::UnaryOperator<ColumnPtr, ColumnPtr> { 00012 public: 00013 typedef column_processing::cpu::TypedOperatorPtr TypedOperatorPtr; 00014 CPU_column_constant_filter_operator(const hype::SchedulingDecision& sched_dec, TypedOperatorPtr child, const Predicate& pred); 00015 virtual bool execute(); 00016 virtual ~CPU_column_constant_filter_operator(); 00017 private: 00018 Predicate pred_; 00019 }; 00020 00021 class GPU_column_constant_filter_operator : public hype::queryprocessing::UnaryOperator<ColumnPtr, ColumnPtr> { 00022 public: 00023 typedef column_processing::cpu::TypedOperatorPtr TypedOperatorPtr; 00024 GPU_column_constant_filter_operator(const hype::SchedulingDecision& sched_dec, TypedOperatorPtr child, const Predicate& pred); 00025 virtual bool execute(); 00026 virtual ~GPU_column_constant_filter_operator(); 00027 private: 00028 Predicate pred_; 00029 }; 00030 00031 00032 00033 column_processing::cpu::Physical_Operator_Map_Ptr map_init_function_column_constant_filter_operator(); 00034 column_processing::cpu::TypedOperatorPtr create_CPU_column_constant_filter_operator(column_processing::cpu::TypedLogicalNode& logical_node, const hype::SchedulingDecision&, column_processing::cpu::TypedOperatorPtr left_child, column_processing::cpu::TypedOperatorPtr right_child); 00035 column_processing::cpu::TypedOperatorPtr create_GPU_column_constant_filter_operator(column_processing::cpu::TypedLogicalNode& logical_node, const hype::SchedulingDecision&, column_processing::cpu::TypedOperatorPtr left_child, column_processing::cpu::TypedOperatorPtr right_child); 00036 00037 }//end namespace physical_operator 00038 00039 namespace logical_operator { 00040 00041 class Logical_Column_Constant_Filter : public hype::queryprocessing::TypedNode_Impl<ColumnPtr, physical_operator::map_init_function_column_constant_filter_operator> //init_function_column_constant_filter_operator> //init_function_column_constant_filter_operator> 00042 { 00043 public: 00044 Logical_Column_Constant_Filter(const Predicate&, hype::DeviceConstraint dev_constr = hype::DeviceConstraint()); 00045 00046 virtual unsigned int getOutputResultSize() const; 00047 00048 virtual double getCalculatedSelectivity() const; 00049 00050 virtual std::string getOperationName() const; 00051 00052 const Predicate& getPredicate() const; 00053 00054 std::string toString(bool verbose) const; 00055 //virtual column_processing::cpu::TypedOperatorPtr getOptimalOperator(column_processing::cpu::TypedOperatorPtr left_child, column_processing::cpu::TypedOperatorPtr right_child, hype::DeviceTypeConstraint dev_constr); 00056 00057 private: 00058 Predicate pred_; 00059 }; 00060 00061 }//end namespace logical_operator 00062 00063 }//end namespace query_processing 00064 00065 }; //end namespace CogaDB