QSqlIndex SqliteDriver::primaryIndex2(const QString &tblname) const { QSqlRecordInfo rec(recordInfo(tblname)); // expensive :( if (!isOpen() || !dataBase_) return QSqlIndex(); QSqlQuery q = createQuery(); q.setForwardOnly(TRUE); // finrst find a UNIQUE INDEX q.exec("PRAGMA index_list('" + tblname + "');"); QString indexname; while (q.next()) { if (q.value(2).toInt() == 1) { indexname = q.value(1).toString(); break; } } if (indexname.isEmpty()) return QSqlIndex(); q.exec("PRAGMA index_info('" + indexname + "');"); QSqlIndex index(tblname, indexname); while (q.next()) { QString name = q.value(2).toString(); QSqlVariant::Type type = QSqlVariant::Invalid; if (rec.contains(name)) type = rec.find(name).type(); index.append(QSqlField(name, type)); } return index; }
QSqlIndex XSqlTableModelProto::primaryKey() const { XSqlTableModel *item = qscriptvalue_cast<XSqlTableModel*>(thisObject()); if (item) return item->primaryKey(); return QSqlIndex(); }
QSqlIndex QSqlDatabaseProto::primaryIndex(const QString &tablename) const { QSqlDatabase *item = qscriptvalue_cast<QSqlDatabase*>(thisObject()); if (item) return item->primaryIndex(tablename); return QSqlIndex(); }
QSqlIndex QSqlDatabaseProto::primaryIndex(const QString &tablename) const { QSqlDatabase *item = qscriptvalue_cast<QSqlDatabase*>(thisObject()); if (item) return item->primaryIndex(tablename); else if (! thisObject().isNull()) return thisObject().toVariant().value<QSqlDatabase>().primaryIndex(tablename); return QSqlIndex(); }
QSqlIndex QSpatiaLiteDriver::primaryIndex(const QString &tblname) const { if (!isOpen()) return QSqlIndex(); QString table = tblname; if (isIdentifierEscaped(table, QSqlDriver::TableName)) table = stripDelimiters(table, QSqlDriver::TableName); QSqlQuery q(createResult()); q.setForwardOnly(true); return qGetTableInfo(q, table, true); }
QSqlIndex QSQLite2Driver::primaryIndex(const QString &tblname) const { QSqlRecord rec(record(tblname)); // expensive :( if (!isOpen()) return QSqlIndex(); QSqlQuery q(createResult()); q.setForwardOnly(true); QString table = tblname; if (isIdentifierEscaped(table, QSqlDriver::TableName)) table = stripDelimiters(table, QSqlDriver::TableName); // finrst find a UNIQUE INDEX q.exec(QLatin1String("PRAGMA index_list('") + table + QLatin1String("');")); QString indexname; while(q.next()) { if (q.value(2).toInt()==1) { indexname = q.value(1).toString(); break; } } if (indexname.isEmpty()) return QSqlIndex(); q.exec(QLatin1String("PRAGMA index_info('") + indexname + QLatin1String("');")); QSqlIndex index(table, indexname); while(q.next()) { QString name = q.value(2).toString(); QVariant::Type type = QVariant::Invalid; if (rec.contains(name)) type = rec.field(name).type(); index.append(QSqlField(name, type)); } return index; }
QSqlIndex QSqlDriver::primaryIndex(const QString&) const { return QSqlIndex(); }