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

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 1998-2002
  5.  * Sleepycat Software.  All rights reserved.
  6.  */
  7. #include "db_config.h"
  8. #ifndef lint
  9. static const char revid[] = "$Id: bt_reclaim.c,v 11.11 2002/03/29 20:46:26 bostic Exp $";
  10. #endif /* not lint */
  11. #ifndef NO_SYSTEM_INCLUDES
  12. #include <sys/types.h>
  13. #include <string.h>
  14. #endif
  15. #include "db_int.h"
  16. #include "dbinc/db_page.h"
  17. #include "dbinc/btree.h"
  18. /*
  19.  * __bam_reclaim --
  20.  * Free a database.
  21.  *
  22.  * PUBLIC: int __bam_reclaim __P((DB *, DB_TXN *));
  23.  */
  24. int
  25. __bam_reclaim(dbp, txn)
  26. DB *dbp;
  27. DB_TXN *txn;
  28. {
  29. DBC *dbc;
  30. int ret, t_ret;
  31. /* Acquire a cursor. */
  32. if ((ret = dbp->cursor(dbp, txn, &dbc, 0)) != 0)
  33. return (ret);
  34. /* Walk the tree, freeing pages. */
  35. ret = __bam_traverse(dbc,
  36.     DB_LOCK_WRITE, dbc->internal->root, __db_reclaim_callback, dbc);
  37. /* Discard the cursor. */
  38. if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
  39. ret = t_ret;
  40. return (ret);
  41. }
  42. /*
  43.  * __bam_truncate --
  44.  * Truncate a database.
  45.  *
  46.  * PUBLIC: int __bam_truncate __P((DB *, DB_TXN *, u_int32_t *));
  47.  */
  48. int
  49. __bam_truncate(dbp, txn, countp)
  50. DB *dbp;
  51. DB_TXN *txn;
  52. u_int32_t *countp;
  53. {
  54. DBC *dbc;
  55. db_trunc_param trunc;
  56. int ret, t_ret;
  57. /* Acquire a cursor. */
  58. if ((ret = dbp->cursor(dbp, txn, &dbc, 0)) != 0)
  59. return (ret);
  60. trunc.count = 0;
  61. trunc.dbc = dbc;
  62. /* Walk the tree, freeing pages. */
  63. ret = __bam_traverse(dbc,
  64.     DB_LOCK_WRITE, dbc->internal->root, __db_truncate_callback, &trunc);
  65. /* Discard the cursor. */
  66. if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
  67. ret = t_ret;
  68. *countp = trunc.count;
  69. return (ret);
  70. }