Example #1
0
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,"(+)");
}
Example #2
0
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();
}
Example #4
0
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);
  }
}
Example #7
0
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");
}
Example #8
0
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,"(*)");
}
Example #9
0
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,"(*)");
}
Example #10
0
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");
}
Example #11
0
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,"(+)");
}
Example #12
0
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");
}
Example #13
0
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");
}