int deleteTreeData(void *dbid, int nid) { EMPTYXD(xd); int status; status = _TreePutRecord(dbid, nid, (struct descriptor *)&xd, 0); return status; }
int putTreeData(void *dbid, int nid, void *data) { struct descriptor_xd *xdPtr; int status; xdPtr = (struct descriptor_xd *)convertDataToDsc(data); status = _TreePutRecord(dbid, nid, (struct descriptor *)xdPtr, 0); freeDsc(xdPtr); return status; }
int deleteTreeData(void *dbid, int nid, int isCached, int cachePolicy) { EMPTYXD(xd); int status; if(isCached) status = _RTreePutRecord(dbid, nid, (struct descriptor *)&xd, cachePolicy); else status = _TreePutRecord(dbid, nid, (struct descriptor *)&xd, 0); return status; }
int putTreeData(void *dbid, int nid, void *data, int isCached) { struct descriptor_xd *xdPtr; int status; xdPtr = (struct descriptor_xd *)convertDataToDsc(data); if(isCached) status = _RTreePutRecord(dbid, nid, (struct descriptor *)xdPtr, MDS_WRITE_BACK); else status = _TreePutRecord(dbid, nid, (struct descriptor *)xdPtr, 0); freeDsc(xdPtr); return status; }
STATIC_ROUTINE int RewriteDatafile(void **dbid, char *tree, int shot, int compress) { int status; void *dbid1 = 0, *dbid2 = 0; char *from_c = NULL; char *to_c = NULL; char *from_d = NULL; char *to_d = NULL; int lstatus; status = _TreeOpenEdit(&dbid1, tree, shot); if (status & 1) { int stv; PINO_DATABASE *dblist1 = (PINO_DATABASE *)dbid1; TREE_INFO *info1 = dblist1->tree_info; status = TreeOpenNciW(dblist1->tree_info, 0); if (status & 1) { status = TreeOpenDatafileW(dblist1->tree_info, &stv, 0); if (status & 1) { status = _TreeOpenEdit(&dbid2, tree, shot); if (status & 1) { PINO_DATABASE *dblist2 = (PINO_DATABASE *)dbid2; TREE_INFO *info2 = dblist2->tree_info; status = TreeOpenNciW(dblist2->tree_info, 1); if (status & 1) { dblist2->tree_info->edit->first_in_mem = dblist1->tree_info->edit->first_in_mem; status = TreeOpenDatafileW(dblist2->tree_info, &stv, 1); if (status & 1) { int i; for (i=0;i<info1->header->nodes;i++) { EMPTYXD(xd); EMPTYXD(mtxd); NCI nci; TreeGetNciW(info1, i, &nci); TreePutNci(info2, i, &nci, 1); lstatus = _TreeGetRecord(dbid1, i, &xd); if (lstatus & 1) lstatus = _TreePutRecord(dbid2, i, (struct descriptor *)&xd, compress ? 2 : 1); else if (lstatus == TreeBADRECORD || lstatus == TreeINVDFFCLASS) { fprintf(stderr,"TreeBADRECORD, Clearing nid %d\n",i); lstatus = _TreePutRecord(dbid2, i, (struct descriptor *)&mtxd, compress ? 2 : 1); } MdsFree1Dx(&xd,NULL); } from_c = strcpy(malloc(strlen(info1->filespec)+20),info1->filespec); strcpy(from_c+strlen(info1->filespec)-4,"characteristics#"); to_c = strcpy(malloc(strlen(info1->filespec)+20),info1->filespec); strcpy(to_c+strlen(info1->filespec)-4,"characteristics"); from_d = strcpy(malloc(strlen(info1->filespec)+20),from_c); strcpy(from_d+strlen(info1->filespec)-4,"datafile#"); to_d = strcpy(malloc(strlen(info1->filespec)+20),to_c); strcpy(to_d+strlen(info1->filespec)-4,"datafile"); } } _TreeClose(&dbid2, 0, 0); } } } _TreeClose(&dbid1, 0, 0); if (status & 1) { status = remove(to_c) == 0 ? TreeNORMAL : TreeFAILURE; if (status & 1) status = remove(to_d) == 0 ? TreeNORMAL : TreeFAILURE; if (status & 1) status = ((rename(from_c,to_c) == 0) && (rename(from_d,to_d) == 0)) ? TreeNORMAL : TreeFAILURE; } if (from_c) free(from_c); if (to_c) free(to_c); if (from_d) free(from_d); if (to_d) free(to_d); } return status; }
int TreePutRecord(int nid, struct descriptor *descriptor_ptr, int utility_update) { return _TreePutRecord(DBID,nid,descriptor_ptr,utility_update);}