From 4fa0576853f7c95b8bcd9a23ca13ac3eec980f23 Mon Sep 17 00:00:00 2001 From: Martin Kleusberg Date: Fri, 6 Feb 2015 13:27:54 +0100 Subject: [PATCH] Support tables with empty table names Apparently SQLite supports empty table names for whatever reason. This commit patches SQLiteBrowser to support databases with a table with an empty name. I haven't removed the check for an empty table name in the Create/Edit table dialog though because you probably really shouldn't create such a table. See issue #194. --- src/EditTableDialog.cpp | 8 +++----- src/EditTableDialog.h | 2 +- src/MainWindow.cpp | 6 +++--- src/SQLiteSyntaxHighlighter.cpp | 11 +++++++---- src/sqlitetablemodel.cpp | 2 +- 5 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/EditTableDialog.cpp b/src/EditTableDialog.cpp index 60e09083..daaee36b 100644 --- a/src/EditTableDialog.cpp +++ b/src/EditTableDialog.cpp @@ -10,13 +10,13 @@ #include #include -EditTableDialog::EditTableDialog(DBBrowserDB* db, const QString& tableName, QWidget* parent) +EditTableDialog::EditTableDialog(DBBrowserDB* db, const QString& tableName, bool createTable, QWidget* parent) : QDialog(parent), ui(new Ui::EditTableDialog), pdb(db), curTable(tableName), m_table(tableName), - m_bNewTable(true), + m_bNewTable(createTable), m_sRestorePointName(QString("edittable_%1_save_%2").arg(curTable).arg(QDateTime::currentMSecsSinceEpoch())) { // Create UI @@ -27,10 +27,8 @@ EditTableDialog::EditTableDialog(DBBrowserDB* db, const QString& tableName, QWid m_sqliteSyntaxHighlighter = new SQLiteSyntaxHighlighter(ui->sqlTextEdit->document()); // Editing an existing table? - if(curTable != "") + if(m_bNewTable == false) { - m_bNewTable = false; // we are editing an existing table - // Existing table, so load and set the current layout QString sTablesql = pdb->getObjectByName(curTable).getsql(); m_table = sqlb::Table::parseSQL(sTablesql).first; diff --git a/src/EditTableDialog.h b/src/EditTableDialog.h index 561fe537..56a1c8c6 100644 --- a/src/EditTableDialog.h +++ b/src/EditTableDialog.h @@ -18,7 +18,7 @@ class EditTableDialog : public QDialog Q_OBJECT public: - explicit EditTableDialog(DBBrowserDB* pdb, const QString& tableName, QWidget* parent = 0); + explicit EditTableDialog(DBBrowserDB* pdb, const QString& tableName, bool createTable, QWidget* parent = 0); ~EditTableDialog(); protected: diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 89c8fd9c..963ea443 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -327,7 +327,7 @@ void MainWindow::populateStructure() void MainWindow::populateTable(const QString & tablename, bool bKeepFilter) { // Remove the model-view link if the table name is empty in order to remove any data from the view - if(tablename.isEmpty()) + if(ui->comboBrowseTable->model()->rowCount() == 0 && tablename.isEmpty()) { ui->dataTable->setModel(0); if(qobject_cast(ui->dataTable->horizontalHeader())) @@ -585,7 +585,7 @@ void MainWindow::createTable() return; } - EditTableDialog dialog(&db, "", this); + EditTableDialog dialog(&db, "", true, this); if(dialog.exec()) { populateStructure(); @@ -651,7 +651,7 @@ void MainWindow::editTable() } QString tableToEdit = ui->dbTreeWidget->model()->data(ui->dbTreeWidget->currentIndex().sibling(ui->dbTreeWidget->currentIndex().row(), 0)).toString(); - EditTableDialog dialog(&db, tableToEdit, this); + EditTableDialog dialog(&db, tableToEdit, false, this); if(dialog.exec()) { populateStructure(); diff --git a/src/SQLiteSyntaxHighlighter.cpp b/src/SQLiteSyntaxHighlighter.cpp index f2afc960..701f8044 100644 --- a/src/SQLiteSyntaxHighlighter.cpp +++ b/src/SQLiteSyntaxHighlighter.cpp @@ -100,10 +100,13 @@ void SQLiteSyntaxHighlighter::setTableNames(const QStringList &tablenames) { tableNameRules.clear(); foreach(const QString& tblname, tablenames) { - HighlightingRule rule; - rule.pattern = QRegExp(QString("\\b%1\\b").arg(tblname)); - rule.format = tableFormat; - tableNameRules.append(rule); + if(!tblname.isEmpty()) + { + HighlightingRule rule; + rule.pattern = QRegExp(QString("\\b%1\\b").arg(tblname)); + rule.format = tableFormat; + tableNameRules.append(rule); + } } } diff --git a/src/sqlitetablemodel.cpp b/src/sqlitetablemodel.cpp index 0d35ae02..03ee0cfc 100644 --- a/src/sqlitetablemodel.cpp +++ b/src/sqlitetablemodel.cpp @@ -39,7 +39,7 @@ void SqliteTableModel::setTable(const QString& table) if(m_db->getObjectByName(table).gettype() == "table") { sqlb::Table t = sqlb::Table::parseSQL(m_db->getObjectByName(table).getsql()).first; - if(t.name() != "") // parsing was OK + if(t.fields().size()) // parsing was OK { m_headers.push_back(t.rowidColumn()); m_headers.append(m_db->getObjectByName(table).table.fieldNames());