db.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /*!
  2. * \file db/dbmi_client/db.c
  3. *
  4. * \brief DBMI Library (client) - open/close driver/database connection
  5. *
  6. * (C) 1999-2009 by the GRASS Development Team
  7. *
  8. * This program is free software under the GNU General Public
  9. * License (>=v2). Read the file COPYING that comes with GRASS
  10. * for details.
  11. *
  12. * \author Joel Jones (CERL/UIUC), Radim Blazek
  13. */
  14. #include <grass/dbmi.h>
  15. #include <grass/glocale.h>
  16. #include "macros.h"
  17. /*!
  18. \brief Open driver/database connection
  19. \param drvname driver name
  20. \param dbname database name
  21. \return pointer to dbDriver structure
  22. \return NULL on failure
  23. */
  24. dbDriver *db_start_driver_open_database(const char *drvname,
  25. const char *dbname)
  26. {
  27. dbHandle handle;
  28. dbDriver *driver;
  29. G_debug(3, "db_start_driver_open_database():\n drvname = %s, dbname = %s",
  30. drvname, dbname);
  31. db_init_handle(&handle);
  32. driver = db_start_driver(drvname);
  33. if (driver == NULL) {
  34. G_warning(_("Unable to start driver <%s>"), drvname);
  35. return NULL;
  36. }
  37. db_set_handle(&handle, dbname, NULL);
  38. if (db_open_database(driver, &handle) != DB_OK) {
  39. G_warning(_("Unable to open database <%s> by driver <%s>"),
  40. dbname, drvname);
  41. db_shutdown_driver(driver);
  42. return NULL;
  43. }
  44. return driver;
  45. }
  46. /*!
  47. \brief Close driver/database connection
  48. \param driver db driver
  49. \return DB_OK or DB_FAILED
  50. */
  51. int db_close_database_shutdown_driver(dbDriver * driver)
  52. {
  53. int status;
  54. status = db_close_database(driver);
  55. G_debug(2, "db_close_database() result: %d (%d means success)",
  56. status, DB_OK);
  57. if (db_shutdown_driver(driver) != 0) {
  58. status = DB_FAILED;
  59. G_debug(2, "db_shutdown_driver() failed");
  60. }
  61. return status;
  62. }