odbcapi30.c

来自「postgresql-odbc,跨平台应用」· C语言 代码 · 共 662 行 · 第 1/2 页

C
662
字号
	ret = SQL_SUCCESS;	switch (Attribute)	{		case SQL_ATTR_CONNECTION_POOLING:			*((unsigned int *) Value) = EN_is_pooling(env) ? SQL_CP_ONE_PER_DRIVER : SQL_CP_OFF;			break;		case SQL_ATTR_CP_MATCH:			*((unsigned int *) Value) = SQL_CP_RELAXED_MATCH;			break;		case SQL_ATTR_ODBC_VERSION:			*((unsigned int *) Value) = EN_is_odbc2(env) ? SQL_OV_ODBC2 : SQL_OV_ODBC3;			break;		case SQL_ATTR_OUTPUT_NTS:			*((unsigned int *) Value) = SQL_TRUE;			break;		default:			env->errornumber = CONN_INVALID_ARGUMENT_NO;			ret = SQL_ERROR;	}	LEAVE_ENV_CS(env);	return ret;}/*	SQLGetConnectOption -> SQLGetconnectAttr */RETCODE		SQL_APISQLGetConnectAttr(HDBC ConnectionHandle,				  SQLINTEGER Attribute, PTR Value,				  SQLINTEGER BufferLength, SQLINTEGER *StringLength){	RETCODE	ret;	mylog("[[SQLGetConnectAttr]] %d\n", Attribute);	ENTER_CONN_CS((ConnectionClass *) ConnectionHandle);	CC_clear_error((ConnectionClass *) ConnectionHandle);	ret = PGAPI_GetConnectAttr(ConnectionHandle, Attribute,Value,			BufferLength, StringLength);	LEAVE_CONN_CS((ConnectionClass *) ConnectionHandle);	return ret;}/*	SQLGetStmtOption -> SQLGetStmtAttr */RETCODE		SQL_APISQLGetStmtAttr(HSTMT StatementHandle,			   SQLINTEGER Attribute, PTR Value,			   SQLINTEGER BufferLength, SQLINTEGER *StringLength){	RETCODE	ret;	CSTR func = "SQLGetStmtAttr";	StatementClass	*stmt = (StatementClass *) StatementHandle;	mylog("[[%s]] Handle=%u %d\n", func, StatementHandle, Attribute);	ENTER_STMT_CS(stmt);	SC_clear_error(stmt);	StartRollbackState(stmt);	ret = PGAPI_GetStmtAttr(StatementHandle, Attribute, Value,			BufferLength, StringLength);	ret = DiscardStatementSvp(stmt,ret, FALSE);	LEAVE_STMT_CS(stmt);	return ret;}/*	SQLSetConnectOption -> SQLSetConnectAttr */RETCODE		SQL_APISQLSetConnectAttr(HDBC ConnectionHandle,				  SQLINTEGER Attribute, PTR Value,				  SQLINTEGER StringLength){	RETCODE	ret;	ConnectionClass *conn = (ConnectionClass *) ConnectionHandle;	mylog("[[SQLSetConnectAttr]] %d\n", Attribute);	ENTER_CONN_CS(conn);	CC_clear_error(conn);	ret = PGAPI_SetConnectAttr(ConnectionHandle, Attribute, Value,				  StringLength);	LEAVE_CONN_CS(conn);	return ret;}/*	new function */RETCODE		SQL_APISQLSetDescField(SQLHDESC DescriptorHandle,				SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier,				PTR Value, SQLINTEGER BufferLength){	RETCODE		ret;	mylog("[[SQLSetDescField]] h=%p rec=%d field=%d val=%p\n", DescriptorHandle, RecNumber, FieldIdentifier, Value);	ret = PGAPI_SetDescField(DescriptorHandle, RecNumber, FieldIdentifier,				Value, BufferLength);	return ret;}/*	new fucntion */RETCODE		SQL_APISQLSetDescRec(SQLHDESC DescriptorHandle,			  SQLSMALLINT RecNumber, SQLSMALLINT Type,			  SQLSMALLINT SubType, SQLLEN Length,			  SQLSMALLINT Precision, SQLSMALLINT Scale,			  PTR Data, SQLLEN *StringLength,			  SQLLEN *Indicator){	CSTR func = "SQLSetDescRec";	mylog("[[SQLSetDescRec]]\n");	mylog("Error not implemented\n");	return SQL_ERROR;}/*	new function */RETCODE		SQL_APISQLSetEnvAttr(HENV EnvironmentHandle,			  SQLINTEGER Attribute, PTR Value,			  SQLINTEGER StringLength){	RETCODE	ret;	EnvironmentClass *env = (EnvironmentClass *) EnvironmentHandle;	mylog("[[SQLSetEnvAttr]] att=%d,%u\n", Attribute, Value);	ENTER_ENV_CS(env);	switch (Attribute)	{		case SQL_ATTR_CONNECTION_POOLING:			switch ((ULONG_PTR) Value)			{			 	case SQL_CP_OFF:					EN_unset_pooling(env);					ret = SQL_SUCCESS;					break;#if defined(WIN_MULTITHREAD_SUPPORT) || defined(POSIX_MULTITHREAD_SUPPORT)				case SQL_CP_ONE_PER_DRIVER:					EN_set_pooling(env);					ret = SQL_SUCCESS;					break;#endif /* WIN_MULTITHREAD_SUPPORT */				default:					ret = SQL_SUCCESS_WITH_INFO;			}			break;		case SQL_ATTR_CP_MATCH:			/* *((unsigned int *) Value) = SQL_CP_RELAXED_MATCH; */			ret = SQL_SUCCESS;			break;		case SQL_ATTR_ODBC_VERSION:			if (SQL_OV_ODBC2 == CAST_UPTR(SQLUINTEGER, Value))				EN_set_odbc2(env);			else				EN_set_odbc3(env);			ret = SQL_SUCCESS;			break;		case SQL_ATTR_OUTPUT_NTS:			if (SQL_TRUE == CAST_UPTR(SQLUINTEGER, Value))				ret = SQL_SUCCESS;			else				ret = SQL_SUCCESS_WITH_INFO;				break;		default:			env->errornumber = CONN_INVALID_ARGUMENT_NO;			ret = SQL_ERROR;	}	if (SQL_SUCCESS_WITH_INFO == ret)	{		env->errornumber = CONN_OPTION_VALUE_CHANGED;		env->errormsg = "SetEnv changed to ";	}	LEAVE_ENV_CS(env);	return ret;}/*	SQLSet(Param/Scroll/Stmt)Option -> SQLSetStmtAttr */RETCODE		SQL_APISQLSetStmtAttr(HSTMT StatementHandle,			   SQLINTEGER Attribute, PTR Value,			   SQLINTEGER StringLength){	CSTR func = "SQLSetStmtAttr";	StatementClass *stmt = (StatementClass *) StatementHandle;	RETCODE	ret;	mylog("[[%s]] Handle=%p %d,%u\n", func, StatementHandle, Attribute, Value);	ENTER_STMT_CS(stmt);	SC_clear_error(stmt);	StartRollbackState(stmt);	ret = PGAPI_SetStmtAttr(StatementHandle, Attribute, Value, StringLength);	ret = DiscardStatementSvp(stmt,ret, FALSE);	LEAVE_STMT_CS(stmt);	return ret;}#define SQL_FUNC_ESET(pfExists, uwAPI) \		(*(((UWORD*) (pfExists)) + ((uwAPI) >> 4)) \			|= (1 << ((uwAPI) & 0x000F)) \				)RETCODE		SQL_APIPGAPI_GetFunctions30(HDBC hdbc, SQLUSMALLINT fFunction, SQLUSMALLINT FAR * pfExists){	ConnectionClass	*conn = (ConnectionClass *) hdbc;	ConnInfo	*ci = &(conn->connInfo);inolog("lie=%d\n", ci->drivers.lie);	CC_clear_error(conn);	if (fFunction != SQL_API_ODBC3_ALL_FUNCTIONS)		return SQL_ERROR;	memset(pfExists, 0, sizeof(UWORD) * SQL_API_ODBC3_ALL_FUNCTIONS_SIZE);	/* SQL_FUNC_ESET(pfExists, SQL_API_SQLALLOCCONNECT); 1 deprecated */	/* SQL_FUNC_ESET(pfExists, SQL_API_SQLALLOCENV); 2 deprecated */	/* SQL_FUNC_ESET(pfExists, SQL_API_SQLALLOCSTMT); 3 deprecated */	/*	 * for (i = SQL_API_SQLBINDCOL; i <= 23; i++) SQL_FUNC_ESET(pfExists,	 * i);	 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLBINDCOL);		/* 4 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLCANCEL);		/* 5 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLCOLATTRIBUTE);	/* 6 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLCONNECT);		/* 7 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLDESCRIBECOL);	/* 8 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLDISCONNECT);		/* 9 */	/* SQL_FUNC_ESET(pfExists, SQL_API_SQLERROR);  10 deprecated */	SQL_FUNC_ESET(pfExists, SQL_API_SQLEXECDIRECT);		/* 11 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLEXECUTE);		/* 12 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLFETCH);	/* 13 */	/* SQL_FUNC_ESET(pfExists, SQL_API_SQLFREECONNECT); 14 deprecated */	/* SQL_FUNC_ESET(pfExists, SQL_API_SQLFREEENV); 15 deprecated */	SQL_FUNC_ESET(pfExists, SQL_API_SQLFREESTMT);		/* 16 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLGETCURSORNAME);	/* 17 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLNUMRESULTCOLS);	/* 18 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLPREPARE);		/* 19 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLROWCOUNT);		/* 20 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLSETCURSORNAME);	/* 21 */	/* SQL_FUNC_ESET(pfExists, SQL_API_SQLSETPARAM); 22 deprecated */	/* SQL_FUNC_ESET(pfExists, SQL_API_SQLTRANSACT); 23 deprecated */	/*	 * for (i = 40; i < SQL_API_SQLEXTENDEDFETCH; i++)	 * SQL_FUNC_ESET(pfExists, i);	 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLCOLUMNS);		/* 40 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLDRIVERCONNECT);	/* 41 */	/* SQL_FUNC_ESET(pfExists, SQL_API_SQLGETCONNECTOPTION); 42 deprecated */	SQL_FUNC_ESET(pfExists, SQL_API_SQLGETDATA);		/* 43 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLGETFUNCTIONS);	/* 44 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLGETINFO);		/* 45 */	/* SQL_FUNC_ESET(pfExists, SQL_API_SQLGETSTMTOPTION); 46 deprecated */	SQL_FUNC_ESET(pfExists, SQL_API_SQLGETTYPEINFO);	/* 47 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLPARAMDATA);		/* 48 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLPUTDATA);		/* 49 */	/* SQL_FUNC_ESET(pfExists, SQL_API_SQLSETCONNECTIONOPTION); 50 deprecated */	/* SQL_FUNC_ESET(pfExists, SQL_API_SQLSETSTMTOPTION); 51 deprecated */	SQL_FUNC_ESET(pfExists, SQL_API_SQLSPECIALCOLUMNS);	/* 52 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLSTATISTICS);		/* 53 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLTABLES);		/* 54 */	if (ci->drivers.lie)		SQL_FUNC_ESET(pfExists, SQL_API_SQLBROWSECONNECT);	/* 55 */	if (ci->drivers.lie)		SQL_FUNC_ESET(pfExists, SQL_API_SQLCOLUMNPRIVILEGES);	/* 56 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLDATASOURCES);	/* 57 */	if (SUPPORT_DESCRIBE_PARAM(ci) || ci->drivers.lie)		SQL_FUNC_ESET(pfExists, SQL_API_SQLDESCRIBEPARAM); /* 58 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLEXTENDEDFETCH); /* 59 deprecated ? */	/*	 * for (++i; i < SQL_API_SQLBINDPARAMETER; i++)	 * SQL_FUNC_ESET(pfExists, i);	 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLFOREIGNKEYS);	/* 60 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLMORERESULTS);	/* 61 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLNATIVESQL);		/* 62 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLNUMPARAMS);		/* 63 */	/* SQL_FUNC_ESET(pfExists, SQL_API_SQLPARAMOPTIONS); 64 deprecated */	SQL_FUNC_ESET(pfExists, SQL_API_SQLPRIMARYKEYS);	/* 65 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLPROCEDURECOLUMNS);	/* 66 */ 	SQL_FUNC_ESET(pfExists, SQL_API_SQLPROCEDURES);		/* 67 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLSETPOS);		/* 68 */	/* SQL_FUNC_ESET(pfExists, SQL_API_SQLSETSCROLLOPTIONS); 69 deprecated */	SQL_FUNC_ESET(pfExists, SQL_API_SQLTABLEPRIVILEGES);	/* 70 */	/* SQL_FUNC_ESET(pfExists, SQL_API_SQLDRIVERS); */	/* 71 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLBINDPARAMETER);	/* 72 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLALLOCHANDLE);	/* 1001 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLBINDPARAM);		/* 1002 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLCLOSECURSOR);	/* 1003 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLCOPYDESC);		/* 1004 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLENDTRAN);		/* 1005 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLFREEHANDLE);		/* 1006 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLGETCONNECTATTR);	/* 1007 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLGETDESCFIELD); 	/* 1008 */	if (ci->drivers.lie)	{		SQL_FUNC_ESET(pfExists, SQL_API_SQLGETDESCREC); /* 1009 not implemented yet */	}	SQL_FUNC_ESET(pfExists, SQL_API_SQLGETDIAGFIELD); /* 1010 minimal implementation */	SQL_FUNC_ESET(pfExists, SQL_API_SQLGETDIAGREC);		/* 1011 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLGETENVATTR);		/* 1012 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLGETSTMTATTR);	/* 1014 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLSETCONNECTATTR);	/* 1016 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLSETDESCFIELD);	/* 1017 */	if (ci->drivers.lie)	{		SQL_FUNC_ESET(pfExists, SQL_API_SQLSETDESCREC); /* 1018 not implemented yet */	}	SQL_FUNC_ESET(pfExists, SQL_API_SQLSETENVATTR);		/* 1019 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLSETSTMTATTR);	/* 1020 */	SQL_FUNC_ESET(pfExists, SQL_API_SQLFETCHSCROLL);	/* 1021 */	if (0 != (ALLOW_BULK_OPERATIONS & ci->updatable_cursors))		SQL_FUNC_ESET(pfExists, SQL_API_SQLBULKOPERATIONS);	/* 24 */	return SQL_SUCCESS;}RETCODE	SQL_APISQLBulkOperations(HSTMT hstmt, SQLSMALLINT operation){	RETCODE	ret;	CSTR func = "SQLBulkOperations";	StatementClass	*stmt = (StatementClass *) hstmt;	ENTER_STMT_CS(stmt);	mylog("[[%s]] Handle=%p %d\n", func, hstmt, operation);	SC_clear_error(stmt);	StartRollbackState(stmt);	ret = PGAPI_BulkOperations(hstmt, operation);	ret = DiscardStatementSvp(stmt,ret, FALSE);	LEAVE_STMT_CS(stmt);	return ret;}	#endif /* ODBCVER >= 0x0300 */

⌨️ 快捷键说明

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