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:
Christian Ehrlicher 2019-10-06 18:53:29 +02:00
parent 8aa3329a71
commit b43f5ed2da
4 changed files with 27 additions and 170 deletions

View File

@ -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;
} }

View File

@ -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)"));

View File

@ -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));

View File

@ -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));