TEST_F(FilterTest, SimpleFilter) { // WHERE id = 20 // ComparisonExpression equal(EXPRESSION_TYPE_COMPARE_EQUAL, // TupleValueExpression::getInstance(0), // ConstantValueExpression::getInstance(voltdb::Value::newBigIntValue(20))); TupleValueExpression *tup_val_exp = new TupleValueExpression(0, std::string("tablename"), std::string("colname")); ConstantValueExpression *const_val_exp = new ConstantValueExpression(ValueFactory::getBigIntValue(20)); ComparisonExpression<CmpEq> *equal = new ComparisonExpression<CmpEq>(EXPRESSION_TYPE_COMPARE_EQUAL, tup_val_exp, const_val_exp); // ::printf("\nFilter:%s\n", equal->debug().c_str()); int count = 0; TableIterator iter = table->iterator(); TableTuple match(table->schema()); while (iter.next(match)) { if (equal->eval(&match, NULL).isTrue()) { //::printf(" match:%s", match->debug(table).c_str()); ++count; } } ASSERT_EQ(1, count); // delete the root to destroy the full tree. delete equal; }
TEST_F(FilterTest, FunctionAbs2Filter) { // WHERE abs(0 - id) = 20 // ComparisonExpression equal(EXPRESSION_TYPE_COMPARE_EQUAL, // 0 - TupleValueExpression::getInstance(0), // UnaryFunctionExpression(EXPRESSION_TYPE_FUNCTION_ABS, // ConstantValueExpression::getInstance(voltdb::Value::newBigIntValue(20)))); ConstantValueExpression *zero_val_exp = new ConstantValueExpression(ValueFactory::getBigIntValue(0)); TupleValueExpression *tup_val_exp = new TupleValueExpression(0, 0); AbstractExpression* minus_exp = new OperatorExpression<OpMinus>(EXPRESSION_TYPE_OPERATOR_MINUS, zero_val_exp, tup_val_exp); std::vector<AbstractExpression*>* argument = new std::vector<AbstractExpression*>(); argument->push_back(minus_exp); AbstractExpression* abs_exp = ExpressionUtil::functionFactory(FUNC_ABS, argument); ConstantValueExpression *const_val_exp = new ConstantValueExpression(ValueFactory::getBigIntValue(20)); ComparisonExpression<CmpEq> *equal = new ComparisonExpression<CmpEq>(EXPRESSION_TYPE_COMPARE_EQUAL, abs_exp, const_val_exp); // ::printf("\nFilter:%s\n", equal->debug().c_str()); int count = 0; TableIterator iter = table->iterator(); TableTuple match(table->schema()); while (iter.next(match)) { if (equal->eval(&match, NULL).isTrue()) { // ::printf(" match:%s\n", match.debug(std::string("tablename")).c_str()); ++count; } } ASSERT_EQ(1, count); // delete the root to destroy the full tree. delete equal; }