urbackup_backend/Interface/Database.h
Martin 6447563c2e Merge remote-tracking branch 'urpc/next' into dev
Conflicts:
	.gitignore
	Interface/Database.h
	configure.ac_client
	configure.ac_server
	fileservplugin/CClientThread.cpp
	fileservplugin/CClientThread.h
	fileservplugin/FileServFactory.cpp
	fileservplugin/FileServFactory.h
	fileservplugin/IFileServFactory.h
	fsimageplugin/FSImageFactory.cpp
	fsimageplugin/FSImageFactory.h
	fsimageplugin/FileWrapper.cpp
	fsimageplugin/FileWrapper.h
	fsimageplugin/IFSImageFactory.h
	fsimageplugin/Makefile.am_client
	fsimageplugin/Makefile.am_server
	fsimageplugin/dllmain.cpp
	fsimageplugin/filesystem.cpp
	fsimageplugin/filesystem.h
	fsimageplugin/fs/ntfs.cpp
	fsimageplugin/fs/ntfs.h
	fsimageplugin/fs/ntfs_win.cpp
	fsimageplugin/fs/ntfs_win.h
	fsimageplugin/fs/unknown.cpp
	fsimageplugin/fs/unknown.h
	fsimageplugin/fsimageplugin.vcxproj.filters
	start_urbackup_client
	start_urbackup_server
	urbackupclient/ChangeJournalWatcher.cpp
	urbackupclient/ClientService.cpp
	urbackupclient/ClientServiceCMD.cpp
	urbackupclient/ImageThread.cpp
	urbackupclient/client.cpp
	urbackupclient/client.h
	urbackupclient/client_restore.cpp
	urbackupclient/clientdao.cpp
	urbackupclient/dllmain.cpp
	urbackupclient/win_sysvol.cpp
	urbackupclient/win_sysvol.h
	urbackupcommon/fileclient/FileClient.cpp
	urbackupcommon/fileclient/FileClientChunked.cpp
	urbackupcommon/os_functions.h
	urbackupcommon/os_functions_lin.cpp
	urbackupcommon/os_functions_win.cpp
	urbackupcommon/settingslist.cpp
	urbackupserver/ImageBackup.cpp
	urbackupserver/SQLiteFileCache.cpp
	urbackupserver/ServerDownloadThread.cpp
	urbackupserver/dao/ServerBackupDao.cpp
	urbackupserver/dao/ServerBackupDao.h
	urbackupserver/dllmain.cpp
	urbackupserver/doc/admin_guide.tex
	urbackupserver/server_channel.cpp
	urbackupserver/server_channel.h
	urbackupserver/server_cleanup.cpp
	urbackupserver/server_dir_links.cpp
	urbackupserver/server_get.cpp
	urbackupserver/server_hash.cpp
	urbackupserver/server_hash.h
	urbackupserver/server_settings.cpp
	urbackupserver/server_settings.h
	urbackupserver/server_update_stats.cpp
	urbackupserver/server_writer.cpp
	urbackupserver/serverinterface/backups.cpp
	urbackupserver/serverinterface/settings.cpp
	urbackupserver/serverinterface/usage.cpp
	urbackupserver/www/js/urbackup.js
	urbackupserver/www/templates.js
	urbackupserver/www/templates/settings_inv_row.htm
	urbackupserver/www/translations/urbackup.webinterface/ar_SA.po
2015-12-09 14:49:13 +01:00

119 lines
2.2 KiB
C++

#ifndef INTERFACE_DATABASE_H
#define INTERFACE_DATABASE_H
#include <vector>
#include <string>
#include <map>
#include "Query.h"
#include "Object.h"
class IDatabase : public IObject
{
public:
virtual db_nresults ReadN(std::string pQuery)=0;
virtual db_results Read(std::string pQuery)=0;
virtual bool Write(std::string pQuery)=0;
virtual bool BeginReadTransaction()=0;
virtual bool BeginWriteTransaction()=0;
virtual bool EndTransaction(void)=0;
virtual IQuery* Prepare(std::string pQuery, bool autodestroy=true)=0;
virtual void destroyQuery(IQuery *q)=0;
virtual void destroyAllQueries(void)=0;
virtual _i64 getLastInsertID(void)=0;
virtual bool Import(const std::string &pFile)=0;
virtual bool Dump(const std::string &pFile)=0;
virtual std::string getEngineName(void)=0;
virtual void DetachDBs(void)=0;
virtual void AttachDBs(void)=0;
virtual bool Backup(const std::string &pFile)=0;
virtual void freeMemory()=0;
virtual int getLastChanges()=0;
virtual std::wstring getTempDirectoryPath() = 0;
};
class DBScopedFreeMemory
{
public:
DBScopedFreeMemory(IDatabase* db)
: db(db) {}
~DBScopedFreeMemory() {
db->freeMemory();
}
private:
IDatabase* db;
};
class DBScopedDetach
{
public:
DBScopedDetach(IDatabase* db)
: db(db) {
if(db!=NULL) db->DetachDBs();
}
~DBScopedDetach() {
if(db!=NULL) db->AttachDBs();
}
void attach() {
if(db!=NULL) db->AttachDBs();
db=NULL;
}
private:
IDatabase* db;
};
class DBScopedAttach
{
public:
DBScopedAttach(IDatabase* db)
: db(db) {
if(db!=NULL) db->AttachDBs();
}
~DBScopedAttach() {
if(db!=NULL) db->DetachDBs();
}
void detach() {
if(db!=NULL) db->DetachDBs();
db=NULL;
}
private:
IDatabase* db;
};
class DBScopedWriteTransaction
{
public:
DBScopedWriteTransaction(IDatabase* db)
: db(db) {
if(db!=NULL) db->BeginWriteTransaction();
}
~DBScopedWriteTransaction() {
if(db!=NULL) db->EndTransaction();
}
void restart() {
if(db!=NULL) {
db->EndTransaction();
db->BeginWriteTransaction();
}
}
void end() {
if(db!=NULL) db->EndTransaction();
db=NULL;
}
private:
IDatabase* db;
};
#endif