QMYSQL: remove support for MySql 4.x
MySql 5.0 was released 2005 so it's time to remove support for MySql 4.x 14 years later. [ChangeLog][QtSql][QMYSQL] Removed support for MySql < 5.0 since 5.0 was released 14 years ago. Change-Id: I45005accdffefbd9338ac0e710512a4c7ea8e09e Reviewed-by: Andy Shaw <andy.shaw@qt.io>
This commit is contained in:
parent
8aa3329a71
commit
b43f5ed2da
@ -65,16 +65,7 @@
|
|||||||
|
|
||||||
Q_DECLARE_METATYPE(MYSQL_RES*)
|
Q_DECLARE_METATYPE(MYSQL_RES*)
|
||||||
Q_DECLARE_METATYPE(MYSQL*)
|
Q_DECLARE_METATYPE(MYSQL*)
|
||||||
|
|
||||||
#if MYSQL_VERSION_ID >= 40108
|
|
||||||
Q_DECLARE_METATYPE(MYSQL_STMT*)
|
Q_DECLARE_METATYPE(MYSQL_STMT*)
|
||||||
#endif
|
|
||||||
|
|
||||||
#if MYSQL_VERSION_ID >= 40100
|
|
||||||
# define Q_CLIENT_MULTI_STATEMENTS CLIENT_MULTI_STATEMENTS
|
|
||||||
#else
|
|
||||||
# define Q_CLIENT_MULTI_STATEMENTS 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// MySQL above version 8 removed my_bool typedef while MariaDB kept it,
|
// MySQL above version 8 removed my_bool typedef while MariaDB kept it,
|
||||||
// by redefining it we can regain source compatibility.
|
// by redefining it we can regain source compatibility.
|
||||||
@ -199,10 +190,8 @@ protected:
|
|||||||
bool nextResult() override;
|
bool nextResult() override;
|
||||||
void detachFromResultSet() override;
|
void detachFromResultSet() override;
|
||||||
|
|
||||||
#if MYSQL_VERSION_ID >= 40108
|
|
||||||
bool prepare(const QString &stmt) override;
|
bool prepare(const QString &stmt) override;
|
||||||
bool exec() override;
|
bool exec() override;
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class QMYSQLResultPrivate: public QSqlResultPrivate
|
class QMYSQLResultPrivate: public QSqlResultPrivate
|
||||||
@ -217,9 +206,7 @@ public:
|
|||||||
result(0),
|
result(0),
|
||||||
rowsAffected(0),
|
rowsAffected(0),
|
||||||
hasBlobs(false)
|
hasBlobs(false)
|
||||||
#if MYSQL_VERSION_ID >= 40108
|
|
||||||
, stmt(0), meta(0), inBinds(0), outBinds(0)
|
, stmt(0), meta(0), inBinds(0), outBinds(0)
|
||||||
#endif
|
|
||||||
, preparedQuery(false)
|
, preparedQuery(false)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
@ -247,13 +234,11 @@ public:
|
|||||||
|
|
||||||
QVector<QMyField> fields;
|
QVector<QMyField> fields;
|
||||||
|
|
||||||
#if MYSQL_VERSION_ID >= 40108
|
|
||||||
MYSQL_STMT* stmt;
|
MYSQL_STMT* stmt;
|
||||||
MYSQL_RES* meta;
|
MYSQL_RES* meta;
|
||||||
|
|
||||||
MYSQL_BIND *inBinds;
|
MYSQL_BIND *inBinds;
|
||||||
MYSQL_BIND *outBinds;
|
MYSQL_BIND *outBinds;
|
||||||
#endif
|
|
||||||
|
|
||||||
bool preparedQuery;
|
bool preparedQuery;
|
||||||
};
|
};
|
||||||
@ -261,11 +246,9 @@ public:
|
|||||||
#if QT_CONFIG(textcodec)
|
#if QT_CONFIG(textcodec)
|
||||||
static QTextCodec* codec(MYSQL* mysql)
|
static QTextCodec* codec(MYSQL* mysql)
|
||||||
{
|
{
|
||||||
#if MYSQL_VERSION_ID >= 32321
|
|
||||||
QTextCodec* heuristicCodec = QTextCodec::codecForName(mysql_character_set_name(mysql));
|
QTextCodec* heuristicCodec = QTextCodec::codecForName(mysql_character_set_name(mysql));
|
||||||
if (heuristicCodec)
|
if (heuristicCodec)
|
||||||
return heuristicCodec;
|
return heuristicCodec;
|
||||||
#endif
|
|
||||||
return QTextCodec::codecForLocale();
|
return QTextCodec::codecForLocale();
|
||||||
}
|
}
|
||||||
#endif // textcodec
|
#endif // textcodec
|
||||||
@ -350,8 +333,6 @@ static QSqlField qToField(MYSQL_FIELD *field, QTextCodec *tc)
|
|||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if MYSQL_VERSION_ID >= 40108
|
|
||||||
|
|
||||||
static QSqlError qMakeStmtError(const QString& err, QSqlError::ErrorType type,
|
static QSqlError qMakeStmtError(const QString& err, QSqlError::ErrorType type,
|
||||||
MYSQL_STMT* stmt)
|
MYSQL_STMT* stmt)
|
||||||
{
|
{
|
||||||
@ -445,7 +426,6 @@ bool QMYSQLResultPrivate::bindInValues()
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
QMYSQLResult::QMYSQLResult(const QMYSQLDriver* db)
|
QMYSQLResult::QMYSQLResult(const QMYSQLDriver* db)
|
||||||
: QSqlResult(*new QMYSQLResultPrivate(this, db))
|
: QSqlResult(*new QMYSQLResultPrivate(this, db))
|
||||||
@ -460,11 +440,9 @@ QMYSQLResult::~QMYSQLResult()
|
|||||||
QVariant QMYSQLResult::handle() const
|
QVariant QMYSQLResult::handle() const
|
||||||
{
|
{
|
||||||
Q_D(const QMYSQLResult);
|
Q_D(const QMYSQLResult);
|
||||||
#if MYSQL_VERSION_ID >= 40108
|
|
||||||
if(d->preparedQuery)
|
if(d->preparedQuery)
|
||||||
return d->meta ? QVariant::fromValue(d->meta) : QVariant::fromValue(d->stmt);
|
return d->meta ? QVariant::fromValue(d->meta) : QVariant::fromValue(d->stmt);
|
||||||
else
|
else
|
||||||
#endif
|
|
||||||
return QVariant::fromValue(d->result);
|
return QVariant::fromValue(d->result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -476,15 +454,12 @@ void QMYSQLResult::cleanup()
|
|||||||
|
|
||||||
// must iterate trough leftover result sets from multi-selects or stored procedures
|
// must iterate trough leftover result sets from multi-selects or stored procedures
|
||||||
// if this isn't done subsequent queries will fail with "Commands out of sync"
|
// if this isn't done subsequent queries will fail with "Commands out of sync"
|
||||||
#if MYSQL_VERSION_ID >= 40100
|
|
||||||
while (driver() && d->drv_d_func()->mysql && mysql_next_result(d->drv_d_func()->mysql) == 0) {
|
while (driver() && d->drv_d_func()->mysql && mysql_next_result(d->drv_d_func()->mysql) == 0) {
|
||||||
MYSQL_RES *res = mysql_store_result(d->drv_d_func()->mysql);
|
MYSQL_RES *res = mysql_store_result(d->drv_d_func()->mysql);
|
||||||
if (res)
|
if (res)
|
||||||
mysql_free_result(res);
|
mysql_free_result(res);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
#if MYSQL_VERSION_ID >= 40108
|
|
||||||
if (d->stmt) {
|
if (d->stmt) {
|
||||||
if (mysql_stmt_close(d->stmt))
|
if (mysql_stmt_close(d->stmt))
|
||||||
qWarning("QMYSQLResult::cleanup: unable to free statement handle");
|
qWarning("QMYSQLResult::cleanup: unable to free statement handle");
|
||||||
@ -509,7 +484,6 @@ void QMYSQLResult::cleanup()
|
|||||||
delete[] d->inBinds;
|
delete[] d->inBinds;
|
||||||
d->inBinds = 0;
|
d->inBinds = 0;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
d->hasBlobs = false;
|
d->hasBlobs = false;
|
||||||
d->fields.clear();
|
d->fields.clear();
|
||||||
@ -536,7 +510,6 @@ bool QMYSQLResult::fetch(int i)
|
|||||||
if (at() == i)
|
if (at() == i)
|
||||||
return true;
|
return true;
|
||||||
if (d->preparedQuery) {
|
if (d->preparedQuery) {
|
||||||
#if MYSQL_VERSION_ID >= 40108
|
|
||||||
mysql_stmt_data_seek(d->stmt, i);
|
mysql_stmt_data_seek(d->stmt, i);
|
||||||
|
|
||||||
int nRC = mysql_stmt_fetch(d->stmt);
|
int nRC = mysql_stmt_fetch(d->stmt);
|
||||||
@ -550,9 +523,6 @@ bool QMYSQLResult::fetch(int i)
|
|||||||
"Unable to fetch data"), QSqlError::StatementError, d->stmt));
|
"Unable to fetch data"), QSqlError::StatementError, d->stmt));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
} else {
|
} else {
|
||||||
mysql_data_seek(d->result, i);
|
mysql_data_seek(d->result, i);
|
||||||
d->row = mysql_fetch_row(d->result);
|
d->row = mysql_fetch_row(d->result);
|
||||||
@ -570,7 +540,6 @@ bool QMYSQLResult::fetchNext()
|
|||||||
if (!driver())
|
if (!driver())
|
||||||
return false;
|
return false;
|
||||||
if (d->preparedQuery) {
|
if (d->preparedQuery) {
|
||||||
#if MYSQL_VERSION_ID >= 40108
|
|
||||||
int nRC = mysql_stmt_fetch(d->stmt);
|
int nRC = mysql_stmt_fetch(d->stmt);
|
||||||
if (nRC) {
|
if (nRC) {
|
||||||
#ifdef MYSQL_DATA_TRUNCATED
|
#ifdef MYSQL_DATA_TRUNCATED
|
||||||
@ -582,9 +551,6 @@ bool QMYSQLResult::fetchNext()
|
|||||||
"Unable to fetch data"), QSqlError::StatementError, d->stmt));
|
"Unable to fetch data"), QSqlError::StatementError, d->stmt));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
} else {
|
} else {
|
||||||
d->row = mysql_fetch_row(d->result);
|
d->row = mysql_fetch_row(d->result);
|
||||||
if (!d->row)
|
if (!d->row)
|
||||||
@ -607,11 +573,7 @@ bool QMYSQLResult::fetchLast()
|
|||||||
|
|
||||||
my_ulonglong numRows;
|
my_ulonglong numRows;
|
||||||
if (d->preparedQuery) {
|
if (d->preparedQuery) {
|
||||||
#if MYSQL_VERSION_ID >= 40108
|
|
||||||
numRows = mysql_stmt_num_rows(d->stmt);
|
numRows = mysql_stmt_num_rows(d->stmt);
|
||||||
#else
|
|
||||||
numRows = 0;
|
|
||||||
#endif
|
|
||||||
} else {
|
} else {
|
||||||
numRows = mysql_num_rows(d->result);
|
numRows = mysql_num_rows(d->result);
|
||||||
}
|
}
|
||||||
@ -788,11 +750,7 @@ int QMYSQLResult::size()
|
|||||||
Q_D(const QMYSQLResult);
|
Q_D(const QMYSQLResult);
|
||||||
if (driver() && isSelect())
|
if (driver() && isSelect())
|
||||||
if (d->preparedQuery)
|
if (d->preparedQuery)
|
||||||
#if MYSQL_VERSION_ID >= 40108
|
|
||||||
return mysql_stmt_num_rows(d->stmt);
|
return mysql_stmt_num_rows(d->stmt);
|
||||||
#else
|
|
||||||
return -1;
|
|
||||||
#endif
|
|
||||||
else
|
else
|
||||||
return int(mysql_num_rows(d->result));
|
return int(mysql_num_rows(d->result));
|
||||||
else
|
else
|
||||||
@ -821,11 +779,9 @@ QVariant QMYSQLResult::lastInsertId() const
|
|||||||
return QVariant();
|
return QVariant();
|
||||||
|
|
||||||
if (d->preparedQuery) {
|
if (d->preparedQuery) {
|
||||||
#if MYSQL_VERSION_ID >= 40108
|
|
||||||
quint64 id = mysql_stmt_insert_id(d->stmt);
|
quint64 id = mysql_stmt_insert_id(d->stmt);
|
||||||
if (id)
|
if (id)
|
||||||
return QVariant(id);
|
return QVariant(id);
|
||||||
#endif
|
|
||||||
} else {
|
} else {
|
||||||
quint64 id = mysql_insert_id(d->drv_d_func()->mysql);
|
quint64 id = mysql_insert_id(d->drv_d_func()->mysql);
|
||||||
if (id)
|
if (id)
|
||||||
@ -842,11 +798,7 @@ QSqlRecord QMYSQLResult::record() const
|
|||||||
if (!isActive() || !isSelect() || !driver())
|
if (!isActive() || !isSelect() || !driver())
|
||||||
return info;
|
return info;
|
||||||
|
|
||||||
#if MYSQL_VERSION_ID >= 40108
|
|
||||||
res = d->preparedQuery ? d->meta : d->result;
|
res = d->preparedQuery ? d->meta : d->result;
|
||||||
#else
|
|
||||||
res = d->result;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!mysql_errno(d->drv_d_func()->mysql)) {
|
if (!mysql_errno(d->drv_d_func()->mysql)) {
|
||||||
mysql_field_seek(res, 0);
|
mysql_field_seek(res, 0);
|
||||||
@ -865,7 +817,7 @@ bool QMYSQLResult::nextResult()
|
|||||||
Q_D(QMYSQLResult);
|
Q_D(QMYSQLResult);
|
||||||
if (!driver())
|
if (!driver())
|
||||||
return false;
|
return false;
|
||||||
#if MYSQL_VERSION_ID >= 40100
|
|
||||||
setAt(-1);
|
setAt(-1);
|
||||||
setActive(false);
|
setActive(false);
|
||||||
|
|
||||||
@ -908,9 +860,6 @@ bool QMYSQLResult::nextResult()
|
|||||||
|
|
||||||
setActive(true);
|
setActive(true);
|
||||||
return true;
|
return true;
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QMYSQLResult::virtual_hook(int id, void *data)
|
void QMYSQLResult::virtual_hook(int id, void *data)
|
||||||
@ -918,9 +867,6 @@ void QMYSQLResult::virtual_hook(int id, void *data)
|
|||||||
QSqlResult::virtual_hook(id, data);
|
QSqlResult::virtual_hook(id, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if MYSQL_VERSION_ID >= 40108
|
|
||||||
|
|
||||||
static MYSQL_TIME *toMySqlDate(QDate date, QTime time, QVariant::Type type)
|
static MYSQL_TIME *toMySqlDate(QDate date, QTime time, QVariant::Type type)
|
||||||
{
|
{
|
||||||
Q_ASSERT(type == QVariant::Time || type == QVariant::Date
|
Q_ASSERT(type == QVariant::Time || type == QVariant::Date
|
||||||
@ -949,7 +895,7 @@ bool QMYSQLResult::prepare(const QString& query)
|
|||||||
Q_D(QMYSQLResult);
|
Q_D(QMYSQLResult);
|
||||||
if (!driver())
|
if (!driver())
|
||||||
return false;
|
return false;
|
||||||
#if MYSQL_VERSION_ID >= 40108
|
|
||||||
cleanup();
|
cleanup();
|
||||||
if (!d->drv_d_func()->preparedQuerysEnabled)
|
if (!d->drv_d_func()->preparedQuerysEnabled)
|
||||||
return QSqlResult::prepare(query);
|
return QSqlResult::prepare(query);
|
||||||
@ -983,9 +929,6 @@ bool QMYSQLResult::prepare(const QString& query)
|
|||||||
setSelect(d->bindInValues());
|
setSelect(d->bindInValues());
|
||||||
d->preparedQuery = true;
|
d->preparedQuery = true;
|
||||||
return true;
|
return true;
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QMYSQLResult::exec()
|
bool QMYSQLResult::exec()
|
||||||
@ -1155,7 +1098,7 @@ bool QMYSQLResult::exec()
|
|||||||
setActive(true);
|
setActive(true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
/////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static int qMySqlConnectionCount = 0;
|
static int qMySqlConnectionCount = 0;
|
||||||
@ -1164,18 +1107,16 @@ static bool qMySqlInitHandledByUser = false;
|
|||||||
static void qLibraryInit()
|
static void qLibraryInit()
|
||||||
{
|
{
|
||||||
#ifndef Q_NO_MYSQL_EMBEDDED
|
#ifndef Q_NO_MYSQL_EMBEDDED
|
||||||
# if MYSQL_VERSION_ID >= 40000
|
|
||||||
if (qMySqlInitHandledByUser || qMySqlConnectionCount > 1)
|
if (qMySqlInitHandledByUser || qMySqlConnectionCount > 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
# if (MYSQL_VERSION_ID >= 40110 && MYSQL_VERSION_ID < 50000) || MYSQL_VERSION_ID >= 50003
|
# if MYSQL_VERSION_ID >= 50003
|
||||||
if (mysql_library_init(0, 0, 0)) {
|
if (mysql_library_init(0, 0, 0)) {
|
||||||
# else
|
# else
|
||||||
if (mysql_server_init(0, 0, 0)) {
|
if (mysql_server_init(0, 0, 0)) {
|
||||||
# endif
|
# endif
|
||||||
qWarning("QMYSQLDriver::qServerInit: unable to start server.");
|
qWarning("QMYSQLDriver::qServerInit: unable to start server.");
|
||||||
}
|
}
|
||||||
# endif // MYSQL_VERSION_ID
|
|
||||||
#endif // Q_NO_MYSQL_EMBEDDED
|
#endif // Q_NO_MYSQL_EMBEDDED
|
||||||
|
|
||||||
#if defined(MARIADB_BASE_VERSION) || defined(MARIADB_VERSION_ID)
|
#if defined(MARIADB_BASE_VERSION) || defined(MARIADB_VERSION_ID)
|
||||||
@ -1187,15 +1128,13 @@ static void qLibraryEnd()
|
|||||||
{
|
{
|
||||||
#if !defined(MARIADB_BASE_VERSION) && !defined(MARIADB_VERSION_ID)
|
#if !defined(MARIADB_BASE_VERSION) && !defined(MARIADB_VERSION_ID)
|
||||||
# if !defined(Q_NO_MYSQL_EMBEDDED)
|
# if !defined(Q_NO_MYSQL_EMBEDDED)
|
||||||
# if MYSQL_VERSION_ID > 40000
|
# if MYSQL_VERSION_ID >= 50003
|
||||||
# if (MYSQL_VERSION_ID >= 40110 && MYSQL_VERSION_ID < 50000) || MYSQL_VERSION_ID >= 50003
|
|
||||||
mysql_library_end();
|
mysql_library_end();
|
||||||
# else
|
# else
|
||||||
mysql_server_end();
|
mysql_server_end();
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QMYSQLDriver::QMYSQLDriver(QObject * parent)
|
QMYSQLDriver::QMYSQLDriver(QObject * parent)
|
||||||
@ -1271,17 +1210,9 @@ bool QMYSQLDriver::hasFeature(DriverFeature f) const
|
|||||||
return true;
|
return true;
|
||||||
case PreparedQueries:
|
case PreparedQueries:
|
||||||
case PositionalPlaceholders:
|
case PositionalPlaceholders:
|
||||||
#if MYSQL_VERSION_ID >= 40108
|
|
||||||
return d->preparedQuerysEnabled;
|
return d->preparedQuerysEnabled;
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
case MultipleResultSets:
|
case MultipleResultSets:
|
||||||
#if MYSQL_VERSION_ID >= 40100
|
|
||||||
return true;
|
return true;
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1322,7 +1253,7 @@ bool QMYSQLDriver::open(const QString& db,
|
|||||||
we have to enable CLIEN_MULTI_STATEMENTS here, otherwise _any_
|
we have to enable CLIEN_MULTI_STATEMENTS here, otherwise _any_
|
||||||
stored procedure call will fail.
|
stored procedure call will fail.
|
||||||
*/
|
*/
|
||||||
unsigned int optionFlags = Q_CLIENT_MULTI_STATEMENTS;
|
unsigned int optionFlags = CLIENT_MULTI_STATEMENTS;
|
||||||
const QStringList opts(connOpts.split(QLatin1Char(';'), QString::SkipEmptyParts));
|
const QStringList opts(connOpts.split(QLatin1Char(';'), QString::SkipEmptyParts));
|
||||||
QString unixSocket;
|
QString unixSocket;
|
||||||
QString sslCert;
|
QString sslCert;
|
||||||
@ -1330,12 +1261,10 @@ bool QMYSQLDriver::open(const QString& db,
|
|||||||
QString sslKey;
|
QString sslKey;
|
||||||
QString sslCAPath;
|
QString sslCAPath;
|
||||||
QString sslCipher;
|
QString sslCipher;
|
||||||
#if MYSQL_VERSION_ID >= 50000
|
|
||||||
my_bool reconnect=false;
|
my_bool reconnect=false;
|
||||||
uint connectTimeout = 0;
|
uint connectTimeout = 0;
|
||||||
uint readTimeout = 0;
|
uint readTimeout = 0;
|
||||||
uint writeTimeout = 0;
|
uint writeTimeout = 0;
|
||||||
#endif
|
|
||||||
|
|
||||||
// extract the real options from the string
|
// extract the real options from the string
|
||||||
for (int i = 0; i < opts.count(); ++i) {
|
for (int i = 0; i < opts.count(); ++i) {
|
||||||
@ -1346,18 +1275,15 @@ bool QMYSQLDriver::open(const QString& db,
|
|||||||
QString opt = tmp.left(idx).simplified();
|
QString opt = tmp.left(idx).simplified();
|
||||||
if (opt == QLatin1String("UNIX_SOCKET"))
|
if (opt == QLatin1String("UNIX_SOCKET"))
|
||||||
unixSocket = val;
|
unixSocket = val;
|
||||||
#if MYSQL_VERSION_ID >= 50000
|
|
||||||
else if (opt == QLatin1String("MYSQL_OPT_RECONNECT")) {
|
else if (opt == QLatin1String("MYSQL_OPT_RECONNECT")) {
|
||||||
if (val == QLatin1String("TRUE") || val == QLatin1String("1") || val.isEmpty())
|
if (val == QLatin1String("TRUE") || val == QLatin1String("1") || val.isEmpty())
|
||||||
reconnect = true;
|
reconnect = true;
|
||||||
} else if (opt == QLatin1String("MYSQL_OPT_CONNECT_TIMEOUT")) {
|
} else if (opt == QLatin1String("MYSQL_OPT_CONNECT_TIMEOUT"))
|
||||||
connectTimeout = val.toInt();
|
connectTimeout = val.toInt();
|
||||||
} else if (opt == QLatin1String("MYSQL_OPT_READ_TIMEOUT")) {
|
else if (opt == QLatin1String("MYSQL_OPT_READ_TIMEOUT"))
|
||||||
readTimeout = val.toInt();
|
readTimeout = val.toInt();
|
||||||
} else if (opt == QLatin1String("MYSQL_OPT_WRITE_TIMEOUT")) {
|
else if (opt == QLatin1String("MYSQL_OPT_WRITE_TIMEOUT"))
|
||||||
writeTimeout = val.toInt();
|
writeTimeout = val.toInt();
|
||||||
}
|
|
||||||
#endif
|
|
||||||
else if (opt == QLatin1String("SSL_KEY"))
|
else if (opt == QLatin1String("SSL_KEY"))
|
||||||
sslKey = val;
|
sslKey = val;
|
||||||
else if (opt == QLatin1String("SSL_CERT"))
|
else if (opt == QLatin1String("SSL_CERT"))
|
||||||
@ -1442,7 +1368,7 @@ bool QMYSQLDriver::open(const QString& db,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if (MYSQL_VERSION_ID >= 40113 && MYSQL_VERSION_ID < 50000) || MYSQL_VERSION_ID >= 50007
|
#if MYSQL_VERSION_ID >= 50007
|
||||||
if (mysql_get_client_version() >= 50503 && mysql_get_server_version(d->mysql) >= 50503) {
|
if (mysql_get_client_version() >= 50503 && mysql_get_server_version(d->mysql) >= 50503) {
|
||||||
// force the communication to be utf8mb4 (only utf8mb4 supports 4-byte characters)
|
// force the communication to be utf8mb4 (only utf8mb4 supports 4-byte characters)
|
||||||
mysql_set_character_set(d->mysql, "utf8mb4");
|
mysql_set_character_set(d->mysql, "utf8mb4");
|
||||||
@ -1457,20 +1383,15 @@ bool QMYSQLDriver::open(const QString& db,
|
|||||||
d->tc = codec(d->mysql);
|
d->tc = codec(d->mysql);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif // MYSQL_VERSION_ID >= 50007
|
||||||
|
|
||||||
#if MYSQL_VERSION_ID >= 40108
|
|
||||||
d->preparedQuerysEnabled = mysql_get_client_version() >= 40108
|
d->preparedQuerysEnabled = mysql_get_client_version() >= 40108
|
||||||
&& mysql_get_server_version(d->mysql) >= 40100;
|
&& mysql_get_server_version(d->mysql) >= 40100;
|
||||||
#else
|
|
||||||
d->preparedQuerysEnabled = false;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if QT_CONFIG(thread)
|
#if QT_CONFIG(thread)
|
||||||
mysql_thread_init();
|
mysql_thread_init();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
setOpen(true);
|
setOpen(true);
|
||||||
setOpenError(false);
|
setOpenError(false);
|
||||||
return true;
|
return true;
|
||||||
@ -1499,29 +1420,6 @@ QStringList QMYSQLDriver::tables(QSql::TableType type) const
|
|||||||
{
|
{
|
||||||
Q_D(const QMYSQLDriver);
|
Q_D(const QMYSQLDriver);
|
||||||
QStringList tl;
|
QStringList tl;
|
||||||
#if MYSQL_VERSION_ID >= 40100
|
|
||||||
if( mysql_get_server_version(d->mysql) < 50000)
|
|
||||||
{
|
|
||||||
#endif
|
|
||||||
if (!isOpen())
|
|
||||||
return tl;
|
|
||||||
if (!(type & QSql::Tables))
|
|
||||||
return tl;
|
|
||||||
|
|
||||||
MYSQL_RES* tableRes = mysql_list_tables(d->mysql, NULL);
|
|
||||||
MYSQL_ROW row;
|
|
||||||
int i = 0;
|
|
||||||
while (tableRes) {
|
|
||||||
mysql_data_seek(tableRes, i);
|
|
||||||
row = mysql_fetch_row(tableRes);
|
|
||||||
if (!row)
|
|
||||||
break;
|
|
||||||
tl.append(toUnicode(d->tc, row[0]));
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
mysql_free_result(tableRes);
|
|
||||||
#if MYSQL_VERSION_ID >= 40100
|
|
||||||
} else {
|
|
||||||
QSqlQuery q(createResult());
|
QSqlQuery q(createResult());
|
||||||
if (type & QSql::Tables) {
|
if (type & QSql::Tables) {
|
||||||
QString sql = QLatin1String("select table_name from information_schema.tables where table_schema = '") + QLatin1String(d->mysql->db) + QLatin1String("' and table_type = 'BASE TABLE'");
|
QString sql = QLatin1String("select table_name from information_schema.tables where table_schema = '") + QLatin1String(d->mysql->db) + QLatin1String("' and table_type = 'BASE TABLE'");
|
||||||
@ -1537,8 +1435,6 @@ QStringList QMYSQLDriver::tables(QSql::TableType type) const
|
|||||||
while (q.next())
|
while (q.next())
|
||||||
tl.append(q.value(0).toString());
|
tl.append(q.value(0).toString());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return tl;
|
return tl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -520,10 +520,6 @@ void tst_QSqlDatabase::tables()
|
|||||||
bool tempTables = false;
|
bool tempTables = false;
|
||||||
|
|
||||||
QSqlQuery q(db);
|
QSqlQuery q(db);
|
||||||
if ( db.driverName().startsWith( "QMYSQL" ) && tst_Databases::getMySqlVersion( db ).section( QChar('.'), 0, 0 ).toInt()<5 )
|
|
||||||
QSKIP( "Test requires MySQL >= 5.0");
|
|
||||||
|
|
||||||
|
|
||||||
if (!q.exec("CREATE VIEW " + qtest_view + " as select * from " + qtest)) {
|
if (!q.exec("CREATE VIEW " + qtest_view + " as select * from " + qtest)) {
|
||||||
qDebug("DBMS '%s' cannot handle VIEWs: %s",
|
qDebug("DBMS '%s' cannot handle VIEWs: %s",
|
||||||
qPrintable(tst_Databases::dbToString(db)),
|
qPrintable(tst_Databases::dbToString(db)),
|
||||||
@ -1891,11 +1887,6 @@ void tst_QSqlDatabase::mysql_multiselect()
|
|||||||
const QString qtest(qTableName("qtest", __FILE__, db));
|
const QString qtest(qTableName("qtest", __FILE__, db));
|
||||||
|
|
||||||
QSqlQuery q(db);
|
QSqlQuery q(db);
|
||||||
QString version=tst_Databases::getMySqlVersion( db );
|
|
||||||
double ver=version.section(QChar::fromLatin1('.'),0,1).toDouble();
|
|
||||||
if (ver < 4.1)
|
|
||||||
QSKIP("Test requires MySQL >= 4.1");
|
|
||||||
|
|
||||||
QVERIFY_SQL(q, exec("SELECT * FROM " + qtest + "; SELECT * FROM " + qtest));
|
QVERIFY_SQL(q, exec("SELECT * FROM " + qtest + "; SELECT * FROM " + qtest));
|
||||||
QVERIFY_SQL(q, next());
|
QVERIFY_SQL(q, next());
|
||||||
QVERIFY_SQL(q, exec("SELECT * FROM " + qtest + "; SELECT * FROM " + qtest));
|
QVERIFY_SQL(q, exec("SELECT * FROM " + qtest + "; SELECT * FROM " + qtest));
|
||||||
@ -2280,9 +2271,6 @@ void tst_QSqlDatabase::mysql_savepointtest()
|
|||||||
QFETCH(QString, dbName);
|
QFETCH(QString, dbName);
|
||||||
QSqlDatabase db = QSqlDatabase::database(dbName);
|
QSqlDatabase db = QSqlDatabase::database(dbName);
|
||||||
CHECK_DATABASE(db);
|
CHECK_DATABASE(db);
|
||||||
if (tst_Databases::getMySqlVersion(db).section(QChar('.'), 0, 1).toDouble() < 4.1)
|
|
||||||
QSKIP( "Test requires MySQL >= 4.1");
|
|
||||||
|
|
||||||
QSqlQuery q(db);
|
QSqlQuery q(db);
|
||||||
QVERIFY_SQL(q, exec("begin"));
|
QVERIFY_SQL(q, exec("begin"));
|
||||||
QVERIFY_SQL(q, exec("insert into " + qTableName("qtest", __FILE__, db) + " VALUES (54, 'foo', 'foo', 54.54)"));
|
QVERIFY_SQL(q, exec("insert into " + qTableName("qtest", __FILE__, db) + " VALUES (54, 'foo', 'foo', 54.54)"));
|
||||||
|
@ -480,10 +480,6 @@ void tst_QSqlQuery::char1SelectUnicode()
|
|||||||
if ( db.driver()->hasFeature( QSqlDriver::Unicode ) ) {
|
if ( db.driver()->hasFeature( QSqlDriver::Unicode ) ) {
|
||||||
QString uniStr( QChar(0x0915) ); // DEVANAGARI LETTER KA
|
QString uniStr( QChar(0x0915) ); // DEVANAGARI LETTER KA
|
||||||
QSqlQuery q( db );
|
QSqlQuery q( db );
|
||||||
|
|
||||||
if ( db.driverName().startsWith( "QMYSQL" ) && tst_Databases::getMySqlVersion( db ).section( QChar('.'), 0, 0 ).toInt()<5 )
|
|
||||||
QSKIP( "Test requires MySQL >= 5.0");
|
|
||||||
|
|
||||||
QString createQuery;
|
QString createQuery;
|
||||||
const QString char1SelectUnicode(qTableName("char1SU", __FILE__, db));
|
const QString char1SelectUnicode(qTableName("char1SU", __FILE__, db));
|
||||||
|
|
||||||
@ -563,9 +559,6 @@ void tst_QSqlQuery::mysql_outValues()
|
|||||||
QFETCH( QString, dbName );
|
QFETCH( QString, dbName );
|
||||||
QSqlDatabase db = QSqlDatabase::database( dbName );
|
QSqlDatabase db = QSqlDatabase::database( dbName );
|
||||||
CHECK_DATABASE( db );
|
CHECK_DATABASE( db );
|
||||||
if (tst_Databases::getMySqlVersion(db).section(QChar('.'), 0, 0 ).toInt() < 5)
|
|
||||||
QSKIP( "Test requires MySQL >= 5.0");
|
|
||||||
|
|
||||||
const QString hello(qTableName("hello", __FILE__, db)), qtestproc(qTableName("qtestproc", __FILE__, db));
|
const QString hello(qTableName("hello", __FILE__, db)), qtestproc(qTableName("qtestproc", __FILE__, db));
|
||||||
|
|
||||||
QSqlQuery q( db );
|
QSqlQuery q( db );
|
||||||
@ -2093,10 +2086,6 @@ void tst_QSqlQuery::prepare_bind_exec()
|
|||||||
bool useUnicode = db.driver()->hasFeature( QSqlDriver::Unicode );
|
bool useUnicode = db.driver()->hasFeature( QSqlDriver::Unicode );
|
||||||
|
|
||||||
QSqlQuery q( db );
|
QSqlQuery q( db );
|
||||||
|
|
||||||
if ( db.driverName().startsWith( "QMYSQL" ) && tst_Databases::getMySqlVersion( db ).section( QChar('.'), 0, 0 ).toInt()<5 )
|
|
||||||
useUnicode = false;
|
|
||||||
|
|
||||||
QString createQuery;
|
QString createQuery;
|
||||||
QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
|
QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
|
||||||
if (dbType == QSqlDriver::PostgreSQL)
|
if (dbType == QSqlDriver::PostgreSQL)
|
||||||
@ -3068,10 +3057,6 @@ void tst_QSqlQuery::nextResult()
|
|||||||
QSKIP("DBMS does not support multiple result sets");
|
QSKIP("DBMS does not support multiple result sets");
|
||||||
|
|
||||||
QSqlQuery q( db );
|
QSqlQuery q( db );
|
||||||
|
|
||||||
if ( db.driverName().startsWith( "QMYSQL" ) && tst_Databases::getMySqlVersion( db ).section( QChar('.'), 0, 0 ).toInt()<5 )
|
|
||||||
QSKIP( "Test requires MySQL >= 5.0");
|
|
||||||
|
|
||||||
const QString tableName(qTableName("more_results", __FILE__, db));
|
const QString tableName(qTableName("more_results", __FILE__, db));
|
||||||
|
|
||||||
QVERIFY_SQL( q, exec( "CREATE TABLE " + tableName + " (id integer, text varchar(20), num numeric(6, 3), empty varchar(10));" ) );
|
QVERIFY_SQL( q, exec( "CREATE TABLE " + tableName + " (id integer, text varchar(20), num numeric(6, 3), empty varchar(10));" ) );
|
||||||
@ -3836,9 +3821,6 @@ void tst_QSqlQuery::QTBUG_6852()
|
|||||||
QFETCH( QString, dbName );
|
QFETCH( QString, dbName );
|
||||||
QSqlDatabase db = QSqlDatabase::database( dbName );
|
QSqlDatabase db = QSqlDatabase::database( dbName );
|
||||||
CHECK_DATABASE( db );
|
CHECK_DATABASE( db );
|
||||||
if ( tst_Databases::getMySqlVersion( db ).section( QChar('.'), 0, 0 ).toInt()<5 )
|
|
||||||
QSKIP( "Test requires MySQL >= 5.0");
|
|
||||||
|
|
||||||
QSqlQuery q(db);
|
QSqlQuery q(db);
|
||||||
const QString tableName(qTableName("bug6852", __FILE__, db)), procName(qTableName("bug6852_proc", __FILE__, db));
|
const QString tableName(qTableName("bug6852", __FILE__, db)), procName(qTableName("bug6852_proc", __FILE__, db));
|
||||||
|
|
||||||
@ -3870,9 +3852,6 @@ void tst_QSqlQuery::QTBUG_5765()
|
|||||||
QFETCH( QString, dbName );
|
QFETCH( QString, dbName );
|
||||||
QSqlDatabase db = QSqlDatabase::database( dbName );
|
QSqlDatabase db = QSqlDatabase::database( dbName );
|
||||||
CHECK_DATABASE( db );
|
CHECK_DATABASE( db );
|
||||||
if ( tst_Databases::getMySqlVersion( db ).section( QChar('.'), 0, 1 ).toFloat()<4.1 )
|
|
||||||
QSKIP( "Test requires MySQL >= 4.1");
|
|
||||||
|
|
||||||
QSqlQuery q(db);
|
QSqlQuery q(db);
|
||||||
const QString tableName(qTableName("bug5765", __FILE__, db));
|
const QString tableName(qTableName("bug5765", __FILE__, db));
|
||||||
|
|
||||||
|
@ -238,9 +238,6 @@ void tst_QSqlQuery::benchmark()
|
|||||||
QFETCH( QString, dbName );
|
QFETCH( QString, dbName );
|
||||||
QSqlDatabase db = QSqlDatabase::database( dbName );
|
QSqlDatabase db = QSqlDatabase::database( dbName );
|
||||||
CHECK_DATABASE( db );
|
CHECK_DATABASE( db );
|
||||||
if ( tst_Databases::getMySqlVersion( db ).section( QChar('.'), 0, 0 ).toInt()<5 )
|
|
||||||
QSKIP( "Test requires MySQL >= 5.0");
|
|
||||||
|
|
||||||
QSqlQuery q(db);
|
QSqlQuery q(db);
|
||||||
const QString tableName(qTableName("benchmark", __FILE__, db));
|
const QString tableName(qTableName("benchmark", __FILE__, db));
|
||||||
|
|
||||||
@ -266,9 +263,6 @@ void tst_QSqlQuery::benchmarkSelectPrepared()
|
|||||||
QFETCH( QString, dbName );
|
QFETCH( QString, dbName );
|
||||||
QSqlDatabase db = QSqlDatabase::database(dbName);
|
QSqlDatabase db = QSqlDatabase::database(dbName);
|
||||||
CHECK_DATABASE(db);
|
CHECK_DATABASE(db);
|
||||||
if (tst_Databases::getMySqlVersion(db).section(QChar('.'), 0, 0).toInt() < 5)
|
|
||||||
QSKIP("Test requires MySQL >= 5.0");
|
|
||||||
|
|
||||||
QSqlQuery q(db);
|
QSqlQuery q(db);
|
||||||
const QString tableName(qTableName("benchmark", __FILE__, db));
|
const QString tableName(qTableName("benchmark", __FILE__, db));
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user