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

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

?? qsql_sqlite.cpp

?? Trolltech公司發(fā)布的基于C++圖形開發(fā)環(huán)境
?? CPP
字號:
/******************************************************************************** Implementation of SQLite driver classes.**** Copyright (C) 1992-2003 Trolltech AS. All rights reserved.**** This file is part of the sql module of the Qt GUI Toolkit.** EDITIONS: FREE, ENTERPRISE**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "qsql_sqlite.h"#include <qdatetime.h>#include <qregexp.h>#include <qfile.h>#if (QT_VERSION-0 < 0x030000)#  include <qvector.h>#  if !defined Q_WS_WIN32#    include <unistd.h>#  endif#  include "../../../3rdparty/libraries/sqlite/sqlite.h"#else#  include <qptrvector.h>#  if !defined Q_WS_WIN32#    include <unistd.h>#  endif#  include <sqlite.h>#endiftypedef struct sqlite_vm sqlite_vm;#define QSQLITE_DRIVER_NAME "QSQLITE"static QSqlVariant::Type nameToType(const QString& typeName){    QString tName = typeName.upper();    if (tName.startsWith("INT"))        return QSqlVariant::Int;    if (tName.startsWith("FLOAT") || tName.startsWith("NUMERIC"))        return QSqlVariant::Double;    if (tName.startsWith("BOOL"))        return QSqlVariant::Bool;    // SQLite is typeless - consider everything else as string    return QSqlVariant::String;}class QSQLiteDriverPrivate{public:    QSQLiteDriverPrivate();    sqlite *access;    bool utf8;};QSQLiteDriverPrivate::QSQLiteDriverPrivate() : access(0){    utf8 = (qstrcmp(sqlite_encoding, "UTF-8") == 0);}class QSQLiteResultPrivate{public:    QSQLiteResultPrivate(QSQLiteResult *res);    void cleanup();    bool fetchNext(QtSqlCachedResult::RowCache *row);    bool isSelect();    // initializes the recordInfo and the cache    void init(const char **cnames, int numCols, QtSqlCachedResult::RowCache **row = 0);    void finalize();    QSQLiteResult* q;    sqlite *access;    // and we have too keep our own struct for the data (sqlite works via    // callback.    const char *currentTail;    sqlite_vm *currentMachine;    uint skippedStatus: 1; // the status of the fetchNext() that's skipped    QtSqlCachedResult::RowCache *skipRow;    uint utf8: 1;    QSqlRecordInfo rInf;};static const uint initial_cache_size = 128;QSQLiteResultPrivate::QSQLiteResultPrivate(QSQLiteResult* res) : q(res), access(0), currentTail(0),    currentMachine(0), skippedStatus(FALSE), skipRow(0), utf8(FALSE){}void QSQLiteResultPrivate::cleanup(){    finalize();    rInf.clear();    currentTail = 0;    currentMachine = 0;    skippedStatus = FALSE;    delete skipRow;    skipRow = 0;    q->setAt(QSql::BeforeFirst);    q->setActive(FALSE);    q->cleanup();}void QSQLiteResultPrivate::finalize(){    if (!currentMachine)        return;    char* err = 0;    int res = sqlite_finalize(currentMachine, &err);    if (err) {        q->setLastError(QSqlError("Unable to fetch results", err, QSqlError::Statement, res));        sqlite_freemem(err);    }    currentMachine = 0;}// called on first fetchvoid QSQLiteResultPrivate::init(const char **cnames, int numCols, QtSqlCachedResult::RowCache **row){    if (!cnames)        return;    rInf.clear();    if (numCols <= 0)        return;    for (int i = 0; i < numCols; ++i) {        const char* lastDot = strrchr(cnames[i], '.');        const char* fieldName = lastDot ? lastDot + 1 : cnames[i];        rInf.append(QSqlFieldInfo(fieldName, nameToType(cnames[i+numCols])));    }    // skip the first fetch    if (row && !*row) {	*row = new QtSqlCachedResult::RowCache(numCols);	skipRow = *row;    }}bool QSQLiteResultPrivate::fetchNext(QtSqlCachedResult::RowCache* row){    // may be caching.    const char **fvals;    const char **cnames;    int colNum;    int res;    int i;    if (skipRow) {	// already fetched	if (row)	    *row = *skipRow;	delete skipRow;	skipRow = 0;	return skippedStatus;    }    if (!currentMachine)	return FALSE;    // keep trying while busy, wish I could implement this better.    while ((res = sqlite_step(currentMachine, &colNum, &fvals, &cnames)) == SQLITE_BUSY) {	// sleep instead requesting result again immidiately.#if defined Q_WS_WIN32	Sleep(1000);#else	sleep(1);#endif    }    switch(res) {    case SQLITE_ROW:	// check to see if should fill out columns	if (rInf.isEmpty())	    // must be first call.	    init(cnames, colNum, &row);	if (!fvals)	    return FALSE;	if (!row)	    return TRUE;	for (i = 0; i < colNum; ++i)	    (*row)[i] = utf8 ? QString::fromUtf8(fvals[i]) : QString(fvals[i]);	return TRUE;    case SQLITE_DONE:	if (rInf.isEmpty())	    // must be first call.	    init(cnames, colNum);	q->setAt(QSql::AfterLast);	return FALSE;    case SQLITE_ERROR:    case SQLITE_MISUSE:    default:	// something wrong, don't get col info, but still return false	finalize(); // finalize to get the error message.	q->setAt(QSql::AfterLast);	return FALSE;    }    return FALSE;}QSQLiteResult::QSQLiteResult(const QSQLiteDriver* db): QtSqlCachedResult(db){    d = new QSQLiteResultPrivate(this);    d->access = db->d->access;    d->utf8 = db->d->utf8;}QSQLiteResult::~QSQLiteResult(){    d->cleanup();    delete d;}/*   Execute \a query.*/bool QSQLiteResult::reset (const QString& query){    // this is where we build a query.    if (!driver())        return FALSE;    if (!driver()-> isOpen() || driver()->isOpenError())        return FALSE;    d->cleanup();    // Um, ok.  callback based so.... pass private static function for this.    setSelect(FALSE);    char *err = 0;    int res = sqlite_compile(d->access,                                d->utf8 ? (const char*)query.utf8().data() : query.ascii(),                                &(d->currentTail),                                &(d->currentMachine),                                &err);    if (res != SQLITE_OK || err) {        setLastError(QSqlError("Unable to execute statement", err, QSqlError::Statement, res));        sqlite_freemem(err);    }    //if (*d->currentTail != '\000' then there is more sql to eval    if (!d->currentMachine) {	setActive(FALSE);	return FALSE;    }    // we have to fetch one row to find out about    // the structure of the result set    d->skippedStatus = d->fetchNext(0);    setSelect(!d->rInf.isEmpty());    if (isSelect())	init(d->rInf.count());    setActive(TRUE);    return TRUE;}bool QSQLiteResult::gotoNext(QtSqlCachedResult::RowCache* row){    return d->fetchNext(row);}int QSQLiteResult::size(){    return -1;}int QSQLiteResult::numRowsAffected(){    return sqlite_changes(d->access);}/////////////////////////////////////////////////////////QSQLiteDriver::QSQLiteDriver(QObject * parent, const char * name)    : QSqlDriver(parent, name ? name : QSQLITE_DRIVER_NAME){    d = new QSQLiteDriverPrivate();}QSQLiteDriver::QSQLiteDriver(sqlite *connection, QObject *parent, const char *name)    : QSqlDriver(parent, name ? name : QSQLITE_DRIVER_NAME){    d = new QSQLiteDriverPrivate();    d->access = connection;    setOpen(TRUE);    setOpenError(FALSE);}QSQLiteDriver::~QSQLiteDriver(){    delete d;}bool QSQLiteDriver::hasFeature(DriverFeature f) const{    switch (f) {    case Transactions:        return TRUE;#if (QT_VERSION-0 >= 0x030000)    case Unicode:        return d->utf8;#endif//   case BLOB:    default:        return FALSE;    }}/*   SQLite dbs have no user name, passwords, hosts or ports.   just file names.*/bool QSQLiteDriver::open(const QString & db, const QString &, const QString &, const QString &, int, const QString &){    if (isOpen())        close();    if (db.isEmpty())	return FALSE;    char* err = 0;    d->access = sqlite_open(QFile::encodeName(db), 0, &err);    if (err) {        setLastError(QSqlError("Error to open database", err, QSqlError::Connection));        sqlite_freemem(err);        err = 0;    }    if (d->access) {        setOpen(TRUE);	setOpenError(FALSE);        return TRUE;    }    setOpenError(TRUE);    return FALSE;}void QSQLiteDriver::close(){    if (isOpen()) {        sqlite_close(d->access);        d->access = 0;        setOpen(FALSE);        setOpenError(FALSE);    }}QSqlQuery QSQLiteDriver::createQuery() const{    return QSqlQuery(new QSQLiteResult(this));}bool QSQLiteDriver::beginTransaction(){    if (!isOpen() || isOpenError())        return FALSE;    char* err;    int res = sqlite_exec(d->access, "BEGIN", 0, this, &err);    if (res == SQLITE_OK)        return TRUE;    setLastError(QSqlError("Unable to begin transaction", err, QSqlError::Transaction, res));    sqlite_freemem(err);    return FALSE;}bool QSQLiteDriver::commitTransaction(){    if (!isOpen() || isOpenError())        return FALSE;    char* err;    int res = sqlite_exec(d->access, "COMMIT", 0, this, &err);    if (res == SQLITE_OK)        return TRUE;    setLastError(QSqlError("Unable to commit transaction", err, QSqlError::Transaction, res));    sqlite_freemem(err);    return FALSE;}bool QSQLiteDriver::rollbackTransaction(){    if (!isOpen() || isOpenError())        return FALSE;    char* err;    int res = sqlite_exec(d->access, "ROLLBACK", 0, this, &err);    if (res == SQLITE_OK)        return TRUE;    setLastError(QSqlError("Unable to rollback Transaction", err, QSqlError::Transaction, res));    sqlite_freemem(err);    return FALSE;}QStringList QSQLiteDriver::tables(const QString &typeName) const{    QStringList res;    if (!isOpen())        return res;    int type = typeName.toInt();    QSqlQuery q = createQuery();    q.setForwardOnly(TRUE);#if (QT_VERSION-0 >= 0x030000)    if ((type & (int)QSql::Tables) && (type & (int)QSql::Views))        q.exec("SELECT name FROM sqlite_master WHERE type='table' OR type='view'");    else if (typeName.isEmpty() || (type & (int)QSql::Tables))        q.exec("SELECT name FROM sqlite_master WHERE type='table'");    else if (type & (int)QSql::Views)        q.exec("SELECT name FROM sqlite_master WHERE type='view'");#else        q.exec("SELECT name FROM sqlite_master WHERE type='table' OR type='view'");#endif    if (q.isActive()) {        while(q.next())            res.append(q.value(0).toString());    }#if (QT_VERSION-0 >= 0x030000)    if (type & (int)QSql::SystemTables) {        // there are no internal tables beside this one:        res.append("sqlite_master");    }#endif    return res;}QSqlIndex QSQLiteDriver::primaryIndex(const QString &tblname) const{    QSqlRecordInfo rec(recordInfo(tblname)); // expensive :(    if (!isOpen())        return QSqlIndex();    QSqlQuery q = createQuery();    q.setForwardOnly(TRUE);    // finrst find a UNIQUE INDEX    q.exec("PRAGMA index_list('" + tblname + "');");    QString indexname;    while(q.next()) {	if (q.value(2).toInt()==1) {	    indexname = q.value(1).toString();	    break;	}    }    if (indexname.isEmpty())	return QSqlIndex();    q.exec("PRAGMA index_info('" + indexname + "');");    QSqlIndex index(indexname);    while(q.next()) {	QString name = q.value(2).toString();	QSqlVariant::Type type = QSqlVariant::Invalid;	if (rec.contains(name))	    type = rec.find(name).type();	index.append(QSqlField(name, type));    }    return index;}QSqlRecordInfo QSQLiteDriver::recordInfo(const QString &tbl) const{    if (!isOpen())        return QSqlRecordInfo();    QSqlQuery q = createQuery();    q.setForwardOnly(TRUE);    q.exec("SELECT * FROM " + tbl + " LIMIT 1");    return recordInfo(q);}QSqlRecord QSQLiteDriver::record(const QString &tblname) const{    if (!isOpen())        return QSqlRecord();    return recordInfo(tblname).toRecord();}QSqlRecord QSQLiteDriver::record(const QSqlQuery& query) const{    if (query.isActive() && query.driver() == this) {        QSQLiteResult* result = (QSQLiteResult*)query.result();        return result->d->rInf.toRecord();    }    return QSqlRecord();}QSqlRecordInfo QSQLiteDriver::recordInfo(const QSqlQuery& query) const{    if (query.isActive() && query.driver() == this) {        QSQLiteResult* result = (QSQLiteResult*)query.result();        return result->d->rInf;    }    return QSqlRecordInfo();}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美色网一区二区| 国产成人鲁色资源国产91色综 | 天堂在线亚洲视频| 欧美综合在线视频| 日本成人超碰在线观看| 精品少妇一区二区三区日产乱码 | 欧美一区二区三区在线电影 | 国产在线麻豆精品观看| 久久精品亚洲精品国产欧美kt∨| 粉嫩嫩av羞羞动漫久久久| 国产精品每日更新| 欧美午夜免费电影| 捆绑调教一区二区三区| 久久久久久毛片| 91视视频在线直接观看在线看网页在线看 | 美女mm1313爽爽久久久蜜臀| 精品国产3级a| 91网页版在线| 天天影视涩香欲综合网| 2024国产精品| 91麻豆精品在线观看| 偷拍一区二区三区四区| 2022国产精品视频| 一本到三区不卡视频| 日韩av一二三| 国产精品久久久久永久免费观看 | 亚洲美女一区二区三区| 欧美精品久久久久久久多人混战| 国产露脸91国语对白| 亚洲欧洲精品一区二区三区不卡| 欧美日韩国产美| 国产不卡免费视频| 日韩国产欧美在线播放| 最新久久zyz资源站| 日韩你懂的在线观看| 不卡的电影网站| 六月丁香婷婷久久| 亚洲午夜在线观看视频在线| 久久久久99精品一区| 制服丝袜亚洲精品中文字幕| 成人国产在线观看| 久久99在线观看| 亚洲一二三四在线观看| 久久久电影一区二区三区| 欧美高清视频一二三区 | 国产精品一区在线观看你懂的| 国产精品对白交换视频| 日韩欧美在线影院| 欧美在线小视频| 成人激情小说网站| 久久se精品一区二区| 午夜欧美一区二区三区在线播放 | 一区二区成人在线视频| 久久蜜桃香蕉精品一区二区三区| 欧美日韩大陆一区二区| 色婷婷国产精品综合在线观看| 国产精品一级二级三级| 蜜桃传媒麻豆第一区在线观看| 一区二区三区不卡视频在线观看| 中文字幕欧美日韩一区| 精品久久一区二区| 欧美精品少妇一区二区三区| 91国产精品成人| 色综合一个色综合| 91老师片黄在线观看| www.爱久久.com| 成人激情校园春色| 成人av资源在线观看| 成人性生交大片免费看中文网站| 国产精品中文欧美| 久久99精品一区二区三区| 另类欧美日韩国产在线| 免费观看在线综合| 久久不见久久见免费视频7| 美女一区二区三区在线观看| 日本成人在线网站| 蜜桃一区二区三区在线观看| 久国产精品韩国三级视频| 久久国产精品99久久久久久老狼| 蜜臀av在线播放一区二区三区| 麻豆成人av在线| 麻豆91免费看| 国产成人av电影在线播放| 国产成人一级电影| 高清免费成人av| 91香蕉视频黄| 欧美日韩在线直播| 宅男噜噜噜66一区二区66| 在线观看91av| 欧美精品一区二区三区蜜桃视频| 国产欧美综合在线观看第十页| 国产精品人人做人人爽人人添| 国产精品久久久久久久久免费樱桃| 中文字幕中文乱码欧美一区二区| 亚洲情趣在线观看| 日韩国产欧美在线观看| 国产在线看一区| av亚洲精华国产精华| 欧美视频第二页| 欧美成人免费网站| 亚洲国产精品精华液ab| 中文字幕在线播放不卡一区| 一区二区成人在线视频| 看电影不卡的网站| 国产91精品久久久久久久网曝门 | 日本亚洲最大的色成网站www| 老司机免费视频一区二区| 国产一区二区在线视频| av爱爱亚洲一区| 在线不卡的av| 国产精品美女久久久久久久久久久| 亚洲最快最全在线视频| 精品一区二区三区日韩| 91在线观看下载| 日韩视频一区在线观看| 国产精品国产成人国产三级 | 成人高清在线视频| 欧美精品乱人伦久久久久久| 中文字幕精品一区二区三区精品| 国产激情91久久精品导航 | 91精品一区二区三区在线观看| 精品999久久久| 亚洲一区二区视频在线观看| 国模冰冰炮一区二区| 色狠狠av一区二区三区| 久久久久99精品国产片| 亚洲v精品v日韩v欧美v专区| 成人污污视频在线观看| 欧美成人一区二区三区片免费| 亚洲免费资源在线播放| 国产在线精品一区二区不卡了 | 久久久久亚洲蜜桃| 亚洲第一激情av| jlzzjlzz亚洲女人18| 精品精品国产高清a毛片牛牛| 亚洲精品高清在线观看| 国产69精品久久777的优势| 日韩网站在线看片你懂的| 亚洲午夜在线视频| 99久久精品费精品国产一区二区| www成人在线观看| 香蕉成人啪国产精品视频综合网 | 欧美色老头old∨ideo| 国产精品人成在线观看免费| 久久99精品久久只有精品| 欧美区一区二区三区| 樱花草国产18久久久久| 9久草视频在线视频精品| 久久色中文字幕| 九色综合狠狠综合久久| 91精品国产一区二区| 亚洲第一二三四区| 91官网在线观看| 亚洲另类一区二区| av激情成人网| 国产精品情趣视频| 国产美女精品人人做人人爽| 精品捆绑美女sm三区| 久久国产精品免费| 日韩精品一区在线观看| 日本一不卡视频| 欧美不卡一区二区三区四区| 日韩精彩视频在线观看| 欧美美女网站色| 视频一区国产视频| 91精品国产黑色紧身裤美女| 午夜精品aaa| 5月丁香婷婷综合| 麻豆精品国产传媒mv男同| 日韩精品中文字幕一区二区三区| 秋霞午夜av一区二区三区| 欧美一级艳片视频免费观看| 人妖欧美一区二区| 久久奇米777| 成人av在线影院| 樱花草国产18久久久久| 欧美视频在线一区| 日韩不卡一区二区三区| 日韩欧美一二三四区| 国产精品亚洲成人| 中文字幕在线观看不卡| 91丨porny丨蝌蚪视频| 亚洲综合视频在线| 欧美一区二区不卡视频| 精品亚洲porn| √…a在线天堂一区| 色婷婷av一区二区三区gif| 亚洲一区欧美一区| 日韩美女天天操| 北条麻妃一区二区三区| 一区二区三区小说| 3atv在线一区二区三区| 狠狠色狠狠色合久久伊人| 国产精品无码永久免费888| 在线亚洲一区二区| 麻豆极品一区二区三区| 国产精品视频线看| 欧美日韩免费一区二区三区视频 | 亚洲成年人网站在线观看| 欧美成人r级一区二区三区|