TestLogc.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 2000-2002
  5.  * Sleepycat Software.  All rights reserved.
  6.  *
  7.  * $Id: TestLogc.cpp,v 1.6 2002/01/23 14:26:41 bostic Exp $
  8.  */
  9. /*
  10.  * A basic regression test for the Logc class.
  11.  */
  12. #include <db_cxx.h>
  13. #include <iostream.h>
  14. static void show_dbt(ostream &os, Dbt *dbt)
  15. {
  16. int i;
  17. int size = dbt->get_size();
  18. unsigned char *data = (unsigned char *)dbt->get_data();
  19. os << "size: " << size << " data: ";
  20. for (i=0; i<size && i<10; i++) {
  21. os << (int)data[i] << " ";
  22. }
  23. if (i<size)
  24. os << "...";
  25. }
  26. int main(int argc, char *argv[])
  27. {
  28. try {
  29. DbEnv *env = new DbEnv(0);
  30. env->open(".", DB_CREATE | DB_INIT_LOG | DB_INIT_MPOOL, 0);
  31. // Do some database activity to get something into the log.
  32. Db *db1 = new Db(env, 0);
  33. db1->open(NULL, "first.db", NULL, DB_BTREE, DB_CREATE, 0);
  34. Dbt *key = new Dbt((char *)"a", 1);
  35. Dbt *data = new Dbt((char *)"b", 1);
  36. db1->put(NULL, key, data, 0);
  37. key->set_data((char *)"c");
  38. data->set_data((char *)"d");
  39. db1->put(NULL, key, data, 0);
  40. db1->close(0);
  41. Db *db2 = new Db(env, 0);
  42. db2->open(NULL, "second.db", NULL, DB_BTREE, DB_CREATE, 0);
  43. key->set_data((char *)"w");
  44. data->set_data((char *)"x");
  45. db2->put(NULL, key, data, 0);
  46. key->set_data((char *)"y");
  47. data->set_data((char *)"z");
  48. db2->put(NULL, key, data, 0);
  49. db2->close(0);
  50. // Now get a log cursor and walk through.
  51. DbLogc *logc;
  52. env->log_cursor(&logc, 0);
  53. int ret = 0;
  54. DbLsn lsn;
  55. Dbt *dbt = new Dbt();
  56. u_int32_t flags = DB_FIRST;
  57. int count = 0;
  58. while ((ret = logc->get(&lsn, dbt, flags)) == 0) {
  59. // We ignore the contents of the log record,
  60. // it's not portable.  Even the exact count
  61. // is may change when the underlying implementation
  62. // changes, we'll just make sure at the end we saw
  63. // 'enough'.
  64. //
  65. //     cout << "logc.get: " << count;
  66. //     show_dbt(cout, dbt);
  67. // cout << "n";
  68. //
  69. count++;
  70. flags = DB_NEXT;
  71. }
  72. if (ret != DB_NOTFOUND) {
  73. cerr << "*** FAIL: logc.get returned: "
  74.      << DbEnv::strerror(ret) << "n";
  75. }
  76. logc->close(0);
  77. // There has to be at *least* four log records,
  78. // since we did four separate database operations.
  79. //
  80. if (count < 4)
  81. cerr << "*** FAIL: not enough log recordsn";
  82. cout << "TestLogc done.n";
  83. }
  84. catch (DbException &dbe) {
  85. cerr << "*** FAIL: " << dbe.what() <<"n";
  86. }
  87. return 0;
  88. }