Herunterladen als
root/src/schema.cpp @ 14f9beed
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 | }
|