162 typedef QHash<DBPROCESS *, QTDSResultPrivate *> QTDSErrorHash; |
162 typedef QHash<DBPROCESS *, QTDSResultPrivate *> QTDSErrorHash; |
163 Q_GLOBAL_STATIC(QTDSErrorHash, errs) |
163 Q_GLOBAL_STATIC(QTDSErrorHash, errs) |
164 |
164 |
165 extern "C" { |
165 extern "C" { |
166 static int CS_PUBLIC qTdsMsgHandler (DBPROCESS* dbproc, |
166 static int CS_PUBLIC qTdsMsgHandler (DBPROCESS* dbproc, |
167 DBINT /*msgno*/, |
167 DBINT msgno, |
168 int msgstate, |
168 int msgstate, |
169 int severity, |
169 int severity, |
170 char* msgtext, |
170 char* msgtext, |
171 char* /*srvname*/, |
171 char* srvname, |
172 char* /*procname*/, |
172 char* /*procname*/, |
173 int /*line*/) |
173 int line) |
174 { |
174 { |
175 QTDSResultPrivate* p = errs()->value(dbproc); |
175 QTDSResultPrivate* p = errs()->value(dbproc); |
176 |
176 |
177 if (!p) { |
177 if (!p) { |
178 // ### umm... temporary disabled since this throws a lot of warnings... |
178 // ### umm... temporary disabled since this throws a lot of warnings... |
179 // qWarning("QTDSDriver warning (%d): [%s] from server [%s]", msgstate, msgtext, srvname); |
179 // qWarning("QTDSDriver warning (%d): [%s] from server [%s]", msgstate, msgtext, srvname); |
180 return INT_CANCEL; |
180 return INT_CANCEL; |
181 } |
181 } |
182 |
182 |
183 if (severity > 0) { |
183 if (severity > 0) { |
184 QString errMsg = QString::fromLatin1("%1 (%2)").arg(QString::fromAscii(msgtext)).arg( |
184 QString errMsg = QString::fromLatin1("%1 (Msg %2, Level %3, State %4, Server %5, Line %6)") |
185 msgstate); |
185 .arg(QString::fromAscii(msgtext)) |
|
186 .arg(msgno) |
|
187 .arg(severity) |
|
188 .arg(msgstate) |
|
189 .arg(QString::fromAscii(srvname)) |
|
190 .arg(line); |
186 p->addErrorMsg(errMsg); |
191 p->addErrorMsg(errMsg); |
|
192 if (severity > 10) { |
|
193 // Severe messages are really errors in the sense of lastError |
|
194 errMsg = p->getErrorMsgs(); |
|
195 p->lastError = qMakeError(errMsg, QSqlError::UnknownError, msgno); |
|
196 p->clearErrorMsgs(); |
|
197 } |
187 } |
198 } |
188 |
199 |
189 return INT_CANCEL; |
200 return INT_CANCEL; |
190 } |
201 } |
191 |
202 |