Column-oriented GPU-accelerated Database Management System
CoGaDB
|
00001 #pragma once 00002 00003 #include <query_processing/definitions.hpp> 00004 00005 00006 namespace CoGaDB { 00007 namespace query_processing { 00008 namespace physical_operator { 00009 00010 class CPU_CrossJoin_Operator : public hype::queryprocessing::BinaryOperator<TablePtr, TablePtr, TablePtr> { 00011 public: 00012 typedef hype::queryprocessing::OperatorMapper_Helper_Template<TablePtr>::TypedOperatorPtr TypedOperatorPtr; 00013 00014 CPU_CrossJoin_Operator(const hype::SchedulingDecision& sched_dec, 00015 TypedOperatorPtr left_child, 00016 TypedOperatorPtr right_child, 00017 MaterializationStatus mat_stat = MATERIALIZE) : BinaryOperator<TablePtr, TablePtr, TablePtr>(sched_dec, left_child, right_child), 00018 join_column1_name_(), 00019 join_column2_name_(), 00020 mat_stat_(mat_stat) { 00021 } 00022 00023 virtual bool execute() { 00024 if (!quiet && verbose && debug) std::cout << "Execute Join CPU" << std::endl; 00025 //const TablePtr sort(TablePtr table, const std::string& column_name, SortOrder order=ASCENDING, MaterializationStatus mat_stat=MATERIALIZE, ComputeDevice comp_dev=CPU); 00026 //this->result_=BaseTable::sort(this->getInputData(), column_name_,order_, mat_stat_,CPU); 00027 //JoinAlgorithm{SORT_MERGE_JOIN,NESTED_LOOP_JOIN,HASH_JOIN}; 00028 this->result_ = BaseTable::crossjoin(this->getInputDataLeftChild(), this->getInputDataRightChild(), mat_stat_); 00029 if (this->result_) { 00030 setResultSize(((TablePtr) this->result_)->getNumberofRows()); 00031 return true; 00032 } else 00033 return false; 00034 } 00035 00036 virtual ~CPU_CrossJoin_Operator() { 00037 } 00038 private: 00039 std::string join_column1_name_; 00040 std::string join_column2_name_; 00041 MaterializationStatus mat_stat_; 00042 }; 00043 00044 00045 00046 Physical_Operator_Map_Ptr map_init_function_crossjoin_operator(); 00047 TypedOperatorPtr create_CPU_CrossJoin_Operator(TypedLogicalNode& logical_node, const hype::SchedulingDecision&, TypedOperatorPtr left_child, TypedOperatorPtr right_child); 00048 }//end namespace physical_operator 00049 00050 //extern Map_Init_Function init_function_Join_operator; 00051 00052 //Map_Init_Function init_function_Join_operator=physical_operator::map_init_function_Join_operator; //boost::bind(); 00053 00054 namespace logical_operator { 00055 00056 class Logical_CrossJoin : public hype::queryprocessing::TypedNode_Impl<TablePtr, physical_operator::map_init_function_crossjoin_operator> //init_function_Join_operator> 00057 { 00058 public: 00059 00060 Logical_CrossJoin(MaterializationStatus mat_stat = MATERIALIZE, 00061 hype::DeviceConstraint dev_constr = hype::DeviceConstraint() 00062 ) : TypedNode_Impl<TablePtr, physical_operator::map_init_function_crossjoin_operator>(false, dev_constr), 00063 join_column1_name_(), 00064 join_column2_name_(), 00065 mat_stat_(mat_stat) { 00066 } 00067 00068 virtual unsigned int getOutputResultSize() const { 00069 return 10; 00070 } 00071 00072 virtual double getCalculatedSelectivity() const { 00073 return 1; 00074 } 00075 00076 virtual std::string getOperationName() const { 00077 return "CROSS_JOIN"; 00078 } 00079 00080 const std::string& getLeftJoinColumnName() { 00081 return join_column1_name_; 00082 } 00083 00084 const std::string& getRightJoinColumnName() { 00085 return join_column2_name_; 00086 } 00087 00088 const MaterializationStatus& getMaterializationStatus() const { 00089 return mat_stat_; 00090 } 00091 private: 00092 std::string join_column1_name_; 00093 std::string join_column2_name_; 00094 MaterializationStatus mat_stat_; 00095 }; 00096 00097 }//end namespace logical_operator 00098 00099 }//end namespace query_processing 00100 00101 }; //end namespace CogaDB