亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? logcache.cpp

?? LINUX 下以 QT/KDE 寫的 SVN 客戶端
?? CPP
字號:
#include "LogCache.hpp"#include <qdir.h>#include <qsql.h>#include <qsqldatabase.h>#if QT_VERSION < 0x040000#include <qthreadstorage.h>#else#include <QMutex>#include <QThreadStorage>#include <QSqlError>#include <QSqlQuery>#include <QVariant>#endif#include <qmap.h>#include "svnqt/path.hpp"#ifndef NO_SQLITE3#include "sqlite3/qsql_sqlite3.h"#define SQLTYPE "QSQLITE3"#else#define SQLTYPE "QSQLITE"#endif#define SQLMAIN "logmain-logcache"#define SQLMAINTABLE "logdb"namespace svn {namespace cache {LogCache* LogCache::mSelf = 0;class ThreadDBStore{public:    ThreadDBStore(){#if QT_VERSION < 0x040000        m_DB=0;#else        m_DB=QSqlDatabase();#endif    }    ~ThreadDBStore(){#if QT_VERSION < 0x040000        m_DB=0;#else        m_DB=QSqlDatabase();#endif        QSqlDatabase::removeDatabase(key);        QMap<QString,QString>::Iterator it;        for (it=reposCacheNames.begin();it!=reposCacheNames.end();++it) {#if QT_VERSION < 0x040000            QSqlDatabase::removeDatabase(it.data());#else            QSqlDatabase::removeDatabase(it.value());#endif        }    }    QDataBase m_DB;    QString key;    QMap<QString,QString> reposCacheNames;};class LogCacheData{protected:    QMutex m_singleDbMutex;public:    LogCacheData(){}    ~LogCacheData(){        if (m_mainDB.hasLocalData()) {            m_mainDB.setLocalData(0L);        }    }    bool checkReposDb(QDataBase aDb)    {#if QT_VERSION < 0x040000        if (!aDb) {            return false;        }        if (!aDb->open()) {            return false;        }#else        if (!aDb.open()) {            return false;        }#endif        QSqlQuery _q(QString::null, aDb);#if QT_VERSION < 0x040000        QStringList list = aDb->tables();#else        QStringList list = aDb.tables();#endif#if QT_VERSION < 0x040000        if (list.find("logentries")==list.end()) {            aDb->transaction();#else        if (list.indexOf("logentries")==-1) {            aDb.transaction();#endif            _q.exec("CREATE TABLE \"logentries\" (\"revision\" INTEGER UNIQUE,\"date\" INTEGER,\"author\" TEXT, \"message\" TEXT)");#if QT_VERSION < 0x040000            aDb->commit();#else            aDb.commit();#endif        }#if QT_VERSION < 0x040000        if (list.find("changeditems")==list.end()) {            aDb->transaction();#else        if (list.indexOf("changeditems")==-1) {            aDb.transaction();#endif            _q.exec("CREATE TABLE \"changeditems\" (\"revision\" INTEGER,\"changeditem\" TEXT,\"action\" TEXT,\"copyfrom\" TEXT,\"copyfromrev\" INTEGER, PRIMARY KEY(revision,changeditem,action))");#if QT_VERSION < 0x040000            aDb->commit();#else            aDb.commit();#endif        }#if QT_VERSION < 0x040000        list = aDb->tables();        if (list.find("logentries")==list.end() || list.find("changeditems")==list.end()) {#else        list = aDb.tables();        if (list.indexOf("logentries")==-1 || list.indexOf("changeditems")==-1) {#endif            return false;        }        return true;    }    QString createReposDB(const svn::Path&reposroot) {        QMutexLocker locker( &m_singleDbMutex );        QDataBase _mdb = getMainDB();        QSqlQuery query1(QString::null,_mdb);        QString q("insert into "+QString(SQLMAINTABLE)+" (reposroot) VALUES('"+reposroot+"')");#if QT_VERSION < 0x040000        _mdb->transaction();#else        _mdb.transaction();#endif        query1.exec(q);#if QT_VERSION < 0x040000        _mdb->commit();#else        _mdb.commit();#endif        QSqlQuery query(QString::null,_mdb);        query.prepare(s_reposSelect);        query.bindValue(0,reposroot.native());        query.exec();        QString db;#if QT_VERSION < 0x040000        if (query.lastError().type()==QSqlError::None && query.next()) {#else        if (query.lastError().type()==QSqlError::NoError && query.next()) {#endif            db = query.value(0).toString();        }        else {            qDebug("Error select_01: %s (%s)",query.lastError().text().TOUTF8().data(),                   query.lastQuery().TOUTF8().data());        }        if (!db.isEmpty()) {            QString fulldb = m_BasePath+"/"+db+".db";            QDataBase _db = QSqlDatabase::addDatabase(SQLTYPE,"tmpdb");#if QT_VERSION < 0x040000            _db->setDatabaseName(fulldb);#else            _db.setDatabaseName(fulldb);#endif            if (!checkReposDb(_db)) {            }            QSqlDatabase::removeDatabase("tmpdb");        }        return db;    }    QDataBase getReposDB(const svn::Path&reposroot) {#if QT_VERSION < 0x040000        if (!getMainDB()) {            return 0;#else        if (!getMainDB().isValid()) {            return QDataBase();#endif        }        bool checkDone = false;        // make sure path is correct eg. without traling slashes.        QString dbFile;        QSqlQuery c(QString::null,getMainDB());        c.prepare(s_reposSelect);        c.bindValue(0,reposroot.native());        c.exec();#if QT_VERSION < 0x040000        qDebug("Check for path: "+reposroot.native());#endif        // only the first one        if ( c.next() ) {#if QT_VERSION < 0x040000            qDebug( c.value(0).toString() + ": " +                    c.value(0).toString() );#endif            dbFile = c.value(0).toString();        }        if (dbFile.isEmpty()) {            dbFile = createReposDB(reposroot);            if (dbFile.isEmpty()) {#if QT_VERSION < 0x040000                return 0;#else                return QSqlDatabase();#endif            }            checkDone=true;        }        if (m_mainDB.localData()->reposCacheNames.find(dbFile)!=m_mainDB.localData()->reposCacheNames.end()) {            return QSqlDatabase::database(m_mainDB.localData()->reposCacheNames[dbFile]);        }        int i = 0;        QString _key = dbFile;        while (QSqlDatabase::contains(_key)) {            _key = QString("%1-%2").arg(dbFile).arg(i++);        }        qDebug("The repository key is now: %s",_key.TOUTF8().data());        QDataBase _db = QSqlDatabase::addDatabase(SQLTYPE,_key);#if QT_VERSION < 0x040000        if (!_db) {            return 0;        }#endif        QString fulldb = m_BasePath+"/"+dbFile+".db";#if QT_VERSION < 0x040000        _db->setDatabaseName(fulldb);#else        _db.setDatabaseName(fulldb);#endif        qDebug("try database open %s",fulldb.TOUTF8().data());        if (!checkReposDb(_db)) {            qDebug("no DB opened");#if QT_VERSION < 0x040000            _db = 0;#else            _db = QSqlDatabase();#endif        } else {            qDebug("Insert into map");            m_mainDB.localData()->reposCacheNames[dbFile]=_key;        }        return _db;    }    QDataBase getMainDB()    {        if (!m_mainDB.hasLocalData()) {            unsigned i=0;            QString _key = SQLMAIN;            while (QSqlDatabase::contains(_key)) {                _key.sprintf("%s-%i",SQLMAIN,i++);            }            qDebug("The key is now: %s",_key.TOUTF8().data());            QDataBase db = QSqlDatabase::addDatabase(SQLTYPE,_key);#if QT_VERSION < 0x040000            db->setDatabaseName(m_BasePath+"/maindb.db");            if (!db->open()) {#else            db.setDatabaseName(m_BasePath+"/maindb.db");            if (!db.open()) {#endif#if QT_VERSION < 0x040000                qWarning("Failed to open main database: " + db->lastError().text());#endif            } else {                m_mainDB.setLocalData(new ThreadDBStore);                m_mainDB.localData()->key = _key;                m_mainDB.localData()->m_DB = db;            }        }        if (m_mainDB.hasLocalData()) {            return m_mainDB.localData()->m_DB;        } else {#if QT_VERSION < 0x040000            return 0;#else            return QSqlDatabase();#endif        }    }    QString m_BasePath;    QThreadStorage<ThreadDBStore*> m_mainDB;    static const QString s_reposSelect;};QString LogCache::s_CACHE_FOLDER="logcache";const QString LogCacheData::s_reposSelect=QString("SELECT id from ")+QString(SQLMAINTABLE)+QString(" where reposroot=? ORDER by id DESC");/*!    \fn svn::cache::LogCache::LogCache() */LogCache::LogCache(){    m_BasePath = QDir::HOMEDIR()+"/.svnqt";    setupCachePath();}LogCache::LogCache(const QString&aBasePath){    if (mSelf) {        delete mSelf;    }    mSelf=this;    if (aBasePath.isEmpty()) {        m_BasePath=QDir::HOMEDIR()+"/.svnqt";    } else {        m_BasePath=aBasePath;    }    setupCachePath();}LogCache::~LogCache(){}/*!    \fn svn::cache::LogCache::setupCachePath() */void LogCache::setupCachePath(){    m_CacheData = new LogCacheData;    m_CacheData->m_BasePath=m_BasePath;    QDir d;    if (!d.exists(m_BasePath)) {        d.mkdir(m_BasePath);    }    m_BasePath=m_BasePath+"/"+s_CACHE_FOLDER;    if (!d.exists(m_BasePath)) {        d.mkdir(m_BasePath);    }    m_CacheData->m_BasePath=m_BasePath;    if (d.exists(m_BasePath)) {        setupMainDb();    }}void LogCache::setupMainDb(){#ifndef NO_SQLITE3    if (!QSqlDatabase::isDriverAvailable(SQLTYPE)) {        QSqlDatabase::registerSqlDriver(SQLTYPE,new QSqlDriverCreator<QSQLite3Driver>);    }#endif    QDataBase mainDB = m_CacheData->getMainDB();#if QT_VERSION < 0x040000    if (!mainDB || !mainDB->open()) {        qWarning("Failed to open main database: " + (mainDB?mainDB->lastError().text():"No database object."));#else    if (!mainDB.isValid()) {        qWarning("Failed to open main database.");#endif    } else {        QSqlQuery q(QString::null, mainDB);#if QT_VERSION < 0x040000        mainDB->transaction();#else        mainDB.transaction();#endif        if (!q.exec("CREATE TABLE IF NOT EXISTS \""+QString(SQLMAINTABLE)+"\" (\"reposroot\" TEXT,\"id\" INTEGER PRIMARY KEY NOT NULL);")) {#if QT_VERSION < 0x040000            qWarning("Failed create main database: " + mainDB->lastError().text());#endif        }#if QT_VERSION < 0x040000        mainDB->commit();#else        mainDB.commit();#endif    }}}}/*!    \fn svn::cache::LogCache::self() */svn::cache::LogCache* svn::cache::LogCache::self(){    if (!mSelf) {        mSelf=new LogCache();    }    return mSelf;}/*!    \fn svn::cache::LogCache::reposDb() */QDataBase  svn::cache::LogCache::reposDb(const QString&aRepository){    qDebug("reposDB");    return m_CacheData->getReposDB(aRepository);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美xxxx老人做受| 中文字幕在线不卡国产视频| 久久精品视频在线免费观看| 亚洲日本免费电影| 国内精品免费在线观看| 欧洲生活片亚洲生活在线观看| 日韩欧美一级精品久久| 一区二区三区日韩欧美精品| 国产精品一线二线三线| 91精品国产福利| 亚洲人成电影网站色mp4| 国内精品写真在线观看| 免费的国产精品| 色综合久久中文字幕综合网| 久久久噜噜噜久久中文字幕色伊伊| 91捆绑美女网站| 国产欧美日本一区视频| 韩日欧美一区二区三区| 91精品国产综合久久国产大片| 亚洲日本电影在线| 成人av网在线| 亚洲国产精品ⅴa在线观看| 激情五月婷婷综合网| 91精品欧美综合在线观看最新| 亚洲一区二区在线视频| 日本乱人伦aⅴ精品| 亚洲图片另类小说| 91美女在线观看| 亚洲人精品一区| 色偷偷久久一区二区三区| 国产精品久久久久久久岛一牛影视 | 欧美一级日韩一级| 亚洲地区一二三色| 欧美三级视频在线| 亚洲午夜激情av| 欧美日韩久久久久久| 亚洲一二三四区| 欧美日韩亚洲高清一区二区| 夜夜嗨av一区二区三区中文字幕| 色综合久久久久网| 亚洲自拍偷拍欧美| 欧美色图天堂网| 日本一不卡视频| 欧美电影免费观看高清完整版在线 | 欧美日韩美女一区二区| 午夜久久久影院| 日韩一区二区在线播放| 老司机免费视频一区二区| 精品国一区二区三区| 成人午夜视频网站| 亚洲欧美另类久久久精品2019| 91精彩视频在线| 日本欧美一区二区三区乱码| 日韩三级视频在线观看| 国产麻豆成人精品| 日韩美女视频19| 欧美放荡的少妇| 精品在线一区二区| 1024成人网色www| 欧美日韩国产中文| 久久69国产一区二区蜜臀 | 欧美丝袜丝交足nylons图片| 日本在线不卡一区| 久久综合一区二区| 色激情天天射综合网| 免费观看成人av| 国产日韩欧美精品电影三级在线| 色久综合一二码| 精品一区二区日韩| 一区二区三区欧美激情| 日韩欧美一二三区| 99久久精品国产毛片| 天堂成人免费av电影一区| 日本一区二区三区在线不卡| 91国偷自产一区二区三区观看| 免费一级欧美片在线观看| 国产精品成人午夜| 日韩精品在线一区| 欧美日韩综合一区| 成人免费电影视频| 日韩一区二区在线看| 99精品视频在线观看| 美美哒免费高清在线观看视频一区二区 | 国产乱码精品一区二区三区忘忧草| 亚洲婷婷在线视频| 精品精品欲导航| 欧美日韩在线观看一区二区| 国产成+人+日韩+欧美+亚洲 | 成人欧美一区二区三区白人| 日韩免费看网站| 精品视频1区2区| 色又黄又爽网站www久久| 国内精品久久久久影院薰衣草| 亚洲综合男人的天堂| 国产欧美日韩一区二区三区在线观看| 欧美一级午夜免费电影| 欧美色老头old∨ideo| 色综合久久久久综合体 | 久草这里只有精品视频| 性做久久久久久久久| 亚洲精品国产第一综合99久久 | 欧美xxxxx牲另类人与| 欧美三区在线观看| 色综合久久精品| 97久久人人超碰| 不卡的看片网站| 成人夜色视频网站在线观看| 国产一区二区三区四| 国产在线精品一区二区夜色| 免费人成黄页网站在线一区二区| 91精品国产欧美一区二区成人| 欧美综合亚洲图片综合区| 99久久精品免费精品国产| 99久久精品国产精品久久| 91色porny蝌蚪| av午夜一区麻豆| 91老师国产黑色丝袜在线| 在线免费观看日本欧美| 在线观看国产日韩| 欧美老肥妇做.爰bbww| 在线综合亚洲欧美在线视频| 这里只有精品99re| 久久伊99综合婷婷久久伊| 91香蕉视频mp4| 欧美三级资源在线| 日韩一区二区三区在线| 久久综合久久鬼色中文字| 国产三级精品视频| 1区2区3区精品视频| 一区二区三区欧美视频| 丝瓜av网站精品一区二区| 日韩电影在线观看网站| 久久99精品国产| 国产成+人+日韩+欧美+亚洲 | 国产激情一区二区三区四区 | 视频一区在线视频| 九九精品一区二区| av亚洲精华国产精华精| 欧美最新大片在线看| 日韩一区二区三区在线观看| 国产亚洲欧美中文| 亚洲免费色视频| 日韩成人免费电影| 国产精品夜夜嗨| 色成年激情久久综合| 欧美一区二区视频在线观看 | 亚洲一区二区三区四区在线免费观看| 一二三区精品福利视频| 免费欧美高清视频| 成人小视频免费观看| 精品视频资源站| 国产欧美日韩另类一区| 亚洲国产欧美在线| 国产成人精品免费看| 欧美主播一区二区三区| 欧美精品一区二区三区视频| 18欧美乱大交hd1984| 久草热8精品视频在线观看| 亚洲香肠在线观看| 国产一区二区精品久久| 在线观看日韩电影| 欧美国产日本韩| 男女激情视频一区| 欧美在线三级电影| 国产无一区二区| 日本va欧美va精品发布| 成人aaaa免费全部观看| 欧美大片国产精品| 亚洲福利视频一区二区| www.激情成人| 精品国产一区久久| 午夜精品福利一区二区三区av| 成人性生交大片免费看视频在线| 国产麻豆成人传媒免费观看| 欧美日韩一级视频| 一区二区三区欧美视频| 国产在线精品一区二区| 日韩精品在线一区二区| 午夜欧美在线一二页| 91色乱码一区二区三区| 中国av一区二区三区| 国产精品自产自拍| 精品国内二区三区| 久久成人羞羞网站| 7799精品视频| 日本在线观看不卡视频| 欧美片网站yy| 亚洲高清三级视频| 日本道在线观看一区二区| 国产精品动漫网站| 成人国产精品免费网站| 国产午夜亚洲精品理论片色戒| 久久国产精品72免费观看| 91精品蜜臀在线一区尤物| 午夜私人影院久久久久| 欧美日韩成人综合在线一区二区| 亚洲精品成a人| 欧美亚洲综合色| 亚洲国产视频在线| 欧美日韩夫妻久久|