Changeset 846 for trunk/src/sql/drivers
- Timestamp:
- May 5, 2011, 5:36:53 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 20 edited
- 9 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/vendor/nokia/qt/4.7.2 (added) merged: 845 /branches/vendor/nokia/qt/current merged: 844 /branches/vendor/nokia/qt/4.6.3 removed
- Property svn:mergeinfo changed
-
trunk/src/sql/drivers/db2/qsql_db2.cpp
r651 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) … … 110 110 static QString qFromTChar(SQLTCHAR* str) 111 111 { 112 return QString ::fromUtf16(str);112 return QString((const QChar *)str); 113 113 } 114 114 … … 834 834 case QVariant::String: 835 835 if (bindValueType(i) & QSql::Out) 836 values[i] = QString ::fromUtf16((ushort*)tmpStorage.takeFirst().constData());836 values[i] = QString((const QChar *)tmpStorage.takeFirst().constData()); 837 837 break; 838 838 default: { -
trunk/src/sql/drivers/db2/qsql_db2.h
r651 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) -
trunk/src/sql/drivers/drivers.pri
r769 r846 1 contains(sql-drivers, all ) { 2 sql-driver += psql mysql odbc oci tds db2 sqlite ibase 3 } 1 contains(sql-drivers, all):sql-driver += psql mysql odbc oci tds db2 sqlite ibase 4 2 5 contains(sql-drivers, psql) { 6 HEADERS += drivers/psql/qsql_psql.h 7 SOURCES += drivers/psql/qsql_psql.cpp 8 9 unix { 10 !isEmpty(QT_LFLAGS_PSQL) { 11 LIBS *= $$QT_LFLAGS_PSQL 12 QMAKE_CXXFLAGS *= $$QT_CFLAGS_PSQL 13 } 14 !contains(LIBS, .*pq.*):LIBS *= -lpq 15 } 16 17 win32 { 18 !win32-g++:!contains( LIBS, .*pq.* ):LIBS *= -llibpq 19 win32-g++:!contains( LIBS, .*pq.* ):LIBS *= -lpq 20 LIBS *= -lws2_32 -ladvapi32 21 } 22 } 23 24 contains(sql-drivers, mysql) { 25 HEADERS += drivers/mysql/qsql_mysql.h 26 SOURCES += drivers/mysql/qsql_mysql.cpp 27 28 unix { 29 isEmpty(QT_LFLAGS_MYSQL) { 30 !contains(LIBS, .*mysqlclient.*):!contains(LIBS, .*mysqld.*) { 31 use_libmysqlclient_r:LIBS *= -lmysqlclient_r 32 else:LIBS *= -lmysqlclient 33 } 34 } else { 35 LIBS *= $$QT_LFLAGS_MYSQL 36 QMAKE_CXXFLAGS *= $$QT_CFLAGS_MYSQL 37 } 38 } 39 40 win32:!contains(LIBS, .*mysql.*):!contains(LIBS, .*mysqld.*) { 41 !win32-g++:LIBS *= -llibmysql 42 win32-g++:LIBS *= -lmysql 43 } 44 } 45 46 contains(sql-drivers, odbc) { 47 HEADERS += drivers/odbc/qsql_odbc.h 48 SOURCES += drivers/odbc/qsql_odbc.cpp 49 50 mac:!contains( LIBS, .*odbc.* ):LIBS *= -liodbc 51 unix:!contains( LIBS, .*odbc.* ):LIBS *= -lodbc 52 unix:DEFINES += UNICODE 53 54 win32 { 55 !win32-borland:LIBS *= -lodbc32 56 win32-borland:LIBS *= $(BCB)/lib/PSDK/odbc32.lib 57 } 58 } 59 60 contains(sql-drivers, oci) { 61 HEADERS += drivers/oci/qsql_oci.h 62 SOURCES += drivers/oci/qsql_oci.cpp 63 64 unix:!contains( LIBS, .*clnts.* ):LIBS += -lclntsh 65 66 win32:LIBS += -loci 67 } 68 69 contains(sql-drivers, tds) { 70 HEADERS += drivers/tds/qsql_tds.h 71 SOURCES += drivers/tds/qsql_tds.cpp 72 73 unix:LIBS += -L$SYBASE/lib -lsybdb 74 75 win32 { 76 !win32-borland:LIBS += -lNTWDBLIB 77 win32-borland:LIBS += $(BCB)/lib/PSDK/NTWDBLIB.LIB 78 } 79 } 80 81 contains(sql-drivers, db2) { 82 HEADERS += drivers/db2/qsql_db2.h 83 SOURCES += drivers/db2/qsql_db2.cpp 84 85 unix:LIBS += -ldb2 86 87 win32 { 88 !win32-borland:LIBS += -ldb2cli 89 # win32-borland:LIBS += $(BCB)/lib/PSDK/db2cli.lib 90 } 91 } 92 93 contains(sql-drivers, ibase) { 94 HEADERS += drivers/ibase/qsql_ibase.h 95 SOURCES += drivers/ibase/qsql_ibase.cpp 96 97 unix:LIBS *= -lgds 98 99 win32 { 100 !win32-borland:LIBS *= -lgds32_ms 101 win32-borland:LIBS += gds32.lib 102 } 103 } 104 105 contains(sql-drivers, sqlite2) { 106 HEADERS += drivers/sqlite2/qsql_sqlite2.h 107 SOURCES += drivers/sqlite2/qsql_sqlite2.cpp 108 !contains(LIBS, .*sqlite.*):LIBS *= -lsqlite 109 } 110 111 contains(sql-drivers, sqlite) { 112 !system-sqlite:!contains( LIBS, .*sqlite3.* ) { 113 CONFIG(release, debug|release):DEFINES *= NDEBUG 114 DEFINES += SQLITE_OMIT_LOAD_EXTENSION SQLITE_OMIT_COMPLETE 115 INCLUDEPATH += ../3rdparty/sqlite 116 SOURCES += ../3rdparty/sqlite/sqlite3.c 117 } else { 118 LIBS *= $$QT_LFLAGS_SQLITE 119 QMAKE_CXXFLAGS *= $$QT_CFLAGS_SQLITE 120 } 121 122 HEADERS += drivers/sqlite/qsql_sqlite.h 123 SOURCES += drivers/sqlite/qsql_sqlite.cpp 124 } 3 contains(sql-drivers, psql):include($$PWD/psql/qsql_psql.pri) 4 contains(sql-drivers, mysql):include($$PWD/mysql/qsql_mysql.pri) 5 contains(sql-drivers, odbc):include($$PWD/odbc/qsql_odbc.pri) 6 contains(sql-drivers, oci):include($$PWD/oci/qsql_oci.pri) 7 contains(sql-drivers, tds):include($$PWD/tds/qsql_tds.pri) 8 contains(sql-drivers, db2):include($$PWD/db2/qsql_db2.pri) 9 contains(sql-drivers, ibase):include($$PWD/ibase/qsql_ibase.pri) 10 contains(sql-drivers, sqlite2):include($$PWD/sqlite2/qsql_sqlite2.pri) 11 contains(sql-drivers, sqlite):include($$PWD/sqlite/qsql_sqlite.pri) -
trunk/src/sql/drivers/ibase/qsql_ibase.cpp
r651 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) -
trunk/src/sql/drivers/ibase/qsql_ibase.h
r651 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) -
trunk/src/sql/drivers/mysql/qsql_mysql.cpp
r769 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) -
trunk/src/sql/drivers/mysql/qsql_mysql.h
r651 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) -
trunk/src/sql/drivers/oci/qsql_oci.cpp
r769 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) … … 57 57 #include <qdebug.h> 58 58 59 // This is needed for oracle oci when compiling with mingw-w64 headers 60 #if defined(__MINGW64_VERSION_MAJOR) && defined(_WIN64) 61 #define _int64 __int64 62 #endif 63 64 59 65 #include <oci.h> 60 66 #ifdef max … … 88 94 #endif 89 95 90 static const ub1 CSID_NCHAR = SQLCS_NCHAR; 96 #ifdef OCI_ATTR_CHARSET_FORM 97 // Always set the OCI_ATTR_CHARSET_FORM to SQLCS_NCHAR is safe 98 // because Oracle server will deal with the implicit Conversion 99 // Between CHAR and NCHAR. 100 // see: http://download.oracle.com/docs/cd/A91202_01/901_doc/appdev.901/a89857/oci05bnd.htm#422705 101 static const ub1 qOraCharsetForm = SQLCS_NCHAR; 102 #endif 103 104 #if defined (OCI_UTF16ID) 105 static const ub2 qOraCharset = OCI_UTF16ID; 106 #else 91 107 static const ub2 qOraCharset = OCI_UCS2ID; 108 #endif 92 109 93 110 typedef QVarLengthArray<sb2, 32> IndicatorArray; … … 96 113 static QByteArray qMakeOraDate(const QDateTime& dt); 97 114 static QDateTime qMakeDate(const char* oraDate); 115 116 static QByteArray qMakeOCINumber(const qlonglong &ll, OCIError *err); 117 static QByteArray qMakeOCINumber(const qulonglong& ull, OCIError* err); 118 119 static qlonglong qMakeLongLong(const char* ociNumber, OCIError* err); 120 static qulonglong qMakeULongLong(const char* ociNumber, OCIError* err); 121 98 122 static QString qOraWarn(OCIError *err, int *errorCode = 0); 123 99 124 #ifndef Q_CC_SUN 100 125 static // for some reason, Sun CC can't use qOraWarning when it's declared static … … 102 127 void qOraWarning(const char* msg, OCIError *err); 103 128 static QSqlError qMakeError(const QString& errString, QSqlError::ErrorType type, OCIError *err); 129 130 104 131 105 132 class QOCIRowId: public QSharedData … … 150 177 int prefetchRows, prefetchMem; 151 178 152 void setCharset(OCIBind* hbnd);153 179 void setStatementAttributes(); 154 180 int bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, int pos, … … 162 188 inline bool isBinaryValue(int i) const 163 189 { return q->bindValueType(i) & QSql::Binary; } 190 191 void setCharset(dvoid* handle, ub4 type) const 192 { 193 int r = 0; 194 Q_ASSERT(handle); 195 196 #ifdef OCI_ATTR_CHARSET_FORM 197 r = OCIAttrSet(handle, 198 type, 199 // this const cast is safe since OCI doesn't touch 200 // the charset. 201 const_cast<void *>(static_cast<const void *>(&qOraCharsetForm)), 202 0, 203 OCI_ATTR_CHARSET_FORM, 204 //Strange Oracle bug: some Oracle servers crash the server process with non-zero error handle (mostly for 10g). 205 //So ignore the error message here. 206 0); 207 #ifdef QOCI_DEBUG 208 if (r != 0) 209 qWarning("QOCIResultPrivate::setCharset: Couldn't set OCI_ATTR_CHARSET_FORM."); 210 #endif 211 #endif 212 213 r = OCIAttrSet(handle, 214 type, 215 // this const cast is safe since OCI doesn't touch 216 // the charset. 217 const_cast<void *>(static_cast<const void *>(&qOraCharset)), 218 0, 219 OCI_ATTR_CHARSET_ID, 220 err); 221 if (r != 0) 222 qOraWarning("QOCIResultPrivate::setCharsetI Couldn't set OCI_ATTR_CHARSET_ID: ", err); 223 224 } 164 225 }; 165 226 … … 192 253 " Couldn't set OCI_ATTR_PREFETCH_MEMORY: ", err); 193 254 } 194 }195 196 void QOCIResultPrivate::setCharset(OCIBind* hbnd)197 {198 int r = 0;199 200 Q_ASSERT(hbnd);201 202 r = OCIAttrSet(hbnd,203 OCI_HTYPE_BIND,204 // this const cast is safe since OCI doesn't touch205 // the charset.206 const_cast<void *>(static_cast<const void *>(&qOraCharset)),207 0,208 OCI_ATTR_CHARSET_ID,209 err);210 if (r != 0)211 qOraWarning("QOCIResultPrivate::setCharset: Couldn't set OCI_ATTR_CHARSET_ID: ", err);212 255 } 213 256 … … 257 300 SQLT_UIN, indPtr, 0, 0, 0, 0, OCI_DEFAULT); 258 301 break; 302 case QVariant::LongLong: 303 { 304 QByteArray ba = qMakeOCINumber(val.toLongLong(), err); 305 r = OCIBindByPos(sql, hbnd, err, 306 pos + 1, 307 ba.data(), 308 ba.size(), 309 SQLT_VNU, indPtr, 0, 0, 0, 0, OCI_DEFAULT); 310 tmpStorage.append(ba); 311 break; 312 } 313 case QVariant::ULongLong: 314 { 315 QByteArray ba = qMakeOCINumber(val.toULongLong(), err); 316 r = OCIBindByPos(sql, hbnd, err, 317 pos + 1, 318 ba.data(), 319 ba.size(), 320 SQLT_VNU, indPtr, 0, 0, 0, 0, OCI_DEFAULT); 321 tmpStorage.append(ba); 322 break; 323 } 259 324 case QVariant::Double: 260 325 r = OCIBindByPos(sql, hbnd, err, … … 299 364 SQLT_STR, indPtr, 0, 0, 0, 0, OCI_DEFAULT); 300 365 if (r == OCI_SUCCESS) 301 setCharset(*hbnd );366 setCharset(*hbnd, OCI_HTYPE_BIND); 302 367 break; 303 368 } … … 323 388 } 324 389 if (r == OCI_SUCCESS) 325 setCharset(*hbnd );390 setCharset(*hbnd, OCI_HTYPE_BIND); 326 391 tmpStorage.append(ba); 327 392 break; … … 352 417 353 418 // will assign out value and remove its temp storage. 354 static void qOraOutValue(QVariant &value, QList<QByteArray> &storage )419 static void qOraOutValue(QVariant &value, QList<QByteArray> &storage, OCIError* err) 355 420 { 356 421 switch (value.type()) { … … 364 429 value = qMakeDate(storage.takeFirst()); 365 430 break; 431 case QVariant::LongLong: 432 value = qMakeLongLong(storage.takeFirst(), err); 433 break; 434 case QVariant::ULongLong: 435 value = qMakeULongLong(storage.takeFirst(), err); 436 break; 366 437 case QVariant::String: 367 value = QString ::fromUtf16(368 reinterpret_cast<const ushort*>(storage.takeFirst().constData()));438 value = QString( 439 reinterpret_cast<const QChar *>(storage.takeFirst().constData())); 369 440 break; 370 441 default: … … 381 452 continue; 382 453 383 qOraOutValue(values[i], tmpStorage );454 qOraOutValue(values[i], tmpStorage, err); 384 455 385 456 QVariant::Type typ = values.at(i).type(); … … 455 526 if (errorCode) 456 527 *errorCode = errcode; 457 return QString ::fromUtf16(reinterpret_cast<const ushort*>(errbuf));528 return QString(reinterpret_cast<const QChar *>(errbuf)); 458 529 } 459 530 … … 641 712 } 642 713 714 /*! 715 \internal 716 717 Convert qlonglong to the internal Oracle OCINumber format. 718 */ 719 QByteArray qMakeOCINumber(const qlonglong& ll, OCIError* err) 720 { 721 QByteArray ba(sizeof(OCINumber), 0); 722 723 OCINumberFromInt(err, 724 &ll, 725 sizeof(qlonglong), 726 OCI_NUMBER_SIGNED, 727 reinterpret_cast<OCINumber*>(ba.data())); 728 return ba; 729 } 730 731 /*! 732 \internal 733 734 Convert qulonglong to the internal Oracle OCINumber format. 735 */ 736 QByteArray qMakeOCINumber(const qulonglong& ull, OCIError* err) 737 { 738 QByteArray ba(sizeof(OCINumber), 0); 739 740 OCINumberFromInt(err, 741 &ull, 742 sizeof(qlonglong), 743 OCI_NUMBER_UNSIGNED, 744 reinterpret_cast<OCINumber*>(ba.data())); 745 return ba; 746 } 747 748 qlonglong qMakeLongLong(const char* ociNumber, OCIError* err) 749 { 750 qlonglong qll = 0; 751 OCINumberToInt(err, reinterpret_cast<const OCINumber *>(ociNumber), sizeof(qlonglong), 752 OCI_NUMBER_SIGNED, &qll); 753 return qll; 754 } 755 756 qulonglong qMakeULongLong(const char* ociNumber, OCIError* err) 757 { 758 qulonglong qull = 0; 759 OCINumberToInt(err, reinterpret_cast<const OCINumber *>(ociNumber), sizeof(qulonglong), 760 OCI_NUMBER_UNSIGNED, &qull); 761 return qull; 762 } 763 643 764 QDateTime qMakeDate(const char* oraDate) 644 765 { 645 int century = oraDate[0];766 int century = uchar(oraDate[0]); 646 767 if(century >= 100){ 647 768 int year = uchar(oraDate[1]); … … 662 783 QOCICols(int size, QOCIResultPrivate* dp); 663 784 ~QOCICols(); 664 void setCharset(OCIDefine* dfn);665 785 int readPiecewise(QVector<QVariant> &values, int index = 0); 666 786 int readLOBs(QVector<QVariant> &values, int index = 0); … … 864 984 0, 0, OCI_DEFAULT); 865 985 if (r == 0) 866 setCharset(dfn);986 d->setCharset(dfn, OCI_HTYPE_DEFINE); 867 987 } 868 988 break; … … 922 1042 } 923 1043 return &lob; 924 }925 926 void QOCICols::setCharset(OCIDefine* dfn)927 {928 int r = 0;929 930 Q_ASSERT(dfn);931 932 r = OCIAttrSet(dfn,933 OCI_HTYPE_DEFINE,934 // this const cast is safe since OCI doesn't touch935 // the charset.936 const_cast<void *>(static_cast<const void *>(&qOraCharset)),937 0,938 OCI_ATTR_CHARSET_ID,939 d->err);940 if (r != 0)941 qOraWarning("QOCICols::setCharset: Couldn't set OCI_ATTR_CHARSET_ID: ", d->err);942 1044 } 943 1045 … … 990 1092 if (isStringField) { 991 1093 QString str = values.at(fieldNum + index).toString(); 992 str += QString::fromUtf16(reinterpret_cast<const ushort *>(col), 993 chunkSize / 2); 1094 str += QString(reinterpret_cast<const QChar *>(col), chunkSize / 2); 994 1095 values[fieldNum + index] = str; 995 1096 fieldInf[fieldNum].ind = 0; … … 1245 1346 break; 1246 1347 1348 case QVariant::LongLong: 1349 col.bindAs = SQLT_VNU; 1350 col.maxLen = sizeof(OCINumber); 1351 break; 1352 1353 case QVariant::ULongLong: 1354 col.bindAs = SQLT_VNU; 1355 col.maxLen = sizeof(OCINumber); 1356 break; 1357 1247 1358 case QVariant::Double: 1248 1359 col.bindAs = SQLT_FLT; … … 1316 1427 break; 1317 1428 1429 case QVariant::LongLong: 1430 { 1431 columns[i].lengths[row] = columns[i].maxLen; 1432 const QByteArray ba = qMakeOCINumber(val.toLongLong(), d->err); 1433 Q_ASSERT(ba.size() == int(columns[i].maxLen)); 1434 memcpy(dataPtr, ba.constData(), columns[i].maxLen); 1435 break; 1436 } 1437 case QVariant::ULongLong: 1438 { 1439 columns[i].lengths[row] = columns[i].maxLen; 1440 const QByteArray ba = qMakeOCINumber(val.toULongLong(), d->err); 1441 Q_ASSERT(ba.size() == int(columns[i].maxLen)); 1442 memcpy(dataPtr, ba.constData(), columns[i].maxLen); 1443 break; 1444 } 1318 1445 case QVariant::Double: 1319 1446 columns[i].lengths[row] = columns[i].maxLen; … … 1423 1550 QVariant::Type tp = boundValues.at(i).type(); 1424 1551 if (tp != QVariant::List) { 1425 qOraOutValue(boundValues[i], tmpStorage );1552 qOraOutValue(boundValues[i], tmpStorage, d->err); 1426 1553 if (*columns[i].indicators == -1) 1427 1554 boundValues[i] = QVariant(tp); … … 1453 1580 break; 1454 1581 1582 case SQLT_VNU: 1583 { 1584 switch (boundValues.at(i).type()) { 1585 case QVariant::LongLong: 1586 (*list)[r] = qMakeLongLong(data + r * columns[i].maxLen, d->err); 1587 break; 1588 case QVariant::ULongLong: 1589 (*list)[r] = qMakeULongLong(data + r * columns[i].maxLen, d->err); 1590 break; 1591 default: 1592 break; 1593 } 1594 break; 1595 } 1596 1455 1597 case SQLT_FLT: 1456 1598 (*list)[r] = *reinterpret_cast<double*>(data + r * columns[i].maxLen); … … 1458 1600 1459 1601 case SQLT_STR: 1460 (*list)[r] = QString ::fromUtf16(reinterpret_cast<ushort*>(data1602 (*list)[r] = QString(reinterpret_cast<const QChar *>(data 1461 1603 + r * columns[i].maxLen)); 1462 1604 break; … … 1609 1751 // else fall through 1610 1752 case QVariant::String: 1611 v[index + i] = QString ::fromUtf16(reinterpret_cast<const ushort*>(fld.data));1753 v[index + i] = QString(reinterpret_cast<const QChar *>(fld.data)); 1612 1754 break; 1613 1755 case QVariant::ByteArray: … … 2103 2245 } else { 2104 2246 QString versionStr; 2105 versionStr = QString ::fromUtf16(reinterpret_cast<ushort*>(vertxt));2247 versionStr = QString(reinterpret_cast<const QChar *>(vertxt)); 2106 2248 QRegExp vers(QLatin1String("([0-9]+)\\.[0-9\\.]+[0-9]")); 2107 2249 if (vers.indexIn(versionStr) >= 0) -
trunk/src/sql/drivers/oci/qsql_oci.h
r651 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) … … 55 55 QT_BEGIN_HEADER 56 56 57 typedef struct OCIEnv OCIEnv; 58 typedef struct OCISvcCtx OCISvcCtx; 59 57 60 QT_BEGIN_NAMESPACE 58 61 … … 61 64 struct QOCIDriverPrivate; 62 65 struct QOCIResultPrivate; 63 64 typedef struct OCIEnv OCIEnv;65 typedef struct OCISvcCtx OCISvcCtx;66 66 67 67 class Q_EXPORT_SQLDRIVER_OCI QOCIResult : public QSqlCachedResult -
trunk/src/sql/drivers/odbc/qsql_odbc.cpp
r769 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) … … 63 63 #define ODBC_CHECK_DRIVER 64 64 65 #if defined(Q_ODBC_VERSION_2)66 //crude hack to get non-unicode capable driver managers to work67 # undef UNICODE68 # define SQLTCHAR SQLCHAR69 # define SQL_C_TCHAR SQL_C_CHAR70 #endif71 72 65 // newer platform SDKs use SQLLEN instead of SQLINTEGER 73 #if defined(WIN32) && (_MSC_VER < 1300) 66 #if defined(WIN32) && (_MSC_VER < 1300) && !defined(__MINGW64_VERSION_MAJOR) 74 67 # define QSQLLEN SQLINTEGER 75 68 # define QSQLULEN SQLUINTEGER … … 267 260 static QString qODBCWarn(const QODBCPrivate* odbc, int *nativeCode = 0) 268 261 { 269 return (qWarnODBCHandle(SQL_HANDLE_ENV, odbc->dpEnv()) + QLatin1Char(' ')262 return QString(qWarnODBCHandle(SQL_HANDLE_ENV, odbc->dpEnv()) + QLatin1Char(' ') 270 263 + qWarnODBCHandle(SQL_HANDLE_DBC, odbc->dpDbc()) + QLatin1Char(' ') 271 264 + qWarnODBCHandle(SQL_HANDLE_STMT, odbc->hStmt, nativeCode)).simplified(); … … 274 267 static QString qODBCWarn(const QODBCDriverPrivate* odbc, int *nativeCode = 0) 275 268 { 276 return (qWarnODBCHandle(SQL_HANDLE_ENV, odbc->hEnv) + QLatin1Char(' ')269 return QString(qWarnODBCHandle(SQL_HANDLE_ENV, odbc->hEnv) + QLatin1Char(' ') 277 270 + qWarnODBCHandle(SQL_HANDLE_DBC, odbc->hDbc, nativeCode)).simplified(); 278 271 } … … 344 337 type = QVariant::DateTime; 345 338 break; 346 #ifndef Q_ODBC_VERSION_2347 339 case SQL_WCHAR: 348 340 case SQL_WVARCHAR: … … 350 342 type = QVariant::String; 351 343 break; 352 #endif353 344 case SQL_CHAR: 354 345 case SQL_VARCHAR: … … 670 661 static int qGetODBCVersion(const QString &connOpts) 671 662 { 672 #ifndef Q_ODBC_VERSION_2673 663 if (connOpts.contains(QLatin1String("SQL_ATTR_ODBC_VERSION=SQL_OV_ODBC3"), Qt::CaseInsensitive)) 674 664 return SQL_OV_ODBC3; 675 #endif676 if (connOpts.contains(QLatin1String("SQL_ATTR_ODBC_VERSION=SQL_OV_ODBC2"), Qt::CaseInsensitive))677 return SQL_OV_ODBC2;678 #ifdef _IODBCUNIX_H679 return SQL_OV_ODBC3;680 #else681 665 return SQL_OV_ODBC2; 682 #endif683 666 } 684 667 … … 781 764 } 782 765 r = SQLSetConnectAttr(hDbc, SQL_ATTR_TRACE, (SQLPOINTER) v, 0); 783 #ifndef Q_ODBC_VERSION_2784 766 } else if (opt.toUpper() == QLatin1String("SQL_ATTR_CONNECTION_POOLING")) { 785 767 if (val == QLatin1String("SQL_CP_OFF")) … … 808 790 } 809 791 r = SQLSetConnectAttr(hDbc, SQL_ATTR_CP_MATCH, (SQLPOINTER)v, 0); 810 #endif811 792 } else if (opt.toUpper() == QLatin1String("SQL_ATTR_ODBC_VERSION")) { 812 793 // Already handled in QODBCDriver::open() … … 1530 1511 break; 1531 1512 case QVariant::String: 1532 #ifndef Q_ODBC_VERSION_21533 1513 if (d->unicode) { 1534 1514 QString str = val.toString(); … … 1568 1548 } 1569 1549 else 1570 #endif1571 1550 { 1572 1551 QByteArray str = val.toString().toUtf8(); … … 1974 1953 void QODBCDriverPrivate::checkUnicode() 1975 1954 { 1976 #if defined(Q_ODBC_VERSION_2)1977 unicode = false;1978 return;1979 #endif1980 1981 1955 SQLRETURN r; 1982 1956 SQLUINTEGER fFunc; … … 2133 2107 #endif 2134 2108 isFreeTDSDriver = serverType.contains(QLatin1String("tdsodbc"), Qt::CaseInsensitive); 2135 unicode = isFreeTDSDriver == false;2109 unicode = unicode && !isFreeTDSDriver; 2136 2110 } 2137 2111 } -
trunk/src/sql/drivers/odbc/qsql_odbc.h
r769 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) … … 48 48 #if defined (Q_OS_WIN32) 49 49 #include <QtCore/qt_windows.h> 50 #endif51 52 #if defined (Q_OS_MAC) && (MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_3)53 // assume we use iodbc on MACX54 // comment next line out if you use a55 // unicode compatible manager56 # define Q_ODBC_VERSION_257 50 #endif 58 51 -
trunk/src/sql/drivers/psql/qsql_psql.cpp
r651 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) … … 55 55 #include <qmutex.h> 56 56 57 58 57 #include <libpq-fe.h> 59 58 #include <pg_config.h> … … 620 619 } 621 620 621 static QPSQLDriver::Protocol qMakePSQLVersion(int vMaj, int vMin) 622 { 623 switch (vMaj) { 624 case 6: 625 return QPSQLDriver::Version6; 626 case 7: 627 { 628 switch (vMin) { 629 case 1: 630 return QPSQLDriver::Version71; 631 case 3: 632 return QPSQLDriver::Version73; 633 case 4: 634 return QPSQLDriver::Version74; 635 default: 636 return QPSQLDriver::Version7; 637 } 638 break; 639 } 640 case 8: 641 { 642 switch (vMin) { 643 case 1: 644 return QPSQLDriver::Version81; 645 case 2: 646 return QPSQLDriver::Version82; 647 case 3: 648 return QPSQLDriver::Version83; 649 case 4: 650 return QPSQLDriver::Version84; 651 default: 652 return QPSQLDriver::Version8; 653 } 654 break; 655 } 656 case 9: 657 return QPSQLDriver::Version9; 658 break; 659 default: 660 break; 661 } 662 return QPSQLDriver::VersionUnknown; 663 } 664 622 665 static QPSQLDriver::Protocol getPSQLVersion(PGconn* connection) 623 666 { … … 627 670 if (status == PGRES_COMMAND_OK || status == PGRES_TUPLES_OK) { 628 671 QString val = QString::fromAscii(PQgetvalue(result, 0, 0)); 672 629 673 QRegExp rx(QLatin1String("(\\d+)\\.(\\d+)")); 630 674 rx.setMinimal(true); // enforce non-greedy RegExp 675 631 676 if (rx.indexIn(val) != -1) { 632 677 int vMaj = rx.cap(1).toInt(); 633 678 int vMin = rx.cap(2).toInt(); 634 635 switch (vMaj) { 636 case 7: 637 switch (vMin) { 638 case 0: 639 serverVersion = QPSQLDriver::Version7; 640 break; 641 case 1: 642 case 2: 643 serverVersion = QPSQLDriver::Version71; 644 break; 645 default: 646 serverVersion = QPSQLDriver::Version73; 647 break; 648 } 649 break; 650 case 8: 651 switch (vMin) { 652 case 0: 653 serverVersion = QPSQLDriver::Version8; 654 break; 655 case 1: 656 serverVersion = QPSQLDriver::Version81; 657 break; 658 case 2: 659 default: 660 serverVersion = QPSQLDriver::Version82; 661 break; 662 } 663 break; 664 default: 665 break; 679 serverVersion = qMakePSQLVersion(vMaj, vMin); 680 #ifdef PG_MAJORVERSION 681 if (rx.indexIn(QLatin1String(PG_MAJORVERSION)) != -1) { 682 vMaj = rx.cap(1).toInt(); 683 vMin = rx.cap(2).toInt(); 666 684 } 685 QPSQLDriver::Protocol clientVersion = qMakePSQLVersion(vMaj, vMin); 686 687 if (serverVersion >= QPSQLDriver::Version9 && clientVersion < QPSQLDriver::Version9) { 688 //Client version before QPSQLDriver::Version9 only supports escape mode for bytea type, 689 //but bytea format is set to hex by default in PSQL 9 and above. So need to force the 690 //server use the old escape mode when connects to the new server with old client library. 691 result = PQexec(connection, "SET bytea_output=escape; "); 692 status = PQresultStatus(result); 693 } else if (serverVersion == QPSQLDriver::VersionUnknown) { 694 serverVersion = clientVersion; 695 if (serverVersion != QPSQLDriver::VersionUnknown) 696 qWarning("The server version of this PostgreSQL is unknown, falling back to the client version."); 697 } 698 #endif 667 699 } 668 700 } 669 701 PQclear(result); 670 702 671 if (serverVersion < QPSQLDriver::Version71) 703 //keep the old behavior unchanged 704 if (serverVersion == QPSQLDriver::VersionUnknown) 705 serverVersion = QPSQLDriver::Version6; 706 707 if (serverVersion < QPSQLDriver::Version71) { 672 708 qWarning("This version of PostgreSQL is not supported and may not work."); 709 } 673 710 674 711 return serverVersion; … … 853 890 if (d->pro == QPSQLDriver::Version8 || 854 891 d->pro == QPSQLDriver::Version81 || 855 d->pro == QPSQLDriver::Version82) { 892 d->pro == QPSQLDriver::Version82 || 893 d->pro == QPSQLDriver::Version83 || 894 d->pro == QPSQLDriver::Version84 || 895 d->pro == QPSQLDriver::Version9) { 856 896 transaction_failed = qstrcmp(PQcmdStatus(res), "ROLLBACK") == 0; 857 897 } … … 964 1004 case QPSQLDriver::Version81: 965 1005 case QPSQLDriver::Version82: 1006 case QPSQLDriver::Version83: 1007 case QPSQLDriver::Version84: 1008 case QPSQLDriver::Version9: 966 1009 stmt = QLatin1String("SELECT pg_attribute.attname, pg_attribute.atttypid::int, " 967 1010 "pg_class.relname " … … 1047 1090 case QPSQLDriver::Version81: 1048 1091 case QPSQLDriver::Version82: 1092 case QPSQLDriver::Version83: 1093 case QPSQLDriver::Version84: 1094 case QPSQLDriver::Version9: 1049 1095 stmt = QLatin1String("select pg_attribute.attname, pg_attribute.atttypid::int, " 1050 1096 "pg_attribute.attnotnull, pg_attribute.attlen, pg_attribute.atttypmod, " -
trunk/src/sql/drivers/psql/qsql_psql.h
r651 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) … … 98 98 public: 99 99 enum Protocol { 100 VersionUnknown = -1, 100 101 Version6 = 6, 101 102 Version7 = 7, … … 105 106 Version8 = 11, 106 107 Version81 = 12, 107 Version82 = 13 108 Version82 = 13, 109 Version83 = 14, 110 Version84 = 15, 111 Version9 = 16, 108 112 }; 109 113 -
trunk/src/sql/drivers/sqlite/qsql_sqlite.cpp
r769 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) … … 96 96 { 97 97 return QSqlError(descr, 98 QString ::fromUtf16(static_cast<const ushort*>(sqlite3_errmsg16(access))),98 QString(reinterpret_cast<const QChar *>(sqlite3_errmsg16(access))), 99 99 type, errorCode); 100 100 } … … 163 163 164 164 for (int i = 0; i < nCols; ++i) { 165 QString colName = QString ::fromUtf16(166 s tatic_cast<const ushort *>(sqlite3_column_name16(stmt, i))165 QString colName = QString(reinterpret_cast<const QChar *>( 166 sqlite3_column_name16(stmt, i)) 167 167 ).remove(QLatin1Char('"')); 168 168 169 169 // must use typeName for resolving the type to match QSqliteDriver::record 170 QString typeName = QString ::fromUtf16(171 s tatic_cast<const ushort *>(sqlite3_column_decltype16(stmt, i)));170 QString typeName = QString(reinterpret_cast<const QChar *>( 171 sqlite3_column_decltype16(stmt, i))); 172 172 173 173 int dotIdx = colName.lastIndexOf(QLatin1Char('.')); -
trunk/src/sql/drivers/sqlite/qsql_sqlite.h
r651 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) -
trunk/src/sql/drivers/sqlite2/qsql_sqlite2.cpp
r651 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) -
trunk/src/sql/drivers/sqlite2/qsql_sqlite2.h
r651 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) -
trunk/src/sql/drivers/tds/qsql_tds.cpp
r651 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) -
trunk/src/sql/drivers/tds/qsql_tds.h
r651 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) … … 49 49 #ifdef Q_OS_WIN32 50 50 #define WIN32_LEAN_AND_MEAN 51 #ifndef Q_USE_SYBASE 51 52 #define DBNTWIN32 // indicates 32bit windows dblib 53 #endif 54 #include <winsock2.h> 52 55 #include <QtCore/qt_windows.h> 53 56 #include <sqlfront.h>
Note:
See TracChangeset
for help on using the changeset viewer.