Column *TablePrivate::addColumn(const QString &name, const QString &sqlType, const QVariant &defaultValue) { Q_Q(Table); if(q->columnNames().contains(name, Qt::CaseInsensitive)) { qWarning() << "TablePrivate::addColumn: Duplicate column name" << name; return columnsByName.value(name); } QSqlQuery query(database->sqlDatabase()); QString queryString = QLatin1String("ALTER TABLE ")+this->name+QLatin1String(" ADD ")+name+ QLatin1String(" ")+sqlType; if(!defaultValue.toString().isEmpty()) { queryString += QLatin1String(" DEFAULT ")+defaultValue.toString(); } query.exec(queryString); checkSqlError(query); query.finish(); QSqlRecord record = database->sqlDatabase().record(this->name); QSqlField columnField = record.field(record.indexOf(name)); q->beginInsertColumns(QModelIndex(),columns.count(), columns.count()); Column *column = new Column(columnField, q); columns.append(column); columnsByName.insert(name, column); foreach(Row *row, rows) { row->addColumn(name, defaultValue); }
Column *TablePrivate::addColumn(const QString &name, const QString &sqlType, const QVariant &defaultValue) { Q_Q(Table); if(q->columnNames().contains(name, Qt::CaseInsensitive)) { qWarning() << "TablePrivate::addColumn: Duplicate column name" << name; return columnsByName.value(name); } QSqlQuery query(database->sqlDatabase()); QString queryString = QLatin1String("ALTER TABLE ")+this->name+QLatin1String(" ADD ")+name+ QLatin1String(" ")+sqlType; if(!defaultValue.toString().isEmpty()) { queryString += QLatin1String(" DEFAULT ")+defaultValue.toString(); } query.exec(queryString); checkSqlError(query); query.finish(); q->clear(); q->setTable(this->name); if(!q->select()) { qDebug() << q->lastError(); return 0; } QSqlField columnField = q->record().field(name); Column *column = new Column(columnField, q); column->setIndex(columns.size()); columns.append(column); columnsByName.insert(name, column); return column; }
void TablePrivate::init() { Q_Q(Table); QSqlRecord columnNames = database->sqlDatabase().record(name); columns.reserve(columnNames.count()); for(int i = 0; i < columnNames.count(); ++i) { Column *column = new Column(columnNames.field(i), q); columns.append(column); columnsByName.insert(column->name(), column); } QSqlQuery query(database->sqlDatabase()); query.exec(QLatin1String("SELECT * FROM ")+name); rows.reserve(query.size()); rowsById.reserve(query.size()); int idIndex = query.record().indexOf(QLatin1String("id")); Q_ASSERT_X(idIndex != -1, "TablePrivate::init", "The table has no field 'id'"); int id = 0; while(query.next()) { id = query.value(idIndex).toInt(); Row *row = new Row(query, q_ptr); rows.append(row); rowsById.insert(id, row); } checkSqlError(query); query.finish(); }