123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- /*!
- * \file db/dbmi_driver/driver_state.c
- *
- * \brief DBMI Library (driver) - drivers state
- *
- * (C) 1999-2008 by the GRASS Development Team
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- * \author Joel Jones (CERL/UIUC), Radim Blazek
- */
- #include <stdlib.h>
- #include <grass/dbmi.h>
- #include "dbstubs.h"
- static dbDriverState state;
- /*!
- \brief Initialize driver state
- */
- void db__init_driver_state(void)
- {
- db_zero((void *)&state, sizeof(state));
- }
- /*!
- \brief Get driver state
- \return pointer to dbDriverState
- */
- dbDriverState *db__get_driver_state(void)
- {
- return &state;
- }
- /*!
- \brief Test database connection
- \return 1 opened
- \return 0 closed
- */
- int db__test_database_open(void)
- {
- return state.open ? 1 : 0;
- }
- /*!
- \brief Mark database as opened
- \param dbname database name
- \param dbschema database schema name
- */
- void db__mark_database_open(const char *dbname, const char *dbschema)
- {
- state.dbname = db_store(dbname);
- state.dbschema = db_store(dbschema);
- state.open = 1;
- }
- /*!
- \brief Mark database as closed
- */
- void db__mark_database_closed(void)
- {
- db_free(state.dbname);
- db_free(state.dbschema);
- state.open = 0;
- }
- /*!
- \brief Add cursor do driver state
- \param cursor db cursor to be added
- */
- void db__add_cursor_to_driver_state(dbCursor * cursor)
- {
- dbCursor **list;
- int i;
- /* find an empty slot in the cursor list */
- list = state.cursor_list;
- for (i = 0; i < state.ncursors; i++)
- if (list[i] == NULL)
- break;
- /* if not found, extend list */
- if (i >= state.ncursors) {
- list =
- (dbCursor **) db_realloc((void *)list,
- (i + 1) * sizeof(dbCursor *));
- if (list == NULL)
- return;
- state.cursor_list = list;
- state.ncursors = i + 1;
- }
- /* add it in */
- list[i] = cursor;
- }
- /*!
- \brief Drop cursor from driver state
- \param cursor db cursor to be dropped
- */
- void db__drop_cursor_from_driver_state(dbCursor * cursor)
- {
- int i;
- for (i = 0; i < state.ncursors; i++)
- if (state.cursor_list[i] == cursor)
- state.cursor_list[i] = NULL;
- }
- /*!
- \brief Close all cursors
- */
- void db__close_all_cursors(void)
- {
- int i;
- for (i = 0; i < state.ncursors; i++)
- if (state.cursor_list[i])
- db_driver_close_cursor(state.cursor_list[i]);
- if (state.cursor_list)
- db_free(state.cursor_list);
- state.ncursors = 0;
- state.cursor_list = NULL;
- }
|