/* * Destroy the ConfigDB */ int ConfigDestroy(tConfigDB* db) { DisconnectDataNode((tCluster*)db->cluster); pthread_join(db->engine,NULL); DBDelete(db->db); free(db); return SUCCESS; }
logical CTX_DBBase :: ExecuteAction (DB_Event intevent ) { logical term = NO; BEGINSEQ if ( !this ) LEAVESEQ switch ( intevent ) { case DBO_Opened : term = DBOpened(); break; case DBO_Initialize : term = DBInitialize(); break; case DBO_Created : if ( !(term = DBCreated()) ) intern_states.data_state = DAT_Filled; break; case DBO_NotCreated : term = DBNotCreated(); break; case DBO_Read : if ( !(term = DBRead()) ) intern_states.data_state = DAT_Filled; break; case DBO_Reset : term = DBReset(); break; case DBO_Stored : term = DBStored(); break; case DBO_Inserted : if ( !(term = DBInserted()) ) intern_states.data_state = DAT_Filled; break; case DBO_NotInserted: term = DBNotInserted(); break; case DBO_Removed : term = DBRemoved(); break; case DBO_NotRemoved : term = DBNotRemoved(); break; case DBO_Deleted : term = DBDeleted(); break; case DBO_NotDeleted : term = DBNotDeleted(); break; case DBO_Refresh : term = DBRefresh(); break; case DBO_NotOpened : term = DBNotOpened(); break; case DBO_Close : term = DBClose(); break; case DBP_Read : term = DBBeforeRead(); break; case DBP_Create : term = DBCreate(); break; case DBP_Modify : term = DBModify(); break; case DBP_Store : term = DBStore(); break; case DBP_Insert : term = DBInsert(); break; case DBP_Open : term = DBOpen(); break; case DBP_Remove : term = DBRemove(); break; case DBP_Delete : term = DBDelete(); break; case DBP_Select : term = DBSelect(); break; case DB_undefined : LEAVESEQ default : ERROR } RECOVER term = YES; ENDSEQ return(term); }
uint8_t XTDBDropIndex(XTDBHandle* handle,char* fieldName) { //void * iter = DBIter(handle->descDB); uint8_t deleted=False; String descKey,idxDBName; BinaryStr key,value; DataBaseBE* idxDB; idxDB = XTDBGetIndex(handle,fieldName); if (!idxDB) { handle->error = XTDB_NO_ENTRY; return False; } StrInit(&descKey); if (StrAppendFmt(&descKey,"index.value.%s",fieldName)) { handle->error = XTDB_NO_MEM; return False; } StrToBStr(IDXFIELDNAME,&key); StrToBStr(fieldName,&value); DBDeleteKeyVal(handle->descDB,&key,&value); DBClose(idxDB); if (!XTDBRemoveIndex(handle,fieldName)) { return False; } DBFree(idxDB); StrToBStr(descKey.ptr,&key); DBDelete(handle->descDB,&key); if (GetIndexDBName(handle,fieldName,&idxDBName)) { handle->error = XTDB_NO_MEM; return False; } unlink(STR(&idxDBName)); StrFree(&descKey); StrFree(&idxDBName); return True; }
uint8_t XTDBRemove(XTDBHandle* handle,bson* query) { BinaryStr key,value,newValueStr; uint8_t updated = False,ret=True; XTDBCursor* cur = XTDBFind(handle,query); if (!cur) { return False; } while (XTDBCursorNextBStr(cur,&key,&value)) { handle->gen++; _S_FN(remove); if (!DBDelete(handle->mainDB,&key)) { handle->error = DBGetLastError(handle->mainDB); BinaryStrFree(&key); BinaryStrFree(&value); goto error; } // Remove from indexes /*if (!XTDBRemoveFromIndex(handle,&key,&value)) { BinaryStrFree(&key); BinaryStrFree(&value); goto error; }*/ BinaryStrFree(&key); BinaryStrFree(&value); _E_FN(remove); } if (cur->error != XTDB_OK) { handle->error = cur->error; } XTDBCursorFree(cur); return True; error: XTDBCursorFree(cur); return False; }
static Boolean AsImportDB(PFFileRef f, const char *dbname, UInt32 dbType, void (*cb)(const char *)) { DmOpenRef db; UInt16 j; UInt16 numRecords; LOGENTRY; LOGSTR(dbname); LOGINT32(dbType); db = DBOpen(dbname, false, true); ModErrThrowIf(!db); LOGLINE; /* * purge any existing records * */ numRecords = DBGetNumRecords(db); LOGINT16(numRecords); if (numRecords) { (*cb)(StrPurgingDatabase); DBClose(db); DBDelete(dbname); db = DBOpen(dbname, false, true); } /* * dimension new database. * * 5 index records * */ LOGLINE; (*cb)(StrCreatingdatabaseStructure); for (j=0;j<lastIdxRec;j++) { UInt16 recnum = DBNewRecord; (void)DBRecordCreate(db, recnum, NULL, 1); } /* * import records from file * */ ErrTry { LOGINT16(numRecords); for (j=0;;j++) { AirspaceType *as; UInt16 recNum = j+lastIdxRec; // skip past db headers Int16 lat1, lon1, lat3, lon3; LOGTAG("Adding:"); LOGINT16(j); as = ImportRecord(f, &lat1, &lon1, &lat3, &lon3, cb); if (as == NULL) { LOGTAG("End of file mark"); break; } LOGINT16(PFMallocSize(as)); /* * add record to the database * */ (void)DBRecordCreate(db, recNum, as, PFMallocSize(as)); LOGTAG("Bounds:"); LOGINT16(lat1); LOGINT16(lon1); LOGINT16(lat3); LOGINT16(lon3); /* * store bounding coordinates and airspace type * */ AddIntToRecord(db, lat1IdxRec, lat1); AddIntToRecord(db, lon1IdxRec, lon1); AddIntToRecord(db, lat3IdxRec, lat3); AddIntToRecord(db, lon3IdxRec, lon3); AddIntToRecord(db, typeIdxRec, as->type); PFMemFree(as); } } ErrCatch(errNo) { (*cb)(StrErrorDetectedPurgingDatabase); DBClose(db); DBDelete(dbname); errNo = 0; return false; } ErrEndCatch; DBClose(db); LOGEXIT; return true; }
int ExecCmd(char * cmdbuf) { char temp[MAX_STR_LEN] = "\0"; if(CheckCmd(cmdbuf,"help") == 0 ) { printf("open filename - EX:open nezha.hdb\n"); printf("set key value - EX:set 100 helloworld\n"); printf("get key - EX:get 100\n"); printf("delete key - EX:delete 100\n"); printf("close - leave nezha.hdb\n"); printf("help - list cmds info\n"); } else if(CheckCmd(cmdbuf,"open (.*)\\.hdb") == 0) { if(strlen(dbname) > 0) { printf("Please close %s first.\n",dbname); } else { sscanf(cmdbuf,"%s%s",temp,dbname); db = DBCreate(dbname); } } else if(db == NULL && CheckCmd(cmdbuf,"set|get|delete") == 0) { printf("Please open a database file first.\n"); } else if(CheckCmd(cmdbuf,"close") == 0) { if(db != NULL) { DBDelete(db); db = NULL; } dbname[0] = '\0'; } else if(CheckCmd(cmdbuf,"exit") == 0) { if(db != NULL) { DBDelete(db); } exit(0); } else if(CheckCmd(cmdbuf,"set ([0-9]+) (.*)") == 0) { tKey key; tValue value; char str[MAX_STR_LEN] = "\0"; sscanf(cmdbuf,"%s%d%s",temp,&key,str); value.str = strstr(cmdbuf,str); value.len = cmdbuf + MAX_STR_LEN - value.str; if(DBSetKeyValue(db,key,value) != 0) { printf("ERROR:set %d %s\n",(int)key,value.str); } //printf("set %d %s\n",(int)key,value.str); } else if(CheckCmd(cmdbuf,"get ([0-9]+)") == 0) { tKey key = -1; tValue value; char str[MAX_STR_LEN] = "\0"; value.str = str; value.len = MAX_STR_LEN; sscanf(cmdbuf,"%s%d",temp,&key); if(DBGetKeyValue(db,key,&value) == 0) { printf("%d -> %s\n",key,value.str); } else { printf("ERROR:get %d Not found!\n",(int)key); } } else if(CheckCmd(cmdbuf,"delete ([0-9]+)") == 0) { tKey key = -1; tValue value; char str[MAX_STR_LEN] = "\0"; value.str = str; value.len = MAX_STR_LEN; sscanf(cmdbuf,"%s%d",temp,&key); if(DBDelKeyValue(db,key) != 0) { printf("ERROR:delete %d\n",(int)key); } } else { printf("Unknow Command!\n"); } return 0; }