⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 connection.h

📁 关系型数据库 Postgresql 6.5.2
💻 H
字号:
/* File:            connection.h * * Description:     See "connection.c" * * Comments:        See "notice.txt" for copyright and license information. * */#ifndef __CONNECTION_H__#define __CONNECTION_H__#ifdef HAVE_CONFIG_H#include "config.h"#endif#include "psqlodbc.h"#ifndef WIN32#include "iodbc.h"#include "isql.h"#include "isqlext.h"#else#include <windows.h>#include <sql.h>#include <sqlext.h>#endiftypedef enum {    CONN_NOT_CONNECTED,      /* Connection has not been established */    CONN_CONNECTED,      /* Connection is up and has been established */    CONN_DOWN,            /* Connection is broken */    CONN_EXECUTING     /* the connection is currently executing a statement */} CONN_Status;/*	These errors have general sql error state */#define CONNECTION_SERVER_NOT_REACHED 101#define CONNECTION_MSG_TOO_LONG 103#define CONNECTION_COULD_NOT_SEND 104#define CONNECTION_NO_SUCH_DATABASE 105#define CONNECTION_BACKEND_CRAZY 106#define CONNECTION_NO_RESPONSE 107#define CONNECTION_SERVER_REPORTED_ERROR 108#define CONNECTION_COULD_NOT_RECEIVE 109#define CONNECTION_SERVER_REPORTED_WARNING 110#define CONNECTION_NEED_PASSWORD 112/*	These errors correspond to specific SQL states */#define CONN_INIREAD_ERROR 201#define CONN_OPENDB_ERROR 202#define CONN_STMT_ALLOC_ERROR 203#define CONN_IN_USE 204 #define CONN_UNSUPPORTED_OPTION 205/* Used by SetConnectoption to indicate unsupported options */#define CONN_INVALID_ARGUMENT_NO 206/* SetConnectOption: corresponds to ODBC--"S1009" */#define CONN_TRANSACT_IN_PROGRES 207#define CONN_NO_MEMORY_ERROR 208#define CONN_NOT_IMPLEMENTED_ERROR 209#define CONN_INVALID_AUTHENTICATION 210#define CONN_AUTH_TYPE_UNSUPPORTED 211#define CONN_UNABLE_TO_LOAD_DLL 212#define CONN_OPTION_VALUE_CHANGED 213#define CONN_VALUE_OUT_OF_RANGE 214#define CONN_TRUNCATED 215/* Conn_status defines */#define CONN_IN_AUTOCOMMIT 0x01#define CONN_IN_TRANSACTION 0x02/* AutoCommit functions */#define CC_set_autocommit_off(x)	(x->transact_status &= ~CONN_IN_AUTOCOMMIT)#define CC_set_autocommit_on(x)		(x->transact_status |= CONN_IN_AUTOCOMMIT)#define CC_is_in_autocommit(x)		(x->transact_status & CONN_IN_AUTOCOMMIT)/* Transaction in/not functions */#define CC_set_in_trans(x)	(x->transact_status |= CONN_IN_TRANSACTION)#define CC_set_no_trans(x)	(x->transact_status &= ~CONN_IN_TRANSACTION)#define CC_is_in_trans(x)	(x->transact_status & CONN_IN_TRANSACTION)/* Authentication types */#define AUTH_REQ_OK			0#define AUTH_REQ_KRB4		1#define AUTH_REQ_KRB5		2#define AUTH_REQ_PASSWORD	3#define AUTH_REQ_CRYPT		4/*	Startup Packet sizes */#define SM_DATABASE		64#define SM_USER			32#define SM_OPTIONS		64#define SM_UNUSED		64#define SM_TTY			64/*	Old 6.2 protocol defines */#define NO_AUTHENTICATION	7#define PATH_SIZE			64#define ARGV_SIZE			64#define NAMEDATALEN			16typedef unsigned int ProtocolVersion;#define PG_PROTOCOL(major, minor)	(((major) << 16) | (minor))#define PG_PROTOCOL_LATEST		PG_PROTOCOL(2, 0)#define PG_PROTOCOL_63			PG_PROTOCOL(1, 0)#define PG_PROTOCOL_62			PG_PROTOCOL(0, 0)/*	This startup packet is to support latest Postgres protocol (6.4, 6.3) */typedef struct _StartupPacket{	ProtocolVersion	protoVersion;	char			database[SM_DATABASE];	char			user[SM_USER];	char			options[SM_OPTIONS];	char			unused[SM_UNUSED];	char			tty[SM_TTY];} StartupPacket;/*	This startup packet is to support pre-Postgres 6.3 protocol */typedef struct _StartupPacket6_2{	unsigned int	authtype;	char			database[PATH_SIZE];	char			user[NAMEDATALEN];	char			options[ARGV_SIZE];	char			execfile[ARGV_SIZE];	char			tty[PATH_SIZE];} StartupPacket6_2;/*	Structure to hold all the connection attributes for a specific	connection (used for both registry and file, DSN and DRIVER)*/typedef struct {	char	dsn[MEDIUM_REGISTRY_LEN];	char	desc[MEDIUM_REGISTRY_LEN];	char	driver[MEDIUM_REGISTRY_LEN];	char	server[MEDIUM_REGISTRY_LEN];	char	database[MEDIUM_REGISTRY_LEN];	char	username[MEDIUM_REGISTRY_LEN];	char	password[MEDIUM_REGISTRY_LEN];	char	conn_settings[LARGE_REGISTRY_LEN];	char	protocol[SMALL_REGISTRY_LEN];	char	port[SMALL_REGISTRY_LEN];	char	readonly[SMALL_REGISTRY_LEN];		char	fake_oid_index[SMALL_REGISTRY_LEN];	char	show_oid_column[SMALL_REGISTRY_LEN];	char	row_versioning[SMALL_REGISTRY_LEN];	char	show_system_tables[SMALL_REGISTRY_LEN];	char    translation_dll[MEDIUM_REGISTRY_LEN];	char    translation_option[SMALL_REGISTRY_LEN];	char	focus_password;} ConnInfo;/*	Macro to determine is the connection using 6.2 protocol? */#define PROTOCOL_62(conninfo_)		(strncmp((conninfo_)->protocol, PG62, strlen(PG62)) == 0)/*	Macro to determine is the connection using 6.3 protocol? */#define PROTOCOL_63(conninfo_)		(strncmp((conninfo_)->protocol, PG63, strlen(PG63)) == 0)/*	This is used to store cached table information in the connection */struct col_info {	QResultClass	*result;	char			name[MAX_TABLE_LEN+1];}; /* Translation DLL entry points */#ifdef WIN32#define DLLHANDLE HINSTANCE#else#define WINAPI CALLBACK#define DLLHANDLE void *#define HINSTANCE void *#endiftypedef BOOL (FAR WINAPI *DataSourceToDriverProc) (UDWORD,					SWORD,					PTR,					SDWORD,					PTR,					SDWORD,					SDWORD FAR *,					UCHAR FAR *,					SWORD,					SWORD FAR *);typedef BOOL (FAR WINAPI *DriverToDataSourceProc) (UDWORD,					SWORD,					PTR,					SDWORD,					PTR,					SDWORD,					SDWORD FAR *,					UCHAR FAR *,					SWORD,					SWORD FAR *);/*******	The Connection handle	************/struct ConnectionClass_ {	HENV			henv;					/* environment this connection was created on */	StatementOptions stmtOptions;	char			*errormsg;	int				errornumber;	CONN_Status		status;	ConnInfo		connInfo;	StatementClass	**stmts;	int				num_stmts;	SocketClass		*sock;	int				lobj_type;	int				ntables;	COL_INFO		**col_info;	long            translation_option;	HINSTANCE       translation_handle;	DataSourceToDriverProc  DataSourceToDriver;	DriverToDataSourceProc  DriverToDataSource;	char			transact_status;		/* Is a transaction is currently in progress */	char			errormsg_created;		/* has an informative error msg been created?  */};/* Accessor functions */#define CC_get_socket(x)	(x->sock)#define CC_get_database(x)	(x->connInfo.database)#define CC_get_server(x)	(x->connInfo.server)#define CC_get_DSN(x)		(x->connInfo.dsn)#define CC_get_username(x)	(x->connInfo.username)#define CC_is_readonly(x)	(x->connInfo.readonly[0] == '1')/*  for CC_DSN_info */#define CONN_DONT_OVERWRITE		0#define CONN_OVERWRITE			1 /*	prototypes */ConnectionClass *CC_Constructor(void);char CC_Destructor(ConnectionClass *self);int CC_cursor_count(ConnectionClass *self);char CC_cleanup(ConnectionClass *self);char CC_abort(ConnectionClass *self);int CC_set_translation (ConnectionClass *self);char CC_connect(ConnectionClass *self, char do_password);char CC_add_statement(ConnectionClass *self, StatementClass *stmt);char CC_remove_statement(ConnectionClass *self, StatementClass *stmt);char CC_get_error(ConnectionClass *self, int *number, char **message);QResultClass *CC_send_query(ConnectionClass *self, char *query, QueryInfo *qi);void CC_clear_error(ConnectionClass *self);char *CC_create_errormsg(ConnectionClass *self);int CC_send_function(ConnectionClass *conn, int fnid, void *result_buf, int *actual_result_len, int result_is_int, LO_ARG *argv, int nargs);char CC_send_settings(ConnectionClass *self);void CC_lookup_lo(ConnectionClass *conn);void CC_log_error(char *func, char *desc, ConnectionClass *self);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -