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