File:  [parser3project] / parser3 / src / include / Attic / pa_db_manager.h
Revision 1.2: download - view: text, annotated - select for diffs - revision graph
Tue Oct 23 12:41:05 2001 UTC (24 years, 8 months ago) by parser
Branches: MAIN
CVS tags: HEAD
^hashfile.transaction{code}
^hashfile:clear[filename]
^hashfile.delete[key]

/** @file
	Parser: sql driver manager decl.
	global sql driver manager, must be thread-safe

	Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)
	Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf)

	$Id: pa_db_manager.h,v 1.2 2001/10/23 12:41:05 parser Exp $
*/

#ifndef PA_DB_DRIVER_MANAGER_H
#define PA_DB_DRIVER_MANAGER_H

#include "pa_config_includes.h"
#include "pa_pool.h"
#include "pa_hash.h"

#ifdef HAVE_DB_H
#	include <db.h>
#endif

// defines

// forwards

class DB_Connection;

/// sql driver manager
class DB_Manager : public Pooled {
	friend DB_Connection;
public:

	DB_Manager(Pool& pool);
	~DB_Manager();

	/** 
		connect to specified file_spec, 
		using driver dynamic library found in table, if not loaded yet
		checks driver version
	*/
	DB_Connection& get_connection(const String& file_spec, const String& request_origin);
	void clear_dbfile(const String& file_spec);

private: // connection cache

	DB_Connection *get_connection_from_cache(const String& file_spec);
	void put_connection_to_cache(const String& file_spec, DB_Connection& connection);
	void maybe_expire_connection_cache();
private:
	time_t prev_expiration_pass_time;

private: // for DB_Connection

	/// caches connection
	void close_connection(const String& file_spec, DB_Connection& connection);

private:

	Hash connection_cache;
	DB_ENV dbenv;

private:

	void check(const char *operation, const String *source, int error);
};

/// global
extern DB_Manager *DB_manager;

#endif

E-mail: