Projekt

Allgemein

Profil

Herunterladen als
Herunterladen (3,2 KB) Statistiken
| Zweig: | Revision:
426974c6 Christian Ehringfeld
#include "schema.h"
9cf4747e Christian Ehringfeld
#include <QRegularExpression>
#include <QSqlRecord>
#include <QSqlQuery>
14f9beed Christian Ehringfeld
#include "database.h"
4d58ef6a Christian Ehringfeld
using namespace CuteEntityManager;
aa44e7d1 Christian Ehringfeld
14f9beed Christian Ehringfeld
Schema::Schema(QSharedPointer<Database> database) {
9cf4747e Christian Ehringfeld
this->database = database;
426974c6 Christian Ehringfeld
this->typeMap = QSharedPointer<QHash<QString, QString>>(new QHash<QString, QString>());
aa44e7d1 Christian Ehringfeld
}

4d58ef6a Christian Ehringfeld
Schema::~Schema() {
aa44e7d1 Christian Ehringfeld
}

a604a5a2 Christian Ehringfeld
QString Schema::quoteSimpleTableName(QString name) {
caea9141 Christian Ehringfeld
return name.indexOf("`") ? name : "`" + name + "`";
a604a5a2 Christian Ehringfeld
}

426974c6 Christian Ehringfeld
QString Schema::quoteTableName(QString name) {
9cf4747e Christian Ehringfeld
if (name.indexOf("(") || name.indexOf("{{")) {
return name;
}
if (name.indexOf(".") == -1) {
return this->quoteSimpleTableName(name);
}
QStringList parts = name.split(".");
for (int i = 0; i < parts.size(); ++i) {
parts.replace(i, this->quoteSimpleTableName(parts.at(i)));
}
return parts.join(".");
426974c6 Christian Ehringfeld
}

QString Schema::quoteColumnName(QString name) {
9cf4747e Christian Ehringfeld
if (name.indexOf("(") || name.indexOf("[[") || name.indexOf("{{")) {
return name;
}
int pos = name.indexOf(".");
QString prefix = "";
if (pos) {
prefix = this->quoteTableName(name.mid(0, pos)) + ".";
name = name.mid(pos + 1);
}
return prefix + this->quoteSimpleColumnName(name);
426974c6 Christian Ehringfeld
}

QString Schema::quoteSimpleColumnName(QString name) {
caea9141 Christian Ehringfeld
return name.indexOf("`") || name == "*" ? name : "`" + name + "`";
426974c6 Christian Ehringfeld
}

9cf4747e Christian Ehringfeld
QHash<QString, QSharedPointer<TableSchema> > Schema::getTableSchemas(QString schema, bool refresh) {
QStringList names = this->getTableNames();
for (int i = 0; i < names.size(); ++i) {
QString name;
if (schema != "") {
name = schema + "." + names.at(i);
}
TableSchema *t = this->getTableSchema(name, refresh);
if (t) {
this->tables.insert(name, QSharedPointer<TableSchema>(t));
}
}
return this->tables;
426974c6 Christian Ehringfeld
}

caea9141 Christian Ehringfeld
QStringList Schema::getTableNames(QString schema) {
14f9beed Christian Ehringfeld
return this->database.data()->getDatabase().tables();
426974c6 Christian Ehringfeld
}

9cf4747e Christian Ehringfeld
QVariant Schema::getLastInsertID() {
14f9beed Christian Ehringfeld
QSqlQuery q(this->database.data()->getDatabase());
9cf4747e Christian Ehringfeld
return q.lastInsertId();
426974c6 Christian Ehringfeld
}

void Schema::refresh() {
9cf4747e Christian Ehringfeld
this->tables.clear();
426974c6 Christian Ehringfeld
}

QString Schema::getRawTable(QString name) {
9cf4747e Christian Ehringfeld
if (name.indexOf("{{")) {
QRegularExpression re("/\\{\\{(.*?)\\}\\}/");
14f9beed Christian Ehringfeld
return name.replace(re, "\\1");
9cf4747e Christian Ehringfeld
}
return name;
}

14f9beed Christian Ehringfeld
bool Schema::containsTable(QString tblname) {
return this->tables.contains(tblname);
}

QString Schema::quoteValue(QString str) {

}

9cf4747e Christian Ehringfeld
TableSchema *Schema::getTableSchema(QString name, bool refresh) {
if (refresh) {
this->refresh();
}
if (this->tables.contains(name)) {
14f9beed Christian Ehringfeld
return this->tables.value(name).data();
9cf4747e Christian Ehringfeld
}
QString realName = this->getRawTable(name);
14f9beed Christian Ehringfeld
auto ts = this->loadTableSchema(realName);
9cf4747e Christian Ehringfeld
if (ts.data()) {
this->tables.insert(name, ts);
}
return ts.data();
14f9beed Christian Ehringfeld
}

QSharedPointer<Database> Schema::getDatabase() const {
return database;
}
9cf4747e Christian Ehringfeld
14f9beed Christian Ehringfeld
void Schema::setDatabase(const QSharedPointer<Database> &value) {
database = value;
9cf4747e Christian Ehringfeld
}
14f9beed Christian Ehringfeld
9cf4747e Christian Ehringfeld
QHash<QString, QSharedPointer<TableSchema> > Schema::getTables() const {
return this->tables;
}

void Schema::setTables(const QHash<QString, QSharedPointer<TableSchema> > &value) {
tables = value;
a604a5a2 Christian Ehringfeld
}