From b9afbe2aea02f3ce18d88d1610582afd22ad5284 Mon Sep 17 00:00:00 2001 From: Martin Kleusberg Date: Fri, 31 May 2013 16:13:58 +0200 Subject: [PATCH] EditTableDialog: Allow some more changes to existing tables Allow setting the default value, the check values and under some circumstances the not null flag when editing existing tables. This required some changes to DBBrowserDB::renameColumn() which is now using some more features of sqlitetypes.cpp but could still be improved. --- src/EditTableDialog.cpp | 49 +++++++++++++++++++++++++++-------------- src/ImportCsvDialog.cpp | 6 ++--- src/sqlitedb.cpp | 20 ++++++++--------- src/sqlitedb.h | 4 ++-- 4 files changed, 47 insertions(+), 32 deletions(-) diff --git a/src/EditTableDialog.cpp b/src/EditTableDialog.cpp index 97bc01bc..0bc963ed 100644 --- a/src/EditTableDialog.cpp +++ b/src/EditTableDialog.cpp @@ -194,17 +194,17 @@ void EditTableDialog::updateTypes() { QString type = typeBox->currentText(); QString column = sender()->property("column").toString(); - if(m_bNewTable || pdb->renameColumn(curTable, column, column, type)) + + int index; + for(index=0;indexname() == column) - { - m_table.fields().at(i)->setType(type); - break; - } - } + if(m_table.fields().at(index)->name() == column) + break; } + + m_table.fields().at(index)->setType(type); + if(!m_bNewTable) + pdb->renameColumn(curTable, column, m_table.fields().at(index)); checkInput(); } } @@ -215,14 +215,15 @@ void EditTableDialog::itemChanged(QTreeWidgetItem *item, int column) if(index < m_table.fields().count()) { sqlb::FieldPtr field = m_table.fields().at(index); + bool callRenameColumn = false; + switch(column) { case kName: - if(m_bNewTable || pdb->renameColumn(curTable, field->name(), item->text(column), field->type())) - { - qobject_cast(ui->treeWidget->itemWidget(item, kType))->setProperty("column", item->text(column)); - field->setName(item->text(column)); - } + field->setName(item->text(column)); + qobject_cast(ui->treeWidget->itemWidget(item, kType))->setProperty("column", item->text(column)); + if(!m_bNewTable) + callRenameColumn = true; break; case kType: // see updateTypes() SLOT @@ -256,6 +257,8 @@ void EditTableDialog::itemChanged(QTreeWidgetItem *item, int column) case kNotNull: { field->setNotNull(item->checkState(column) == Qt::Checked); + if(!m_bNewTable) + callRenameColumn = true; } break; case kAutoIncrement: @@ -278,11 +281,25 @@ void EditTableDialog::itemChanged(QTreeWidgetItem *item, int column) } } } + + if(!m_bNewTable) + callRenameColumn = true; } break; - case kDefault: field->setDefaultValue(item->text(column)); break; - case kCheck: field->setCheck(item->text(column)); break; + case kDefault: + field->setDefaultValue(item->text(column)); + if(!m_bNewTable) + callRenameColumn = true; + break; + case kCheck: + field->setCheck(item->text(column)); + if(!m_bNewTable) + callRenameColumn = true; + break; } + + if(callRenameColumn) + pdb->renameColumn(curTable, field->name(), field); } checkInput(); diff --git a/src/ImportCsvDialog.cpp b/src/ImportCsvDialog.cpp index 7ec6b4f6..bbf94f90 100644 --- a/src/ImportCsvDialog.cpp +++ b/src/ImportCsvDialog.cpp @@ -47,7 +47,7 @@ void ImportCsvDialog::accept() return; // Generate field names. These are either taken from the first CSV row or are generated in the format of "fieldXY" depending on the user input - QList fieldList; + QStringList fieldList; if(ui->checkboxHeader->isChecked()) { int cfieldnum = 0; @@ -65,13 +65,13 @@ void ImportCsvDialog::accept() if(thisfield.isEmpty()) thisfield = QString("field%1").arg(cfieldnum+1); - fieldList.push_back(DBBrowserField(thisfield, "")); + fieldList.push_back(thisfield); cfieldnum++; curList.pop_front(); } } else { for(int i=0;i& structure) +bool DBBrowserDB::createTable(const QString& name, const QStringList& structure) { // Build SQL statement QString sql = QString("CREATE TABLE `%1` (").arg(name); for(int i=0;i new_table_structure; + QStringList new_table_structure; for(int i=0;itoString()); else - new_table_structure.push_back( - DBBrowserField(table.fldmap.value(i).getname(), table.fldmap.value(i).gettype()) - ); + new_table_structure.push_back(QString("`%1` %2").arg(table.fldmap.value(i).getname()).arg(table.fldmap.value(i).gettype())); } if(!createTable("sqlitebrowser_rename_column_new_table", new_table_structure)) { diff --git a/src/sqlitedb.h b/src/sqlitedb.h index 3b5c9a85..46869b40 100644 --- a/src/sqlitedb.h +++ b/src/sqlitedb.h @@ -90,10 +90,10 @@ public: bool deleteRecord(const QString& table, int rowid); bool updateRecord(const QString& table, const QString& column, int row, const QByteArray& value); - bool createTable(const QString& name, const QList& structure); + bool createTable(const QString& name, const QStringList& structure); bool renameTable(const QString& from_table, const QString& to_table); bool addColumn(const QString& table, const sqlb::FieldPtr& field); - bool renameColumn(const QString& tablename, const QString& from, const QString& to, const QString& type); + bool renameColumn(const QString& tablename, const QString& name, sqlb::FieldPtr to); bool dropColumn(const QString& tablename, const QString& column); QStringList getTableFields(const QString & tablename) const;