GnuCash  2.6.99
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Functions
gnc-backend-dbi.h File Reference

load and save data to SQL via libdbi More...

#include <gmodule.h>

Go to the source code of this file.

Functions

void gnc_module_init_backend_dbi (void)
 
void gnc_module_finalize_backend_dbi (void)
 
G_MODULE_EXPORT void qof_backend_module_init (void)
 
G_MODULE_EXPORT void qof_backend_module_finalize (void)
 

Detailed Description

load and save data to SQL via libdbi

Author
Copyright (c) 2006-2008 Phil Longstaff plong.nosp@m.staf.nosp@m.f@rog.nosp@m.ers..nosp@m.com

This file implements the top-level QofBackend API for saving/ restoring data to/from an SQL database via libdbi

Definition in file gnc-backend-dbi.h.

Function Documentation

void gnc_module_finalize_backend_dbi ( void  )

Shutdown function which can be used when this module is statically linked into the application.

Definition at line 2001 of file gnc-backend-dbi.c.

2002 {
2003 #if HAVE_LIBDBI_R
2004  if (dbi_instance)
2005  {
2006  dbi_shutdown_r(dbi_instance);
2007  dbi_instance = NULL;
2008  }
2009 #else
2010  dbi_shutdown();
2011 #endif
2012 }
void gnc_module_init_backend_dbi ( void  )

Initialization function which can be used when this module is statically linked into the application.

Definition at line 1868 of file gnc-backend-dbi.c.

1869 {
1870  QofBackendProvider *prov;
1871  const gchar* driver_dir;
1872  int num_drivers;
1873  gboolean have_sqlite3_driver = FALSE;
1874  gboolean have_mysql_driver = FALSE;
1875  gboolean have_pgsql_driver = FALSE;
1876 
1877  /* Initialize libdbi and see which drivers are available. Only register qof backends which
1878  have drivers available. */
1879  driver_dir = g_getenv( "GNC_DBD_DIR" );
1880  if ( driver_dir == NULL )
1881  {
1882  PINFO( "GNC_DBD_DIR not set: using libdbi built-in default\n");
1883  }
1884 
1885  /* dbi_initialize returns -1 in case of errors */
1886  #if HAVE_LIBDBI_R
1887  if (dbi_instance)
1888  return;
1889  num_drivers = dbi_initialize_r( driver_dir, &dbi_instance );
1890  #else
1891  num_drivers = dbi_initialize( driver_dir );
1892  #endif
1893  if ( num_drivers <= 0 )
1894  {
1895  PWARN( "No DBD drivers found\n" );
1896  }
1897  else
1898  {
1899  dbi_driver driver = NULL;
1900  PINFO( "%d DBD drivers found\n", num_drivers );
1901 
1902  do
1903  {
1904  #if HAVE_LIBDBI_R
1905  driver = dbi_driver_list_r( driver, dbi_instance );
1906  #else
1907  driver = dbi_driver_list( driver );
1908  #endif
1909 
1910  if ( driver != NULL )
1911  {
1912  const gchar* name = dbi_driver_get_name( driver );
1913 
1914  PINFO( "Driver: %s\n", name );
1915  if ( strcmp( name, "sqlite3" ) == 0 )
1916  {
1917  have_sqlite3_driver = TRUE;
1918  }
1919  else if ( strcmp( name, "mysql" ) == 0 )
1920  {
1921  have_mysql_driver = TRUE;
1922  }
1923  else if ( strcmp( name, "pgsql" ) == 0 )
1924  {
1925  have_pgsql_driver = TRUE;
1926  }
1927  }
1928  }
1929  while ( driver != NULL );
1930  }
1931 
1932  if ( have_sqlite3_driver )
1933  {
1934  prov = g_new0( QofBackendProvider, 1 );
1935  g_assert( prov != NULL );
1936 
1937  prov->provider_name = "GnuCash Libdbi (SQLITE3) Backend";
1938  prov->access_method = FILE_URI_TYPE;
1939  prov->backend_new = gnc_dbi_backend_sqlite3_new;
1940  prov->provider_free = gnc_dbi_provider_free;
1941  prov->check_data_type = gnc_dbi_check_sqlite3_file;
1943 
1944  prov = g_new0( QofBackendProvider, 1 );
1945  g_assert( prov != NULL );
1946 
1947  prov->provider_name = "GnuCash Libdbi (SQLITE3) Backend";
1948  prov->access_method = SQLITE3_URI_TYPE;
1949  prov->backend_new = gnc_dbi_backend_sqlite3_new;
1950  prov->provider_free = gnc_dbi_provider_free;
1951  prov->check_data_type = gnc_dbi_check_sqlite3_file;
1953  }
1954 
1955  if ( have_mysql_driver )
1956  {
1957  prov = g_new0( QofBackendProvider, 1 );
1958  g_assert( prov != NULL );
1959 
1960  prov->provider_name = "GnuCash Libdbi (MYSQL) Backend";
1961  prov->access_method = "mysql";
1962  prov->backend_new = gnc_dbi_backend_mysql_new;
1963  prov->provider_free = gnc_dbi_provider_free;
1964  prov->check_data_type = NULL;
1966  }
1967 
1968  if ( have_pgsql_driver )
1969  {
1970  prov = g_new0( QofBackendProvider, 1 );
1971  g_assert( prov != NULL );
1972 
1973  prov->provider_name = "GnuCash Libdbi (POSTGRESQL) Backend";
1974  prov->access_method = "postgres";
1975  prov->backend_new = gnc_dbi_backend_postgres_new;
1976  prov->provider_free = gnc_dbi_provider_free;
1977  prov->check_data_type = NULL;
1979  }
1980 
1981  /* If needed, set log level to DEBUG so that SQl statements will be put into
1982  the gnucash.trace file. */
1983  /* qof_log_set_level( log_module, QOF_LOG_DEBUG ); */
1984 }
QofBackend *(* backend_new)(void)
Definition: qofbackend-p.h:255
void(* provider_free)(QofBackendProvider *)
Definition: qofbackend-p.h:275
void qof_backend_register_provider(QofBackendProvider *)
#define PINFO(format, args...)
Definition: qoflog.h:249
#define PWARN(format, args...)
Definition: qoflog.h:243
gboolean(* check_data_type)(const char *)
Distinguish two providers with same access method.
Definition: qofbackend-p.h:272
const char * provider_name
Definition: qofbackend-p.h:242
const char * access_method
Definition: qofbackend-p.h:248
G_MODULE_EXPORT void qof_backend_module_init ( void  )

This is the standarized initialization function of a qof_backend GModule, but compiling this can be disabled by defining GNC_NO_LOADABLE_MODULES.

Definition at line 1988 of file gnc-backend-dbi.c.

1989 {
1991 }
void gnc_module_init_backend_dbi(void)