Column-oriented GPU-accelerated Database Management System
CoGaDB
|
00001 #pragma once 00002 00003 #include <query_processing/definitions.hpp> 00004 #include <util/iostream.hpp> 00005 #include <util/getname.hpp> 00006 #include <sstream> 00007 00008 namespace CoGaDB { 00009 namespace query_processing { 00010 namespace physical_operator { 00011 00012 class CPU_ColumnConstantOperator : public hype::queryprocessing::UnaryOperator<TablePtr, TablePtr> { 00013 public: 00014 typedef hype::queryprocessing::OperatorMapper_Helper_Template<TablePtr>::TypedOperatorPtr TypedOperatorPtr; 00015 00016 CPU_ColumnConstantOperator(const hype::SchedulingDecision& sched_dec, 00017 TypedOperatorPtr child, 00018 std::string column_name, 00019 const boost::any& value, 00020 const std::string& result_col_name, 00021 ColumnAlgebraOperation operation) 00022 : UnaryOperator<TablePtr,TablePtr>(sched_dec, child), 00023 column_name_(column_name), 00024 value_(value), 00025 result_column_name_(result_col_name), 00026 operation_(operation) { 00027 } 00028 00029 virtual bool execute() { 00030 00031 this->result_=BaseTable::ColumnConstantOperation(this->getInputData(),column_name_,value_,result_column_name_,operation_,CoGaDB::CPU); 00032 00033 if (this->result_) { 00034 setResultSize(((TablePtr) this->result_)->getNumberofRows()); 00035 return true; 00036 } else 00037 return false; 00038 } 00039 00040 virtual ~CPU_ColumnConstantOperator() { 00041 } 00042 private: 00043 std::string column_name_; 00044 boost::any value_; 00045 std::string result_column_name_; 00046 CoGaDB::ColumnAlgebraOperation operation_; 00047 }; 00048 00049 class GPU_ColumnConstantOperator : public hype::queryprocessing::UnaryOperator<TablePtr, TablePtr> { 00050 public: 00051 typedef hype::queryprocessing::OperatorMapper_Helper_Template<TablePtr>::TypedOperatorPtr TypedOperatorPtr; 00052 00053 GPU_ColumnConstantOperator(const hype::SchedulingDecision& sched_dec, 00054 TypedOperatorPtr child, 00055 std::string column_name, 00056 const boost::any& value, 00057 const std::string& result_col_name, 00058 ColumnAlgebraOperation operation) : UnaryOperator<TablePtr,TablePtr>(sched_dec, child), 00059 column_name_(column_name), 00060 value_(value), 00061 result_column_name_(result_col_name), 00062 operation_(operation) { 00063 } 00064 00065 virtual bool execute() { 00066 00067 this->result_=BaseTable::ColumnConstantOperation(this->getInputData(),column_name_,value_,result_column_name_,operation_,CoGaDB::GPU); 00068 00069 if (this->result_) { 00070 setResultSize(((TablePtr) this->result_)->getNumberofRows()); 00071 return true; 00072 } else 00073 return false; 00074 } 00075 00076 virtual ~GPU_ColumnConstantOperator() { 00077 } 00078 private: 00079 std::string column_name_; 00080 boost::any value_; 00081 std::string result_column_name_; 00082 CoGaDB::ColumnAlgebraOperation operation_; 00083 }; 00084 00085 Physical_Operator_Map_Ptr map_init_function_column_constant_operator(); 00086 TypedOperatorPtr create_CPU_ColumnConstant_Operator(TypedLogicalNode& logical_node, const hype::SchedulingDecision&, TypedOperatorPtr left_child, TypedOperatorPtr right_child); 00087 TypedOperatorPtr create_GPU_ColumnConstant_Operator(TypedLogicalNode& logical_node, const hype::SchedulingDecision&, TypedOperatorPtr left_child, TypedOperatorPtr right_child); 00088 00089 }//end namespace physical_operator 00090 00091 //extern Map_Init_Function init_function_sort_operator; 00092 00093 //Map_Init_Function init_function_sort_operator=physical_operator::map_init_function_column_constant_operator; //boost::bind(); 00094 00095 namespace logical_operator { 00096 00097 class Logical_ColumnConstantOperator : public hype::queryprocessing::TypedNode_Impl<TablePtr,physical_operator::map_init_function_column_constant_operator> //init_function_sort_operator> 00098 { 00099 public: 00100 00101 Logical_ColumnConstantOperator(std::string column_name, 00102 const boost::any& value, 00103 const std::string& result_col_name, 00104 ColumnAlgebraOperation operation, 00105 hype::DeviceConstraint dev_constr = CoGaDB::RuntimeConfiguration::instance().getGlobalDeviceConstraint()) 00106 : TypedNode_Impl<TablePtr,physical_operator::map_init_function_column_constant_operator>(false,dev_constr), 00107 column_name_(column_name), 00108 value_(value), 00109 result_column_name_(result_col_name), 00110 operation_(operation) { 00111 } 00112 00113 virtual unsigned int getOutputResultSize() const { 00114 return 10; 00115 } 00116 00117 virtual double getCalculatedSelectivity() const { 00118 return 0.1; 00119 } 00120 00121 virtual std::string getOperationName() const { 00122 return "ColumnConstantOperator"; 00123 } 00124 std::string toString(bool verbose) const{ 00125 std::string result="ColumnConstantOperator"; 00126 if(verbose){ 00127 result+=" ("; 00128 result+=result_column_name_; 00129 result+="="; 00130 result+=util::getName(operation_); 00131 result+="("; 00132 result+=column_name_; 00133 result+=","; 00134 std::stringstream ss; 00135 ss << value_; 00136 result+=ss.str(); 00137 result+=")"; 00138 00139 result+=")"; 00140 } 00141 return result; 00142 00143 } 00144 const std::string& getColumnName() { 00145 return column_name_; 00146 } 00147 00148 const boost::any& getValue(){ 00149 return value_; 00150 } 00151 00152 const std::string& getResultColumnName() { 00153 return result_column_name_; 00154 } 00155 00156 CoGaDB::ColumnAlgebraOperation getColumnAlgebraOperation(){ 00157 return operation_; 00158 } 00159 private: 00160 std::string column_name_; 00161 boost::any value_; 00162 std::string result_column_name_; 00163 CoGaDB::ColumnAlgebraOperation operation_; 00164 }; 00165 00166 }//end namespace logical_operator 00167 00168 }//end namespace query_processing 00169 00170 }; //end namespace CogaDB