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

📄 odbcapi_linux.cpp

📁 通用的数据库中间库
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	g_odbcAPI.SQLGetDescRec			= (SQLGetDescRec_t)::dlsym(g_hODBCDLL, "SQLGetDescRec");				assert(g_odbcAPI.SQLGetDescRec != NULL);
	g_odbcAPI.SQLGetDiagField		= (SQLGetDiagField_t)::dlsym(g_hODBCDLL, "SQLGetDiagField");			assert(g_odbcAPI.SQLGetDiagField != NULL);
	g_odbcAPI.SQLGetDiagRec			= (SQLGetDiagRec_t)::dlsym(g_hODBCDLL, "SQLGetDiagRec");				assert(g_odbcAPI.SQLGetDiagRec != NULL);
	g_odbcAPI.SQLGetEnvAttr			= (SQLGetEnvAttr_t)::dlsym(g_hODBCDLL, "SQLGetEnvAttr");				assert(g_odbcAPI.SQLGetEnvAttr != NULL);
	g_odbcAPI.SQLGetFunctions		= (SQLGetFunctions_t)::dlsym(g_hODBCDLL, "SQLGetFunctions");			assert(g_odbcAPI.SQLGetFunctions != NULL);
	g_odbcAPI.SQLGetInfo			= (SQLGetInfo_t)::dlsym(g_hODBCDLL, "SQLGetInfo");						assert(g_odbcAPI.SQLGetInfo != NULL);
	g_odbcAPI.SQLGetStmtAttr		= (SQLGetStmtAttr_t)::dlsym(g_hODBCDLL, "SQLGetStmtAttr");				assert(g_odbcAPI.SQLGetStmtAttr != NULL);
	g_odbcAPI.SQLGetStmtOption		= (SQLGetStmtOption_t)::dlsym(g_hODBCDLL, "SQLGetStmtOption");			assert(g_odbcAPI.SQLGetStmtOption != NULL);
	g_odbcAPI.SQLGetTypeInfo		= (SQLGetTypeInfo_t)::dlsym(g_hODBCDLL, "SQLGetTypeInfo");				assert(g_odbcAPI.SQLGetTypeInfo != NULL);
	g_odbcAPI.SQLMoreResults		= (SQLMoreResults_t)::dlsym(g_hODBCDLL, "SQLMoreResults");				assert(g_odbcAPI.SQLMoreResults != NULL);
	g_odbcAPI.SQLNativeSql			= (SQLNativeSql_t)::dlsym(g_hODBCDLL, "SQLNativeSql");					assert(g_odbcAPI.SQLNativeSql != NULL);
	g_odbcAPI.SQLNumParams			= (SQLNumParams_t)::dlsym(g_hODBCDLL, "SQLNumParams");					assert(g_odbcAPI.SQLNumParams != NULL);
	g_odbcAPI.SQLNumResultCols		= (SQLNumResultCols_t)::dlsym(g_hODBCDLL, "SQLNumResultCols");			assert(g_odbcAPI.SQLNumResultCols != NULL);
	g_odbcAPI.SQLParamData			= (SQLParamData_t)::dlsym(g_hODBCDLL, "SQLParamData");					assert(g_odbcAPI.SQLParamData != NULL);
	g_odbcAPI.SQLParamOptions		= (SQLParamOptions_t)::dlsym(g_hODBCDLL, "SQLParamOptions");			assert(g_odbcAPI.SQLParamOptions != NULL);
	g_odbcAPI.SQLPrepare			= (SQLPrepare_t)::dlsym(g_hODBCDLL, "SQLPrepare");						assert(g_odbcAPI.SQLPrepare != NULL);
	g_odbcAPI.SQLPrimaryKeys		= (SQLPrimaryKeys_t)::dlsym(g_hODBCDLL, "SQLPrimaryKeys");				assert(g_odbcAPI.SQLPrimaryKeys != NULL);
	g_odbcAPI.SQLProcedureColumns	= (SQLProcedureColumns_t)::dlsym(g_hODBCDLL, "SQLProcedureColumns");	assert(g_odbcAPI.SQLProcedureColumns != NULL);
	g_odbcAPI.SQLProcedures			= (SQLProcedures_t)::dlsym(g_hODBCDLL, "SQLProcedures");				assert(g_odbcAPI.SQLProcedures != NULL);
	g_odbcAPI.SQLPutData			= (SQLPutData_t)::dlsym(g_hODBCDLL, "SQLPutData");						assert(g_odbcAPI.SQLPutData != NULL);
	g_odbcAPI.SQLRowCount			= (SQLRowCount_t)::dlsym(g_hODBCDLL, "SQLRowCount");					assert(g_odbcAPI.SQLRowCount != NULL);
	g_odbcAPI.SQLSetConnectAttr		= (SQLSetConnectAttr_t)::dlsym(g_hODBCDLL, "SQLSetConnectAttr");		assert(g_odbcAPI.SQLSetConnectAttr != NULL);
	g_odbcAPI.SQLSetConnectOption	= (SQLSetConnectOption_t)::dlsym(g_hODBCDLL, "SQLSetConnectOption");	assert(g_odbcAPI.SQLSetConnectOption != NULL);
	g_odbcAPI.SQLSetCursorName		= (SQLSetCursorName_t)::dlsym(g_hODBCDLL, "SQLSetCursorName");			assert(g_odbcAPI.SQLSetCursorName != NULL);
	g_odbcAPI.SQLSetDescField		= (SQLSetDescField_t)::dlsym(g_hODBCDLL, "SQLSetDescField");			assert(g_odbcAPI.SQLSetDescField != NULL);
	g_odbcAPI.SQLSetDescRec			= (SQLSetDescRec_t)::dlsym(g_hODBCDLL, "SQLSetDescRec");				assert(g_odbcAPI.SQLSetDescRec != NULL);
	g_odbcAPI.SQLSetEnvAttr			= (SQLSetEnvAttr_t)::dlsym(g_hODBCDLL, "SQLSetEnvAttr");				assert(g_odbcAPI.SQLSetEnvAttr != NULL);
	g_odbcAPI.SQLSetParam			= (SQLSetParam_t)::dlsym(g_hODBCDLL, "SQLSetParam");					assert(g_odbcAPI.SQLSetParam != NULL);
	g_odbcAPI.SQLSetPos				= (SQLSetPos_t)::dlsym(g_hODBCDLL, "SQLSetPos");						assert(g_odbcAPI.SQLSetPos != NULL);
	g_odbcAPI.SQLSetScrollOptions	= (SQLSetScrollOptions_t)::dlsym(g_hODBCDLL, "SQLSetScrollOptions");	assert(g_odbcAPI.SQLSetScrollOptions != NULL);
	g_odbcAPI.SQLSetStmtAttr		= (SQLSetStmtAttr_t)::dlsym(g_hODBCDLL, "SQLSetStmtAttr");				assert(g_odbcAPI.SQLSetStmtAttr != NULL);
	g_odbcAPI.SQLSetStmtOption		= (SQLSetStmtOption_t)::dlsym(g_hODBCDLL, "SQLSetStmtOption");			assert(g_odbcAPI.SQLSetStmtOption != NULL);
	g_odbcAPI.SQLSpecialColumns		= (SQLSpecialColumns_t)::dlsym(g_hODBCDLL, "SQLSpecialColumns");		assert(g_odbcAPI.SQLSpecialColumns != NULL);
	g_odbcAPI.SQLStatistics			= (SQLStatistics_t)::dlsym(g_hODBCDLL, "SQLStatistics");				assert(g_odbcAPI.SQLStatistics != NULL);
	g_odbcAPI.SQLTablePrivileges	= (SQLTablePrivileges_t)::dlsym(g_hODBCDLL, "SQLTablePrivileges");		assert(g_odbcAPI.SQLTablePrivileges != NULL);
	g_odbcAPI.SQLTables				= (SQLTables_t)::dlsym(g_hODBCDLL, "SQLTables");						assert(g_odbcAPI.SQLTables != NULL);
	g_odbcAPI.SQLTransact			= (SQLTransact_t)::dlsym(g_hODBCDLL, "SQLTransact");					assert(g_odbcAPI.SQLTransact != NULL);
}

