1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
|
#ifndef CONFIGIMPL_H
#define CONFIGIMPL_H
#include "coreSQLiteStudio_global.h"
#include "services/config.h"
#include "db/sqlquery.h"
#include <QMutex>
class AsyncConfigHandler;
class SqlHistoryModel;
class QSettings;
class API_EXPORT ConfigImpl : public Config
{
Q_OBJECT
friend class AsyncConfigHandler;
public:
virtual ~ConfigImpl();
void init();
void cleanUp();
const QString& getConfigDir() const;
QString getConfigFilePath() const;
bool isInMemory() const;
void beginMassSave();
void commitMassSave();
void rollbackMassSave();
bool isMassSaving() const;
void set(const QString& group, const QString& key, const QVariant& value);
QVariant get(const QString& group, const QString& key);
QVariant get(const QString& group, const QString& key, const QVariant& defaultValue);
QHash<QString,QVariant> getAll();
bool addDb(const QString& name, const QString& path, const QHash<QString, QVariant> &options);
bool updateDb(const QString& name, const QString &newName, const QString& path, const QHash<QString, QVariant> &options);
bool removeDb(const QString& name);
bool isDbInConfig(const QString& name);
QString getLastErrorString() const;
QString getSqlite3Version() const;
/**
* @brief Provides list of all registered databases.
* @return List of database entries.
*
* Registered databases are those that user added to the application. They are not necessary valid or supported.
* They can be inexisting or unsupported, but they are kept in registry in case user fixes file path,
* or loads plugin to support it.
*/
QList<CfgDbPtr> dbList();
CfgDbPtr getDb(const QString& dbName);
void storeGroups(const QList<DbGroupPtr>& groups);
QList<DbGroupPtr> getGroups();
DbGroupPtr getDbGroup(const QString& dbName);
qint64 addSqlHistory(const QString& sql, const QString& dbName, int timeSpentMillis, int rowsAffected);
void updateSqlHistory(qint64 id, const QString& sql, const QString& dbName, int timeSpentMillis, int rowsAffected);
void clearSqlHistory();
void deleteSqlHistory(const QList<qint64>& ids);
QAbstractItemModel* getSqlHistoryModel();
void addCliHistory(const QString& text);
void applyCliHistoryLimit();
void clearCliHistory();
QStringList getCliHistory() const;
void addBindParamHistory(const QVector<QPair<QString, QVariant>>& params);
void applyBindParamHistoryLimit();
QVector<QPair<QString, QVariant>> getBindParamHistory(const QStringList& paramNames) const;
void addPopulateHistory(const QString& database, const QString& table, int rows, const QHash<QString, QPair<QString, QVariant>>& columnsPluginsConfig);
void applyPopulateHistoryLimit();
QHash<QString, QPair<QString, QVariant>> getPopulateHistory(const QString& database, const QString& table, int& rows) const;
QVariant getPopulateHistory(const QString& pluginName) const;
void addDdlHistory(const QString& queries, const QString& dbName, const QString& dbFile);
QList<DdlHistoryEntryPtr> getDdlHistoryFor(const QString& dbName, const QString& dbFile, const QDate& date);
DdlHistoryModel* getDdlHistoryModel();
void clearDdlHistory();
void addReportHistory(bool isFeatureRequest, const QString& title, const QString& url);
QList<ReportHistoryEntryPtr> getReportHistory();
void deleteReport(int id);
void clearReportHistory();
void begin();
void commit();
void rollback();
private:
struct ConfigDirCandidate
{
QString path;
bool createIfNotExists;
bool isPortable;
};
/**
* @brief Stores error from query in class member.
* @param query Query to get error from.
* @return true if the query had any error set, or false if not.
*
* If the error was defined in the query, its message is stored in lastQueryError.
*/
bool storeErrorAndReturn(SqlQueryPtr results);
void printErrorIfSet(SqlQueryPtr results);
void storeGroup(const DbGroupPtr& group, qint64 parentId = -1);
void readGroupRecursively(DbGroupPtr group);
QString getConfigPath();
void initTables();
void initDbFile();
QList<ConfigDirCandidate> getStdDbPaths();
bool tryInitDbFile(const ConfigDirCandidate& dbPath);
QVariant deserializeValue(const QVariant& value) const;
void asyncAddSqlHistory(qint64 id, const QString& sql, const QString& dbName, int timeSpentMillis, int rowsAffected);
void asyncUpdateSqlHistory(qint64 id, const QString& sql, const QString& dbName, int timeSpentMillis, int rowsAffected);
void asyncClearSqlHistory();
void asyncDeleteSqlHistory(const QList<qint64> &ids);
void asyncAddCliHistory(const QString& text);
void asyncApplyCliHistoryLimit();
void asyncClearCliHistory();
void asyncAddBindParamHistory(const QVector<QPair<QString, QVariant>>& params);
void asyncApplyBindParamHistoryLimit();
void asyncAddPopulateHistory(const QString& database, const QString& table, int rows, const QHash<QString, QPair<QString, QVariant>>& columnsPluginsConfig);
void asyncApplyPopulateHistoryLimit();
void asyncAddDdlHistory(const QString& queries, const QString& dbName, const QString& dbFile);
void asyncClearDdlHistory();
void asyncAddReportHistory(bool isFeatureRequest, const QString& title, const QString& url);
void asyncDeleteReport(int id);
void asyncClearReportHistory();
void mergeMasterConfig();
void updateConfigDb();
bool tryToMigrateOldGlobalPath(const QString& oldPath, const QString& newPath);
QString getLegacyConfigPath();
static Config* instance;
static qint64 sqlHistoryId;
static QString memoryDbName;
Db* db = nullptr;
QString configDir;
QString lastQueryError;
bool massSaving = false;
SqlHistoryModel* sqlHistoryModel = nullptr;
DdlHistoryModel* ddlHistoryModel = nullptr;
QMutex sqlHistoryMutex;
QMutex ddlHistoryMutex;
QString sqlite3Version;
public slots:
void refreshDdlHistory();
void refreshSqlHistory();
};
#endif // CONFIGIMPL_H
|