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

📄 ib5api_linux.cpp

📁 通用的数据库中间库
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// ibAPIpp
//
//////////////////////////////////////////////////////////////////////

#include <ibAPI.h>

#include <assert.h>
#include <SQLAPI.h>

#include "samisc.h"
#include "errmsg.h"

#include <dlfcn.h>

static const char *g_sIB5DLLName = "libgds.so";
static const char *g_sCryptDLLName = "libcrypt.so";
static void* g_hIB5DLL = NULL;
static void* g_hCryptDLL = NULL;
long g_nIB5DLLVersionLoaded = 0;
static long g_nIB5DLLRefs = 0;

// API definitions
ibAPI g_ibAPI;

ibAPI::ibAPI()
{
	isc_attach_database	= NULL;
	isc_array_gen_sdl	= NULL;
	isc_array_get_slice	= NULL;
	isc_array_lookup_bounds	= NULL;
	isc_array_lookup_desc	= NULL;
	isc_array_set_desc	= NULL;
	isc_array_put_slice	= NULL;
	isc_blob_default_desc	= NULL;
	isc_blob_gen_bpb	= NULL;
	isc_blob_info	= NULL;
	isc_blob_lookup_desc	= NULL;
	isc_blob_set_desc	= NULL;
	isc_cancel_blob	= NULL;
	isc_cancel_events	= NULL;
	isc_close_blob	= NULL;
	isc_commit_retaining	= NULL;
	isc_commit_transaction	= NULL;
	isc_create_blob	= NULL;
	isc_create_blob2	= NULL;
	isc_create_database	= NULL;
	isc_database_info	= NULL;
	isc_decode_date	= NULL;
	isc_detach_database	= NULL;
	isc_drop_database	= NULL;
	isc_dsql_allocate_statement	= NULL;
	isc_dsql_alloc_statement2	= NULL;
	isc_dsql_describe	= NULL;
	isc_dsql_describe_bind	= NULL;
	isc_dsql_exec_immed2	= NULL;
	isc_dsql_execute	= NULL;
	isc_dsql_execute2	= NULL;
	isc_dsql_execute_immediate	= NULL;
	isc_dsql_fetch	= NULL;
	isc_dsql_finish	= NULL;
	isc_dsql_free_statement	= NULL;
	isc_dsql_insert	= NULL;
	isc_dsql_prepare	= NULL;
	isc_dsql_set_cursor_name	= NULL;
	isc_dsql_sql_info	= NULL;
	isc_encode_date	= NULL;
	isc_event_block	= NULL;
	isc_event_counts	= NULL;
	isc_expand_dpb	= NULL;
	isc_modify_dpb	= NULL;
	isc_free	= NULL;
	isc_get_segment	= NULL;
	isc_get_slice	= NULL;
	isc_interprete	= NULL;
	isc_open_blob	= NULL;
	isc_open_blob2	= NULL;
	isc_prepare_transaction2	= NULL;
	isc_print_sqlerror	= NULL;
	isc_print_status	= NULL;
	isc_put_segment	= NULL;
	isc_put_slice	= NULL;
	isc_que_events	= NULL;
	isc_rollback_transaction	= NULL;
	isc_start_multiple	= NULL;
	isc_start_transaction	= NULL;
	isc_sqlcode	= NULL;
	isc_sql_interprete	= NULL;
	isc_transaction_info	= NULL;
	isc_transact_request	= NULL;
	isc_vax_integer	= NULL;
	isc_add_user	= NULL;
	isc_delete_user	= NULL;
	isc_modify_user	= NULL;
	isc_compile_request	= NULL;
	isc_compile_request2	= NULL;
	isc_ddl	= NULL;
	isc_prepare_transaction	= NULL;
	isc_receive	= NULL;
	isc_reconnect_transaction	= NULL;
	isc_release_request	= NULL;
	isc_request_info	= NULL;
	isc_seek_blob	= NULL;
	isc_send	= NULL;
	isc_start_and_send	= NULL;
	isc_start_request	= NULL;
	isc_unwind_request	= NULL;
	isc_wait_for_event	= NULL;
	isc_close	= NULL;
	isc_declare	= NULL;
	isc_execute_immediate	= NULL;
	isc_dsql_execute_m	= NULL;
	isc_dsql_execute2_m	= NULL;
	isc_dsql_execute_immediate_m	= NULL;
	isc_dsql_exec_immed3_m	= NULL;
	isc_dsql_fetch_m	= NULL;
	isc_dsql_insert_m	= NULL;
	isc_dsql_prepare_m	= NULL;
	isc_dsql_release	= NULL;
	isc_embed_dsql_close	= NULL;
	isc_embed_dsql_declare	= NULL;
	isc_embed_dsql_describe	= NULL;
	isc_embed_dsql_describe_bind	= NULL;
	isc_embed_dsql_execute	= NULL;
	isc_embed_dsql_execute2	= NULL;
	isc_embed_dsql_execute_immed	= NULL;
	isc_embed_dsql_fetch	= NULL;
	isc_embed_dsql_open	= NULL;
	isc_embed_dsql_open2	= NULL;
	isc_embed_dsql_insert	= NULL;
	isc_embed_dsql_prepare	= NULL;
	isc_embed_dsql_release	= NULL;
	isc_ftof	= NULL;
	isc_print_blr	= NULL;
	isc_set_debug	= NULL;
	isc_qtoq	= NULL;
	isc_vtof	= NULL;
	isc_vtov	= NULL;
	isc_version	= NULL;
}

