Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 3820ae33

Von Christian Ehringfeld vor fast 9 Jahren hinzugefügt

  • ID 3820ae3335697a03f8a8bca236bfebf44101ebec
  • Vorgänger 11bbe9a6
  • Nachfolger c22391b2

...

Unterschiede anzeigen:

src/cache.cpp
return false;
}
void Cache::insert(QSharedPointer<Entity> entity) {
void Cache::insert(const QSharedPointer<Entity> &entity) {
if (entity.data() && entity.data()->getId() > -1) {
this->cache.insert(this->generateKey(entity.data()->getId(), QString(entity.data()->getClassname())),
entity.toWeakRef());
}
}
void Cache::remove(QSharedPointer<Entity> entity) {
void Cache::remove(const QSharedPointer<Entity> &entity) {
if (entity.data() && entity.data()->getId() > -1) {
this->remove(entity.data()->getId(), QString(entity.data()->getClassname()));
}
......
QSharedPointer<Entity> Cache::get(qint64 id, const QString &classname) {
QString key = this->generateKey(id, classname);
if (this->contains(key)) {
return this->cache.value(key).toStrongRef();
QSharedPointer<Entity> ptr = this->cache.value(key).toStrongRef();
if (!ptr.data()) {
this->remove(id, classname);
}
return ptr;
}
return QSharedPointer<Entity>();
}
src/cache.h
}
return ok;
}
void insert(QSharedPointer<Entity> entity);
void remove(QSharedPointer<Entity> entity);
void insert(const QSharedPointer<Entity> &entity);
void remove(const QSharedPointer<Entity> &entity);
void remove(const qint64 &id, const QString &classname);
template<class T> void remove(qint64 id) {
Entity *e = EntityInstanceFactory::createInstance<T>();
src/database.cpp
return true;
}
DatabaseType Database::getDatabaseType(QString s) {
if (s == "qmysql") {
return DatabaseType::MYSQL;
} else if (s == "qpgsql") {
return DatabaseType::PGSQL;
} else {
return DatabaseType::SQLITE;
}
}
QSharedPointer<Schema> Database::getSchema(int db, QSharedPointer<Database> database) {
switch (db) {
case SQLITE:
return QSharedPointer<Schema>(new SqliteSchema(database));;
break;
// case PGSQL:
// return QSharedPointer<Schema>(new PgSqlSchema());
// break;
// case MYSQL:
// return QSharedPointer<Schema>(new MysqlSchema());
// break;
default:
return QSharedPointer<Schema>(new SqliteSchema(database));
break;
}
}
bool Database::exec(const QString &query) {
QSqlQuery q = QSqlQuery(this->database);
bool ok = q.exec(query);
src/database.h
QSqlQuery select(const QString &query);
void startTransaction();
bool commitTransaction();
static DatabaseType getDatabaseType(QString s);
static QSharedPointer<Schema> getSchema(int db, QSharedPointer<Database> database);
};
}
src/entitymanager.cpp
QStringList EntityManager::connectionNames = QStringList();
void EntityManager::init() {
auto schema = CuteEntityManager::getSchema(CuteEntityManager::getDatabaseType(
auto schema = Database::getSchema(Database::getDatabaseType(
this->db.data()->getDatabase().driverName()), this->db);
this->schema = QSharedPointer<Schema>(schema);
this->schema.data()->setTables(this->schema.data()->getTableSchemas());
......
return this->convert(maps, entity.data()->getClassname());
}
/**
* @todo should be an insert statement with much values
* not really usefull atm
* @brief EntityManager::create
* @param entities
* @return
*/
bool EntityManager::create(QList<QSharedPointer<Entity> > entities) {
bool ok = true;
foreach (QSharedPointer<Entity> ent, entities) {
ok = this->create(ent);
if (!ok) {
break;
}
}
return ok;
}
/**
......
rc = this->db->transaction(q);
if (rc) {
entity.data()->setId(this->schema.data()->getLastInsertID().toLongLong(&rc));
this->cache.insert(entity);
}
}
return rc;
src/entitymanager.h
#include "entity.h"
#include "database.h"
#include "entityinstancefactory.h"
#include "cache.h"
namespace CuteEntityManager {
......
QSharedPointer<Schema> schema;
static void setConnectionNames(QStringList list);
QSharedPointer<Database> db;
Cache cache;
QString createConnection();
QString createTableQuery(const QSharedPointer<Entity> &entity);
QList<QHash<QString, QVariant> > convertQueryResult(QSqlQuery &q);
src/enums/databasetype.h
#include "../schema/sqliteschema.h"
namespace CuteEntityManager {
class Database;
enum DatabaseType {
SQLITE = 0,
PGSQL = 1,
MYSQL = 2
};
static DatabaseType getDatabaseType(QString s) {
if (s == "qmysql") {
return DatabaseType::MYSQL;
} else if (s == "qpgsql") {
return DatabaseType::PGSQL;
} else {
return DatabaseType::SQLITE;
}
}
static QSharedPointer<Schema> getSchema(int db, QSharedPointer<Database> database) {
switch (db) {
case SQLITE:
return QSharedPointer<Schema>(new SqliteSchema(database));;
break;
// case PGSQL:
// return QSharedPointer<Schema>(new PgSqlSchema());
// break;
// case MYSQL:
// return QSharedPointer<Schema>(new MysqlSchema());
// break;
default:
return QSharedPointer<Schema>(new SqliteSchema(database));
break;
}
}
}
#endif // DATABASETYPE_H

Auch abrufbar als: Unified diff