00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <eyedbconfig.h>
00026
00027 #include <stdlib.h>
00028 #include <string.h>
00029 #include <assert.h>
00030
00031 #include <eyedbsm/eyedbsm.h>
00032 #include "BIdxBTree.h"
00033
00034 namespace eyedbsm {
00035
00036 static Status
00037 destroyS(BIdx * idx, Oid oid)
00038 {
00039 Status s;
00040 BIdx::InCore x(idx);
00041 if (s = x.read(&oid))
00042 return s;
00043
00044 if (!x.node->leaf)
00045 for (unsigned i = 0; i <= x.node->n; i++)
00046 if (s = destroyS(idx, x.node->c[i]))
00047 return s;
00048
00049 return x.destroy();
00050 }
00051
00052 Status
00053 BIdx::destroy()
00054 {
00055 BTree tree;
00056 if (stat = readBTree(tree))
00057 return fatal();
00058 if (stat = objectDelete(dbh, sizeof tree, &treeOid))
00059 return fatal();
00060 if (stat = objectDelete(dbh, _nkeys * sizeof (KeyType), &tree.type))
00061 return fatal();
00062 return destroyS(this, tree.root);
00063 }
00064 }