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