ibConnectionHandles::ibConnectionHandles()
{
	m_db_handle		= NULL;
	m_tr_handle		= NULL;
}

ibCommandHandles::ibCommandHandles()
{
	m_stmt_handle	= NULL;
}

static void LoadAPI()
{
	g_ibAPI.isc_attach_database	= (isc_attach_database_t)dlsym(g_hIB5DLL, "isc_attach_database");	assert(g_ibAPI.isc_attach_database != NULL);
	g_ibAPI.isc_array_gen_sdl	= (isc_array_gen_sdl_t)dlsym(g_hIB5DLL, "isc_array_gen_sdl");	assert(g_ibAPI.isc_array_gen_sdl != NULL);
	g_ibAPI.isc_array_get_slice	= (isc_array_get_slice_t)dlsym(g_hIB5DLL, "isc_array_get_slice");	assert(g_ibAPI.isc_array_get_slice != NULL);
	g_ibAPI.isc_array_lookup_bounds	= (isc_array_lookup_bounds_t)dlsym(g_hIB5DLL, "isc_array_lookup_bounds");	assert(g_ibAPI.isc_array_lookup_bounds != NULL);
	g_ibAPI.isc_array_lookup_desc	= (isc_array_lookup_desc_t)dlsym(g_hIB5DLL, "isc_array_lookup_desc");	assert(g_ibAPI.isc_array_lookup_desc != NULL);
	g_ibAPI.isc_array_set_desc	= (isc_array_set_desc_t)dlsym(g_hIB5DLL, "isc_array_set_desc");	assert(g_ibAPI.isc_array_set_desc != NULL);
	g_ibAPI.isc_array_put_slice	= (isc_array_put_slice_t)dlsym(g_hIB5DLL, "isc_array_put_slice");	assert(g_ibAPI.isc_array_put_slice != NULL);
	g_ibAPI.isc_blob_default_desc	= (isc_blob_default_desc_t)dlsym(g_hIB5DLL, "isc_blob_default_desc");	assert(g_ibAPI.isc_blob_default_desc != NULL);
	g_ibAPI.isc_blob_gen_bpb	= (isc_blob_gen_bpb_t)dlsym(g_hIB5DLL, "isc_blob_gen_bpb");	assert(g_ibAPI.isc_blob_gen_bpb != NULL);
	g_ibAPI.isc_blob_info	= (isc_blob_info_t)dlsym(g_hIB5DLL, "isc_blob_info");	assert(g_ibAPI.isc_blob_info != NULL);
	g_ibAPI.isc_blob_lookup_desc	= (isc_blob_lookup_desc_t)dlsym(g_hIB5DLL, "isc_blob_lookup_desc");	assert(g_ibAPI.isc_blob_lookup_desc != NULL);
	g_ibAPI.isc_blob_set_desc	= (isc_blob_set_desc_t)dlsym(g_hIB5DLL, "isc_blob_set_desc");	assert(g_ibAPI.isc_blob_set_desc != NULL);
	g_ibAPI.isc_cancel_blob	= (isc_cancel_blob_t)dlsym(g_hIB5DLL, "isc_cancel_blob");	assert(g_ibAPI.isc_cancel_blob != NULL);
	g_ibAPI.isc_cancel_events	= (isc_cancel_events_t)dlsym(g_hIB5DLL, "isc_cancel_events");	assert(g_ibAPI.isc_cancel_events != NULL);
	g_ibAPI.isc_close_blob	= (isc_close_blob_t)dlsym(g_hIB5DLL, "isc_close_blob");	assert(g_ibAPI.isc_close_blob != NULL);
	g_ibAPI.isc_commit_retaining	= (isc_commit_retaining_t)dlsym(g_hIB5DLL, "isc_commit_retaining");	assert(g_ibAPI.isc_commit_retaining != NULL);
	g_ibAPI.isc_commit_transaction	= (isc_commit_transaction_t)dlsym(g_hIB5DLL, "isc_commit_transaction");	assert(g_ibAPI.isc_commit_transaction != NULL);
	g_ibAPI.isc_create_blob	= (isc_create_blob_t)dlsym(g_hIB5DLL, "isc_create_blob");	assert(g_ibAPI.isc_create_blob != NULL);
	g_ibAPI.isc_create_blob2	= (isc_create_blob2_t)dlsym(g_hIB5DLL, "isc_create_blob2");	assert(g_ibAPI.isc_create_blob2 != NULL);
	g_ibAPI.isc_create_database	= (isc_create_database_t)dlsym(g_hIB5DLL, "isc_create_database");	assert(g_ibAPI.isc_create_database != NULL);
	g_ibAPI.isc_database_info	= (isc_database_info_t)dlsym(g_hIB5DLL, "isc_database_info");	assert(g_ibAPI.isc_database_info != NULL);
	g_ibAPI.isc_decode_date	= (isc_decode_date_t)dlsym(g_hIB5DLL, "isc_decode_date");	assert(g_ibAPI.isc_decode_date != NULL);
	g_ibAPI.isc_detach_database	= (isc_detach_database_t)dlsym(g_hIB5DLL, "isc_detach_database");	assert(g_ibAPI.isc_detach_database != NULL);
	g_ibAPI.isc_drop_database	= (isc_drop_database_t)dlsym(g_hIB5DLL, "isc_drop_database");	assert(g_ibAPI.isc_drop_database != NULL);
	g_ibAPI.isc_dsql_allocate_statement	= (isc_dsql_allocate_statement_t)dlsym(g_hIB5DLL, "isc_dsql_allocate_statement");	assert(g_ibAPI.isc_dsql_allocate_statement != NULL);
	g_ibAPI.isc_dsql_alloc_statement2	= (isc_dsql_alloc_statement2_t)dlsym(g_hIB5DLL, "isc_dsql_alloc_statement2");	assert(g_ibAPI.isc_dsql_alloc_statement2 != NULL);
	g_ibAPI.isc_dsql_describe	= (isc_dsql_describe_t)dlsym(g_hIB5DLL, "isc_dsql_describe");	assert(g_ibAPI.isc_dsql_describe != NULL);
	g_ibAPI.isc_dsql_describe_bind	= (isc_dsql_describe_bind_t)dlsym(g_hIB5DLL, "isc_dsql_describe_bind");	assert(g_ibAPI.isc_dsql_describe_bind != NULL);
	g_ibAPI.isc_dsql_exec_immed2	= (isc_dsql_exec_immed2_t)dlsym(g_hIB5DLL, "isc_dsql_exec_immed2");	assert(g_ibAPI.isc_dsql_exec_immed2 != NULL);
	g_ibAPI.isc_dsql_execute	= (isc_dsql_execute_t)dlsym(g_hIB5DLL, "isc_dsql_execute");	assert(g_ibAPI.isc_dsql_execute != NULL);
	g_ibAPI.isc_dsql_execute2	= (isc_dsql_execute2_t)dlsym(g_hIB5DLL, "isc_dsql_execute2");	assert(g_ibAPI.isc_dsql_execute2 != NULL);
	g_ibAPI.isc_dsql_execute_immediate	= (isc_dsql_execute_immediate_t)dlsym(g_hIB5DLL, "isc_dsql_execute_immediate");	assert(g_ibAPI.isc_dsql_execute_immediate != NULL);
	g_ibAPI.isc_dsql_fetch	= (isc_dsql_fetch_t)dlsym(g_hIB5DLL, "isc_dsql_fetch");	assert(g_ibAPI.isc_dsql_fetch != NULL);
	g_ibAPI.isc_dsql_finish	= (isc_dsql_finish_t)dlsym(g_hIB5DLL, "isc_dsql_finish");	assert(g_ibAPI.isc_dsql_finish != NULL);
	g_ibAPI.isc_dsql_free_statement	= (isc_dsql_free_statement_t)dlsym(g_hIB5DLL, "isc_dsql_free_statement");	assert(g_ibAPI.isc_dsql_free_statement != NULL);
	g_ibAPI.isc_dsql_insert	= (isc_dsql_insert_t)dlsym(g_hIB5DLL, "isc_dsql_insert");	assert(g_ibAPI.isc_dsql_insert != NULL);
	g_ibAPI.isc_dsql_prepare	= (isc_dsql_prepare_t)dlsym(g_hIB5DLL, "isc_dsql_prepare");	assert(g_ibAPI.isc_dsql_prepare != NULL);
	g_ibAPI.isc_dsql_set_cursor_name	= (isc_dsql_set_cursor_name_t)dlsym(g_hIB5DLL, "isc_dsql_set_cursor_name");	assert(g_ibAPI.isc_dsql_set_cursor_name != NULL);
	g_ibAPI.isc_dsql_sql_info	= (isc_dsql_sql_info_t)dlsym(g_hIB5DLL, "isc_dsql_sql_info");	assert(g_ibAPI.isc_dsql_sql_info != NULL);
	g_ibAPI.isc_encode_date	= (isc_encode_date_t)dlsym(g_hIB5DLL, "isc_encode_date");	assert(g_ibAPI.isc_encode_date != NULL);
	g_ibAPI.isc_event_block	= (isc_event_block_t)dlsym(g_hIB5DLL, "isc_event_block");	assert(g_ibAPI.isc_event_block != NULL);
	g_ibAPI.isc_event_counts	= (isc_event_counts_t)dlsym(g_hIB5DLL, "isc_event_counts");	assert(g_ibAPI.isc_event_counts != NULL);
	g_ibAPI.isc_expand_dpb	= (isc_expand_dpb_t)dlsym(g_hIB5DLL, "isc_expand_dpb");	assert(g_ibAPI.isc_expand_dpb != NULL);
	g_ibAPI.isc_modify_dpb	= (isc_modify_dpb_t)dlsym(g_hIB5DLL, "isc_modify_dpb");	assert(g_ibAPI.isc_modify_dpb != NULL);
	g_ibAPI.isc_free	= (isc_free_t)dlsym(g_hIB5DLL, "isc_free");	assert(g_ibAPI.isc_free != NULL);
	g_ibAPI.isc_get_segment	= (isc_get_segment_t)dlsym(g_hIB5DLL, "isc_get_segment");	assert(g_ibAPI.isc_get_segment != NULL);
	g_ibAPI.isc_get_slice	= (isc_get_slice_t)dlsym(g_hIB5DLL, "isc_get_slice");	assert(g_ibAPI.isc_get_slice != NULL);
	g_ibAPI.isc_interprete	= (isc_interprete_t)dlsym(g_hIB5DLL, "isc_interprete");	assert(g_ibAPI.isc_interprete != NULL);
	g_ibAPI.isc_open_blob	= (isc_open_blob_t)dlsym(g_hIB5DLL, "isc_open_blob");	assert(g_ibAPI.isc_open_blob != NULL);
	g_ibAPI.isc_open_blob2	= (isc_open_blob2_t)dlsym(g_hIB5DLL, "isc_open_blob2");	assert(g_ibAPI.isc_open_blob2 != NULL);

	g_ibAPI.isc_prepare_transaction2	= (isc_prepare_transaction2_t)dlsym(g_hIB5DLL, "isc_prepare_transaction2");	assert(g_ibAPI.isc_prepare_transaction2 != NULL);
	g_ibAPI.isc_print_sqlerror	= (isc_print_sqlerror_t)dlsym(g_hIB5DLL, "isc_print_sqlerror");	assert(g_ibAPI.isc_print_sqlerror != NULL);
	g_ibAPI.isc_print_status	= (isc_print_status_t)dlsym(g_hIB5DLL, "isc_print_status");	assert(g_ibAPI.isc_print_status != NULL);
	g_ibAPI.isc_put_segment	= (isc_put_segment_t)dlsym(g_hIB5DLL, "isc_put_segment");	assert(g_ibAPI.isc_put_segment != NULL);
	g_ibAPI.isc_put_slice	= (isc_put_slice_t)dlsym(g_hIB5DLL, "isc_put_slice");	assert(g_ibAPI.isc_put_slice != NULL);
	g_ibAPI.isc_que_events	= (isc_que_events_t)dlsym(g_hIB5DLL, "isc_que_events");	assert(g_ibAPI.isc_que_events != NULL);
	g_ibAPI.isc_rollback_transaction	= (isc_rollback_transaction_t)dlsym(g_hIB5DLL, "isc_rollback_transaction");	assert(g_ibAPI.isc_rollback_transaction != NULL);
	g_ibAPI.isc_start_multiple	= (isc_start_multiple_t)dlsym(g_hIB5DLL, "isc_start_multiple");	assert(g_ibAPI.isc_start_multiple != NULL);

⌨️ 快捷键说明

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