mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Don't create qof backends for uri types where there is no libdbi driver installed.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@17978 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
f20bbd373d
commit
cf19b319e3
@ -510,7 +510,6 @@ gnc_dbi_commit_edit( QofBackend *qbe, QofInstance *inst )
|
|||||||
static void
|
static void
|
||||||
init_sql_backend( GncDbiBackend* dbi_be )
|
init_sql_backend( GncDbiBackend* dbi_be )
|
||||||
{
|
{
|
||||||
static gboolean initialized = FALSE;
|
|
||||||
QofBackend* be;
|
QofBackend* be;
|
||||||
|
|
||||||
be = (QofBackend*)dbi_be;
|
be = (QofBackend*)dbi_be;
|
||||||
@ -542,34 +541,7 @@ init_sql_backend( GncDbiBackend* dbi_be )
|
|||||||
|
|
||||||
be->export = NULL;
|
be->export = NULL;
|
||||||
|
|
||||||
if( !initialized ) {
|
gnc_sql_init( &dbi_be->sql_be );
|
||||||
#define DEFAULT_DBD_DIR "/usr/lib/dbd"
|
|
||||||
const gchar* driver_dir;
|
|
||||||
int num_drivers;
|
|
||||||
|
|
||||||
driver_dir = g_getenv( "GNC_DBD_DIR" );
|
|
||||||
if( driver_dir == NULL ) {
|
|
||||||
PWARN( "GNC_DBD_DIR not set: using %s\n", DEFAULT_DBD_DIR );
|
|
||||||
driver_dir = DEFAULT_DBD_DIR;
|
|
||||||
}
|
|
||||||
|
|
||||||
num_drivers = dbi_initialize( driver_dir );
|
|
||||||
if( num_drivers == 0 ) {
|
|
||||||
PWARN( "No DBD drivers found\n" );
|
|
||||||
} else {
|
|
||||||
dbi_driver driver = NULL;
|
|
||||||
PINFO( "%d DBD drivers found\n", num_drivers );
|
|
||||||
|
|
||||||
do {
|
|
||||||
driver = dbi_driver_list( driver );
|
|
||||||
if( driver != NULL ) {
|
|
||||||
PINFO( "Driver: %s\n", dbi_driver_get_name( driver ) );
|
|
||||||
}
|
|
||||||
} while( driver != NULL );
|
|
||||||
}
|
|
||||||
gnc_sql_init( &dbi_be->sql_be );
|
|
||||||
initialized = TRUE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static QofBackend*
|
static QofBackend*
|
||||||
@ -669,40 +641,84 @@ G_MODULE_EXPORT void
|
|||||||
qof_backend_module_init(void)
|
qof_backend_module_init(void)
|
||||||
{
|
{
|
||||||
QofBackendProvider *prov;
|
QofBackendProvider *prov;
|
||||||
|
#define DEFAULT_DBD_DIR "/usr/lib/dbd"
|
||||||
|
const gchar* driver_dir;
|
||||||
|
int num_drivers;
|
||||||
|
gboolean have_sqlite3_driver = FALSE;
|
||||||
|
gboolean have_mysql_driver = FALSE;
|
||||||
|
gboolean have_pgsql_driver = FALSE;
|
||||||
|
|
||||||
prov = g_new0 (QofBackendProvider, 1);
|
/* Initialize libdbi and see which drivers are available. Only register qof backends which
|
||||||
prov->provider_name = "GnuCash Libdbi (SQLITE3) Backend";
|
have drivers available. */
|
||||||
prov->access_method = FILE_URI_TYPE;
|
driver_dir = g_getenv( "GNC_DBD_DIR" );
|
||||||
prov->partial_book_supported = FALSE;
|
if( driver_dir == NULL ) {
|
||||||
prov->backend_new = gnc_dbi_backend_sqlite3_new;
|
PWARN( "GNC_DBD_DIR not set: using %s\n", DEFAULT_DBD_DIR );
|
||||||
prov->provider_free = gnc_dbi_provider_free;
|
driver_dir = DEFAULT_DBD_DIR;
|
||||||
prov->check_data_type = gnc_dbi_check_sqlite3_file;
|
}
|
||||||
qof_backend_register_provider( prov );
|
|
||||||
|
|
||||||
prov = g_new0 (QofBackendProvider, 1);
|
num_drivers = dbi_initialize( driver_dir );
|
||||||
prov->provider_name = "GnuCash Libdbi (SQLITE3) Backend";
|
if( num_drivers == 0 ) {
|
||||||
prov->access_method = SQLITE3_URI_TYPE;
|
PWARN( "No DBD drivers found\n" );
|
||||||
prov->partial_book_supported = FALSE;
|
} else {
|
||||||
prov->backend_new = gnc_dbi_backend_sqlite3_new;
|
dbi_driver driver = NULL;
|
||||||
prov->provider_free = gnc_dbi_provider_free;
|
PINFO( "%d DBD drivers found\n", num_drivers );
|
||||||
prov->check_data_type = gnc_dbi_check_sqlite3_file;
|
|
||||||
qof_backend_register_provider( prov );
|
|
||||||
|
|
||||||
prov = g_new0 (QofBackendProvider, 1);
|
do {
|
||||||
prov->provider_name = "GnuCash Libdbi (MYSQL) Backend";
|
driver = dbi_driver_list( driver );
|
||||||
prov->access_method = "mysql";
|
if( driver != NULL ) {
|
||||||
prov->partial_book_supported = FALSE;
|
const gchar* name = dbi_driver_get_name( driver );
|
||||||
prov->backend_new = gnc_dbi_backend_mysql_new;
|
|
||||||
prov->provider_free = gnc_dbi_provider_free;
|
|
||||||
qof_backend_register_provider( prov );
|
|
||||||
|
|
||||||
prov = g_new0 (QofBackendProvider, 1);
|
PINFO( "Driver: %s\n", name );
|
||||||
prov->provider_name = "GnuCash Libdbi (POSTGRESQL) Backend";
|
if( strcmp( name, "sqlite3" ) == 0 ) {
|
||||||
prov->access_method = "postgres";
|
have_sqlite3_driver = TRUE;
|
||||||
prov->partial_book_supported = FALSE;
|
} else if( strcmp( name, "mysql" ) == 0 ) {
|
||||||
prov->backend_new = gnc_dbi_backend_postgres_new;
|
have_mysql_driver = TRUE;
|
||||||
prov->provider_free = gnc_dbi_provider_free;
|
} else if( strcmp( name, "pgsql" ) == 0 ) {
|
||||||
qof_backend_register_provider( prov );
|
have_pgsql_driver = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while( driver != NULL );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( have_sqlite3_driver ) {
|
||||||
|
prov = g_new0 (QofBackendProvider, 1);
|
||||||
|
prov->provider_name = "GnuCash Libdbi (SQLITE3) Backend";
|
||||||
|
prov->access_method = FILE_URI_TYPE;
|
||||||
|
prov->partial_book_supported = FALSE;
|
||||||
|
prov->backend_new = gnc_dbi_backend_sqlite3_new;
|
||||||
|
prov->provider_free = gnc_dbi_provider_free;
|
||||||
|
prov->check_data_type = gnc_dbi_check_sqlite3_file;
|
||||||
|
qof_backend_register_provider( prov );
|
||||||
|
|
||||||
|
prov = g_new0 (QofBackendProvider, 1);
|
||||||
|
prov->provider_name = "GnuCash Libdbi (SQLITE3) Backend";
|
||||||
|
prov->access_method = SQLITE3_URI_TYPE;
|
||||||
|
prov->partial_book_supported = FALSE;
|
||||||
|
prov->backend_new = gnc_dbi_backend_sqlite3_new;
|
||||||
|
prov->provider_free = gnc_dbi_provider_free;
|
||||||
|
prov->check_data_type = gnc_dbi_check_sqlite3_file;
|
||||||
|
qof_backend_register_provider( prov );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( have_mysql_driver ) {
|
||||||
|
prov = g_new0 (QofBackendProvider, 1);
|
||||||
|
prov->provider_name = "GnuCash Libdbi (MYSQL) Backend";
|
||||||
|
prov->access_method = "mysql";
|
||||||
|
prov->partial_book_supported = FALSE;
|
||||||
|
prov->backend_new = gnc_dbi_backend_mysql_new;
|
||||||
|
prov->provider_free = gnc_dbi_provider_free;
|
||||||
|
qof_backend_register_provider( prov );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( have_pgsql_driver ) {
|
||||||
|
prov = g_new0 (QofBackendProvider, 1);
|
||||||
|
prov->provider_name = "GnuCash Libdbi (POSTGRESQL) Backend";
|
||||||
|
prov->access_method = "postgres";
|
||||||
|
prov->partial_book_supported = FALSE;
|
||||||
|
prov->backend_new = gnc_dbi_backend_postgres_new;
|
||||||
|
prov->provider_free = gnc_dbi_provider_free;
|
||||||
|
qof_backend_register_provider( prov );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------- */
|
/* --------------------------------------------------------- */
|
||||||
|
@ -107,8 +107,13 @@ static QofLogModule log_module = G_LOG_DOMAIN;
|
|||||||
void
|
void
|
||||||
gnc_sql_init( GncSqlBackend* be )
|
gnc_sql_init( GncSqlBackend* be )
|
||||||
{
|
{
|
||||||
register_standard_col_type_handlers();
|
static gboolean initialized = FALSE;
|
||||||
gnc_sql_init_object_handlers();
|
|
||||||
|
if( !initialized ) {
|
||||||
|
register_standard_col_type_handlers();
|
||||||
|
gnc_sql_init_object_handlers();
|
||||||
|
initialized = TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ================================================================= */
|
/* ================================================================= */
|
||||||
|
Loading…
Reference in New Issue
Block a user