summaryrefslogtreecommitdiffstats
path: root/src/sql
diff options
context:
space:
mode:
authorMarcel Krems <m.krems@software-vision.eu>2013-12-16 23:26:44 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-12-20 16:27:41 +0100
commit106316198d78e97ceaf3bd62203518bd85a45fda (patch)
tree3c6b5ef3b3a6c45ce203fede89c3cac82ff257be /src/sql
parente35c2c57cffd9e69ba69193e5cf345fba3447fee (diff)
Enable QSqlError to handle alphanumeric error codes.
Some database systems (like PostgreSQL) use alphanumeric error codes. Introduce a new method nativeErrorCode() which replaces number(). If the error code cannot be converted to int, number() will return 0. Task-number: QTBUG-142 Change-Id: Ic7fba841737674b75c0c01c2263f51d2041da497 Reviewed-by: Mark Brand <mabrand@mabrand.nl>
Diffstat (limited to 'src/sql')
-rw-r--r--src/sql/kernel/qsqlerror.cpp58
-rw-r--r--src/sql/kernel/qsqlerror.h9
2 files changed, 61 insertions, 6 deletions
diff --git a/src/sql/kernel/qsqlerror.cpp b/src/sql/kernel/qsqlerror.cpp
index a2ae453756..1763722e8a 100644
--- a/src/sql/kernel/qsqlerror.cpp
+++ b/src/sql/kernel/qsqlerror.cpp
@@ -47,7 +47,7 @@ QT_BEGIN_NAMESPACE
#ifndef QT_NO_DEBUG_STREAM
QDebug operator<<(QDebug dbg, const QSqlError &s)
{
- dbg.nospace() << "QSqlError(" << s.number() << ", " << s.driverText() <<
+ dbg.nospace() << "QSqlError(" << s.nativeErrorCode() << ", " << s.driverText() <<
", " << s.databaseText() << ')';
return dbg.space();
}
@@ -59,7 +59,7 @@ public:
QString driverError;
QString databaseError;
QSqlError::ErrorType errorType;
- int errorNumber;
+ QString errorCode;
};
@@ -72,7 +72,7 @@ public:
A QSqlError object can provide database-specific error data,
including the driverText() and databaseText() messages (or both
- concatenated together as text()), and the error number() and
+ concatenated together as text()), and the nativeErrorCode() and
type().
\sa QSqlDatabase::lastError(), QSqlQuery::lastError()
@@ -91,11 +91,14 @@ public:
*/
/*!
+ \obsolete
+
Constructs an error containing the driver error text \a
driverText, the database-specific error text \a databaseText, the
type \a type and the optional error number \a number.
*/
+#if QT_DEPRECATED_SINCE(5, 3)
QSqlError::QSqlError(const QString& driverText, const QString& databaseText, ErrorType type,
int number)
{
@@ -104,9 +107,28 @@ QSqlError::QSqlError(const QString& driverText, const QString& databaseText, Err
d->driverError = driverText;
d->databaseError = databaseText;
d->errorType = type;
- d->errorNumber = number;
+ d->errorCode = QString::number(number);
+}
+#endif
+
+/*!
+ Constructs an error containing the driver error text \a
+ driverText, the database-specific error text \a databaseText, the
+ type \a type and the error code \a code.
+*/
+
+QSqlError::QSqlError(const QString &driverText, const QString &databaseText,
+ ErrorType type, const QString &code)
+{
+ d = new QSqlErrorPrivate;
+
+ d->driverError = driverText;
+ d->databaseError = databaseText;
+ d->errorType = type;
+ d->errorCode = code;
}
+
/*!
Creates a copy of \a other.
*/
@@ -246,14 +268,28 @@ void QSqlError::setType(ErrorType type)
#endif
/*!
+ \fn int QSqlError::number() const
+ \obsolete
+
Returns the database-specific error number, or -1 if it cannot be
determined.
+
+ Returns 0 if the error code is not an integer.
+
+ \warning Some databases use alphanumeric error codes, which makes
+ number() unreliable if such a database is used.
+
+ Use nativeErrorCode() instead
+
+ \sa nativeErrorCode()
*/
+#if QT_DEPRECATED_SINCE(5, 3)
int QSqlError::number() const
{
- return d->errorNumber;
+ return d->errorCode.toInt();
}
+#endif
/*!
\fn void QSqlError::setNumber(int number)
@@ -270,11 +306,21 @@ int QSqlError::number() const
#if QT_DEPRECATED_SINCE(5, 1)
void QSqlError::setNumber(int number)
{
- d->errorNumber = number;
+ d->errorCode = QString::number(number);
}
#endif
/*!
+ Returns the database-specific error code, or an empty string if
+ it cannot be determined.
+*/
+
+QString QSqlError::nativeErrorCode() const
+{
+ return d->errorCode;
+}
+
+/*!
This is a convenience function that returns databaseText() and
driverText() concatenated into a single string.
diff --git a/src/sql/kernel/qsqlerror.h b/src/sql/kernel/qsqlerror.h
index 0efe0e07b0..c2afe7c819 100644
--- a/src/sql/kernel/qsqlerror.h
+++ b/src/sql/kernel/qsqlerror.h
@@ -59,10 +59,16 @@ public:
TransactionError,
UnknownError
};
+#if QT_DEPRECATED_SINCE(5, 3)
QSqlError( const QString& driverText = QString(),
const QString& databaseText = QString(),
ErrorType type = NoError,
int number = -1);
+#endif
+ QSqlError(const QString &driverText,
+ const QString &databaseText,
+ ErrorType type,
+ const QString &errorCode);
QSqlError(const QSqlError& other);
QSqlError& operator=(const QSqlError& other);
bool operator==(const QSqlError& other) const;
@@ -72,7 +78,10 @@ public:
QString driverText() const;
QString databaseText() const;
ErrorType type() const;
+#if QT_DEPRECATED_SINCE(5, 3)
int number() const;
+#endif
+ QString nativeErrorCode() const;
QString text() const;
bool isValid() const;