diff options
author | Bill King <bill.king@nokia.com> | 2009-09-02 00:18:38 (GMT) |
---|---|---|
committer | Bill King <bill.king@nokia.com> | 2009-09-02 00:21:48 (GMT) |
commit | 235aea42924013625fc4b7714fba16ef7b1aee60 (patch) | |
tree | 04825e9ede0b1cf8221558d6ea4d5b1cb6380d68 /src/sql/drivers/mysql/qsql_mysql.cpp | |
parent | add57539ec7cd24346e26b22a5298da50d81e91b (diff) | |
download | Qt-235aea42924013625fc4b7714fba16ef7b1aee60.zip Qt-235aea42924013625fc4b7714fba16ef7b1aee60.tar.gz Qt-235aea42924013625fc4b7714fba16ef7b1aee60.tar.bz2 |
Fixes mysql not knowing the difference between tables and views.
Task-number: 176267
Reviewed-by: Justin McPherson
Diffstat (limited to 'src/sql/drivers/mysql/qsql_mysql.cpp')
-rw-r--r-- | src/sql/drivers/mysql/qsql_mysql.cpp | 47 |
1 files changed, 31 insertions, 16 deletions
diff --git a/src/sql/drivers/mysql/qsql_mysql.cpp b/src/sql/drivers/mysql/qsql_mysql.cpp index fa79460..b29e742 100644 --- a/src/sql/drivers/mysql/qsql_mysql.cpp +++ b/src/sql/drivers/mysql/qsql_mysql.cpp @@ -1310,23 +1310,38 @@ QSqlResult *QMYSQLDriver::createResult() const QStringList QMYSQLDriver::tables(QSql::TableType type) const { QStringList tl; - 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++; + if( mysql_get_server_version(d->mysql) < 50000) + { + 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); + } else { + QSqlQuery q(createResult()); + if(type & QSql::Tables) { + q.exec(QLatin1String("select table_name from information_schema.tables where table_type = 'BASE TABLE'")); + while(q.next()) + tl.append(q.value(0).toString()); + } + if(type & QSql::Views) { + q.exec(QLatin1String("select table_name from information_schema.tables where table_type = 'VIEW'")); + while(q.next()) + tl.append(q.value(0).toString()); + } } - mysql_free_result(tableRes); return tl; } |