Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision ed9ffe4a

Von Christian Ehringfeld vor mehr als 8 Jahren hinzugefügt

  • ID ed9ffe4a8114a2f91de4d257d1ef5a9ab9b28cb0
  • Vorgänger 5b3f11b2
  • Nachfolger 2d59cb88

mysql stuff

Unterschiede anzeigen:

src/schema/mysqlschema.cpp
#include "../database.h"
#include <QSqlRecord>
#include <QSqlResult>
#include "sqlitequerybuilder.h"
#include "mysqlquerybuilder.h"
using namespace CuteEntityManager;
MysqlSchema::MysqlSchema(QSharedPointer<Database> database) : Schema(
database, QSharedPointer<QueryBuilder>(new MysqlQueryBuilder(
QSharedPointer<Schema>
(this), database))) {
}
QSharedPointer<QHash<QString, QString> > MysqlSchema::getTypeMap() {
if (this->typeMap->empty()) {
this->typeMap->insert(TYPE_PK,
......
void MysqlSchema::findConstraints(const QSharedPointer<TableSchema> &ts) {
QString sql =
"SELECT table_name, column_name,referenced_table_name,referenced_column_name";
"SELECT " + this->quoteColumnName("table_name") + ", " +
this->quoteColumnName("column_name") + ", " +
this->quoteColumnName("referenced_table_name") + ", " +
this->quoteColumnName("referenced_column_name");
sql += " FROM " + this->quoteTableName("information_schema.key_column_usage");
sql += "WHERE " + this->quoteColumnName("referenced_table_name") +
" is not null";
sql += " AND " + this->quoteColumnName("table_schema") + " = \"" +
this->getDatabase()->getDatabase().databaseName() + "\"";
sql += " AND " + this->quoteColumnName("table_name") + " = \"" + ts->getName() +
"\"";
sql += " AND " + this->quoteColumnName("table_schema") + " = ?";
sql += " AND " + this->quoteColumnName("table_name") + " = ?";
QSqlQuery q = this->database->getQuery();
q.setForwardOnly(true);
q.exec(sql);
q.prepare(sql);
q.bindValue(0, this->getDatabase()->getDatabase().databaseName());
q.bindValue(1, ts->getName());
this->database->select(q);
auto foreignKeys = ts->getRelations();
int id = 0;
while (q.next()) {
bool ok;
if (ok) {
auto rel = new QSqlRelation(q.value("referenced_table_name").toString(),
q.value("column_name").toString(),
q.value("referenced_column_name").toString());
auto ptr = QSharedPointer<QSqlRelation>(rel);
foreignKeys.insert(QString::number(id), ptr);
}
id++;
auto rel = new QSqlRelation(q.value("referenced_table_name").toString(),
q.value("column_name").toString(),
q.value("referenced_column_name").toString());
auto ptr = QSharedPointer<QSqlRelation>(rel);
foreignKeys.insert(QString::number(id), ptr);
++id;
}
ts->setRelations(foreignKeys);
}

Auch abrufbar als: Unified diff