示例#1
0
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;
}
示例#2
0
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;
}