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

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

?? qsql_psql.cpp

?? QT 開發環境里面一個很重要的文件
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/******************************************************************************** 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_psql.h"#include <qcoreapplication.h>#include <qvariant.h>#include <qdatetime.h>#include <qregexp.h>#include <qsqlerror.h>#include <qsqlfield.h>#include <qsqlindex.h>#include <qsqlrecord.h>#include <qsqlquery.h>#include <qstringlist.h>#include <libpq-fe.h>#include <stdlib.h>#include <math.h>// workaround for postgres defining their OIDs in a private header file#define QBOOLOID 16#define QINT8OID 20#define QINT2OID 21#define QINT4OID 23#define QNUMERICOID 1700#define QFLOAT4OID 700#define QFLOAT8OID 701#define QABSTIMEOID 702#define QRELTIMEOID 703#define QDATEOID 1082#define QTIMEOID 1083#define QTIMETZOID 1266#define QTIMESTAMPOID 1114#define QTIMESTAMPTZOID 1184#define QOIDOID 2278#define QBYTEAOID 17#define QREGPROCOID 24#define QXIDOID 28#define QCIDOID 29Q_DECLARE_METATYPE(PGconn*)Q_DECLARE_METATYPE(PGresult*)/* This is a compile time switch - if PQfreemem is declared, the compiler will use that one,   otherwise it'll run in this template */template <typename T>inline void PQfreemem(T *t, int = 0) { free(t); }inline void qPQfreemem(void *buffer){    PQfreemem(buffer);}class QPSQLDriverPrivate{public:    QPSQLDriverPrivate(): connection(0), isUtf8(false), pro(QPSQLDriver::Version6) {}    PGconn *connection;    bool isUtf8;    QPSQLDriver::Protocol pro;    void appendTables(QStringList &tl, QSqlQuery &t, QChar type);};void QPSQLDriverPrivate::appendTables(QStringList &tl, QSqlQuery &t, QChar type){    QString query;    if (pro >= QPSQLDriver::Version73) {        query = QString::fromLatin1("select pg_class.relname, pg_namespace.nspname from pg_class "                  "left join pg_namespace on (pg_class.relnamespace = pg_namespace.oid) "                  "where (pg_class.relkind = '%1') and (pg_class.relname !~ '^Inv') "                  "and (pg_class.relname !~ '^pg_') "                  "and (pg_namespace.nspname != 'information_schema') ").arg(type);    } else {        query = QString::fromLatin1("select relname, null from pg_class where (relkind = 'r') "                  "and (relname !~ '^Inv') "                  "and (relname !~ '^pg_') ");    }    t.exec(query);    while (t.next()) {        QString schema = t.value(1).toString();        if (schema.isEmpty() || schema == QLatin1String("public"))            tl.append(t.value(0).toString());        else            tl.append(t.value(0).toString().prepend(QLatin1Char('.')).prepend(schema));    }}class QPSQLResultPrivate{public:    QPSQLResultPrivate(QPSQLResult *qq): q(qq), driver(0), result(0), currentSize(-1) {}    QPSQLResult *q;    const QPSQLDriverPrivate *driver;    PGresult *result;    int currentSize;    bool processResults();};static QSqlError qMakeError(const QString& err, QSqlError::ErrorType type,                            const QPSQLDriverPrivate *p){    const char *s = PQerrorMessage(p->connection);    QString msg = p->isUtf8 ? QString::fromUtf8(s) : QString::fromLocal8Bit(s);    return QSqlError(QLatin1String("QPSQL: ") + err, msg, type);}bool QPSQLResultPrivate::processResults(){    if (!result)        return false;    int status = PQresultStatus(result);    if (status == PGRES_TUPLES_OK) {        q->setSelect(true);        q->setActive(true);        currentSize = PQntuples(result);        return true;    } else if (status == PGRES_COMMAND_OK) {        q->setSelect(false);        q->setActive(true);        currentSize = -1;        return true;    }    q->setLastError(qMakeError(QCoreApplication::translate("QPSQLResult",                    "Unable to create query"), QSqlError::StatementError, driver));    return false;}static QVariant::Type qDecodePSQLType(int t){    QVariant::Type type = QVariant::Invalid;    switch (t) {    case QBOOLOID:        type = QVariant::Bool;        break;    case QINT8OID:        type = QVariant::LongLong;        break;    case QINT2OID:    case QINT4OID:    case QOIDOID:    case QREGPROCOID:    case QXIDOID:    case QCIDOID:        type = QVariant::Int;        break;    case QNUMERICOID:    case QFLOAT4OID:    case QFLOAT8OID:        type = QVariant::Double;        break;    case QABSTIMEOID:    case QRELTIMEOID:    case QDATEOID:        type = QVariant::Date;        break;    case QTIMEOID:    case QTIMETZOID:        type = QVariant::Time;        break;    case QTIMESTAMPOID:    case QTIMESTAMPTZOID:        type = QVariant::DateTime;        break;    case QBYTEAOID:        type = QVariant::ByteArray;        break;    default:        type = QVariant::String;        break;    }    return type;}QPSQLResult::QPSQLResult(const QPSQLDriver* db, const QPSQLDriverPrivate* p)    : QSqlResult(db){    d = new QPSQLResultPrivate(this);    d->driver = p;}QPSQLResult::~QPSQLResult(){    cleanup();    delete d;}QVariant QPSQLResult::handle() const{    return qVariantFromValue(d->result);}void QPSQLResult::cleanup(){    if (d->result)        PQclear(d->result);    d->result = 0;    setAt(QSql::BeforeFirstRow);    d->currentSize = -1;    setActive(false);}bool QPSQLResult::fetch(int i){    if (!isActive())        return false;    if (i < 0)        return false;    if (i >= d->currentSize)        return false;    if (at() == i)        return true;    setAt(i);    return true;}bool QPSQLResult::fetchFirst(){    return fetch(0);}bool QPSQLResult::fetchLast(){    return fetch(PQntuples(d->result) - 1);}QVariant QPSQLResult::data(int i){    if (i >= PQnfields(d->result)) {        qWarning("QPSQLResult::data: column %d out of range", i);        return QVariant();    }    int ptype = PQftype(d->result, i);    QVariant::Type type = qDecodePSQLType(ptype);    const char *val = PQgetvalue(d->result, at(), i);    if (PQgetisnull(d->result, at(), i))        return QVariant(type);    switch (type) {    case QVariant::Bool:        return QVariant((bool)(val[0] == 't'));    case QVariant::String:        return d->driver->isUtf8 ? QString::fromUtf8(val) : QString::fromAscii(val);    case QVariant::LongLong:        if (val[0] == '-')            return QString::fromLatin1(val).toLongLong();        else            return QString::fromLatin1(val).toULongLong();    case QVariant::Int:        return atoi(val);    case QVariant::Double:        if (ptype == QNUMERICOID)            return QString::fromAscii(val);        return strtod(val, 0);    case QVariant::Date:        if (val[0] == '\0') {            return QVariant(QDate());        } else {#ifndef QT_NO_DATESTRING            return QVariant(QDate::fromString(QString::fromLatin1(val), Qt::ISODate));#else            return QVariant(QString::fromLatin1(val));#endif        }    case QVariant::Time: {        const QString str = QString::fromLatin1(val);#ifndef QT_NO_DATESTRING        if (str.isEmpty())            return QVariant(QTime());        if (str.at(str.length() - 3) == QLatin1Char('+'))            // strip the timezone            return QVariant(QTime::fromString(str.left(str.length() - 3), Qt::ISODate));        return QVariant(QTime::fromString(str, Qt::ISODate));#else        return QVariant(str);#endif    }    case QVariant::DateTime: {        QString dtval = QString::fromLatin1(val);#ifndef QT_NO_DATESTRING        if (dtval.length() < 10)            return QVariant(QDateTime());        // remove the timezone        if (dtval.at(dtval.length() - 3) == QLatin1Char('+'))            dtval.chop(3);        // milliseconds are sometimes returned with 2 digits only        if (dtval.at(dtval.length() - 3).isPunct())            dtval += QLatin1Char('0');        if (dtval.isEmpty())            return QVariant(QDateTime());        else            return QVariant(QDateTime::fromString(dtval, Qt::ISODate));#else        return QVariant(dtval);#endif    }    case QVariant::ByteArray: {        size_t len;        unsigned char *data = PQunescapeBytea((unsigned char*)val, &len);        QByteArray ba((const char*)data, len);        qPQfreemem(data);        return QVariant(ba);    }    default:    case QVariant::Invalid:        qWarning("QPSQLResult::data: unknown data type");    }    return QVariant();}bool QPSQLResult::isNull(int field){    PQgetvalue(d->result, at(), field);    return PQgetisnull(d->result, at(), field);}bool QPSQLResult::reset (const QString& query){    cleanup();    if (!driver())        return false;    if (!driver()->isOpen() || driver()->isOpenError())        return false;    d->result = PQexec(d->driver->connection,                       d->driver->isUtf8 ? query.toUtf8().constData()                                         : query.toLocal8Bit().constData());    return d->processResults();}int QPSQLResult::size(){    return d->currentSize;}int QPSQLResult::numRowsAffected(){    return QString::fromLatin1(PQcmdTuples(d->result)).toInt();}QVariant QPSQLResult::lastInsertId() const{    if (isActive()) {        Oid id = PQoidValue(d->result);        if (id != InvalidOid)            return QVariant(id);    }    return QVariant();}QSqlRecord QPSQLResult::record() const{    QSqlRecord info;    if (!isActive() || !isSelect())        return info;    int count = PQnfields(d->result);    for (int i = 0; i < count; ++i) {        QSqlField f;        if (d->driver->isUtf8)            f.setName(QString::fromUtf8(PQfname(d->result, i)));        else            f.setName(QString::fromLocal8Bit(PQfname(d->result, i)));        f.setType(qDecodePSQLType(PQftype(d->result, i)));        int len = PQfsize(d->result, i);        int precision = PQfmod(d->result, i);        // swap length and precision if length == -1        if (len == -1 && precision > -1) {            len = precision - 4;            precision = -1;        }        f.setLength(len);        f.setPrecision(precision);        f.setSqlType(PQftype(d->result, i));        info.append(f);    }    return info;}///////////////////////////////////////////////////////////////////static bool setEncodingUtf8(PGconn* connection){    PGresult* result = PQexec(connection, "SET CLIENT_ENCODING TO 'UNICODE'");    int status = PQresultStatus(result);    PQclear(result);    return status == PGRES_COMMAND_OK;}static void setDatestyle(PGconn* connection){    PGresult* result = PQexec(connection, "SET DATESTYLE TO 'ISO'");    int status =  PQresultStatus(result);    if (status != PGRES_COMMAND_OK)        qWarning("%s", PQerrorMessage(connection));    PQclear(result);}static QPSQLDriver::Protocol getPSQLVersion(PGconn* connection){    PGresult* result = PQexec(connection, "select version()");    int status =  PQresultStatus(result);    if (status == PGRES_COMMAND_OK || status == PGRES_TUPLES_OK) {        QString val = QString::fromAscii(PQgetvalue(result, 0, 0));        PQclear(result);        QRegExp rx(QLatin1String("(\\d+)\\.(\\d+)"));        rx.setMinimal(true); // enforce non-greedy RegExp        if (rx.indexIn(val) != -1) {            int vMaj = rx.cap(1).toInt();            int vMin = rx.cap(2).toInt();            if (vMaj < 6) {                qWarning("This version of PostgreSQL is not supported and may not work.");                return QPSQLDriver::Version6;            }            if (vMaj == 6) {                return QPSQLDriver::Version6;            } else if (vMaj == 7) {                if (vMin < 1)                    return QPSQLDriver::Version7;                else if (vMin < 3)                    return QPSQLDriver::Version71;            }            return QPSQLDriver::Version73;        }    } else {        qWarning("This version of PostgreSQL is not supported and may not work.");    }    return QPSQLDriver::Version6;}QPSQLDriver::QPSQLDriver(QObject *parent)    : QSqlDriver(parent){    init();}QPSQLDriver::QPSQLDriver(PGconn * conn, QObject * parent)    : QSqlDriver(parent){    init();    d->connection = conn;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久一区二区三区| 国产乱理伦片在线观看夜一区| 老司机免费视频一区二区三区| 国产麻豆精品久久一二三| 色综合久久六月婷婷中文字幕| 欧美成人一区二区三区在线观看| 亚洲视频免费在线| 国产精品456露脸| 9191国产精品| 亚洲免费观看高清| 高清视频一区二区| 日韩欧美不卡在线观看视频| 亚洲一二三四区| 99久久免费国产| 久久久久久一级片| 久久99最新地址| 69堂成人精品免费视频| 亚洲高清免费一级二级三级| 成人aaaa免费全部观看| 久久精品视频一区二区| 美女尤物国产一区| 欧美一区二区三区日韩| 午夜欧美大尺度福利影院在线看| 91麻豆国产香蕉久久精品| 亚洲国产高清在线观看视频| 看片网站欧美日韩| 欧美xxxxxxxxx| 麻豆91在线看| 日韩欧美国产一区二区在线播放| 午夜av电影一区| 欧美久久一二三四区| 亚洲成av人片在线观看| 欧美视频一区在线观看| 亚洲成人先锋电影| 欧美日韩www| 日韩av不卡在线观看| 欧美精品视频www在线观看| 三级在线观看一区二区| 91精品中文字幕一区二区三区| 天堂久久久久va久久久久| 日韩一区二区在线观看视频播放| 美女视频网站黄色亚洲| 精品国产伦一区二区三区观看方式 | av高清不卡在线| 国产欧美一区二区在线| 成人精品高清在线| 中文字幕一区二区三区不卡在线 | 免费视频最近日韩| 日韩欧美国产一区在线观看| 国产在线精品一区二区不卡了 | 成人高清免费在线播放| 国产精品视频免费| 色婷婷综合久久久中文字幕| 中文字幕亚洲成人| 欧美午夜不卡视频| 蜜乳av一区二区| 亚洲国产电影在线观看| 色老综合老女人久久久| 无吗不卡中文字幕| 国产三级欧美三级日产三级99 | 亚洲欧美在线aaa| 欧美日韩免费在线视频| 美女一区二区视频| 国产精品久久久久9999吃药| 91久久精品一区二区| 麻豆成人av在线| 亚洲天堂网中文字| 欧美一级电影网站| 丰满岳乱妇一区二区三区| 亚洲图片欧美一区| 国产亚洲人成网站| 欧美三日本三级三级在线播放| 另类小说欧美激情| 亚洲你懂的在线视频| 日韩欧美成人一区| 色婷婷久久久久swag精品 | 午夜亚洲福利老司机| 久久在线观看免费| 精品视频免费在线| 东方欧美亚洲色图在线| 日本欧洲一区二区| 亚洲免费观看高清| 日本一区二区三区四区| 日韩一级黄色片| 色播五月激情综合网| 国产精品一区二区久激情瑜伽| 亚洲福利视频三区| 国产精品美女久久久久aⅴ国产馆| 欧美精品久久一区二区三区| 91在线国内视频| 韩国欧美一区二区| 日本在线播放一区二区三区| 亚洲欧美另类久久久精品| 久久精品欧美一区二区三区不卡 | 青椒成人免费视频| 一区二区三国产精华液| 国产精品久久久久桃色tv| 欧美大片拔萝卜| 91精品国产综合久久久蜜臀粉嫩 | 91国偷自产一区二区使用方法| 国产精品996| 激情综合五月婷婷| 日韩精品亚洲一区二区三区免费| 一区二区三区在线播放| 亚洲男人天堂av网| 国产精品欧美久久久久一区二区| 久久久www成人免费毛片麻豆| 欧美视频一区二区三区四区 | 色琪琪一区二区三区亚洲区| 粉嫩绯色av一区二区在线观看| 六月婷婷色综合| 美女久久久精品| 免费成人美女在线观看.| 三级在线观看一区二区| 日本不卡一区二区三区| 亚洲国产cao| 日本中文一区二区三区| 毛片基地黄久久久久久天堂| 日韩va亚洲va欧美va久久| 奇米777欧美一区二区| 免费日韩伦理电影| 麻豆精品视频在线观看| 精品一区二区在线观看| 国产中文字幕一区| 成人教育av在线| 99久久精品久久久久久清纯| 91福利国产成人精品照片| 欧美性感一类影片在线播放| 欧美日韩另类一区| 欧美zozo另类异族| 国产精品国产三级国产普通话99 | 成人一区二区视频| youjizz久久| 欧亚洲嫩模精品一区三区| 欧美精品777| 欧美mv日韩mv国产网站app| 国产亚洲一区字幕| 亚洲你懂的在线视频| 日韩高清不卡在线| 国产成人久久精品77777最新版本| 波多野结衣亚洲一区| 欧美视频精品在线观看| 精品成人私密视频| 首页国产丝袜综合| 国产精品69毛片高清亚洲| 91电影在线观看| 2019国产精品| 亚洲精品第一国产综合野| 午夜视频在线观看一区二区三区| 老司机精品视频在线| 成人动漫在线一区| 欧美一区二区视频观看视频| 欧美韩国日本不卡| 天天影视网天天综合色在线播放| 国产毛片精品视频| 日本韩国欧美一区二区三区| 日韩一区二区三区视频在线观看| 国产日韩欧美精品一区| 性做久久久久久免费观看欧美| 国产成人av自拍| 欧美久久久久久蜜桃| 国产精品色一区二区三区| 日韩激情在线观看| 99热99精品| 久久综合成人精品亚洲另类欧美| 一区二区成人在线视频| 国产精品综合二区| 欧美日韩国产高清一区二区三区| 欧美国产成人在线| 精品写真视频在线观看| 欧美剧在线免费观看网站| 亚洲视频你懂的| 成人网在线播放| 日韩欧美中文字幕精品| 亚洲小说欧美激情另类| 成人深夜在线观看| 精品粉嫩aⅴ一区二区三区四区| 亚洲免费观看高清在线观看| 国产成人精品网址| 欧美成人a∨高清免费观看| 香蕉影视欧美成人| 日本电影欧美片| 亚洲三级视频在线观看| 青青青伊人色综合久久| 欧美三级电影网| 一区二区成人在线观看| 色婷婷综合久久| 亚洲免费在线看| 99视频在线精品| 久久精品夜色噜噜亚洲a∨| 日韩va欧美va亚洲va久久| 欧美色综合网站| 亚洲美女少妇撒尿| 91亚洲精品久久久蜜桃网站 | 久久久久久久一区| 精一区二区三区| 日韩精品一区二区三区四区视频 | 成人手机在线视频| 中日韩av电影| thepron国产精品|