QDebug operator<<(QDebug dbg, const QSqlField &f) { dbg.nospace() << "QSqlField(" << f.name() << ", " << QMetaType::typeName(f.type()); if (f.length() >= 0) dbg.nospace() << ", length: " << f.length(); if (f.precision() >= 0) dbg.nospace() << ", precision: " << f.precision(); if (f.requiredStatus() != QSqlField::Unknown) dbg.nospace() << ", required: " << (f.requiredStatus() == QSqlField::Required ? "yes" : "no"); dbg.nospace() << ", generated: " << (f.isGenerated() ? "yes" : "no"); if (f.typeID() >= 0) dbg.nospace() << ", typeID: " << f.typeID(); if (!f.defaultValue().isNull()) dbg.nospace() << ", auto-value: \"" << f.defaultValue() << '\"'; dbg.nospace() << ')'; return dbg.space(); }
QDebug operator<<(QDebug dbg, const QSqlField &f) { #ifndef Q_BROKEN_DEBUG_STREAM dbg.nospace() << "QSqlField(" << f.name() << ", " << QVariant::typeToName(f.type()); if (f.length() >= 0) dbg.nospace() << ", length: " << f.length(); if (f.precision() >= 0) dbg.nospace() << ", precision: " << f.precision(); if (f.requiredStatus() != QSqlField::Unknown) dbg.nospace() << ", required: " << (f.requiredStatus() == QSqlField::Required ? "yes" : "no"); dbg.nospace() << ", generated: " << (f.isGenerated() ? "yes" : "no"); if (f.typeID() >= 0) dbg.nospace() << ", typeID: " << f.typeID(); if (!f.defaultValue().isNull()) dbg.nospace() << ", auto-value: \"" << f.defaultValue() << '\"'; dbg.nospace() << ')'; return dbg.space(); #else qWarning("This compiler doesn't support streaming QSqlField to QDebug"); return dbg; Q_UNUSED(f); #endif }
void Browser::showMetaData(const QString &t) { QSqlRecord rec = connectionWidget->currentDatabase().record(t); QStandardItemModel *model = new QStandardItemModel(table); model->insertRows(0, rec.count()); model->insertColumns(0, 7); model->setHeaderData(0, Qt::Horizontal, "Fieldname"); model->setHeaderData(1, Qt::Horizontal, "Type"); model->setHeaderData(2, Qt::Horizontal, "Length"); model->setHeaderData(3, Qt::Horizontal, "Precision"); model->setHeaderData(4, Qt::Horizontal, "Required"); model->setHeaderData(5, Qt::Horizontal, "AutoValue"); model->setHeaderData(6, Qt::Horizontal, "DefaultValue"); for (int i = 0; i < rec.count(); ++i) { QSqlField fld = rec.field(i); model->setData(model->index(i, 0), fld.name()); model->setData(model->index(i, 1), fld.typeID() == -1 ? QString(QVariant::typeToName(fld.type())) : QString("%1 (%2)").arg(QVariant::typeToName(fld.type())).arg(fld.typeID())); model->setData(model->index(i, 2), fld.length()); model->setData(model->index(i, 3), fld.precision()); model->setData(model->index(i, 4), fld.requiredStatus() == -1 ? QVariant("?") : QVariant(bool(fld.requiredStatus()))); model->setData(model->index(i, 5), fld.isAutoValue()); model->setData(model->index(i, 6), fld.defaultValue()); } table->setModel(model); table->setEditTriggers(QAbstractItemView::NoEditTriggers); updateActions(); }
toQColumnDescriptionList mysqlQuery::describe(QSqlRecord record) { ColumnDescriptions.clear(); for (unsigned int i = 0; i < record.count(); i++) { toCache::ColumnDescription desc; desc.AlignRight = false; desc.Name = record.fieldName(i); int size = 1; QSqlField info = record.field(desc.Name); switch (info.typeID()) { case FIELD_TYPE_DECIMAL: desc.Datatype = QString::fromLatin1("DECIMAL"); break; case FIELD_TYPE_TINY: desc.Datatype = QString::fromLatin1("TINY"); break; case FIELD_TYPE_SHORT: desc.Datatype = QString::fromLatin1("SHORT"); break; case FIELD_TYPE_LONG: desc.Datatype = QString::fromLatin1("LONG"); break; case FIELD_TYPE_FLOAT: desc.Datatype = QString::fromLatin1("FLOAT"); break; case FIELD_TYPE_DOUBLE: desc.Datatype = QString::fromLatin1("DOUBLE"); break; case FIELD_TYPE_NULL: desc.Datatype = QString::fromLatin1("NULL"); break; case FIELD_TYPE_TIMESTAMP: desc.Datatype = QString::fromLatin1("TIMESTAMP"); break; case FIELD_TYPE_LONGLONG: desc.Datatype = QString::fromLatin1("LONGLONG"); break; case FIELD_TYPE_INT24: desc.Datatype = QString::fromLatin1("INT23"); break; case FIELD_TYPE_DATE: desc.Datatype = QString::fromLatin1("DATE"); break; case FIELD_TYPE_TIME: desc.Datatype = QString::fromLatin1("TIME"); break; case FIELD_TYPE_DATETIME: desc.Datatype = QString::fromLatin1("DATETIME"); break; case FIELD_TYPE_YEAR: desc.Datatype = QString::fromLatin1("YEAR"); break; case FIELD_TYPE_NEWDATE: desc.Datatype = QString::fromLatin1("NEWDATE"); break; case FIELD_TYPE_ENUM: desc.Datatype = QString::fromLatin1("ENUM"); break; case FIELD_TYPE_SET: desc.Datatype = QString::fromLatin1("SET"); break; case FIELD_TYPE_TINY_BLOB: desc.Datatype = QString::fromLatin1("TINY_BLOB"); break; case FIELD_TYPE_MEDIUM_BLOB: desc.Datatype = QString::fromLatin1("MEDIUM_BLOB"); break; case FIELD_TYPE_LONG_BLOB: desc.Datatype = QString::fromLatin1("LONG_BLOB"); break; case FIELD_TYPE_BLOB: desc.Datatype = QString::fromLatin1("BLOB"); break; case FIELD_TYPE_VAR_STRING: desc.Datatype = QString::fromLatin1("VAR_STRING"); break; case FIELD_TYPE_STRING: desc.Datatype = QString::fromLatin1("STRING"); break; default: desc.Datatype = QString::fromLatin1("UNKNOWN"); break; } if (info.length() > size) { desc.Datatype += QString::fromLatin1(" ("); if (info.length() % size == 0) desc.Datatype += QString::number(info.length() / size); else desc.Datatype += QString::number(info.length()); if (info.precision() > 0) { desc.Datatype += QString::fromLatin1(","); desc.Datatype += QString::number(info.precision()); } desc.Datatype += QString::fromLatin1(")"); } desc.Null = !info.requiredStatus(); ColumnDescriptions.append(desc); } return ColumnDescriptions; }
// loadFields() gets the type from the field record void QgsDb2Provider::loadFields() { mAttributeFields.clear(); //mDefaultValues.clear(); QString table = QString( "%1.%2" ).arg( mSchemaName, mTableName ); // Use the Qt functionality to get the fields and their definitions. QSqlRecord r = mDatabase.record( table ); int fieldCount = r.count(); for ( int i = 0; i < fieldCount; i++ ) { QSqlField f = r.field( i ); int typeID = f.typeID(); // seems to be DB2 numeric type id (standard?) QString sqlTypeName = db2TypeName( typeID ); QVariant::Type sqlType = f.type(); QgsDebugMsg( QString( "name: %1; length: %2; sqlTypeID: %3; sqlTypeName: %4" ) .arg( f.name() ).arg( f.length() ).arg( QString::number( typeID ), sqlTypeName ) ); if ( f.name() == mGeometryColName ) continue; // Got this with uri, just skip if ( sqlType == QVariant::String ) { mAttributeFields.append( QgsField( f.name(), sqlType, sqlTypeName, f.length() ) ); } else if ( sqlType == QVariant::Double ) { mAttributeFields.append( QgsField( f.name(), sqlType, sqlTypeName, f.length(), f.precision() ) ); } else { mAttributeFields.append( QgsField( f.name(), sqlType, sqlTypeName ) ); } if ( !f.defaultValue().isNull() ) { mDefaultValues.insert( i, f.defaultValue() ); } // Hack to get primary key since the primaryIndex function above doesn't work // on z/OS. Pick first integer column. if ( mFidColName.length() == 0 && ( sqlType == QVariant::LongLong || sqlType == QVariant::Int ) ) { mFidColName = f.name(); } } }