static void ResetAPI()
{
	g_odbcAPI.SQLAllocConnect = NULL;		// 1.0
	g_odbcAPI.SQLAllocEnv = NULL;			// 1.0
	g_odbcAPI.SQLAllocHandle = NULL;		// 3.0
	g_odbcAPI.SQLAllocStmt = NULL;			// 1.0
	g_odbcAPI.SQLBindCol = NULL;			// 1.0
	g_odbcAPI.SQLBindParameter = NULL;		// 2.0
	g_odbcAPI.SQLBrowseConnect = NULL;		// 1.0
	g_odbcAPI.SQLBulkOperations = NULL;		// 3.0
	g_odbcAPI.SQLCancel = NULL;				// 1.0
	g_odbcAPI.SQLCloseCursor = NULL;		// 3.0
	g_odbcAPI.SQLColAttribute = NULL;		// 3,0
	g_odbcAPI.SQLColAttributes = NULL;		// 1.0
	g_odbcAPI.SQLColumnPrivileges = NULL;	// 1.0
	g_odbcAPI.SQLColumns = NULL;			// 1.0
	g_odbcAPI.SQLConnect = NULL;			// 1.0
	g_odbcAPI.SQLCopyDesc = NULL;			// 3.0
	g_odbcAPI.SQLDataSources = NULL;		// 1.0
	g_odbcAPI.SQLDescribeCol = NULL;		// 1.0
	g_odbcAPI.SQLDescribeParam = NULL;		// 1.0
	g_odbcAPI.SQLDisconnect = NULL;			// 1.0
	g_odbcAPI.SQLDriverConnect = NULL;		// 1.0
	g_odbcAPI.SQLDrivers = NULL;			// 2.0
	g_odbcAPI.SQLEndTran = NULL;			// 3.0
	g_odbcAPI.SQLError = NULL;				// 1.0
	g_odbcAPI.SQLExecDirect = NULL;			// 1.0
	g_odbcAPI.SQLExecute = NULL;			// 1.0
	g_odbcAPI.SQLExtendedFetch = NULL;		// 1.0
	g_odbcAPI.SQLFetch = NULL;				// 1.0
	g_odbcAPI.SQLFetchScroll = NULL;		// 1.0
	g_odbcAPI.SQLForeignKeys = NULL;		// 1.0
	g_odbcAPI.SQLFreeConnect = NULL;		// 1.0
	g_odbcAPI.SQLFreeEnv = NULL;			// 1.0
	g_odbcAPI.SQLFreeHandle = NULL;			// 3.0
	g_odbcAPI.SQLFreeStmt = NULL;			// 1.0
	g_odbcAPI.SQLGetConnectAttr = NULL;		// 3.0
	g_odbcAPI.SQLGetConnectOption = NULL;	// 1.0
	g_odbcAPI.SQLGetCursorName = NULL;		// 1.0
	g_odbcAPI.SQLGetData = NULL;			// 1.0
	g_odbcAPI.SQLGetDescField = NULL;		// 3.0
	g_odbcAPI.SQLGetDescRec = NULL;			// 3.0
	g_odbcAPI.SQLGetDiagField = NULL;		// 3.0
	g_odbcAPI.SQLGetDiagRec = NULL;			// 3.0
	g_odbcAPI.SQLGetEnvAttr = NULL;			// 3.0
	g_odbcAPI.SQLGetFunctions = NULL;		// 1.0
	g_odbcAPI.SQLGetInfo = NULL;			// 1.0
	g_odbcAPI.SQLGetStmtAttr = NULL;		// 3.0
	g_odbcAPI.SQLGetStmtOption = NULL;		// 1.0
	g_odbcAPI.SQLGetTypeInfo = NULL;		// 1.0
	g_odbcAPI.SQLMoreResults = NULL;		// 1.0
	g_odbcAPI.SQLNativeSql = NULL;			// 1.0
	g_odbcAPI.SQLNumParams = NULL;			// 1.0
	g_odbcAPI.SQLNumResultCols = NULL;		// 1.0
	g_odbcAPI.SQLParamData = NULL;			// 1.0
	g_odbcAPI.SQLParamOptions = NULL;		// 1.0
	g_odbcAPI.SQLPrepare = NULL;			// 1.0
	g_odbcAPI.SQLPrimaryKeys = NULL;		// 1.0
	g_odbcAPI.SQLProcedureColumns = NULL;	// 1.0
	g_odbcAPI.SQLProcedures = NULL;			// 1.0
	g_odbcAPI.SQLPutData = NULL;			// 1.0
	g_odbcAPI.SQLRowCount = NULL;			// 1.0
	g_odbcAPI.SQLSetConnectAttr = NULL;		// 3.0
	g_odbcAPI.SQLSetConnectOption = NULL;	// 1.0
	g_odbcAPI.SQLSetCursorName = NULL;		// 1.0
	g_odbcAPI.SQLSetDescField = NULL;		// 3.0
	g_odbcAPI.SQLSetDescRec = NULL;			// 3.0
	g_odbcAPI.SQLSetEnvAttr = NULL;			// 3.0
	g_odbcAPI.SQLSetParam = NULL;			// 1.0
	g_odbcAPI.SQLSetPos = NULL;				// 1.0
	g_odbcAPI.SQLSetScrollOptions = NULL;	// 1.0
	g_odbcAPI.SQLSetStmtAttr = NULL;		// 3.0
	g_odbcAPI.SQLSetStmtOption = NULL;		// 1.0
	g_odbcAPI.SQLSpecialColumns = NULL;		// 1.0
	g_odbcAPI.SQLStatistics = NULL;			// 1.0
	g_odbcAPI.SQLTablePrivileges = NULL;	// 1.0
	g_odbcAPI.SQLTables = NULL;				// 1.0
	g_odbcAPI.SQLTransact = NULL;			// 1.0
}

void AddODBCSupport(const SAConnection *pCon)
{
	if(!g_hODBCDLL)
	{
		SAString s = pCon->Option("UseManagerOnUNIX");
		const char *sDLLName =
			s.IsEmpty()? g_sODBCDLLName : (const char*)s;

		// load ODBC API library
		g_hODBCDLL = ::dlopen(sDLLName, RTLD_LAZY);
		if(!g_hODBCDLL)
			throw SAException(SA_Library_Error, -1, -1, IDS_LOAD_LIBRARY_FAILS, ::dlerror(), sDLLName);

		LoadAPI();
	}

	g_nODBCDLLRefs++;
}

void ReleaseODBCSupport()
{
	assert(g_nODBCDLLRefs > 0);
	--g_nODBCDLLRefs;
	if(!g_nODBCDLLRefs)
	{
		ResetAPI();

		// SegFault		//::dlclose(g_hODBCDLL);
		g_hODBCDLL = NULL;
	}
}

⌨️ 快捷键说明

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