void DatabaseList::slotContextMenu(const QPoint& pos) { m_cell = indexAt(pos); // Make sure the right click occured on a cell! if (m_cell.isValid()) { QMenu menu(this); bool bIsFavorite = m_filterModel->data(m_filterModel->index(m_cell.row(),DBLV_FAVORITE), Qt::ToolTipRole).toString() == tr("Favorite"); bool bIsNotFavorite = m_filterModel->data(m_filterModel->index(m_cell.row(),DBLV_FAVORITE), Qt::ToolTipRole).toString().isEmpty(); bool bHasPath = !m_filterModel->data(m_filterModel->index(m_cell.row(),DBLV_PATH), Qt::ToolTipRole).toString().isEmpty(); bool bIsOpen = m_filterModel->data(m_filterModel->index(m_cell.row(),DBLV_OPEN), Qt::ToolTipRole).toString() == tr("Open"); menu.addAction(bIsOpen ? tr("Activate") : tr("Open"), this, SLOT(dbOpen())); QAction* action = menu.addAction(tr("UTF8"), this, SLOT(dbToggleUTF8())); action->setCheckable(true); QString utf8 = m_filterModel->data(m_filterModel->index(m_cell.row(),DBLV_UTF8)).toString(); bool bUtf8 = (utf8.compare("UTF8")==0); action->setChecked(bUtf8); menu.addAction(tr("Close"), this, SLOT(dbClose()))->setEnabled(bIsOpen && bHasPath); menu.addSeparator(); menu.addAction(tr("Add to favorites"), this, SLOT(dbAddToFavorites()))->setEnabled(bIsNotFavorite); menu.addAction(tr("Remove from Favorites"), this, SLOT(dbRemoveFromFavorites()))->setEnabled(bIsFavorite); #if defined(Q_OS_WIN) || defined(Q_OS_MAC) menu.addSeparator(); menu.addAction(tr("Show in Finder"), this, SLOT(slotShowInFinder()))->setEnabled(bHasPath); #endif menu.exec(mapToGlobal(pos)); } }
bool LS3DatastoreXML::dbNew(const QString &fileName) { LS3ElapsedAutoTimer timer("LS3DatastoreXML::dbNew"); dbClose(); data->newFile(); dbSave(fileName); emit filenameChanged(fileName); return m_databaseLoaded=true; }
/*单条记录操作*/ LT_DBROW ltDbOneRow(ltDbConn *pConn,int *fieldnum,char *pSmt,...) { LT_DBROW tempRow; DB_CURSOR *dbcursor; int iReturn; va_list ap; char caSmt[4096]; int i; va_start(ap,pSmt); vsprintf(caSmt,pSmt,ap); va_end(ap); tempRow=NULL; dbcursor=ltDbOpenCursorB(pConn,caSmt,0); if(dbcursor==NULL){ return NULL; } iReturn = dbFetch(dbcursor); if(iReturn == 0) { dbClose(dbcursor); return NULL; } *fieldnum=dbcursor->nDef; tempRow=(LT_DBROW)malloc((*fieldnum)*sizeof(char *)); if(tempRow==NULL){ dbClose(dbcursor); return NULL; } for(iReturn=0;iReturn<(*fieldnum);iReturn++){ tempRow[iReturn] =(char *)malloc(dbcursor->pDef[iReturn].bufl+1); if(tempRow[iReturn]==NULL){ dbClose(dbcursor); return NULL; } memcpy(tempRow[iReturn],dbcursor->pDef[iReturn].buf,dbcursor->pDef[iReturn].bufl); tempRow[dbcursor->pDef[iReturn].bufl]=0; } dbClose(dbcursor); return tempRow; }
DB_CURSOR *ltDbOpenSql0(ltDbConn *pConn,char *pSmt,int iSumBind,va_list ap) { DB_CURSOR *lCursor; int iReturn,iStatus,status; if(pSmt == NULL) { return NULL; } lCursor=NULL; lCursor = dbOpen(pConn); if(lCursor == NULL) { return NULL; } iReturn = dbParse(lCursor, pSmt); if(iReturn == 0) { if(lCursor){ dbClose(lCursor); } return NULL; }else { if(iSumBind > 0) { status = _ltDbSetBindValue_o(pConn,lCursor,iSumBind,&ap); if(status != OCI_SUCCESS) { status = ltDbErrorCode(pConn); if(lCursor){ dbClose(lCursor); } return NULL; } } iReturn = dbExec(lCursor); if(iReturn == 0) { if(lCursor){ dbClose(lCursor); } return NULL; } else { return lCursor; } } }
void DbService::shutdown() { BfDebug(__FUNCTION__); g_sm->checkCurrentOn(ServiceMgr::DB); // dbClose dbClose(); // free env delete leveldb::BytewiseComparator(); delete leveldb::Env::Default(); }
/* 执行 SQL语句 */ int ltDbExecSql0(ltDbConn *pConn,char *pSmt,int iSumBind,...) { DB_CURSOR *psCur; int status; va_list ap; psCur = dbOpen(pConn); if(psCur == NULL) { return -1; } status = OCIStmtPrepare(psCur->pStmt, psCur->pConn->pErr, pSmt, (ub4)strlen(pSmt), (ub4)OCI_NTV_SYNTAX, (ub4)OCI_DEFAULT); if(status != OCI_SUCCESS) { status = ltDbErrorCode(pConn); dbClose(psCur); return status; } va_start(ap,iSumBind); status = _ltDbSetBindValue_o(pConn,psCur,iSumBind,&ap); va_end(ap); if(status != 0) { status = ltDbErrorCode(pConn); dbClose(psCur); return status; } status = OCIStmtExecute(psCur->pConn->pSvc, psCur->pStmt, psCur->pConn->pErr, 1, (ub4)0, (OCISnapshot*)0, (OCISnapshot*)0, OCI_DEFAULT); if(status == OCI_SUCCESS) { /* 网文件中写日志 */ dbClose(psCur); return 0; } else { status = ltDbErrorCode(pConn); dbClose(psCur); return status; } }
void umClose() { if (--umOpenCount > 0) { return; } /* * Do not close if intialization has not taken place */ if (didUM != -1) { dbClose(didUM); didUM = -1; } if (saveFilename != NULL) { bfree(B_L, saveFilename); saveFilename = NULL; } }
void DbService::shutdown() { BfLog(__FUNCTION__); g_sm->checkCurrentOn(ServiceMgr::DB); // close timer this->pingTimer_->stop(); delete this->pingTimer_; this->pingTimer_ = nullptr; // free client if (client_) { delete client_; client_ = nullptr; } // dbClose dbClose(); // free env delete leveldb::BytewiseComparator(); delete leveldb::Env::Default(); }
void ltDbCloseCursor(ltDbCursor *ltCursor) { int iTemp; if(ltCursor) { /*释放字段名*/ if(ltCursor->db_field){ if(ltCursor->num_field>0){ for(iTemp=0;iTemp<ltCursor->num_field;iTemp++){ if(ltCursor->db_field[iTemp]){ free(ltCursor->db_field[iTemp]); } } } free(ltCursor->db_field); ltCursor->db_field=NULL; } /*释放字段值*/ if(ltCursor->db_row){ if(ltCursor->num_field>0){ for(iTemp=0;iTemp<ltCursor->num_field;iTemp++){ if(ltCursor->db_row[iTemp]){ free(ltCursor->db_row[iTemp]); } } } free(ltCursor->db_row); ltCursor->db_row=NULL; } /*释放数据库光标*/ if(ltCursor->db_cursor){ dbClose(ltCursor->db_cursor); } /*释放指针*/ free(ltCursor); } }
bool LS3DatastoreXML::dbLoad(const QString &fileName, QProgressBar* progress) { LS3ElapsedAutoTimer timer("LS3DatastoreXML::dbLoad"); // if a database is opened: close it! dbClose(); QDomDocument doc("mydocument"); QFile file(fileName); QString errorMessage; int errorLine; int errorColumn; if (!file.open(QIODevice::ReadOnly)) { emit dbError(tr("Error opening databse '%1': File could not be opened.").arg(fileName)); return m_databaseLoaded=false; } if (!doc.setContent(&file, &errorMessage, &errorLine, &errorColumn)) { file.close(); //file.close(); emit dbError(tr("Error parsing databse '%1': %2 (line %3, column %4).").arg(fileName).arg(errorMessage).arg(errorLine).arg(errorColumn)); return m_databaseLoaded=false; } file.close(); QDomElement docElem = doc.documentElement(); if (docElem.tagName()!="litsoz3database") { emit dbError(tr("Error in databse '%1': This is not a LitSoz 3 databse file (root element is <%2>, but should be <litsoz3database>.").arg(fileName).arg(docElem.tagName())); return m_databaseLoaded=false; } QDomElement n = docElem.firstChildElement("records"); data->loadFromXML(n, progress); timer.showMessage("XML loaded"); //if (keywordsdata) delete keywordsdata //keywordsdata = new QStringListModel(this); // create a stringlist model for the keywords and read its contents from the keywords field in the metadata table // the (possibly changed) model will be written back in the closeDB() method QDomElement metadata = docElem.firstChildElement("metadata"); if (!metadata.isNull()) { n = metadata.firstChildElement("item"); while(!n.isNull()) { QString type=n.attribute("type").toLower(); if (type=="keywords") { QString sdata=n.text().replace("\r\n", "\n"); sdata=sdata.replace("\n\r", "\n"); sdata=sdata.replace("\n\n", "\n"); sdata=sdata.replace("\n\n", "\n"); sdata=sdata.replace("\r\r", ""); QStringList sl=sdata.split("\n", QString::SkipEmptyParts); sl.removeDuplicates(); sl.sort(); keywordsdata->setStringList(sl); } if (type=="topics") { QString sdata=n.text().replace("\r\n", "\n"); sdata=sdata.replace("\n\r", "\n"); sdata=sdata.replace("\n\n", "\n"); sdata=sdata.replace("\n\n", "\n"); sdata=sdata.replace("\r\r", ""); QStringList sl=sdata.split("\n", QString::SkipEmptyParts); sl.removeDuplicates(); sl.sort(); topicsdata->setStringList(sl); } n=n.nextSiblingElement("item"); } } timer.showMessage("METADATA read"); // read the list of selected records QDomElement selectedNode = docElem.firstChildElement("selection_list"); clearSelection(); if (!selectedNode.isNull()) { n = selectedNode.firstChildElement("item"); while(!n.isNull()) { QString uuid=n.attribute("uuid"); select(uuid); n=n.nextSiblingElement("item"); } } timer.showMessage("SELECTION read"); // read the reference tree QDomElement reftreeNode = docElem.firstChildElement("litsoz3_reference_tree"); getReferencTreeModel()->readFromXML(reftreeNode); timer.showMessage("REFTREE read"); // read the authorsdata completer list from a file in config dir //if (authorsdata) delete authorsdata; //authorsdata = new QStringListModel(this); QFile f(settings->GetConfigDirectory()+"/completers/authors.lst"); if (f.open(QIODevice::ReadOnly|QIODevice::Text)) { //std::cout<<"OK\n"; QString s=QString::fromUtf8(f.readAll()); authorsdata->setStringList(s.split('\n', QString::SkipEmptyParts)); } updateCompleters(0, recordCount()-1, false); timer.showMessage("AUTHORS_COMPLETER read"); m_currentFile=fileName; emit filenameChanged(m_currentFile); emit connectWidgets(); timer.showMessage("CONNECTED_WIDGETS"); dbFirst(); timer.showMessage("MOVED FIRST"); emit databaseLoaded(true); emit databaseClosed(false); emit massiveSelectionChange(); timer.showMessage("EMITED SIGNALS"); return m_databaseLoaded=true; }
DMM::~DMM() { if(db!= NULL) dbClose(); }
int IndexDbLevelDb::initialize(const string& out_dir, const string& src_file_name, const string& excludeList, bool isRebuild, const char* curDir, int argc, const char** argv) { leveldb::DB* dbCommon = NULL; m_defaultOptions.create_if_missing = true; //m_defaultOptions.compression = leveldb::kNoCompression; m_defaultOptions.compression = leveldb::kSnappyCompression; m_defaultOptions.block_cache = leveldb::NewLRUCache(128 * 1024 * 1024); m_defaultOptions.filter_policy = leveldb::NewBloomFilterPolicy(10); const char* cwd = getcwd(m_CharBuff0, sizeof(m_CharBuff0)); assert(cwd != 0); m_currentDirectory = m_CharBuff0; // build options snprintf(m_CharBuff0, sizeof(m_CharBuff0), "%d", isRebuild); m_buildOpt = string(curDir) + "|" + excludeList + "|" + m_CharBuff0 + "|"; for(int i = 0; i < argc; i++) { m_buildOpt += " " + string(argv[i]); } m_dbDir = out_dir; m_compileUnit = src_file_name; #ifdef TIMER m_timers = new boost::timer::cpu_timer[k_timerNum]; for(int i = 0; i < k_timerNum; i++) { m_timers[i].stop(); } #endif if(makeDirectory(m_dbDir.c_str())) { return -1; } // // update file list // leveldb::Status status; m_commonDbDir = out_dir + "/common"; if (dbTryOpen(dbCommon, m_commonDbDir) < 0) { fprintf(stderr, "Open fail.: %s\n", m_commonDbDir.c_str()); return -1; } assert(dbCommon != NULL); string value; string keyFile = m_compileUnit; int rv = 0; // check if already registered rv = dbRead(value, dbCommon, TABLE_NAME_CU_NAME_TO_ID "|" + m_compileUnit); if(rv < 0) { // not found // add file string keyFileCount = "compile_unit_count"; rv = dbRead(value, dbCommon, keyFileCount); if(rv < 0) { // key not found dbWrite(dbCommon, keyFileCount, "1"); m_compileUnitId = "0"; } else if(rv == 0) { char buf[1024]; m_compileUnitId = value; char* errp = NULL; int id = strtol(m_compileUnitId.c_str(), &errp, 16); assert(*errp == '\0'); snprintf(buf, sizeof(buf), "%x", id+1); dbWrite(dbCommon, keyFileCount, buf); } else { printf("ERROR: db info\n"); } dbWrite(dbCommon, TABLE_NAME_CU_NAME_TO_ID "|" + m_compileUnit, m_compileUnitId); } else if(rv == 0) { // alread exists m_compileUnitId = value; } dbClose(dbCommon); // open database for this compile unit assert(!m_compileUnitId.empty()); // list of files already processed if(!isRebuild) { leveldb::WriteBatch wb_common; leveldb::DB* db_common; int rv = dbTryOpen(db_common, m_commonDbDir); if(rv < 0) { printf("ERROR: common db open: %s\n", m_commonDbDir.c_str()); return -1; } leveldb::Iterator* it = db_common->NewIterator(leveldb::ReadOptions()); for (it->SeekToFirst(); it->Valid(); it->Next()) { //cout << it->key().ToString() << ": " << it->value().ToString() << endl; const string& key = it->key().ToString(); if(key.find(TABLE_NAME_FILE_LIST "|") == 0) { m_finishedFiles[key.substr(2)] = it->value().ToString(); //cout << key.substr(2) << endl; } } dbClose(db_common); } else { m_isRebuild = true; } return 0; }
int IndexDbLevelDb::finalize(void) { { leveldb::WriteBatch wb_common; leveldb::DB* db_common; int rv = dbTryOpen(db_common, m_commonDbDir); if(rv < 0) { printf("ERROR: finalize: common db open: %s\n", m_commonDbDir.c_str()); return -1; } addFilesToFileList(db_common); dbFlush(db_common, &wb_common); dbClose(db_common); } // update UsrDb { leveldb::DB* dbUsrDb = NULL; leveldb::WriteBatch wb_usrdb; string curDir = m_dbDir + "/usr_db"; if(makeDirectory(curDir.c_str())) { return -1; } map<string, SiMap> refUsrFidMap; // store the file IDs a USR found for(const auto& itr : m_usr2referenceFileMap) { const string& usr = itr.first; SiMap& fidMap = refUsrFidMap[usr]; for(const auto& itr_file_list : itr.second) { fidMap[m_fileContextMap[itr_file_list].m_dbId] = 0; } } map<string, SiMap> defUsrFidMap; for(const auto& itr : m_usr2defineFileMap) { const string& usr = itr.first; SiMap& fidMap = defUsrFidMap[usr]; for(const auto& itr_file_list : itr.second) { fidMap[m_fileContextMap[itr_file_list].m_dbId] = 0; } } map<string, SiMap> overriderUsrFidMap; for(const auto& itr : m_usr2overriderFileMap) { const string& usr = itr.first; SiMap& fidMap = overriderUsrFidMap[usr]; for(const auto& itr_file_list : itr.second) { fidMap[m_fileContextMap[itr_file_list].m_dbId] = 0; } } char* errp = NULL; int cuId = strtol(m_compileUnitId.c_str(), &errp, 16); assert(*errp == '\0'); snprintf(m_CharBuff0, sizeof(m_CharBuff0), "%x", (cuId % USR_DB_NUM)); curDir.append(string("/") + string(m_CharBuff0)); timerStart(TIMER_USR_DB0); ////// // open db int rv = dbTryOpen(dbUsrDb, curDir); if(rv < 0) { printf("ERROR: finalize: common db open: %s\n", curDir.c_str()); return -1; } #ifdef USE_USR2FILE_TABLE2 writeUsrDb(refUsrFidMap, dbUsrDb, wb_usrdb, TABLE_NAME_USR_TO_GLOBAL_FILE_ID_REF); writeUsrDb(defUsrFidMap, dbUsrDb, wb_usrdb, TABLE_NAME_USR_TO_GLOBAL_FILE_ID_DEF2); writeUsrDb(overriderUsrFidMap, dbUsrDb, wb_usrdb, TABLE_NAME_USR_TO_GLOBAL_FILE_ID_OVERRIDER); #else writeUsrDb(refUsrFidMap, dbUsrDb, wb_usrdb, TABLE_NAME_USR_TO_GLOBAL_FILE_ID_REF); writeUsrDb(defUsrFidMap, dbUsrDb, wb_usrdb, TABLE_NAME_USR_TO_GLOBAL_FILE_ID_DEF); writeUsrDb(overriderUsrFidMap, dbUsrDb, wb_usrdb, TABLE_NAME_USR_TO_GLOBAL_FILE_ID_OVERRIDER); #endif dbFlush(dbUsrDb, &wb_usrdb); dbClose(dbUsrDb); timerStop(TIMER_USR_DB0); // close db ////// #ifdef TIMER printf("---- Statistics ----\n"); timerShow("time: TIMER_USR_DB0: ", TIMER_USR_DB0); timerShow("time: TIMER_USR_DB3: ", TIMER_USR_DB3); timerShow("time: TIMER_INS_REF: ", TIMER_INS_REF); timerShow("time: TIMER_INS_REF_1: ", TIMER_INS_REF_1); timerShow("time: TIMER_INS_REF_2: ", TIMER_INS_REF_2); timerShow("time: TIMER_INS_DECL: ", TIMER_INS_DECL); timerShow("time: TIMER_DB_SLEEP: ", TIMER_DB_SLEEP); #endif } #ifdef TIMER timerStart(TIMER_DB_WRITE); #endif { string valFiles; leveldb::WriteBatch wb; for(const auto &itr : m_fileContextMap) { //const string& filename = itr->first; const string& dbId = itr.second.m_dbId; valFiles += "," + dbId; } for(const auto &fctxItr : m_fileContextMap) { const string& filename = fctxItr.first; const FileContext& fctx = fctxItr.second; const string& dbId = fctx.m_dbId; // check if already exists if(m_finishedFiles.find(filename) != m_finishedFiles.end()) { continue; } // position to usr for(const auto& itr : fctx.m_positition2usrList) { setKeyValuePos2Usr(m_CharBuff0, m_CharBuff1, sizeof(m_CharBuff0), itr.first, itr.second); wb.Put(dbId + m_CharBuff0, m_CharBuff1); } // decl for(const auto& itr : fctx.m_declList) { wb.Put(dbId + itr.first, itr.second); } // override for(const auto& itr : fctx.m_usrId2overrideeMap) { #if (USE_BASE64 != 0) char* p = m_CharBuff0; p = encodeVal(p, itr.first); *p = '\0'; #else snprintf(m_CharBuff0, sizeof(m_CharBuff0), "%x", itr.first); #endif // overridee -> overrider wb.Put(dbId + TABLE_NAME_LOCAL_USR_ID_TO_OVERRIDER "|" + m_CharBuff0, itr.second); } for(const auto& itr : fctx.m_usrId2overriderMap) { const IiMap& usrMap = itr.second; #if (USE_BASE64 != 0) char* p = m_CharBuff0; p = encodeVal(p, itr.first); *p = '\0'; #else snprintf(m_CharBuff0, sizeof(m_CharBuff0), "%x", itr.first); #endif string val = ""; for(const auto& itr_usr : usrMap) { #if (USE_BASE64 != 0) char* p = m_CharBuff1; p = encodeVal(p, itr_usr.first); *p = '\0'; #else snprintf(m_CharBuff1, sizeof(m_CharBuff1), "%x", itr_usr.first); #endif if(val.empty()) { val = m_CharBuff1; } else { val.append(string(",") + m_CharBuff1); } } // overrider -> overridee wb.Put(dbId + TABLE_NAME_LOCAL_USR_ID_TO_OVERRIDEE "|" + m_CharBuff0, val); } // usr const SiMap& mapRef = fctx.m_usrIdTbl.GetTbl(); addIdList(&wb, mapRef, dbId + TABLE_NAME_LOCAL_USR_ID_TO_USR); for(const auto& itr : mapRef) { string key(dbId + TABLE_NAME_USR_TO_LOCAL_ID "|"); key.append(itr.first); #if (USE_BASE64 != 0) char* p = m_CharBuff1; p = encodeVal(p, itr.second); *p = '\0'; #else snprintf(m_CharBuff1, sizeof(m_CharBuff1), "%x", itr.second); #endif wb.Put(key, m_CharBuff1); } for(auto& itr : fctx.m_usrId2refMap) { int usrId = itr.first; #if (USE_BASE64 != 0) string key(dbId + TABLE_NAME_LOCAL_USR_ID_TO_REF "|"); char* p = m_CharBuff0; p = encodeVal(p, usrId); *p = '\0'; key.append(m_CharBuff0); #else snprintf(m_CharBuff0, sizeof(m_CharBuff0), "%x", usrId); string key(dbId + TABLE_NAME_LOCAL_USR_ID_TO_REF "|" + m_CharBuff0); #endif wb.Put(key, itr.second); } // inclusion for(auto& itr : fctx.m_line2inclusionfMap) { #if (USE_BASE64 != 0) string key(dbId + TABLE_NAME_LINE_TO_INCLUSION "|"); char* p = m_CharBuff0; p = encodeVal(p, itr.first); *p = '\0'; key.append(m_CharBuff0); #else // TODO: implement hex version //snprintf(m_CharBuff0, sizeof(m_CharBuff0), "%x", usrId); //string key(dbId + TABLE_NAME_LOCAL_USR_ID_TO_REF "|" + m_CharBuff0); #endif wb.Put(key, itr.second); } const SiMap& nameMap = fctx.m_nameIdTbl.GetTbl(); addIdList(&wb, nameMap, dbId + TABLE_NAME_TOKEN_ID_TO_NAME); wb.Put(dbId + TABLE_NAME_CUFILES, valFiles); wb.Put(dbId + TABLE_NAME_BUILD_INFO, m_compileUnit + "|" + filename + "|" + m_buildOpt); } // decide db directory char* errp = NULL; //int id = strtol(dbId.c_str(), &errp, 16); int id = strtol(m_compileUnitId.c_str(), &errp, 16); int idRem = id % DB_NUM; leveldb::DB* db; snprintf(m_CharBuff0, sizeof(m_CharBuff0), "%x", idRem); string dbDir = string(m_CharBuff0); int rv = dbTryOpen(db, m_dbDir + "/" + dbDir); if(rv < 0) { printf("ERROR: finalize: open: %s\n", m_commonDbDir.c_str()); return -1; } dbFlush(db, &wb); dbClose(db); } #ifdef TIMER timerStop(TIMER_DB_WRITE); timerShow("time: TIMER_DB_WRITE: ", TIMER_DB_WRITE); #endif delete m_defaultOptions.block_cache; return 0; }