static void test_add(){ std::vector<ExpressionItem> express_item_list; ExpressionItem ei1; ei1.setIntValue("3"); express_item_list.push_back(ei1); ExpressionItem ei2; ei2.setDecimalValue("8.8"); express_item_list.push_back(ei2); ExpressionItem ei3; ei3.setOperator("+"); express_item_list.push_back(ei3); ExpressionItem ei4; ei4.setIntValue("-10"); express_item_list.push_back(ei4); ExpressionItem ei5; ei5.setOperator("+"); express_item_list.push_back(ei5); ExpressionItem result; ExpressionCalculator::calcuate(express_item_list,result); string s=result._decimal.createStringFromDecimal(); print_test_name_result(is_equal(NValue::getDecimalValueFromString(s),NValue::getDecimalValueFromString("1.8"))&&result.return_type==t_decimal,"(+)"); }
static void test_com_less(){ //(3.3+4.4)<10 std::vector<ExpressionItem> express_item_list; ExpressionItem ei1; ei1.setFloatValue("3.3"); express_item_list.push_back(ei1); ExpressionItem ei2; ei2.setFloatValue("4.4"); express_item_list.push_back(ei2); ExpressionItem ei3; ei3.setOperator("-"); express_item_list.push_back(ei3); ExpressionItem ei4; ei4.setIntValue("10"); express_item_list.push_back(ei4); ExpressionItem ei5; ei5.setOperator("<"); express_item_list.push_back(ei5); ExpressionItem result; ExpressionCalculator::calcuate(express_item_list,result); print_test_name_result(result.content.data.value._bool==true&&result.return_type==t_boolean,"compare(<)"); }
static void test_scan_filter_performance(int value) { unsigned long long int start=curtick(); TableDescriptor* table=Catalog::getInstance()->getTable("cj"); LogicalOperator* cj_scan=new LogicalScan(table->getProjectoin(0)); Filter::Condition filter_condition_1; filter_condition_1.add(table->getAttribute(3),AttributeComparator::GEQ,std::string("10107")); filter_condition_1.add(table->getAttribute(3),AttributeComparator::L,(void*)&value); LogicalOperator* filter_1=new Filter(filter_condition_1,cj_scan); const NodeID collector_node_id=0; LogicalOperator* root=new LogicalQueryPlanRoot(collector_node_id,filter_1,LogicalQueryPlanRoot::PERFORMANCE); BlockStreamPerformanceMonitorTop* executable_query_plan=(BlockStreamPerformanceMonitorTop*)root->getIteratorTree(1024*64); // executable_query_plan->print(); executable_query_plan->open(); while(executable_query_plan->next(0)); executable_query_plan->close(); // ResultSet *result_set=executable_query_plan->getResultSet(); const unsigned long int number_of_tuples=executable_query_plan->getNumberOfTuples(); printf("execution time: %4.4f seconds.\n",getSecond(start)); if(!print_test_name_result(number_of_tuples==26820,"Low selectivity filter")){ printf("\tExpected:26695 actual: %d\n",number_of_tuples); } // result_set->~ResultSet(); executable_query_plan->~BlockStreamIteratorBase(); root->~LogicalOperator(); }
inline void test_decimal_add2(){ NValue v1 = NValue::getDecimalValueFromString("4.4"); NValue v2 = NValue::getDecimalValueFromString("-8"); column_type* op=new column_type(data_type(t_decimal),2); op->operate->Multiply(&v1,&v2); if(!print_test_name_result(op->operate->ToString(&v1)==string("-35.20"),"Decimal multiple")){ printf("Expected -35.20, actual: %s\n",op->operate->ToString(&v1).c_str()); } }
static void bulk_test_logical_index_scan() { vector<IndexScanIterator::query_range> q_range; int count = 1022; ifstream infile("/home/scdong/code/sec_code", ios::in); ofstream outfile("/home/scdong/code/fail_log.dat", ios::out); unsigned long int value = 0; unsigned long int expect_num; TableDescriptor* table = Catalog::getInstance()->getTable("cj"); IndexScanIterator::query_range q2; while (count > 0) { q_range.clear(); infile >> value >> expect_num; q2.value_low = malloc(sizeof(int)); // newmalloc q2.value_low = (void*)(&value); q2.comp_low = EQ; q2.value_high = malloc(sizeof(int)); // newmalloc q2.value_high = (void*)(&value); q2.comp_high = EQ; q2.c_type.type = t_int; q2.c_type.operate = new OperateInt(); q_range.push_back(q2); LogicalOperator* index_scan = new LogicalIndexScan(table->getProjectoin(0)->getProjectionID(), table->getAttribute("sec_code"), q_range); const NodeID collector_node_id = 0; LogicalOperator* root = new LogicalQueryPlanRoot( collector_node_id, index_scan, LogicalQueryPlanRoot::kResultCollector); PhysicalOperatorBase* executable_query_plan = root->GetPhysicalPlan(1024 * 64); executable_query_plan->Open(); while (executable_query_plan->Next(0)) ; executable_query_plan->Close(); ResultSet* result_set = executable_query_plan->getResultSet(); const unsigned long int number_of_tuples = result_set->getNumberOftuples(); executable_query_plan->~PhysicalOperatorBase(); root->~LogicalOperator(); cout << 1022 - count << ": Sec_code: " << value << "\t Result: " << number_of_tuples << endl; if (!print_test_name_result(number_of_tuples == expect_num, "Index Scan")) { printf("\tIndex Scan sec_code = %d, Expected:%d actual: %d\n", value, expect_num, number_of_tuples); outfile << "Index Scan sec_code = " << value << "\tFAIL!\n"; outfile << "\tExcepted: " << expect_num << "\tActual: " << number_of_tuples << endl; } count--; } }
static void test_index_filter_performance(int value_high) { unsigned long long int start = curtick(); vector<IndexScanIterator::query_range> q_range; q_range.clear(); int value_low = 10107; // int value_high = 600257; TableDescriptor* table = Catalog::getInstance()->getTable("cj"); IndexScanIterator::query_range q; q.value_low = malloc(sizeof(int)); // newmalloc q.value_low = (void*)(&value_low); q.comp_low = GEQ; q.value_high = malloc(sizeof(int)); // newmalloc q.value_high = (void*)(&value_high); q.comp_high = L; q.c_type.type = t_int; q.c_type.operate = new OperateInt(); q_range.push_back(q); LogicalOperator* index_scan = new LogicalIndexScan(table->getProjectoin(0)->getProjectionID(), table->getAttribute("sec_code"), q_range); const NodeID collector_node_id = 0; LogicalOperator* root = new LogicalQueryPlanRoot( collector_node_id, index_scan, LogicalQueryPlanRoot::PERFORMANCE); // root->print(); PerformanceMonitor* executable_query_plan = (PerformanceMonitor*)root->GetPhysicalPlan(1024 * 64); executable_query_plan->Open(); while (executable_query_plan->Next(0)) ; executable_query_plan->Close(); // ResultSet* result_set = executable_query_plan->getResultSet(); const unsigned long int number_of_tuples = executable_query_plan->GetNumberOfTuples(); delete executable_query_plan; root->~LogicalOperator(); // cout << "Sec_code: " << value_low << "\t Result: " << number_of_tuples //<< endl; printf("execution time: %4.4f seconds.\n", getSecond(start)); if (!print_test_name_result(number_of_tuples == 26820, "Index Scan")) { printf("\tIndex Scan sec_code = %d, Expected:%d actual: %d\n", value_low, 26820, number_of_tuples); } }
inline void test_upper(){ Expression express_item_list; ExpressionItem ei0; // x ei0.setStringValue("asbcd"); express_item_list.push_back(ei0); ExpressionItem ei1; // 60 ei1.setOperator("upper"); express_item_list.push_back(ei1); ExpressionItem result; ExpressionCalculator::calcuate(express_item_list,result); print_test_name_result(result._string=="ASBCD"&&result.return_type==t_string,"upper"); }
static void test_multiple_(){ std::vector<ExpressionItem> express_item_list; ExpressionItem e1; e1.setIntValue("3"); express_item_list.push_back(e1); ExpressionItem e2; e2.setFloatValue("1.8"); express_item_list.push_back(e2); ExpressionItem e3; e3.setOperator("*"); express_item_list.push_back(e3); ExpressionItem result; ExpressionCalculator::calcuate(express_item_list,result); print_test_name_result(is_equal(result.content.data.value._float,5.4)&&result.return_type==t_float,"(*)"); }
static void test_multiple(){ std::vector<ExpressionItem> express_item_list; ExpressionItem e1; e1.setIntValue("3"); express_item_list.push_back(e1); ExpressionItem e2; e2.setDecimalValue("1.8"); express_item_list.push_back(e2); ExpressionItem e3; e3.setOperator("*"); express_item_list.push_back(e3); ExpressionItem result; ExpressionCalculator::calcuate(express_item_list,result); string s=result._decimal.createStringFromDecimal(); print_test_name_result(is_equal(NValue::getDecimalValueFromString(s),NValue::getDecimalValueFromString("5.40"))&&result.return_type==t_decimal,"(*)"); }
inline void test_cast(){ Expression express_item_list; ExpressionItem ei0; // 60 ei0.setIntValue("000012"); express_item_list.push_back(ei0); ExpressionItem ei1; // x ei1.setStringValue("int"); express_item_list.push_back(ei1); ExpressionItem ei2; // x ei2.setOperator("cast"); express_item_list.push_back(ei2); ExpressionItem result; ExpressionCalculator::calcuate(express_item_list,result); print_test_name_result(result.content.data.value._int==12&&result.return_type==t_int,"cast"); }
static void test_add_(){ std::vector<ExpressionItem> express_item_list; ExpressionItem ei1; ExpressionItem ei2; ExpressionItem ei3; ExpressionItem ei4; ExpressionItem ei5; ExpressionItem ei6; ExpressionItem ei7; ExpressionItem ei8; ExpressionItem ei9; ei1.setIntValue("2"); ei2.setIntValue("3"); ei3.setIntValue("4"); ei4.setOperator("+"); ei5.setOperator("*"); ei6.setIntValue("6"); ei7.setIntValue("5"); ei8.setOperator("-"); ei9.setOperator("*"); express_item_list.push_back(ei1); express_item_list.push_back(ei2); express_item_list.push_back(ei3); express_item_list.push_back(ei4); express_item_list.push_back(ei5); express_item_list.push_back(ei6); express_item_list.push_back(ei7); express_item_list.push_back(ei8); express_item_list.push_back(ei9); ExpressionItem result; ExpressionCalculator::calcuate(express_item_list,result); cout<<result.content.data.value._int<<endl; print_test_name_result(is_equal(result.content.data.value._int,14)&&result.return_type==t_int,"(+)"); }
inline void test_trim(){ Expression express_item_list; ExpressionItem ei1; // 60 ei1.setStringValue(" "); express_item_list.push_back(ei1); ExpressionItem ei0; // 60 ei0.setIntValue("0"); express_item_list.push_back(ei0); ExpressionItem ei2; // x ei2.setStringValue(" abdsc "); express_item_list.push_back(ei2); ExpressionItem ei3; // x ei3.setOperator("trim"); express_item_list.push_back(ei3); ExpressionItem result; ExpressionCalculator::calcuate(express_item_list,result); print_test_name_result(result._string=="abdsc"&&result.return_type==t_string,"trim"); }
inline void test_case_exp(){ /** Expression: * case * when x<60 then "FAIL" * when x<80 then "GOOD" * else "PERFECT" * end * * * is as following: * * CASE-end * X * 60 * < * WHEN * "FAIL" * THEN * X * 80 * < * WHEN * "GOOD" * THEN * "PERFECT" * ELSE * CASE */ const int score=40; //x value Expression express_item_list; ExpressionItem ei1; // case ei1.setOperator("case"); express_item_list.push_back(ei1); ExpressionItem ei2; // x ei2.setIntValue(score); express_item_list.push_back(ei2); ExpressionItem ei3; // 60 ei3.setIntValue("60"); express_item_list.push_back(ei3); ExpressionItem ei4; // < ei4.setOperator("<"); express_item_list.push_back(ei4); ExpressionItem ei5; // when ei5.setOperator("when"); express_item_list.push_back(ei5); ExpressionItem ei6; // value ei6.setStringValue("FAILED"); express_item_list.push_back(ei6); ExpressionItem ei7; // then ei7.setOperator("then"); express_item_list.push_back(ei7); ExpressionItem ei8; // x ei8.setIntValue(score); express_item_list.push_back(ei2); ExpressionItem ei9; // 60 ei9.setIntValue(80); express_item_list.push_back(ei3); ExpressionItem ei10; // < ei10.setOperator("<"); express_item_list.push_back(ei4); ExpressionItem ei11; // when ei11.setOperator("when"); express_item_list.push_back(ei5); ExpressionItem ei12; // value ei12.setStringValue("Good"); express_item_list.push_back(ei6); ExpressionItem ei13; // then ei13.setOperator("then"); express_item_list.push_back(ei7); ExpressionItem ei14; // value ei14.setStringValue("PERFECT"); express_item_list.push_back(ei14); ExpressionItem ei15; // else ei15.setOperator("else"); express_item_list.push_back(ei15); ExpressionItem ei16; // case ei16.setOperator("case"); express_item_list.push_back(ei16); ExpressionItem result; ExpressionCalculator::calcuate(express_item_list,result); print_test_name_result(result._string=="FAILED"&&result.return_type==t_string,"case"); }