diff options
author | Bill King <bking@trolltech.com> | 2009-07-10 02:07:38 (GMT) |
---|---|---|
committer | Bill King <bking@trolltech.com> | 2009-07-10 02:07:38 (GMT) |
commit | a21230152c4ea8cd2e641f436230e76a835384c2 (patch) | |
tree | 366d92c2773b9cae7e5abd5b8e1ac03c750d5484 /src/sql | |
parent | 8a0b05f71d2a9481a21143d1b87e2b18d427d1d5 (diff) | |
download | Qt-a21230152c4ea8cd2e641f436230e76a835384c2.zip Qt-a21230152c4ea8cd2e641f436230e76a835384c2.tar.gz Qt-a21230152c4ea8cd2e641f436230e76a835384c2.tar.bz2 |
Fixes a heisenbug when using two ODBC connections with diff quoters.
Can have situations where 2 odbc connections are active, that have differing
quoting charachters. Before this fix, everything fell over.
Reviewed-by: Justin McPherson
Diffstat (limited to 'src/sql')
-rw-r--r-- | src/sql/drivers/odbc/qsql_odbc.cpp | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/sql/drivers/odbc/qsql_odbc.cpp b/src/sql/drivers/odbc/qsql_odbc.cpp index 50defdf..fa9031a 100644 --- a/src/sql/drivers/odbc/qsql_odbc.cpp +++ b/src/sql/drivers/odbc/qsql_odbc.cpp @@ -89,7 +89,8 @@ public: enum DefaultCase{Lower, Mixed, Upper, Sensitive}; QODBCDriverPrivate() : hEnv(0), hDbc(0), useSchema(false), disconnectCount(0), isMySqlServer(false), - isMSSqlServer(false), hasSQLFetchScroll(true), hasMultiResultSets(false) + isMSSqlServer(false), hasSQLFetchScroll(true), hasMultiResultSets(false), + isQuoteInitialized(false), quote(QLatin1Char('"')) { unicode = false; } @@ -116,7 +117,10 @@ public: QString &schema, QString &table); DefaultCase defaultCase() const; QString adjustCase(const QString&) const; - QChar quoteChar() const; + QChar quoteChar(); +private: + bool isQuoteInitialized; + QChar quote; }; class QODBCPrivate @@ -566,10 +570,8 @@ static int qGetODBCVersion(const QString &connOpts) return SQL_OV_ODBC2; } -QChar QODBCDriverPrivate::quoteChar() const +QChar QODBCDriverPrivate::quoteChar() { - static bool isQuoteInitialized = false; - static QChar quote = QChar::fromLatin1('"'); if (!isQuoteInitialized) { char driverResponse[4]; SQLSMALLINT length; @@ -579,9 +581,9 @@ QChar QODBCDriverPrivate::quoteChar() const sizeof(driverResponse), &length); if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) { - quote = QChar::fromLatin1(driverResponse[0]); + quote = QLatin1Char(driverResponse[0]); } else { - quote = QChar::fromLatin1('"'); + quote = QLatin1Char('"'); } isQuoteInitialized = true; } |