Ejemplo n.º 1
0
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);
    }
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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();
}