Revision ed9ffe4a
Von Christian Ehringfeld vor mehr als 8 Jahren hinzugefügt
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
mysql stuff