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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? qsql_ibase.cpp

?? QT 開(kāi)發(fā)環(huán)境里面一個(gè)很重要的文件
?? CPP
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
/******************************************************************************** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.**** This file is part of the QtSql module of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** 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_ibase.h"#include <qcoreapplication.h>#include <qdatetime.h>#include <qvariant.h>#include <qsqlerror.h>#include <qsqlfield.h>#include <qsqlindex.h>#include <qsqlquery.h>#include <qstringlist.h>#include <qlist.h>#include <qvector.h>#include <qdebug.h>#include <ibase.h>#include <stdlib.h>#include <limits.h>#include <math.h>#define FBVERSION SQL_DIALECT_V6enum { QIBaseChunkSize = SHRT_MAX / 2 };static bool getIBaseError(QString& msg, ISC_STATUS* status, long &sqlcode){    if (status[0] != 1 || status[1] <= 0)        return false;    sqlcode = isc_sqlcode(status);    char buf[512];    isc_sql_interprete(sqlcode, buf, 512);    msg = QString::fromUtf8(buf);    return true;}static void createDA(XSQLDA *&sqlda){    sqlda = (XSQLDA *) malloc(XSQLDA_LENGTH(1));    sqlda->sqln = 1;    sqlda->sqld = 0;    sqlda->version = SQLDA_VERSION1;    sqlda->sqlvar[0].sqlind = 0;    sqlda->sqlvar[0].sqldata = 0;}static void enlargeDA(XSQLDA *&sqlda, int n){    free(sqlda);    sqlda = (XSQLDA *) malloc(XSQLDA_LENGTH(n));    sqlda->sqln = n;    sqlda->version = SQLDA_VERSION1;}static void initDA(XSQLDA *sqlda){    for (int i = 0; i < sqlda->sqld; ++i) {        switch (sqlda->sqlvar[i].sqltype & ~1) {        case SQL_INT64:        case SQL_LONG:        case SQL_SHORT:        case SQL_FLOAT:        case SQL_DOUBLE:        case SQL_TIMESTAMP:        case SQL_TYPE_TIME:        case SQL_TYPE_DATE:        case SQL_TEXT:        case SQL_BLOB:            sqlda->sqlvar[i].sqldata = (char*)malloc(sqlda->sqlvar[i].sqllen);            break;        case SQL_ARRAY:            sqlda->sqlvar[i].sqldata = (char*)malloc(sizeof(ISC_QUAD));            memset(sqlda->sqlvar[i].sqldata, 0, sizeof(ISC_QUAD));            break;        case SQL_VARYING:            sqlda->sqlvar[i].sqldata = (char*)malloc(sqlda->sqlvar[i].sqllen + sizeof(short));            break;        default:            // not supported - do not bind.            sqlda->sqlvar[i].sqldata = 0;            break;        }        if (sqlda->sqlvar[i].sqltype & 1) {            sqlda->sqlvar[i].sqlind = (short*)malloc(sizeof(short));            *(sqlda->sqlvar[i].sqlind) = 0;        } else {            sqlda->sqlvar[i].sqlind = 0;        }    }}static void delDA(XSQLDA *&sqlda){    if (!sqlda)        return;    for (int i = 0; i < sqlda->sqld; ++i) {        free(sqlda->sqlvar[i].sqlind);        free(sqlda->sqlvar[i].sqldata);    }    free(sqlda);    sqlda = 0;}static QVariant::Type qIBaseTypeName(int iType){    switch (iType) {    case blr_varying:    case blr_varying2:    case blr_text:    case blr_cstring:    case blr_cstring2:        return QVariant::String;    case blr_sql_time:        return QVariant::Time;    case blr_sql_date:        return QVariant::Date;    case blr_timestamp:        return QVariant::DateTime;    case blr_blob:        return QVariant::ByteArray;    case blr_quad:    case blr_short:    case blr_long:        return QVariant::Int;    case blr_int64:        return QVariant::LongLong;    case blr_float:    case blr_d_float:    case blr_double:        return QVariant::Double;    }    qWarning("qIBaseTypeName: unknown datatype: %d", iType);    return QVariant::Invalid;}static QVariant::Type qIBaseTypeName2(int iType){    switch(iType & ~1) {    case SQL_VARYING:    case SQL_TEXT:        return QVariant::String;    case SQL_LONG:    case SQL_SHORT:        return QVariant::Int;    case SQL_INT64:        return QVariant::LongLong;    case SQL_FLOAT:    case SQL_DOUBLE:        return QVariant::Double;    case SQL_TIMESTAMP:        return QVariant::DateTime;    case SQL_TYPE_TIME:        return QVariant::Time;    case SQL_TYPE_DATE:        return QVariant::Date;    case SQL_ARRAY:        return QVariant::List;    case SQL_BLOB:        return QVariant::ByteArray;    default:        return QVariant::Invalid;    }}static ISC_TIMESTAMP toTimeStamp(const QDateTime &dt){    static const QTime midnight(0, 0, 0, 0);    static const QDate basedate(1858, 11, 17);    ISC_TIMESTAMP ts;    ts.timestamp_time = midnight.msecsTo(dt.time()) * 10;    ts.timestamp_date = basedate.daysTo(dt.date());    return ts;}static QDateTime fromTimeStamp(char *buffer){    static const QDate bd(1858, 11, 17);    QTime t;    QDate d;    // have to demangle the structure ourselves because isc_decode_time    // strips the msecs    t = t.addMSecs(int(((ISC_TIMESTAMP*)buffer)->timestamp_time / 10));    d = bd.addDays(int(((ISC_TIMESTAMP*)buffer)->timestamp_date));    return QDateTime(d, t);}static ISC_TIME toTime(const QTime &t){    static const QTime midnight(0, 0, 0, 0);    return (ISC_TIME)midnight.msecsTo(t) * 10;}static QTime fromTime(char *buffer){    QTime t;    // have to demangle the structure ourselves because isc_decode_time    // strips the msecs    t = t.addMSecs(int((*(ISC_TIME*)buffer) / 10));    return t;}static ISC_DATE toDate(const QDate &t){    static const QDate basedate(1858, 11, 17);    ISC_DATE date;    date = basedate.daysTo(t);    return date;}static QDate fromDate(char *buffer){    static const QDate bd(1858, 11, 17);    QDate d;    // have to demangle the structure ourselves because isc_decode_time    // strips the msecs    d = bd.addDays(int(((ISC_TIMESTAMP*)buffer)->timestamp_date));    return d;}class QIBaseDriverPrivate{public:    QIBaseDriverPrivate(QIBaseDriver *d) : q(d)    {        ibase = 0;        trans = 0;    }    bool isError(const char *msg, QSqlError::ErrorType typ = QSqlError::UnknownError)    {        QString imsg;        long sqlcode;        if (!getIBaseError(imsg, status, sqlcode))            return false;        //qDebug() << "ERROR" << msg << imsg << typ;        q->setLastError(QSqlError(QCoreApplication::translate("QIBaseDriver", msg),                        imsg, typ, int(sqlcode)));        return true;    }public:    QIBaseDriver* q;    isc_db_handle ibase;    isc_tr_handle trans;    ISC_STATUS status[20];};class QIBaseResultPrivate{public:    QIBaseResultPrivate(QIBaseResult *d, const QIBaseDriver *ddb);    ~QIBaseResultPrivate() { cleanup(); }    void cleanup();    bool isError(const char *msg, QSqlError::ErrorType typ = QSqlError::UnknownError)    {        QString imsg;        long sqlcode;        if (!getIBaseError(imsg, status, sqlcode))            return false;        q->setLastError(QSqlError(QCoreApplication::translate("QIBaseResult", msg),                        imsg, typ, int(sqlcode)));        return true;    }    bool transaction();    bool commit();    bool isSelect();    QVariant fetchBlob(ISC_QUAD *bId);    bool writeBlob(int i, const QByteArray &ba);    QVariant fetchArray(int pos, ISC_QUAD *arr);    bool writeArray(int i, const QList<QVariant> &list);public:    QIBaseResult *q;    const QIBaseDriver *db;    ISC_STATUS status[20];    isc_tr_handle trans;    //indicator whether we have a local transaction or a transaction on driver level    bool localTransaction;    isc_stmt_handle stmt;    isc_db_handle ibase;    XSQLDA *sqlda; // output sqlda    XSQLDA *inda; // input parameters    int queryType;};QIBaseResultPrivate::QIBaseResultPrivate(QIBaseResult *d, const QIBaseDriver *ddb):    q(d), db(ddb), trans(0), stmt(0), ibase(ddb->d->ibase), sqlda(0), inda(0), queryType(-1){    localTransaction = (ddb->d->ibase == 0);}void QIBaseResultPrivate::cleanup(){    commit();    if (!localTransaction)        trans = 0;    if (stmt) {        isc_dsql_free_statement(status, &stmt, DSQL_drop);        stmt = 0;    }    delDA(sqlda);    delDA(inda);    queryType = -1;    q->cleanup();}bool QIBaseResultPrivate::writeBlob(int i, const QByteArray &ba){    isc_blob_handle handle = 0;    ISC_QUAD *bId = (ISC_QUAD*)inda->sqlvar[i].sqldata;    isc_create_blob2(status, &ibase, &trans, &handle, bId, 0, 0);    if (!isError(QT_TRANSLATE_NOOP("QIBaseResult", "Unable to create BLOB"),                 QSqlError::StatementError)) {        int i = 0;        while (i < ba.size()) {            isc_put_segment(status, &handle, qMin(ba.size() - i, int(QIBaseChunkSize)),                            const_cast<char*>(ba.data()) + i);            if (isError(QT_TRANSLATE_NOOP("QIBaseResult", "Unable to write BLOB")))                return false;            i += qMin(ba.size() - i, int(QIBaseChunkSize));        }    }    isc_close_blob(status, &handle);    return true;}QVariant QIBaseResultPrivate::fetchBlob(ISC_QUAD *bId){    isc_blob_handle handle = 0;    isc_open_blob2(status, &ibase, &trans, &handle, bId, 0, 0);    if (isError(QT_TRANSLATE_NOOP("QIBaseResult", "Unable to open BLOB"),                QSqlError::StatementError))        return QVariant();    unsigned short len = 0;    QByteArray ba;    int chunkSize = QIBaseChunkSize;    ba.resize(chunkSize);    int read = 0;    while ( isc_get_segment(status, &handle, &len, chunkSize, ba.data() + read) == 0 || status[1] == isc_segment ){	read += len;	if ( len < chunkSize  )	    break;	ba.resize(ba.size() + chunkSize);    }    bool isErr = isError(QT_TRANSLATE_NOOP("QIBaseResult", "Unable to read BLOB"),                         QSqlError::StatementError);    isc_close_blob(status, &handle);    if (isErr)        return QVariant();    ba.resize(read);    return ba;}template<typename T>static QList<QVariant> toList(char** buf, int count, T* = 0){    QList<QVariant> res;    for (int i = 0; i < count; ++i) {        res.append(*(T*)(*buf));        *buf += sizeof(T);    }    return res;}/* char** ? seems like bad influence from oracle ... */template<>static QList<QVariant> toList<long>(char** buf, int count, long*){    QList<QVariant> res;    for (int i = 0; i < count; ++i) {        if (sizeof(int) == sizeof(long))            res.append(int((*(long*)(*buf))));        else            res.append((qint64)(*(long*)(*buf)));        *buf += sizeof(long);    }    return res;}static char* readArrayBuffer(QList<QVariant>& list, char *buffer, short curDim,                             short* numElements, ISC_ARRAY_DESC *arrayDesc){    const short dim = arrayDesc->array_desc_dimensions - 1;    const unsigned char dataType = arrayDesc->array_desc_dtype;    QList<QVariant> valList;    unsigned short strLen = arrayDesc->array_desc_length;    if (curDim != dim) {        for(int i = 0; i < numElements[curDim]; ++i)            buffer = readArrayBuffer(list, buffer, curDim + 1, numElements, arrayDesc);    } else {        switch(dataType) {            case blr_varying:            case blr_varying2:                 strLen += 2; // for the two terminating null values            case blr_text:            case blr_text2: {                int o;                for(int i = 0; i < numElements[dim]; ++i) {                    for(o = 0; o < strLen && buffer[o]!=0; ++o );                    valList.append(QString::fromUtf8(buffer, o));                    buffer += strLen;                }                break; }            case blr_long:                valList = toList<long>(&buffer, numElements[dim], static_cast<long *>(0));                break;            case blr_short:                valList = toList<short>(&buffer, numElements[dim]);                break;            case blr_int64:                valList = toList<qint64>(&buffer, numElements[dim]);                break;            case blr_float:                valList = toList<float>(&buffer, numElements[dim]);                break;            case blr_double:                valList = toList<double>(&buffer, numElements[dim]);                break;            case blr_timestamp:                for(int i = 0; i < numElements[dim]; ++i) {                    valList.append(fromTimeStamp(buffer));                    buffer += sizeof(ISC_TIMESTAMP);                }                break;            case blr_sql_time:                for(int i = 0; i < numElements[dim]; ++i) {                    valList.append(fromTime(buffer));                    buffer += sizeof(ISC_TIME);                }                break;            case blr_sql_date:                for(int i = 0; i < numElements[dim]; ++i) {                    valList.append(fromDate(buffer));                    buffer += sizeof(ISC_DATE);                }                break;        }    }    if (dim > 0)        list.append(valList);    else        list += valList;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
97久久超碰国产精品| 久久新电视剧免费观看| 国产69精品久久久久毛片 | 蜜臀91精品一区二区三区| 一区在线播放视频| 亚洲视频狠狠干| 国产午夜精品理论片a级大结局| 欧美一区二区播放| 精品粉嫩超白一线天av| 91精品国产黑色紧身裤美女| 色婷婷精品大在线视频| 欧美无砖专区一中文字| 91丨九色丨蝌蚪丨老版| 成人午夜免费av| 国产成a人亚洲精品| eeuss鲁片一区二区三区在线观看| 国产一区二区精品久久| 狠狠色狠狠色综合系列| 大胆亚洲人体视频| 国产91丝袜在线18| 久久国产婷婷国产香蕉| 激情伊人五月天久久综合| 日本女人一区二区三区| 日韩成人伦理电影在线观看| 日本免费新一区视频| 蜜芽一区二区三区| 日韩国产在线观看| 免费日韩伦理电影| 久久99精品国产.久久久久 | 日韩电影在线观看网站| 精品写真视频在线观看| 国内精品嫩模私拍在线| 国产乱理伦片在线观看夜一区| 成人精品视频网站| 色综合中文字幕国产 | 国产精品自拍一区| 国产风韵犹存在线视精品| 国产成人h网站| 在线观看日韩电影| 欧美精品免费视频| 日韩欧美国产三级电影视频| 久久久久亚洲综合| 国产精品萝li| 国产精品理论片在线观看| 亚洲色图丝袜美腿| 一区二区三区美女| 免费三级欧美电影| 国产69精品久久久久777| 色综合色综合色综合色综合色综合| 91成人看片片| 久久伊人中文字幕| 亚洲欧美在线高清| 亚洲国产成人91porn| 国产在线国偷精品免费看| 丁香婷婷综合激情五月色| 91在线精品一区二区| 精品国产一区二区在线观看| 久久国产福利国产秒拍| 国产一区二区三区久久悠悠色av | 91久久国产综合久久| 精品视频在线免费看| 欧美精品一区二区三区蜜臀| 欧美激情一区二区| 奇米精品一区二区三区四区| 成人少妇影院yyyy| 欧日韩精品视频| 91精品一区二区三区在线观看| 久久久久综合网| 中文字幕精品三区| 五月天一区二区| 91香蕉视频mp4| 日韩免费视频一区| 综合精品久久久| 国产精品一级片| 欧美三片在线视频观看| 国产精品家庭影院| 日本不卡高清视频| 色综合视频一区二区三区高清| 日韩欧美精品三级| 一区二区在线观看不卡| 国产精品一区二区黑丝| 欧美久久久久久久久久| 国产精品久久久久天堂| 久久国产精品免费| 欧美系列一区二区| 精品嫩草影院久久| 五月天国产精品| 91国内精品野花午夜精品| 亚洲天堂精品在线观看| 国产精品一二三在| 欧美日韩精品高清| 国产精品国产三级国产aⅴ原创| 日日摸夜夜添夜夜添精品视频 | 日本成人在线视频网站| 91老司机福利 在线| 国产欧美日本一区视频| 国产麻豆精品一区二区| 欧美区一区二区三区| 亚洲午夜一区二区| 91亚洲国产成人精品一区二区三| 亚洲精品一线二线三线| 精品一区二区综合| 欧美伦理影视网| 亚洲欧美另类久久久精品| 色哟哟亚洲精品| 国产精品九色蝌蚪自拍| 91年精品国产| 国产精品网站在线观看| 久久99精品国产麻豆不卡| 精品国产一区a| 免费成人性网站| 免费高清在线视频一区·| 欧美综合欧美视频| 亚洲日本一区二区三区| 欧洲一区在线电影| 亚洲日本青草视频在线怡红院| av一区二区三区| 国产精品看片你懂得| 99热精品国产| 一区二区三区日韩欧美精品| 91麻豆精东视频| 中文无字幕一区二区三区| 91小视频免费观看| 亚洲少妇30p| 欧美人xxxx| 老司机精品视频在线| 精品国产免费一区二区三区香蕉| 久久精品国产999大香线蕉| 日韩免费高清av| 懂色av一区二区夜夜嗨| 1024亚洲合集| 色悠久久久久综合欧美99| 日韩av电影天堂| 日韩欧美一区中文| 亚洲bt欧美bt精品| 精品日韩成人av| 国产精品一区2区| 一区二区三区高清在线| 欧美日韩不卡一区二区| 丝袜亚洲另类欧美| 久久婷婷成人综合色| 成人午夜在线视频| 亚洲成av人片观看| 日韩欧美一级二级| 国产在线不卡一区| 一区二区三区资源| 在线不卡a资源高清| 国产成人综合网| 亚洲视频你懂的| 7777精品伊人久久久大香线蕉完整版| 国产美女在线精品| 亚洲丝袜另类动漫二区| 日韩区在线观看| 成人激情图片网| 一区二区高清视频在线观看| www日韩大片| 99久久久无码国产精品| 男男成人高潮片免费网站| 国产人久久人人人人爽| 色婷婷av一区二区三区软件| 秋霞午夜av一区二区三区| 国产精品青草久久| 69堂成人精品免费视频| 91看片淫黄大片一级在线观看| 日韩高清中文字幕一区| 国产亚洲成aⅴ人片在线观看| 欧美色图天堂网| 国产麻豆9l精品三级站| 午夜成人免费电影| 日本一区二区视频在线观看| 色婷婷久久久亚洲一区二区三区| 国产酒店精品激情| 亚洲国产乱码最新视频| 中文字幕一区二区不卡| 欧美一级一级性生活免费录像| 东方aⅴ免费观看久久av| 久久91精品国产91久久小草| 亚洲欧洲日韩av| 国产日韩av一区二区| 亚洲同性gay激情无套| 日韩三区在线观看| 欧美丰满一区二区免费视频| 国产精品18久久久久久久久久久久| 天使萌一区二区三区免费观看| 中文字幕一区二区在线播放| 7777精品伊人久久久大香线蕉的 | 精品视频在线看| av成人免费在线| 九九精品视频在线看| 日韩高清不卡一区二区| 亚洲精品视频免费看| 日韩免费看网站| 欧美一级片在线看| 在线视频国产一区| 91麻豆国产自产在线观看| 国产91综合一区在线观看| 青青草视频一区| 亚洲成人av福利| 亚洲欧美视频一区| 亚洲视频综合在线|