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

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

?? qsql_psql.cpp

?? Trolltech公司發布的基于C++圖形開發環境
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/******************************************************************************** Implementation of PostgreSQL driver classes**** Created : 001103**** Copyright (C) 1992-2002 Trolltech AS.  All rights reserved.**** This file is part of the sql module of the Qt GUI Toolkit.**** This file may be distributed under the terms of the Q Public License** as defined by Trolltech AS of Norway and appearing in the file** LICENSE.QPL included in the packaging of this file.**** This file may be distributed and/or modified under the terms of the** GNU General Public License version 2 as published by the Free Software** Foundation and appearing in the file LICENSE.GPL included in the** packaging of this file.**** Licensees holding valid Qt Enterprise Edition licenses may use this** file in accordance with the Qt Commercial License Agreement provided** with the Software.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.**** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for**   information about Qt Commercial License Agreements.** See http://www.trolltech.com/qpl/ for QPL licensing information.** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include "qsql_psql.h"#include <private/qsqlextension_p.h>#include <math.h>#include <qpointarray.h>#include <qsqlrecord.h>#include <qregexp.h>#include <qdatetime.h>// PostgreSQL header <utils/elog.h> included by <postgres.h> redefines DEBUG.#if defined(DEBUG)# undef DEBUG#endif#include <postgres.h>#include <libpq/libpq-fs.h>// PostgreSQL header <catalog/pg_type.h> redefines errno erroneously.#if defined(errno)# undef errno#endif#define errno qt_psql_errno#include <catalog/pg_type.h>#undef errnoQPtrDict<QSqlDriverExtension> *qSqlDriverExtDict();QPtrDict<QSqlOpenExtension> *qSqlOpenExtDict();class QPSQLPrivate{public:  QPSQLPrivate():connection(0), result(0), isUtf8(FALSE) {}    PGconn	*connection;    PGresult	*result;    bool        isUtf8;};class QPSQLDriverExtension : public QSqlDriverExtension{public:    QPSQLDriverExtension( QPSQLDriver *dri )	: QSqlDriverExtension(), driver(dri) { }    ~QPSQLDriverExtension() {}    bool isOpen() const;private:    QPSQLDriver *driver;};bool QPSQLDriverExtension::isOpen() const{    return PQstatus( driver->connection() ) == CONNECTION_OK;}class QPSQLOpenExtension : public QSqlOpenExtension{public:    QPSQLOpenExtension( QPSQLDriver *dri )	: QSqlOpenExtension(), driver(dri) { }    ~QPSQLOpenExtension() {}    bool open( const QString& db,	       const QString& user,	       const QString& password,	       const QString& host,	       int port,	       const QString& connOpts );private:    QPSQLDriver *driver;};bool QPSQLOpenExtension::open( const QString& db,			       const QString& user,			       const QString& password,			       const QString& host,			       int port,			       const QString& connOpts ){    return driver->open( db, user, password, host, port, connOpts );}static QSqlError qMakeError( const QString& err, int type, const QPSQLPrivate* p ){    const char *s = PQerrorMessage(p->connection);    QString msg = p->isUtf8 ? QString::fromUtf8(s) : QString::fromLocal8Bit(s);    return QSqlError("QPSQL: " + err, msg, type);}static QVariant::Type qDecodePSQLType( int t ){    QVariant::Type type = QVariant::Invalid;    switch ( t ) {    case BOOLOID	:	type = QVariant::Bool;	break;    case INT8OID	:	type = QVariant::LongLong;	break;    case INT2OID	:	//    case INT2VECTOROID  : // 7.x    case INT4OID        :	type = QVariant::Int;	break;    case NUMERICOID     :    case FLOAT4OID      :    case FLOAT8OID      :	type = QVariant::Double;	break;    case ABSTIMEOID     :    case RELTIMEOID     :    case DATEOID	:	type = QVariant::Date;	break;    case TIMEOID	:#ifdef TIMETZOID // 7.x	case TIMETZOID  :#endif	type = QVariant::Time;	break;    case TIMESTAMPOID   :#ifdef DATETIMEOID    // Postgres 6.x datetime workaround.    // DATETIMEOID == TIMESTAMPOID (only the names have changed)    case DATETIMEOID    :#endif#ifdef TIMESTAMPTZOID    // Postgres 7.2 workaround    // TIMESTAMPTZOID == TIMESTAMPOID == DATETIMEOID    case TIMESTAMPTZOID :#endif	type = QVariant::DateTime;	break;	//    case ZPBITOID	: // 7.x	//    case VARBITOID	: // 7.x    case OIDOID         :    case BYTEAOID       :	type = QVariant::ByteArray;	break;    case REGPROCOID     :    case TIDOID         :    case XIDOID         :    case CIDOID         :	//    case OIDVECTOROID   : // 7.x    case UNKNOWNOID     :	//    case TINTERVALOID   : // 7.x	type = QVariant::Invalid;	break;    default:    case CHAROID	:    case BPCHAROID	:	//    case LZTEXTOID	: // 7.x    case VARCHAROID	:    case TEXTOID	:    case NAMEOID	:    case CASHOID        :    case INETOID        :    case CIDROID        :    case CIRCLEOID      :	type = QVariant::String;	break;    }    return type;}QPSQLResult::QPSQLResult( const QPSQLDriver* db, const QPSQLPrivate* p ): QSqlResult( db ),  currentSize( 0 ){    d =   new QPSQLPrivate();    (*d) = (*p);}QPSQLResult::~QPSQLResult(){    cleanup();    delete d;}PGresult* QPSQLResult::result(){    return d->result;}void QPSQLResult::cleanup(){    if ( d->result )	PQclear( d->result );    d->result = 0;    setAt( -1 );    currentSize = 0;    setActive( FALSE );}bool QPSQLResult::fetch( int i ){    if ( !isActive() )	return FALSE;    if ( i < 0 )	return FALSE;    if ( i >= 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 );}// some Postgres conversionsstatic QPoint pointFromString( const QString& s){    // format '(x,y)'    int pivot = s.find( ',' );    if ( pivot != -1 ) {	int x = s.mid( 1, pivot-1 ).toInt();	int y = s.mid( pivot+1, s.length()-pivot-2 ).toInt();	return QPoint( x, y ) ;    } else	return QPoint();}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 QString val = ( d->isUtf8 && ptype != BYTEAOID ) ?			QString::fromUtf8( PQgetvalue( d->result, at(), i ) ) :			QString::fromLocal8Bit( PQgetvalue( d->result, at(), i ) );    if ( PQgetisnull( d->result, at(), i ) ) {	QVariant v;	v.cast( type );	return v;    }    switch ( type ) {    case QVariant::Bool:	{	    QVariant b ( (bool)(val == "t"), 0 );	    return ( b );	}    case QVariant::String:	return QVariant( val );    case QVariant::LongLong:	if ( val[0] == '-' )	    return QVariant( val.toLongLong() );	else	    return QVariant( val.toULongLong() );    case QVariant::Int:	return QVariant( val.toInt() );    case QVariant::Double:	if ( ptype == NUMERICOID )	    return QVariant( val );	return QVariant( val.toDouble() );    case QVariant::Date:	if ( val.isEmpty() ) {	    return QVariant( QDate() );	} else {	    return QVariant( QDate::fromString( val, Qt::ISODate ) );	}    case QVariant::Time:	if ( val.isEmpty() )	    return QVariant( QTime() );	if ( val.at( val.length() - 3 ) == '+' )	    // strip the timezone	    return QVariant( QTime::fromString( val.left( val.length() - 3 ), Qt::ISODate ) );	return QVariant( QTime::fromString( val, Qt::ISODate ) );    case QVariant::DateTime: {	if ( val.length() < 10 )	    return QVariant( QDateTime() );	// remove the timezone	QString dtval = val;	if ( dtval.at( dtval.length() - 3 ) == '+' )	    dtval.truncate( dtval.length() - 3 );	// milliseconds are sometimes returned with 2 digits only	if ( dtval.at( dtval.length() - 3 ).isPunct() )	    dtval += '0';	if ( dtval.isEmpty() )	    return QVariant( QDateTime() );	else	    return QVariant( QDateTime::fromString( dtval, Qt::ISODate ) );    }    case QVariant::Point:	return QVariant( pointFromString( val ) );    case QVariant::Rect: // format '(x,y),(x',y')'	{	    int pivot = val.find( "),(" );	    if ( pivot != -1 )		return QVariant( QRect( pointFromString( val.mid(pivot+2,val.length()) ), pointFromString( val.mid(0,pivot+1) ) ) );	    return QVariant( QRect() );	}    case QVariant::PointArray: // format '((x,y),(x1,y1),...,(xn,yn))'	{	    QRegExp pointPattern("\\([0-9-]*,[0-9-]*\\)");	    int points = val.contains( pointPattern );	    QPointArray parray( points );	    int idx = 1;	    for ( int i = 0; i < points; i++ ){		int start = val.find( pointPattern, idx );		int end = -1;		if ( start != -1 ) {		    end = val.find( ')', start+1 );		    if ( end != -1 ) {			parray.setPoint( i, pointFromString( val.mid(idx, end-idx+1) ) );		    }		    else			parray.setPoint( i, QPoint() );		} else {		    parray.setPoint( i, QPoint() );		    break;		}		idx = end+2;	    }	    return QVariant( parray );	}    case QVariant::ByteArray: {	if ( ptype == BYTEAOID ) {	    uint i = 0;	    int index = 0;	    uint len = val.length();	    static const QChar backslash( '\\' );	    QByteArray ba( (int)len );	    while ( i < len ) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
狠狠色伊人亚洲综合成人| 在线成人免费观看| 国产女人18水真多18精品一级做| 久久国产福利国产秒拍| 日韩免费电影网站| 国产精选一区二区三区| 日本一区二区三区四区| 成人国产精品免费观看视频| 18欧美亚洲精品| 欧美在线不卡视频| 美女任你摸久久| 国产精品欧美一区二区三区| 91在线码无精品| 免费在线观看视频一区| 国产日本欧洲亚洲| 91美女在线观看| 日韩精品久久久久久| 2022国产精品视频| 一本到三区不卡视频| 日韩电影在线观看网站| 国产亚洲婷婷免费| 日本韩国一区二区三区视频| 日韩激情一二三区| 欧美极品另类videosde| 欧洲色大大久久| 狠狠色丁香婷综合久久| 国产精品福利av| 欧美日韩你懂得| 国产精品996| 亚洲第一搞黄网站| 精品sm捆绑视频| 一本一道综合狠狠老| 美女任你摸久久| 一区二区三区国产精品| 精品国产一区二区三区不卡| 99精品视频一区二区三区| 五月婷婷久久丁香| 亚洲欧美怡红院| 日韩精品一区二区在线| 91麻豆成人久久精品二区三区| 日本成人超碰在线观看| 亚洲欧美综合另类在线卡通| 日韩欧美国产一区二区在线播放 | 国内精品免费**视频| 亚洲精品成人少妇| 久久亚洲综合色| 欧美肥妇free| 色婷婷av一区二区三区大白胸| 日本不卡免费在线视频| 亚洲男人的天堂一区二区| 久久婷婷国产综合国色天香| 精品视频1区2区| 99视频一区二区| 国产一区高清在线| 亚洲va欧美va人人爽| 亚洲免费电影在线| 国产精品嫩草影院av蜜臀| 精品久久久久久久久久久久包黑料| 在线亚洲人成电影网站色www| 国产黄色精品网站| 久久99精品国产麻豆婷婷| 亚洲午夜视频在线观看| 亚洲人亚洲人成电影网站色| 国产午夜精品一区二区三区嫩草 | 午夜欧美2019年伦理| 亚洲免费观看高清| 亚洲人成小说网站色在线 | 国产美女久久久久| 精品一区二区三区视频| 日韩在线一区二区| 午夜精品久久久久久久99樱桃| 亚洲人妖av一区二区| 亚洲视频电影在线| 亚洲天堂成人在线观看| 亚洲婷婷国产精品电影人久久| 中文字幕一区二区三区蜜月 | 一区av在线播放| 亚洲麻豆国产自偷在线| 一区二区免费在线播放| 亚洲一区av在线| 亚洲成人激情综合网| 亚洲mv在线观看| 日韩av在线免费观看不卡| 日韩中文字幕麻豆| 麻豆久久一区二区| 国产综合久久久久久鬼色| 国产高清不卡一区| 波多野结衣中文字幕一区二区三区| 国产成人精品免费看| 91污片在线观看| 欧美色老头old∨ideo| 欧美日韩精品一区视频| 日韩午夜av电影| 精品国产电影一区二区| 日本一区二区视频在线观看| 最新不卡av在线| 亚洲午夜三级在线| 久久se这里有精品| 国产69精品久久777的优势| 99在线精品观看| 欧美国产一区二区| 亚洲乱码国产乱码精品精98午夜 | 国产精品综合一区二区三区| 成人激情校园春色| 欧美中文字幕不卡| 日韩一区二区不卡| 国产精品视频你懂的| 一区二区在线免费| 秋霞成人午夜伦在线观看| 国产一区二区h| 91视频国产资源| 欧美精品亚洲一区二区在线播放| 日韩欧美一二三四区| 国产精品国产三级国产专播品爱网| 亚洲美女电影在线| 精品一区二区成人精品| 99国产精品99久久久久久| 91 com成人网| 国产精品久久久久桃色tv| 天天综合色天天综合| 国产福利一区二区三区视频在线| 在线中文字幕一区二区| 欧美大度的电影原声| 亚洲男女毛片无遮挡| 久久99精品国产麻豆婷婷| 色综合一区二区| 亚洲精品在线网站| 亚洲一区二区三区三| 国产精品18久久久久久久久 | 久久久久九九视频| 亚洲国产综合在线| 成人在线综合网| 精品剧情v国产在线观看在线| 亚洲欧美偷拍三级| 国产精品综合久久| 91精品免费在线| 亚洲精品免费在线播放| 国产精品一区二区三区乱码| 欧美揉bbbbb揉bbbbb| 国产精品初高中害羞小美女文| 欧美96一区二区免费视频| 日本电影亚洲天堂一区| 国产情人综合久久777777| 日本vs亚洲vs韩国一区三区| 色综合天天综合在线视频| 国产偷v国产偷v亚洲高清| 免费人成精品欧美精品 | 欧美狂野另类xxxxoooo| 中文字幕在线不卡视频| 国产成人综合亚洲网站| 日韩欧美一区二区免费| 亚洲主播在线播放| 91在线你懂得| 亚洲欧洲av另类| 99精品久久只有精品| 中文字幕第一区| 国产乱对白刺激视频不卡| 日韩精品一区二区三区四区视频 | 国产高清精品网站| 久久网这里都是精品| 美女脱光内衣内裤视频久久网站| 亚洲你懂的在线视频| 风间由美中文字幕在线看视频国产欧美| 欧美zozozo| 麻豆精品国产91久久久久久| 制服丝袜中文字幕一区| 天堂成人国产精品一区| 欧美日韩夫妻久久| 日韩在线a电影| 日韩一区二区影院| 激情欧美一区二区三区在线观看| 日韩情涩欧美日韩视频| 久草这里只有精品视频| 欧美mv日韩mv国产网站app| 久久草av在线| 国产欧美一区二区精品秋霞影院| 国产精品亚洲视频| 国产精品第13页| 91传媒视频在线播放| 一区二区高清在线| 欧美日韩视频在线观看一区二区三区 | 99视频有精品| 亚洲伦理在线免费看| 一本色道久久加勒比精品| 亚洲欧洲av在线| 欧美午夜精品电影| 全国精品久久少妇| 久久综合丝袜日本网| 不卡在线观看av| 亚洲午夜一区二区三区| 欧美成人女星排名| 国产大片一区二区| 亚洲欧美日韩久久| 欧美一区二区大片| 成人在线一区二区三区| 夜夜揉揉日日人人青青一国产精品 | 日韩精品久久理论片| 欧美刺激脚交jootjob| 国产成人综合亚洲网站| 亚洲最色的网站|