예제 #1
0
 int PerconaFTEngine::Get(Context& ctx, const KeyObject& key, ValueObject& value)
 {
     DB* db = GetFTDB(ctx, key.GetNameSpace(), false);
     if (NULL == db)
     {
         return ERR_ENTRY_NOT_EXIST;
     }
     PerconaFTLocalContext& local_ctx = g_local_ctx.GetValue();
     Slice ks = local_ctx.GetSlice(key);
     DBT key_slice = to_dbt(ks);
     DB_TXN* txn = local_ctx.transc.Peek();
     int r = 0;
     DBT val_slice;
     memset(&val_slice, 0, sizeof(DBT));
     val_slice.flags = DB_DBT_MALLOC;
     //CHECK_EXPR(r = m_env->txn_begin(m_env, NULL, &txn, 0));
     CHECK_EXPR(r = db->get(db, txn, &key_slice, &val_slice, 0));
     if (0 == r)
     {
         Buffer valBuffer((char*) (val_slice.data), 0, val_slice.size);
         value.Decode(valBuffer, true);
     }
     //txn->commit(txn, 0);
     return ENGINE_ERR(r);
 }