void testCollectParams() { Expression expr = Expression(_T("ID")) == 1 && Expression(_T("A")) != String(_T("a")); SqlGeneratorOptions options1(NO_QUOTES, true, true); SqlGeneratorContext ctx1; String sql = expr.generate_sql(options1, &ctx1); CPPUNIT_ASSERT_EQUAL(string("(ID = ?) AND (A <> ?)"), NARROW(sql)); SqlGeneratorOptions options2(NO_QUOTES, true, true, true); SqlGeneratorContext ctx2; sql = expr.generate_sql(options2, &ctx2); CPPUNIT_ASSERT_EQUAL(string("(ID = :1) AND (A <> :2)"), NARROW(sql)); CPPUNIT_ASSERT_EQUAL(string("(ID = 1) AND (A <> 'a')"), NARROW(expr.get_sql())); CPPUNIT_ASSERT_EQUAL((size_t)2, ctx1.params_.size()); CPPUNIT_ASSERT_EQUAL(1, ctx1.params_[0].as_integer()); CPPUNIT_ASSERT_EQUAL(string("a"), NARROW(ctx1.params_[1].as_string())); CPPUNIT_ASSERT_EQUAL((size_t)2, ctx2.params_.size()); CPPUNIT_ASSERT_EQUAL(1, ctx2.params_[0].as_integer()); CPPUNIT_ASSERT_EQUAL(string("a"), NARROW(ctx2.params_[1].as_string())); }
SqlResultSet EngineBase::select_iter(const Expression &select_expr) { SqlGeneratorOptions options(NO_QUOTES, get_dialect()->has_for_update(), true, get_conn()->get_driver()->numbered_params(), (Yb::SqlPagerModel)get_dialect()->pager_model()); SqlGeneratorContext ctx; String sql = select_expr.generate_sql(options, &ctx); auto_ptr<SqlCursor> cursor = get_conn()->new_cursor(); cursor->prepare(sql); SqlResultSet rs = cursor->exec(ctx.params_); rs.own(cursor); return rs; }