Instance: add Database attribute

Move from db/DatabaseGlue.cxx, eliminating global variable.
This commit is contained in:
Max Kellermann
2014-02-01 00:26:34 +01:00
parent f00710a57e
commit cf6281a5a7
21 changed files with 106 additions and 152 deletions

View File

@@ -19,30 +19,18 @@
#include "config.h"
#include "DatabaseGlue.hxx"
#include "DatabaseSimple.hxx"
#include "Registry.hxx"
#include "DatabaseError.hxx"
#include "Directory.hxx"
#include "util/Error.hxx"
#include "config/ConfigData.hxx"
#include "Stats.hxx"
#include "DatabasePlugin.hxx"
#include "plugins/SimpleDatabasePlugin.hxx"
#include <assert.h>
#include <string.h>
static Database *db;
static bool db_is_open;
static bool is_simple;
bool
Database *
DatabaseGlobalInit(EventLoop &loop, DatabaseListener &listener,
const config_param &param, Error &error)
const config_param &param, bool &is_simple, Error &error)
{
assert(db == nullptr);
assert(!db_is_open);
const char *plugin_name =
param.GetBlockValue("plugin", "simple");
is_simple = strcmp(plugin_name, "simple") == 0;
@@ -51,79 +39,8 @@ DatabaseGlobalInit(EventLoop &loop, DatabaseListener &listener,
if (plugin == nullptr) {
error.Format(db_domain,
"No such database plugin: %s", plugin_name);
return false;
return nullptr;
}
db = plugin->create(loop, listener, param, error);
return db != nullptr;
}
void
DatabaseGlobalDeinit(void)
{
if (db_is_open)
db->Close();
if (db != nullptr)
delete db;
}
const Database *
GetDatabase()
{
assert(db == nullptr || db_is_open);
return db;
}
const Database *
GetDatabase(Error &error)
{
assert(db == nullptr || db_is_open);
if (db == nullptr)
error.Set(db_domain, DB_DISABLED, "No database");
return db;
}
bool
db_is_simple(void)
{
assert(db == nullptr || db_is_open);
return is_simple;
}
SimpleDatabase &
db_get_simple()
{
assert(is_simple);
assert(db != nullptr);
return *(SimpleDatabase *)db;
}
bool
DatabaseGlobalOpen(Error &error)
{
assert(db != nullptr);
assert(!db_is_open);
if (!db->Open(error))
return false;
db_is_open = true;
return true;
}
bool
db_exists()
{
assert(db != nullptr);
assert(db_is_open);
assert(db_is_simple());
return ((SimpleDatabase *)db)->GetUpdateStamp() > 0;
return plugin->create(loop, listener, param, error);
}

View File

@@ -32,31 +32,11 @@ class Error;
* Initialize the database library.
*
* @param param the database configuration block
* @param is_simple returns whether this is the "simple" database
* plugin
*/
bool
Database *
DatabaseGlobalInit(EventLoop &loop, DatabaseListener &listener,
const config_param &param, Error &error);
void
DatabaseGlobalDeinit(void);
bool
DatabaseGlobalOpen(Error &error);
/**
* Returns the global #Database instance. May return nullptr if this MPD
* configuration has no database (no music_directory was configured).
*/
gcc_const
const Database *
GetDatabase();
/**
* Returns the global #Database instance. May return nullptr if this MPD
* configuration has no database (no music_directory was configured).
*/
gcc_pure
const Database *
GetDatabase(Error &error);
const config_param &param, bool &is_simple, Error &error);
#endif

View File

@@ -28,7 +28,6 @@
#include "LightSong.hxx"
#include "LightDirectory.hxx"
#include "PlaylistInfo.hxx"
#include "DatabaseGlue.hxx"
#include "DatabasePlugin.hxx"
#include <functional>
@@ -129,7 +128,7 @@ bool
db_selection_print(Client &client, const DatabaseSelection &selection,
bool full, Error &error)
{
const Database *db = GetDatabase(error);
const Database *db = client.GetDatabase(error);
if (db == nullptr)
return false;
@@ -173,7 +172,7 @@ searchStatsForSongsIn(Client &client, const char *name,
const SongFilter *filter,
Error &error)
{
const Database *db = GetDatabase(error);
const Database *db = client.GetDatabase(error);
if (db == nullptr)
return false;
@@ -229,7 +228,7 @@ listAllUniqueTags(Client &client, int type,
const SongFilter *filter,
Error &error)
{
const Database *db = GetDatabase(error);
const Database *db = client.GetDatabase(error);
if (db == nullptr)
return false;

View File

@@ -22,6 +22,7 @@
#include "DatabaseGlue.hxx"
#include "DatabasePlugin.hxx"
#include "Partition.hxx"
#include "Instance.hxx"
#include "util/Error.hxx"
#include "DetachedSong.hxx"
#include "Mapper.hxx"
@@ -47,7 +48,7 @@ bool
AddFromDatabase(Partition &partition, const DatabaseSelection &selection,
Error &error)
{
const Database *db = GetDatabase(error);
const Database *db = partition.instance.GetDatabase(error);
if (db == nullptr)
return false;

View File

@@ -35,10 +35,6 @@ class Error;
bool
db_is_simple(void);
gcc_pure
SimpleDatabase &
db_get_simple();
/**
* Returns true if there is a valid database file on the disk.
*

View File

@@ -59,6 +59,9 @@ public:
bool Save(Error &error);
/**
* Returns true if there is a valid database file on the disk.
*/
bool FileExists() const {
return mtime > 0;
}