fixed closing } dropped indentations
This commit is contained in:
parent
9ec0b25774
commit
6e396cea9d
|
@ -127,57 +127,58 @@ sqlsrv_conn* core_sqlsrv_connect( sqlsrv_context& henv_cp, sqlsrv_context& henv_
|
||||||
conn = conn_factory( temp_conn_h, err, driver TSRMLS_CC );
|
conn = conn_factory( temp_conn_h, err, driver TSRMLS_CC );
|
||||||
conn->set_func( driver_func );
|
conn->set_func( driver_func );
|
||||||
|
|
||||||
for( std::size_t i = DRIVER_VERSION::MIN; i <= DRIVER_VERSION::MAX; ++i ) {
|
for( std::size_t i = DRIVER_VERSION::MIN; i <= DRIVER_VERSION::MAX; ++i ) {
|
||||||
conn_str = CONNECTION_STRING_DRIVER_NAME[i];
|
conn_str = CONNECTION_STRING_DRIVER_NAME[i];
|
||||||
build_connection_string_and_set_conn_attr( conn, server, uid, pwd, options_ht, valid_conn_opts, driver, conn_str TSRMLS_CC );
|
build_connection_string_and_set_conn_attr(conn, server, uid, pwd, options_ht, valid_conn_opts, driver, conn_str TSRMLS_CC);
|
||||||
|
|
||||||
// We only support UTF-8 encoding for connection string.
|
|
||||||
// Convert our UTF-8 connection string to UTF-16 before connecting with SQLDriverConnnectW
|
|
||||||
wconn_len = static_cast<unsigned int>( conn_str.length() + 1 ) * sizeof( SQLWCHAR );
|
|
||||||
|
|
||||||
wconn_string = utf16_string_from_mbcs_string( SQLSRV_ENCODING_UTF8, conn_str.c_str(), static_cast<unsigned int>( conn_str.length() ), &wconn_len );
|
// We only support UTF-8 encoding for connection string.
|
||||||
|
// Convert our UTF-8 connection string to UTF-16 before connecting with SQLDriverConnnectW
|
||||||
CHECK_CUSTOM_ERROR( wconn_string == 0, conn, SQLSRV_ERROR_CONNECT_STRING_ENCODING_TRANSLATE, get_last_error_message() )
|
wconn_len = static_cast<unsigned int>( conn_str.length() + 1 ) * sizeof( SQLWCHAR );
|
||||||
{
|
|
||||||
throw core::CoreException();
|
wconn_string = utf16_string_from_mbcs_string( SQLSRV_ENCODING_UTF8, conn_str.c_str(), static_cast<unsigned int>(conn_str.length()), &wconn_len );
|
||||||
}
|
|
||||||
|
CHECK_CUSTOM_ERROR( wconn_string == 0, conn, SQLSRV_ERROR_CONNECT_STRING_ENCODING_TRANSLATE, get_last_error_message())
|
||||||
SQLSMALLINT output_conn_size;
|
{
|
||||||
r = SQLDriverConnectW( conn->handle(), NULL, reinterpret_cast<SQLWCHAR*>( wconn_string.get() ),
|
throw core::CoreException();
|
||||||
static_cast<SQLSMALLINT>( wconn_len ), NULL, 0, &output_conn_size, SQL_DRIVER_NOPROMPT );
|
|
||||||
|
|
||||||
// clear the connection string from memory to remove sensitive data (such as a password).
|
|
||||||
memset( const_cast<char*>( conn_str.c_str()), 0, conn_str.size() );
|
|
||||||
memset( wconn_string, 0, wconn_len * sizeof( SQLWCHAR )); // wconn_len is the number of characters, not bytes
|
|
||||||
conn_str.clear();
|
|
||||||
if( !SQL_SUCCEEDED( r )) {
|
|
||||||
SQLCHAR state[SQL_SQLSTATE_BUFSIZE];
|
|
||||||
SQLSMALLINT len;
|
|
||||||
SQLRETURN r = SQLGetDiagField( SQL_HANDLE_DBC, conn->handle(), 1, SQL_DIAG_SQLSTATE, state, SQL_SQLSTATE_BUFSIZE, &len );
|
|
||||||
bool missing_driver_error = ( SQL_SUCCEEDED( r ) && state[0] == 'I' && state[1] == 'M' && state[2] == '0' && state[3] == '0' && state[4] == '2' );
|
|
||||||
// if it's a IM002, meaning that the correct ODBC driver is not installed
|
|
||||||
CHECK_CUSTOM_ERROR( missing_driver_error && ( i == DRIVER_VERSION::MAX ), conn, SQLSRV_ERROR_DRIVER_NOT_INSTALLED, get_processor_arch()) {
|
|
||||||
throw core::CoreException();
|
|
||||||
}
|
}
|
||||||
if ( !missing_driver_error ) {
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
conn->driver_version = static_cast<DRIVER_VERSION>( i );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
CHECK_SQL_ERROR( r, conn ) {
|
|
||||||
throw core::CoreException();
|
|
||||||
}
|
|
||||||
|
|
||||||
CHECK_SQL_WARNING_AS_ERROR( r, conn ) {
|
SQLSMALLINT output_conn_size;
|
||||||
throw core::CoreException();
|
r = SQLDriverConnectW( conn->handle(), NULL, reinterpret_cast<SQLWCHAR*>(wconn_string.get()),
|
||||||
}
|
static_cast<SQLSMALLINT>(wconn_len), NULL, 0, &output_conn_size, SQL_DRIVER_NOPROMPT);
|
||||||
|
|
||||||
// determine the version of the server we're connected to. The server version is left in the
|
// clear the connection string from memory to remove sensitive data (such as a password).
|
||||||
// connection upon return.
|
memset( const_cast<char*>(conn_str.c_str()), 0, conn_str.size());
|
||||||
determine_server_version( conn TSRMLS_CC );
|
memset( wconn_string, 0, wconn_len * sizeof( SQLWCHAR )); // wconn_len is the number of characters, not bytes
|
||||||
|
conn_str.clear();
|
||||||
|
if( !SQL_SUCCEEDED( r )) {
|
||||||
|
SQLCHAR state[ SQL_SQLSTATE_BUFSIZE ];
|
||||||
|
SQLSMALLINT len;
|
||||||
|
SQLRETURN r = SQLGetDiagField( SQL_HANDLE_DBC, conn->handle(), 1, SQL_DIAG_SQLSTATE, state, SQL_SQLSTATE_BUFSIZE, &len );
|
||||||
|
bool missing_driver_error = ( SQL_SUCCEEDED(r) && state[0] == 'I' && state[1] == 'M' && state[2] == '0' && state[3] == '0' && state[4] == '2' );
|
||||||
|
// if it's a IM002, meaning that the correct ODBC driver is not installed
|
||||||
|
CHECK_CUSTOM_ERROR( missing_driver_error && ( i == DRIVER_VERSION::MAX ), conn, SQLSRV_ERROR_DRIVER_NOT_INSTALLED, get_processor_arch()) {
|
||||||
|
throw core::CoreException();
|
||||||
|
}
|
||||||
|
if( !missing_driver_error ) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
conn->driver_version = static_cast<DRIVER_VERSION>( i );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CHECK_SQL_ERROR( r, conn ) {
|
||||||
|
throw core::CoreException();
|
||||||
|
}
|
||||||
|
|
||||||
|
CHECK_SQL_WARNING_AS_ERROR( r, conn ) {
|
||||||
|
throw core::CoreException();
|
||||||
|
}
|
||||||
|
|
||||||
|
// determine the version of the server we're connected to. The server version is left in the
|
||||||
|
// connection upon return.
|
||||||
|
determine_server_version( conn TSRMLS_CC );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch( std::bad_alloc& ) {
|
catch( std::bad_alloc& ) {
|
||||||
memset( const_cast<char*>( conn_str.c_str()), 0, conn_str.size() );
|
memset( const_cast<char*>( conn_str.c_str()), 0, conn_str.size() );
|
||||||
|
|
Loading…
Reference in a new issue