odbcapiw.c

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

C
932
字号
}RETCODE  SQL_API SQLStatisticsW(HSTMT StatementHandle,           SQLWCHAR *CatalogName, SQLSMALLINT NameLength1,           SQLWCHAR *SchemaName, SQLSMALLINT NameLength2,           SQLWCHAR *TableName, SQLSMALLINT NameLength3,           SQLUSMALLINT Unique, SQLUSMALLINT Reserved){	CSTR func = "SQLStatisticsW";	RETCODE	ret;	char	*ctName, *scName, *tbName;	SQLLEN	nmlen1, nmlen2, nmlen3;	StatementClass *stmt = (StatementClass *) StatementHandle;	ConnectionClass *conn;	BOOL lower_id;	mylog("[%s]", func);	conn = SC_get_conn(stmt);	lower_id = SC_is_lower_case(stmt, conn);	ctName = ucs2_to_utf8(CatalogName, NameLength1, &nmlen1, lower_id);	scName = ucs2_to_utf8(SchemaName, NameLength2, &nmlen2, lower_id);	tbName = ucs2_to_utf8(TableName, NameLength3, &nmlen3, lower_id);	ENTER_STMT_CS(stmt);	SC_clear_error(stmt);	StartRollbackState(stmt);	if (SC_opencheck(stmt, func))		ret = SQL_ERROR;	else		ret = PGAPI_Statistics(StatementHandle, ctName, (SQLSMALLINT) nmlen1,           scName, (SQLSMALLINT) nmlen2, tbName, (SQLSMALLINT) nmlen3, Unique,		Reserved);	ret = DiscardStatementSvp(stmt, ret, FALSE);	LEAVE_STMT_CS(stmt);	if (ctName)		free(ctName);	if (scName)		free(scName);	if (tbName)		free(tbName);	return ret;}RETCODE  SQL_API SQLTablesW(HSTMT StatementHandle,           SQLWCHAR *CatalogName, SQLSMALLINT NameLength1,           SQLWCHAR *SchemaName, SQLSMALLINT NameLength2,           SQLWCHAR *TableName, SQLSMALLINT NameLength3,           SQLWCHAR *TableType, SQLSMALLINT NameLength4){	CSTR func = "SQLTablesW";	RETCODE	ret;	char	*ctName, *scName, *tbName, *tbType;	SQLLEN	nmlen1, nmlen2, nmlen3, nmlen4;	StatementClass *stmt = (StatementClass *) StatementHandle;	ConnectionClass *conn;	BOOL lower_id;	UWORD	flag = 0;	mylog("[%s]", func);	conn = SC_get_conn(stmt);	lower_id = SC_is_lower_case(stmt, conn);	ctName = ucs2_to_utf8(CatalogName, NameLength1, &nmlen1, lower_id);	scName = ucs2_to_utf8(SchemaName, NameLength2, &nmlen2, lower_id);	tbName = ucs2_to_utf8(TableName, NameLength3, &nmlen3, lower_id);	tbType = ucs2_to_utf8(TableType, NameLength4, &nmlen4, FALSE);	ENTER_STMT_CS(stmt);	SC_clear_error(stmt);	StartRollbackState(stmt);#if (ODBCVER >= 0x0300)	if (stmt->options.metadata_id)		flag |= PODBC_NOT_SEARCH_PATTERN;#endif	if (SC_opencheck(stmt, func))		ret = SQL_ERROR;	else		ret = PGAPI_Tables(StatementHandle, ctName, (SQLSMALLINT) nmlen1,           		scName, (SQLSMALLINT) nmlen2, tbName, (SQLSMALLINT) nmlen3,           		tbType, (SQLSMALLINT) nmlen4, flag);	ret = DiscardStatementSvp(stmt, ret, FALSE);	LEAVE_STMT_CS(stmt);	if (ctName)		free(ctName);	if (scName)		free(scName);	if (tbName)		free(tbName);	if (tbType)		free(tbType);	return ret;}RETCODE SQL_API SQLColumnPrivilegesW(    HSTMT           hstmt,    SQLWCHAR 		  *szCatalogName,    SQLSMALLINT        cbCatalogName,    SQLWCHAR 		  *szSchemaName,    SQLSMALLINT        cbSchemaName,    SQLWCHAR 		  *szTableName,    SQLSMALLINT        cbTableName,    SQLWCHAR 		  *szColumnName,    SQLSMALLINT        cbColumnName){	CSTR func = "SQLColumnPrivilegesW";	RETCODE	ret;	char	*ctName, *scName, *tbName, *clName;	SQLLEN	nmlen1, nmlen2, nmlen3, nmlen4;	StatementClass *stmt = (StatementClass *) hstmt;	ConnectionClass *conn;	BOOL	lower_id;	UWORD	flag = 0; 	mylog("[%s]", func);	conn = SC_get_conn(stmt);	lower_id = SC_is_lower_case(stmt, conn);	ctName = ucs2_to_utf8(szCatalogName, cbCatalogName, &nmlen1, lower_id);	scName = ucs2_to_utf8(szSchemaName, cbSchemaName, &nmlen2, lower_id);	tbName = ucs2_to_utf8(szTableName, cbTableName, &nmlen3, lower_id);	clName = ucs2_to_utf8(szColumnName, cbColumnName, &nmlen4, lower_id);	ENTER_STMT_CS(stmt);	SC_clear_error(stmt);	StartRollbackState(stmt);#if (ODBCVER >= 0x0300)	if (stmt->options.metadata_id)		flag |= PODBC_NOT_SEARCH_PATTERN;#endif	if (SC_opencheck(stmt, func))		ret = SQL_ERROR;	else		ret = PGAPI_ColumnPrivileges(hstmt, ctName, (SQLSMALLINT) nmlen1,			scName, (SQLSMALLINT) nmlen2, tbName, (SQLSMALLINT) nmlen3,			clName, (SQLSMALLINT) nmlen4, flag);	ret = DiscardStatementSvp(stmt, ret, FALSE);	LEAVE_STMT_CS(stmt);	if (ctName)		free(ctName);	if (scName)		free(scName);	if (tbName)		free(tbName);	if (clName)		free(clName);	return ret;}RETCODE SQL_API SQLForeignKeysW(    HSTMT           hstmt,    SQLWCHAR 		  *szPkCatalogName,    SQLSMALLINT        cbPkCatalogName,    SQLWCHAR 		  *szPkSchemaName,    SQLSMALLINT        cbPkSchemaName,    SQLWCHAR 		  *szPkTableName,    SQLSMALLINT        cbPkTableName,    SQLWCHAR 		  *szFkCatalogName,    SQLSMALLINT        cbFkCatalogName,    SQLWCHAR 		  *szFkSchemaName,    SQLSMALLINT        cbFkSchemaName,    SQLWCHAR 		  *szFkTableName,    SQLSMALLINT        cbFkTableName){	CSTR func = "SQLForeignKeysW";	RETCODE	ret;	char	*ctName, *scName, *tbName, *fkctName, *fkscName, *fktbName;	SQLLEN	nmlen1, nmlen2, nmlen3, nmlen4, nmlen5, nmlen6;	StatementClass *stmt = (StatementClass *) hstmt;	ConnectionClass *conn;	BOOL	lower_id; 	mylog("[%s]", func);	conn = SC_get_conn(stmt);	lower_id = SC_is_lower_case(stmt, conn);	ctName = ucs2_to_utf8(szPkCatalogName, cbPkCatalogName, &nmlen1, lower_id);	scName = ucs2_to_utf8(szPkSchemaName, cbPkSchemaName, &nmlen2, lower_id);	tbName = ucs2_to_utf8(szPkTableName, cbPkTableName, &nmlen3, lower_id);	fkctName = ucs2_to_utf8(szFkCatalogName, cbFkCatalogName, &nmlen4, lower_id);	fkscName = ucs2_to_utf8(szFkSchemaName, cbFkSchemaName, &nmlen5, lower_id);	fktbName = ucs2_to_utf8(szFkTableName, cbFkTableName, &nmlen6, lower_id);	ENTER_STMT_CS(stmt);	SC_clear_error(stmt);	StartRollbackState(stmt);	if (SC_opencheck(stmt, func))		ret = SQL_ERROR;	else		ret = PGAPI_ForeignKeys(hstmt, ctName, (SQLSMALLINT) nmlen1,			scName, (SQLSMALLINT) nmlen2, tbName, (SQLSMALLINT) nmlen3,			fkctName, (SQLSMALLINT) nmlen4, fkscName, (SQLSMALLINT) nmlen5,			fktbName, (SQLSMALLINT) nmlen6);	ret = DiscardStatementSvp(stmt, ret, FALSE);	LEAVE_STMT_CS(stmt);	if (ctName)		free(ctName);	if (scName)		free(scName);	if (tbName)		free(tbName);	if (fkctName)		free(fkctName);	if (fkscName)		free(fkscName);	if (fktbName)		free(fktbName);	return ret;}RETCODE SQL_API SQLNativeSqlW(    HDBC            hdbc,    SQLWCHAR 		  *szSqlStrIn,    SQLINTEGER         cbSqlStrIn,    SQLWCHAR 		  *szSqlStr,    SQLINTEGER         cbSqlStrMax,    SQLINTEGER 		  *pcbSqlStr){	CSTR func = "SQLNativeSqlW";	RETCODE		ret;	char		*szIn, *szOut = NULL;	SQLLEN		slen;	SQLINTEGER	buflen, olen;	ConnectionClass *conn = (ConnectionClass *) hdbc;	mylog("[%s}", func);	ENTER_CONN_CS(conn);	CC_clear_error(conn);	CC_set_in_unicode_driver(conn);	szIn = ucs2_to_utf8(szSqlStrIn, cbSqlStrIn, &slen, FALSE);	buflen = 3 * cbSqlStrMax;	if (buflen > 0)		szOut = malloc(buflen);	for (;; buflen = olen + 1, szOut = realloc(szOut, buflen))	{		ret = PGAPI_NativeSql(hdbc, szIn, (SQLINTEGER) slen,			szOut, buflen, &olen);		if (SQL_SUCCESS_WITH_INFO != ret || olen < buflen)			break;	}	if (szIn)		free(szIn);	if (SQL_SUCCEEDED(ret))	{		SQLLEN	szcount = olen;		if (olen < buflen)			szcount = utf8_to_ucs2(szOut, olen, szSqlStr, cbSqlStrMax);		if (SQL_SUCCESS == ret && szcount > cbSqlStrMax)		{			ConnectionClass	*conn = (ConnectionClass *) hdbc;			ret = SQL_SUCCESS_WITH_INFO;			CC_set_error(conn, CONN_TRUNCATED, "Sql string too large", func);		}		if (pcbSqlStr)			*pcbSqlStr = (SQLINTEGER) szcount;	}	LEAVE_CONN_CS(conn);	free(szOut);	return ret;}RETCODE SQL_API SQLPrimaryKeysW(    HSTMT           hstmt,    SQLWCHAR 		  *szCatalogName,    SQLSMALLINT        cbCatalogName,    SQLWCHAR 		  *szSchemaName,    SQLSMALLINT        cbSchemaName,    SQLWCHAR 		  *szTableName,    SQLSMALLINT        cbTableName){	CSTR func = "SQLPrimaryKeysW";	RETCODE	ret;	char	*ctName, *scName, *tbName;	SQLLEN	nmlen1, nmlen2, nmlen3;	StatementClass *stmt = (StatementClass *) hstmt;	ConnectionClass *conn;	BOOL	lower_id; 	mylog("[%s]", func);	conn = SC_get_conn(stmt);	lower_id = SC_is_lower_case(stmt, conn);	ctName = ucs2_to_utf8(szCatalogName, cbCatalogName, &nmlen1, lower_id);	scName = ucs2_to_utf8(szSchemaName, cbSchemaName, &nmlen2, lower_id);	tbName = ucs2_to_utf8(szTableName, cbTableName, &nmlen3, lower_id);	ENTER_STMT_CS(stmt);	SC_clear_error(stmt);	StartRollbackState(stmt);	if (SC_opencheck(stmt, func))		ret = SQL_ERROR;	else		ret = PGAPI_PrimaryKeys(hstmt, ctName, (SQLSMALLINT) nmlen1,			scName, (SQLSMALLINT) nmlen2, tbName, (SQLSMALLINT) nmlen3, 0);	ret = DiscardStatementSvp(stmt, ret, FALSE);	LEAVE_STMT_CS(stmt);	if (ctName)		free(ctName);	if (scName)		free(scName);	if (tbName)		free(tbName);	return ret;}RETCODE SQL_API SQLProcedureColumnsW(    HSTMT           hstmt,    SQLWCHAR 		  *szCatalogName,    SQLSMALLINT        cbCatalogName,    SQLWCHAR 		  *szSchemaName,    SQLSMALLINT        cbSchemaName,    SQLWCHAR 		  *szProcName,    SQLSMALLINT        cbProcName,    SQLWCHAR 		  *szColumnName,    SQLSMALLINT        cbColumnName){	CSTR func = "SQLProcedureColumnsW";	RETCODE	ret;	char	*ctName, *scName, *prName, *clName;	SQLLEN	nmlen1, nmlen2, nmlen3, nmlen4;	StatementClass *stmt = (StatementClass *) hstmt;	ConnectionClass *conn;	BOOL	lower_id;	UWORD	flag = 0; 	mylog("[%s]", func);	conn = SC_get_conn(stmt);	lower_id = SC_is_lower_case(stmt, conn);	ctName = ucs2_to_utf8(szCatalogName, cbCatalogName, &nmlen1, lower_id);	scName = ucs2_to_utf8(szSchemaName, cbSchemaName, &nmlen2, lower_id);	prName = ucs2_to_utf8(szProcName, cbProcName, &nmlen3, lower_id);	clName = ucs2_to_utf8(szColumnName, cbColumnName, &nmlen4, lower_id);	ENTER_STMT_CS(stmt);	SC_clear_error(stmt);	StartRollbackState(stmt);#if (ODBCVER >= 0x0300)	if (stmt->options.metadata_id)		flag |= PODBC_NOT_SEARCH_PATTERN;#endif	if (SC_opencheck(stmt, func))		ret = SQL_ERROR;	else		ret = PGAPI_ProcedureColumns(hstmt, ctName, (SQLSMALLINT) nmlen1,			scName, (SQLSMALLINT) nmlen2, prName, (SQLSMALLINT) nmlen3,			clName, (SQLSMALLINT) nmlen4, flag);	ret = DiscardStatementSvp(stmt, ret, FALSE);	LEAVE_STMT_CS(stmt);	if (ctName)		free(ctName);	if (scName)		free(scName);	if (prName)		free(prName);	if (clName)		free(clName);	return ret;}RETCODE SQL_API SQLProceduresW(    HSTMT           hstmt,    SQLWCHAR 		  *szCatalogName,    SQLSMALLINT        cbCatalogName,    SQLWCHAR 		  *szSchemaName,    SQLSMALLINT        cbSchemaName,    SQLWCHAR 		  *szProcName,    SQLSMALLINT        cbProcName){	CSTR func = "SQLProceduresW";	RETCODE	ret;	char	*ctName, *scName, *prName;	SQLLEN	nmlen1, nmlen2, nmlen3;	StatementClass *stmt = (StatementClass *) hstmt;	ConnectionClass *conn;	BOOL	lower_id;	UWORD	flag = 0; 	mylog("[%s]", func);	conn = SC_get_conn(stmt);	lower_id = SC_is_lower_case(stmt, conn);	ctName = ucs2_to_utf8(szCatalogName, cbCatalogName, &nmlen1, lower_id);	scName = ucs2_to_utf8(szSchemaName, cbSchemaName, &nmlen2, lower_id);	prName = ucs2_to_utf8(szProcName, cbProcName, &nmlen3, lower_id);	ENTER_STMT_CS(stmt);	SC_clear_error(stmt);	StartRollbackState(stmt);#if (ODBCVER >= 0x0300)	if (stmt->options.metadata_id)		flag |= PODBC_NOT_SEARCH_PATTERN;#endif	if (SC_opencheck(stmt, func))		ret = SQL_ERROR;	else		ret = PGAPI_Procedures(hstmt, ctName, (SQLSMALLINT) nmlen1,					scName, (SQLSMALLINT) nmlen2, prName,					 (SQLSMALLINT) nmlen3, flag);	ret = DiscardStatementSvp(stmt, ret, FALSE);	LEAVE_STMT_CS(stmt);	if (ctName)		free(ctName);	if (scName)		free(scName);	if (prName)		free(prName);	return ret;}RETCODE SQL_API SQLTablePrivilegesW(    HSTMT           hstmt,    SQLWCHAR 		  *szCatalogName,    SQLSMALLINT        cbCatalogName,    SQLWCHAR 		  *szSchemaName,    SQLSMALLINT        cbSchemaName,    SQLWCHAR 		  *szTableName,    SQLSMALLINT        cbTableName){	CSTR func = "SQLTablePrivilegesW";	RETCODE	ret;	char	*ctName, *scName, *tbName;	SQLLEN	nmlen1, nmlen2, nmlen3;	StatementClass *stmt = (StatementClass *) hstmt;	ConnectionClass *conn;	BOOL	lower_id; 	UWORD	flag = 0; 	mylog("[%s]", func);	conn = SC_get_conn(stmt);	lower_id = SC_is_lower_case(stmt, conn);	ctName = ucs2_to_utf8(szCatalogName, cbCatalogName, &nmlen1, lower_id);	scName = ucs2_to_utf8(szSchemaName, cbSchemaName, &nmlen2, lower_id);	tbName = ucs2_to_utf8(szTableName, cbTableName, &nmlen3, lower_id);	ENTER_STMT_CS((StatementClass *) hstmt);	SC_clear_error(stmt);	StartRollbackState(stmt);#if (ODBCVER >= 0x0300)	if (stmt->options.metadata_id)		flag |= PODBC_NOT_SEARCH_PATTERN;#endif	if (SC_opencheck(stmt, func))		ret = SQL_ERROR;	else		ret = PGAPI_TablePrivileges(hstmt, ctName, (SQLSMALLINT) nmlen1,			scName, (SQLSMALLINT) nmlen2, tbName, (SQLSMALLINT) nmlen3, flag);	ret = DiscardStatementSvp(stmt, ret, FALSE);	LEAVE_STMT_CS((StatementClass *) hstmt);	if (ctName)		free(ctName);	if (scName)		free(scName);	if (tbName)		free(tbName);	return ret;}RETCODE SQL_API	SQLGetTypeInfoW(		SQLHSTMT	StatementHandle,		SQLSMALLINT	DataType){	CSTR func = "SQLGetTypeInfoW";	RETCODE	ret;	StatementClass * stmt = (StatementClass *) StatementHandle;	mylog("[%s]", func);	ENTER_STMT_CS(stmt);	SC_clear_error(stmt);	StartRollbackState(stmt);	if (SC_opencheck(stmt, func))		ret = SQL_ERROR;	else		ret = PGAPI_GetTypeInfo(StatementHandle, DataType);	ret = DiscardStatementSvp(stmt, ret, FALSE);	LEAVE_STMT_CS(stmt);	return ret;}

⌨️ 快捷键说明

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