Keep field information in sqlb::Table object rather than DBBrowserObject

Keep all the table and field information in a sqlb::Table object (which
itself is stored in DBBrowserObject) rather than storing field
information in DBBrowserObject and sqlb::Table objects at the same time.
This commit is contained in:
Martin Kleusberg
2014-08-26 17:52:15 +02:00
parent d076134513
commit 7d4248ecb4
5 changed files with 20 additions and 22 deletions

View File

@@ -169,12 +169,12 @@ void DbStructureModel::reloadData(DBBrowserDB* db)
// If it is a table or view add the field Nodes
if((*it).gettype() == "table" || (*it).gettype() == "view")
{
for(int i=0; i < it->fldmap.size(); ++i)
for(int i=0; i < (*it).table.fields().size(); ++i)
{
QTreeWidgetItem *fldItem = new QTreeWidgetItem(tableItem);
fldItem->setText(0, (*it).fldmap.at(i)->name());
fldItem->setText(0, (*it).table.fields().at(i)->name());
fldItem->setText(1, "field");
fldItem->setText(2, (*it).fldmap.at(i)->type());
fldItem->setText(2, (*it).table.fields().at(i)->type());
fldItem->setIcon(0, QIcon(":/icons/field"));
}
}

View File

@@ -91,7 +91,7 @@ void ImportCsvDialog::accept()
{
if(i.value().gettype() == "table" && i.value().getname() == ui->editName->text())
{
if(i.value().fldmap.size() != numfields)
if(i.value().table.fields().size() != numfields)
{
QMessageBox::warning(this, QApplication::applicationName(),
tr("There is already a table of that name and an import into an existing table is only possible if the number of columns match."));

View File

@@ -268,13 +268,13 @@ void MainWindow::populateStructure()
if((*it).gettype() == "table" || (*it).gettype() == "view")
{
QStandardItemModel* tablefieldmodel = new QStandardItemModel();
tablefieldmodel->setRowCount((*it).fldmap.count());
tablefieldmodel->setRowCount((*it).table.fields().count());
tablefieldmodel->setColumnCount(1);
int fldrow = 0;
for(int i=0; i < (*it).fldmap.size(); ++i, ++fldrow)
for(int i=0; i < (*it).table.fields().size(); ++i, ++fldrow)
{
QString fieldname = (*it).fldmap.at(i)->name();
QString fieldname = (*it).table.fields().at(i)->name();
QStandardItem* fldItem = new QStandardItem(fieldname);
fldItem->setIcon(QIcon(":/icons/field"));
tablefieldmodel->setItem(fldrow, 0, fldItem);

View File

@@ -750,8 +750,8 @@ QStringList DBBrowserDB::getTableFields(const QString & tablename) const
{
if((*it).getname() == tablename)
{
for(int i=0;i<(*it).fldmap.size();i++)
res.append((*it).fldmap.at(i)->name());
for(int i=0;i<(*it).table.fields().size();i++)
res.append((*it).table.fields().at(i)->name());
}
}
return res;
@@ -834,8 +834,7 @@ void DBBrowserDB::updateSchema( )
// pragma SQLite offers.
if((*it).gettype() == "table")
{
sqlb::Table t((*it).getname());
(*it).fldmap = t.parseSQL((*it).getsql()).first.fields();
(*it).table = sqlb::Table::parseSQL((*it).getsql()).first;
} else if((*it).gettype() == "view") {
statement = QString("PRAGMA TABLE_INFO(`%1`);").arg((*it).getname());
logSQL(statement, kLogMsg_App);
@@ -849,7 +848,7 @@ void DBBrowserDB::updateSchema( )
QString val_type = QString::fromUtf8((const char *)sqlite3_column_text(vm, 2));
sqlb::FieldPtr f(new sqlb::Field(val_name, val_type));
(*it).addField(f);
(*it).table.addField(f);
}
}
sqlite3_finalize(vm);

View File

@@ -20,25 +20,24 @@ typedef QMultiMap<QString, class DBBrowserObject> objectMap;
class DBBrowserObject
{
public:
DBBrowserObject() : name( "" ) { }
DBBrowserObject() : table(""), name( "" ) { }
DBBrowserObject( const QString& wname,const QString& wsql, const QString& wtype, const QString& tbl_name )
: name( wname), sql( wsql ), type(wtype), table_name(tbl_name)
: table(wname), name( wname), sql( wsql ), type(wtype), table_name(tbl_name)
{ }
void addField(sqlb::FieldPtr field) { fldmap.push_back(field); }
QString getname() const { return name; }
QString getsql() const { return sql; }
QString gettype() const { return type; }
QString getTableName() const { return table_name; }
sqlb::FieldPtr getField(const QString& name) const
sqlb::FieldPtr getField(const QString& name)
{
for(int i=0;i<fldmap.size();i++)
if(fldmap.at(i)->name() == name)
return fldmap.at(i);
return sqlb::FieldPtr();
int id = table.findField(name);
if(id == -1)
return sqlb::FieldPtr();
else
return table.fields().at(id);
}
sqlb::FieldVector fldmap;
sqlb::Table table;
private:
QString name;
QString sql;