Changeset 846 for trunk/src/sql
- Timestamp:
- May 5, 2011, 5:36:53 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 54 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> -
trunk/src/sql/kernel/qsql.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/kernel/qsql.qdoc
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) … … 7 7 ** This file is part of the documentation of the Qt Toolkit. 8 8 ** 9 ** $QT_BEGIN_LICENSE: LGPL$9 ** $QT_BEGIN_LICENSE:FDL$ 10 10 ** Commercial Usage 11 11 ** Licensees holding valid Qt Commercial licenses may use this file in 12 12 ** accordance with the Qt Commercial License Agreement provided with the 13 ** Software or, alternatively, in accordance with the terms contained in 14 ** awritten agreement between you and Nokia.13 ** Software or, alternatively, in accordance with the terms contained in a 14 ** written agreement between you and Nokia. 15 15 ** 16 ** GNU Lesser General Public License Usage 17 ** Alternatively, this file may be used under the terms of the GNU Lesser 18 ** General Public License version 2.1 as published by the Free Software 19 ** Foundation and appearing in the file LICENSE.LGPL included in the 20 ** packaging of this file. Please review the following information to 21 ** ensure the GNU Lesser General Public License version 2.1 requirements 22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. 23 ** 24 ** In addition, as a special exception, Nokia gives you certain additional 25 ** rights. These rights are described in the Nokia Qt LGPL Exception 26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. 27 ** 28 ** GNU General Public License Usage 29 ** Alternatively, this file may be used under the terms of the GNU 30 ** General Public License version 3.0 as published by the Free Software 31 ** Foundation and appearing in the file LICENSE.GPL included in the 32 ** packaging of this file. Please review the following information to 33 ** ensure the GNU General Public License version 3.0 requirements will be 34 ** met: http://www.gnu.org/copyleft/gpl.html. 16 ** GNU Free Documentation License 17 ** Alternatively, this file may be used under the terms of the GNU Free 18 ** Documentation License version 1.3 as published by the Free Software 19 ** Foundation and appearing in the file included in the packaging of this 20 ** file. 35 21 ** 36 22 ** If you have questions regarding the use of this file, please contact -
trunk/src/sql/kernel/qsqlcachedresult.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/kernel/qsqlcachedresult_p.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/kernel/qsqldatabase.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) … … 61 61 #endif 62 62 #ifdef QT_SQL_TDS 63 // conflicting RETCODE typedef between odbc and freetds 64 #define RETCODE DBRETCODE 63 65 #include "../drivers/tds/qsql_tds.h" 66 #undef RETCODE 64 67 #endif 65 68 #ifdef QT_SQL_DB2 … … 99 102 QT_BEGIN_NAMESPACE 100 103 101 #if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)104 #ifndef QT_NO_LIBRARY 102 105 Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, 103 106 (QSqlDriverFactoryInterface_iid, … … 577 580 #endif 578 581 579 #if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)582 #ifndef QT_NO_LIBRARY 580 583 if (QFactoryLoader *fl = loader()) { 581 584 QStringList keys = fl->keys(); … … 775 778 } 776 779 777 #if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)780 #ifndef QT_NO_LIBRARY 778 781 if (!driver && loader()) { 779 782 if (QSqlDriverFactoryInterface *factory = qobject_cast<QSqlDriverFactoryInterface*>(loader()->instance(type))) -
trunk/src/sql/kernel/qsqldatabase.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/kernel/qsqldriver.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) … … 397 397 on \a type. 398 398 399 \warning Because of binary compat ability constraints, this function is not virtual.399 \warning Because of binary compatibility constraints, this function is not virtual. 400 400 If you want to provide your own implementation in your QSqlDriver subclass, 401 401 reimplement the isIdentifierEscapedImplementation() slot in your subclass instead. … … 422 422 modification. 423 423 424 \warning Because of binary compat ability constraints, this function is not virtual,424 \warning Because of binary compatibility constraints, this function is not virtual, 425 425 If you want to provide your own implementation in your QSqlDriver subclass, 426 426 reimplement the stripDelimitersImplementation() slot in your subclass instead. … … 872 872 on \a type. 873 873 874 Because of binary compat ability constraints, isIdentifierEscaped() function874 Because of binary compatibility constraints, isIdentifierEscaped() function 875 875 (introduced in Qt 4.5) is not virtual. Instead, isIdentifierEscaped() will 876 876 dynamically detect and call \e this slot. The default implementation … … 897 897 identifier is returned without modification. 898 898 899 Because of binary compat ability constraints, the stripDelimiters() function899 Because of binary compatibility constraints, the stripDelimiters() function 900 900 (introduced in Qt 4.5) is not virtual. Instead, stripDelimiters() will 901 901 dynamically detect and call \e this slot. It generally unnecessary -
trunk/src/sql/kernel/qsqldriver.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/kernel/qsqldriverplugin.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/kernel/qsqldriverplugin.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/kernel/qsqlerror.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/kernel/qsqlerror.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/kernel/qsqlfield.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/kernel/qsqlfield.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/kernel/qsqlindex.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/kernel/qsqlindex.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/kernel/qsqlnulldriver_p.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/kernel/qsqlquery.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) … … 273 273 /*! 274 274 Constructs a QSqlQuery object using the SQL \a query and the 275 database \a db. If \a db is not specified, the application's275 database \a db. If \a db is not specified, or is invalid, the application's 276 276 default database is used. If \a query is not an empty string, it 277 277 will be executed. … … 287 287 /*! 288 288 Constructs a QSqlQuery object using the database \a db. 289 If \a db is invalid, the application's default database will be used. 289 290 290 291 \sa QSqlDatabase -
trunk/src/sql/kernel/qsqlquery.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/kernel/qsqlrecord.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/kernel/qsqlrecord.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/kernel/qsqlresult.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/kernel/qsqlresult.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/models/qsqlquerymodel.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) … … 280 280 if (val.isValid()) 281 281 return val; 282 if (role == Qt::DisplayRole && d->rec.count() > section) 282 283 // See if it's an inserted column (iiq.column() != -1) 284 QModelIndex dItem = indexInQuery(createIndex(0, section)); 285 286 if (role == Qt::DisplayRole && d->rec.count() > section && dItem.column() != -1) 283 287 return d->rec.fieldName(section); 284 288 } … … 306 310 lastError() can be used to retrieve verbose information if there 307 311 was an error setting the query. 312 313 \note Calling setQuery() will remove any inserted columns. 308 314 309 315 \sa query(), QSqlQuery::isActive(), QSqlQuery::setForwardOnly(), lastError() … … 371 377 372 378 Executes the query \a query for the given database connection \a 373 db. If no database is specified, the default connection is used. 379 db. If no database (or an invalid database) is specified, the 380 default connection is used. 374 381 375 382 lastError() can be used to retrieve verbose information if there -
trunk/src/sql/models/qsqlquerymodel.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/models/qsqlquerymodel_p.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/models/qsqlrelationaldelegate.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/models/qsqlrelationaldelegate.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) … … 60 60 public: 61 61 62 explicit QSqlRelationalDelegate(QObject * parent = 0)63 : QItemDelegate( parent)62 explicit QSqlRelationalDelegate(QObject *aParent = 0) 63 : QItemDelegate(aParent) 64 64 {} 65 65 … … 67 67 {} 68 68 69 QWidget *createEditor(QWidget * parent,69 QWidget *createEditor(QWidget *aParent, 70 70 const QStyleOptionViewItem &option, 71 71 const QModelIndex &index) const … … 74 74 QSqlTableModel *childModel = sqlModel ? sqlModel->relationModel(index.column()) : 0; 75 75 if (!childModel) 76 return QItemDelegate::createEditor( parent, option, index);76 return QItemDelegate::createEditor(aParent, option, index); 77 77 78 QComboBox *combo = new QComboBox( parent);78 QComboBox *combo = new QComboBox(aParent); 79 79 combo->setModel(childModel); 80 80 combo->setModelColumn(childModel->fieldIndex(sqlModel->relation(index.column()).displayColumn())); -
trunk/src/sql/models/qsqlrelationaltablemodel.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/models/qsqlrelationaltablemodel.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/models/qsqltablemodel.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) … … 266 266 programmatically, without binding it to a view: 267 267 268 \snippet doc/src/snippets/sqldatabase/sqldatabase.cpp 2 5268 \snippet doc/src/snippets/sqldatabase/sqldatabase.cpp 21 269 269 270 270 The code snippet above extracts the \c salary field from record 4 in … … 394 394 returns false. 395 395 396 \note Calling select() will revert any unsubmitted changes and remove any inserted columns. 397 396 398 \sa setTable(), setFilter(), selectStatement() 397 399 */ … … 424 426 return QVariant(); 425 427 428 // Problem.. we need to use QSQM::indexInQuery to handle inserted columns 429 // but inserted rows we need to handle 430 // and indexInQuery is not virtual (grrr) so any values we pass to QSQM need 431 // to handle the insertedRows 426 432 QModelIndex item = indexInQuery(index); 427 433 … … 451 457 break; } 452 458 } 453 return QSqlQueryModel::data(item, role); 459 460 // We need to handle row mapping here, but not column mapping 461 return QSqlQueryModel::data(index.sibling(item.row(), index.column()), role); 454 462 } 455 463 … … 1096 1104 if (idx >= rowCount()) 1097 1105 return false; 1098 if (d->cache.value(idx).op == QSqlTableModelPrivate::Insert) 1106 if (d->cache.value(idx).op == QSqlTableModelPrivate::Insert) { 1099 1107 revertRow(idx); 1100 else { 1108 // Reverting a row means all the other cache entries have been adjusted downwards 1109 // so fake this by adjusting row 1110 --row; 1111 } else { 1101 1112 d->cache[idx].op = QSqlTableModelPrivate::Delete; 1102 1113 d->cache[idx].primaryValues = d->primaryValues(indexInQuery(createIndex(idx, 0)).row()); … … 1226 1237 { 1227 1238 Q_D(const QSqlTableModel); 1228 const QModelIndex it = QSqlQueryModel::indexInQuery(item); 1239 const QModelIndex it = QSqlQueryModel::indexInQuery(item); // this adjusts columns only 1229 1240 if (d->strategy == OnManualSubmit) { 1230 1241 int rowOffset = 0; … … 1333 1344 mrow.rec.setValue(idx, record.value(i)); 1334 1345 } 1346 1347 if (isOk) 1348 emit dataChanged(createIndex(row, 0), createIndex(row, columnCount() - 1)); 1335 1349 return isOk; } 1336 1350 } -
trunk/src/sql/models/qsqltablemodel.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/models/qsqltablemodel_p.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/sql.pro
r561 r846 21 21 TARGET.UID3=0x2001E61D 22 22 23 # Workaroud for problems with paging this dll 24 MMP_RULES -= PAGED 25 MMP_RULES *= UNPAGED 23 # Problems using data exports from this DLL mean that we can't page it on releases that don't support 24 # data exports (currently that's any release before Symbian^3) 25 pagingBlock = "$${LITERAL_HASH}ifndef SYMBIAN_DLL_DATA_EXPORTS_SUPPORTED" \ 26 "UNPAGED" \ 27 "$${LITERAL_HASH}endif" 28 MMP_RULES += pagingBlock 26 29 }
Note:
See TracChangeset
for help on using the changeset viewer.