in sql-odbc/src/sqlodbc/options.c [263:421]
RETCODE SQL_API OPENSEARCHAPI_SetConnectOption(HDBC hdbc, SQLUSMALLINT fOption,
SQLULEN vParam) {
CSTR func = "OPENSEARCHAPI_SetConnectOption";
ConnectionClass *conn = (ConnectionClass *)hdbc;
char changed = FALSE;
RETCODE retval;
BOOL autocomm_on;
MYLOG(OPENSEARCH_TRACE, "entering fOption = %d vParam = " FORMAT_LEN "\n", fOption,
vParam);
if (!conn) {
CC_log_error(func, "", NULL);
return SQL_INVALID_HANDLE;
}
switch (fOption) {
/*
* Statement Options (apply to all stmts on the connection and
* become defaults for new stmts)
*/
case SQL_ASYNC_ENABLE:
case SQL_BIND_TYPE:
case SQL_CONCURRENCY:
case SQL_CURSOR_TYPE:
case SQL_KEYSET_SIZE:
case SQL_MAX_LENGTH:
case SQL_MAX_ROWS:
case SQL_NOSCAN:
case SQL_QUERY_TIMEOUT:
case SQL_RETRIEVE_DATA:
case SQL_ROWSET_SIZE:
case SQL_SIMULATE_CURSOR:
case SQL_USE_BOOKMARKS:
/*
* Become the default for all future statements on this
* connection
*/
retval = set_statement_option(conn, NULL, fOption, vParam);
if (retval == SQL_SUCCESS_WITH_INFO)
changed = TRUE;
else if (retval == SQL_ERROR)
return SQL_ERROR;
break;
/*
* Connection Options
*/
case SQL_ACCESS_MODE: /* ignored */
break;
case SQL_AUTOCOMMIT:
switch (vParam) {
case SQL_AUTOCOMMIT_ON:
autocomm_on = TRUE;
break;
default:
CC_set_error(conn, CONN_INVALID_ARGUMENT_NO,
"Illegal parameter value for SQL_AUTOCOMMIT. "
"Turning SQL_AUTOCOMMIT off requires "
"transactions, which are not supported.",
func);
return SQL_ERROR;
}
if (autocomm_on && SQL_AUTOCOMMIT_OFF != conn->autocommit_public)
break;
else if (!autocomm_on
&& SQL_AUTOCOMMIT_OFF == conn->autocommit_public)
break;
conn->autocommit_public =
(autocomm_on ? SQL_AUTOCOMMIT_ON : SQL_AUTOCOMMIT_OFF);
MYLOG(OPENSEARCH_DEBUG,
"AUTOCOMMIT: transact_status=%d, vparam=" FORMAT_LEN "\n",
conn->transact_status, vParam);
CC_set_autocommit(conn, autocomm_on);
break;
case SQL_CURRENT_QUALIFIER: /* ignored */
break;
case SQL_LOGIN_TIMEOUT:
conn->login_timeout = (SQLUINTEGER)vParam;
break;
case SQL_PACKET_SIZE: /* ignored */
break;
case SQL_QUIET_MODE: /* ignored */
break;
case SQL_TXN_ISOLATION:
if (conn->isolation == vParam)
break;
/*
* If the connection is not established, just record the setting to
* reflect it upon connection.
*/
if (CC_not_connected(conn)) {
conn->isolation = (UInt4)vParam;
break;
}
conn->isolation = (UInt4)vParam;
break;
/* These options should be handled by driver manager */
case SQL_ODBC_CURSORS:
case SQL_OPT_TRACE:
case SQL_OPT_TRACEFILE:
case SQL_TRANSLATE_DLL:
case SQL_TRANSLATE_OPTION:
CC_log_error(
func,
"This connect option (Set) is only used by the Driver Manager",
conn);
break;
default: {
char option[64];
CC_set_error(conn, CONN_UNSUPPORTED_OPTION,
"Unknown connect option (Set)", func);
SPRINTF_FIXED(option, "fOption=%d, vParam=" FORMAT_LEN, fOption,
vParam);
#ifdef WIN32
if (fOption == 30002 && vParam) {
int cmp;
#ifdef UNICODE_SUPPORT
if (CC_is_in_unicode_driver(conn)) {
char *asPara =
ucs2_to_utf8((SQLWCHAR *)vParam, SQL_NTS, NULL, FALSE);
cmp = strcmp(asPara, "Microsoft Jet");
free(asPara);
} else
#endif /* UNICODE_SUPPORT */
cmp = strncmp((char *)vParam, "Microsoft Jet", 13);
if (0 == cmp) {
MYLOG(OPENSEARCH_DEBUG, "Microsoft Jet !!!!\n");
CC_set_errornumber(conn, 0);
conn->ms_jet = 1;
return SQL_SUCCESS;
}
}
#endif /* WIN32 */
CC_log_error(func, option, conn);
return SQL_ERROR;
}
}
if (changed) {
CC_set_error(conn, CONN_OPTION_VALUE_CHANGED,
"Requested value changed.", func);
return SQL_SUCCESS_WITH_INFO;
} else
return SQL_SUCCESS;
}