From f168779671e7041ba0e6074ef1d819678f4fa0e3 Mon Sep 17 00:00:00 2001 From: Jason Loscher Date: Thu, 30 Oct 2014 16:40:58 -0700 Subject: [PATCH] Updates for PHP 5.5, changing to use the Microsoft ODBC Driver 11 for SQL Server --- BuildProcessTemplates/DefaultTemplate.xaml | 602 ---- BuildProcessTemplates/UpgradeTemplate.xaml | 76 - pdo_sqlsrv/CREDITS | 2 +- pdo_sqlsrv/README.TXT | 8 +- pdo_sqlsrv/core_conn.cpp | 2 +- pdo_sqlsrv/core_results.cpp | 24 +- pdo_sqlsrv/core_sqlsrv.h | 27 +- pdo_sqlsrv/core_stmt.cpp | 10 +- pdo_sqlsrv/core_util.cpp | 82 +- pdo_sqlsrv/msodbcsql.h | 2343 +++++++++++++++ pdo_sqlsrv/pdo_sqlsrv.h | 17 +- pdo_sqlsrv/pdo_util.cpp | 6 +- pdo_sqlsrv/sqlncli.h | 3043 -------------------- pdo_sqlsrv/version.h | 26 +- sqlsrv/CREDITS | 2 +- sqlsrv/README.TXT | 8 +- sqlsrv/conn.cpp | 2 +- sqlsrv/core_conn.cpp | 2 +- sqlsrv/core_results.cpp | 24 +- sqlsrv/core_sqlsrv.h | 27 +- sqlsrv/core_stmt.cpp | 10 +- sqlsrv/core_util.cpp | 82 +- sqlsrv/msodbcsql.h | 2343 +++++++++++++++ sqlsrv/php_sqlsrv.h | 17 +- sqlsrv/sqlncli.h | 3043 -------------------- sqlsrv/stmt.cpp | 2 +- sqlsrv/util.cpp | 8 +- sqlsrv/version.h | 23 +- 28 files changed, 4916 insertions(+), 6945 deletions(-) delete mode 100644 BuildProcessTemplates/DefaultTemplate.xaml delete mode 100644 BuildProcessTemplates/UpgradeTemplate.xaml create mode 100644 pdo_sqlsrv/msodbcsql.h delete mode 100644 pdo_sqlsrv/sqlncli.h create mode 100644 sqlsrv/msodbcsql.h delete mode 100644 sqlsrv/sqlncli.h diff --git a/BuildProcessTemplates/DefaultTemplate.xaml b/BuildProcessTemplates/DefaultTemplate.xaml deleted file mode 100644 index eae035b2..00000000 --- a/BuildProcessTemplates/DefaultTemplate.xaml +++ /dev/null @@ -1,602 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Assembly references and imported namespaces serialized as XML namespaces - - - True - - - - - - - - - True - - - - - - - True - - - - - - - - - - - True - - - - - - - - - - - - - - - - - - - - True - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - - - - - - - - - - - - - - - - - - - True - - - - - - - - - - - - True - - - - - - - - - - - - - - True - - - - - - - - - - - - - - - - - - - True - - - - - - - - - - - - - - - - True - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - - - - - - - - - - - - - - - - - - - - - - True - - - - - - - - - True - - - - - - - - - - - - - - - True - - - - - - True - - - - - - - - - - - - - - - - - - - - - - - - - True - - - - - - - - - - - - - - - - - - False - - - - - - - - - - True - - - - - - - - - - - - - - - - - - - - - - - - - - True - - - - - - - - - - - - - - - - - - - - - True - - - - - - - - - - - - - - - - - - True - - - - - - - - - - - - - - - True - - - - - - - - - - - - - - - - - - - - - False - - - - - - - - - - True - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - False - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - - - - - - - - - - - - - - - - - - - - - - - - - False - - - - - - - - - - - - - - - - - - - - - - - - - - False - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/BuildProcessTemplates/UpgradeTemplate.xaml b/BuildProcessTemplates/UpgradeTemplate.xaml deleted file mode 100644 index 4877aa35..00000000 --- a/BuildProcessTemplates/UpgradeTemplate.xaml +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - [New Microsoft.TeamFoundation.Build.Workflow.Activities.AgentSettings() With {.MaxWaitTime = New System.TimeSpan(4, 0, 0), .MaxExecutionTime = New System.TimeSpan(0, 0, 0), .TagComparison = Microsoft.TeamFoundation.Build.Workflow.Activities.TagComparison.MatchExactly }] - - - - [Microsoft.TeamFoundation.Build.Workflow.Activities.ToolPlatform.Auto] - [False] - [False] - - - - - - - - - - [Microsoft.TeamFoundation.VersionControl.Client.RecursionType.OneLevel] - [Microsoft.TeamFoundation.Build.Workflow.BuildVerbosity.Normal] - - - - All - Assembly references and imported namespaces serialized as XML namespaces - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/pdo_sqlsrv/CREDITS b/pdo_sqlsrv/CREDITS index d5b1812a..baae5855 100644 --- a/pdo_sqlsrv/CREDITS +++ b/pdo_sqlsrv/CREDITS @@ -1 +1 @@ -Microsoft Drivers 3.0.1 for PHP for SQL Server (PDO driver) +Microsoft Drivers 3.1.0 for PHP for SQL Server (PDO driver) diff --git a/pdo_sqlsrv/README.TXT b/pdo_sqlsrv/README.TXT index c68afa5f..d1921c7f 100644 --- a/pdo_sqlsrv/README.TXT +++ b/pdo_sqlsrv/README.TXT @@ -14,13 +14,13 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -* Notes about changes to the Microsoft Drivers 3.0 for PHP for SQL Server * +* Notes about changes to the Microsoft Drivers 3.1 for PHP for SQL Server * For details about the changes included in this release, please see our blog at http://blogs.msdn.com/sqlphp or see the SQLSRV_Readme.htm file that is part of the download package. -* Notes about compiling the Microsoft Drivers 3.0 for PHP for SQL Server * +* Notes about compiling the Microsoft Drivers 3.1 for PHP for SQL Server * Prerequisites: @@ -28,7 +28,7 @@ Prerequisites: extensions. For help with doing this, see the official PHP website, http://php.net. -To compile the SQLSRV301 and PDO_SQLSRV301: +To compile the SQLSRV310 and PDO_SQLSRV310: 1) Copy the source code directories from this repository into the ext subdirectory. @@ -53,7 +53,7 @@ wish to do so, run "nmake clean" first. php_sqlsrv.dll and php_pdo_sqlsrv.dll to your PHP extension directory. Also enable them within your PHP installation's php.ini file. -This software has been compiled and tested under PHP 5.3.6 and later +This software has been compiled and tested under PHP 5.4.32 and later using the Visual C++ 2008 and 2010, Express and Standard compilers. * Note about version.h * diff --git a/pdo_sqlsrv/core_conn.cpp b/pdo_sqlsrv/core_conn.cpp index 4dcc4f8f..1596d24c 100644 --- a/pdo_sqlsrv/core_conn.cpp +++ b/pdo_sqlsrv/core_conn.cpp @@ -43,7 +43,7 @@ const int INFO_BUFFER_LEN = 256; const char* PROCESSOR_ARCH[] = { "x86", "x64", "ia64" }; // ODBC driver name. -const char CONNECTION_STRING_DRIVER_NAME[] = "Driver={SQL Server Native Client 11.0};"; +const char CONNECTION_STRING_DRIVER_NAME[] = "Driver={ODBC Driver 11 for SQL Server};"; // default options if only the server is specified const char CONNECTION_STRING_DEFAULT_OPTIONS[] = "Mars_Connection={Yes}"; diff --git a/pdo_sqlsrv/core_results.cpp b/pdo_sqlsrv/core_results.cpp index bce8061f..0a4e5738 100644 --- a/pdo_sqlsrv/core_results.cpp +++ b/pdo_sqlsrv/core_results.cpp @@ -153,14 +153,12 @@ struct row_dtor_closure { sqlsrv_error* odbc_get_diag_rec( sqlsrv_stmt* odbc, SQLSMALLINT record_number ) { SQLWCHAR wsql_state[ SQL_SQLSTATE_BUFSIZE ]; - SQLCHAR* sql_state = reinterpret_cast( wsql_state ); SQLWCHAR wnative_message[ SQL_MAX_MESSAGE_LENGTH + 1 ]; - sqlsrv_malloc_auto_ptr native_message; SQLINTEGER native_code; - SQLINTEGER message_len; + SQLSMALLINT wnative_message_len = 0; SQLRETURN r = SQLGetDiagRecW( SQL_HANDLE_STMT, odbc->handle(), record_number, wsql_state, &native_code, wnative_message, - SQL_MAX_MESSAGE_LENGTH + 1, NULL ); + SQL_MAX_MESSAGE_LENGTH + 1, &wnative_message_len ); if( !SQL_SUCCEEDED( r ) || r == SQL_NO_DATA ) { return NULL; } @@ -172,13 +170,17 @@ sqlsrv_error* odbc_get_diag_rec( sqlsrv_stmt* odbc, SQLSMALLINT record_number ) } // convert the error into the encoding of the context - message_len = SQL_SQLSTATE_BUFSIZE * sizeof(WCHAR); - convert_string_from_utf16( enc, reinterpret_cast( &sql_state ), message_len, - false /*no free*/ ); - message_len = (SQL_MAX_MESSAGE_LENGTH + 1) * sizeof( WCHAR ); - native_message = reinterpret_cast( wnative_message ); - convert_string_from_utf16( enc, reinterpret_cast( &native_message ), message_len, - false /*no free*/ ); + sqlsrv_malloc_auto_ptr sql_state; + SQLINTEGER sql_state_len = 0; + if (!convert_string_from_utf16( enc, wsql_state, sizeof(wsql_state), (char**)&sql_state, sql_state_len )) { + return NULL; + } + + sqlsrv_malloc_auto_ptr native_message; + SQLINTEGER native_message_len = 0; + if (!convert_string_from_utf16( enc, wnative_message, wnative_message_len, (char**)&native_message, native_message_len )) { + return NULL; + } return new (sqlsrv_malloc( sizeof( sqlsrv_error ))) sqlsrv_error( (SQLCHAR*) sql_state, (SQLCHAR*) native_message, native_code ); diff --git a/pdo_sqlsrv/core_sqlsrv.h b/pdo_sqlsrv/core_sqlsrv.h index 2fa940b4..be823403 100644 --- a/pdo_sqlsrv/core_sqlsrv.h +++ b/pdo_sqlsrv/core_sqlsrv.h @@ -6,21 +6,21 @@ // // Contents: Core routines and constants shared by the Microsoft Drivers for PHP for SQL Server // -// Copyright Microsoft Corporation -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// -// You may obtain a copy of the License at: -// http://www.apache.org/licenses/LICENSE-2.0 +// Microsoft Drivers for PHP for SQL Server +// Copyright (c) Microsoft Corporation. All rights reserved. // +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use these files except in compliance with the License. + +// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -//--------------------------------------------------------------------------------------------------------------------------------- - +// +//---------------------------------------------------------------------------------------------------------------------------------- //********************************************************************************************************************************* // Includes @@ -111,7 +111,7 @@ OACR_WARNING_POP #include // included for SQL Server specific constants -#include "sqlncli.h" +#include "msodbcsql.h" //********************************************************************************************************************************* // Constants and Types @@ -1502,7 +1502,8 @@ struct sqlsrv_buffered_result_set : public sqlsrv_result_set { #define MEMCHECK_SILENT 1 // utility functions shared by multiple callers across files -bool convert_string_from_utf16( SQLSRV_ENCODING encoding, char** string, SQLINTEGER& len, bool free_utf16 = true ); +bool convert_string_from_utf16_inplace( SQLSRV_ENCODING encoding, char** string, SQLINTEGER& len); +bool convert_string_from_utf16( SQLSRV_ENCODING encoding, const wchar_t* inString, SQLINTEGER cchInLen, char** outString, SQLINTEGER& cchOutLen ); wchar_t* utf16_string_from_mbcs_string( SQLSRV_ENCODING php_encoding, const char* mbcs_string, unsigned int mbcs_len, __out unsigned int* utf16_len ); @@ -1559,8 +1560,8 @@ enum SQLSRV_ERROR_CODES { }; -// the message returned by SQL Native Client -const char CONNECTION_BUSY_ODBC_ERROR[] = "[Microsoft][SQL Server Native Client 11.0]Connection is busy with results for " +// the message returned by ODBC Driver 11 for SQL Server +const char CONNECTION_BUSY_ODBC_ERROR[] = "[Microsoft][ODBC Driver 11 for SQL Server]Connection is busy with results for " "another command"; // SQLSTATE for all internal errors diff --git a/pdo_sqlsrv/core_stmt.cpp b/pdo_sqlsrv/core_stmt.cpp index 75b92e7d..64f4daaf 100644 --- a/pdo_sqlsrv/core_stmt.cpp +++ b/pdo_sqlsrv/core_stmt.cpp @@ -496,7 +496,7 @@ void core_sqlsrv_bind_param( sqlsrv_stmt* stmt, unsigned int param_num, int dire ind_ptr = buffer_len; if( direction != SQL_PARAM_INPUT ) { -#if PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION == 4 +#if PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION >= 4 // PHP 5.4 added interned strings, so since we obviously want to change that string here in some fashion, // we reallocate the string if it's interned if( IS_INTERNED( buffer )) { @@ -1762,7 +1762,7 @@ SQLSMALLINT default_c_type( sqlsrv_stmt* stmt, unsigned int paramno, zval const* sql_c_type = SQL_C_CHAR; break; } - break; + break; case IS_BOOL: case IS_LONG: sql_c_type = SQL_C_LONG; @@ -1991,7 +1991,7 @@ void finalize_output_parameters( sqlsrv_stmt* stmt TSRMLS_DC ) // if it's not in the 8 bit encodings, then it's in UTF-16 if( output_param->encoding != SQLSRV_ENCODING_CHAR && output_param->encoding != SQLSRV_ENCODING_BINARY ) { - bool converted = convert_string_from_utf16( output_param->encoding, &str, str_len ); + bool converted = convert_string_from_utf16_inplace( output_param->encoding, &str, str_len ); CHECK_CUSTOM_ERROR( !converted, stmt, SQLSRV_ERROR_OUTPUT_PARAM_ENCODING_TRANSLATE, get_last_error_message()) { throw core::CoreException(); } @@ -2179,7 +2179,7 @@ void get_field_as_string( sqlsrv_stmt* stmt, SQLUSMALLINT field_index, sqlsrv_ph if( sqlsrv_php_type.typeinfo.encoding == SQLSRV_ENCODING_UTF8 ) { - bool converted = convert_string_from_utf16( static_cast( sqlsrv_php_type.typeinfo.encoding ), + bool converted = convert_string_from_utf16_inplace( static_cast( sqlsrv_php_type.typeinfo.encoding ), &field_value_temp, field_len_temp ); CHECK_CUSTOM_ERROR( !converted, stmt, SQLSRV_ERROR_FIELD_ENCODING_TRANSLATE, get_last_error_message() ) { @@ -2223,7 +2223,7 @@ void get_field_as_string( sqlsrv_stmt* stmt, SQLUSMALLINT field_index, sqlsrv_ph if( sqlsrv_php_type.typeinfo.encoding == CP_UTF8 ) { - bool converted = convert_string_from_utf16( static_cast( sqlsrv_php_type.typeinfo.encoding ), + bool converted = convert_string_from_utf16_inplace( static_cast( sqlsrv_php_type.typeinfo.encoding ), &field_value_temp, field_len_temp ); CHECK_CUSTOM_ERROR( !converted, stmt, SQLSRV_ERROR_FIELD_ENCODING_TRANSLATE, get_last_error_message() ) { diff --git a/pdo_sqlsrv/core_util.cpp b/pdo_sqlsrv/core_util.cpp index a29cfe38..0b5a3468 100644 --- a/pdo_sqlsrv/core_util.cpp +++ b/pdo_sqlsrv/core_util.cpp @@ -71,18 +71,42 @@ void core_sqlsrv_register_logger( log_callback driver_logger ) // utf-16 string is released by this function if no errors occurred. Otherwise the parameters are not changed // and false is returned. -bool convert_string_from_utf16( SQLSRV_ENCODING encoding, char** string, SQLINTEGER& len, bool free_utf16 ) +bool convert_string_from_utf16_inplace( SQLSRV_ENCODING encoding, char** string, SQLINTEGER& len) { - char* utf16_string = *string; - unsigned int utf16_len = len / 2; // from # of bytes to # of wchars - char *enc_string = NULL; - unsigned int enc_len = 0; + SQLSRV_ASSERT( string != NULL && *string != NULL, "String must be specified" ); // for the empty string, we simply returned we converted it if( len == 0 && *string[0] == '\0' ) { return true; } + char* outString = NULL; + SQLINTEGER outLen = 0; + bool result = convert_string_from_utf16( encoding, reinterpret_cast(*string), len / sizeof(wchar_t), &outString, outLen); + + if (result) + { + sqlsrv_free( *string ); + *string = outString; + len = outLen; + } + + return result; +} + +bool convert_string_from_utf16( SQLSRV_ENCODING encoding, const wchar_t* inString, SQLINTEGER cchInLen, char** outString, SQLINTEGER& cchOutLen ) +{ + SQLSRV_ASSERT( inString != NULL, "Input string must be specified" ); + SQLSRV_ASSERT( outString != NULL, "Output buffer pointer must be specified" ); + SQLSRV_ASSERT( *outString == NULL, "Output buffer pointer must not be set" ); + + if (cchInLen == 0 && inString[0] == L'\0') { + *outString = reinterpret_cast( sqlsrv_malloc ( 1 ) ); + *outString[0] = '\0'; + cchOutLen = 0; + return true; + } + // flags set to 0 by default, which means that any invalid characters are dropped rather than causing // an error. This happens only on XP. DWORD flags = 0; @@ -92,28 +116,26 @@ bool convert_string_from_utf16( SQLSRV_ENCODING encoding, char** string, SQLINTE } // calculate the number of characters needed - enc_len = WideCharToMultiByte( encoding, flags, - reinterpret_cast( utf16_string ), utf16_len, + cchOutLen = WideCharToMultiByte( encoding, flags, + inString, cchInLen, NULL, 0, NULL, NULL ); - if( enc_len == 0 ) { - return false; - } - // we must allocate a new buffer because it is possible that a UTF-8 string is longer than - // the corresponding UTF-16 string, so we cannot use an inplace conversion - enc_string = reinterpret_cast( sqlsrv_malloc( enc_len + 1 /* NULL char*/ )); - int rc = WideCharToMultiByte( encoding, flags, - reinterpret_cast( utf16_string ), utf16_len, - enc_string, enc_len, NULL, NULL ); - if( rc == 0 ) { + if( cchOutLen == 0 ) { return false; } - enc_string[ enc_len ] = '\0'; // null terminate the encoded string - if( free_utf16 ) { - sqlsrv_free( utf16_string ); + // Create a buffer to fit the encoded string + char* newString = reinterpret_cast( sqlsrv_malloc( cchOutLen + 1 /* NULL char*/ )); + int rc = WideCharToMultiByte( encoding, flags, + inString, cchInLen, + newString, cchOutLen, NULL, NULL ); + if( rc == 0 ) { + cchOutLen = 0; + sqlsrv_free( newString ); + return false; } - *string = enc_string; - len = enc_len; + + *outString = newString; + newString[cchOutLen] = '\0'; // null terminate the encoded string return true; } @@ -161,9 +183,7 @@ bool core_sqlsrv_get_odbc_error( sqlsrv_context& ctx, int record_number, sqlsrv_ int zr = SUCCESS; zval* temp = NULL; SQLRETURN r = SQL_SUCCESS; - SQLINTEGER sqlstate_len = SQL_SQLSTATE_BUFSIZE * sizeof( wchar_t ); SQLSMALLINT wmessage_len = 0; - SQLINTEGER message_len = 0; SQLWCHAR wsqlstate[ SQL_SQLSTATE_BUFSIZE ]; SQLWCHAR wnative_message[ SQL_MAX_MESSAGE_LENGTH + 1 ]; SQLSRV_ENCODING enc = ctx.encoding(); @@ -200,15 +220,13 @@ bool core_sqlsrv_get_odbc_error( sqlsrv_context& ctx, int record_number, sqlsrv_ return false; } - error->sqlstate = reinterpret_cast( wsqlstate ); - convert_string_from_utf16( enc, reinterpret_cast( &error->sqlstate ), sqlstate_len, - false /*no free*/ ); - error->native_message = reinterpret_cast( wnative_message ); - message_len = wmessage_len * sizeof( wchar_t ); - convert_string_from_utf16( enc, reinterpret_cast( &error->native_message ), message_len, - false /*no free*/ ); + SQLINTEGER sqlstate_len = 0; + convert_string_from_utf16(enc, wsqlstate, sizeof(wsqlstate), (char**)&error->sqlstate, sqlstate_len); + + SQLINTEGER message_len = 0; + convert_string_from_utf16(enc, wnative_message, wmessage_len, (char**)&error->native_message, message_len); break; - } + } // log the error first diff --git a/pdo_sqlsrv/msodbcsql.h b/pdo_sqlsrv/msodbcsql.h new file mode 100644 index 00000000..a16bf59a --- /dev/null +++ b/pdo_sqlsrv/msodbcsql.h @@ -0,0 +1,2343 @@ +//----------------------------------------------------------------------------- +// File: msodbcsql.h +// +// Copyright: Copyright (c) Microsoft Corporation +// +// Contents: ODBC driver for SQL Server specific definitions. +// +//----------------------------------------------------------------------------- +#ifndef __msodbcsql_h__ +#define __msodbcsql_h__ + +#if !defined(SQLODBC_VER) +#define SQLODBC_VER 1100 +#endif + +#if SQLODBC_VER >= 1100 + +#define SQLODBC_PRODUCT_NAME_FULL_VER_ANSI "Microsoft ODBC Driver 11 for SQL Server" +#define SQLODBC_PRODUCT_NAME_FULL_ANSI "Microsoft ODBC Driver for SQL Server" +#define SQLODBC_PRODUCT_NAME_SHORT_VER_ANSI "ODBC Driver 11 for SQL Server" +#define SQLODBC_PRODUCT_NAME_SHORT_ANSI "ODBC Driver for SQL Server" + +#define SQLODBC_FILE_NAME_ANSI "msodbcsql" +#define SQLODBC_FILE_NAME_VER_ANSI "msodbcsql11" +#define SQLODBC_FILE_NAME_FULL_ANSI "msodbcsql11.dll" + +#define SQLODBC_PRODUCT_NAME_FULL_VER_UNICODE L"Microsoft ODBC Driver 11 for SQL Server" +#define SQLODBC_PRODUCT_NAME_FULL_UNICODE L"Microsoft ODBC Driver for SQL Server" +#define SQLODBC_PRODUCT_NAME_SHORT_VER_UNICODE L"ODBC Driver 11 for SQL Server" +#define SQLODBC_PRODUCT_NAME_SHORT_UNICODE L"ODBC Driver for SQL Server" + +#define SQLODBC_FILE_NAME_UNICODE L"msodbcsql" +#define SQLODBC_FILE_NAME_VER_UNICODE L"msodbcsql11" +#define SQLODBC_FILE_NAME_FULL_UNICODE L"msodbcsql11.dll" + +// define the character type agnostic constants +#if defined(_UNICODE) || defined(UNICODE) + +#define SQLODBC_PRODUCT_NAME_FULL_VER SQLODBC_PRODUCT_NAME_FULL_VER_UNICODE +#define SQLODBC_PRODUCT_NAME_FULL SQLODBC_PRODUCT_NAME_FULL_UNICODE +#define SQLODBC_PRODUCT_NAME_SHORT_VER SQLODBC_PRODUCT_NAME_SHORT_VER_UNICODE +#define SQLODBC_PRODUCT_NAME_SHORT SQLODBC_PRODUCT_NAME_SHORT_UNICODE + +#define SQLODBC_FILE_NAME SQLODBC_FILE_NAME_UNICODE +#define SQLODBC_FILE_NAME_VER SQLODBC_FILE_NAME_VER_UNICODE +#define SQLODBC_FILE_NAME_FULL SQLODBC_FILE_NAME_FULL_UNICODE + +#else // _UNICODE || UNICODE + +#define SQLODBC_PRODUCT_NAME_FULL_VER SQLODBC_PRODUCT_NAME_FULL_VER_ANSI +#define SQLODBC_PRODUCT_NAME_FULL SQLODBC_PRODUCT_NAME_FULL_ANSI +#define SQLODBC_PRODUCT_NAME_SHORT_VER SQLODBC_PRODUCT_NAME_SHORT_VER_ANSI +#define SQLODBC_PRODUCT_NAME_SHORT SQLODBC_PRODUCT_NAME_SHORT_ANSI + +#define SQLODBC_FILE_NAME SQLODBC_FILE_NAME_ANSI +#define SQLODBC_FILE_NAME_VER SQLODBC_FILE_NAME_VER_ANSI +#define SQLODBC_FILE_NAME_FULL SQLODBC_FILE_NAME_FULL_ANSI + +#endif // _UNICODE || UNICODE + +#define SQLODBC_DRIVER_NAME SQLODBC_PRODUCT_NAME_SHORT_VER + +#endif // SQLODBC_VER + +#ifndef __sqlncli_h__ + +#if !defined(SQLNCLI_VER) +#define SQLNCLI_VER 1100 +#endif + +#if SQLNCLI_VER >= 1100 + +#define SQLNCLI_PRODUCT_NAME_FULL_VER_ANSI "Microsoft SQL Server Native Client 11.0" +#define SQLNCLI_PRODUCT_NAME_FULL_ANSI "Microsoft SQL Server Native Client" +#define SQLNCLI_PRODUCT_NAME_SHORT_VER_ANSI "SQL Server Native Client 11.0" +#define SQLNCLI_PRODUCT_NAME_SHORT_ANSI "SQL Server Native Client" + +#define SQLNCLI_FILE_NAME_ANSI "sqlncli" +#define SQLNCLI_FILE_NAME_VER_ANSI "sqlncli11" +#define SQLNCLI_FILE_NAME_FULL_ANSI "sqlncli11.dll" + +#define SQLNCLI_PRODUCT_NAME_FULL_VER_UNICODE L"Microsoft SQL Server Native Client 11.0" +#define SQLNCLI_PRODUCT_NAME_FULL_UNICODE L"Microsoft SQL Server Native Client" +#define SQLNCLI_PRODUCT_NAME_SHORT_VER_UNICODE L"SQL Server Native Client 11.0" +#define SQLNCLI_PRODUCT_NAME_SHORT_UNICODE L"SQL Server Native Client" + +#define SQLNCLI_FILE_NAME_UNICODE L"sqlncli" +#define SQLNCLI_FILE_NAME_VER_UNICODE L"sqlncli11" +#define SQLNCLI_FILE_NAME_FULL_UNICODE L"sqlncli11.dll" + +#elif SQLNCLI_VER >= 1000 + +#define SQLNCLI_PRODUCT_NAME_FULL_VER_ANSI "Microsoft SQL Server Native Client 10.0" +#define SQLNCLI_PRODUCT_NAME_FULL_ANSI "Microsoft SQL Server Native Client" +#define SQLNCLI_PRODUCT_NAME_SHORT_VER_ANSI "SQL Server Native Client 10.0" +#define SQLNCLI_PRODUCT_NAME_SHORT_ANSI "SQL Server Native Client" + +#define SQLNCLI_FILE_NAME_ANSI "sqlncli" +#define SQLNCLI_FILE_NAME_VER_ANSI "sqlncli10" +#define SQLNCLI_FILE_NAME_FULL_ANSI "sqlncli10.dll" + +#define SQLNCLI_PRODUCT_NAME_FULL_VER_UNICODE L"Microsoft SQL Server Native Client 10.0" +#define SQLNCLI_PRODUCT_NAME_FULL_UNICODE L"Microsoft SQL Server Native Client" +#define SQLNCLI_PRODUCT_NAME_SHORT_VER_UNICODE L"SQL Server Native Client 10.0" +#define SQLNCLI_PRODUCT_NAME_SHORT_UNICODE L"SQL Server Native Client" + +#define SQLNCLI_FILE_NAME_UNICODE L"sqlncli" +#define SQLNCLI_FILE_NAME_VER_UNICODE L"sqlncli10" +#define SQLNCLI_FILE_NAME_FULL_UNICODE L"sqlncli10.dll" + +#else + +#define SQLNCLI_PRODUCT_NAME_FULL_VER_ANSI "Microsoft SQL Server Native Client" +#define SQLNCLI_PRODUCT_NAME_FULL_ANSI "Microsoft SQL Server Native Client" +#define SQLNCLI_PRODUCT_NAME_SHORT_VER_ANSI "SQL Native Client" +#define SQLNCLI_PRODUCT_NAME_SHORT_ANSI "SQL Native Client" + +#define SQLNCLI_FILE_NAME_ANSI "sqlncli" +#define SQLNCLI_FILE_NAME_VER_ANSI "sqlncli" +#define SQLNCLI_FILE_NAME_FULL_ANSI "sqlncli.dll" + +#define SQLNCLI_PRODUCT_NAME_FULL_VER_UNICODE L"Microsoft SQL Server Native Client" +#define SQLNCLI_PRODUCT_NAME_FULL_UNICODE L"Microsoft SQL Server Native Client" +#define SQLNCLI_PRODUCT_NAME_SHORT_VER_UNICODE L"SQL Native Client" +#define SQLNCLI_PRODUCT_NAME_SHORT_UNICODE L"SQL Native Client" + +#define SQLNCLI_FILE_NAME_UNICODE L"sqlncli" +#define SQLNCLI_FILE_NAME_VER_UNICODE L"sqlncli" +#define SQLNCLI_FILE_NAME_FULL_UNICODE L"sqlncli.dll" + +#endif // SQLNCLI_VER >= 1100 + +// define the character type agnostic constants +#if defined(_UNICODE) || defined(UNICODE) + +#define SQLNCLI_PRODUCT_NAME_FULL_VER SQLNCLI_PRODUCT_NAME_FULL_VER_UNICODE +#define SQLNCLI_PRODUCT_NAME_FULL SQLNCLI_PRODUCT_NAME_FULL_UNICODE +#define SQLNCLI_PRODUCT_NAME_SHORT_VER SQLNCLI_PRODUCT_NAME_SHORT_VER_UNICODE +#define SQLNCLI_PRODUCT_NAME_SHORT SQLNCLI_PRODUCT_NAME_SHORT_UNICODE + +#define SQLNCLI_FILE_NAME SQLNCLI_FILE_NAME_UNICODE +#define SQLNCLI_FILE_NAME_VER SQLNCLI_FILE_NAME_VER_UNICODE +#define SQLNCLI_FILE_NAME_FULL SQLNCLI_FILE_NAME_FULL_UNICODE + + +#else // _UNICODE || UNICODE + +#define SQLNCLI_PRODUCT_NAME_FULL_VER SQLNCLI_PRODUCT_NAME_FULL_VER_ANSI +#define SQLNCLI_PRODUCT_NAME_FULL SQLNCLI_PRODUCT_NAME_FULL_ANSI +#define SQLNCLI_PRODUCT_NAME_SHORT_VER SQLNCLI_PRODUCT_NAME_SHORT_VER_ANSI +#define SQLNCLI_PRODUCT_NAME_SHORT SQLNCLI_PRODUCT_NAME_SHORT_ANSI + +#define SQLNCLI_FILE_NAME SQLNCLI_FILE_NAME_ANSI +#define SQLNCLI_FILE_NAME_VER SQLNCLI_FILE_NAME_VER_ANSI +#define SQLNCLI_FILE_NAME_FULL SQLNCLI_FILE_NAME_FULL_ANSI + +#endif // _UNICODE || UNICODE + +#define SQLNCLI_DRIVER_NAME SQLNCLI_PRODUCT_NAME_SHORT_VER + + +#ifdef ODBCVER + +#ifdef __cplusplus +extern "C" { +#endif + +// max SQL Server identifier length +#define SQL_MAX_SQLSERVERNAME 128 + +// SQLSetConnectAttr driver specific defines. +// Microsoft has 1200 thru 1249 reserved for Microsoft SQL Server Native Client driver usage. +// Connection attributes +#define SQL_COPT_SS_BASE 1200 +#define SQL_COPT_SS_REMOTE_PWD (SQL_COPT_SS_BASE+1) // dbrpwset SQLSetConnectOption only +#define SQL_COPT_SS_USE_PROC_FOR_PREP (SQL_COPT_SS_BASE+2) // Use create proc for SQLPrepare +#define SQL_COPT_SS_INTEGRATED_SECURITY (SQL_COPT_SS_BASE+3) // Force integrated security on login +#define SQL_COPT_SS_PRESERVE_CURSORS (SQL_COPT_SS_BASE+4) // Preserve server cursors after SQLTransact +#define SQL_COPT_SS_USER_DATA (SQL_COPT_SS_BASE+5) // dbgetuserdata/dbsetuserdata +#define SQL_COPT_SS_ENLIST_IN_DTC SQL_ATTR_ENLIST_IN_DTC // Enlist in a DTC transaction +#define SQL_COPT_SS_ENLIST_IN_XA SQL_ATTR_ENLIST_IN_XA // Enlist in a XA transaction +#define SQL_COPT_SS_FALLBACK_CONNECT (SQL_COPT_SS_BASE+10) // Enables FallBack connections +#define SQL_COPT_SS_PERF_DATA (SQL_COPT_SS_BASE+11) // Used to access SQL Server ODBC driver performance data +#define SQL_COPT_SS_PERF_DATA_LOG (SQL_COPT_SS_BASE+12) // Used to set the logfile name for the Performance data +#define SQL_COPT_SS_PERF_QUERY_INTERVAL (SQL_COPT_SS_BASE+13) // Used to set the query logging threshold in milliseconds. +#define SQL_COPT_SS_PERF_QUERY_LOG (SQL_COPT_SS_BASE+14) // Used to set the logfile name for saving queryies. +#define SQL_COPT_SS_PERF_QUERY (SQL_COPT_SS_BASE+15) // Used to start and stop query logging. +#define SQL_COPT_SS_PERF_DATA_LOG_NOW (SQL_COPT_SS_BASE+16) // Used to make a statistics log entry to disk. +#define SQL_COPT_SS_QUOTED_IDENT (SQL_COPT_SS_BASE+17) // Enable/Disable Quoted Identifiers +#define SQL_COPT_SS_ANSI_NPW (SQL_COPT_SS_BASE+18) // Enable/Disable ANSI NULL, Padding and Warnings +#define SQL_COPT_SS_BCP (SQL_COPT_SS_BASE+19) // Allow BCP usage on connection +#define SQL_COPT_SS_TRANSLATE (SQL_COPT_SS_BASE+20) // Perform code page translation +#define SQL_COPT_SS_ATTACHDBFILENAME (SQL_COPT_SS_BASE+21) // File name to be attached as a database +#define SQL_COPT_SS_CONCAT_NULL (SQL_COPT_SS_BASE+22) // Enable/Disable CONCAT_NULL_YIELDS_NULL +#define SQL_COPT_SS_ENCRYPT (SQL_COPT_SS_BASE+23) // Allow strong encryption for data +#define SQL_COPT_SS_MARS_ENABLED (SQL_COPT_SS_BASE+24) // Multiple active result set per connection +#define SQL_COPT_SS_FAILOVER_PARTNER (SQL_COPT_SS_BASE+25) // Failover partner server +#define SQL_COPT_SS_OLDPWD (SQL_COPT_SS_BASE+26) // Old Password, used when changing password during login +#define SQL_COPT_SS_TXN_ISOLATION (SQL_COPT_SS_BASE+27) // Used to set/get any driver-specific or ODBC-defined TXN iso level +#define SQL_COPT_SS_TRUST_SERVER_CERTIFICATE (SQL_COPT_SS_BASE+28) // Trust server certificate +#define SQL_COPT_SS_SERVER_SPN (SQL_COPT_SS_BASE+29) // Server SPN +#define SQL_COPT_SS_FAILOVER_PARTNER_SPN (SQL_COPT_SS_BASE+30) // Failover partner server SPN +#define SQL_COPT_SS_INTEGRATED_AUTHENTICATION_METHOD (SQL_COPT_SS_BASE+31) // The integrated authentication method used for the connection +#define SQL_COPT_SS_MUTUALLY_AUTHENTICATED (SQL_COPT_SS_BASE+32) // Used to decide if the connection is mutually authenticated +#define SQL_COPT_SS_CLIENT_CONNECTION_ID (SQL_COPT_SS_BASE+33) // Post connection attribute used to get the ConnectionID +// Define old names +#define SQL_REMOTE_PWD SQL_COPT_SS_REMOTE_PWD +#define SQL_USE_PROCEDURE_FOR_PREPARE SQL_COPT_SS_USE_PROC_FOR_PREP +#define SQL_INTEGRATED_SECURITY SQL_COPT_SS_INTEGRATED_SECURITY +#define SQL_PRESERVE_CURSORS SQL_COPT_SS_PRESERVE_CURSORS + +// SQLSetStmtAttr SQL Server Native Client driver specific defines. +// Statement attributes +#define SQL_SOPT_SS_BASE 1225 +#define SQL_SOPT_SS_TEXTPTR_LOGGING (SQL_SOPT_SS_BASE+0) // Text pointer logging +#define SQL_SOPT_SS_CURRENT_COMMAND (SQL_SOPT_SS_BASE+1) // dbcurcmd SQLGetStmtOption only +#define SQL_SOPT_SS_HIDDEN_COLUMNS (SQL_SOPT_SS_BASE+2) // Expose FOR BROWSE hidden columns +#define SQL_SOPT_SS_NOBROWSETABLE (SQL_SOPT_SS_BASE+3) // Set NOBROWSETABLE option +#define SQL_SOPT_SS_REGIONALIZE (SQL_SOPT_SS_BASE+4) // Regionalize output character conversions +#define SQL_SOPT_SS_CURSOR_OPTIONS (SQL_SOPT_SS_BASE+5) // Server cursor options +#define SQL_SOPT_SS_NOCOUNT_STATUS (SQL_SOPT_SS_BASE+6) // Real vs. Not Real row count indicator +#define SQL_SOPT_SS_DEFER_PREPARE (SQL_SOPT_SS_BASE+7) // Defer prepare until necessary +#define SQL_SOPT_SS_QUERYNOTIFICATION_TIMEOUT (SQL_SOPT_SS_BASE+8) // Notification timeout +#define SQL_SOPT_SS_QUERYNOTIFICATION_MSGTEXT (SQL_SOPT_SS_BASE+9) // Notification message text +#define SQL_SOPT_SS_QUERYNOTIFICATION_OPTIONS (SQL_SOPT_SS_BASE+10)// SQL service broker name +#define SQL_SOPT_SS_PARAM_FOCUS (SQL_SOPT_SS_BASE+11)// Direct subsequent calls to parameter related methods to set properties on constituent columns/parameters of container types +#define SQL_SOPT_SS_NAME_SCOPE (SQL_SOPT_SS_BASE+12)// Sets name scope for subsequent catalog function calls +#define SQL_SOPT_SS_MAX_USED SQL_SOPT_SS_NAME_SCOPE +// Define old names +#define SQL_TEXTPTR_LOGGING SQL_SOPT_SS_TEXTPTR_LOGGING +#define SQL_COPT_SS_BASE_EX 1240 +#define SQL_COPT_SS_BROWSE_CONNECT (SQL_COPT_SS_BASE_EX+1) // Browse connect mode of operation +#define SQL_COPT_SS_BROWSE_SERVER (SQL_COPT_SS_BASE_EX+2) // Single Server browse request. +#define SQL_COPT_SS_WARN_ON_CP_ERROR (SQL_COPT_SS_BASE_EX+3) // Issues warning when data from the server had a loss during code page conversion. +#define SQL_COPT_SS_CONNECTION_DEAD (SQL_COPT_SS_BASE_EX+4) // dbdead SQLGetConnectOption only. It will try to ping the server. Expensive connection check +#define SQL_COPT_SS_BROWSE_CACHE_DATA (SQL_COPT_SS_BASE_EX+5) // Determines if we should cache browse info. Used when returned buffer is greater then ODBC limit (32K) +#define SQL_COPT_SS_RESET_CONNECTION (SQL_COPT_SS_BASE_EX+6) // When this option is set, we will perform connection reset on next packet +#define SQL_COPT_SS_APPLICATION_INTENT (SQL_COPT_SS_BASE_EX+7) // Application Intent +#define SQL_COPT_SS_MULTISUBNET_FAILOVER (SQL_COPT_SS_BASE_EX+8) // Multi-subnet Failover +#define SQL_COPT_SS_EX_MAX_USED SQL_COPT_SS_MULTISUBNET_FAILOVER + +// SQLColAttributes driver specific defines. +// SQLSetDescField/SQLGetDescField driver specific defines. +// Microsoft has 1200 thru 1249 reserved for Microsoft SQL Server Native Client driver usage. +#define SQL_CA_SS_BASE 1200 +#define SQL_CA_SS_COLUMN_SSTYPE (SQL_CA_SS_BASE+0) // dbcoltype/dbalttype +#define SQL_CA_SS_COLUMN_UTYPE (SQL_CA_SS_BASE+1) // dbcolutype/dbaltutype +#define SQL_CA_SS_NUM_ORDERS (SQL_CA_SS_BASE+2) // dbnumorders +#define SQL_CA_SS_COLUMN_ORDER (SQL_CA_SS_BASE+3) // dbordercol +#define SQL_CA_SS_COLUMN_VARYLEN (SQL_CA_SS_BASE+4) // dbvarylen +#define SQL_CA_SS_NUM_COMPUTES (SQL_CA_SS_BASE+5) // dbnumcompute +#define SQL_CA_SS_COMPUTE_ID (SQL_CA_SS_BASE+6) // dbnextrow status return +#define SQL_CA_SS_COMPUTE_BYLIST (SQL_CA_SS_BASE+7) // dbbylist +#define SQL_CA_SS_COLUMN_ID (SQL_CA_SS_BASE+8) // dbaltcolid +#define SQL_CA_SS_COLUMN_OP (SQL_CA_SS_BASE+9) // dbaltop +#define SQL_CA_SS_COLUMN_SIZE (SQL_CA_SS_BASE+10) // dbcollen +#define SQL_CA_SS_COLUMN_HIDDEN (SQL_CA_SS_BASE+11) // Column is hidden (FOR BROWSE) +#define SQL_CA_SS_COLUMN_KEY (SQL_CA_SS_BASE+12) // Column is key column (FOR BROWSE) +//#define SQL_DESC_BASE_COLUMN_NAME_OLD (SQL_CA_SS_BASE+13) // This is defined at another location. +#define SQL_CA_SS_COLUMN_COLLATION (SQL_CA_SS_BASE+14) // Column collation (only for chars) +#define SQL_CA_SS_VARIANT_TYPE (SQL_CA_SS_BASE+15) +#define SQL_CA_SS_VARIANT_SQL_TYPE (SQL_CA_SS_BASE+16) +#define SQL_CA_SS_VARIANT_SERVER_TYPE (SQL_CA_SS_BASE+17) + +// XML, CLR UDT, and table valued parameter related metadata +#define SQL_CA_SS_UDT_CATALOG_NAME (SQL_CA_SS_BASE+18) // UDT catalog name +#define SQL_CA_SS_UDT_SCHEMA_NAME (SQL_CA_SS_BASE+19) // UDT schema name +#define SQL_CA_SS_UDT_TYPE_NAME (SQL_CA_SS_BASE+20) // UDT type name +#define SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME (SQL_CA_SS_BASE+21) // Qualified name of the assembly containing the UDT class +#define SQL_CA_SS_XML_SCHEMACOLLECTION_CATALOG_NAME (SQL_CA_SS_BASE+22) // Name of the catalog that contains XML Schema collection +#define SQL_CA_SS_XML_SCHEMACOLLECTION_SCHEMA_NAME (SQL_CA_SS_BASE+23) // Name of the schema that contains XML Schema collection +#define SQL_CA_SS_XML_SCHEMACOLLECTION_NAME (SQL_CA_SS_BASE+24) // Name of the XML Schema collection +#define SQL_CA_SS_CATALOG_NAME (SQL_CA_SS_BASE+25) // Catalog name +#define SQL_CA_SS_SCHEMA_NAME (SQL_CA_SS_BASE+26) // Schema name +#define SQL_CA_SS_TYPE_NAME (SQL_CA_SS_BASE+27) // Type name + +// table valued parameter related metadata +#define SQL_CA_SS_COLUMN_COMPUTED (SQL_CA_SS_BASE+29) // column is computed +#define SQL_CA_SS_COLUMN_IN_UNIQUE_KEY (SQL_CA_SS_BASE+30) // column is part of a unique key +#define SQL_CA_SS_COLUMN_SORT_ORDER (SQL_CA_SS_BASE+31) // column sort order +#define SQL_CA_SS_COLUMN_SORT_ORDINAL (SQL_CA_SS_BASE+32) // column sort ordinal +#define SQL_CA_SS_COLUMN_HAS_DEFAULT_VALUE (SQL_CA_SS_BASE+33) // column has default value for all rows of the table valued parameter + +// sparse column related metadata +#define SQL_CA_SS_IS_COLUMN_SET (SQL_CA_SS_BASE+34) // column is a column-set column for sparse columns + +// Legacy datetime related metadata +#define SQL_CA_SS_SERVER_TYPE (SQL_CA_SS_BASE+35) // column type to send on the wire for datetime types + +#define SQL_CA_SS_MAX_USED (SQL_CA_SS_BASE+36) + +// Defines returned by SQL_ATTR_CURSOR_TYPE/SQL_CURSOR_TYPE +#define SQL_CURSOR_FAST_FORWARD_ONLY 8 // Only returned by SQLGetStmtAttr/Option +// Defines for use with SQL_COPT_SS_USE_PROC_FOR_PREP +#define SQL_UP_OFF 0L // Procedures won't be used for prepare +#define SQL_UP_ON 1L // Procedures will be used for prepare +#define SQL_UP_ON_DROP 2L // Temp procedures will be explicitly dropped +#define SQL_UP_DEFAULT SQL_UP_ON +// Defines for use with SQL_COPT_SS_INTEGRATED_SECURITY - Pre-Connect Option only +#define SQL_IS_OFF 0L // Integrated security isn't used +#define SQL_IS_ON 1L // Integrated security is used +#define SQL_IS_DEFAULT SQL_IS_OFF +// Defines for use with SQL_COPT_SS_PRESERVE_CURSORS +#define SQL_PC_OFF 0L // Cursors are closed on SQLTransact +#define SQL_PC_ON 1L // Cursors remain open on SQLTransact +#define SQL_PC_DEFAULT SQL_PC_OFF +// Defines for use with SQL_COPT_SS_USER_DATA +#define SQL_UD_NOTSET NULL // No user data pointer set +// Defines for use with SQL_COPT_SS_TRANSLATE +#define SQL_XL_OFF 0L // Code page translation is not performed +#define SQL_XL_ON 1L // Code page translation is performed +#define SQL_XL_DEFAULT SQL_XL_ON +// Defines for use with SQL_COPT_SS_FALLBACK_CONNECT - Pre-Connect Option only +#define SQL_FB_OFF 0L // FallBack connections are disabled +#define SQL_FB_ON 1L // FallBack connections are enabled +#define SQL_FB_DEFAULT SQL_FB_OFF +// Defines for use with SQL_COPT_SS_BCP - Pre-Connect Option only +#define SQL_BCP_OFF 0L // BCP is not allowed on connection +#define SQL_BCP_ON 1L // BCP is allowed on connection +#define SQL_BCP_DEFAULT SQL_BCP_OFF +// Defines for use with SQL_COPT_SS_QUOTED_IDENT +#define SQL_QI_OFF 0L // Quoted identifiers are enable +#define SQL_QI_ON 1L // Quoted identifiers are disabled +#define SQL_QI_DEFAULT SQL_QI_ON +// Defines for use with SQL_COPT_SS_ANSI_NPW - Pre-Connect Option only +#define SQL_AD_OFF 0L // ANSI NULLs, Padding and Warnings are enabled +#define SQL_AD_ON 1L // ANSI NULLs, Padding and Warnings are disabled +#define SQL_AD_DEFAULT SQL_AD_ON +// Defines for use with SQL_COPT_SS_CONCAT_NULL - Pre-Connect Option only +#define SQL_CN_OFF 0L // CONCAT_NULL_YIELDS_NULL is off +#define SQL_CN_ON 1L // CONCAT_NULL_YIELDS_NULL is on +#define SQL_CN_DEFAULT SQL_CN_ON +// Defines for use with SQL_SOPT_SS_TEXTPTR_LOGGING +#define SQL_TL_OFF 0L // No logging on text pointer ops +#define SQL_TL_ON 1L // Logging occurs on text pointer ops +#define SQL_TL_DEFAULT SQL_TL_ON +// Defines for use with SQL_SOPT_SS_HIDDEN_COLUMNS +#define SQL_HC_OFF 0L // FOR BROWSE columns are hidden +#define SQL_HC_ON 1L // FOR BROWSE columns are exposed +#define SQL_HC_DEFAULT SQL_HC_OFF +// Defines for use with SQL_SOPT_SS_NOBROWSETABLE +#define SQL_NB_OFF 0L // NO_BROWSETABLE is off +#define SQL_NB_ON 1L // NO_BROWSETABLE is on +#define SQL_NB_DEFAULT SQL_NB_OFF +// Defines for use with SQL_SOPT_SS_REGIONALIZE +#define SQL_RE_OFF 0L // No regionalization occurs on output character conversions +#define SQL_RE_ON 1L // Regionalization occurs on output character conversions +#define SQL_RE_DEFAULT SQL_RE_OFF +// Defines for use with SQL_SOPT_SS_CURSOR_OPTIONS +#define SQL_CO_OFF 0L // Clear all cursor options +#define SQL_CO_FFO 1L // Fast-forward cursor will be used +#define SQL_CO_AF 2L // Autofetch on cursor open +#define SQL_CO_FFO_AF (SQL_CO_FFO|SQL_CO_AF) // Fast-forward cursor with autofetch +#define SQL_CO_FIREHOSE_AF 4L // Auto fetch on fire-hose cursors +#define SQL_CO_DEFAULT SQL_CO_OFF +//SQL_SOPT_SS_NOCOUNT_STATUS +#define SQL_NC_OFF 0L +#define SQL_NC_ON 1L +//SQL_SOPT_SS_DEFER_PREPARE +#define SQL_DP_OFF 0L +#define SQL_DP_ON 1L +//SQL_SOPT_SS_NAME_SCOPE +#define SQL_SS_NAME_SCOPE_TABLE 0L +#define SQL_SS_NAME_SCOPE_TABLE_TYPE 1L +#define SQL_SS_NAME_SCOPE_EXTENDED 2L +#define SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET 3L +#define SQL_SS_NAME_SCOPE_DEFAULT SQL_SS_NAME_SCOPE_TABLE +//SQL_COPT_SS_ENCRYPT +#define SQL_EN_OFF 0L +#define SQL_EN_ON 1L +//SQL_COPT_SS_TRUST_SERVER_CERTIFICATE +#define SQL_TRUST_SERVER_CERTIFICATE_NO 0L +#define SQL_TRUST_SERVER_CERTIFICATE_YES 1L +//SQL_COPT_SS_BROWSE_CONNECT +#define SQL_MORE_INFO_NO 0L +#define SQL_MORE_INFO_YES 1L +//SQL_COPT_SS_BROWSE_CACHE_DATA +#define SQL_CACHE_DATA_NO 0L +#define SQL_CACHE_DATA_YES 1L +//SQL_COPT_SS_RESET_CONNECTION +#define SQL_RESET_YES 1L +//SQL_COPT_SS_WARN_ON_CP_ERROR +#define SQL_WARN_NO 0L +#define SQL_WARN_YES 1L +//SQL_COPT_SS_MARS_ENABLED +#define SQL_MARS_ENABLED_NO 0L +#define SQL_MARS_ENABLED_YES 1L +/* SQL_TXN_ISOLATION_OPTION bitmasks */ +#define SQL_TXN_SS_SNAPSHOT 0x00000020L + +// The following are defines for SQL_CA_SS_COLUMN_SORT_ORDER +#define SQL_SS_ORDER_UNSPECIFIED 0L +#define SQL_SS_DESCENDING_ORDER 1L +#define SQL_SS_ASCENDING_ORDER 2L +#define SQL_SS_ORDER_DEFAULT SQL_SS_ORDER_UNSPECIFIED + +// Driver specific SQL data type defines. +// Microsoft has -150 thru -199 reserved for Microsoft SQL Server Native Client driver usage. +#define SQL_SS_VARIANT (-150) +#define SQL_SS_UDT (-151) +#define SQL_SS_XML (-152) +#define SQL_SS_TABLE (-153) +#define SQL_SS_TIME2 (-154) +#define SQL_SS_TIMESTAMPOFFSET (-155) + +// Local types to be used with SQL_CA_SS_SERVER_TYPE +#define SQL_SS_TYPE_DEFAULT 0L +#define SQL_SS_TYPE_SMALLDATETIME 1L +#define SQL_SS_TYPE_DATETIME 2L + +// Extended C Types range 4000 and above. Range of -100 thru 200 is reserved by Driver Manager. +#define SQL_C_TYPES_EXTENDED 0x04000L +#define SQL_C_SS_TIME2 (SQL_C_TYPES_EXTENDED+0) +#define SQL_C_SS_TIMESTAMPOFFSET (SQL_C_TYPES_EXTENDED+1) + +#ifndef SQLNCLI_NO_BCP +// Define the symbol SQLNCLI_NO_BCP if you are not using BCP in your application +// and you want to exclude the BCP-related definitions in this header file. + +// SQL Server Data Type defines. +// New types for SQL 6.0 and later servers +#define SQLTEXT 0x23 +#define SQLVARBINARY 0x25 +#define SQLINTN 0x26 +#define SQLVARCHAR 0x27 +#define SQLBINARY 0x2d +#define SQLIMAGE 0x22 +#define SQLCHARACTER 0x2f +#define SQLINT1 0x30 +#define SQLBIT 0x32 +#define SQLINT2 0x34 +#define SQLINT4 0x38 +#define SQLMONEY 0x3c +#define SQLDATETIME 0x3d +#define SQLFLT8 0x3e +#define SQLFLTN 0x6d +#define SQLMONEYN 0x6e +#define SQLDATETIMN 0x6f +#define SQLFLT4 0x3b +#define SQLMONEY4 0x7a +#define SQLDATETIM4 0x3a +// New types for SQL 6.0 and later servers +#define SQLDECIMAL 0x6a +#define SQLNUMERIC 0x6c +// New types for SQL 7.0 and later servers +#define SQLUNIQUEID 0x24 +#define SQLBIGCHAR 0xaf +#define SQLBIGVARCHAR 0xa7 +#define SQLBIGBINARY 0xad +#define SQLBIGVARBINARY 0xa5 +#define SQLBITN 0x68 +#define SQLNCHAR 0xef +#define SQLNVARCHAR 0xe7 +#define SQLNTEXT 0x63 +// New types for SQL 2000 and later servers +#define SQLINT8 0x7f +#define SQLVARIANT 0x62 +// New types for SQL 2005 and later servers +#define SQLUDT 0xf0 +#define SQLXML 0xf1 +// New types for SQL 2008 and later servers +#define SQLTABLE 0xf3 +#define SQLDATEN 0x28 +#define SQLTIMEN 0x29 +#define SQLDATETIME2N 0x2a +#define SQLDATETIMEOFFSETN 0x2b +// Define old names +#define SQLDECIMALN 0x6a +#define SQLNUMERICN 0x6c +#endif // SQLNCLI_NO_BCP + +// SQL_SS_LENGTH_UNLIMITED is used to describe the max length of +// VARCHAR(max), VARBINARY(max), NVARCHAR(max), and XML columns +#define SQL_SS_LENGTH_UNLIMITED 0 + +// User Data Type definitions. +// Returned by SQLColAttributes/SQL_CA_SS_COLUMN_UTYPE. +#define SQLudtBINARY 3 +#define SQLudtBIT 16 +#define SQLudtBITN 0 +#define SQLudtCHAR 1 +#define SQLudtDATETIM4 22 +#define SQLudtDATETIME 12 +#define SQLudtDATETIMN 15 +#define SQLudtDECML 24 +#define SQLudtDECMLN 26 +#define SQLudtFLT4 23 +#define SQLudtFLT8 8 +#define SQLudtFLTN 14 +#define SQLudtIMAGE 20 +#define SQLudtINT1 5 +#define SQLudtINT2 6 +#define SQLudtINT4 7 +#define SQLudtINTN 13 +#define SQLudtMONEY 11 +#define SQLudtMONEY4 21 +#define SQLudtMONEYN 17 +#define SQLudtNUM 10 +#define SQLudtNUMN 25 +#define SQLudtSYSNAME 18 +#define SQLudtTEXT 19 +#define SQLudtTIMESTAMP 80 +#define SQLudtUNIQUEIDENTIFIER 0 +#define SQLudtVARBINARY 4 +#define SQLudtVARCHAR 2 +#define MIN_USER_DATATYPE 256 +// Aggregate operator types. +// Returned by SQLColAttributes/SQL_CA_SS_COLUMN_OP. +#define SQLAOPSTDEV 0x30 // Standard deviation +#define SQLAOPSTDEVP 0x31 // Standard deviation population +#define SQLAOPVAR 0x32 // Variance +#define SQLAOPVARP 0x33 // Variance population +#define SQLAOPCNT 0x4b // Count +#define SQLAOPSUM 0x4d // Sum +#define SQLAOPAVG 0x4f // Average +#define SQLAOPMIN 0x51 // Min +#define SQLAOPMAX 0x52 // Max +#define SQLAOPANY 0x53 // Any +#define SQLAOPNOOP 0x56 // None +// SQLGetInfo driver specific defines. +// Microsoft has 1151 thru 1200 reserved for Microsoft SQL Server Native Client driver usage. +#define SQL_INFO_SS_FIRST 1199 +#define SQL_INFO_SS_NETLIB_NAMEW (SQL_INFO_SS_FIRST+0) // dbprocinfo +#define SQL_INFO_SS_NETLIB_NAMEA (SQL_INFO_SS_FIRST+1) // dbprocinfo +#define SQL_INFO_SS_MAX_USED SQL_INFO_SS_NETLIB_NAMEA +#ifdef UNICODE +#define SQL_INFO_SS_NETLIB_NAME SQL_INFO_SS_NETLIB_NAMEW +#else +#define SQL_INFO_SS_NETLIB_NAME SQL_INFO_SS_NETLIB_NAMEA +#endif + +// SQLGetDiagField driver specific defines. +// Microsoft has -1150 thru -1199 reserved for Microsoft SQL Server Native Client driver usage. +#define SQL_DIAG_SS_BASE (-1150) +#define SQL_DIAG_SS_MSGSTATE (SQL_DIAG_SS_BASE) +#define SQL_DIAG_SS_SEVERITY (SQL_DIAG_SS_BASE-1) +#define SQL_DIAG_SS_SRVNAME (SQL_DIAG_SS_BASE-2) +#define SQL_DIAG_SS_PROCNAME (SQL_DIAG_SS_BASE-3) +#define SQL_DIAG_SS_LINE (SQL_DIAG_SS_BASE-4) +// SQLGetDiagField/SQL_DIAG_DYNAMIC_FUNCTION_CODE driver specific defines. +// Microsoft has -200 thru -299 reserved for Microsoft SQL Server Native Client driver usage. +#define SQL_DIAG_DFC_SS_BASE (-200) +#define SQL_DIAG_DFC_SS_ALTER_DATABASE (SQL_DIAG_DFC_SS_BASE-0) +#define SQL_DIAG_DFC_SS_CHECKPOINT (SQL_DIAG_DFC_SS_BASE-1) +#define SQL_DIAG_DFC_SS_CONDITION (SQL_DIAG_DFC_SS_BASE-2) +#define SQL_DIAG_DFC_SS_CREATE_DATABASE (SQL_DIAG_DFC_SS_BASE-3) +#define SQL_DIAG_DFC_SS_CREATE_DEFAULT (SQL_DIAG_DFC_SS_BASE-4) +#define SQL_DIAG_DFC_SS_CREATE_PROCEDURE (SQL_DIAG_DFC_SS_BASE-5) +#define SQL_DIAG_DFC_SS_CREATE_RULE (SQL_DIAG_DFC_SS_BASE-6) +#define SQL_DIAG_DFC_SS_CREATE_TRIGGER (SQL_DIAG_DFC_SS_BASE-7) +#define SQL_DIAG_DFC_SS_CURSOR_DECLARE (SQL_DIAG_DFC_SS_BASE-8) +#define SQL_DIAG_DFC_SS_CURSOR_OPEN (SQL_DIAG_DFC_SS_BASE-9) +#define SQL_DIAG_DFC_SS_CURSOR_FETCH (SQL_DIAG_DFC_SS_BASE-10) +#define SQL_DIAG_DFC_SS_CURSOR_CLOSE (SQL_DIAG_DFC_SS_BASE-11) +#define SQL_DIAG_DFC_SS_DEALLOCATE_CURSOR (SQL_DIAG_DFC_SS_BASE-12) +#define SQL_DIAG_DFC_SS_DBCC (SQL_DIAG_DFC_SS_BASE-13) +#define SQL_DIAG_DFC_SS_DISK (SQL_DIAG_DFC_SS_BASE-14) +#define SQL_DIAG_DFC_SS_DROP_DATABASE (SQL_DIAG_DFC_SS_BASE-15) +#define SQL_DIAG_DFC_SS_DROP_DEFAULT (SQL_DIAG_DFC_SS_BASE-16) +#define SQL_DIAG_DFC_SS_DROP_PROCEDURE (SQL_DIAG_DFC_SS_BASE-17) +#define SQL_DIAG_DFC_SS_DROP_RULE (SQL_DIAG_DFC_SS_BASE-18) +#define SQL_DIAG_DFC_SS_DROP_TRIGGER (SQL_DIAG_DFC_SS_BASE-19) +#define SQL_DIAG_DFC_SS_DUMP_DATABASE (SQL_DIAG_DFC_SS_BASE-20) +#define SQL_DIAG_DFC_SS_BACKUP_DATABASE (SQL_DIAG_DFC_SS_BASE-20) +#define SQL_DIAG_DFC_SS_DUMP_TABLE (SQL_DIAG_DFC_SS_BASE-21) +#define SQL_DIAG_DFC_SS_DUMP_TRANSACTION (SQL_DIAG_DFC_SS_BASE-22) +#define SQL_DIAG_DFC_SS_BACKUP_TRANSACTION (SQL_DIAG_DFC_SS_BASE-22) +#define SQL_DIAG_DFC_SS_GOTO (SQL_DIAG_DFC_SS_BASE-23) +#define SQL_DIAG_DFC_SS_INSERT_BULK (SQL_DIAG_DFC_SS_BASE-24) +#define SQL_DIAG_DFC_SS_KILL (SQL_DIAG_DFC_SS_BASE-25) +#define SQL_DIAG_DFC_SS_LOAD_DATABASE (SQL_DIAG_DFC_SS_BASE-26) +#define SQL_DIAG_DFC_SS_RESTORE_DATABASE (SQL_DIAG_DFC_SS_BASE-26) +#define SQL_DIAG_DFC_SS_LOAD_HEADERONLY (SQL_DIAG_DFC_SS_BASE-27) +#define SQL_DIAG_DFC_SS_RESTORE_HEADERONLY (SQL_DIAG_DFC_SS_BASE-27) +#define SQL_DIAG_DFC_SS_LOAD_TABLE (SQL_DIAG_DFC_SS_BASE-28) +#define SQL_DIAG_DFC_SS_LOAD_TRANSACTION (SQL_DIAG_DFC_SS_BASE-29) +#define SQL_DIAG_DFC_SS_RESTORE_TRANSACTION (SQL_DIAG_DFC_SS_BASE-29) +#define SQL_DIAG_DFC_SS_PRINT (SQL_DIAG_DFC_SS_BASE-30) +#define SQL_DIAG_DFC_SS_RAISERROR (SQL_DIAG_DFC_SS_BASE-31) +#define SQL_DIAG_DFC_SS_READTEXT (SQL_DIAG_DFC_SS_BASE-32) +#define SQL_DIAG_DFC_SS_RECONFIGURE (SQL_DIAG_DFC_SS_BASE-33) +#define SQL_DIAG_DFC_SS_RETURN (SQL_DIAG_DFC_SS_BASE-34) +#define SQL_DIAG_DFC_SS_SELECT_INTO (SQL_DIAG_DFC_SS_BASE-35) +#define SQL_DIAG_DFC_SS_SET (SQL_DIAG_DFC_SS_BASE-36) +#define SQL_DIAG_DFC_SS_SET_IDENTITY_INSERT (SQL_DIAG_DFC_SS_BASE-37) +#define SQL_DIAG_DFC_SS_SET_ROW_COUNT (SQL_DIAG_DFC_SS_BASE-38) +#define SQL_DIAG_DFC_SS_SET_STATISTICS (SQL_DIAG_DFC_SS_BASE-39) +#define SQL_DIAG_DFC_SS_SET_TEXTSIZE (SQL_DIAG_DFC_SS_BASE-40) +#define SQL_DIAG_DFC_SS_SETUSER (SQL_DIAG_DFC_SS_BASE-41) +#define SQL_DIAG_DFC_SS_SHUTDOWN (SQL_DIAG_DFC_SS_BASE-42) +#define SQL_DIAG_DFC_SS_TRANS_BEGIN (SQL_DIAG_DFC_SS_BASE-43) +#define SQL_DIAG_DFC_SS_TRANS_COMMIT (SQL_DIAG_DFC_SS_BASE-44) +#define SQL_DIAG_DFC_SS_TRANS_PREPARE (SQL_DIAG_DFC_SS_BASE-45) +#define SQL_DIAG_DFC_SS_TRANS_ROLLBACK (SQL_DIAG_DFC_SS_BASE-46) +#define SQL_DIAG_DFC_SS_TRANS_SAVE (SQL_DIAG_DFC_SS_BASE-47) +#define SQL_DIAG_DFC_SS_TRUNCATE_TABLE (SQL_DIAG_DFC_SS_BASE-48) +#define SQL_DIAG_DFC_SS_UPDATE_STATISTICS (SQL_DIAG_DFC_SS_BASE-49) +#define SQL_DIAG_DFC_SS_UPDATETEXT (SQL_DIAG_DFC_SS_BASE-50) +#define SQL_DIAG_DFC_SS_USE (SQL_DIAG_DFC_SS_BASE-51) +#define SQL_DIAG_DFC_SS_WAITFOR (SQL_DIAG_DFC_SS_BASE-52) +#define SQL_DIAG_DFC_SS_WRITETEXT (SQL_DIAG_DFC_SS_BASE-53) +#define SQL_DIAG_DFC_SS_DENY (SQL_DIAG_DFC_SS_BASE-54) +#define SQL_DIAG_DFC_SS_SET_XCTLVL (SQL_DIAG_DFC_SS_BASE-55) +#define SQL_DIAG_DFC_SS_MERGE (SQL_DIAG_DFC_SS_BASE-56) + +// Severity codes for SQL_DIAG_SS_SEVERITY +#define EX_ANY 0 +#define EX_INFO 10 +#define EX_MAXISEVERITY EX_INFO +#define EX_MISSING 11 +#define EX_TYPE 12 +#define EX_DEADLOCK 13 +#define EX_PERMIT 14 +#define EX_SYNTAX 15 +#define EX_USER 16 +#define EX_RESOURCE 17 +#define EX_INTOK 18 +#define MAXUSEVERITY EX_INTOK +#define EX_LIMIT 19 +#define EX_CMDFATAL 20 +#define MINFATALERR EX_CMDFATAL +#define EX_DBFATAL 21 +#define EX_TABCORRUPT 22 +#define EX_DBCORRUPT 23 +#define EX_HARDWARE 24 +#define EX_CONTROL 25 +// Internal server datatypes - used when binding to SQL_C_BINARY +#ifndef MAXNUMERICLEN // Resolve ODS/DBLib conflicts +// DB-Library datatypes +#define DBMAXCHAR (8000+1) // Max length of DBVARBINARY and DBVARCHAR, etc. +1 for zero byte +#define MAXNAME (SQL_MAX_SQLSERVERNAME+1) // Max server identifier length including zero byte +#ifdef UNICODE +typedef wchar_t DBCHAR; +#else +typedef char DBCHAR; + +#endif +typedef short SQLSMALLINT; + +typedef unsigned short SQLUSMALLINT; + +typedef unsigned char DBBINARY; + +typedef unsigned char DBTINYINT; + +typedef short DBSMALLINT; + +typedef unsigned short DBUSMALLINT; + +typedef double DBFLT8; + +typedef unsigned char DBBIT; + +typedef unsigned char DBBOOL; + +typedef float DBFLT4; + +typedef DBFLT4 DBREAL; + +typedef UINT DBUBOOL; + +typedef struct dbmoney + { + LONG mnyhigh; + ULONG mnylow; + } DBMONEY; + +typedef struct dbdatetime + { + LONG dtdays; + ULONG dttime; + } DBDATETIME; + +typedef struct dbdatetime4 + { + USHORT numdays; + USHORT nummins; + } DBDATETIM4; + +typedef LONG DBMONEY4; + +#include // 8-byte structure packing + +// New Date Time Structures +// New Structure for TIME2 +typedef struct tagSS_TIME2_STRUCT +{ + SQLUSMALLINT hour; + SQLUSMALLINT minute; + SQLUSMALLINT second; + SQLUINTEGER fraction; +} SQL_SS_TIME2_STRUCT; +// New Structure for TIMESTAMPOFFSET +typedef struct tagSS_TIMESTAMPOFFSET_STRUCT +{ + SQLSMALLINT year; + SQLUSMALLINT month; + SQLUSMALLINT day; + SQLUSMALLINT hour; + SQLUSMALLINT minute; + SQLUSMALLINT second; + SQLUINTEGER fraction; + SQLSMALLINT timezone_hour; + SQLSMALLINT timezone_minute; +} SQL_SS_TIMESTAMPOFFSET_STRUCT; + +typedef struct tagDBTIME2 +{ + USHORT hour; + USHORT minute; + USHORT second; + ULONG fraction; +} DBTIME2; + +typedef struct tagDBTIMESTAMPOFFSET +{ + SHORT year; + USHORT month; + USHORT day; + USHORT hour; + USHORT minute; + USHORT second; + ULONG fraction; + SHORT timezone_hour; + SHORT timezone_minute; +} DBTIMESTAMPOFFSET; + +#include // restore original structure packing + +// Money value *10,000 +#define DBNUM_PREC_TYPE BYTE +#define DBNUM_SCALE_TYPE BYTE +#define DBNUM_VAL_TYPE BYTE + +#if (ODBCVER < 0x0300) +#define MAXNUMERICLEN 16 +typedef struct dbnumeric // Internal representation of NUMERIC data type +{ + DBNUM_PREC_TYPE precision; // Precision + DBNUM_SCALE_TYPE scale; // Scale + BYTE sign; // Sign (1 if positive, 0 if negative) + DBNUM_VAL_TYPE val[MAXNUMERICLEN];// Value +} DBNUMERIC; +typedef DBNUMERIC DBDECIMAL;// Internal representation of DECIMAL data type +#else // Use ODBC 3.0 definitions since same as DBLib +#define MAXNUMERICLEN SQL_MAX_NUMERIC_LEN +typedef SQL_NUMERIC_STRUCT DBNUMERIC; +typedef SQL_NUMERIC_STRUCT DBDECIMAL; +#endif // ODCBVER +#endif // MAXNUMERICLEN + +#ifndef INT +typedef int INT; +typedef LONG DBINT; +typedef DBINT * LPDBINT; +#ifndef _LPCBYTE_DEFINED +#define _LPCBYTE_DEFINED +typedef BYTE const* LPCBYTE; +#endif //_LPCBYTE_DEFINED +#endif // INT +/************************************************************************** +This struct is a global used for gathering statistical data on the driver. +Access to this structure is controlled via the pStatCrit; +***************************************************************************/ +typedef struct sqlperf +{ + // Application Profile Statistics + DWORD TimerResolution; + DWORD SQLidu; + DWORD SQLiduRows; + DWORD SQLSelects; + DWORD SQLSelectRows; + DWORD Transactions; + DWORD SQLPrepares; + DWORD ExecDirects; + DWORD SQLExecutes; + DWORD CursorOpens; + DWORD CursorSize; + DWORD CursorUsed; + LDOUBLE PercentCursorUsed; + LDOUBLE AvgFetchTime; + LDOUBLE AvgCursorSize; + LDOUBLE AvgCursorUsed; + DWORD SQLFetchTime; + DWORD SQLFetchCount; + DWORD CurrentStmtCount; + DWORD MaxOpenStmt; + DWORD SumOpenStmt; + // Connection Statistics + DWORD CurrentConnectionCount; + DWORD MaxConnectionsOpened; + DWORD SumConnectionsOpened; + DWORD SumConnectiontime; + LDOUBLE AvgTimeOpened; + // Network Statistics + DWORD ServerRndTrips; + DWORD BuffersSent; + DWORD BuffersRec; + DWORD BytesSent; + DWORD BytesRec; + // Time Statistics; + DWORD msExecutionTime; + DWORD msNetWorkServerTime; +} SQLPERF; +// The following are options for SQL_COPT_SS_PERF_DATA and SQL_COPT_SS_PERF_QUERY +#define SQL_PERF_START 1 // Starts the driver sampling performance data. +#define SQL_PERF_STOP 2 // Stops the counters from sampling performance data. +// The following are defines for SQL_COPT_SS_PERF_DATA_LOG +#define SQL_SS_DL_DEFAULT TEXT("STATS.LOG") +// The following are defines for SQL_COPT_SS_PERF_QUERY_LOG +#define SQL_SS_QL_DEFAULT TEXT("QUERY.LOG") +// The following are defines for SQL_COPT_SS_PERF_QUERY_INTERVAL +#define SQL_SS_QI_DEFAULT 30000 // 30,000 milliseconds + +#ifndef SQLNCLI_NO_BCP +// Define the symbol SQLNCLI_NO_BCP if you are not using BCP in your application +// and you want to exclude the BCP-related definitions in this header file. + +// ODBC BCP prototypes and defines +// Return codes +#define SUCCEED 1 +#define FAIL 0 +#define SUCCEED_ABORT 2 +#define SUCCEED_ASYNC 3 +// Transfer directions +#define DB_IN 1 // Transfer from client to server +#define DB_OUT 2 // Transfer from server to client +// bcp_control option +#define BCPMAXERRS 1 // Sets max errors allowed +#define BCPFIRST 2 // Sets first row to be copied out +#define BCPLAST 3 // Sets number of rows to be copied out +#define BCPBATCH 4 // Sets input batch size +#define BCPKEEPNULLS 5 // Sets to insert NULLs for empty input values +#define BCPABORT 6 // Sets to have bcpexec return SUCCEED_ABORT +#define BCPODBC 7 // Sets ODBC canonical character output +#define BCPKEEPIDENTITY 8 // Sets IDENTITY_INSERT on +#if SQLNCLI_VER < 1000 +#define BCP6xFILEFMT 9 // DEPRECATED: Sets 6x file format on +#endif +#define BCPHINTSA 10 // Sets server BCP hints (ANSI string) +#define BCPHINTSW 11 // Sets server BCP hints (UNICODE string) +#define BCPFILECP 12 // Sets clients code page for the file +#define BCPUNICODEFILE 13 // Sets that the file contains unicode header +#define BCPTEXTFILE 14 // Sets BCP mode to expect a text file and to detect Unicode or ANSI automatically +#define BCPFILEFMT 15 // Sets file format version +#define BCPFMTXML 16 // Sets the format file type to xml +#define BCPFIRSTEX 17 // Starting Row for BCP operation (64 bit) +#define BCPLASTEX 18 // Ending Row for BCP operation (64 bit) +#define BCPROWCOUNT 19 // Total Number of Rows Copied (64 bit) +#define BCPDELAYREADFMT 20 // Delay reading format file unil bcp_exec +// BCPFILECP values +// Any valid code page that is installed on the client can be passed plus: +#define BCPFILECP_ACP 0 // Data in file is in Windows code page +#define BCPFILECP_OEMCP 1 // Data in file is in OEM code page (default) +#define BCPFILECP_RAW (-1)// Data in file is in Server code page (no conversion) +// bcp_collen definition +#define SQL_VARLEN_DATA (-10) // Use default length for column +// BCP column format properties +#define BCP_FMT_TYPE 0x01 +#define BCP_FMT_INDICATOR_LEN 0x02 +#define BCP_FMT_DATA_LEN 0x03 +#define BCP_FMT_TERMINATOR 0x04 +#define BCP_FMT_SERVER_COL 0x05 +#define BCP_FMT_COLLATION 0x06 +#define BCP_FMT_COLLATION_ID 0x07 +// bcp_setbulkmode properties +#define BCP_OUT_CHARACTER_MODE 0x01 +#define BCP_OUT_WIDE_CHARACTER_MODE 0x02 +#define BCP_OUT_NATIVE_TEXT_MODE 0x03 +#define BCP_OUT_NATIVE_MODE 0x04 + + + +// BCP functions +DBINT SQL_API bcp_batch (HDBC); +RETCODE SQL_API bcp_bind (HDBC, LPCBYTE, INT, DBINT, LPCBYTE, INT, INT, INT); +RETCODE SQL_API bcp_colfmt (HDBC, INT, BYTE, INT, DBINT, LPCBYTE, INT, INT); +RETCODE SQL_API bcp_collen (HDBC, DBINT, INT); +RETCODE SQL_API bcp_colptr (HDBC, LPCBYTE, INT); +RETCODE SQL_API bcp_columns (HDBC, INT); +RETCODE SQL_API bcp_control (HDBC, INT, void *); +DBINT SQL_API bcp_done (HDBC); +RETCODE SQL_API bcp_exec (HDBC, LPDBINT); +RETCODE SQL_API bcp_getcolfmt (HDBC, INT, INT, void *, INT, INT *); +RETCODE SQL_API bcp_initA (HDBC, LPCSTR, LPCSTR, LPCSTR, INT); +RETCODE SQL_API bcp_initW (HDBC, LPCWSTR, LPCWSTR, LPCWSTR, INT); +RETCODE SQL_API bcp_moretext (HDBC, DBINT, LPCBYTE); +RETCODE SQL_API bcp_readfmtA (HDBC, LPCSTR); +RETCODE SQL_API bcp_readfmtW (HDBC, LPCWSTR); +RETCODE SQL_API bcp_sendrow (HDBC); +RETCODE SQL_API bcp_setbulkmode (HDBC, INT, __in_bcount(cbField) void*, INT cbField, __in_bcount(cbRow) void *, INT cbRow); +RETCODE SQL_API bcp_setcolfmt (HDBC, INT, INT, void *, INT); +RETCODE SQL_API bcp_writefmtA (HDBC, LPCSTR); +RETCODE SQL_API bcp_writefmtW (HDBC, LPCWSTR); +CHAR* SQL_API dbprtypeA (INT); +WCHAR* SQL_API dbprtypeW (INT); +CHAR* SQL_API bcp_gettypenameA (INT, DBBOOL); +WCHAR* SQL_API bcp_gettypenameW (INT, DBBOOL); + +#ifdef UNICODE +#define bcp_init bcp_initW +#define bcp_readfmt bcp_readfmtW +#define bcp_writefmt bcp_writefmtW +#define dbprtype dbprtypeW +#define bcp_gettypename bcp_gettypenameW +#define BCPHINTS BCPHINTSW +#else +#define bcp_init bcp_initA +#define bcp_readfmt bcp_readfmtA +#define bcp_writefmt bcp_writefmtA +#define dbprtype dbprtypeA +#define bcp_gettypename bcp_gettypenameA +#define BCPHINTS BCPHINTSA +#endif // UNICODE + +#endif // SQLNCLI_NO_BCP + +// The following options have been deprecated +#define SQL_FAST_CONNECT (SQL_COPT_SS_BASE+0) +// Defines for use with SQL_FAST_CONNECT - only useable before connecting +#define SQL_FC_OFF 0L // Fast connect is off +#define SQL_FC_ON 1L // Fast connect is on +#define SQL_FC_DEFAULT SQL_FC_OFF +#define SQL_COPT_SS_ANSI_OEM (SQL_COPT_SS_BASE+6) +#define SQL_AO_OFF 0L +#define SQL_AO_ON 1L +#define SQL_AO_DEFAULT SQL_AO_OFF +#define SQL_CA_SS_BASE_COLUMN_NAME SQL_DESC_BASE_COLUMN_NAME + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // ODBCVER + + + +#ifdef __cplusplus +extern "C" { +#endif +#include + +//The following facilitates opening a handle to a SQL filestream +typedef enum _SQL_FILESTREAM_DESIRED_ACCESS { + SQL_FILESTREAM_READ = 0, + SQL_FILESTREAM_WRITE = 1, + SQL_FILESTREAM_READWRITE = 2 +} SQL_FILESTREAM_DESIRED_ACCESS; +#define SQL_FILESTREAM_OPEN_FLAG_ASYNC 0x00000001L +#define SQL_FILESTREAM_OPEN_FLAG_NO_BUFFERING 0x00000002L +#define SQL_FILESTREAM_OPEN_FLAG_NO_WRITE_THROUGH 0x00000004L +#define SQL_FILESTREAM_OPEN_FLAG_SEQUENTIAL_SCAN 0x00000008L +#define SQL_FILESTREAM_OPEN_FLAG_RANDOM_ACCESS 0x00000010L + + +HANDLE __stdcall OpenSqlFilestream ( + LPCWSTR FilestreamPath, + SQL_FILESTREAM_DESIRED_ACCESS DesiredAccess, + ULONG OpenOptions, + __in_bcount(FilestreamTransactionContextLength) + LPBYTE FilestreamTransactionContext, + SSIZE_T FilestreamTransactionContextLength, + PLARGE_INTEGER AllocationSize); +#define FSCTL_SQL_FILESTREAM_FETCH_OLD_CONTENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2392, METHOD_BUFFERED, FILE_ANY_ACCESS) + +#ifdef __cplusplus +} // extern "C" +#endif + + +#endif //__sqlncli_h__ + +#define SQL_COPT_SS_CONNECT_RETRY_COUNT (SQL_COPT_SS_BASE+34) // Post connection attribute used to get ConnectRetryCount +#define SQL_COPT_SS_CONNECT_RETRY_INTERVAL (SQL_COPT_SS_BASE+35) // Post connection attribute used to get ConnectRetryInterval +#ifdef SQL_COPT_SS_MAX_USED +#undef SQL_COPT_SS_MAX_USED +#endif // SQL_COPT_SS_MAX_USED +#define SQL_COPT_SS_MAX_USED SQL_COPT_SS_CONNECT_RETRY_INTERVAL + + +#ifndef _SQLUSERINSTANCE_H_ +#define _SQLUSERINSTANCE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +// Recommended buffer size to store a LocalDB connection string +#define LOCALDB_MAX_SQLCONNECTION_BUFFER_SIZE 260 + +// type definition for LocalDBCreateInstance function +typedef HRESULT __cdecl FnLocalDBCreateInstance ( + // I the LocalDB version (e.g. 11.0 or 11.0.1094.2) + __in_z PCWSTR wszVersion, + // I the instance name + __in_z PCWSTR pInstanceName, + // I reserved for the future use. Currently should be set to 0. + __in DWORD dwFlags +); + +// type definition for pointer to LocalDBCreateInstance function +typedef FnLocalDBCreateInstance* PFnLocalDBCreateInstance; + +// type definition for LocalDBStartInstance function +typedef HRESULT __cdecl FnLocalDBStartInstance ( + // I the LocalDB instance name + __in_z PCWSTR pInstanceName, + // I reserved for the future use. Currently should be set to 0. + __in DWORD dwFlags, + // O the buffer to store the connection string to the LocalDB instance + __out_ecount_z_opt(*lpcchSqlConnection) LPWSTR wszSqlConnection, + // I/O on input has the size of the wszSqlConnection buffer in characters. On output, if the given buffer size is + // too small, has the buffer size required, in characters, including trailing null. + __inout_opt LPDWORD lpcchSqlConnection +); + +// type definition for pointer to LocalDBStartInstance function +typedef FnLocalDBStartInstance* PFnLocalDBStartInstance; + +// Flags for the LocalDBFormatMessage function +#define LOCALDB_TRUNCATE_ERR_MESSAGE 0x0001L + +// type definition for LocalDBFormatMessage function +typedef HRESULT __cdecl FnLocalDBFormatMessage( + // I the LocalDB error code + __in HRESULT hrLocalDB, + // I Available flags: + // LOCALDB_TRUNCATE_ERR_MESSAGE - if the input buffer is too short, + // the error message will be truncated to fit into the buffer + __in DWORD dwFlags, + // I Language desired (LCID) or 0 (in which case Win32 FormatMessage order is used) + __in DWORD dwLanguageId, + // O the buffer to store the LocalDB error message + __out_ecount_z(*lpcchMessage) LPWSTR wszMessage, + // I/O on input has the size of the wszMessage buffer in characters. On output, if the given buffer size is + // too small, has the buffer size required, in characters, including trailing null. If the function succeeds + // contains the number of characters in the message, excluding the trailing null + __inout LPDWORD lpcchMessage +); + +// type definition for function pointer to LocalDBFormatMessage function +typedef FnLocalDBFormatMessage* PFnLocalDBFormatMessage; + + +// MessageId: LOCALDB_ERROR_NOT_INSTALLED +// +// MessageText: +// +// LocalDB is not installed. +// +#define LOCALDB_ERROR_NOT_INSTALLED ((HRESULT)0x89C50116L) + +//--------------------------------------------------------------------- +// Function: LocalDBCreateInstance +// +// Description: This function will create the new LocalDB instance. +// +// Available Flags: +// No flags available. Reserved for future use. +// +// Return Values: +// S_OK, if the function succeeds +// LOCALDB_ERROR_INVALID_PARAM_INSTANCE_NAME, if the instance name parameter is invalid +// LOCALDB_ERROR_INVALID_PARAM_VERSION, if the version parameter is invalid +// LOCALDB_ERROR_INVALID_PARAM_FLAGS, if the flags are invalid +// LOCALDB_ERROR_INVALID_OPERATION, if the user tries to create a default instance +// LOCALDB_ERROR_INSTANCE_FOLDER_PATH_TOO_LONG, if the path where instance should be stored is longer than MAX_PATH +// LOCALDB_ERROR_VERSION_REQUESTED_NOT_INSTALLED, if the specified service level is not installed +// LOCALDB_ERROR_INSTANCE_FOLDER_ALREADY_EXISTS, if the instance folder already exists and is not empty +// LOCALDB_ERROR_INSTANCE_EXISTS_WITH_LOWER_VERSION, if the specified instance already exists but with lower version +// LOCALDB_ERROR_CANNOT_CREATE_INSTANCE_FOLDER, if a folder cannot be created under %userprofile% +// LOCALDB_ERROR_CANNOT_GET_USER_PROFILE_FOLDER, if a user profile folder cannot be retrieved +// LOCALDB_ERROR_CANNOT_ACCESS_INSTANCE_FOLDER, if a instance folder cannot be accessed +// LOCALDB_ERROR_CANNOT_ACCESS_INSTANCE_REGISTRY, if a instance registry cannot be accessed +// LOCALDB_ERROR_INTERNAL_ERROR, if an unexpected error occurred. See event log for details +// LOCALDB_ERROR_CANNOT_MODIFY_INSTANCE_REGISTRY, if an instance registry cannot be modified +// LOCALDB_ERROR_CANNOT_CREATE_SQL_PROCESS, if a process for Sql Server cannot be created +// LOCALDB_ERROR_SQL_SERVER_STARTUP_FAILED, if a Sql Server process is started but Sql Server startup failed. +// LOCALDB_ERROR_INSTANCE_CONFIGURATION_CORRUPT, if a instance configuration is corrupted +// +FnLocalDBCreateInstance LocalDBCreateInstance; + +//--------------------------------------------------------------------- +// Function: LocalDBStartInstance +// +// Description: This function will start the given LocalDB instance. +// +// Return Values: +// S_OK, if the function succeeds +// LOCALDB_ERROR_UNKNOWN_INSTANCE, if the specified instance doesn't exist +// LOCALDB_ERROR_INVALID_PARAM_INSTANCE_NAME, if the instance name parameter is invalid +// LOCALDB_ERROR_INVALID_PARAM_CONNECTION, if the wszSqlConnection parameter is NULL +// LOCALDB_ERROR_INVALID_PARAM_FLAGS, if the flags are invalid +// LOCALDB_ERROR_INSUFFICIENT_BUFFER, if the buffer wszSqlConnection is too small +// LOCALDB_ERROR_INSTANCE_FOLDER_PATH_TOO_LONG, if the path where instance should be stored is longer than MAX_PATH + +// LOCALDB_ERROR_CANNOT_GET_USER_PROFILE_FOLDER, if a user profile folder cannot be retrieved +// LOCALDB_ERROR_CANNOT_ACCESS_INSTANCE_FOLDER, if a instance folder cannot be accessed +// LOCALDB_ERROR_CANNOT_ACCESS_INSTANCE_REGISTRY, if a instance registry cannot be accessed +// LOCALDB_ERROR_INTERNAL_ERROR, if an unexpected error occurred. See event log for details +// LOCALDB_ERROR_CANNOT_MODIFY_INSTANCE_REGISTRY, if an instance registry cannot be modified +// LOCALDB_ERROR_CANNOT_CREATE_SQL_PROCESS, if a process for Sql Server cannot be created +// LOCALDB_ERROR_SQL_SERVER_STARTUP_FAILED, if a Sql Server process is started but Sql Server startup failed. +// LOCALDB_ERROR_INSTANCE_CONFIGURATION_CORRUPT, if a instance configuration is corrupted +// +FnLocalDBStartInstance LocalDBStartInstance; + +// type definition for LocalDBStopInstance function +typedef HRESULT __cdecl FnLocalDBStopInstance ( + // I the LocalDB instance name + __in_z PCWSTR pInstanceName, + // I Available flags: + // LOCALDB_SHUTDOWN_KILL_PROCESS - force the instance to stop immediately + // LOCALDB_SHUTDOWN_WITH_NOWAIT - shutdown the instance with NOWAIT option + __in DWORD dwFlags, + // I the time in seconds to wait this operation to complete. If this value is 0, this function will return immediately + // without waiting for LocalDB instance to stop + __in ULONG ulTimeout +); + +// type definition for pointer to LocalDBStopInstance function +typedef FnLocalDBStopInstance* PFnLocalDBStopInstance; + +// Flags for the StopLocalDBInstance function +#define LOCALDB_SHUTDOWN_KILL_PROCESS 0x0001L +#define LOCALDB_SHUTDOWN_WITH_NOWAIT 0x0002L + +//--------------------------------------------------------------------- +// Function: LocalDBStopInstance +// +// Description: This function will shutdown the given LocalDB instance. +// If the flag LOCALDB_SHUTDOWN_KILL_PROCESS is set, the LocalDB instance will be killed immediately. +// IF the flag LOCALDB_SHUTDOWN_WITH_NOWAIT is set, the LocalDB instance will shutdown with NOWAIT option. +// +// Return Values: +// S_OK, if the function succeeds +// LOCALDB_ERROR_UNKNOWN_INSTANCE, if the specified instance doesn't exist +// LOCALDB_ERROR_INVALID_PARAM_INSTANCE_NAME, if the instance name parameter is invalid +// LOCALDB_ERROR_INVALID_PARAM_FLAGS, if the flags are invalid +// LOCALDB_ERROR_WAIT_TIMEOUT - if this function has not finished in given time +// LOCALDB_ERROR_INTERNAL_ERROR, if an unexpected error occurred. See event log for details +// +FnLocalDBStopInstance LocalDBStopInstance; + +// type definition for LocalDBDeleteInstance function +typedef HRESULT __cdecl FnLocalDBDeleteInstance ( + // I the LocalDB instance name + __in_z PCWSTR pInstanceName, + // I reserved for the future use. Currently should be set to 0. + __in DWORD dwFlags +); + +// type definition for pointer to LocalDBDeleteInstance function +typedef FnLocalDBDeleteInstance* PFnLocalDBDeleteInstance; + +//--------------------------------------------------------------------- +// Function: LocalDBDeleteInstance +// +// Description: This function will remove the given LocalDB instance. If the given instance is running this function will +// fail with the error code LOCALDB_ERROR_INSTANCE_BUSY. +// +// Return Values: +// S_OK, if the function succeeds +// LOCALDB_ERROR_INVALID_PARAM_INSTANCE_NAME, if the instance name parameter is invalid +// LOCALDB_ERROR_INVALID_PARAM_FLAGS, if the flags are invalid +// LOCALDB_ERROR_UNKNOWN_INSTANCE, if the specified instance doesn't exist +// LOCALDB_ERROR_INSTANCE_BUSY, if the given instance is running +// LOCALDB_ERROR_INTERNAL_ERROR, if an unexpected error occurred. See event log for details +// +FnLocalDBDeleteInstance LocalDBDeleteInstance; + +// Function: LocalDBFormatMessage +// +// Description: This function will return the localized textual description for the given LocalDB error +// +// Available Flags: +// LOCALDB_TRUNCATE_ERR_MESSAGE - the error message should be truncated to fit into the provided buffer +// +// Return Value: +// S_OK, if the function succeeds +// +// LOCALDB_ERROR_UNKNOWN_HRESULT, if the given HRESULT is unknown +// LOCALDB_ERROR_UNKNOWN_LANGUAGE_ID, if the given language id is unknown (0 is recommended for the // default language) +// LOCALDB_ERROR_UNKNOWN_ERROR_CODE, if the LocalDB error code is unknown +// LOCALDB_ERROR_INVALID_PARAM_FLAGS, if the flags are invalid +// LOCALDB_ERROR_INSUFFICIENT_BUFFER, if the input buffer is too short and LOCALDB_TRUNCATE_ERR_MESSAGE flag +// is not set +// LOCALDB_ERROR_INTERNAL_ERROR, if an unexpected error occurred. See event log for details +// +FnLocalDBFormatMessage LocalDBFormatMessage; + +#define MAX_LOCALDB_INSTANCE_NAME_LENGTH 128 +#define MAX_LOCALDB_PARENT_INSTANCE_LENGTH MAX_INSTANCE_NAME + +typedef WCHAR TLocalDBInstanceName[MAX_LOCALDB_INSTANCE_NAME_LENGTH + 1]; +typedef TLocalDBInstanceName* PTLocalDBInstanceName; + +// type definition for LocalDBGetInstances function +typedef HRESULT __cdecl FnLocalDBGetInstances( + // O buffer for a LocalDB instance names + __out PTLocalDBInstanceName pInstanceNames, + // I/O on input has the number slots for instance names in the pInstanceNames buffer. On output, + // has the number of existing LocalDB instances + __inout LPDWORD lpdwNumberOfInstances +); + +// type definition for pointer to LocalDBGetInstances function +typedef FnLocalDBGetInstances* PFnLocalDBGetInstances; + +// Function: LocalDBGetInstances +// +// Description: This function returns names for all existing Local DB instances +// +// Usage Example: +// DWORD dwN = 0; +// LocalDBGetInstances(NULL, &dwN); + +// PTLocalDBInstanceName insts = (PTLocalDBInstanceName) malloc(dwN * sizeof(TLocalDBInstanceName)); +// LocalDBGetInstances(insts, &dwN); + +// for (int i = 0; i < dwN; i++) +// wprintf(L"%s\n", insts[i]); +// +// Return values: +// S_OK, if the function succeeds +// +// LOCALDB_ERROR_INSUFFICIENT_BUFFER, the given buffer is to small +// LOCALDB_ERROR_INTERNAL_ERROR, if an unexpected error occurred. See event log for details +// +FnLocalDBGetInstances LocalDBGetInstances; + +// SID string format: S - Revision(1B) - Authority ID (6B) {- Sub authority ID (4B)} * max 15 sub-authorities = 1 + 1 + 3 + 1 + 15 + (1 + 10) * 15 +#define MAX_STRING_SID_LENGTH 186 + +#pragma pack(push) +#pragma pack(8) + +// DEVNOTE: If you want to modify this structure please read DEVNOTEs on top of function LocalDBGetInstanceInfo in sqluserinstance.cpp file. +// +typedef struct _LocalDBInstanceInfo +{ + DWORD cbLocalDBInstanceInfoSize; + TLocalDBInstanceName wszInstanceName; + BOOL bExists; + BOOL bConfigurationCorrupted; + BOOL bIsRunning; + DWORD dwMajor; + DWORD dwMinor; + DWORD dwBuild; + DWORD dwRevision; + FILETIME ftLastStartDateUTC; + WCHAR wszConnection[LOCALDB_MAX_SQLCONNECTION_BUFFER_SIZE]; + BOOL bIsShared; + TLocalDBInstanceName wszSharedInstanceName; + WCHAR wszOwnerSID[MAX_STRING_SID_LENGTH + 1]; + BOOL bIsAutomatic; +} LocalDBInstanceInfo; + +#pragma pack(pop) + +typedef LocalDBInstanceInfo* PLocalDBInstanceInfo; + +// type definition for LocalDBGetInstanceInfo function +typedef HRESULT __cdecl FnLocalDBGetInstanceInfo( + // I the LocalDB instance name + __in_z PCWSTR wszInstanceName, + // O instance information + __out PLocalDBInstanceInfo pInfo, + // I Size of LocalDBInstanceInfo structure in bytes + __in DWORD cbInfo); + +// type definition for pointer to LocalDBGetInstances function +typedef FnLocalDBGetInstanceInfo* PFnLocalDBGetInstanceInfo; + +// Function: LocalDBGetInstanceInfo +// +// Description: This function returns information about the given instance. +// +// Return values: +// S_OK, if the function succeeds +// +// ERROR_INVALID_PARAMETER, if some of the parameters is invalid +// LOCALDB_ERROR_INTERNAL_ERROR, if an unexpected error occurred. See event log for details +// +FnLocalDBGetInstanceInfo LocalDBGetInstanceInfo; + +// Version has format: Major.Minor[.Build[.Revision]]. Each of components is 32bit integer which is at most 40 digits and 3 dots +// +#define MAX_LOCALDB_VERSION_LENGTH 43 + +typedef WCHAR TLocalDBVersion[MAX_LOCALDB_VERSION_LENGTH + 1]; +typedef TLocalDBVersion* PTLocalDBVersion; + +// type definition for LocalDBGetVersions function +typedef HRESULT __cdecl FnLocalDBGetVersions( + // O buffer for installed LocalDB versions + __out PTLocalDBVersion pVersions, + // I/O on input has the number slots for versions in the pVersions buffer. On output, + // has the number of existing LocalDB versions + __inout LPDWORD lpdwNumberOfVersions +); + +// type definition for pointer to LocalDBGetVersions function +typedef FnLocalDBGetVersions* PFnLocalDBGetVersions; + +// Function: LocalDBGetVersions +// +// Description: This function returns all installed LocalDB versions. Returned versions will be in format Major.Minor +// +// Usage Example: +// DWORD dwN = 0; +// LocalDBGetVersions(NULL, &dwN); + +// PTLocalDBVersion versions = (PTLocalDBVersion) malloc(dwN * sizeof(TLocalDBVersion)); +// LocalDBGetVersions(insts, &dwN); + +// for (int i = 0; i < dwN; i++) +// wprintf(L"%s\n", insts[i]); +// +// Return values: +// S_OK, if the function succeeds +// +// LOCALDB_ERROR_INSUFFICIENT_BUFFER, the given buffer is to small +// LOCALDB_ERROR_INTERNAL_ERROR, if an unexpected error occurs. +// +FnLocalDBGetVersions LocalDBGetVersions; + +#pragma pack(push) +#pragma pack(8) + +// DEVNOTE: If you want to modify this structure please read DEVNOTEs on top of function LocalDBGetVersionInfo in sqluserinstance.cpp file. +// +typedef struct _LocalDBVersionInfo +{ + DWORD cbLocalDBVersionInfoSize; + TLocalDBVersion wszVersion; + BOOL bExists; + DWORD dwMajor; + DWORD dwMinor; + DWORD dwBuild; + DWORD dwRevision; +} LocalDBVersionInfo; + +#pragma pack(pop) + +typedef LocalDBVersionInfo* PLocalDBVersionInfo; + +// type definition for LocalDBGetVersionInfo function +typedef HRESULT __cdecl FnLocalDBGetVersionInfo( + // I LocalDB version string + __in_z PCWSTR wszVersion, + // O version information + __out PLocalDBVersionInfo pVersionInfo, + // I Size of LocalDBVersionInfo structure in bytes + __in DWORD cbVersionInfo +); + +// type definition for pointer to LocalDBGetVersionInfo function +typedef FnLocalDBGetVersionInfo* PFnLocalDBGetVersionInfo; + +// Function: LocalDBGetVersionInfo +// +// Description: This function returns information about the given LocalDB version +// +// Return values: +// S_OK, if the function succeeds +// LOCALDB_ERROR_INTERNAL_ERROR, if some internal error occurred +// LOCALDB_ERROR_INVALID_PARAMETER, if a input parameter is invalid +// +FnLocalDBGetVersionInfo LocalDBGetVersionInfo; + +typedef HRESULT __cdecl FnLocalDBStartTracing(); +typedef FnLocalDBStartTracing* PFnLocalDBStartTracing; + +// Function: LocalDBStartTracing +// +// Description: This function will write in registry that Tracing sessions should be started for the current user. +// +// Return values: +// S_OK - on success +// Propper HRESULT in case of failure +// +FnLocalDBStartTracing LocalDBStartTracing; + +typedef HRESULT __cdecl FnLocalDBStopTracing(); +typedef FnLocalDBStopTracing* PFnFnLocalDBStopTracing; + +// Function: LocalDBStopTracing +// +// Description: This function will write in registry that Tracing sessions should be stopped for the current user. +// +// Return values: +// S_OK - on success +// Propper HRESULT in case of failure +// +FnLocalDBStopTracing LocalDBStopTracing; + +// type definition for LocalDBShareInstance function +typedef HRESULT __cdecl FnLocalDBShareInstance( + // I the SID of the LocalDB instance owner + __in_opt PSID pOwnerSID, + // I the private name of LocalDB instance which should be shared + __in_z PCWSTR wszPrivateLocalDBInstanceName, + // I the public shared name + __in_z PCWSTR wszSharedName, + // I reserved for the future use. Currently should be set to 0. + __in DWORD dwFlags); + +// type definition for pointer to LocalDBShareInstance function +typedef FnLocalDBShareInstance* PFnLocalDBShareInstance; + +// Function: LocalDBShareInstance +// +// Description: This function will share the given private instance of the given user with the given shared name. +// This function has to be executed elevated. +// +// Return values: +// HRESULT +// +FnLocalDBShareInstance LocalDBShareInstance; + +// type definition for LocalDBUnshareInstance function +typedef HRESULT __cdecl FnLocalDBUnshareInstance( + // I the LocalDB instance name + __in_z PCWSTR pInstanceName, + // I reserved for the future use. Currently should be set to 0. + __in DWORD dwFlags); + +// type definition for pointer to LocalDBUnshareInstance function +typedef FnLocalDBUnshareInstance* PFnLocalDBUnshareInstance; + +// Function: LocalDBUnshareInstance +// +// Description: This function unshares the given LocalDB instance. +// If a shared name is given then that shared instance will be unshared. +// If a private name is given then we will check if the caller +// shares a private instance with the given private name and unshare it. +// +// Return values: +// HRESULT +// +FnLocalDBUnshareInstance LocalDBUnshareInstance; + +#ifdef __cplusplus +} // extern "C" +#endif + +#if defined(LOCALDB_DEFINE_PROXY_FUNCTIONS) +//--------------------------------------------------------------------- +// The following section is enabled only if the constant LOCALDB_DEFINE_PROXY_FUNCTIONS +// is defined. It provides an implementation of proxies for each of the LocalDB APIs. +// The proxy implementations use a common function to bind to entry points in the +// latest installed SqlUserInstance DLL, and then forward the requests. +// +// The current implementation loads the SqlUserInstance DLL on the first call into +// a proxy function. There is no provision for unloading the DLL. Note that if the +// process includes multiple binaries (EXE and one or more DLLs), each of them could +// load a separate instance of the SqlUserInstance DLL. +// +// For future consideration: allow the SqlUserInstance DLL to be unloaded dynamically. +// +// WARNING: these functions must not be called in DLL initialization, since a deadlock +// could result loading dependent DLLs. +//--------------------------------------------------------------------- + +// This macro provides the body for each proxy function. +// +#define LOCALDB_PROXY(LocalDBFn) static Fn##LocalDBFn* pfn##LocalDBFn = NULL; if (!pfn##LocalDBFn) {HRESULT hr = LocalDBGetPFn(#LocalDBFn, (FARPROC *)&pfn##LocalDBFn); if (FAILED(hr)) return hr;} return (*pfn##LocalDBFn) + +// Structure and function to parse the "Installed Versions" registry subkeys +// +typedef struct { + DWORD dwComponent[2]; + WCHAR wszKeyName[256]; +} Version; + +// The following algorithm is intended to match, in part, the .NET Version class. +// A maximum of two components are allowed, which must be separated with a period. +// Valid: "11", "11.0" +// Invalid: "", ".0", "11.", "11.0." +// +static BOOL ParseVersion(Version * pVersion) +{ + pVersion->dwComponent[0] = 0; + pVersion->dwComponent[1] = 0; + WCHAR * pwch = pVersion->wszKeyName; + + for (int i = 0; i<2; i++) + { + LONGLONG llVal = 0; + BOOL fHaveDigit = FALSE; + + while (*pwch >= L'0' && *pwch <= L'9') + { + llVal = llVal * 10 + (*pwch++ - L'0'); + fHaveDigit = TRUE; + + if (llVal > 0x7fffffff) + { + return FALSE; + } + } + + if (!fHaveDigit) + return FALSE; + + pVersion->dwComponent[i] = (DWORD) llVal; + + if (*pwch == L'\0') + return TRUE; + + if (*pwch != L'.') + return FALSE; + + pwch++; + } + // If we get here, the version string was terminated with L'.', which is not valid + // + return FALSE; +} + +#include + +// This function loads the correct LocalDB API DLL (if required) and returns a pointer to a procedure. +// Note that the first-loaded API DLL for the process will be used until process termination: installation of +// a new version of the API will not be recognized after first load. +// +static HRESULT LocalDBGetPFn(LPCSTR szLocalDBFn, FARPROC *pfnLocalDBFn) +{ + static volatile HMODULE hLocalDBDll = NULL; + + if (!hLocalDBDll) + { + LONG ec; + HKEY hkeyVersions = NULL; + HKEY hkeyVersion = NULL; + Version verHigh = {0}; + Version verCurrent; + DWORD cchKeyName; + DWORD dwValueType; + WCHAR wszLocalDBDll[MAX_PATH+1]; + DWORD cbLocalDBDll = sizeof(wszLocalDBDll) - sizeof(WCHAR); // to deal with RegQueryValueEx null-termination quirk + HMODULE hLocalDBDllTemp = NULL; + + if (ERROR_SUCCESS != (ec = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Microsoft SQL Server Local DB\\Installed Versions", 0, KEY_READ, &hkeyVersions))) + { + goto Cleanup; + } + + for (int i = 0; ; i++) + { + cchKeyName = 256; + if (ERROR_SUCCESS != (ec = RegEnumKeyExW(hkeyVersions, i, verCurrent.wszKeyName, &cchKeyName, 0, NULL, NULL, NULL))) + { + if (ERROR_NO_MORE_ITEMS == ec) + { + break; + } + goto Cleanup; + } + + if (!ParseVersion(&verCurrent)) + { + continue; // invalid version syntax + } + + if (verCurrent.dwComponent[0] > verHigh.dwComponent[0] || + (verCurrent.dwComponent[0] == verHigh.dwComponent[0] && verCurrent.dwComponent[1] > verHigh.dwComponent[1])) + { + verHigh = verCurrent; + } + } + if (!verHigh.wszKeyName[0]) + { + // ec must be ERROR_NO_MORE_ITEMS here + // + assert(ec == ERROR_NO_MORE_ITEMS); + + // We will change the error code to ERROR_FILE_NOT_FOUND in order to indicate that + // LocalDB instalation is not found. Registry key "SOFTWARE\\Microsoft\\Microsoft SQL Server Local DB\\Installed Versions" exists + // but it is empty. + // + ec = ERROR_FILE_NOT_FOUND; + goto Cleanup; + } + + if (ERROR_SUCCESS != (ec = RegOpenKeyExW(hkeyVersions, verHigh.wszKeyName, 0, KEY_READ, &hkeyVersion))) + { + goto Cleanup; + } + if (ERROR_SUCCESS != (ec = RegQueryValueExW(hkeyVersion, L"InstanceAPIPath", NULL, &dwValueType, (PBYTE) wszLocalDBDll, &cbLocalDBDll))) + { + goto Cleanup; + } + if (dwValueType != REG_SZ) + { + ec = ERROR_INVALID_DATA; + goto Cleanup; + } + // Ensure string value null-terminated + // Note that we left a spare character in the output buffer for RegQueryValueEx for this purpose + // + wszLocalDBDll[cbLocalDBDll/sizeof(WCHAR)] = L'\0'; + + hLocalDBDllTemp = LoadLibraryW(wszLocalDBDll); + if (NULL == hLocalDBDllTemp) + { + ec = GetLastError(); + goto Cleanup; + } + if (NULL == InterlockedCompareExchangePointer((volatile PVOID *)&hLocalDBDll, hLocalDBDllTemp, NULL)) + { + // We were the winner: we gave away our DLL handle + // + hLocalDBDllTemp = NULL; + } + ec = ERROR_SUCCESS; +Cleanup: + if (hLocalDBDllTemp) + FreeLibrary(hLocalDBDllTemp); + if (hkeyVersion) + RegCloseKey(hkeyVersion); + if (hkeyVersions) + RegCloseKey(hkeyVersions); + + // Error code ERROR_FILE_NOT_FOUND can occure if registry hive with installed LocalDB versions is missing. + // In that case we should return the LocalDB specific error code + // + if (ec == ERROR_FILE_NOT_FOUND) + return LOCALDB_ERROR_NOT_INSTALLED; + + if (ec != ERROR_SUCCESS) + return HRESULT_FROM_WIN32(ec); + } + + FARPROC pfn = GetProcAddress(hLocalDBDll, szLocalDBFn); + + if (!pfn) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + *pfnLocalDBFn = pfn; + return S_OK; +} + +// The following proxy functions forward calls to the latest LocalDB API DLL. +// + +HRESULT __cdecl +LocalDBCreateInstance ( + // I the LocalDB version (e.g. 11.0 or 11.0.1094.2) + __in_z PCWSTR wszVersion, + // I the instance name + __in_z PCWSTR pInstanceName, + // I reserved for the future use. Currently should be set to 0. + __in DWORD dwFlags +) +{ + LOCALDB_PROXY(LocalDBCreateInstance)(wszVersion, pInstanceName, dwFlags); +} + +HRESULT __cdecl +LocalDBStartInstance( + // I the instance name + __in_z PCWSTR pInstanceName, + // I reserved for the future use. Currently should be set to 0. + __in DWORD dwFlags, + // O the buffer to store the connection string to the LocalDB instance + __out_ecount_z_opt(*lpcchSqlConnection) LPWSTR wszSqlConnection, + // I/O on input has the size of the wszSqlConnection buffer in characters. On output, if the given buffer size is + // too small, has the buffer size required, in characters, including trailing null. + __inout_opt LPDWORD lpcchSqlConnection +) +{ + LOCALDB_PROXY(LocalDBStartInstance)(pInstanceName, dwFlags, wszSqlConnection, lpcchSqlConnection); +} + +HRESULT __cdecl +LocalDBStopInstance ( + // I the instance name + __in_z PCWSTR pInstanceName, + // I Available flags: + // LOCALDB_SHUTDOWN_KILL_PROCESS - force the instance to stop immediately + // LOCALDB_SHUTDOWN_WITH_NOWAIT - shutdown the instance with NOWAIT option + __in DWORD dwFlags, + // I the time in seconds to wait this operation to complete. If this value is 0, this function will return immediately + // without waiting for LocalDB instance to stop + __in ULONG ulTimeout +) +{ + LOCALDB_PROXY(LocalDBStopInstance)(pInstanceName, dwFlags, ulTimeout); +} + +HRESULT __cdecl +LocalDBDeleteInstance ( + // I the instance name + __in_z PCWSTR pInstanceName, + // reserved for the future use. Currently should be set to 0. + __in DWORD dwFlags +) +{ + LOCALDB_PROXY(LocalDBDeleteInstance)(pInstanceName, dwFlags); +} + +HRESULT __cdecl +LocalDBFormatMessage( + // I the LocalDB error code + __in HRESULT hrLocalDB, + // I Available flags: + // LOCALDB_TRUNCATE_ERR_MESSAGE - if the input buffer is too short, + // the error message will be truncated to fit into the buffer + __in DWORD dwFlags, + // I Language desired (LCID) or 0 (in which case Win32 FormatMessage order is used) + __in DWORD dwLanguageId, + // O the buffer to store the LocalDB error message + __out_ecount_z(*lpcchMessage) LPWSTR wszMessage, + // I/O on input has the size of the wszMessage buffer in characters. On output, if the given buffer size is + // too small, has the buffer size required, in characters, including trailing null. If the function succeeds + // contains the number of characters in the message, excluding the trailing null + __inout LPDWORD lpcchMessage +) +{ + LOCALDB_PROXY(LocalDBFormatMessage)(hrLocalDB, dwFlags, dwLanguageId, wszMessage, lpcchMessage); +} + +HRESULT __cdecl +LocalDBGetInstances( + // O buffer with instance names + __out PTLocalDBInstanceName pInstanceNames, + // I/O on input has the number slots for instance names in the pInstanceNames buffer. On output, + // has the number of existing LocalDB instances + __inout LPDWORD lpdwNumberOfInstances +) +{ + LOCALDB_PROXY(LocalDBGetInstances)(pInstanceNames, lpdwNumberOfInstances); +} + +HRESULT __cdecl +LocalDBGetInstanceInfo( + // I the instance name + __in_z PCWSTR wszInstanceName, + // O instance information + __out PLocalDBInstanceInfo pInfo, + // I Size of LocalDBInstanceInfo structure in bytes + __in DWORD cbInfo +) +{ + LOCALDB_PROXY(LocalDBGetInstanceInfo)(wszInstanceName, pInfo, cbInfo); +} + +HRESULT __cdecl +LocalDBStartTracing() +{ + LOCALDB_PROXY(LocalDBStartTracing)(); +} + +HRESULT __cdecl +LocalDBStopTracing() +{ + LOCALDB_PROXY(LocalDBStopTracing)(); +} + +HRESULT __cdecl +LocalDBShareInstance( + // I the SID of the LocalDB instance owner + __in_opt PSID pOwnerSID, + // I the private name of LocalDB instance which should be shared + __in_z PCWSTR wszLocalDBInstancePrivateName, + // I the public shared name + __in_z PCWSTR wszSharedName, + // I reserved for the future use. Currently should be set to 0. + __in DWORD dwFlags) +{ + LOCALDB_PROXY(LocalDBShareInstance)(pOwnerSID, wszLocalDBInstancePrivateName, wszSharedName, dwFlags); +} + +HRESULT __cdecl +LocalDBGetVersions( + // O buffer for installed LocalDB versions + __out PTLocalDBVersion pVersions, + // I/O on input has the number slots for versions in the pVersions buffer. On output, + // has the number of existing LocalDB versions + __inout LPDWORD lpdwNumberOfVersions +) +{ + LOCALDB_PROXY(LocalDBGetVersions)(pVersions, lpdwNumberOfVersions); +} + +HRESULT __cdecl +LocalDBUnshareInstance( + // I the LocalDB instance name + __in_z PCWSTR pInstanceName, + // I reserved for the future use. Currently should be set to 0. + __in DWORD dwFlags) +{ + LOCALDB_PROXY(LocalDBUnshareInstance)(pInstanceName, dwFlags); +} + +HRESULT __cdecl +LocalDBGetVersionInfo( + // I LocalDB version string + __in_z PCWSTR wszVersion, + // O version information + __out PLocalDBVersionInfo pVersionInfo, + // I Size of LocalDBVersionInfo structure in bytes + __in DWORD cbVersionInfo) +{ + LOCALDB_PROXY(LocalDBGetVersionInfo)(wszVersion, pVersionInfo, cbVersionInfo); +} + +#endif + +#endif // _SQLUSERINSTANCE_H_ + +//----------------------------------------------------------------------------- +// File: sqluserinstancemsgs.mc +// +// Copyright: Copyright (c) Microsoft Corporation +//----------------------------------------------------------------------------- +#ifndef _LOCALDB_MESSAGES_H_ +#define _LOCALDB_MESSAGES_H_ +// Header section +// +// Section with the LocalDB messages +// +// +// Values are 32 bit values laid out as follows: +// +// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 +// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 +// +-+-+-+-+-+---------------------+-------------------------------+ +// |S|R|C|N|r| Facility | Code | +// +-+-+-+-+-+---------------------+-------------------------------+ +// +// where +// +// S - Severity - indicates success/fail +// +// 0 - Success +// 1 - Fail (COERROR) +// +// R - reserved portion of the facility code, corresponds to NT's +// second severity bit. +// +// C - reserved portion of the facility code, corresponds to NT's +// C field. +// +// N - reserved portion of the facility code. Used to indicate a +// mapped NT status value. +// +// r - reserved portion of the facility code. Reserved for internal +// use. Used to indicate HRESULT values that are not status +// values, but are instead message ids for display strings. +// +// Facility - is the facility code +// +// Code - is the facility's status code +// +// +// Define the facility codes +// +#define FACILITY_LOCALDB 0x9C5 + + +// +// Define the severity codes +// +#define LOCALDB_SEVERITY_SUCCESS 0x0 +#define LOCALDB_SEVERITY_ERROR 0x2 + + +// +// MessageId: LOCALDB_ERROR_CANNOT_CREATE_INSTANCE_FOLDER +// +// MessageText: +// +// Cannot create folder for the LocalDB instance at: %%LOCALAPPDATA%%\Microsoft\Microsoft SQL Server Local DB\Instances\. +// +#define LOCALDB_ERROR_CANNOT_CREATE_INSTANCE_FOLDER ((HRESULT)0x89C50100L) + +// +// MessageId: LOCALDB_ERROR_INVALID_PARAMETER +// +// MessageText: +// +// The parameter for the LocalDB Instance API method is incorrect. Consult the API documentation. +// +#define LOCALDB_ERROR_INVALID_PARAMETER ((HRESULT)0x89C50101L) + +// +// MessageId: LOCALDB_ERROR_INSTANCE_EXISTS_WITH_LOWER_VERSION +// +// MessageText: +// +// Unable to create the LocalDB instance with specified version. An instance with the same name already exists, but it has lower version than the specified version. +// +#define LOCALDB_ERROR_INSTANCE_EXISTS_WITH_LOWER_VERSION ((HRESULT)0x89C50102L) + +// +// MessageId: LOCALDB_ERROR_CANNOT_GET_USER_PROFILE_FOLDER +// +// MessageText: +// +// Cannot access the user profile folder for local application data (%%LOCALAPPDATA%%). +// +#define LOCALDB_ERROR_CANNOT_GET_USER_PROFILE_FOLDER ((HRESULT)0x89C50103L) + +// +// MessageId: LOCALDB_ERROR_INSTANCE_FOLDER_PATH_TOO_LONG +// +// MessageText: +// +// The full path length of the LocalDB instance folder is longer than MAX_PATH. The instance must be stored in folder: %%LOCALAPPDATA%%\Microsoft\Microsoft SQL Server Local DB\Instances\. +// +#define LOCALDB_ERROR_INSTANCE_FOLDER_PATH_TOO_LONG ((HRESULT)0x89C50104L) + +// +// MessageId: LOCALDB_ERROR_CANNOT_ACCESS_INSTANCE_FOLDER +// +// MessageText: +// +// Cannot access LocalDB instance folder: %%LOCALAPPDATA%%\Microsoft\Microsoft SQL Server Local DB\Instances\. +// +#define LOCALDB_ERROR_CANNOT_ACCESS_INSTANCE_FOLDER ((HRESULT)0x89C50105L) + +// +// MessageId: LOCALDB_ERROR_CANNOT_ACCESS_INSTANCE_REGISTRY +// +// MessageText: +// +// Unexpected error occurred while trying to access the LocalDB instance registry configuration. See the Windows Application event log for error details. +// +#define LOCALDB_ERROR_CANNOT_ACCESS_INSTANCE_REGISTRY ((HRESULT)0x89C50106L) + +// +// MessageId: LOCALDB_ERROR_UNKNOWN_INSTANCE +// +// MessageText: +// +// The specified LocalDB instance does not exist. +// +#define LOCALDB_ERROR_UNKNOWN_INSTANCE ((HRESULT)0x89C50107L) + +// +// MessageId: LOCALDB_ERROR_INTERNAL_ERROR +// +// MessageText: +// +// Unexpected error occurred inside a LocalDB instance API method call. See the Windows Application event log for error details. +// +#define LOCALDB_ERROR_INTERNAL_ERROR ((HRESULT)0x89C50108L) + +// +// MessageId: LOCALDB_ERROR_CANNOT_MODIFY_INSTANCE_REGISTRY +// +// MessageText: +// +// Unexpected error occurred while trying to modify the registry configuration for the LocalDB instance. See the Windows Application event log for error details. +// +#define LOCALDB_ERROR_CANNOT_MODIFY_INSTANCE_REGISTRY ((HRESULT)0x89C50109L) + +// +// MessageId: LOCALDB_ERROR_SQL_SERVER_STARTUP_FAILED +// +// MessageText: +// +// Error occurred during LocalDB instance startup: SQL Server process failed to start. +// +#define LOCALDB_ERROR_SQL_SERVER_STARTUP_FAILED ((HRESULT)0x89C5010AL) + +// +// MessageId: LOCALDB_ERROR_INSTANCE_CONFIGURATION_CORRUPT +// +// MessageText: +// +// LocalDB instance is corrupted. See the Windows Application event log for error details. +// +#define LOCALDB_ERROR_INSTANCE_CONFIGURATION_CORRUPT ((HRESULT)0x89C5010BL) + +// +// MessageId: LOCALDB_ERROR_CANNOT_CREATE_SQL_PROCESS +// +// MessageText: +// +// Error occurred during LocalDB instance startup: unable to create the SQL Server process. +// +#define LOCALDB_ERROR_CANNOT_CREATE_SQL_PROCESS ((HRESULT)0x89C5010CL) + +// +// MessageId: LOCALDB_ERROR_UNKNOWN_VERSION +// +// MessageText: +// +// The specified LocalDB version is not available on this computer. +// +#define LOCALDB_ERROR_UNKNOWN_VERSION ((HRESULT)0x89C5010DL) + +// +// MessageId: LOCALDB_ERROR_UNKNOWN_LANGUAGE_ID +// +// MessageText: +// +// Error getting the localized error message. The language specified by 'Language ID' parameter is unknown. +// +#define LOCALDB_ERROR_UNKNOWN_LANGUAGE_ID ((HRESULT)0x89C5010EL) + +// +// MessageId: LOCALDB_ERROR_INSTANCE_STOP_FAILED +// +// MessageText: +// +// Stop operation for LocalDB instance failed to complete within the specified time. +// +#define LOCALDB_ERROR_INSTANCE_STOP_FAILED ((HRESULT)0x89C5010FL) + +// +// MessageId: LOCALDB_ERROR_UNKNOWN_ERROR_CODE +// +// MessageText: +// +// Error getting the localized error message. The specified error code is unknown. +// +#define LOCALDB_ERROR_UNKNOWN_ERROR_CODE ((HRESULT)0x89C50110L) + +// +// MessageId: LOCALDB_ERROR_VERSION_REQUESTED_NOT_INSTALLED +// +// MessageText: +// +// The LocalDB version available on this workstation is lower than the requested LocalDB version. +// +#define LOCALDB_ERROR_VERSION_REQUESTED_NOT_INSTALLED ((HRESULT)0x89C50111L) + +// +// MessageId: LOCALDB_ERROR_INSTANCE_BUSY +// +// MessageText: +// +// Requested operation on LocalDB instance cannot be performed because specified instance is currently in use. Stop the instance and try again. +// +#define LOCALDB_ERROR_INSTANCE_BUSY ((HRESULT)0x89C50112L) + +// +// MessageId: LOCALDB_ERROR_INVALID_OPERATION +// +// MessageText: +// +// Default LocalDB instances cannot be created, stopped or deleted manually. +// +#define LOCALDB_ERROR_INVALID_OPERATION ((HRESULT)0x89C50113L) + +// +// MessageId: LOCALDB_ERROR_INSUFFICIENT_BUFFER +// +// MessageText: +// +// The buffer passed to the LocalDB instance API method has insufficient size. +// +#define LOCALDB_ERROR_INSUFFICIENT_BUFFER ((HRESULT)0x89C50114L) + +// +// MessageId: LOCALDB_ERROR_WAIT_TIMEOUT +// +// MessageText: +// +// Timeout occurred inside the LocalDB instance API method. +// +#define LOCALDB_ERROR_WAIT_TIMEOUT ((HRESULT)0x89C50115L) + +// MessageId=0x0116 message id is reserved. This message ID will be used for error LOCALDB_ERROR_NOT_INSTALLED. +// This message is specific since it has to be present in SqlUserIntsnace.h because it can be returned by discovery API. +// +// +// MessageId: LOCALDB_ERROR_XEVENT_FAILED +// +// MessageText: +// +// Failed to start XEvent engine within the LocalDB Instance API. +// +#define LOCALDB_ERROR_XEVENT_FAILED ((HRESULT)0x89C50117L) + +// +// MessageId: LOCALDB_ERROR_AUTO_INSTANCE_CREATE_FAILED +// +// MessageText: +// +// Cannot create an automatic instance. See the Windows Application event log for error details. +// +#define LOCALDB_ERROR_AUTO_INSTANCE_CREATE_FAILED ((HRESULT)0x89C50118L) + +// +// MessageId: LOCALDB_ERROR_SHARED_NAME_TAKEN +// +// MessageText: +// +// Cannot create a shared instance. The specified shared instance name is already in use. +// +#define LOCALDB_ERROR_SHARED_NAME_TAKEN ((HRESULT)0x89C50119L) + +// +// MessageId: LOCALDB_ERROR_CALLER_IS_NOT_OWNER +// +// MessageText: +// +// API caller is not LocalDB instance owner. +// +#define LOCALDB_ERROR_CALLER_IS_NOT_OWNER ((HRESULT)0x89C5011AL) + +// +// MessageId: LOCALDB_ERROR_INVALID_INSTANCE_NAME +// +// MessageText: +// +// Specified LocalDB instance name is invalid. +// +#define LOCALDB_ERROR_INVALID_INSTANCE_NAME ((HRESULT)0x89C5011BL) + +// +// MessageId: LOCALDB_ERROR_INSTANCE_ALREADY_SHARED +// +// MessageText: +// +// The specified LocalDB instance is already shared with different shared name. +// +#define LOCALDB_ERROR_INSTANCE_ALREADY_SHARED ((HRESULT)0x89C5011CL) + +// +// MessageId: LOCALDB_ERROR_INSTANCE_NOT_SHARED +// +// MessageText: +// +// The specified LocalDB instance is not shared. +// +#define LOCALDB_ERROR_INSTANCE_NOT_SHARED ((HRESULT)0x89C5011DL) + +// +// MessageId: LOCALDB_ERROR_ADMIN_RIGHTS_REQUIRED +// +// MessageText: +// +// Administrator privileges are required in order to execute this operation. +// +#define LOCALDB_ERROR_ADMIN_RIGHTS_REQUIRED ((HRESULT)0x89C5011EL) + +// +// MessageId: LOCALDB_ERROR_TOO_MANY_SHARED_INSTANCES +// +// MessageText: +// +// There are too many shared instance and we cannot generate unique User Instance Name. Unshare some of the existing shared instances. +// +#define LOCALDB_ERROR_TOO_MANY_SHARED_INSTANCES ((HRESULT)0x89C5011FL) + +// +// MessageId: LOCALDB_ERROR_CANNOT_GET_LOCAL_APP_DATA_PATH +// +// MessageText: +// +// Cannot get a local application data path. Most probably a user profile is not loaded. If LocalDB is executed under IIS, make sure that profile loading is enabled for the current user. +// +#define LOCALDB_ERROR_CANNOT_GET_LOCAL_APP_DATA_PATH ((HRESULT)0x89C50120L) + +// +// MessageId: LOCALDB_ERROR_CANNOT_LOAD_RESOURCES +// +// MessageText: +// +// Cannot load resources for this DLL. Resources for this DLL should be stored in a subfolder Resources, with the same file name as this DLL and the extension ".RLL". +// +#define LOCALDB_ERROR_CANNOT_LOAD_RESOURCES ((HRESULT)0x89C50121L) + + // Detailed error descriptions +// +// MessageId: LOCALDB_EDETAIL_DATADIRECTORY_IS_MISSING +// +// MessageText: +// +// The "DataDirectory" registry value is missing in the LocalDB instance registry key: %1 +// +#define LOCALDB_EDETAIL_DATADIRECTORY_IS_MISSING ((HRESULT)0x89C50200L) + +// +// MessageId: LOCALDB_EDETAIL_CANNOT_ACCESS_INSTANCE_FOLDER +// +// MessageText: +// +// Cannot access LocalDB instance folder: %1 +// +#define LOCALDB_EDETAIL_CANNOT_ACCESS_INSTANCE_FOLDER ((HRESULT)0x89C50201L) + +// +// MessageId: LOCALDB_EDETAIL_DATADIRECTORY_IS_TOO_LONG +// +// MessageText: +// +// The "DataDirectory" registry value is too long in the LocalDB instance registry key: %1 +// +#define LOCALDB_EDETAIL_DATADIRECTORY_IS_TOO_LONG ((HRESULT)0x89C50202L) + +// +// MessageId: LOCALDB_EDETAIL_PARENT_INSTANCE_IS_MISSING +// +// MessageText: +// +// The "Parent Instance" registry value is missing in the LocalDB instance registry key: %1 +// +#define LOCALDB_EDETAIL_PARENT_INSTANCE_IS_MISSING ((HRESULT)0x89C50203L) + +// +// MessageId: LOCALDB_EDETAIL_PARENT_INSTANCE_IS_TOO_LONG +// +// MessageText: +// +// The "Parent Instance" registry value is too long in the LocalDB instance registry key: %1 +// +#define LOCALDB_EDETAIL_PARENT_INSTANCE_IS_TOO_LONG ((HRESULT)0x89C50204L) + +// +// MessageId: LOCALDB_EDETAIL_DATA_DIRECTORY_INVALID +// +// MessageText: +// +// Data directory for LocalDB instance is invalid: %1 +// +#define LOCALDB_EDETAIL_DATA_DIRECTORY_INVALID ((HRESULT)0x89C50205L) + +// +// MessageId: LOCALDB_EDETAIL_XEVENT_ASSERT +// +// MessageText: +// +// LocalDB instance API: XEvent engine assert: %1 in %2:%3 (%4) +// +#define LOCALDB_EDETAIL_XEVENT_ASSERT ((HRESULT)0x89C50206L) + +// +// MessageId: LOCALDB_EDETAIL_XEVENT_ERROR +// +// MessageText: +// +// LocalDB instance API: XEvent error: %1 +// +#define LOCALDB_EDETAIL_XEVENT_ERROR ((HRESULT)0x89C50207L) + +// +// MessageId: LOCALDB_EDETAIL_INSTALLATION_CORRUPTED +// +// MessageText: +// +// LocalDB installation is corrupted. Reinstall the LocalDB. +// +#define LOCALDB_EDETAIL_INSTALLATION_CORRUPTED ((HRESULT)0x89C50208L) + +// +// MessageId: LOCALDB_EDETAIL_CANNOT_GET_PROGRAM_FILES_LOCATION +// +// MessageText: +// +// LocalDB XEvent error: cannot determine %ProgramFiles% folder location. +// +#define LOCALDB_EDETAIL_CANNOT_GET_PROGRAM_FILES_LOCATION ((HRESULT)0x89C50209L) + +// +// MessageId: LOCALDB_EDETAIL_XEVENT_CANNOT_INITIALIZE +// +// MessageText: +// +// LocalDB XEvent error: Cannot initialize XEvent engine. +// +#define LOCALDB_EDETAIL_XEVENT_CANNOT_INITIALIZE ((HRESULT)0x89C5020AL) + +// +// MessageId: LOCALDB_EDETAIL_XEVENT_CANNOT_FIND_CONF_FILE +// +// MessageText: +// +// LocalDB XEvent error: Cannot find XEvents configuration file: %1 +// +#define LOCALDB_EDETAIL_XEVENT_CANNOT_FIND_CONF_FILE ((HRESULT)0x89C5020BL) + +// +// MessageId: LOCALDB_EDETAIL_XEVENT_CANNOT_CONFIGURE +// +// MessageText: +// +// LocalDB XEvent error: Cannot configure XEvents engine with the configuration file: %1 +// HRESULT returned: %2 +// +#define LOCALDB_EDETAIL_XEVENT_CANNOT_CONFIGURE ((HRESULT)0x89C5020CL) + +// +// MessageId: LOCALDB_EDETAIL_XEVENT_CONF_FILE_NAME_TOO_LONG +// +// MessageText: +// +// LocalDB XEvent error: XEvents engine configuration file too long +// +#define LOCALDB_EDETAIL_XEVENT_CONF_FILE_NAME_TOO_LONG ((HRESULT)0x89C5020DL) + +// +// MessageId: LOCALDB_EDETAIL_COINITIALIZEEX_FAILED +// +// MessageText: +// +// CoInitializeEx API failed. HRESULT returned: %1 +// +#define LOCALDB_EDETAIL_COINITIALIZEEX_FAILED ((HRESULT)0x89C5020EL) + +// +// MessageId: LOCALDB_EDETAIL_PARENT_INSTANCE_VERSION_INVALID +// +// MessageText: +// +// LocalDB parent instance version is invalid: %1 +// +#define LOCALDB_EDETAIL_PARENT_INSTANCE_VERSION_INVALID ((HRESULT)0x89C5020FL) + +// +// MessageId: LOCALDB_EDETAIL_WINAPI_ERROR +// +// MessageText: +// +// Windows API call %1 returned error code: %2. Windows system error message is: %3Reported at line: %4. %5 +// +#define LOCALDB_EDETAIL_WINAPI_ERROR ((HRESULT)0xC9C50210L) + +// +// MessageId: LOCALDB_EDETAIL_UNEXPECTED_RESULT +// +// MessageText: +// +// Function %1 returned %2 at line %3. +// +#define LOCALDB_EDETAIL_UNEXPECTED_RESULT ((HRESULT)0x89C50211L) + +// +#endif // _LOCALDB_MESSAGES_H_ + +#endif //__msodbcsql_h__ diff --git a/pdo_sqlsrv/pdo_sqlsrv.h b/pdo_sqlsrv/pdo_sqlsrv.h index 353cd269..62c73f0f 100644 --- a/pdo_sqlsrv/pdo_sqlsrv.h +++ b/pdo_sqlsrv/pdo_sqlsrv.h @@ -6,20 +6,21 @@ // // Contents: Declarations for the extension // -// Copyright Microsoft Corporation -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// -// You may obtain a copy of the License at: -// http://www.apache.org/licenses/LICENSE-2.0 +// Microsoft Drivers for PHP for SQL Server +// Copyright (c) Microsoft Corporation. All rights reserved. // +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use these files except in compliance with the License. + +// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -//--------------------------------------------------------------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------------------------------------------------------------- #include "core_sqlsrv.h" #include "version.h" diff --git a/pdo_sqlsrv/pdo_util.cpp b/pdo_sqlsrv/pdo_util.cpp index 4f51c2c0..5695faf2 100644 --- a/pdo_sqlsrv/pdo_util.cpp +++ b/pdo_sqlsrv/pdo_util.cpp @@ -51,9 +51,9 @@ pdo_error PDO_ERRORS[] = { { SQLSRV_ERROR_DRIVER_NOT_INSTALLED, - { IMSSP, (SQLCHAR*) "This extension requires the Microsoft SQL Server 2012 Native Client ODBC Driver to " - "communicate with SQL Server. Access the following URL to download the Microsoft SQL Server 2012 Native Client " - "ODBC driver for %1!s!: " + { IMSSP, (SQLCHAR*) "This extension requires the ODBC Driver 11 for SQL Server to " + "communicate with SQL Server. Access the following URL to download the ODBC Driver 11 for SQL Server " + "for %1!s!: " "http://go.microsoft.com/fwlink/?LinkId=163712", -1, true } }, { diff --git a/pdo_sqlsrv/sqlncli.h b/pdo_sqlsrv/sqlncli.h deleted file mode 100644 index 518ddd4f..00000000 --- a/pdo_sqlsrv/sqlncli.h +++ /dev/null @@ -1,3043 +0,0 @@ - - -/* this ALWAYS GENERATED file contains the definitions for the interfaces */ - - - /* File created by MIDL compiler version 7.00.0474 */ -/* Compiler settings for sqlncli.idl: - Oicf, W1, Zp8, env=Win32 (32b run) - protocol : dce , ms_ext, c_ext, robust - error checks: allocation ref bounds_check enum stub_data - VC __declspec() decoration level: - __declspec(uuid()), __declspec(selectany), __declspec(novtable) - DECLSPEC_UUID(), MIDL_INTERFACE() -*/ -//@@MIDL_FILE_HEADING( ) - -#pragma warning( disable: 4049 ) /* more than 64k source lines */ - - -/* verify that the version is high enough to compile this file*/ -#ifndef __REQUIRED_RPCNDR_H_VERSION__ -#define __REQUIRED_RPCNDR_H_VERSION__ 475 -#endif - -#include "rpc.h" -#include "rpcndr.h" - -#ifndef __RPCNDR_H_VERSION__ -#error this stub requires an updated version of -#endif // __RPCNDR_H_VERSION__ - -#ifndef COM_NO_WINDOWS_H -#include "windows.h" -#include "ole2.h" -#endif /*COM_NO_WINDOWS_H*/ - -#ifndef __sqlncli_h__ -#define __sqlncli_h__ - -#if defined(_MSC_VER) && (_MSC_VER >= 1020) -#pragma once -#endif - -/* Forward Declarations */ - -#ifndef __ICommandWithParameters_FWD_DEFINED__ -#define __ICommandWithParameters_FWD_DEFINED__ -typedef interface ICommandWithParameters ICommandWithParameters; -#endif /* __ICommandWithParameters_FWD_DEFINED__ */ - - -#ifndef __IUMSInitialize_FWD_DEFINED__ -#define __IUMSInitialize_FWD_DEFINED__ -typedef interface IUMSInitialize IUMSInitialize; -#endif /* __IUMSInitialize_FWD_DEFINED__ */ - - -#ifndef __ISQLServerErrorInfo_FWD_DEFINED__ -#define __ISQLServerErrorInfo_FWD_DEFINED__ -typedef interface ISQLServerErrorInfo ISQLServerErrorInfo; -#endif /* __ISQLServerErrorInfo_FWD_DEFINED__ */ - - -#ifndef __IRowsetFastLoad_FWD_DEFINED__ -#define __IRowsetFastLoad_FWD_DEFINED__ -typedef interface IRowsetFastLoad IRowsetFastLoad; -#endif /* __IRowsetFastLoad_FWD_DEFINED__ */ - - -#ifndef __ISchemaLock_FWD_DEFINED__ -#define __ISchemaLock_FWD_DEFINED__ -typedef interface ISchemaLock ISchemaLock; -#endif /* __ISchemaLock_FWD_DEFINED__ */ - - -#ifndef __IBCPSession_FWD_DEFINED__ -#define __IBCPSession_FWD_DEFINED__ -typedef interface IBCPSession IBCPSession; -#endif /* __IBCPSession_FWD_DEFINED__ */ - - -#ifndef __ISSAbort_FWD_DEFINED__ -#define __ISSAbort_FWD_DEFINED__ -typedef interface ISSAbort ISSAbort; -#endif /* __ISSAbort_FWD_DEFINED__ */ - - -#ifndef __ISSCommandWithParameters_FWD_DEFINED__ -#define __ISSCommandWithParameters_FWD_DEFINED__ -typedef interface ISSCommandWithParameters ISSCommandWithParameters; -#endif /* __ISSCommandWithParameters_FWD_DEFINED__ */ - - -#ifndef __IDBAsynchStatus_FWD_DEFINED__ -#define __IDBAsynchStatus_FWD_DEFINED__ -typedef interface IDBAsynchStatus IDBAsynchStatus; -#endif /* __IDBAsynchStatus_FWD_DEFINED__ */ - - -#ifndef __ISSAsynchStatus_FWD_DEFINED__ -#define __ISSAsynchStatus_FWD_DEFINED__ -typedef interface ISSAsynchStatus ISSAsynchStatus; -#endif /* __ISSAsynchStatus_FWD_DEFINED__ */ - - -/* header files for imported files */ -#include "unknwn.h" -#include "oaidl.h" - -#ifdef __cplusplus -extern "C"{ -#endif - - -/* interface __MIDL_itf_sqlncli_0000_0000 */ -/* [local] */ - -//----------------------------------------------------------------------------- -// File: sqlncli.h -// -// Copyright: Copyright (c) Microsoft Corporation -// -// Contents: SQL Server Native Client OLEDB provider and ODBC driver specific -// definitions. -// -//----------------------------------------------------------------------------- - -#if !defined(SQLNCLI_VER) -#define SQLNCLI_VER 1000 -#endif - -#if SQLNCLI_VER >= 1000 - -#define SQLNCLI_PRODUCT_NAME_FULL_VER_ANSI "Microsoft SQL Server Native Client 10.0" -#define SQLNCLI_PRODUCT_NAME_FULL_ANSI "Microsoft SQL Server Native Client" -#define SQLNCLI_PRODUCT_NAME_SHORT_VER_ANSI "SQL Server Native Client 10.0" -#define SQLNCLI_PRODUCT_NAME_SHORT_ANSI "SQL Server Native Client" - -#define SQLNCLI_FILE_NAME_ANSI "sqlncli" -#define SQLNCLI_FILE_NAME_VER_ANSI "sqlncli10" -#define SQLNCLI_FILE_NAME_FULL_ANSI "sqlncli10.dll" - -#define SQLNCLI_PRODUCT_NAME_FULL_VER_UNICODE L"Microsoft SQL Server Native Client 10.0" -#define SQLNCLI_PRODUCT_NAME_FULL_UNICODE L"Microsoft SQL Server Native Client" -#define SQLNCLI_PRODUCT_NAME_SHORT_VER_UNICODE L"SQL Server Native Client 10.0" -#define SQLNCLI_PRODUCT_NAME_SHORT_UNICODE L"SQL Server Native Client" - -#define SQLNCLI_FILE_NAME_UNICODE L"sqlncli" -#define SQLNCLI_FILE_NAME_VER_UNICODE L"sqlncli10" -#define SQLNCLI_FILE_NAME_FULL_UNICODE L"sqlncli10.dll" - -#if defined(_SQLNCLI_OLEDB_) || !defined(_SQLNCLI_ODBC_) - -#define SQLNCLI_VI_PROG_ID_ANSI "SQLNCLI10" -#define SQLNCLI_VI_ERROR_LOOKUP_PROG_ID_ANSI "SQLNCLI10 ErrorLookup" -#define SQLNCLI_VI_ENUMERATOR_PROG_ID_ANSI "SQLNCLI10 Enumerator" - -#define SQLNCLI_PROG_ID_ANSI "SQLNCLI10.1" -#define SQLNCLI_ERROR_LOOKUP_PROG_ID_ANSI "SQLNCLI10 ErrorLookup.1" -#define SQLNCLI_ENUMERATOR_PROG_ID_ANSI "SQLNCLI10 Enumerator.1" - -#define SQLNCLI_VI_PROG_ID_UNICODE L"SQLNCLI10" -#define SQLNCLI_VI_ERROR_LOOKUP_PROG_ID_UNICODE L"SQLNCLI10 ErrorLookup" -#define SQLNCLI_VI_ENUMERATOR_PROG_ID_UNICODE L"SQLNCLI10 Enumerator" - -#define SQLNCLI_PROG_ID_UNICODE L"SQLNCLI10.1" -#define SQLNCLI_ERROR_LOOKUP_PROG_ID_UNICODE L"SQLNCLI10 ErrorLookup.1" -#define SQLNCLI_ENUMERATOR_PROG_ID_UNICODE L"SQLNCLI10 Enumerator.1" - -#define SQLNCLI_CLSID CLSID_SQLNCLI10 -#define SQLNCLI_ERROR_CLSID CLSID_SQLNCLI10_ERROR -#define SQLNCLI_ENUMERATOR_CLSID CLSID_SQLNCLI10_ENUMERATOR - -#endif // defined(_SQLNCLI_OLEDB_) || !defined(_SQLNCLI_ODBC_) - -#else // SQLNCLI_VER >= 1000 - -#define SQLNCLI_PRODUCT_NAME_FULL_VER_ANSI "Microsoft SQL Server Native Client" -#define SQLNCLI_PRODUCT_NAME_FULL_ANSI "Microsoft SQL Server Native Client" -#define SQLNCLI_PRODUCT_NAME_SHORT_VER_ANSI "SQL Native Client" -#define SQLNCLI_PRODUCT_NAME_SHORT_ANSI "SQL Native Client" - -#define SQLNCLI_FILE_NAME_ANSI "sqlncli" -#define SQLNCLI_FILE_NAME_VER_ANSI "sqlncli" -#define SQLNCLI_FILE_NAME_FULL_ANSI "sqlncli.dll" - -#define SQLNCLI_PRODUCT_NAME_FULL_VER_UNICODE L"Microsoft SQL Server Native Client" -#define SQLNCLI_PRODUCT_NAME_FULL_UNICODE L"Microsoft SQL Server Native Client" -#define SQLNCLI_PRODUCT_NAME_SHORT_VER_UNICODE L"SQL Native Client" -#define SQLNCLI_PRODUCT_NAME_SHORT_UNICODE L"SQL Native Client" - -#define SQLNCLI_FILE_NAME_UNICODE L"sqlncli" -#define SQLNCLI_FILE_NAME_VER_UNICODE L"sqlncli" -#define SQLNCLI_FILE_NAME_FULL_UNICODE L"sqlncli.dll" - -#if defined(_SQLNCLI_OLEDB_) || !defined(_SQLNCLI_ODBC_) - -#define SQLNCLI_VI_PROG_ID_ANSI "SQLNCLI" -#define SQLNCLI_VI_ERROR_LOOKUP_PROG_ID_ANSI "SQLNCLI ErrorLookup" -#define SQLNCLI_VI_ENUMERATOR_PROG_ID_ANSI "SQLNCLI Enumerator" - -#define SQLNCLI_PROG_ID_ANSI "SQLNCLI.1" -#define SQLNCLI_ERROR_LOOKUP_PROG_ID_ANSI "SQLNCLI ErrorLookup.1" -#define SQLNCLI_ENUMERATOR_PROG_ID_ANSI "SQLNCLI Enumerator.1" - -#define SQLNCLI_VI_PROG_ID_UNICODE L"SQLNCLI" -#define SQLNCLI_VI_ERROR_LOOKUP_PROG_ID_UNICODE L"SQLNCLI ErrorLookup" -#define SQLNCLI_VI_ENUMERATOR_PROG_ID_UNICODE L"SQLNCLI Enumerator" - -#define SQLNCLI_PROG_ID_UNICODE L"SQLNCLI.1" -#define SQLNCLI_ERROR_LOOKUP_PROG_ID_UNICODE L"SQLNCLI ErrorLookup.1" -#define SQLNCLI_ENUMERATOR_PROG_ID_UNICODE L"SQLNCLI Enumerator.1" - -#define SQLNCLI_CLSID CLSID_SQLNCLI -#define SQLNCLI_ERROR_CLSID CLSID_SQLNCLI_ERROR -#define SQLNCLI_ENUMERATOR_CLSID CLSID_SQLNCLI_ENUMERATOR - -#endif // defined(_SQLNCLI_OLEDB_) || !defined(_SQLNCLI_ODBC_) - -#endif // SQLNCLI_VER >= 1000 - -// define the character type agnostic constants -#if defined(_UNICODE) || defined(UNICODE) - -#define SQLNCLI_PRODUCT_NAME_FULL_VER SQLNCLI_PRODUCT_NAME_FULL_VER_UNICODE -#define SQLNCLI_PRODUCT_NAME_FULL SQLNCLI_PRODUCT_NAME_FULL_UNICODE -#define SQLNCLI_PRODUCT_NAME_SHORT_VER SQLNCLI_PRODUCT_NAME_SHORT_VER_UNICODE -#define SQLNCLI_PRODUCT_NAME_SHORT SQLNCLI_PRODUCT_NAME_SHORT_UNICODE - -#define SQLNCLI_FILE_NAME SQLNCLI_FILE_NAME_UNICODE -#define SQLNCLI_FILE_NAME_VER SQLNCLI_FILE_NAME_VER_UNICODE -#define SQLNCLI_FILE_NAME_FULL SQLNCLI_FILE_NAME_FULL_UNICODE - -#if defined(_SQLNCLI_OLEDB_) || !defined(_SQLNCLI_ODBC_) - -#define SQLNCLI_VI_PROG_ID SQLNCLI_VI_PROG_ID_UNICODE -#define SQLNCLI_VI_ERROR_LOOKUP_PROG_ID SQLNCLI_VI_ERROR_LOOKUP_PROG_ID_UNICODE -#define SQLNCLI_VI_ENUMERATOR_PROG_ID SQLNCLI_VI_ENUMERATOR_PROG_ID_UNICODE - -#define SQLNCLI_PROG_ID SQLNCLI_PROG_ID_UNICODE -#define SQLNCLI_ERROR_LOOKUP_PROG_ID SQLNCLI_ERROR_LOOKUP_PROG_ID_UNICODE -#define SQLNCLI_ENUMERATOR_PROG_ID SQLNCLI_ENUMERATOR_PROG_ID_UNICODE - -#endif // defined(_SQLNCLI_OLEDB_) || !defined(_SQLNCLI_ODBC_) - -#else // _UNICODE || UNICODE - -#define SQLNCLI_PRODUCT_NAME_FULL_VER SQLNCLI_PRODUCT_NAME_FULL_VER_ANSI -#define SQLNCLI_PRODUCT_NAME_FULL SQLNCLI_PRODUCT_NAME_FULL_ANSI -#define SQLNCLI_PRODUCT_NAME_SHORT_VER SQLNCLI_PRODUCT_NAME_SHORT_VER_ANSI -#define SQLNCLI_PRODUCT_NAME_SHORT SQLNCLI_PRODUCT_NAME_SHORT_ANSI - -#define SQLNCLI_FILE_NAME SQLNCLI_FILE_NAME_ANSI -#define SQLNCLI_FILE_NAME_VER SQLNCLI_FILE_NAME_VER_ANSI -#define SQLNCLI_FILE_NAME_FULL SQLNCLI_FILE_NAME_FULL_ANSI - -#if defined(_SQLNCLI_OLEDB_) || !defined(_SQLNCLI_ODBC_) - -#define SQLNCLI_VI_PROG_ID SQLNCLI_VI_PROG_ID_ANSI -#define SQLNCLI_VI_ERROR_LOOKUP_PROG_ID SQLNCLI_VI_ERROR_LOOKUP_PROG_ID_ANSI -#define SQLNCLI_VI_ENUMERATOR_PROG_ID SQLNCLI_VI_ENUMERATOR_PROG_ID_ANSI - -#define SQLNCLI_PROG_ID SQLNCLI_PROG_ID_ANSI -#define SQLNCLI_ERROR_LOOKUP_PROG_ID SQLNCLI_ERROR_LOOKUP_PROG_ID_ANSI -#define SQLNCLI_ENUMERATOR_PROG_ID SQLNCLI_ENUMERATOR_PROG_ID_ANSI - -#endif // defined(_SQLNCLI_OLEDB_) || !defined(_SQLNCLI_ODBC_) - -#endif // _UNICODE || UNICODE - -#if defined(_SQLNCLI_ODBC_) || !defined(_SQLNCLI_OLEDB_) - -#define SQLNCLI_DRIVER_NAME SQLNCLI_PRODUCT_NAME_SHORT_VER - -#endif - -// OLEDB part of SQL Server Native Client header - begin here -#if defined(_SQLNCLI_OLEDB_) || !defined(_SQLNCLI_ODBC_) -#ifndef __oledb_h__ -#include -#endif /*__oledb_h__*/ - -#if 0 // This is already defined in oledb.h - -#ifdef _WIN64 - -// Length of a non-character object, size -typedef ULONGLONG DBLENGTH; - -// Offset within a rowset -typedef LONGLONG DBROWOFFSET; - -// Number of rows -typedef LONGLONG DBROWCOUNT; - -typedef ULONGLONG DBCOUNTITEM; - -// Ordinal (column number, etc.) -typedef ULONGLONG DBORDINAL; - -typedef LONGLONG DB_LORDINAL; - -// Bookmarks -typedef ULONGLONG DBBKMARK; -// Offset in the buffer - -typedef ULONGLONG DBBYTEOFFSET; -// Reference count of each row/accessor handle - -typedef ULONG DBREFCOUNT; - -// Parameters -typedef ULONGLONG DB_UPARAMS; - -typedef LONGLONG DB_LPARAMS; - -// hash values corresponding to the elements (bookmarks) -typedef DWORDLONG DBHASHVALUE; - -// For reserve -typedef DWORDLONG DB_DWRESERVE; - -typedef LONGLONG DB_LRESERVE; - -typedef ULONGLONG DB_URESERVE; - -#else //_WIN64 - -// Length of a non-character object, size -typedef ULONG DBLENGTH; - -// Offset within a rowset -typedef LONG DBROWOFFSET; - -// Number of rows -typedef LONG DBROWCOUNT; - -typedef ULONG DBCOUNTITEM; - -// Ordinal (column number, etc.) -typedef ULONG DBORDINAL; - -typedef LONG DB_LORDINAL; - -// Bookmarks -typedef ULONG DBBKMARK; - -// Offset in the buffer -typedef ULONG DBBYTEOFFSET; - -// Reference count of each row handle -typedef ULONG DBREFCOUNT; - -// Parameters -typedef ULONG DB_UPARAMS; - -typedef LONG DB_LPARAMS; - -// hash values corresponding to the elements (bookmarks) -typedef DWORD DBHASHVALUE; - -// For reserve -typedef DWORD DB_DWRESERVE; - -typedef LONG DB_LRESERVE; - -typedef ULONG DB_URESERVE; - -#endif // _WIN64 -typedef DWORD DBKIND; - - -enum DBKINDENUM - { DBKIND_GUID_NAME = 0, - DBKIND_GUID_PROPID = ( DBKIND_GUID_NAME + 1 ) , - DBKIND_NAME = ( DBKIND_GUID_PROPID + 1 ) , - DBKIND_PGUID_NAME = ( DBKIND_NAME + 1 ) , - DBKIND_PGUID_PROPID = ( DBKIND_PGUID_NAME + 1 ) , - DBKIND_PROPID = ( DBKIND_PGUID_PROPID + 1 ) , - DBKIND_GUID = ( DBKIND_PROPID + 1 ) - } ; -typedef struct tagDBID - { - union - { - GUID guid; - GUID *pguid; - /* Empty union arm */ - } uGuid; - DBKIND eKind; - union - { - LPOLESTR pwszName; - ULONG ulPropid; - /* Empty union arm */ - } uName; - } DBID; - -typedef struct tagDB_NUMERIC - { - BYTE precision; - BYTE scale; - BYTE sign; - BYTE val[ 16 ]; - } DB_NUMERIC; - -typedef struct tagDBDATE - { - SHORT year; - USHORT month; - USHORT day; - } DBDATE; - -typedef struct tagDBTIME - { - USHORT hour; - USHORT minute; - USHORT second; - } DBTIME; - -typedef struct tagDBTIMESTAMP - { - SHORT year; - USHORT month; - USHORT day; - USHORT hour; - USHORT minute; - USHORT second; - ULONG fraction; - } DBTIMESTAMP; - -typedef struct tagDBOBJECT - { - DWORD dwFlags; - IID iid; - } DBOBJECT; - -typedef WORD DBTYPE; - -typedef ULONG_PTR HACCESSOR; - -typedef ULONG_PTR HCHAPTER; - -typedef DWORD DBPARAMFLAGS; - -typedef struct tagDBPARAMINFO - { - DBPARAMFLAGS dwFlags; - DBORDINAL iOrdinal; - LPOLESTR pwszName; - ITypeInfo *pTypeInfo; - DBLENGTH ulParamSize; - DBTYPE wType; - BYTE bPrecision; - BYTE bScale; - } DBPARAMINFO; - -typedef DWORD DBPROPID; - -typedef struct tagDBPROPIDSET - { - DBPROPID *rgPropertyIDs; - ULONG cPropertyIDs; - GUID guidPropertySet; - } DBPROPIDSET; - -typedef DWORD DBPROPFLAGS; - -typedef DWORD DBPROPOPTIONS; - -typedef DWORD DBPROPSTATUS; - -typedef struct tagDBPROP - { - DBPROPID dwPropertyID; - DBPROPOPTIONS dwOptions; - DBPROPSTATUS dwStatus; - DBID colid; - VARIANT vValue; - } DBPROP; - -typedef struct tagDBPROPSET - { - DBPROP *rgProperties; - ULONG cProperties; - GUID guidPropertySet; - } DBPROPSET; - - - -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0000_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0000_v0_0_s_ifspec; - -#ifndef __ICommandWithParameters_INTERFACE_DEFINED__ -#define __ICommandWithParameters_INTERFACE_DEFINED__ - -/* interface ICommandWithParameters */ -/* [unique][uuid][object][local] */ - -typedef struct tagDBPARAMBINDINFO - { - LPOLESTR pwszDataSourceType; - LPOLESTR pwszName; - DBLENGTH ulParamSize; - DBPARAMFLAGS dwFlags; - BYTE bPrecision; - BYTE bScale; - } DBPARAMBINDINFO; - - -EXTERN_C const IID IID_ICommandWithParameters; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("0c733a64-2a1c-11ce-ade5-00aa0044773d") - ICommandWithParameters : public IUnknown - { - public: - virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetParameterInfo( - /* [out][in] */ DB_UPARAMS *pcParams, - /* [size_is][size_is][out] */ DBPARAMINFO **prgParamInfo, - /* [out] */ OLECHAR **ppNamesBuffer) = 0; - - virtual /* [local] */ HRESULT STDMETHODCALLTYPE MapParameterNames( - /* [in] */ DB_UPARAMS cParamNames, - /* [size_is][in] */ const OLECHAR *rgParamNames[ ], - /* [size_is][out] */ DB_LPARAMS rgParamOrdinals[ ]) = 0; - - virtual /* [local] */ HRESULT STDMETHODCALLTYPE SetParameterInfo( - /* [in] */ DB_UPARAMS cParams, - /* [size_is][unique][in] */ const DB_UPARAMS rgParamOrdinals[ ], - /* [size_is][unique][in] */ const DBPARAMBINDINFO rgParamBindInfo[ ]) = 0; - - }; - -#else /* C style interface */ - - typedef struct ICommandWithParametersVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ICommandWithParameters * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - ICommandWithParameters * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - ICommandWithParameters * This); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetParameterInfo )( - ICommandWithParameters * This, - /* [out][in] */ DB_UPARAMS *pcParams, - /* [size_is][size_is][out] */ DBPARAMINFO **prgParamInfo, - /* [out] */ OLECHAR **ppNamesBuffer); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *MapParameterNames )( - ICommandWithParameters * This, - /* [in] */ DB_UPARAMS cParamNames, - /* [size_is][in] */ const OLECHAR *rgParamNames[ ], - /* [size_is][out] */ DB_LPARAMS rgParamOrdinals[ ]); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *SetParameterInfo )( - ICommandWithParameters * This, - /* [in] */ DB_UPARAMS cParams, - /* [size_is][unique][in] */ const DB_UPARAMS rgParamOrdinals[ ], - /* [size_is][unique][in] */ const DBPARAMBINDINFO rgParamBindInfo[ ]); - - END_INTERFACE - } ICommandWithParametersVtbl; - - interface ICommandWithParameters - { - CONST_VTBL struct ICommandWithParametersVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define ICommandWithParameters_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ICommandWithParameters_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ICommandWithParameters_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define ICommandWithParameters_GetParameterInfo(This,pcParams,prgParamInfo,ppNamesBuffer) \ - ( (This)->lpVtbl -> GetParameterInfo(This,pcParams,prgParamInfo,ppNamesBuffer) ) - -#define ICommandWithParameters_MapParameterNames(This,cParamNames,rgParamNames,rgParamOrdinals) \ - ( (This)->lpVtbl -> MapParameterNames(This,cParamNames,rgParamNames,rgParamOrdinals) ) - -#define ICommandWithParameters_SetParameterInfo(This,cParams,rgParamOrdinals,rgParamBindInfo) \ - ( (This)->lpVtbl -> SetParameterInfo(This,cParams,rgParamOrdinals,rgParamBindInfo) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - -/* [call_as] */ HRESULT STDMETHODCALLTYPE ICommandWithParameters_RemoteGetParameterInfo_Proxy( - ICommandWithParameters * This, - /* [out][in] */ DB_UPARAMS *pcParams, - /* [size_is][size_is][out] */ DBPARAMINFO **prgParamInfo, - /* [size_is][size_is][out] */ DBBYTEOFFSET **prgNameOffsets, - /* [out][in] */ DBLENGTH *pcbNamesBuffer, - /* [size_is][size_is][unique][out][in] */ OLECHAR **ppNamesBuffer, - /* [out] */ IErrorInfo **ppErrorInfoRem); - - -void __RPC_STUB ICommandWithParameters_RemoteGetParameterInfo_Stub( - IRpcStubBuffer *This, - IRpcChannelBuffer *_pRpcChannelBuffer, - PRPC_MESSAGE _pRpcMessage, - DWORD *_pdwStubPhase); - - -/* [call_as] */ HRESULT STDMETHODCALLTYPE ICommandWithParameters_RemoteMapParameterNames_Proxy( - ICommandWithParameters * This, - /* [in] */ DB_UPARAMS cParamNames, - /* [size_is][in] */ LPCOLESTR *rgParamNames, - /* [size_is][out] */ DB_LPARAMS *rgParamOrdinals, - /* [out] */ IErrorInfo **ppErrorInfoRem); - - -void __RPC_STUB ICommandWithParameters_RemoteMapParameterNames_Stub( - IRpcStubBuffer *This, - IRpcChannelBuffer *_pRpcChannelBuffer, - PRPC_MESSAGE _pRpcMessage, - DWORD *_pdwStubPhase); - - -/* [call_as] */ HRESULT STDMETHODCALLTYPE ICommandWithParameters_RemoteSetParameterInfo_Proxy( - ICommandWithParameters * This, - /* [in] */ DB_UPARAMS cParams, - /* [size_is][unique][in] */ const DB_UPARAMS *rgParamOrdinals, - /* [size_is][unique][in] */ const DBPARAMBINDINFO *rgParamBindInfo, - /* [out] */ IErrorInfo **ppErrorInfoRem); - - -void __RPC_STUB ICommandWithParameters_RemoteSetParameterInfo_Stub( - IRpcStubBuffer *This, - IRpcChannelBuffer *_pRpcChannelBuffer, - PRPC_MESSAGE _pRpcMessage, - DWORD *_pdwStubPhase); - - - -#endif /* __ICommandWithParameters_INTERFACE_DEFINED__ */ - - -/* interface __MIDL_itf_sqlncli_0000_0001 */ -/* [local] */ - -typedef DWORD DBASYNCHOP; - -typedef DWORD DBASYNCHPHASE; - -#endif // This is already defined in oledb.h - -//------------------------------------------------------------------- -// Variant Access macros, similar to ole automation. -//------------------------------------------------------------------- -#define V_SS_VT(X) ((X)->vt) -#define V_SS_UNION(X, Y) ((X)->Y) - -#define V_SS_UI1(X) V_SS_UNION(X, bTinyIntVal) -#define V_SS_I2(X) V_SS_UNION(X, sShortIntVal) -#define V_SS_I4(X) V_SS_UNION(X, lIntVal) -#define V_SS_I8(X) V_SS_UNION(X, llBigIntVal) - -#define V_SS_R4(X) V_SS_UNION(X, fltRealVal) -#define V_SS_R8(X) V_SS_UNION(X, dblFloatVal) -#define V_SS_UI4(X) V_SS_UNION(X, ulVal) - -#define V_SS_MONEY(X) V_SS_UNION(X, cyMoneyVal) -#define V_SS_SMALLMONEY(X) V_SS_UNION(X, cyMoneyVal) - -#define V_SS_WSTRING(X) V_SS_UNION(X, NCharVal) -#define V_SS_WVARSTRING(X) V_SS_UNION(X, NCharVal) - -#define V_SS_STRING(X) V_SS_UNION(X, CharVal) -#define V_SS_VARSTRING(X) V_SS_UNION(X, CharVal) - -#define V_SS_BIT(X) V_SS_UNION(X, fBitVal) -#define V_SS_GUID(X) V_SS_UNION(X, rgbGuidVal) - -#define V_SS_NUMERIC(X) V_SS_UNION(X, numNumericVal) -#define V_SS_DECIMAL(X) V_SS_UNION(X, numNumericVal) - -#define V_SS_BINARY(X) V_SS_UNION(X, BinaryVal) -#define V_SS_VARBINARY(X) V_SS_UNION(X, BinaryVal) - -#define V_SS_DATETIME(X) V_SS_UNION(X, tsDateTimeVal) -#define V_SS_SMALLDATETIME(X) V_SS_UNION(X, tsDateTimeVal) - -#define V_SS_UNKNOWN(X) V_SS_UNION(X, UnknownType) - -//Text and image types. -#define V_SS_IMAGE(X) V_SS_UNION(X, ImageVal) -#define V_SS_TEXT(X) V_SS_UNION(X, TextVal) -#define V_SS_NTEXT(X) V_SS_UNION(X, NTextVal) - -//Microsoft SQL Server 2008 datetime. -#define V_SS_DATE(X) V_SS_UNION(X, dDateVal) -#define V_SS_TIME2(X) V_SS_UNION(X, Time2Val) -#define V_SS_DATETIME2(X) V_SS_UNION(X, DateTimeVal) -#define V_SS_DATETIMEOFFSET(X) V_SS_UNION(X, DateTimeOffsetVal) - -//------------------------------------------------------------------- -// define SQL Server specific types. -//------------------------------------------------------------------- -typedef enum DBTYPEENUM EOledbTypes; -#define DBTYPE_XML ((EOledbTypes) 141) // introduced in SQL 2005 -#define DBTYPE_TABLE ((EOledbTypes) 143) // introduced in SQL 2008 -#define DBTYPE_DBTIME2 ((EOledbTypes) 145) // introduced in SQL 2008 -#define DBTYPE_DBTIMESTAMPOFFSET ((EOledbTypes) 146) // introduced in SQL 2008 -#ifdef _SQLOLEDB_H_ -#undef DBTYPE_SQLVARIANT -#endif //_SQLOLEDB_H_ -#define DBTYPE_SQLVARIANT ((EOledbTypes) 144) // introduced in MDAC 2.5 - - -#ifndef _SQLOLEDB_H_ -enum SQLVARENUM - { - VT_SS_EMPTY = DBTYPE_EMPTY, - VT_SS_NULL = DBTYPE_NULL, - VT_SS_UI1 = DBTYPE_UI1, - VT_SS_I2 = DBTYPE_I2, - VT_SS_I4 = DBTYPE_I4, - VT_SS_I8 = DBTYPE_I8, - - //Floats - VT_SS_R4 = DBTYPE_R4, - VT_SS_R8 = DBTYPE_R8, - - //Money - VT_SS_MONEY = DBTYPE_CY, - VT_SS_SMALLMONEY = 200, - - //Strings - VT_SS_WSTRING = 201, - VT_SS_WVARSTRING = 202, - - VT_SS_STRING = 203, - VT_SS_VARSTRING = 204, - - //Bit - VT_SS_BIT = DBTYPE_BOOL, - - //Guid - VT_SS_GUID = DBTYPE_GUID, - - //Exact precision - VT_SS_NUMERIC = DBTYPE_NUMERIC, - VT_SS_DECIMAL = 205, - - //Datetime - VT_SS_DATETIME = DBTYPE_DBTIMESTAMP, - VT_SS_SMALLDATETIME =206, - - //Binary - VT_SS_BINARY =207, - VT_SS_VARBINARY = 208, - //Future - VT_SS_UNKNOWN = 209, - - //Additional datetime - VT_SS_DATE = DBTYPE_DBDATE, - VT_SS_TIME2 = DBTYPE_DBTIME2, - VT_SS_DATETIME2 = 212, - VT_SS_DATETIMEOFFSET = DBTYPE_DBTIMESTAMPOFFSET, - }; -typedef unsigned short SSVARTYPE; - - -enum DBPARAMFLAGSENUM_SS_100 - { DBPARAMFLAGS_SS_ISVARIABLESCALE = 0x40000000 - } ; -enum DBCOLUMNFLAGSENUM_SS_100 - { DBCOLUMNFLAGS_SS_ISVARIABLESCALE = 0x40000000, - DBCOLUMNFLAGS_SS_ISCOLUMNSET = 0x80000000 - } ; - -//------------------------------------------------------------------- -// Class Factory Interface used to initialize pointer to UMS. -//------------------------------------------------------------------- - - -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0001_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0001_v0_0_s_ifspec; - -#ifndef __IUMSInitialize_INTERFACE_DEFINED__ -#define __IUMSInitialize_INTERFACE_DEFINED__ - -/* interface IUMSInitialize */ -/* [unique][uuid][object][local] */ - - -EXTERN_C const IID IID_IUMSInitialize; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("5cf4ca14-ef21-11d0-97e7-00c04fc2ad98") - IUMSInitialize : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE Initialize( - /* [in] */ void *pUMS) = 0; - - }; - -#else /* C style interface */ - - typedef struct IUMSInitializeVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IUMSInitialize * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IUMSInitialize * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IUMSInitialize * This); - - HRESULT ( STDMETHODCALLTYPE *Initialize )( - IUMSInitialize * This, - /* [in] */ void *pUMS); - - END_INTERFACE - } IUMSInitializeVtbl; - - interface IUMSInitialize - { - CONST_VTBL struct IUMSInitializeVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define IUMSInitialize_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define IUMSInitialize_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define IUMSInitialize_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define IUMSInitialize_Initialize(This,pUMS) \ - ( (This)->lpVtbl -> Initialize(This,pUMS) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __IUMSInitialize_INTERFACE_DEFINED__ */ - - -/* interface __MIDL_itf_sqlncli_0000_0002 */ -/* [local] */ - - -// the structure returned by ISQLServerErrorInfo::GetSQLServerInfo -typedef struct tagSSErrorInfo - { - LPOLESTR pwszMessage; - LPOLESTR pwszServer; - LPOLESTR pwszProcedure; - LONG lNative; - BYTE bState; - BYTE bClass; - WORD wLineNumber; - } SSERRORINFO; - - - -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0002_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0002_v0_0_s_ifspec; - -#ifndef __ISQLServerErrorInfo_INTERFACE_DEFINED__ -#define __ISQLServerErrorInfo_INTERFACE_DEFINED__ - -/* interface ISQLServerErrorInfo */ -/* [unique][uuid][object][local] */ - - -EXTERN_C const IID IID_ISQLServerErrorInfo; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("5CF4CA12-EF21-11d0-97E7-00C04FC2AD98") - ISQLServerErrorInfo : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE GetErrorInfo( - /* [out] */ SSERRORINFO **ppErrorInfo, - /* [out] */ OLECHAR **ppStringsBuffer) = 0; - - }; - -#else /* C style interface */ - - typedef struct ISQLServerErrorInfoVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ISQLServerErrorInfo * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - ISQLServerErrorInfo * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - ISQLServerErrorInfo * This); - - HRESULT ( STDMETHODCALLTYPE *GetErrorInfo )( - ISQLServerErrorInfo * This, - /* [out] */ SSERRORINFO **ppErrorInfo, - /* [out] */ OLECHAR **ppStringsBuffer); - - END_INTERFACE - } ISQLServerErrorInfoVtbl; - - interface ISQLServerErrorInfo - { - CONST_VTBL struct ISQLServerErrorInfoVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define ISQLServerErrorInfo_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ISQLServerErrorInfo_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ISQLServerErrorInfo_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define ISQLServerErrorInfo_GetErrorInfo(This,ppErrorInfo,ppStringsBuffer) \ - ( (This)->lpVtbl -> GetErrorInfo(This,ppErrorInfo,ppStringsBuffer) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __ISQLServerErrorInfo_INTERFACE_DEFINED__ */ - - -#ifndef __IRowsetFastLoad_INTERFACE_DEFINED__ -#define __IRowsetFastLoad_INTERFACE_DEFINED__ - -/* interface IRowsetFastLoad */ -/* [unique][uuid][object][local] */ - - -EXTERN_C const IID IID_IRowsetFastLoad; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("5CF4CA13-EF21-11d0-97E7-00C04FC2AD98") - IRowsetFastLoad : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE InsertRow( - /* [in] */ HACCESSOR hAccessor, - /* [in] */ void *pData) = 0; - - virtual HRESULT STDMETHODCALLTYPE Commit( - /* [in] */ BOOL fDone) = 0; - - }; - -#else /* C style interface */ - - typedef struct IRowsetFastLoadVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IRowsetFastLoad * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IRowsetFastLoad * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IRowsetFastLoad * This); - - HRESULT ( STDMETHODCALLTYPE *InsertRow )( - IRowsetFastLoad * This, - /* [in] */ HACCESSOR hAccessor, - /* [in] */ void *pData); - - HRESULT ( STDMETHODCALLTYPE *Commit )( - IRowsetFastLoad * This, - /* [in] */ BOOL fDone); - - END_INTERFACE - } IRowsetFastLoadVtbl; - - interface IRowsetFastLoad - { - CONST_VTBL struct IRowsetFastLoadVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define IRowsetFastLoad_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define IRowsetFastLoad_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define IRowsetFastLoad_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define IRowsetFastLoad_InsertRow(This,hAccessor,pData) \ - ( (This)->lpVtbl -> InsertRow(This,hAccessor,pData) ) - -#define IRowsetFastLoad_Commit(This,fDone) \ - ( (This)->lpVtbl -> Commit(This,fDone) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __IRowsetFastLoad_INTERFACE_DEFINED__ */ - - -/* interface __MIDL_itf_sqlncli_0000_0004 */ -/* [local] */ - -#include // 8-byte structure packing - -typedef struct tagDBTIME2 - { - USHORT hour; - USHORT minute; - USHORT second; - ULONG fraction; - } DBTIME2; - -typedef struct tagDBTIMESTAMPOFFSET - { - SHORT year; - USHORT month; - USHORT day; - USHORT hour; - USHORT minute; - USHORT second; - ULONG fraction; - SHORT timezone_hour; - SHORT timezone_minute; - } DBTIMESTAMPOFFSET; - -#include // restore original structure packing - -struct SSVARIANT - { - SSVARTYPE vt; - DWORD dwReserved1; - DWORD dwReserved2; - union - { - BYTE bTinyIntVal; - SHORT sShortIntVal; - LONG lIntVal; - LONGLONG llBigIntVal; - FLOAT fltRealVal; - DOUBLE dblFloatVal; - CY cyMoneyVal; - VARIANT_BOOL fBitVal; - BYTE rgbGuidVal[ 16 ]; - DB_NUMERIC numNumericVal; - DBDATE dDateVal; - DBTIMESTAMP tsDateTimeVal; - struct _Time2Val - { - DBTIME2 tTime2Val; - BYTE bScale; - } Time2Val; - struct _DateTimeVal - { - DBTIMESTAMP tsDateTimeVal; - BYTE bScale; - } DateTimeVal; - struct _DateTimeOffsetVal - { - DBTIMESTAMPOFFSET tsoDateTimeOffsetVal; - BYTE bScale; - } DateTimeOffsetVal; - struct _NCharVal - { - SHORT sActualLength; - SHORT sMaxLength; - WCHAR *pwchNCharVal; - BYTE rgbReserved[ 5 ]; - DWORD dwReserved; - WCHAR *pwchReserved; - } NCharVal; - struct _CharVal - { - SHORT sActualLength; - SHORT sMaxLength; - CHAR *pchCharVal; - BYTE rgbReserved[ 5 ]; - DWORD dwReserved; - WCHAR *pwchReserved; - } CharVal; - struct _BinaryVal - { - SHORT sActualLength; - SHORT sMaxLength; - BYTE *prgbBinaryVal; - DWORD dwReserved; - } BinaryVal; - struct _UnknownType - { - DWORD dwActualLength; - BYTE rgMetadata[ 16 ]; - BYTE *pUnknownData; - } UnknownType; - struct _BLOBType - { - DBOBJECT dbobj; - IUnknown *pUnk; - } BLOBType; - } ; - } ; -typedef DWORD LOCKMODE; - - -enum LOCKMODEENUM - { LOCKMODE_INVALID = 0, - LOCKMODE_EXCLUSIVE = ( LOCKMODE_INVALID + 1 ) , - LOCKMODE_SHARED = ( LOCKMODE_EXCLUSIVE + 1 ) - } ; - - -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0004_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0004_v0_0_s_ifspec; - -#ifndef __ISchemaLock_INTERFACE_DEFINED__ -#define __ISchemaLock_INTERFACE_DEFINED__ - -/* interface ISchemaLock */ -/* [unique][uuid][object][local] */ - - -EXTERN_C const IID IID_ISchemaLock; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("4C2389FB-2511-11d4-B258-00C04F7971CE") - ISchemaLock : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE GetSchemaLock( - /* [in] */ DBID *pTableID, - /* [in] */ LOCKMODE lmMode, - /* [out] */ HANDLE *phLockHandle, - /* [out] */ ULONGLONG *pTableVersion) = 0; - - virtual HRESULT STDMETHODCALLTYPE ReleaseSchemaLock( - /* [in] */ HANDLE hLockHandle) = 0; - - }; - -#else /* C style interface */ - - typedef struct ISchemaLockVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ISchemaLock * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - ISchemaLock * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - ISchemaLock * This); - - HRESULT ( STDMETHODCALLTYPE *GetSchemaLock )( - ISchemaLock * This, - /* [in] */ DBID *pTableID, - /* [in] */ LOCKMODE lmMode, - /* [out] */ HANDLE *phLockHandle, - /* [out] */ ULONGLONG *pTableVersion); - - HRESULT ( STDMETHODCALLTYPE *ReleaseSchemaLock )( - ISchemaLock * This, - /* [in] */ HANDLE hLockHandle); - - END_INTERFACE - } ISchemaLockVtbl; - - interface ISchemaLock - { - CONST_VTBL struct ISchemaLockVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define ISchemaLock_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ISchemaLock_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ISchemaLock_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define ISchemaLock_GetSchemaLock(This,pTableID,lmMode,phLockHandle,pTableVersion) \ - ( (This)->lpVtbl -> GetSchemaLock(This,pTableID,lmMode,phLockHandle,pTableVersion) ) - -#define ISchemaLock_ReleaseSchemaLock(This,hLockHandle) \ - ( (This)->lpVtbl -> ReleaseSchemaLock(This,hLockHandle) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __ISchemaLock_INTERFACE_DEFINED__ */ - - -#ifndef __IBCPSession_INTERFACE_DEFINED__ -#define __IBCPSession_INTERFACE_DEFINED__ - -/* interface IBCPSession */ -/* [unique][uuid][object][local] */ - - -EXTERN_C const IID IID_IBCPSession; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("88352D80-42D1-42f0-A170-AB0F8B45B939") - IBCPSession : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE BCPColFmt( - /* [in] */ DBORDINAL idxUserDataCol, - /* [in] */ int eUserDataType, - /* [in] */ int cbIndicator, - /* [in] */ int cbUserData, - /* [size_is][in] */ BYTE *pbUserDataTerm, - /* [in] */ int cbUserDataTerm, - /* [in] */ DBORDINAL idxServerCol) = 0; - - virtual HRESULT STDMETHODCALLTYPE BCPColumns( - /* [in] */ DBCOUNTITEM nColumns) = 0; - - virtual HRESULT STDMETHODCALLTYPE BCPControl( - /* [in] */ int eOption, - /* [in] */ void *iValue) = 0; - - virtual HRESULT STDMETHODCALLTYPE BCPDone( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE BCPExec( - /* [out] */ DBROWCOUNT *pRowsCopied) = 0; - - virtual HRESULT STDMETHODCALLTYPE BCPInit( - /* [string][in] */ const wchar_t *pwszTable, - /* [string][in] */ const wchar_t *pwszDataFile, - /* [string][in] */ const wchar_t *pwszErrorFile, - /* [in] */ int eDirection) = 0; - - virtual HRESULT STDMETHODCALLTYPE BCPReadFmt( - /* [string][in] */ const wchar_t *pwszFormatFile) = 0; - - virtual HRESULT STDMETHODCALLTYPE BCPWriteFmt( - /* [string][in] */ const wchar_t *pwszFormatFile) = 0; - - }; - -#else /* C style interface */ - - typedef struct IBCPSessionVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IBCPSession * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IBCPSession * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IBCPSession * This); - - HRESULT ( STDMETHODCALLTYPE *BCPColFmt )( - IBCPSession * This, - /* [in] */ DBORDINAL idxUserDataCol, - /* [in] */ int eUserDataType, - /* [in] */ int cbIndicator, - /* [in] */ int cbUserData, - /* [size_is][in] */ BYTE *pbUserDataTerm, - /* [in] */ int cbUserDataTerm, - /* [in] */ DBORDINAL idxServerCol); - - HRESULT ( STDMETHODCALLTYPE *BCPColumns )( - IBCPSession * This, - /* [in] */ DBCOUNTITEM nColumns); - - HRESULT ( STDMETHODCALLTYPE *BCPControl )( - IBCPSession * This, - /* [in] */ int eOption, - /* [in] */ void *iValue); - - HRESULT ( STDMETHODCALLTYPE *BCPDone )( - IBCPSession * This); - - HRESULT ( STDMETHODCALLTYPE *BCPExec )( - IBCPSession * This, - /* [out] */ DBROWCOUNT *pRowsCopied); - - HRESULT ( STDMETHODCALLTYPE *BCPInit )( - IBCPSession * This, - /* [string][in] */ const wchar_t *pwszTable, - /* [string][in] */ const wchar_t *pwszDataFile, - /* [string][in] */ const wchar_t *pwszErrorFile, - /* [in] */ int eDirection); - - HRESULT ( STDMETHODCALLTYPE *BCPReadFmt )( - IBCPSession * This, - /* [string][in] */ const wchar_t *pwszFormatFile); - - HRESULT ( STDMETHODCALLTYPE *BCPWriteFmt )( - IBCPSession * This, - /* [string][in] */ const wchar_t *pwszFormatFile); - - END_INTERFACE - } IBCPSessionVtbl; - - interface IBCPSession - { - CONST_VTBL struct IBCPSessionVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define IBCPSession_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define IBCPSession_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define IBCPSession_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define IBCPSession_BCPColFmt(This,idxUserDataCol,eUserDataType,cbIndicator,cbUserData,pbUserDataTerm,cbUserDataTerm,idxServerCol) \ - ( (This)->lpVtbl -> BCPColFmt(This,idxUserDataCol,eUserDataType,cbIndicator,cbUserData,pbUserDataTerm,cbUserDataTerm,idxServerCol) ) - -#define IBCPSession_BCPColumns(This,nColumns) \ - ( (This)->lpVtbl -> BCPColumns(This,nColumns) ) - -#define IBCPSession_BCPControl(This,eOption,iValue) \ - ( (This)->lpVtbl -> BCPControl(This,eOption,iValue) ) - -#define IBCPSession_BCPDone(This) \ - ( (This)->lpVtbl -> BCPDone(This) ) - -#define IBCPSession_BCPExec(This,pRowsCopied) \ - ( (This)->lpVtbl -> BCPExec(This,pRowsCopied) ) - -#define IBCPSession_BCPInit(This,pwszTable,pwszDataFile,pwszErrorFile,eDirection) \ - ( (This)->lpVtbl -> BCPInit(This,pwszTable,pwszDataFile,pwszErrorFile,eDirection) ) - -#define IBCPSession_BCPReadFmt(This,pwszFormatFile) \ - ( (This)->lpVtbl -> BCPReadFmt(This,pwszFormatFile) ) - -#define IBCPSession_BCPWriteFmt(This,pwszFormatFile) \ - ( (This)->lpVtbl -> BCPWriteFmt(This,pwszFormatFile) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __IBCPSession_INTERFACE_DEFINED__ */ - - -/* interface __MIDL_itf_sqlncli_0000_0006 */ -/* [local] */ - - -#endif //_SQLOLEDB_H_ - -#define ISOLATIONLEVEL_SNAPSHOT ((ISOLATIONLEVEL)(0x01000000)) // Changes made in other transactions can not be seen. - -#define DBPROPVAL_TI_SNAPSHOT 0x01000000L - - - -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0006_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0006_v0_0_s_ifspec; - -#ifndef __ISSAbort_INTERFACE_DEFINED__ -#define __ISSAbort_INTERFACE_DEFINED__ - -/* interface ISSAbort */ -/* [unique][uuid][object][local] */ - - -EXTERN_C const IID IID_ISSAbort; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("5CF4CA15-EF21-11d0-97E7-00C04FC2AD98") - ISSAbort : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE Abort( void) = 0; - - }; - -#else /* C style interface */ - - typedef struct ISSAbortVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ISSAbort * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - ISSAbort * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - ISSAbort * This); - - HRESULT ( STDMETHODCALLTYPE *Abort )( - ISSAbort * This); - - END_INTERFACE - } ISSAbortVtbl; - - interface ISSAbort - { - CONST_VTBL struct ISSAbortVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define ISSAbort_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ISSAbort_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ISSAbort_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define ISSAbort_Abort(This) \ - ( (This)->lpVtbl -> Abort(This) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __ISSAbort_INTERFACE_DEFINED__ */ - - -/* interface __MIDL_itf_sqlncli_0000_0007 */ -/* [local] */ - - -enum DBBINDFLAGENUM90 - { DBBINDFLAG_OBJECT = 0x2 - } ; - -enum SSACCESSORFLAGS - { SSACCESSOR_ROWDATA = 0x100 - } ; - -enum DBPROPFLAGSENUM90 - { DBPROPFLAGS_PARAMETER = 0x10000 - } ; -typedef struct tagSSPARAMPROPS - { - DBORDINAL iOrdinal; - ULONG cPropertySets; - DBPROPSET *rgPropertySets; - } SSPARAMPROPS; - - - -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0007_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0007_v0_0_s_ifspec; - -#ifndef __ISSCommandWithParameters_INTERFACE_DEFINED__ -#define __ISSCommandWithParameters_INTERFACE_DEFINED__ - -/* interface ISSCommandWithParameters */ -/* [unique][uuid][object][local] */ - - -EXTERN_C const IID IID_ISSCommandWithParameters; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("eec30162-6087-467c-b995-7c523ce96561") - ISSCommandWithParameters : public ICommandWithParameters - { - public: - virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetParameterProperties( - /* [out][in] */ DB_UPARAMS *pcParams, - /* [size_is][size_is][out] */ SSPARAMPROPS **prgParamProperties) = 0; - - virtual /* [local] */ HRESULT STDMETHODCALLTYPE SetParameterProperties( - /* [in] */ DB_UPARAMS cParams, - /* [size_is][unique][in] */ SSPARAMPROPS rgParamProperties[ ]) = 0; - - }; - -#else /* C style interface */ - - typedef struct ISSCommandWithParametersVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ISSCommandWithParameters * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - ISSCommandWithParameters * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - ISSCommandWithParameters * This); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetParameterInfo )( - ISSCommandWithParameters * This, - /* [out][in] */ DB_UPARAMS *pcParams, - /* [size_is][size_is][out] */ DBPARAMINFO **prgParamInfo, - /* [out] */ OLECHAR **ppNamesBuffer); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *MapParameterNames )( - ISSCommandWithParameters * This, - /* [in] */ DB_UPARAMS cParamNames, - /* [size_is][in] */ const OLECHAR *rgParamNames[ ], - /* [size_is][out] */ DB_LPARAMS rgParamOrdinals[ ]); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *SetParameterInfo )( - ISSCommandWithParameters * This, - /* [in] */ DB_UPARAMS cParams, - /* [size_is][unique][in] */ const DB_UPARAMS rgParamOrdinals[ ], - /* [size_is][unique][in] */ const DBPARAMBINDINFO rgParamBindInfo[ ]); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetParameterProperties )( - ISSCommandWithParameters * This, - /* [out][in] */ DB_UPARAMS *pcParams, - /* [size_is][size_is][out] */ SSPARAMPROPS **prgParamProperties); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *SetParameterProperties )( - ISSCommandWithParameters * This, - /* [in] */ DB_UPARAMS cParams, - /* [size_is][unique][in] */ SSPARAMPROPS rgParamProperties[ ]); - - END_INTERFACE - } ISSCommandWithParametersVtbl; - - interface ISSCommandWithParameters - { - CONST_VTBL struct ISSCommandWithParametersVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define ISSCommandWithParameters_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ISSCommandWithParameters_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ISSCommandWithParameters_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define ISSCommandWithParameters_GetParameterInfo(This,pcParams,prgParamInfo,ppNamesBuffer) \ - ( (This)->lpVtbl -> GetParameterInfo(This,pcParams,prgParamInfo,ppNamesBuffer) ) - -#define ISSCommandWithParameters_MapParameterNames(This,cParamNames,rgParamNames,rgParamOrdinals) \ - ( (This)->lpVtbl -> MapParameterNames(This,cParamNames,rgParamNames,rgParamOrdinals) ) - -#define ISSCommandWithParameters_SetParameterInfo(This,cParams,rgParamOrdinals,rgParamBindInfo) \ - ( (This)->lpVtbl -> SetParameterInfo(This,cParams,rgParamOrdinals,rgParamBindInfo) ) - - -#define ISSCommandWithParameters_GetParameterProperties(This,pcParams,prgParamProperties) \ - ( (This)->lpVtbl -> GetParameterProperties(This,pcParams,prgParamProperties) ) - -#define ISSCommandWithParameters_SetParameterProperties(This,cParams,rgParamProperties) \ - ( (This)->lpVtbl -> SetParameterProperties(This,cParams,rgParamProperties) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __ISSCommandWithParameters_INTERFACE_DEFINED__ */ - - -#ifndef __IDBAsynchStatus_INTERFACE_DEFINED__ -#define __IDBAsynchStatus_INTERFACE_DEFINED__ - -/* interface IDBAsynchStatus */ -/* [unique][uuid][object][local] */ - - -EXTERN_C const IID IID_IDBAsynchStatus; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("0c733a95-2a1c-11ce-ade5-00aa0044773d") - IDBAsynchStatus : public IUnknown - { - public: - virtual /* [local] */ HRESULT STDMETHODCALLTYPE Abort( - /* [in] */ HCHAPTER hChapter, - /* [in] */ DBASYNCHOP eOperation) = 0; - - virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetStatus( - /* [in] */ HCHAPTER hChapter, - /* [in] */ DBASYNCHOP eOperation, - /* [out] */ DBCOUNTITEM *pulProgress, - /* [out] */ DBCOUNTITEM *pulProgressMax, - /* [out] */ DBASYNCHPHASE *peAsynchPhase, - /* [out] */ LPOLESTR *ppwszStatusText) = 0; - - }; - -#else /* C style interface */ - - typedef struct IDBAsynchStatusVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IDBAsynchStatus * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IDBAsynchStatus * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IDBAsynchStatus * This); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *Abort )( - IDBAsynchStatus * This, - /* [in] */ HCHAPTER hChapter, - /* [in] */ DBASYNCHOP eOperation); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetStatus )( - IDBAsynchStatus * This, - /* [in] */ HCHAPTER hChapter, - /* [in] */ DBASYNCHOP eOperation, - /* [out] */ DBCOUNTITEM *pulProgress, - /* [out] */ DBCOUNTITEM *pulProgressMax, - /* [out] */ DBASYNCHPHASE *peAsynchPhase, - /* [out] */ LPOLESTR *ppwszStatusText); - - END_INTERFACE - } IDBAsynchStatusVtbl; - - interface IDBAsynchStatus - { - CONST_VTBL struct IDBAsynchStatusVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define IDBAsynchStatus_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define IDBAsynchStatus_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define IDBAsynchStatus_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define IDBAsynchStatus_Abort(This,hChapter,eOperation) \ - ( (This)->lpVtbl -> Abort(This,hChapter,eOperation) ) - -#define IDBAsynchStatus_GetStatus(This,hChapter,eOperation,pulProgress,pulProgressMax,peAsynchPhase,ppwszStatusText) \ - ( (This)->lpVtbl -> GetStatus(This,hChapter,eOperation,pulProgress,pulProgressMax,peAsynchPhase,ppwszStatusText) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - -/* [call_as] */ HRESULT STDMETHODCALLTYPE IDBAsynchStatus_RemoteAbort_Proxy( - IDBAsynchStatus * This, - /* [in] */ HCHAPTER hChapter, - /* [in] */ DBASYNCHOP eOperation, - /* [out] */ IErrorInfo **ppErrorInfoRem); - - -void __RPC_STUB IDBAsynchStatus_RemoteAbort_Stub( - IRpcStubBuffer *This, - IRpcChannelBuffer *_pRpcChannelBuffer, - PRPC_MESSAGE _pRpcMessage, - DWORD *_pdwStubPhase); - - -/* [call_as] */ HRESULT STDMETHODCALLTYPE IDBAsynchStatus_RemoteGetStatus_Proxy( - IDBAsynchStatus * This, - /* [in] */ HCHAPTER hChapter, - /* [in] */ DBASYNCHOP eOperation, - /* [unique][out][in] */ DBCOUNTITEM *pulProgress, - /* [unique][out][in] */ DBCOUNTITEM *pulProgressMax, - /* [unique][out][in] */ DBASYNCHPHASE *peAsynchPhase, - /* [unique][out][in] */ LPOLESTR *ppwszStatusText, - /* [out] */ IErrorInfo **ppErrorInfoRem); - - -void __RPC_STUB IDBAsynchStatus_RemoteGetStatus_Stub( - IRpcStubBuffer *This, - IRpcChannelBuffer *_pRpcChannelBuffer, - PRPC_MESSAGE _pRpcMessage, - DWORD *_pdwStubPhase); - - - -#endif /* __IDBAsynchStatus_INTERFACE_DEFINED__ */ - - -#ifndef __ISSAsynchStatus_INTERFACE_DEFINED__ -#define __ISSAsynchStatus_INTERFACE_DEFINED__ - -/* interface ISSAsynchStatus */ -/* [unique][uuid][object][local] */ - - -EXTERN_C const IID IID_ISSAsynchStatus; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("1FF1F743-8BB0-4c00-ACC4-C10E43B08FC1") - ISSAsynchStatus : public IDBAsynchStatus - { - public: - virtual /* [local] */ HRESULT STDMETHODCALLTYPE WaitForAsynchCompletion( - /* [in] */ DWORD dwMillisecTimeOut) = 0; - - }; - -#else /* C style interface */ - - typedef struct ISSAsynchStatusVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ISSAsynchStatus * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - ISSAsynchStatus * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - ISSAsynchStatus * This); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *Abort )( - ISSAsynchStatus * This, - /* [in] */ HCHAPTER hChapter, - /* [in] */ DBASYNCHOP eOperation); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetStatus )( - ISSAsynchStatus * This, - /* [in] */ HCHAPTER hChapter, - /* [in] */ DBASYNCHOP eOperation, - /* [out] */ DBCOUNTITEM *pulProgress, - /* [out] */ DBCOUNTITEM *pulProgressMax, - /* [out] */ DBASYNCHPHASE *peAsynchPhase, - /* [out] */ LPOLESTR *ppwszStatusText); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *WaitForAsynchCompletion )( - ISSAsynchStatus * This, - /* [in] */ DWORD dwMillisecTimeOut); - - END_INTERFACE - } ISSAsynchStatusVtbl; - - interface ISSAsynchStatus - { - CONST_VTBL struct ISSAsynchStatusVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define ISSAsynchStatus_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ISSAsynchStatus_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ISSAsynchStatus_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define ISSAsynchStatus_Abort(This,hChapter,eOperation) \ - ( (This)->lpVtbl -> Abort(This,hChapter,eOperation) ) - -#define ISSAsynchStatus_GetStatus(This,hChapter,eOperation,pulProgress,pulProgressMax,peAsynchPhase,ppwszStatusText) \ - ( (This)->lpVtbl -> GetStatus(This,hChapter,eOperation,pulProgress,pulProgressMax,peAsynchPhase,ppwszStatusText) ) - - -#define ISSAsynchStatus_WaitForAsynchCompletion(This,dwMillisecTimeOut) \ - ( (This)->lpVtbl -> WaitForAsynchCompletion(This,dwMillisecTimeOut) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __ISSAsynchStatus_INTERFACE_DEFINED__ */ - - -/* interface __MIDL_itf_sqlncli_0000_0010 */ -/* [local] */ - -//---------------------------------------------------------------------------- -// Values for STATUS bitmask for DBSCHEMA_TABLES & DBSCHEMA_TABLES_INFO -#define TABLE_HAS_UPDATE_INSTEAD_OF_TRIGGER 0x00000001 //table has IOT defined -#define TABLE_HAS_DELETE_INSTEAD_OF_TRIGGER 0x00000002 //table has IOT defined -#define TABLE_HAS_INSERT_INSTEAD_OF_TRIGGER 0x00000004 //table has IOT defined -#define TABLE_HAS_AFTER_UPDATE_TRIGGER 0x00000008 //table has update trigger -#define TABLE_HAS_AFTER_DELETE_TRIGGER 0x00000010 //table has delete trigger -#define TABLE_HAS_AFTER_INSERT_TRIGGER 0x00000020 //table has insert trigger -#define TABLE_HAS_CASCADE_UPDATE 0x00000040 //table has cascade update -#define TABLE_HAS_CASCADE_DELETE 0x00000080 //table has cascade delete - -//---------------------------------------------------------------------------- -// PropIds for DBPROP_INIT_GENERALTIMEOUT -#if (OLEDBVER >= 0x0210) -#define DBPROP_INIT_GENERALTIMEOUT 0x11cL -#endif - -//---------------------------------------------------------------------------- -// PropIds for DBPROPSET_SQLSERVERDATASOURCE -#define SSPROP_ENABLEFASTLOAD 2 -#define SSPROP_ENABLEBULKCOPY 3 - -//---------------------------------------------------------------------------- -// PropIds for DBPROPSET_SQLSERVERDATASOURCEINFO -#define SSPROP_UNICODELCID 2 -#define SSPROP_UNICODECOMPARISONSTYLE 3 -#define SSPROP_COLUMNLEVELCOLLATION 4 -#define SSPROP_CHARACTERSET 5 -#define SSPROP_SORTORDER 6 -#define SSPROP_CURRENTCOLLATION 7 -#define SSPROP_INTEGRATEDAUTHENTICATIONMETHOD 8 -#define SSPROP_MUTUALLYAUTHENTICATED 9 - -//---------------------------------------------------------------------------- -// PropIds for DBPROPSET_SQLSERVERDBINIT -#define SSPROP_INIT_CURRENTLANGUAGE 4 -#define SSPROP_INIT_NETWORKADDRESS 5 -#define SSPROP_INIT_NETWORKLIBRARY 6 -#define SSPROP_INIT_USEPROCFORPREP 7 -#define SSPROP_INIT_AUTOTRANSLATE 8 -#define SSPROP_INIT_PACKETSIZE 9 -#define SSPROP_INIT_APPNAME 10 -#define SSPROP_INIT_WSID 11 -#define SSPROP_INIT_FILENAME 12 -#define SSPROP_INIT_ENCRYPT 13 -#define SSPROP_AUTH_REPL_SERVER_NAME 14 -#define SSPROP_INIT_TAGCOLUMNCOLLATION 15 -#define SSPROP_INIT_MARSCONNECTION 16 -#define SSPROP_INIT_FAILOVERPARTNER 18 -#define SSPROP_AUTH_OLD_PASSWORD 19 -#define SSPROP_INIT_DATATYPECOMPATIBILITY 20 -#define SSPROP_INIT_TRUST_SERVER_CERTIFICATE 21 -#define SSPROP_INIT_SERVERSPN 22 -#define SSPROP_INIT_FAILOVERPARTNERSPN 23 - -//----------------------------------------------------------------------------- -// Values for SSPROP_INIT_USEPROCFORPREP -#define SSPROPVAL_USEPROCFORPREP_OFF 0 -#define SSPROPVAL_USEPROCFORPREP_ON 1 -#define SSPROPVAL_USEPROCFORPREP_ON_DROP 2 - -//----------------------------------------------------------------------------- -// Values for SSPROP_INIT_DATATYPECOMPATIBILITY -#define SSPROPVAL_DATATYPECOMPATIBILITY_SQL2000 80 -#define SSPROPVAL_DATATYPECOMPATIBILITY_DEFAULT 0 - -//---------------------------------------------------------------------------- -// PropIds for DBPROPSET_SQLSERVERSESSION -#define SSPROP_QUOTEDCATALOGNAMES 2 -#define SSPROP_ALLOWNATIVEVARIANT 3 -#define SSPROP_SQLXMLXPROGID 4 -#define SSPROP_ASYNCH_BULKCOPY 5 - -//---------------------------------------------------------------------------- -// PropIds for DBPROPSET_SQLSERVERROWSET -#define SSPROP_MAXBLOBLENGTH 8 -#define SSPROP_FASTLOADOPTIONS 9 -#define SSPROP_FASTLOADKEEPNULLS 10 -#define SSPROP_FASTLOADKEEPIDENTITY 11 -#define SSPROP_CURSORAUTOFETCH 12 -#define SSPROP_DEFERPREPARE 13 -#define SSPROP_IRowsetFastLoad 14 -#define SSPROP_QP_NOTIFICATION_TIMEOUT 17 -#define SSPROP_QP_NOTIFICATION_MSGTEXT 18 -#define SSPROP_QP_NOTIFICATION_OPTIONS 19 -#define SSPROP_NOCOUNT_STATUS 20 -#define SSPROP_COMPUTE_ID 21 -#define SSPROP_COLUMN_ID 22 -#define SSPROP_COMPUTE_BYLIST 23 -#define SSPROP_ISSAsynchStatus 24 - -//----------------------------------------------------------------------------- -// Values for SSPROP_QP_NOTIFICATION_TIMEOUT -#define SSPROPVAL_DEFAULT_NOTIFICATION_TIMEOUT 432000 /* in sec */ -#define SSPROPVAL_MAX_NOTIFICATION_TIMEOUT 0x7FFFFFFF /* in sec */ -#define MAX_NOTIFICATION_LEN 2000 /* NVARCHAR [2000] for both ID & DELIVERY_QUEUE */ - -//---------------------------------------------------------------------------- -// PropIds for DBPROPSET_SQLSERVERCOLUMN -#define SSPROP_COL_COLLATIONNAME 14 -#define SSPROP_COL_UDT_CATALOGNAME 31 -#define SSPROP_COL_UDT_SCHEMANAME 32 -#define SSPROP_COL_UDT_NAME 33 -#define SSPROP_COL_XML_SCHEMACOLLECTION_CATALOGNAME 34 -#define SSPROP_COL_XML_SCHEMACOLLECTION_SCHEMANAME 35 -#define SSPROP_COL_XML_SCHEMACOLLECTIONNAME 36 -#define SSPROP_COL_COMPUTED 37 - - -//---------------------------------------------------------------------------- -// PropIds for DBPROPSET_SQLSERVERSTREAM -#define SSPROP_STREAM_XMLROOT 19 - -//---------------------------------------------------------------------------- -// PropIds for DBPROPSET_SQLSERVERPARAMETER -#define SSPROP_PARAM_XML_SCHEMACOLLECTION_CATALOGNAME 24 -#define SSPROP_PARAM_XML_SCHEMACOLLECTION_SCHEMANAME 25 -#define SSPROP_PARAM_XML_SCHEMACOLLECTIONNAME 26 -#define SSPROP_PARAM_UDT_CATALOGNAME 27 -#define SSPROP_PARAM_UDT_SCHEMANAME 28 -#define SSPROP_PARAM_UDT_NAME 29 -#define SSPROP_PARAM_TYPE_CATALOGNAME 38 -#define SSPROP_PARAM_TYPE_SCHEMANAME 39 -#define SSPROP_PARAM_TYPE_TYPENAME 40 -#define SSPROP_PARAM_TABLE_DEFAULT_COLUMNS 41 -#define SSPROP_PARAM_TABLE_COLUMN_SORT_ORDER 42 - -//---------------------------------------------------------------------------- -// PropIds for DBPROPSET_SQLSERVERINDEX -#define SSPROP_INDEX_XML 1 - -//----------------------------------------------------------------------------- -// -#define BCP_TYPE_DEFAULT 0x00 -#define BCP_TYPE_SQLTEXT 0x23 -#define BCP_TYPE_SQLVARBINARY 0x25 -#define BCP_TYPE_SQLINTN 0x26 -#define BCP_TYPE_SQLVARCHAR 0x27 -#define BCP_TYPE_SQLBINARY 0x2d -#define BCP_TYPE_SQLIMAGE 0x22 -#define BCP_TYPE_SQLCHARACTER 0x2f -#define BCP_TYPE_SQLINT1 0x30 -#define BCP_TYPE_SQLBIT 0x32 -#define BCP_TYPE_SQLINT2 0x34 -#define BCP_TYPE_SQLINT4 0x38 -#define BCP_TYPE_SQLMONEY 0x3c -#define BCP_TYPE_SQLDATETIME 0x3d -#define BCP_TYPE_SQLFLT8 0x3e -#define BCP_TYPE_SQLFLTN 0x6d -#define BCP_TYPE_SQLMONEYN 0x6e -#define BCP_TYPE_SQLDATETIMN 0x6f -#define BCP_TYPE_SQLFLT4 0x3b -#define BCP_TYPE_SQLMONEY4 0x7a -#define BCP_TYPE_SQLDATETIM4 0x3a -#define BCP_TYPE_SQLDECIMAL 0x6a -#define BCP_TYPE_SQLNUMERIC 0x6c -#define BCP_TYPE_SQLUNIQUEID 0x24 -#define BCP_TYPE_SQLBIGCHAR 0xaf -#define BCP_TYPE_SQLBIGVARCHAR 0xa7 -#define BCP_TYPE_SQLBIGBINARY 0xad -#define BCP_TYPE_SQLBIGVARBINARY 0xa5 -#define BCP_TYPE_SQLBITN 0x68 -#define BCP_TYPE_SQLNCHAR 0xef -#define BCP_TYPE_SQLNVARCHAR 0xe7 -#define BCP_TYPE_SQLNTEXT 0x63 -#define BCP_TYPE_SQLDECIMALN 0x6a -#define BCP_TYPE_SQLNUMERICN 0x6c -#define BCP_TYPE_SQLINT8 0x7f -#define BCP_TYPE_SQLVARIANT 0x62 -#define BCP_TYPE_SQLUDT 0xf0 -#define BCP_TYPE_SQLXML 0xf1 -#define BCP_TYPE_SQLDATE 0x28 -#define BCP_TYPE_SQLTIME 0x29 -#define BCP_TYPE_SQLDATETIME2 0x2a -#define BCP_TYPE_SQLDATETIMEOFFSET 0x2b - -#define BCP_DIRECTION_IN 1 -#define BCP_DIRECTION_OUT 2 - -#define BCP_OPTION_MAXERRS 1 -#define BCP_OPTION_FIRST 2 -#define BCP_OPTION_LAST 3 -#define BCP_OPTION_BATCH 4 -#define BCP_OPTION_KEEPNULLS 5 -#define BCP_OPTION_ABORT 6 -#define BCP_OPTION_KEEPIDENTITY 8 -#define BCP_OPTION_HINTSA 10 -#define BCP_OPTION_HINTSW 11 -#define BCP_OPTION_FILECP 12 -#define BCP_OPTION_UNICODEFILE 13 -#define BCP_OPTION_TEXTFILE 14 -#define BCP_OPTION_FILEFMT 15 -#define BCP_OPTION_FMTXML 16 -#define BCP_OPTION_FIRSTEX 17 -#define BCP_OPTION_LASTEX 18 -#define BCP_OPTION_ROWCOUNT 19 - -#define BCP_FILECP_ACP 0 -#define BCP_FILECP_OEMCP 1 -#define BCP_FILECP_RAW (-1) - -#ifdef UNICODE -#define BCP_OPTION_HINTS BCP_OPTION_HINTSW -#else -#define BCP_OPTION_HINTS BCP_OPTION_HINTSA -#endif - -#define BCP_PREFIX_DEFAULT (-10) - -#define BCP_LENGTH_NULL (-1) -#define BCP_LENGTH_VARIABLE (-10) -// -//----------------------------------------------------------------------------- - - -//---------------------------------------------------------------------------- -// Provider-specific Class Ids -// - -#if SQLNCLI_VER >= 1000 - -extern const GUID OLEDBDECLSPEC CLSID_SQLNCLI10 = {0x8F4A6B68L,0x4F36,0x4e3c,{0xBE,0x81,0xBC,0x7C,0xA4,0xE9,0xC4,0x5C}}; -extern const GUID OLEDBDECLSPEC CLSID_SQLNCLI10_ERROR = {0x53F9C3BCL,0x275F,0x4FA5,{0xB3,0xE6,0x25,0xED,0xCD,0x51,0x20,0x23}}; -extern const GUID OLEDBDECLSPEC CLSID_SQLNCLI10_ENUMERATOR = {0x91E4F2A5L,0x1B07,0x45f6,{0x86,0xBF,0x92,0x03,0xC7,0xC7,0x2B,0xE3}}; - -#endif - -extern const GUID OLEDBDECLSPEC CLSID_SQLNCLI = {0x85ecafccL,0xbdd9,0x4b03,{0x97,0xa8,0xfa,0x65,0xcb,0xe3,0x85,0x9b}}; -extern const GUID OLEDBDECLSPEC CLSID_SQLNCLI_ERROR = {0xe8bc0a7aL,0xea71,0x4263,{0x8c,0xda,0x94,0xf3,0x88,0xb8,0xed,0x10}}; -extern const GUID OLEDBDECLSPEC CLSID_SQLNCLI_ENUMERATOR = {0x4898ad37L,0xfe05,0x42df,{0x92,0xf9,0xe8,0x57,0xdd,0xfe,0xe7,0x30}}; -extern const GUID OLEDBDECLSPEC CLSID_ROWSET_TVP = {0xc7ef28d5L,0x7bee,0x443f,{0x86,0xda,0xe3,0x98,0x4f,0xcd,0x4d,0xf9}}; - -//---------------------------------------------------------------------------- -// Provider-specific Interface Ids -// -#ifndef _SQLOLEDB_H_ -extern const GUID OLEDBDECLSPEC IID_ISQLServerErrorInfo = {0x5cf4ca12,0xef21,0x11d0,{0x97,0xe7,0x0,0xc0,0x4f,0xc2,0xad,0x98}}; -extern const GUID OLEDBDECLSPEC IID_IRowsetFastLoad = {0x5cf4ca13,0xef21,0x11d0,{0x97,0xe7,0x0,0xc0,0x4f,0xc2,0xad,0x98}}; -extern const GUID OLEDBDECLSPEC IID_IUMSInitialize = {0x5cf4ca14,0xef21,0x11d0,{0x97,0xe7,0x0,0xc0,0x4f,0xc2,0xad,0x98}}; -extern const GUID OLEDBDECLSPEC IID_ISchemaLock = {0x4c2389fb,0x2511,0x11d4,{0xb2,0x58,0x0,0xc0,0x4f,0x79,0x71,0xce}}; -extern const GUID OLEDBDECLSPEC IID_ISQLXMLHelper = {0xd22a7678L,0xf860,0x40cd,{0xa5,0x67,0x15,0x63,0xde,0xb4,0x6d,0x49}}; -#endif //_SQLOLEDB_H_ -extern const GUID OLEDBDECLSPEC IID_ISSAbort = {0x5cf4ca15,0xef21,0x11d0,{0x97,0xe7,0x0,0xc0,0x4f,0xc2,0xad,0x98}}; -extern const GUID OLEDBDECLSPEC IID_IBCPSession = {0x88352D80,0x42D1,0x42f0,{0xA1,0x70,0xAB,0x0F,0x8B,0x45,0xB9,0x39}}; -extern const GUID OLEDBDECLSPEC IID_ISSCommandWithParameters = {0xeec30162,0x6087,0x467c,{0xb9,0x95,0x7c,0x52,0x3c,0xe9,0x65,0x61}}; -extern const GUID OLEDBDECLSPEC IID_ISSAsynchStatus = {0x1FF1F743,0x8BB0, 0x4c00,{0xAC,0xC4,0xC1,0x0E,0x43,0xB0,0x8F,0xC1}}; - - -//---------------------------------------------------------------------------- -// Provider-specific schema rowsets -// -#ifndef _SQLOLEDB_H_ -extern const GUID OLEDBDECLSPEC DBSCHEMA_LINKEDSERVERS = {0x9093caf4,0x2eac,0x11d1,{0x98,0x9,0x0,0xc0,0x4f,0xc2,0xad,0x98}}; -#endif //_SQLOLEDB_H_ -extern const GUID OLEDBDECLSPEC DBSCHEMA_SQL_ASSEMBLIES = {0x7c1112c8, 0xc2d3, 0x4f6e, {0x94, 0x9a, 0x98, 0x3d, 0x38, 0xa5, 0x8f, 0x46}}; -extern const GUID OLEDBDECLSPEC DBSCHEMA_SQL_ASSEMBLY_DEPENDENCIES = {0xcb0f837b, 0x974c, 0x41b8, {0x90, 0x9d, 0x64, 0x9c, 0xaf, 0x45, 0xad, 0x2f}}; -extern const GUID OLEDBDECLSPEC DBSCHEMA_SQL_USER_TYPES = {0xf1198bd8, 0xa424, 0x4ea3, {0x8d, 0x4c, 0x60, 0x7e, 0xee, 0x2b, 0xab, 0x60}}; -extern const GUID OLEDBDECLSPEC DBSCHEMA_XML_COLLECTIONS = {0x56bfad8c, 0x6e8f, 0x480d, {0x91, 0xde, 0x35, 0x16, 0xd9, 0x9a, 0x5d, 0x10}}; -extern const GUID OLEDBDECLSPEC DBSCHEMA_SQL_TABLE_TYPES = {0x4e26cde7, 0xaaa4, 0x41ed, {0x93, 0xdd, 0x37, 0x6e, 0x6d, 0x40, 0x9c, 0x17}}; -extern const GUID OLEDBDECLSPEC DBSCHEMA_SQL_TABLE_TYPE_PRIMARY_KEYS = {0x9738faea, 0x31e8, 0x4f63, {0xae, 0xd, 0x61, 0x33, 0x16, 0x41, 0x8c, 0xdd}}; -extern const GUID OLEDBDECLSPEC DBSCHEMA_SQL_TABLE_TYPE_COLUMNS = {0xa663d94b, 0xddf7, 0x4a7f, {0xa5, 0x37, 0xd6, 0x1f, 0x12, 0x36, 0x5d, 0x7c}}; -extern const GUID OLEDBDECLSPEC DBSCHEMA_COLUMNS_EXTENDED = {0x66462f01, 0x633a, 0x44d9, {0xb0, 0xd0, 0xfe, 0x66, 0xf2, 0x1a, 0x0d, 0x24}}; -extern const GUID OLEDBDECLSPEC DBSCHEMA_SPARSE_COLUMN_SET = {0x31a4837c, 0xf9ff, 0x405f, {0x89, 0x82, 0x02, 0x19, 0xaa, 0xaa, 0x4a, 0x12}}; - - -#ifndef CRESTRICTIONS_DBSCHEMA_LINKEDSERVERS -#define CRESTRICTIONS_DBSCHEMA_LINKEDSERVERS 1 -#endif - -#ifndef CRESTRICTIONS_DBSCHEMA_ASSEMBLIES -#define CRESTRICTIONS_DBSCHEMA_SQL_ASSEMBLIES 4 -#endif - -#ifndef CRESTRICTIONS_DBSCHEMA_ASSEMBLY_DEPENDENCIES -#define CRESTRICTIONS_DBSCHEMA_SQL_ASSEMBLY_DEPENDENCIES 4 -#endif - -#ifndef CRESTRICTIONS_DBSCHEMA_USER_TYPES -#define CRESTRICTIONS_DBSCHEMA_SQL_USER_TYPES 3 -#endif - -#ifndef CRESTRICTIONS_DBSCHEMA_XML_COLLECTIONS -#define CRESTRICTIONS_DBSCHEMA_XML_COLLECTIONS 4 -#endif - -#ifndef CRESTRICTIONS_DBSCHEMA_SQL_TABLE_TYPES -#define CRESTRICTIONS_DBSCHEMA_SQL_TABLE_TYPES 3 -#endif - -#ifndef CRESTRICTIONS_DBSCHEMA_SQL_TABLE_TYPE_PRIMARY_KEYS -#define CRESTRICTIONS_DBSCHEMA_SQL_TABLE_TYPE_PRIMARY_KEYS 3 -#endif - -#ifndef CRESTRICTIONS_DBSCHEMA_SQL_TABLE_TYPE_COLUMNS -#define CRESTRICTIONS_DBSCHEMA_SQL_TABLE_TYPE_COLUMNS 4 -#endif - -#ifndef CRESTRICTIONS_DBSCHEMA_COLUMNS_EXTENDED -#define CRESTRICTIONS_DBSCHEMA_COLUMNS_EXTENDED 4 -#endif - -#ifndef CRESTRICTIONS_DBSCHEMA_SPARSE_COLUMN_SET -#define CRESTRICTIONS_DBSCHEMA_SPARSE_COLUMN_SET 4 -#endif - - -//---------------------------------------------------------------------------- -// Provider-specific property sets -// -#ifndef _SQLOLEDB_H_ -extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERDATASOURCE = {0x28efaee4,0x2d2c,0x11d1,{0x98,0x7,0x0,0xc0,0x4f,0xc2,0xad,0x98}}; -extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERDATASOURCEINFO= {0xdf10cb94,0x35f6,0x11d2,{0x9c,0x54,0x0,0xc0,0x4f,0x79,0x71,0xd3}}; -extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERDBINIT = {0x5cf4ca10,0xef21,0x11d0,{0x97,0xe7,0x0,0xc0,0x4f,0xc2,0xad,0x98}}; -extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERROWSET = {0x5cf4ca11,0xef21,0x11d0,{0x97,0xe7,0x0,0xc0,0x4f,0xc2,0xad,0x98}}; -extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERSESSION = {0x28efaee5,0x2d2c,0x11d1,{0x98,0x7,0x0,0xc0,0x4f,0xc2,0xad,0x98}}; -extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERCOLUMN = {0x3b63fb5e,0x3fbb,0x11d3,{0x9f,0x29,0x0,0xc0,0x4f,0x8e,0xe9,0xdc}}; -extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERSTREAM = {0x9f79c073,0x8a6d,0x4bca,{0xa8,0xa8,0xc9,0xb7,0x9a,0x9b,0x96,0x2d}}; -#endif //_SQLOLEDB_H_ -extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERPARAMETER = {0xfee09128,0xa67d,0x47ea,{0x8d,0x40,0x24,0xa1,0xd4,0x73,0x7e,0x8d}}; -extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERINDEX = {0xE428B84E,0xA6B7,0x413a,{0x94,0x65,0x56,0x23,0x2E,0x0D,0x2B,0xEB}}; -extern const GUID OLEDBDECLSPEC DBPROPSET_PARAMETERALL = {0x2cd2b7d8,0xe7c2,0x4f6c,{0x9b,0x30,0x75,0xe2,0x58,0x46,0x10,0x97}}; - - -//---------------------------------------------------------------------------- -// Provider-specific columns for IColumnsRowset -// -#define DBCOLUMN_SS_X_GUID {0x627bd890,0xed54,0x11d2,{0xb9,0x94,0x0,0xc0,0x4f,0x8c,0xa8,0x2c}} -// -#ifndef _SQLOLEDB_H_ -extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_COMPFLAGS = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)100}; -extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_SORTID = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)101}; -extern const DBID OLEDBDECLSPEC DBCOLUMN_BASETABLEINSTANCE = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)102}; -extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_TDSCOLLATION = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)103}; -#endif //_SQLOLEDB_H_ -extern const DBID OLEDBDECLSPEC DBCOLUMN_BASESERVERNAME = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)104}; -extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_XML_SCHEMACOLLECTION_CATALOGNAME= {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)105}; -extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_XML_SCHEMACOLLECTION_SCHEMANAME = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)106}; -extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_XML_SCHEMACOLLECTIONNAME = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)107}; -extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_UDT_CATALOGNAME = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)108}; -extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_UDT_SCHEMANAME = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)109}; -extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_UDT_NAME = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)110}; -extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_ASSEMBLY_TYPENAME= {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)111}; - -// OLEDB part of SQL Server Native Client header - end here! -#endif // defined(_SQLNCLI_OLEDB_) || !defined(_SQLNCLI_ODBC_) - -// ODBC part of SQL Server Native Client header - begin here! -#if defined(_SQLNCLI_ODBC_) || !defined(_SQLNCLI_OLEDB_) -#ifdef ODBCVER - -// max SQL Server identifier length -#define SQL_MAX_SQLSERVERNAME 128 - -// SQLSetConnectAttr driver specific defines. -// Microsoft has 1200 thru 1249 reserved for Microsoft SQL Server Native Client driver usage. -// Connection attributes -#define SQL_COPT_SS_BASE 1200 -#define SQL_COPT_SS_REMOTE_PWD (SQL_COPT_SS_BASE+1) // dbrpwset SQLSetConnectOption only -#define SQL_COPT_SS_USE_PROC_FOR_PREP (SQL_COPT_SS_BASE+2) // Use create proc for SQLPrepare -#define SQL_COPT_SS_INTEGRATED_SECURITY (SQL_COPT_SS_BASE+3) // Force integrated security on login -#define SQL_COPT_SS_PRESERVE_CURSORS (SQL_COPT_SS_BASE+4) // Preserve server cursors after SQLTransact -#define SQL_COPT_SS_USER_DATA (SQL_COPT_SS_BASE+5) // dbgetuserdata/dbsetuserdata -#define SQL_COPT_SS_ENLIST_IN_DTC SQL_ATTR_ENLIST_IN_DTC // Enlist in a DTC transaction -#define SQL_COPT_SS_ENLIST_IN_XA SQL_ATTR_ENLIST_IN_XA // Enlist in a XA transaction -#define SQL_COPT_SS_FALLBACK_CONNECT (SQL_COPT_SS_BASE+10) // Enables FallBack connections -#define SQL_COPT_SS_PERF_DATA (SQL_COPT_SS_BASE+11) // Used to access SQL Server ODBC driver performance data -#define SQL_COPT_SS_PERF_DATA_LOG (SQL_COPT_SS_BASE+12) // Used to set the logfile name for the Performance data -#define SQL_COPT_SS_PERF_QUERY_INTERVAL (SQL_COPT_SS_BASE+13) // Used to set the query logging threshold in milliseconds. -#define SQL_COPT_SS_PERF_QUERY_LOG (SQL_COPT_SS_BASE+14) // Used to set the logfile name for saving queryies. -#define SQL_COPT_SS_PERF_QUERY (SQL_COPT_SS_BASE+15) // Used to start and stop query logging. -#define SQL_COPT_SS_PERF_DATA_LOG_NOW (SQL_COPT_SS_BASE+16) // Used to make a statistics log entry to disk. -#define SQL_COPT_SS_QUOTED_IDENT (SQL_COPT_SS_BASE+17) // Enable/Disable Quoted Identifiers -#define SQL_COPT_SS_ANSI_NPW (SQL_COPT_SS_BASE+18) // Enable/Disable ANSI NULL, Padding and Warnings -#define SQL_COPT_SS_BCP (SQL_COPT_SS_BASE+19) // Allow BCP usage on connection -#define SQL_COPT_SS_TRANSLATE (SQL_COPT_SS_BASE+20) // Perform code page translation -#define SQL_COPT_SS_ATTACHDBFILENAME (SQL_COPT_SS_BASE+21) // File name to be attached as a database -#define SQL_COPT_SS_CONCAT_NULL (SQL_COPT_SS_BASE+22) // Enable/Disable CONCAT_NULL_YIELDS_NULL -#define SQL_COPT_SS_ENCRYPT (SQL_COPT_SS_BASE+23) // Allow strong encryption for data -#define SQL_COPT_SS_MARS_ENABLED (SQL_COPT_SS_BASE+24) // Multiple active result set per connection -#define SQL_COPT_SS_FAILOVER_PARTNER (SQL_COPT_SS_BASE+25) // Failover partner server -#define SQL_COPT_SS_OLDPWD (SQL_COPT_SS_BASE+26) // Old Password, used when changing password during login -#define SQL_COPT_SS_TXN_ISOLATION (SQL_COPT_SS_BASE+27) // Used to set/get any driver-specific or ODBC-defined TXN iso level -#define SQL_COPT_SS_TRUST_SERVER_CERTIFICATE (SQL_COPT_SS_BASE+28) // Trust server certificate -#define SQL_COPT_SS_SERVER_SPN (SQL_COPT_SS_BASE+29) // Server SPN -#define SQL_COPT_SS_FAILOVER_PARTNER_SPN (SQL_COPT_SS_BASE+30) // Failover partner server SPN -#define SQL_COPT_SS_INTEGRATED_AUTHENTICATION_METHOD (SQL_COPT_SS_BASE+31) // The integrated authentication method used for the connection -#define SQL_COPT_SS_MUTUALLY_AUTHENTICATED (SQL_COPT_SS_BASE+32) // Used to decide if the connection is mutually authenticated -#define SQL_COPT_SS_MAX_USED SQL_COPT_SS_MUTUALLY_AUTHENTICATED -// Define old names -#define SQL_REMOTE_PWD SQL_COPT_SS_REMOTE_PWD -#define SQL_USE_PROCEDURE_FOR_PREPARE SQL_COPT_SS_USE_PROC_FOR_PREP -#define SQL_INTEGRATED_SECURITY SQL_COPT_SS_INTEGRATED_SECURITY -#define SQL_PRESERVE_CURSORS SQL_COPT_SS_PRESERVE_CURSORS - -// SQLSetStmtAttr SQL Server Native Client driver specific defines. -// Statement attributes -#define SQL_SOPT_SS_BASE 1225 -#define SQL_SOPT_SS_TEXTPTR_LOGGING (SQL_SOPT_SS_BASE+0) // Text pointer logging -#define SQL_SOPT_SS_CURRENT_COMMAND (SQL_SOPT_SS_BASE+1) // dbcurcmd SQLGetStmtOption only -#define SQL_SOPT_SS_HIDDEN_COLUMNS (SQL_SOPT_SS_BASE+2) // Expose FOR BROWSE hidden columns -#define SQL_SOPT_SS_NOBROWSETABLE (SQL_SOPT_SS_BASE+3) // Set NOBROWSETABLE option -#define SQL_SOPT_SS_REGIONALIZE (SQL_SOPT_SS_BASE+4) // Regionalize output character conversions -#define SQL_SOPT_SS_CURSOR_OPTIONS (SQL_SOPT_SS_BASE+5) // Server cursor options -#define SQL_SOPT_SS_NOCOUNT_STATUS (SQL_SOPT_SS_BASE+6) // Real vs. Not Real row count indicator -#define SQL_SOPT_SS_DEFER_PREPARE (SQL_SOPT_SS_BASE+7) // Defer prepare until necessary -#define SQL_SOPT_SS_QUERYNOTIFICATION_TIMEOUT (SQL_SOPT_SS_BASE+8) // Notification timeout -#define SQL_SOPT_SS_QUERYNOTIFICATION_MSGTEXT (SQL_SOPT_SS_BASE+9) // Notification message text -#define SQL_SOPT_SS_QUERYNOTIFICATION_OPTIONS (SQL_SOPT_SS_BASE+10)// SQL service broker name -#define SQL_SOPT_SS_PARAM_FOCUS (SQL_SOPT_SS_BASE+11)// Direct subsequent calls to parameter related methods to set properties on constituent columns/parameters of container types -#define SQL_SOPT_SS_NAME_SCOPE (SQL_SOPT_SS_BASE+12)// Sets name scope for subsequent catalog function calls -#define SQL_SOPT_SS_MAX_USED SQL_SOPT_SS_NAME_SCOPE -// Define old names -#define SQL_TEXTPTR_LOGGING SQL_SOPT_SS_TEXTPTR_LOGGING -#define SQL_COPT_SS_BASE_EX 1240 -#define SQL_COPT_SS_BROWSE_CONNECT (SQL_COPT_SS_BASE_EX+1) // Browse connect mode of operation -#define SQL_COPT_SS_BROWSE_SERVER (SQL_COPT_SS_BASE_EX+2) // Single Server browse request. -#define SQL_COPT_SS_WARN_ON_CP_ERROR (SQL_COPT_SS_BASE_EX+3) // Issues warning when data from the server had a loss during code page conversion. -#define SQL_COPT_SS_CONNECTION_DEAD (SQL_COPT_SS_BASE_EX+4) // dbdead SQLGetConnectOption only. It will try to ping the server. Expensive connection check -#define SQL_COPT_SS_BROWSE_CACHE_DATA (SQL_COPT_SS_BASE_EX+5) // Determines if we should cache browse info. Used when returned buffer is greater then ODBC limit (32K) -#define SQL_COPT_SS_RESET_CONNECTION (SQL_COPT_SS_BASE_EX+6) // When this option is set, we will perform connection reset on next packet -#define SQL_COPT_SS_EX_MAX_USED SQL_COPT_SS_RESET_CONNECTION - -// SQLColAttributes driver specific defines. -// SQLSetDescField/SQLGetDescField driver specific defines. -// Microsoft has 1200 thru 1249 reserved for Microsoft SQL Server Native Client driver usage. -#define SQL_CA_SS_BASE 1200 -#define SQL_CA_SS_COLUMN_SSTYPE (SQL_CA_SS_BASE+0) // dbcoltype/dbalttype -#define SQL_CA_SS_COLUMN_UTYPE (SQL_CA_SS_BASE+1) // dbcolutype/dbaltutype -#define SQL_CA_SS_NUM_ORDERS (SQL_CA_SS_BASE+2) // dbnumorders -#define SQL_CA_SS_COLUMN_ORDER (SQL_CA_SS_BASE+3) // dbordercol -#define SQL_CA_SS_COLUMN_VARYLEN (SQL_CA_SS_BASE+4) // dbvarylen -#define SQL_CA_SS_NUM_COMPUTES (SQL_CA_SS_BASE+5) // dbnumcompute -#define SQL_CA_SS_COMPUTE_ID (SQL_CA_SS_BASE+6) // dbnextrow status return -#define SQL_CA_SS_COMPUTE_BYLIST (SQL_CA_SS_BASE+7) // dbbylist -#define SQL_CA_SS_COLUMN_ID (SQL_CA_SS_BASE+8) // dbaltcolid -#define SQL_CA_SS_COLUMN_OP (SQL_CA_SS_BASE+9) // dbaltop -#define SQL_CA_SS_COLUMN_SIZE (SQL_CA_SS_BASE+10) // dbcollen -#define SQL_CA_SS_COLUMN_HIDDEN (SQL_CA_SS_BASE+11) // Column is hidden (FOR BROWSE) -#define SQL_CA_SS_COLUMN_KEY (SQL_CA_SS_BASE+12) // Column is key column (FOR BROWSE) -//#define SQL_DESC_BASE_COLUMN_NAME_OLD (SQL_CA_SS_BASE+13) // This is defined at another location. -#define SQL_CA_SS_COLUMN_COLLATION (SQL_CA_SS_BASE+14) // Column collation (only for chars) -#define SQL_CA_SS_VARIANT_TYPE (SQL_CA_SS_BASE+15) -#define SQL_CA_SS_VARIANT_SQL_TYPE (SQL_CA_SS_BASE+16) -#define SQL_CA_SS_VARIANT_SERVER_TYPE (SQL_CA_SS_BASE+17) - -// XML, CLR UDT, and table valued parameter related metadata -#define SQL_CA_SS_UDT_CATALOG_NAME (SQL_CA_SS_BASE+18) // UDT catalog name -#define SQL_CA_SS_UDT_SCHEMA_NAME (SQL_CA_SS_BASE+19) // UDT schema name -#define SQL_CA_SS_UDT_TYPE_NAME (SQL_CA_SS_BASE+20) // UDT type name -#define SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME (SQL_CA_SS_BASE+21) // Qualified name of the assembly containing the UDT class -#define SQL_CA_SS_XML_SCHEMACOLLECTION_CATALOG_NAME (SQL_CA_SS_BASE+22) // Name of the catalog that contains XML Schema collection -#define SQL_CA_SS_XML_SCHEMACOLLECTION_SCHEMA_NAME (SQL_CA_SS_BASE+23) // Name of the schema that contains XML Schema collection -#define SQL_CA_SS_XML_SCHEMACOLLECTION_NAME (SQL_CA_SS_BASE+24) // Name of the XML Schema collection -#define SQL_CA_SS_CATALOG_NAME (SQL_CA_SS_BASE+25) // Catalog name -#define SQL_CA_SS_SCHEMA_NAME (SQL_CA_SS_BASE+26) // Schema name -#define SQL_CA_SS_TYPE_NAME (SQL_CA_SS_BASE+27) // Type name - -// table valued parameter related metadata -#define SQL_CA_SS_COLUMN_COMPUTED (SQL_CA_SS_BASE+29) // column is computed -#define SQL_CA_SS_COLUMN_IN_UNIQUE_KEY (SQL_CA_SS_BASE+30) // column is part of a unique key -#define SQL_CA_SS_COLUMN_SORT_ORDER (SQL_CA_SS_BASE+31) // column sort order -#define SQL_CA_SS_COLUMN_SORT_ORDINAL (SQL_CA_SS_BASE+32) // column sort ordinal -#define SQL_CA_SS_COLUMN_HAS_DEFAULT_VALUE (SQL_CA_SS_BASE+33) // column has default value for all rows of the table valued parameter - -// sparse column related metadata -#define SQL_CA_SS_IS_COLUMN_SET (SQL_CA_SS_BASE+34) // column is a column-set column for sparse columns - -// Legacy datetime related metadata -#define SQL_CA_SS_SERVER_TYPE (SQL_CA_SS_BASE+35) // column type to send on the wire for datetime types - -#define SQL_CA_SS_MAX_USED (SQL_CA_SS_BASE+36) - -// Defines returned by SQL_ATTR_CURSOR_TYPE/SQL_CURSOR_TYPE -#define SQL_CURSOR_FAST_FORWARD_ONLY 8 // Only returned by SQLGetStmtAttr/Option -// Defines for use with SQL_COPT_SS_USE_PROC_FOR_PREP -#define SQL_UP_OFF 0L // Procedures won't be used for prepare -#define SQL_UP_ON 1L // Procedures will be used for prepare -#define SQL_UP_ON_DROP 2L // Temp procedures will be explicitly dropped -#define SQL_UP_DEFAULT SQL_UP_ON -// Defines for use with SQL_COPT_SS_INTEGRATED_SECURITY - Pre-Connect Option only -#define SQL_IS_OFF 0L // Integrated security isn't used -#define SQL_IS_ON 1L // Integrated security is used -#define SQL_IS_DEFAULT SQL_IS_OFF -// Defines for use with SQL_COPT_SS_PRESERVE_CURSORS -#define SQL_PC_OFF 0L // Cursors are closed on SQLTransact -#define SQL_PC_ON 1L // Cursors remain open on SQLTransact -#define SQL_PC_DEFAULT SQL_PC_OFF -// Defines for use with SQL_COPT_SS_USER_DATA -#define SQL_UD_NOTSET NULL // No user data pointer set -// Defines for use with SQL_COPT_SS_TRANSLATE -#define SQL_XL_OFF 0L // Code page translation is not performed -#define SQL_XL_ON 1L // Code page translation is performed -#define SQL_XL_DEFAULT SQL_XL_ON -// Defines for use with SQL_COPT_SS_FALLBACK_CONNECT - Pre-Connect Option only -#define SQL_FB_OFF 0L // FallBack connections are disabled -#define SQL_FB_ON 1L // FallBack connections are enabled -#define SQL_FB_DEFAULT SQL_FB_OFF -// Defines for use with SQL_COPT_SS_BCP - Pre-Connect Option only -#define SQL_BCP_OFF 0L // BCP is not allowed on connection -#define SQL_BCP_ON 1L // BCP is allowed on connection -#define SQL_BCP_DEFAULT SQL_BCP_OFF -// Defines for use with SQL_COPT_SS_QUOTED_IDENT -#define SQL_QI_OFF 0L // Quoted identifiers are enable -#define SQL_QI_ON 1L // Quoted identifiers are disabled -#define SQL_QI_DEFAULT SQL_QI_ON -// Defines for use with SQL_COPT_SS_ANSI_NPW - Pre-Connect Option only -#define SQL_AD_OFF 0L // ANSI NULLs, Padding and Warnings are enabled -#define SQL_AD_ON 1L // ANSI NULLs, Padding and Warnings are disabled -#define SQL_AD_DEFAULT SQL_AD_ON -// Defines for use with SQL_COPT_SS_CONCAT_NULL - Pre-Connect Option only -#define SQL_CN_OFF 0L // CONCAT_NULL_YIELDS_NULL is off -#define SQL_CN_ON 1L // CONCAT_NULL_YIELDS_NULL is on -#define SQL_CN_DEFAULT SQL_CN_ON -// Defines for use with SQL_SOPT_SS_TEXTPTR_LOGGING -#define SQL_TL_OFF 0L // No logging on text pointer ops -#define SQL_TL_ON 1L // Logging occurs on text pointer ops -#define SQL_TL_DEFAULT SQL_TL_ON -// Defines for use with SQL_SOPT_SS_HIDDEN_COLUMNS -#define SQL_HC_OFF 0L // FOR BROWSE columns are hidden -#define SQL_HC_ON 1L // FOR BROWSE columns are exposed -#define SQL_HC_DEFAULT SQL_HC_OFF -// Defines for use with SQL_SOPT_SS_NOBROWSETABLE -#define SQL_NB_OFF 0L // NO_BROWSETABLE is off -#define SQL_NB_ON 1L // NO_BROWSETABLE is on -#define SQL_NB_DEFAULT SQL_NB_OFF -// Defines for use with SQL_SOPT_SS_REGIONALIZE -#define SQL_RE_OFF 0L // No regionalization occurs on output character conversions -#define SQL_RE_ON 1L // Regionalization occurs on output character conversions -#define SQL_RE_DEFAULT SQL_RE_OFF -// Defines for use with SQL_SOPT_SS_CURSOR_OPTIONS -#define SQL_CO_OFF 0L // Clear all cursor options -#define SQL_CO_FFO 1L // Fast-forward cursor will be used -#define SQL_CO_AF 2L // Autofetch on cursor open -#define SQL_CO_FFO_AF (SQL_CO_FFO|SQL_CO_AF) // Fast-forward cursor with autofetch -#define SQL_CO_FIREHOSE_AF 4L // Auto fetch on fire-hose cursors -#define SQL_CO_DEFAULT SQL_CO_OFF -//SQL_SOPT_SS_NOCOUNT_STATUS -#define SQL_NC_OFF 0L -#define SQL_NC_ON 1L -//SQL_SOPT_SS_DEFER_PREPARE -#define SQL_DP_OFF 0L -#define SQL_DP_ON 1L -//SQL_SOPT_SS_NAME_SCOPE -#define SQL_SS_NAME_SCOPE_TABLE 0L -#define SQL_SS_NAME_SCOPE_TABLE_TYPE 1L -#define SQL_SS_NAME_SCOPE_EXTENDED 2L -#define SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET 3L -#define SQL_SS_NAME_SCOPE_DEFAULT SQL_SS_NAME_SCOPE_TABLE -//SQL_COPT_SS_ENCRYPT -#define SQL_EN_OFF 0L -#define SQL_EN_ON 1L -//SQL_COPT_SS_TRUST_SERVER_CERTIFICATE -#define SQL_TRUST_SERVER_CERTIFICATE_NO 0L -#define SQL_TRUST_SERVER_CERTIFICATE_YES 1L -//SQL_COPT_SS_BROWSE_CONNECT -#define SQL_MORE_INFO_NO 0L -#define SQL_MORE_INFO_YES 1L -//SQL_COPT_SS_BROWSE_CACHE_DATA -#define SQL_CACHE_DATA_NO 0L -#define SQL_CACHE_DATA_YES 1L -//SQL_COPT_SS_RESET_CONNECTION -#define SQL_RESET_YES 1L -//SQL_COPT_SS_WARN_ON_CP_ERROR -#define SQL_WARN_NO 0L -#define SQL_WARN_YES 1L -//SQL_COPT_SS_MARS_ENABLED -#define SQL_MARS_ENABLED_NO 0L -#define SQL_MARS_ENABLED_YES 1L -/* SQL_TXN_ISOLATION_OPTION bitmasks */ -#define SQL_TXN_SS_SNAPSHOT 0x00000020L - -// The following are defines for SQL_CA_SS_COLUMN_SORT_ORDER -#define SQL_SS_ORDER_UNSPECIFIED 0L -#define SQL_SS_DESCENDING_ORDER 1L -#define SQL_SS_ASCENDING_ORDER 2L -#define SQL_SS_ORDER_DEFAULT SQL_SS_ORDER_UNSPECIFIED - -// Driver specific SQL data type defines. -// Microsoft has -150 thru -199 reserved for Microsoft SQL Server Native Client driver usage. -#define SQL_SS_VARIANT (-150) -#define SQL_SS_UDT (-151) -#define SQL_SS_XML (-152) -#define SQL_SS_TABLE (-153) -#define SQL_SS_TIME2 (-154) -#define SQL_SS_TIMESTAMPOFFSET (-155) - -// Local types to be used with SQL_CA_SS_SERVER_TYPE -#define SQL_SS_TYPE_DEFAULT 0L -#define SQL_SS_TYPE_SMALLDATETIME 1L -#define SQL_SS_TYPE_DATETIME 2L - -#ifndef SQLNCLI_NO_BCP -// Define the symbol SQLNCLI_NO_BCP if you are not using BCP in your application -// and you want to exclude the BCP-related definitions in this header file. - -// SQL Server Data Type defines. -// New types for SQL 6.0 and later servers -#define SQLTEXT 0x23 -#define SQLVARBINARY 0x25 -#define SQLINTN 0x26 -#define SQLVARCHAR 0x27 -#define SQLBINARY 0x2d -#define SQLIMAGE 0x22 -#define SQLCHARACTER 0x2f -#define SQLINT1 0x30 -#define SQLBIT 0x32 -#define SQLINT2 0x34 -#define SQLINT4 0x38 -#define SQLMONEY 0x3c -#define SQLDATETIME 0x3d -#define SQLFLT8 0x3e -#define SQLFLTN 0x6d -#define SQLMONEYN 0x6e -#define SQLDATETIMN 0x6f -#define SQLFLT4 0x3b -#define SQLMONEY4 0x7a -#define SQLDATETIM4 0x3a -// New types for SQL 6.0 and later servers -#define SQLDECIMAL 0x6a -#define SQLNUMERIC 0x6c -// New types for SQL 7.0 and later servers -#define SQLUNIQUEID 0x24 -#define SQLBIGCHAR 0xaf -#define SQLBIGVARCHAR 0xa7 -#define SQLBIGBINARY 0xad -#define SQLBIGVARBINARY 0xa5 -#define SQLBITN 0x68 -#define SQLNCHAR 0xef -#define SQLNVARCHAR 0xe7 -#define SQLNTEXT 0x63 -// New types for SQL 2000 and later servers -#define SQLINT8 0x7f -#define SQLVARIANT 0x62 -// New types for SQL 2005 and later servers -#define SQLUDT 0xf0 -#define SQLXML 0xf1 -// New types for SQL 2008 and later servers -#define SQLTABLE 0xf3 -#define SQLDATEN 0x28 -#define SQLTIMEN 0x29 -#define SQLDATETIME2N 0x2a -#define SQLDATETIMEOFFSETN 0x2b -// Define old names -#define SQLDECIMALN 0x6a -#define SQLNUMERICN 0x6c -#endif // SQLNCLI_NO_BCP - -// SQL_SS_LENGTH_UNLIMITED is used to describe the max length of -// VARCHAR(max), VARBINARY(max), NVARCHAR(max), and XML columns -#define SQL_SS_LENGTH_UNLIMITED 0 - -// User Data Type definitions. -// Returned by SQLColAttributes/SQL_CA_SS_COLUMN_UTYPE. -#define SQLudtBINARY 3 -#define SQLudtBIT 16 -#define SQLudtBITN 0 -#define SQLudtCHAR 1 -#define SQLudtDATETIM4 22 -#define SQLudtDATETIME 12 -#define SQLudtDATETIMN 15 -#define SQLudtDECML 24 -#define SQLudtDECMLN 26 -#define SQLudtFLT4 23 -#define SQLudtFLT8 8 -#define SQLudtFLTN 14 -#define SQLudtIMAGE 20 -#define SQLudtINT1 5 -#define SQLudtINT2 6 -#define SQLudtINT4 7 -#define SQLudtINTN 13 -#define SQLudtMONEY 11 -#define SQLudtMONEY4 21 -#define SQLudtMONEYN 17 -#define SQLudtNUM 10 -#define SQLudtNUMN 25 -#define SQLudtSYSNAME 18 -#define SQLudtTEXT 19 -#define SQLudtTIMESTAMP 80 -#define SQLudtUNIQUEIDENTIFIER 0 -#define SQLudtVARBINARY 4 -#define SQLudtVARCHAR 2 -#define MIN_USER_DATATYPE 256 -// Aggregate operator types. -// Returned by SQLColAttributes/SQL_CA_SS_COLUMN_OP. -#define SQLAOPSTDEV 0x30 // Standard deviation -#define SQLAOPSTDEVP 0x31 // Standard deviation population -#define SQLAOPVAR 0x32 // Variance -#define SQLAOPVARP 0x33 // Variance population -#define SQLAOPCNT 0x4b // Count -#define SQLAOPSUM 0x4d // Sum -#define SQLAOPAVG 0x4f // Average -#define SQLAOPMIN 0x51 // Min -#define SQLAOPMAX 0x52 // Max -#define SQLAOPANY 0x53 // Any -#define SQLAOPNOOP 0x56 // None -// SQLGetInfo driver specific defines. -// Microsoft has 1151 thru 1200 reserved for Microsoft SQL Server Native Client driver usage. -#define SQL_INFO_SS_FIRST 1199 -#define SQL_INFO_SS_NETLIB_NAMEW (SQL_INFO_SS_FIRST+0) // dbprocinfo -#define SQL_INFO_SS_NETLIB_NAMEA (SQL_INFO_SS_FIRST+1) // dbprocinfo -#define SQL_INFO_SS_MAX_USED SQL_INFO_SS_NETLIB_NAMEA -#ifdef UNICODE -#define SQL_INFO_SS_NETLIB_NAME SQL_INFO_SS_NETLIB_NAMEW -#else -#define SQL_INFO_SS_NETLIB_NAME SQL_INFO_SS_NETLIB_NAMEA -#endif -// SQLGetDiagField driver specific defines. -// Microsoft has -1150 thru -1199 reserved for Microsoft SQL Server Native Client driver usage. -#define SQL_DIAG_SS_BASE (-1150) -#define SQL_DIAG_SS_MSGSTATE (SQL_DIAG_SS_BASE) -#define SQL_DIAG_SS_SEVERITY (SQL_DIAG_SS_BASE-1) -#define SQL_DIAG_SS_SRVNAME (SQL_DIAG_SS_BASE-2) -#define SQL_DIAG_SS_PROCNAME (SQL_DIAG_SS_BASE-3) -#define SQL_DIAG_SS_LINE (SQL_DIAG_SS_BASE-4) -// SQLGetDiagField/SQL_DIAG_DYNAMIC_FUNCTION_CODE driver specific defines. -// Microsoft has -200 thru -299 reserved for Microsoft SQL Server Native Client driver usage. -#define SQL_DIAG_DFC_SS_BASE (-200) -#define SQL_DIAG_DFC_SS_ALTER_DATABASE (SQL_DIAG_DFC_SS_BASE-0) -#define SQL_DIAG_DFC_SS_CHECKPOINT (SQL_DIAG_DFC_SS_BASE-1) -#define SQL_DIAG_DFC_SS_CONDITION (SQL_DIAG_DFC_SS_BASE-2) -#define SQL_DIAG_DFC_SS_CREATE_DATABASE (SQL_DIAG_DFC_SS_BASE-3) -#define SQL_DIAG_DFC_SS_CREATE_DEFAULT (SQL_DIAG_DFC_SS_BASE-4) -#define SQL_DIAG_DFC_SS_CREATE_PROCEDURE (SQL_DIAG_DFC_SS_BASE-5) -#define SQL_DIAG_DFC_SS_CREATE_RULE (SQL_DIAG_DFC_SS_BASE-6) -#define SQL_DIAG_DFC_SS_CREATE_TRIGGER (SQL_DIAG_DFC_SS_BASE-7) -#define SQL_DIAG_DFC_SS_CURSOR_DECLARE (SQL_DIAG_DFC_SS_BASE-8) -#define SQL_DIAG_DFC_SS_CURSOR_OPEN (SQL_DIAG_DFC_SS_BASE-9) -#define SQL_DIAG_DFC_SS_CURSOR_FETCH (SQL_DIAG_DFC_SS_BASE-10) -#define SQL_DIAG_DFC_SS_CURSOR_CLOSE (SQL_DIAG_DFC_SS_BASE-11) -#define SQL_DIAG_DFC_SS_DEALLOCATE_CURSOR (SQL_DIAG_DFC_SS_BASE-12) -#define SQL_DIAG_DFC_SS_DBCC (SQL_DIAG_DFC_SS_BASE-13) -#define SQL_DIAG_DFC_SS_DISK (SQL_DIAG_DFC_SS_BASE-14) -#define SQL_DIAG_DFC_SS_DROP_DATABASE (SQL_DIAG_DFC_SS_BASE-15) -#define SQL_DIAG_DFC_SS_DROP_DEFAULT (SQL_DIAG_DFC_SS_BASE-16) -#define SQL_DIAG_DFC_SS_DROP_PROCEDURE (SQL_DIAG_DFC_SS_BASE-17) -#define SQL_DIAG_DFC_SS_DROP_RULE (SQL_DIAG_DFC_SS_BASE-18) -#define SQL_DIAG_DFC_SS_DROP_TRIGGER (SQL_DIAG_DFC_SS_BASE-19) -#define SQL_DIAG_DFC_SS_DUMP_DATABASE (SQL_DIAG_DFC_SS_BASE-20) -#define SQL_DIAG_DFC_SS_BACKUP_DATABASE (SQL_DIAG_DFC_SS_BASE-20) -#define SQL_DIAG_DFC_SS_DUMP_TABLE (SQL_DIAG_DFC_SS_BASE-21) -#define SQL_DIAG_DFC_SS_DUMP_TRANSACTION (SQL_DIAG_DFC_SS_BASE-22) -#define SQL_DIAG_DFC_SS_BACKUP_TRANSACTION (SQL_DIAG_DFC_SS_BASE-22) -#define SQL_DIAG_DFC_SS_GOTO (SQL_DIAG_DFC_SS_BASE-23) -#define SQL_DIAG_DFC_SS_INSERT_BULK (SQL_DIAG_DFC_SS_BASE-24) -#define SQL_DIAG_DFC_SS_KILL (SQL_DIAG_DFC_SS_BASE-25) -#define SQL_DIAG_DFC_SS_LOAD_DATABASE (SQL_DIAG_DFC_SS_BASE-26) -#define SQL_DIAG_DFC_SS_RESTORE_DATABASE (SQL_DIAG_DFC_SS_BASE-26) -#define SQL_DIAG_DFC_SS_LOAD_HEADERONLY (SQL_DIAG_DFC_SS_BASE-27) -#define SQL_DIAG_DFC_SS_RESTORE_HEADERONLY (SQL_DIAG_DFC_SS_BASE-27) -#define SQL_DIAG_DFC_SS_LOAD_TABLE (SQL_DIAG_DFC_SS_BASE-28) -#define SQL_DIAG_DFC_SS_LOAD_TRANSACTION (SQL_DIAG_DFC_SS_BASE-29) -#define SQL_DIAG_DFC_SS_RESTORE_TRANSACTION (SQL_DIAG_DFC_SS_BASE-29) -#define SQL_DIAG_DFC_SS_PRINT (SQL_DIAG_DFC_SS_BASE-30) -#define SQL_DIAG_DFC_SS_RAISERROR (SQL_DIAG_DFC_SS_BASE-31) -#define SQL_DIAG_DFC_SS_READTEXT (SQL_DIAG_DFC_SS_BASE-32) -#define SQL_DIAG_DFC_SS_RECONFIGURE (SQL_DIAG_DFC_SS_BASE-33) -#define SQL_DIAG_DFC_SS_RETURN (SQL_DIAG_DFC_SS_BASE-34) -#define SQL_DIAG_DFC_SS_SELECT_INTO (SQL_DIAG_DFC_SS_BASE-35) -#define SQL_DIAG_DFC_SS_SET (SQL_DIAG_DFC_SS_BASE-36) -#define SQL_DIAG_DFC_SS_SET_IDENTITY_INSERT (SQL_DIAG_DFC_SS_BASE-37) -#define SQL_DIAG_DFC_SS_SET_ROW_COUNT (SQL_DIAG_DFC_SS_BASE-38) -#define SQL_DIAG_DFC_SS_SET_STATISTICS (SQL_DIAG_DFC_SS_BASE-39) -#define SQL_DIAG_DFC_SS_SET_TEXTSIZE (SQL_DIAG_DFC_SS_BASE-40) -#define SQL_DIAG_DFC_SS_SETUSER (SQL_DIAG_DFC_SS_BASE-41) -#define SQL_DIAG_DFC_SS_SHUTDOWN (SQL_DIAG_DFC_SS_BASE-42) -#define SQL_DIAG_DFC_SS_TRANS_BEGIN (SQL_DIAG_DFC_SS_BASE-43) -#define SQL_DIAG_DFC_SS_TRANS_COMMIT (SQL_DIAG_DFC_SS_BASE-44) -#define SQL_DIAG_DFC_SS_TRANS_PREPARE (SQL_DIAG_DFC_SS_BASE-45) -#define SQL_DIAG_DFC_SS_TRANS_ROLLBACK (SQL_DIAG_DFC_SS_BASE-46) -#define SQL_DIAG_DFC_SS_TRANS_SAVE (SQL_DIAG_DFC_SS_BASE-47) -#define SQL_DIAG_DFC_SS_TRUNCATE_TABLE (SQL_DIAG_DFC_SS_BASE-48) -#define SQL_DIAG_DFC_SS_UPDATE_STATISTICS (SQL_DIAG_DFC_SS_BASE-49) -#define SQL_DIAG_DFC_SS_UPDATETEXT (SQL_DIAG_DFC_SS_BASE-50) -#define SQL_DIAG_DFC_SS_USE (SQL_DIAG_DFC_SS_BASE-51) -#define SQL_DIAG_DFC_SS_WAITFOR (SQL_DIAG_DFC_SS_BASE-52) -#define SQL_DIAG_DFC_SS_WRITETEXT (SQL_DIAG_DFC_SS_BASE-53) -#define SQL_DIAG_DFC_SS_DENY (SQL_DIAG_DFC_SS_BASE-54) -#define SQL_DIAG_DFC_SS_SET_XCTLVL (SQL_DIAG_DFC_SS_BASE-55) -#define SQL_DIAG_DFC_SS_MERGE (SQL_DIAG_DFC_SS_BASE-56) - -// Severity codes for SQL_DIAG_SS_SEVERITY -#define EX_ANY 0 -#define EX_INFO 10 -#define EX_MAXISEVERITY EX_INFO -#define EX_MISSING 11 -#define EX_TYPE 12 -#define EX_DEADLOCK 13 -#define EX_PERMIT 14 -#define EX_SYNTAX 15 -#define EX_USER 16 -#define EX_RESOURCE 17 -#define EX_INTOK 18 -#define MAXUSEVERITY EX_INTOK -#define EX_LIMIT 19 -#define EX_CMDFATAL 20 -#define MINFATALERR EX_CMDFATAL -#define EX_DBFATAL 21 -#define EX_TABCORRUPT 22 -#define EX_DBCORRUPT 23 -#define EX_HARDWARE 24 -#define EX_CONTROL 25 -// Internal server datatypes - used when binding to SQL_C_BINARY -#ifndef MAXNUMERICLEN // Resolve ODS/DBLib conflicts -// DB-Library datatypes -#define DBMAXCHAR (8000+1) // Max length of DBVARBINARY and DBVARCHAR, etc. +1 for zero byte -#define MAXNAME (SQL_MAX_SQLSERVERNAME+1) // Max server identifier length including zero byte -#ifdef UNICODE -typedef wchar_t DBCHAR; -#else -typedef char DBCHAR; - -#endif -typedef short SQLSMALLINT; - -typedef unsigned short SQLUSMALLINT; - -typedef long SQLINTEGER; - -typedef unsigned long SQLUINTEGER; - -typedef unsigned char DBBINARY; - -typedef unsigned char DBTINYINT; - -typedef short DBSMALLINT; - -typedef unsigned short DBUSMALLINT; - -typedef double DBFLT8; - -typedef unsigned char DBBIT; - -typedef unsigned char DBBOOL; - -typedef float DBFLT4; - -typedef DBFLT4 DBREAL; - -typedef UINT DBUBOOL; - -typedef struct dbmoney - { - LONG mnyhigh; - ULONG mnylow; - } DBMONEY; - -typedef struct dbdatetime - { - LONG dtdays; - ULONG dttime; - } DBDATETIME; - -typedef struct dbdatetime4 - { - USHORT numdays; - USHORT nummins; - } DBDATETIM4; - -typedef LONG DBMONEY4; - -#include // 8-byte structure packing - -// New Date Time Structures -// New Structure for TIME2 -typedef struct tagSS_TIME2_STRUCT - { - SQLUSMALLINT hour; - SQLUSMALLINT minute; - SQLUSMALLINT second; - SQLUINTEGER fraction; - } SQL_SS_TIME2_STRUCT; - -// New Structure for TIMESTAMPOFFSET -typedef struct tagSS_TIMESTAMPOFFSET_STRUCT - { - SQLSMALLINT year; - SQLUSMALLINT month; - SQLUSMALLINT day; - SQLUSMALLINT hour; - SQLUSMALLINT minute; - SQLUSMALLINT second; - SQLUINTEGER fraction; - SQLSMALLINT timezone_hour; - SQLSMALLINT timezone_minute; - } SQL_SS_TIMESTAMPOFFSET_STRUCT; - -#include // restore original structure packing - -// Money value *10,000 -#define DBNUM_PREC_TYPE BYTE -#define DBNUM_SCALE_TYPE BYTE -#define DBNUM_VAL_TYPE BYTE - -#if (ODBCVER < 0x0300) -#define MAXNUMERICLEN 16 -typedef struct dbnumeric // Internal representation of NUMERIC data type -{ - DBNUM_PREC_TYPE precision; // Precision - DBNUM_SCALE_TYPE scale; // Scale - BYTE sign; // Sign (1 if positive, 0 if negative) - DBNUM_VAL_TYPE val[MAXNUMERICLEN];// Value -} DBNUMERIC; -typedef DBNUMERIC DBDECIMAL;// Internal representation of DECIMAL data type -#else // Use ODBC 3.0 definitions since same as DBLib -#define MAXNUMERICLEN SQL_MAX_NUMERIC_LEN -typedef SQL_NUMERIC_STRUCT DBNUMERIC; -typedef SQL_NUMERIC_STRUCT DBDECIMAL; -#endif // ODCBVER -#endif // MAXNUMERICLEN - -#ifndef INT -typedef int INT; -typedef long DBINT; -typedef DBINT * LPDBINT; -#ifndef _LPCBYTE_DEFINED -#define _LPCBYTE_DEFINED -typedef BYTE const* LPCBYTE; -#endif //_LPCBYTE_DEFINED -#endif // INT -/************************************************************************** -This struct is a global used for gathering statistical data on the driver. -Access to this structure is controlled via the pStatCrit; -***************************************************************************/ -typedef struct sqlperf -{ - // Application Profile Statistics - DWORD TimerResolution; - DWORD SQLidu; - DWORD SQLiduRows; - DWORD SQLSelects; - DWORD SQLSelectRows; - DWORD Transactions; - DWORD SQLPrepares; - DWORD ExecDirects; - DWORD SQLExecutes; - DWORD CursorOpens; - DWORD CursorSize; - DWORD CursorUsed; - LDOUBLE PercentCursorUsed; - LDOUBLE AvgFetchTime; - LDOUBLE AvgCursorSize; - LDOUBLE AvgCursorUsed; - DWORD SQLFetchTime; - DWORD SQLFetchCount; - DWORD CurrentStmtCount; - DWORD MaxOpenStmt; - DWORD SumOpenStmt; - // Connection Statistics - DWORD CurrentConnectionCount; - DWORD MaxConnectionsOpened; - DWORD SumConnectionsOpened; - DWORD SumConnectiontime; - LDOUBLE AvgTimeOpened; - // Network Statistics - DWORD ServerRndTrips; - DWORD BuffersSent; - DWORD BuffersRec; - DWORD BytesSent; - DWORD BytesRec; - // Time Statistics; - DWORD msExecutionTime; - DWORD msNetWorkServerTime; -} SQLPERF; -// The following are options for SQL_COPT_SS_PERF_DATA and SQL_COPT_SS_PERF_QUERY -#define SQL_PERF_START 1 // Starts the driver sampling performance data. -#define SQL_PERF_STOP 2 // Stops the counters from sampling performance data. -// The following are defines for SQL_COPT_SS_PERF_DATA_LOG -#define SQL_SS_DL_DEFAULT TEXT("STATS.LOG") -// The following are defines for SQL_COPT_SS_PERF_QUERY_LOG -#define SQL_SS_QL_DEFAULT TEXT("QUERY.LOG") -// The following are defines for SQL_COPT_SS_PERF_QUERY_INTERVAL -#define SQL_SS_QI_DEFAULT 30000 // 30,000 milliseconds - -#ifndef SQLNCLI_NO_BCP -// Define the symbol SQLNCLI_NO_BCP if you are not using BCP in your application -// and you want to exclude the BCP-related definitions in this header file. - -// ODBC BCP prototypes and defines -// Return codes -#define SUCCEED 1 -#define FAIL 0 -#define SUCCEED_ABORT 2 -#define SUCCEED_ASYNC 3 -// Transfer directions -#define DB_IN 1 // Transfer from client to server -#define DB_OUT 2 // Transfer from server to client -// bcp_control option -#define BCPMAXERRS 1 // Sets max errors allowed -#define BCPFIRST 2 // Sets first row to be copied out -#define BCPLAST 3 // Sets number of rows to be copied out -#define BCPBATCH 4 // Sets input batch size -#define BCPKEEPNULLS 5 // Sets to insert NULLs for empty input values -#define BCPABORT 6 // Sets to have bcpexec return SUCCEED_ABORT -#define BCPODBC 7 // Sets ODBC canonical character output -#define BCPKEEPIDENTITY 8 // Sets IDENTITY_INSERT on -#if SQLNCLI_VER < 1000 -#define BCP6xFILEFMT 9 // DEPRECATED: Sets 6x file format on -#endif -#define BCPHINTSA 10 // Sets server BCP hints (ANSI string) -#define BCPHINTSW 11 // Sets server BCP hints (UNICODE string) -#define BCPFILECP 12 // Sets clients code page for the file -#define BCPUNICODEFILE 13 // Sets that the file contains unicode header -#define BCPTEXTFILE 14 // Sets BCP mode to expect a text file and to detect Unicode or ANSI automatically -#define BCPFILEFMT 15 // Sets file format version -#define BCPFMTXML 16 // Sets the format file type to xml -#define BCPFIRSTEX 17 // Starting Row for BCP operation (64 bit) -#define BCPLASTEX 18 // Ending Row for BCP operation (64 bit) -#define BCPROWCOUNT 19 // Total Number of Rows Copied (64 bit) -// BCPFILECP values -// Any valid code page that is installed on the client can be passed plus: -#define BCPFILECP_ACP 0 // Data in file is in Windows code page -#define BCPFILECP_OEMCP 1 // Data in file is in OEM code page (default) -#define BCPFILECP_RAW (-1)// Data in file is in Server code page (no conversion) -// bcp_collen definition -#define SQL_VARLEN_DATA (-10) // Use default length for column -// BCP column format properties -#define BCP_FMT_TYPE 0x01 -#define BCP_FMT_INDICATOR_LEN 0x02 -#define BCP_FMT_DATA_LEN 0x03 -#define BCP_FMT_TERMINATOR 0x04 -#define BCP_FMT_SERVER_COL 0x05 -#define BCP_FMT_COLLATION 0x06 -#define BCP_FMT_COLLATION_ID 0x07 -// BCP functions -DBINT SQL_API bcp_batch (HDBC); -RETCODE SQL_API bcp_bind (HDBC, LPCBYTE, INT, DBINT, LPCBYTE, INT, INT, INT); -RETCODE SQL_API bcp_colfmt (HDBC, INT, BYTE, INT, DBINT, LPCBYTE, INT, INT); -RETCODE SQL_API bcp_collen (HDBC, DBINT, INT); -RETCODE SQL_API bcp_colptr (HDBC, LPCBYTE, INT); -RETCODE SQL_API bcp_columns (HDBC, INT); -RETCODE SQL_API bcp_control (HDBC, INT, void *); -DBINT SQL_API bcp_done (HDBC); -RETCODE SQL_API bcp_exec (HDBC, LPDBINT); -RETCODE SQL_API bcp_getcolfmt (HDBC, INT, INT, void *, INT, INT *); -RETCODE SQL_API bcp_initA (HDBC, LPCSTR, LPCSTR, LPCSTR, INT); -RETCODE SQL_API bcp_initW (HDBC, LPCWSTR, LPCWSTR, LPCWSTR, INT); -RETCODE SQL_API bcp_moretext (HDBC, DBINT, LPCBYTE); -RETCODE SQL_API bcp_readfmtA (HDBC, LPCSTR); -RETCODE SQL_API bcp_readfmtW (HDBC, LPCWSTR); -RETCODE SQL_API bcp_sendrow (HDBC); -RETCODE SQL_API bcp_setcolfmt (HDBC, INT, INT, void *, INT); -RETCODE SQL_API bcp_writefmtA (HDBC, LPCSTR); -RETCODE SQL_API bcp_writefmtW (HDBC, LPCWSTR); -CHAR* SQL_API dbprtypeA (INT); -WCHAR* SQL_API dbprtypeW (INT); -CHAR* SQL_API bcp_gettypenameA (INT, DBBOOL); -WCHAR* SQL_API bcp_gettypenameW (INT, DBBOOL); -#ifdef UNICODE -#define bcp_init bcp_initW -#define bcp_readfmt bcp_readfmtW -#define bcp_writefmt bcp_writefmtW -#define dbprtype dbprtypeW -#define bcp_gettypename bcp_gettypenameW -#define BCPHINTS BCPHINTSW -#else -#define bcp_init bcp_initA -#define bcp_readfmt bcp_readfmtA -#define bcp_writefmt bcp_writefmtA -#define dbprtype dbprtypeA -#define bcp_gettypename bcp_gettypenameA -#define BCPHINTS BCPHINTSA -#endif // UNICODE - -#endif // SQLNCLI_NO_BCP - -// The following options have been deprecated -#define SQL_FAST_CONNECT (SQL_COPT_SS_BASE+0) -// Defines for use with SQL_FAST_CONNECT - only useable before connecting -#define SQL_FC_OFF 0L // Fast connect is off -#define SQL_FC_ON 1L // Fast connect is on -#define SQL_FC_DEFAULT SQL_FC_OFF -#define SQL_COPT_SS_ANSI_OEM (SQL_COPT_SS_BASE+6) -#define SQL_AO_OFF 0L -#define SQL_AO_ON 1L -#define SQL_AO_DEFAULT SQL_AO_OFF -#define SQL_CA_SS_BASE_COLUMN_NAME SQL_DESC_BASE_COLUMN_NAME - -#endif // ODBCVER -#endif // defined(_SQLNCLI_ODBC_) || !defined(_SQLNCLI_OLEDB_) -// ODBC part of SQL Server Native Client header - end here! - -//The following facilitates opening a handle to a SQL filestream -typedef enum _SQL_FILESTREAM_DESIRED_ACCESS { - SQL_FILESTREAM_READ = 0, - SQL_FILESTREAM_WRITE = 1, - SQL_FILESTREAM_READWRITE = 2 -} SQL_FILESTREAM_DESIRED_ACCESS; -#define SQL_FILESTREAM_OPEN_FLAG_ASYNC 0x00000001L -#define SQL_FILESTREAM_OPEN_FLAG_NO_BUFFERING 0x00000002L -#define SQL_FILESTREAM_OPEN_FLAG_NO_WRITE_THROUGH 0x00000004L -#define SQL_FILESTREAM_OPEN_FLAG_SEQUENTIAL_SCAN 0x00000008L -#define SQL_FILESTREAM_OPEN_FLAG_RANDOM_ACCESS 0x00000010L -HANDLE __stdcall OpenSqlFilestream ( - LPCWSTR FilestreamPath, - SQL_FILESTREAM_DESIRED_ACCESS DesiredAccess, - ULONG OpenOptions, - LPBYTE FilestreamTransactionContext, - SSIZE_T FilestreamTransactionContextLength, - PLARGE_INTEGER AllocationSize); -#define FSCTL_SQL_FILESTREAM_FETCH_OLD_CONTENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2392, METHOD_BUFFERED, FILE_ANY_ACCESS) - - - -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0010_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0010_v0_0_s_ifspec; - -/* Additional Prototypes for ALL interfaces */ - -/* end of Additional Prototypes */ - -#ifdef __cplusplus -} -#endif - -#endif - - diff --git a/pdo_sqlsrv/version.h b/pdo_sqlsrv/version.h index d3d17fd1..3170477e 100644 --- a/pdo_sqlsrv/version.h +++ b/pdo_sqlsrv/version.h @@ -3,24 +3,28 @@ // // Contents: Version number constants // -// Copyright Microsoft Corporation -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// -// You may obtain a copy of the License at: -// http://www.apache.org/licenses/LICENSE-2.0 +// Microsoft Drivers for PHP for SQL Server +// Copyright (c) Microsoft Corporation. All rights reserved. // +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use these files except in compliance with the License. + +// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. +// //---------------------------------------------------------------------------------------------------------------------------------- -#define VER_FILEVERSION_STR "3.0.1.0" -#define _FILEVERSION 3,0,0,0 +#define VER_FILEVERSION_STR "3.1.0.0" +#define _FILEVERSION 3,1,0,0 #define SQLVERSION_MAJOR 3 -#define SQLVERSION_MINOR 0 -#define SQLVERSION_MMDD 1 +#define SQLVERSION_MINOR 1 +#define SQLVERSION_MMDD 0 #define SQLVERSION_REVISION 0 + + + diff --git a/sqlsrv/CREDITS b/sqlsrv/CREDITS index f18c4b84..fe91123d 100644 --- a/sqlsrv/CREDITS +++ b/sqlsrv/CREDITS @@ -1 +1 @@ -Microsoft Drivers 3.0.1 for PHP for SQL Server (SQLSRV driver) +Microsoft Drivers 3.1.0 for PHP for SQL Server (SQLSRV driver) diff --git a/sqlsrv/README.TXT b/sqlsrv/README.TXT index c68afa5f..d1921c7f 100644 --- a/sqlsrv/README.TXT +++ b/sqlsrv/README.TXT @@ -14,13 +14,13 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -* Notes about changes to the Microsoft Drivers 3.0 for PHP for SQL Server * +* Notes about changes to the Microsoft Drivers 3.1 for PHP for SQL Server * For details about the changes included in this release, please see our blog at http://blogs.msdn.com/sqlphp or see the SQLSRV_Readme.htm file that is part of the download package. -* Notes about compiling the Microsoft Drivers 3.0 for PHP for SQL Server * +* Notes about compiling the Microsoft Drivers 3.1 for PHP for SQL Server * Prerequisites: @@ -28,7 +28,7 @@ Prerequisites: extensions. For help with doing this, see the official PHP website, http://php.net. -To compile the SQLSRV301 and PDO_SQLSRV301: +To compile the SQLSRV310 and PDO_SQLSRV310: 1) Copy the source code directories from this repository into the ext subdirectory. @@ -53,7 +53,7 @@ wish to do so, run "nmake clean" first. php_sqlsrv.dll and php_pdo_sqlsrv.dll to your PHP extension directory. Also enable them within your PHP installation's php.ini file. -This software has been compiled and tested under PHP 5.3.6 and later +This software has been compiled and tested under PHP 5.4.32 and later using the Visual C++ 2008 and 2010, Express and Standard compilers. * Note about version.h * diff --git a/sqlsrv/conn.cpp b/sqlsrv/conn.cpp index e2beb029..3d20166b 100644 --- a/sqlsrv/conn.cpp +++ b/sqlsrv/conn.cpp @@ -405,7 +405,7 @@ const connection_option SS_CONN_OPTS[] = { // or port number (for example, "myServer, 1521") can be included as part of // this string. For a complete description of the options available for this // parameter, see the Server keyword in the ODBC Driver Connection String -// Keywords section of Using Connection String Keywords with SQL Native Client. +// Keywords section of Using Connection String Keywords with ODBC Driver 11 for SQL Server. // // $connectionInfo [OPTIONAL]: An associative array that contains connection // attributes (for example, array("Database" => "AdventureWorks")). diff --git a/sqlsrv/core_conn.cpp b/sqlsrv/core_conn.cpp index 4dcc4f8f..1596d24c 100644 --- a/sqlsrv/core_conn.cpp +++ b/sqlsrv/core_conn.cpp @@ -43,7 +43,7 @@ const int INFO_BUFFER_LEN = 256; const char* PROCESSOR_ARCH[] = { "x86", "x64", "ia64" }; // ODBC driver name. -const char CONNECTION_STRING_DRIVER_NAME[] = "Driver={SQL Server Native Client 11.0};"; +const char CONNECTION_STRING_DRIVER_NAME[] = "Driver={ODBC Driver 11 for SQL Server};"; // default options if only the server is specified const char CONNECTION_STRING_DEFAULT_OPTIONS[] = "Mars_Connection={Yes}"; diff --git a/sqlsrv/core_results.cpp b/sqlsrv/core_results.cpp index bce8061f..0a4e5738 100644 --- a/sqlsrv/core_results.cpp +++ b/sqlsrv/core_results.cpp @@ -153,14 +153,12 @@ struct row_dtor_closure { sqlsrv_error* odbc_get_diag_rec( sqlsrv_stmt* odbc, SQLSMALLINT record_number ) { SQLWCHAR wsql_state[ SQL_SQLSTATE_BUFSIZE ]; - SQLCHAR* sql_state = reinterpret_cast( wsql_state ); SQLWCHAR wnative_message[ SQL_MAX_MESSAGE_LENGTH + 1 ]; - sqlsrv_malloc_auto_ptr native_message; SQLINTEGER native_code; - SQLINTEGER message_len; + SQLSMALLINT wnative_message_len = 0; SQLRETURN r = SQLGetDiagRecW( SQL_HANDLE_STMT, odbc->handle(), record_number, wsql_state, &native_code, wnative_message, - SQL_MAX_MESSAGE_LENGTH + 1, NULL ); + SQL_MAX_MESSAGE_LENGTH + 1, &wnative_message_len ); if( !SQL_SUCCEEDED( r ) || r == SQL_NO_DATA ) { return NULL; } @@ -172,13 +170,17 @@ sqlsrv_error* odbc_get_diag_rec( sqlsrv_stmt* odbc, SQLSMALLINT record_number ) } // convert the error into the encoding of the context - message_len = SQL_SQLSTATE_BUFSIZE * sizeof(WCHAR); - convert_string_from_utf16( enc, reinterpret_cast( &sql_state ), message_len, - false /*no free*/ ); - message_len = (SQL_MAX_MESSAGE_LENGTH + 1) * sizeof( WCHAR ); - native_message = reinterpret_cast( wnative_message ); - convert_string_from_utf16( enc, reinterpret_cast( &native_message ), message_len, - false /*no free*/ ); + sqlsrv_malloc_auto_ptr sql_state; + SQLINTEGER sql_state_len = 0; + if (!convert_string_from_utf16( enc, wsql_state, sizeof(wsql_state), (char**)&sql_state, sql_state_len )) { + return NULL; + } + + sqlsrv_malloc_auto_ptr native_message; + SQLINTEGER native_message_len = 0; + if (!convert_string_from_utf16( enc, wnative_message, wnative_message_len, (char**)&native_message, native_message_len )) { + return NULL; + } return new (sqlsrv_malloc( sizeof( sqlsrv_error ))) sqlsrv_error( (SQLCHAR*) sql_state, (SQLCHAR*) native_message, native_code ); diff --git a/sqlsrv/core_sqlsrv.h b/sqlsrv/core_sqlsrv.h index 2fa940b4..be823403 100644 --- a/sqlsrv/core_sqlsrv.h +++ b/sqlsrv/core_sqlsrv.h @@ -6,21 +6,21 @@ // // Contents: Core routines and constants shared by the Microsoft Drivers for PHP for SQL Server // -// Copyright Microsoft Corporation -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// -// You may obtain a copy of the License at: -// http://www.apache.org/licenses/LICENSE-2.0 +// Microsoft Drivers for PHP for SQL Server +// Copyright (c) Microsoft Corporation. All rights reserved. // +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use these files except in compliance with the License. + +// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -//--------------------------------------------------------------------------------------------------------------------------------- - +// +//---------------------------------------------------------------------------------------------------------------------------------- //********************************************************************************************************************************* // Includes @@ -111,7 +111,7 @@ OACR_WARNING_POP #include // included for SQL Server specific constants -#include "sqlncli.h" +#include "msodbcsql.h" //********************************************************************************************************************************* // Constants and Types @@ -1502,7 +1502,8 @@ struct sqlsrv_buffered_result_set : public sqlsrv_result_set { #define MEMCHECK_SILENT 1 // utility functions shared by multiple callers across files -bool convert_string_from_utf16( SQLSRV_ENCODING encoding, char** string, SQLINTEGER& len, bool free_utf16 = true ); +bool convert_string_from_utf16_inplace( SQLSRV_ENCODING encoding, char** string, SQLINTEGER& len); +bool convert_string_from_utf16( SQLSRV_ENCODING encoding, const wchar_t* inString, SQLINTEGER cchInLen, char** outString, SQLINTEGER& cchOutLen ); wchar_t* utf16_string_from_mbcs_string( SQLSRV_ENCODING php_encoding, const char* mbcs_string, unsigned int mbcs_len, __out unsigned int* utf16_len ); @@ -1559,8 +1560,8 @@ enum SQLSRV_ERROR_CODES { }; -// the message returned by SQL Native Client -const char CONNECTION_BUSY_ODBC_ERROR[] = "[Microsoft][SQL Server Native Client 11.0]Connection is busy with results for " +// the message returned by ODBC Driver 11 for SQL Server +const char CONNECTION_BUSY_ODBC_ERROR[] = "[Microsoft][ODBC Driver 11 for SQL Server]Connection is busy with results for " "another command"; // SQLSTATE for all internal errors diff --git a/sqlsrv/core_stmt.cpp b/sqlsrv/core_stmt.cpp index 75b92e7d..64f4daaf 100644 --- a/sqlsrv/core_stmt.cpp +++ b/sqlsrv/core_stmt.cpp @@ -496,7 +496,7 @@ void core_sqlsrv_bind_param( sqlsrv_stmt* stmt, unsigned int param_num, int dire ind_ptr = buffer_len; if( direction != SQL_PARAM_INPUT ) { -#if PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION == 4 +#if PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION >= 4 // PHP 5.4 added interned strings, so since we obviously want to change that string here in some fashion, // we reallocate the string if it's interned if( IS_INTERNED( buffer )) { @@ -1762,7 +1762,7 @@ SQLSMALLINT default_c_type( sqlsrv_stmt* stmt, unsigned int paramno, zval const* sql_c_type = SQL_C_CHAR; break; } - break; + break; case IS_BOOL: case IS_LONG: sql_c_type = SQL_C_LONG; @@ -1991,7 +1991,7 @@ void finalize_output_parameters( sqlsrv_stmt* stmt TSRMLS_DC ) // if it's not in the 8 bit encodings, then it's in UTF-16 if( output_param->encoding != SQLSRV_ENCODING_CHAR && output_param->encoding != SQLSRV_ENCODING_BINARY ) { - bool converted = convert_string_from_utf16( output_param->encoding, &str, str_len ); + bool converted = convert_string_from_utf16_inplace( output_param->encoding, &str, str_len ); CHECK_CUSTOM_ERROR( !converted, stmt, SQLSRV_ERROR_OUTPUT_PARAM_ENCODING_TRANSLATE, get_last_error_message()) { throw core::CoreException(); } @@ -2179,7 +2179,7 @@ void get_field_as_string( sqlsrv_stmt* stmt, SQLUSMALLINT field_index, sqlsrv_ph if( sqlsrv_php_type.typeinfo.encoding == SQLSRV_ENCODING_UTF8 ) { - bool converted = convert_string_from_utf16( static_cast( sqlsrv_php_type.typeinfo.encoding ), + bool converted = convert_string_from_utf16_inplace( static_cast( sqlsrv_php_type.typeinfo.encoding ), &field_value_temp, field_len_temp ); CHECK_CUSTOM_ERROR( !converted, stmt, SQLSRV_ERROR_FIELD_ENCODING_TRANSLATE, get_last_error_message() ) { @@ -2223,7 +2223,7 @@ void get_field_as_string( sqlsrv_stmt* stmt, SQLUSMALLINT field_index, sqlsrv_ph if( sqlsrv_php_type.typeinfo.encoding == CP_UTF8 ) { - bool converted = convert_string_from_utf16( static_cast( sqlsrv_php_type.typeinfo.encoding ), + bool converted = convert_string_from_utf16_inplace( static_cast( sqlsrv_php_type.typeinfo.encoding ), &field_value_temp, field_len_temp ); CHECK_CUSTOM_ERROR( !converted, stmt, SQLSRV_ERROR_FIELD_ENCODING_TRANSLATE, get_last_error_message() ) { diff --git a/sqlsrv/core_util.cpp b/sqlsrv/core_util.cpp index a29cfe38..0b5a3468 100644 --- a/sqlsrv/core_util.cpp +++ b/sqlsrv/core_util.cpp @@ -71,18 +71,42 @@ void core_sqlsrv_register_logger( log_callback driver_logger ) // utf-16 string is released by this function if no errors occurred. Otherwise the parameters are not changed // and false is returned. -bool convert_string_from_utf16( SQLSRV_ENCODING encoding, char** string, SQLINTEGER& len, bool free_utf16 ) +bool convert_string_from_utf16_inplace( SQLSRV_ENCODING encoding, char** string, SQLINTEGER& len) { - char* utf16_string = *string; - unsigned int utf16_len = len / 2; // from # of bytes to # of wchars - char *enc_string = NULL; - unsigned int enc_len = 0; + SQLSRV_ASSERT( string != NULL && *string != NULL, "String must be specified" ); // for the empty string, we simply returned we converted it if( len == 0 && *string[0] == '\0' ) { return true; } + char* outString = NULL; + SQLINTEGER outLen = 0; + bool result = convert_string_from_utf16( encoding, reinterpret_cast(*string), len / sizeof(wchar_t), &outString, outLen); + + if (result) + { + sqlsrv_free( *string ); + *string = outString; + len = outLen; + } + + return result; +} + +bool convert_string_from_utf16( SQLSRV_ENCODING encoding, const wchar_t* inString, SQLINTEGER cchInLen, char** outString, SQLINTEGER& cchOutLen ) +{ + SQLSRV_ASSERT( inString != NULL, "Input string must be specified" ); + SQLSRV_ASSERT( outString != NULL, "Output buffer pointer must be specified" ); + SQLSRV_ASSERT( *outString == NULL, "Output buffer pointer must not be set" ); + + if (cchInLen == 0 && inString[0] == L'\0') { + *outString = reinterpret_cast( sqlsrv_malloc ( 1 ) ); + *outString[0] = '\0'; + cchOutLen = 0; + return true; + } + // flags set to 0 by default, which means that any invalid characters are dropped rather than causing // an error. This happens only on XP. DWORD flags = 0; @@ -92,28 +116,26 @@ bool convert_string_from_utf16( SQLSRV_ENCODING encoding, char** string, SQLINTE } // calculate the number of characters needed - enc_len = WideCharToMultiByte( encoding, flags, - reinterpret_cast( utf16_string ), utf16_len, + cchOutLen = WideCharToMultiByte( encoding, flags, + inString, cchInLen, NULL, 0, NULL, NULL ); - if( enc_len == 0 ) { - return false; - } - // we must allocate a new buffer because it is possible that a UTF-8 string is longer than - // the corresponding UTF-16 string, so we cannot use an inplace conversion - enc_string = reinterpret_cast( sqlsrv_malloc( enc_len + 1 /* NULL char*/ )); - int rc = WideCharToMultiByte( encoding, flags, - reinterpret_cast( utf16_string ), utf16_len, - enc_string, enc_len, NULL, NULL ); - if( rc == 0 ) { + if( cchOutLen == 0 ) { return false; } - enc_string[ enc_len ] = '\0'; // null terminate the encoded string - if( free_utf16 ) { - sqlsrv_free( utf16_string ); + // Create a buffer to fit the encoded string + char* newString = reinterpret_cast( sqlsrv_malloc( cchOutLen + 1 /* NULL char*/ )); + int rc = WideCharToMultiByte( encoding, flags, + inString, cchInLen, + newString, cchOutLen, NULL, NULL ); + if( rc == 0 ) { + cchOutLen = 0; + sqlsrv_free( newString ); + return false; } - *string = enc_string; - len = enc_len; + + *outString = newString; + newString[cchOutLen] = '\0'; // null terminate the encoded string return true; } @@ -161,9 +183,7 @@ bool core_sqlsrv_get_odbc_error( sqlsrv_context& ctx, int record_number, sqlsrv_ int zr = SUCCESS; zval* temp = NULL; SQLRETURN r = SQL_SUCCESS; - SQLINTEGER sqlstate_len = SQL_SQLSTATE_BUFSIZE * sizeof( wchar_t ); SQLSMALLINT wmessage_len = 0; - SQLINTEGER message_len = 0; SQLWCHAR wsqlstate[ SQL_SQLSTATE_BUFSIZE ]; SQLWCHAR wnative_message[ SQL_MAX_MESSAGE_LENGTH + 1 ]; SQLSRV_ENCODING enc = ctx.encoding(); @@ -200,15 +220,13 @@ bool core_sqlsrv_get_odbc_error( sqlsrv_context& ctx, int record_number, sqlsrv_ return false; } - error->sqlstate = reinterpret_cast( wsqlstate ); - convert_string_from_utf16( enc, reinterpret_cast( &error->sqlstate ), sqlstate_len, - false /*no free*/ ); - error->native_message = reinterpret_cast( wnative_message ); - message_len = wmessage_len * sizeof( wchar_t ); - convert_string_from_utf16( enc, reinterpret_cast( &error->native_message ), message_len, - false /*no free*/ ); + SQLINTEGER sqlstate_len = 0; + convert_string_from_utf16(enc, wsqlstate, sizeof(wsqlstate), (char**)&error->sqlstate, sqlstate_len); + + SQLINTEGER message_len = 0; + convert_string_from_utf16(enc, wnative_message, wmessage_len, (char**)&error->native_message, message_len); break; - } + } // log the error first diff --git a/sqlsrv/msodbcsql.h b/sqlsrv/msodbcsql.h new file mode 100644 index 00000000..a16bf59a --- /dev/null +++ b/sqlsrv/msodbcsql.h @@ -0,0 +1,2343 @@ +//----------------------------------------------------------------------------- +// File: msodbcsql.h +// +// Copyright: Copyright (c) Microsoft Corporation +// +// Contents: ODBC driver for SQL Server specific definitions. +// +//----------------------------------------------------------------------------- +#ifndef __msodbcsql_h__ +#define __msodbcsql_h__ + +#if !defined(SQLODBC_VER) +#define SQLODBC_VER 1100 +#endif + +#if SQLODBC_VER >= 1100 + +#define SQLODBC_PRODUCT_NAME_FULL_VER_ANSI "Microsoft ODBC Driver 11 for SQL Server" +#define SQLODBC_PRODUCT_NAME_FULL_ANSI "Microsoft ODBC Driver for SQL Server" +#define SQLODBC_PRODUCT_NAME_SHORT_VER_ANSI "ODBC Driver 11 for SQL Server" +#define SQLODBC_PRODUCT_NAME_SHORT_ANSI "ODBC Driver for SQL Server" + +#define SQLODBC_FILE_NAME_ANSI "msodbcsql" +#define SQLODBC_FILE_NAME_VER_ANSI "msodbcsql11" +#define SQLODBC_FILE_NAME_FULL_ANSI "msodbcsql11.dll" + +#define SQLODBC_PRODUCT_NAME_FULL_VER_UNICODE L"Microsoft ODBC Driver 11 for SQL Server" +#define SQLODBC_PRODUCT_NAME_FULL_UNICODE L"Microsoft ODBC Driver for SQL Server" +#define SQLODBC_PRODUCT_NAME_SHORT_VER_UNICODE L"ODBC Driver 11 for SQL Server" +#define SQLODBC_PRODUCT_NAME_SHORT_UNICODE L"ODBC Driver for SQL Server" + +#define SQLODBC_FILE_NAME_UNICODE L"msodbcsql" +#define SQLODBC_FILE_NAME_VER_UNICODE L"msodbcsql11" +#define SQLODBC_FILE_NAME_FULL_UNICODE L"msodbcsql11.dll" + +// define the character type agnostic constants +#if defined(_UNICODE) || defined(UNICODE) + +#define SQLODBC_PRODUCT_NAME_FULL_VER SQLODBC_PRODUCT_NAME_FULL_VER_UNICODE +#define SQLODBC_PRODUCT_NAME_FULL SQLODBC_PRODUCT_NAME_FULL_UNICODE +#define SQLODBC_PRODUCT_NAME_SHORT_VER SQLODBC_PRODUCT_NAME_SHORT_VER_UNICODE +#define SQLODBC_PRODUCT_NAME_SHORT SQLODBC_PRODUCT_NAME_SHORT_UNICODE + +#define SQLODBC_FILE_NAME SQLODBC_FILE_NAME_UNICODE +#define SQLODBC_FILE_NAME_VER SQLODBC_FILE_NAME_VER_UNICODE +#define SQLODBC_FILE_NAME_FULL SQLODBC_FILE_NAME_FULL_UNICODE + +#else // _UNICODE || UNICODE + +#define SQLODBC_PRODUCT_NAME_FULL_VER SQLODBC_PRODUCT_NAME_FULL_VER_ANSI +#define SQLODBC_PRODUCT_NAME_FULL SQLODBC_PRODUCT_NAME_FULL_ANSI +#define SQLODBC_PRODUCT_NAME_SHORT_VER SQLODBC_PRODUCT_NAME_SHORT_VER_ANSI +#define SQLODBC_PRODUCT_NAME_SHORT SQLODBC_PRODUCT_NAME_SHORT_ANSI + +#define SQLODBC_FILE_NAME SQLODBC_FILE_NAME_ANSI +#define SQLODBC_FILE_NAME_VER SQLODBC_FILE_NAME_VER_ANSI +#define SQLODBC_FILE_NAME_FULL SQLODBC_FILE_NAME_FULL_ANSI + +#endif // _UNICODE || UNICODE + +#define SQLODBC_DRIVER_NAME SQLODBC_PRODUCT_NAME_SHORT_VER + +#endif // SQLODBC_VER + +#ifndef __sqlncli_h__ + +#if !defined(SQLNCLI_VER) +#define SQLNCLI_VER 1100 +#endif + +#if SQLNCLI_VER >= 1100 + +#define SQLNCLI_PRODUCT_NAME_FULL_VER_ANSI "Microsoft SQL Server Native Client 11.0" +#define SQLNCLI_PRODUCT_NAME_FULL_ANSI "Microsoft SQL Server Native Client" +#define SQLNCLI_PRODUCT_NAME_SHORT_VER_ANSI "SQL Server Native Client 11.0" +#define SQLNCLI_PRODUCT_NAME_SHORT_ANSI "SQL Server Native Client" + +#define SQLNCLI_FILE_NAME_ANSI "sqlncli" +#define SQLNCLI_FILE_NAME_VER_ANSI "sqlncli11" +#define SQLNCLI_FILE_NAME_FULL_ANSI "sqlncli11.dll" + +#define SQLNCLI_PRODUCT_NAME_FULL_VER_UNICODE L"Microsoft SQL Server Native Client 11.0" +#define SQLNCLI_PRODUCT_NAME_FULL_UNICODE L"Microsoft SQL Server Native Client" +#define SQLNCLI_PRODUCT_NAME_SHORT_VER_UNICODE L"SQL Server Native Client 11.0" +#define SQLNCLI_PRODUCT_NAME_SHORT_UNICODE L"SQL Server Native Client" + +#define SQLNCLI_FILE_NAME_UNICODE L"sqlncli" +#define SQLNCLI_FILE_NAME_VER_UNICODE L"sqlncli11" +#define SQLNCLI_FILE_NAME_FULL_UNICODE L"sqlncli11.dll" + +#elif SQLNCLI_VER >= 1000 + +#define SQLNCLI_PRODUCT_NAME_FULL_VER_ANSI "Microsoft SQL Server Native Client 10.0" +#define SQLNCLI_PRODUCT_NAME_FULL_ANSI "Microsoft SQL Server Native Client" +#define SQLNCLI_PRODUCT_NAME_SHORT_VER_ANSI "SQL Server Native Client 10.0" +#define SQLNCLI_PRODUCT_NAME_SHORT_ANSI "SQL Server Native Client" + +#define SQLNCLI_FILE_NAME_ANSI "sqlncli" +#define SQLNCLI_FILE_NAME_VER_ANSI "sqlncli10" +#define SQLNCLI_FILE_NAME_FULL_ANSI "sqlncli10.dll" + +#define SQLNCLI_PRODUCT_NAME_FULL_VER_UNICODE L"Microsoft SQL Server Native Client 10.0" +#define SQLNCLI_PRODUCT_NAME_FULL_UNICODE L"Microsoft SQL Server Native Client" +#define SQLNCLI_PRODUCT_NAME_SHORT_VER_UNICODE L"SQL Server Native Client 10.0" +#define SQLNCLI_PRODUCT_NAME_SHORT_UNICODE L"SQL Server Native Client" + +#define SQLNCLI_FILE_NAME_UNICODE L"sqlncli" +#define SQLNCLI_FILE_NAME_VER_UNICODE L"sqlncli10" +#define SQLNCLI_FILE_NAME_FULL_UNICODE L"sqlncli10.dll" + +#else + +#define SQLNCLI_PRODUCT_NAME_FULL_VER_ANSI "Microsoft SQL Server Native Client" +#define SQLNCLI_PRODUCT_NAME_FULL_ANSI "Microsoft SQL Server Native Client" +#define SQLNCLI_PRODUCT_NAME_SHORT_VER_ANSI "SQL Native Client" +#define SQLNCLI_PRODUCT_NAME_SHORT_ANSI "SQL Native Client" + +#define SQLNCLI_FILE_NAME_ANSI "sqlncli" +#define SQLNCLI_FILE_NAME_VER_ANSI "sqlncli" +#define SQLNCLI_FILE_NAME_FULL_ANSI "sqlncli.dll" + +#define SQLNCLI_PRODUCT_NAME_FULL_VER_UNICODE L"Microsoft SQL Server Native Client" +#define SQLNCLI_PRODUCT_NAME_FULL_UNICODE L"Microsoft SQL Server Native Client" +#define SQLNCLI_PRODUCT_NAME_SHORT_VER_UNICODE L"SQL Native Client" +#define SQLNCLI_PRODUCT_NAME_SHORT_UNICODE L"SQL Native Client" + +#define SQLNCLI_FILE_NAME_UNICODE L"sqlncli" +#define SQLNCLI_FILE_NAME_VER_UNICODE L"sqlncli" +#define SQLNCLI_FILE_NAME_FULL_UNICODE L"sqlncli.dll" + +#endif // SQLNCLI_VER >= 1100 + +// define the character type agnostic constants +#if defined(_UNICODE) || defined(UNICODE) + +#define SQLNCLI_PRODUCT_NAME_FULL_VER SQLNCLI_PRODUCT_NAME_FULL_VER_UNICODE +#define SQLNCLI_PRODUCT_NAME_FULL SQLNCLI_PRODUCT_NAME_FULL_UNICODE +#define SQLNCLI_PRODUCT_NAME_SHORT_VER SQLNCLI_PRODUCT_NAME_SHORT_VER_UNICODE +#define SQLNCLI_PRODUCT_NAME_SHORT SQLNCLI_PRODUCT_NAME_SHORT_UNICODE + +#define SQLNCLI_FILE_NAME SQLNCLI_FILE_NAME_UNICODE +#define SQLNCLI_FILE_NAME_VER SQLNCLI_FILE_NAME_VER_UNICODE +#define SQLNCLI_FILE_NAME_FULL SQLNCLI_FILE_NAME_FULL_UNICODE + + +#else // _UNICODE || UNICODE + +#define SQLNCLI_PRODUCT_NAME_FULL_VER SQLNCLI_PRODUCT_NAME_FULL_VER_ANSI +#define SQLNCLI_PRODUCT_NAME_FULL SQLNCLI_PRODUCT_NAME_FULL_ANSI +#define SQLNCLI_PRODUCT_NAME_SHORT_VER SQLNCLI_PRODUCT_NAME_SHORT_VER_ANSI +#define SQLNCLI_PRODUCT_NAME_SHORT SQLNCLI_PRODUCT_NAME_SHORT_ANSI + +#define SQLNCLI_FILE_NAME SQLNCLI_FILE_NAME_ANSI +#define SQLNCLI_FILE_NAME_VER SQLNCLI_FILE_NAME_VER_ANSI +#define SQLNCLI_FILE_NAME_FULL SQLNCLI_FILE_NAME_FULL_ANSI + +#endif // _UNICODE || UNICODE + +#define SQLNCLI_DRIVER_NAME SQLNCLI_PRODUCT_NAME_SHORT_VER + + +#ifdef ODBCVER + +#ifdef __cplusplus +extern "C" { +#endif + +// max SQL Server identifier length +#define SQL_MAX_SQLSERVERNAME 128 + +// SQLSetConnectAttr driver specific defines. +// Microsoft has 1200 thru 1249 reserved for Microsoft SQL Server Native Client driver usage. +// Connection attributes +#define SQL_COPT_SS_BASE 1200 +#define SQL_COPT_SS_REMOTE_PWD (SQL_COPT_SS_BASE+1) // dbrpwset SQLSetConnectOption only +#define SQL_COPT_SS_USE_PROC_FOR_PREP (SQL_COPT_SS_BASE+2) // Use create proc for SQLPrepare +#define SQL_COPT_SS_INTEGRATED_SECURITY (SQL_COPT_SS_BASE+3) // Force integrated security on login +#define SQL_COPT_SS_PRESERVE_CURSORS (SQL_COPT_SS_BASE+4) // Preserve server cursors after SQLTransact +#define SQL_COPT_SS_USER_DATA (SQL_COPT_SS_BASE+5) // dbgetuserdata/dbsetuserdata +#define SQL_COPT_SS_ENLIST_IN_DTC SQL_ATTR_ENLIST_IN_DTC // Enlist in a DTC transaction +#define SQL_COPT_SS_ENLIST_IN_XA SQL_ATTR_ENLIST_IN_XA // Enlist in a XA transaction +#define SQL_COPT_SS_FALLBACK_CONNECT (SQL_COPT_SS_BASE+10) // Enables FallBack connections +#define SQL_COPT_SS_PERF_DATA (SQL_COPT_SS_BASE+11) // Used to access SQL Server ODBC driver performance data +#define SQL_COPT_SS_PERF_DATA_LOG (SQL_COPT_SS_BASE+12) // Used to set the logfile name for the Performance data +#define SQL_COPT_SS_PERF_QUERY_INTERVAL (SQL_COPT_SS_BASE+13) // Used to set the query logging threshold in milliseconds. +#define SQL_COPT_SS_PERF_QUERY_LOG (SQL_COPT_SS_BASE+14) // Used to set the logfile name for saving queryies. +#define SQL_COPT_SS_PERF_QUERY (SQL_COPT_SS_BASE+15) // Used to start and stop query logging. +#define SQL_COPT_SS_PERF_DATA_LOG_NOW (SQL_COPT_SS_BASE+16) // Used to make a statistics log entry to disk. +#define SQL_COPT_SS_QUOTED_IDENT (SQL_COPT_SS_BASE+17) // Enable/Disable Quoted Identifiers +#define SQL_COPT_SS_ANSI_NPW (SQL_COPT_SS_BASE+18) // Enable/Disable ANSI NULL, Padding and Warnings +#define SQL_COPT_SS_BCP (SQL_COPT_SS_BASE+19) // Allow BCP usage on connection +#define SQL_COPT_SS_TRANSLATE (SQL_COPT_SS_BASE+20) // Perform code page translation +#define SQL_COPT_SS_ATTACHDBFILENAME (SQL_COPT_SS_BASE+21) // File name to be attached as a database +#define SQL_COPT_SS_CONCAT_NULL (SQL_COPT_SS_BASE+22) // Enable/Disable CONCAT_NULL_YIELDS_NULL +#define SQL_COPT_SS_ENCRYPT (SQL_COPT_SS_BASE+23) // Allow strong encryption for data +#define SQL_COPT_SS_MARS_ENABLED (SQL_COPT_SS_BASE+24) // Multiple active result set per connection +#define SQL_COPT_SS_FAILOVER_PARTNER (SQL_COPT_SS_BASE+25) // Failover partner server +#define SQL_COPT_SS_OLDPWD (SQL_COPT_SS_BASE+26) // Old Password, used when changing password during login +#define SQL_COPT_SS_TXN_ISOLATION (SQL_COPT_SS_BASE+27) // Used to set/get any driver-specific or ODBC-defined TXN iso level +#define SQL_COPT_SS_TRUST_SERVER_CERTIFICATE (SQL_COPT_SS_BASE+28) // Trust server certificate +#define SQL_COPT_SS_SERVER_SPN (SQL_COPT_SS_BASE+29) // Server SPN +#define SQL_COPT_SS_FAILOVER_PARTNER_SPN (SQL_COPT_SS_BASE+30) // Failover partner server SPN +#define SQL_COPT_SS_INTEGRATED_AUTHENTICATION_METHOD (SQL_COPT_SS_BASE+31) // The integrated authentication method used for the connection +#define SQL_COPT_SS_MUTUALLY_AUTHENTICATED (SQL_COPT_SS_BASE+32) // Used to decide if the connection is mutually authenticated +#define SQL_COPT_SS_CLIENT_CONNECTION_ID (SQL_COPT_SS_BASE+33) // Post connection attribute used to get the ConnectionID +// Define old names +#define SQL_REMOTE_PWD SQL_COPT_SS_REMOTE_PWD +#define SQL_USE_PROCEDURE_FOR_PREPARE SQL_COPT_SS_USE_PROC_FOR_PREP +#define SQL_INTEGRATED_SECURITY SQL_COPT_SS_INTEGRATED_SECURITY +#define SQL_PRESERVE_CURSORS SQL_COPT_SS_PRESERVE_CURSORS + +// SQLSetStmtAttr SQL Server Native Client driver specific defines. +// Statement attributes +#define SQL_SOPT_SS_BASE 1225 +#define SQL_SOPT_SS_TEXTPTR_LOGGING (SQL_SOPT_SS_BASE+0) // Text pointer logging +#define SQL_SOPT_SS_CURRENT_COMMAND (SQL_SOPT_SS_BASE+1) // dbcurcmd SQLGetStmtOption only +#define SQL_SOPT_SS_HIDDEN_COLUMNS (SQL_SOPT_SS_BASE+2) // Expose FOR BROWSE hidden columns +#define SQL_SOPT_SS_NOBROWSETABLE (SQL_SOPT_SS_BASE+3) // Set NOBROWSETABLE option +#define SQL_SOPT_SS_REGIONALIZE (SQL_SOPT_SS_BASE+4) // Regionalize output character conversions +#define SQL_SOPT_SS_CURSOR_OPTIONS (SQL_SOPT_SS_BASE+5) // Server cursor options +#define SQL_SOPT_SS_NOCOUNT_STATUS (SQL_SOPT_SS_BASE+6) // Real vs. Not Real row count indicator +#define SQL_SOPT_SS_DEFER_PREPARE (SQL_SOPT_SS_BASE+7) // Defer prepare until necessary +#define SQL_SOPT_SS_QUERYNOTIFICATION_TIMEOUT (SQL_SOPT_SS_BASE+8) // Notification timeout +#define SQL_SOPT_SS_QUERYNOTIFICATION_MSGTEXT (SQL_SOPT_SS_BASE+9) // Notification message text +#define SQL_SOPT_SS_QUERYNOTIFICATION_OPTIONS (SQL_SOPT_SS_BASE+10)// SQL service broker name +#define SQL_SOPT_SS_PARAM_FOCUS (SQL_SOPT_SS_BASE+11)// Direct subsequent calls to parameter related methods to set properties on constituent columns/parameters of container types +#define SQL_SOPT_SS_NAME_SCOPE (SQL_SOPT_SS_BASE+12)// Sets name scope for subsequent catalog function calls +#define SQL_SOPT_SS_MAX_USED SQL_SOPT_SS_NAME_SCOPE +// Define old names +#define SQL_TEXTPTR_LOGGING SQL_SOPT_SS_TEXTPTR_LOGGING +#define SQL_COPT_SS_BASE_EX 1240 +#define SQL_COPT_SS_BROWSE_CONNECT (SQL_COPT_SS_BASE_EX+1) // Browse connect mode of operation +#define SQL_COPT_SS_BROWSE_SERVER (SQL_COPT_SS_BASE_EX+2) // Single Server browse request. +#define SQL_COPT_SS_WARN_ON_CP_ERROR (SQL_COPT_SS_BASE_EX+3) // Issues warning when data from the server had a loss during code page conversion. +#define SQL_COPT_SS_CONNECTION_DEAD (SQL_COPT_SS_BASE_EX+4) // dbdead SQLGetConnectOption only. It will try to ping the server. Expensive connection check +#define SQL_COPT_SS_BROWSE_CACHE_DATA (SQL_COPT_SS_BASE_EX+5) // Determines if we should cache browse info. Used when returned buffer is greater then ODBC limit (32K) +#define SQL_COPT_SS_RESET_CONNECTION (SQL_COPT_SS_BASE_EX+6) // When this option is set, we will perform connection reset on next packet +#define SQL_COPT_SS_APPLICATION_INTENT (SQL_COPT_SS_BASE_EX+7) // Application Intent +#define SQL_COPT_SS_MULTISUBNET_FAILOVER (SQL_COPT_SS_BASE_EX+8) // Multi-subnet Failover +#define SQL_COPT_SS_EX_MAX_USED SQL_COPT_SS_MULTISUBNET_FAILOVER + +// SQLColAttributes driver specific defines. +// SQLSetDescField/SQLGetDescField driver specific defines. +// Microsoft has 1200 thru 1249 reserved for Microsoft SQL Server Native Client driver usage. +#define SQL_CA_SS_BASE 1200 +#define SQL_CA_SS_COLUMN_SSTYPE (SQL_CA_SS_BASE+0) // dbcoltype/dbalttype +#define SQL_CA_SS_COLUMN_UTYPE (SQL_CA_SS_BASE+1) // dbcolutype/dbaltutype +#define SQL_CA_SS_NUM_ORDERS (SQL_CA_SS_BASE+2) // dbnumorders +#define SQL_CA_SS_COLUMN_ORDER (SQL_CA_SS_BASE+3) // dbordercol +#define SQL_CA_SS_COLUMN_VARYLEN (SQL_CA_SS_BASE+4) // dbvarylen +#define SQL_CA_SS_NUM_COMPUTES (SQL_CA_SS_BASE+5) // dbnumcompute +#define SQL_CA_SS_COMPUTE_ID (SQL_CA_SS_BASE+6) // dbnextrow status return +#define SQL_CA_SS_COMPUTE_BYLIST (SQL_CA_SS_BASE+7) // dbbylist +#define SQL_CA_SS_COLUMN_ID (SQL_CA_SS_BASE+8) // dbaltcolid +#define SQL_CA_SS_COLUMN_OP (SQL_CA_SS_BASE+9) // dbaltop +#define SQL_CA_SS_COLUMN_SIZE (SQL_CA_SS_BASE+10) // dbcollen +#define SQL_CA_SS_COLUMN_HIDDEN (SQL_CA_SS_BASE+11) // Column is hidden (FOR BROWSE) +#define SQL_CA_SS_COLUMN_KEY (SQL_CA_SS_BASE+12) // Column is key column (FOR BROWSE) +//#define SQL_DESC_BASE_COLUMN_NAME_OLD (SQL_CA_SS_BASE+13) // This is defined at another location. +#define SQL_CA_SS_COLUMN_COLLATION (SQL_CA_SS_BASE+14) // Column collation (only for chars) +#define SQL_CA_SS_VARIANT_TYPE (SQL_CA_SS_BASE+15) +#define SQL_CA_SS_VARIANT_SQL_TYPE (SQL_CA_SS_BASE+16) +#define SQL_CA_SS_VARIANT_SERVER_TYPE (SQL_CA_SS_BASE+17) + +// XML, CLR UDT, and table valued parameter related metadata +#define SQL_CA_SS_UDT_CATALOG_NAME (SQL_CA_SS_BASE+18) // UDT catalog name +#define SQL_CA_SS_UDT_SCHEMA_NAME (SQL_CA_SS_BASE+19) // UDT schema name +#define SQL_CA_SS_UDT_TYPE_NAME (SQL_CA_SS_BASE+20) // UDT type name +#define SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME (SQL_CA_SS_BASE+21) // Qualified name of the assembly containing the UDT class +#define SQL_CA_SS_XML_SCHEMACOLLECTION_CATALOG_NAME (SQL_CA_SS_BASE+22) // Name of the catalog that contains XML Schema collection +#define SQL_CA_SS_XML_SCHEMACOLLECTION_SCHEMA_NAME (SQL_CA_SS_BASE+23) // Name of the schema that contains XML Schema collection +#define SQL_CA_SS_XML_SCHEMACOLLECTION_NAME (SQL_CA_SS_BASE+24) // Name of the XML Schema collection +#define SQL_CA_SS_CATALOG_NAME (SQL_CA_SS_BASE+25) // Catalog name +#define SQL_CA_SS_SCHEMA_NAME (SQL_CA_SS_BASE+26) // Schema name +#define SQL_CA_SS_TYPE_NAME (SQL_CA_SS_BASE+27) // Type name + +// table valued parameter related metadata +#define SQL_CA_SS_COLUMN_COMPUTED (SQL_CA_SS_BASE+29) // column is computed +#define SQL_CA_SS_COLUMN_IN_UNIQUE_KEY (SQL_CA_SS_BASE+30) // column is part of a unique key +#define SQL_CA_SS_COLUMN_SORT_ORDER (SQL_CA_SS_BASE+31) // column sort order +#define SQL_CA_SS_COLUMN_SORT_ORDINAL (SQL_CA_SS_BASE+32) // column sort ordinal +#define SQL_CA_SS_COLUMN_HAS_DEFAULT_VALUE (SQL_CA_SS_BASE+33) // column has default value for all rows of the table valued parameter + +// sparse column related metadata +#define SQL_CA_SS_IS_COLUMN_SET (SQL_CA_SS_BASE+34) // column is a column-set column for sparse columns + +// Legacy datetime related metadata +#define SQL_CA_SS_SERVER_TYPE (SQL_CA_SS_BASE+35) // column type to send on the wire for datetime types + +#define SQL_CA_SS_MAX_USED (SQL_CA_SS_BASE+36) + +// Defines returned by SQL_ATTR_CURSOR_TYPE/SQL_CURSOR_TYPE +#define SQL_CURSOR_FAST_FORWARD_ONLY 8 // Only returned by SQLGetStmtAttr/Option +// Defines for use with SQL_COPT_SS_USE_PROC_FOR_PREP +#define SQL_UP_OFF 0L // Procedures won't be used for prepare +#define SQL_UP_ON 1L // Procedures will be used for prepare +#define SQL_UP_ON_DROP 2L // Temp procedures will be explicitly dropped +#define SQL_UP_DEFAULT SQL_UP_ON +// Defines for use with SQL_COPT_SS_INTEGRATED_SECURITY - Pre-Connect Option only +#define SQL_IS_OFF 0L // Integrated security isn't used +#define SQL_IS_ON 1L // Integrated security is used +#define SQL_IS_DEFAULT SQL_IS_OFF +// Defines for use with SQL_COPT_SS_PRESERVE_CURSORS +#define SQL_PC_OFF 0L // Cursors are closed on SQLTransact +#define SQL_PC_ON 1L // Cursors remain open on SQLTransact +#define SQL_PC_DEFAULT SQL_PC_OFF +// Defines for use with SQL_COPT_SS_USER_DATA +#define SQL_UD_NOTSET NULL // No user data pointer set +// Defines for use with SQL_COPT_SS_TRANSLATE +#define SQL_XL_OFF 0L // Code page translation is not performed +#define SQL_XL_ON 1L // Code page translation is performed +#define SQL_XL_DEFAULT SQL_XL_ON +// Defines for use with SQL_COPT_SS_FALLBACK_CONNECT - Pre-Connect Option only +#define SQL_FB_OFF 0L // FallBack connections are disabled +#define SQL_FB_ON 1L // FallBack connections are enabled +#define SQL_FB_DEFAULT SQL_FB_OFF +// Defines for use with SQL_COPT_SS_BCP - Pre-Connect Option only +#define SQL_BCP_OFF 0L // BCP is not allowed on connection +#define SQL_BCP_ON 1L // BCP is allowed on connection +#define SQL_BCP_DEFAULT SQL_BCP_OFF +// Defines for use with SQL_COPT_SS_QUOTED_IDENT +#define SQL_QI_OFF 0L // Quoted identifiers are enable +#define SQL_QI_ON 1L // Quoted identifiers are disabled +#define SQL_QI_DEFAULT SQL_QI_ON +// Defines for use with SQL_COPT_SS_ANSI_NPW - Pre-Connect Option only +#define SQL_AD_OFF 0L // ANSI NULLs, Padding and Warnings are enabled +#define SQL_AD_ON 1L // ANSI NULLs, Padding and Warnings are disabled +#define SQL_AD_DEFAULT SQL_AD_ON +// Defines for use with SQL_COPT_SS_CONCAT_NULL - Pre-Connect Option only +#define SQL_CN_OFF 0L // CONCAT_NULL_YIELDS_NULL is off +#define SQL_CN_ON 1L // CONCAT_NULL_YIELDS_NULL is on +#define SQL_CN_DEFAULT SQL_CN_ON +// Defines for use with SQL_SOPT_SS_TEXTPTR_LOGGING +#define SQL_TL_OFF 0L // No logging on text pointer ops +#define SQL_TL_ON 1L // Logging occurs on text pointer ops +#define SQL_TL_DEFAULT SQL_TL_ON +// Defines for use with SQL_SOPT_SS_HIDDEN_COLUMNS +#define SQL_HC_OFF 0L // FOR BROWSE columns are hidden +#define SQL_HC_ON 1L // FOR BROWSE columns are exposed +#define SQL_HC_DEFAULT SQL_HC_OFF +// Defines for use with SQL_SOPT_SS_NOBROWSETABLE +#define SQL_NB_OFF 0L // NO_BROWSETABLE is off +#define SQL_NB_ON 1L // NO_BROWSETABLE is on +#define SQL_NB_DEFAULT SQL_NB_OFF +// Defines for use with SQL_SOPT_SS_REGIONALIZE +#define SQL_RE_OFF 0L // No regionalization occurs on output character conversions +#define SQL_RE_ON 1L // Regionalization occurs on output character conversions +#define SQL_RE_DEFAULT SQL_RE_OFF +// Defines for use with SQL_SOPT_SS_CURSOR_OPTIONS +#define SQL_CO_OFF 0L // Clear all cursor options +#define SQL_CO_FFO 1L // Fast-forward cursor will be used +#define SQL_CO_AF 2L // Autofetch on cursor open +#define SQL_CO_FFO_AF (SQL_CO_FFO|SQL_CO_AF) // Fast-forward cursor with autofetch +#define SQL_CO_FIREHOSE_AF 4L // Auto fetch on fire-hose cursors +#define SQL_CO_DEFAULT SQL_CO_OFF +//SQL_SOPT_SS_NOCOUNT_STATUS +#define SQL_NC_OFF 0L +#define SQL_NC_ON 1L +//SQL_SOPT_SS_DEFER_PREPARE +#define SQL_DP_OFF 0L +#define SQL_DP_ON 1L +//SQL_SOPT_SS_NAME_SCOPE +#define SQL_SS_NAME_SCOPE_TABLE 0L +#define SQL_SS_NAME_SCOPE_TABLE_TYPE 1L +#define SQL_SS_NAME_SCOPE_EXTENDED 2L +#define SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET 3L +#define SQL_SS_NAME_SCOPE_DEFAULT SQL_SS_NAME_SCOPE_TABLE +//SQL_COPT_SS_ENCRYPT +#define SQL_EN_OFF 0L +#define SQL_EN_ON 1L +//SQL_COPT_SS_TRUST_SERVER_CERTIFICATE +#define SQL_TRUST_SERVER_CERTIFICATE_NO 0L +#define SQL_TRUST_SERVER_CERTIFICATE_YES 1L +//SQL_COPT_SS_BROWSE_CONNECT +#define SQL_MORE_INFO_NO 0L +#define SQL_MORE_INFO_YES 1L +//SQL_COPT_SS_BROWSE_CACHE_DATA +#define SQL_CACHE_DATA_NO 0L +#define SQL_CACHE_DATA_YES 1L +//SQL_COPT_SS_RESET_CONNECTION +#define SQL_RESET_YES 1L +//SQL_COPT_SS_WARN_ON_CP_ERROR +#define SQL_WARN_NO 0L +#define SQL_WARN_YES 1L +//SQL_COPT_SS_MARS_ENABLED +#define SQL_MARS_ENABLED_NO 0L +#define SQL_MARS_ENABLED_YES 1L +/* SQL_TXN_ISOLATION_OPTION bitmasks */ +#define SQL_TXN_SS_SNAPSHOT 0x00000020L + +// The following are defines for SQL_CA_SS_COLUMN_SORT_ORDER +#define SQL_SS_ORDER_UNSPECIFIED 0L +#define SQL_SS_DESCENDING_ORDER 1L +#define SQL_SS_ASCENDING_ORDER 2L +#define SQL_SS_ORDER_DEFAULT SQL_SS_ORDER_UNSPECIFIED + +// Driver specific SQL data type defines. +// Microsoft has -150 thru -199 reserved for Microsoft SQL Server Native Client driver usage. +#define SQL_SS_VARIANT (-150) +#define SQL_SS_UDT (-151) +#define SQL_SS_XML (-152) +#define SQL_SS_TABLE (-153) +#define SQL_SS_TIME2 (-154) +#define SQL_SS_TIMESTAMPOFFSET (-155) + +// Local types to be used with SQL_CA_SS_SERVER_TYPE +#define SQL_SS_TYPE_DEFAULT 0L +#define SQL_SS_TYPE_SMALLDATETIME 1L +#define SQL_SS_TYPE_DATETIME 2L + +// Extended C Types range 4000 and above. Range of -100 thru 200 is reserved by Driver Manager. +#define SQL_C_TYPES_EXTENDED 0x04000L +#define SQL_C_SS_TIME2 (SQL_C_TYPES_EXTENDED+0) +#define SQL_C_SS_TIMESTAMPOFFSET (SQL_C_TYPES_EXTENDED+1) + +#ifndef SQLNCLI_NO_BCP +// Define the symbol SQLNCLI_NO_BCP if you are not using BCP in your application +// and you want to exclude the BCP-related definitions in this header file. + +// SQL Server Data Type defines. +// New types for SQL 6.0 and later servers +#define SQLTEXT 0x23 +#define SQLVARBINARY 0x25 +#define SQLINTN 0x26 +#define SQLVARCHAR 0x27 +#define SQLBINARY 0x2d +#define SQLIMAGE 0x22 +#define SQLCHARACTER 0x2f +#define SQLINT1 0x30 +#define SQLBIT 0x32 +#define SQLINT2 0x34 +#define SQLINT4 0x38 +#define SQLMONEY 0x3c +#define SQLDATETIME 0x3d +#define SQLFLT8 0x3e +#define SQLFLTN 0x6d +#define SQLMONEYN 0x6e +#define SQLDATETIMN 0x6f +#define SQLFLT4 0x3b +#define SQLMONEY4 0x7a +#define SQLDATETIM4 0x3a +// New types for SQL 6.0 and later servers +#define SQLDECIMAL 0x6a +#define SQLNUMERIC 0x6c +// New types for SQL 7.0 and later servers +#define SQLUNIQUEID 0x24 +#define SQLBIGCHAR 0xaf +#define SQLBIGVARCHAR 0xa7 +#define SQLBIGBINARY 0xad +#define SQLBIGVARBINARY 0xa5 +#define SQLBITN 0x68 +#define SQLNCHAR 0xef +#define SQLNVARCHAR 0xe7 +#define SQLNTEXT 0x63 +// New types for SQL 2000 and later servers +#define SQLINT8 0x7f +#define SQLVARIANT 0x62 +// New types for SQL 2005 and later servers +#define SQLUDT 0xf0 +#define SQLXML 0xf1 +// New types for SQL 2008 and later servers +#define SQLTABLE 0xf3 +#define SQLDATEN 0x28 +#define SQLTIMEN 0x29 +#define SQLDATETIME2N 0x2a +#define SQLDATETIMEOFFSETN 0x2b +// Define old names +#define SQLDECIMALN 0x6a +#define SQLNUMERICN 0x6c +#endif // SQLNCLI_NO_BCP + +// SQL_SS_LENGTH_UNLIMITED is used to describe the max length of +// VARCHAR(max), VARBINARY(max), NVARCHAR(max), and XML columns +#define SQL_SS_LENGTH_UNLIMITED 0 + +// User Data Type definitions. +// Returned by SQLColAttributes/SQL_CA_SS_COLUMN_UTYPE. +#define SQLudtBINARY 3 +#define SQLudtBIT 16 +#define SQLudtBITN 0 +#define SQLudtCHAR 1 +#define SQLudtDATETIM4 22 +#define SQLudtDATETIME 12 +#define SQLudtDATETIMN 15 +#define SQLudtDECML 24 +#define SQLudtDECMLN 26 +#define SQLudtFLT4 23 +#define SQLudtFLT8 8 +#define SQLudtFLTN 14 +#define SQLudtIMAGE 20 +#define SQLudtINT1 5 +#define SQLudtINT2 6 +#define SQLudtINT4 7 +#define SQLudtINTN 13 +#define SQLudtMONEY 11 +#define SQLudtMONEY4 21 +#define SQLudtMONEYN 17 +#define SQLudtNUM 10 +#define SQLudtNUMN 25 +#define SQLudtSYSNAME 18 +#define SQLudtTEXT 19 +#define SQLudtTIMESTAMP 80 +#define SQLudtUNIQUEIDENTIFIER 0 +#define SQLudtVARBINARY 4 +#define SQLudtVARCHAR 2 +#define MIN_USER_DATATYPE 256 +// Aggregate operator types. +// Returned by SQLColAttributes/SQL_CA_SS_COLUMN_OP. +#define SQLAOPSTDEV 0x30 // Standard deviation +#define SQLAOPSTDEVP 0x31 // Standard deviation population +#define SQLAOPVAR 0x32 // Variance +#define SQLAOPVARP 0x33 // Variance population +#define SQLAOPCNT 0x4b // Count +#define SQLAOPSUM 0x4d // Sum +#define SQLAOPAVG 0x4f // Average +#define SQLAOPMIN 0x51 // Min +#define SQLAOPMAX 0x52 // Max +#define SQLAOPANY 0x53 // Any +#define SQLAOPNOOP 0x56 // None +// SQLGetInfo driver specific defines. +// Microsoft has 1151 thru 1200 reserved for Microsoft SQL Server Native Client driver usage. +#define SQL_INFO_SS_FIRST 1199 +#define SQL_INFO_SS_NETLIB_NAMEW (SQL_INFO_SS_FIRST+0) // dbprocinfo +#define SQL_INFO_SS_NETLIB_NAMEA (SQL_INFO_SS_FIRST+1) // dbprocinfo +#define SQL_INFO_SS_MAX_USED SQL_INFO_SS_NETLIB_NAMEA +#ifdef UNICODE +#define SQL_INFO_SS_NETLIB_NAME SQL_INFO_SS_NETLIB_NAMEW +#else +#define SQL_INFO_SS_NETLIB_NAME SQL_INFO_SS_NETLIB_NAMEA +#endif + +// SQLGetDiagField driver specific defines. +// Microsoft has -1150 thru -1199 reserved for Microsoft SQL Server Native Client driver usage. +#define SQL_DIAG_SS_BASE (-1150) +#define SQL_DIAG_SS_MSGSTATE (SQL_DIAG_SS_BASE) +#define SQL_DIAG_SS_SEVERITY (SQL_DIAG_SS_BASE-1) +#define SQL_DIAG_SS_SRVNAME (SQL_DIAG_SS_BASE-2) +#define SQL_DIAG_SS_PROCNAME (SQL_DIAG_SS_BASE-3) +#define SQL_DIAG_SS_LINE (SQL_DIAG_SS_BASE-4) +// SQLGetDiagField/SQL_DIAG_DYNAMIC_FUNCTION_CODE driver specific defines. +// Microsoft has -200 thru -299 reserved for Microsoft SQL Server Native Client driver usage. +#define SQL_DIAG_DFC_SS_BASE (-200) +#define SQL_DIAG_DFC_SS_ALTER_DATABASE (SQL_DIAG_DFC_SS_BASE-0) +#define SQL_DIAG_DFC_SS_CHECKPOINT (SQL_DIAG_DFC_SS_BASE-1) +#define SQL_DIAG_DFC_SS_CONDITION (SQL_DIAG_DFC_SS_BASE-2) +#define SQL_DIAG_DFC_SS_CREATE_DATABASE (SQL_DIAG_DFC_SS_BASE-3) +#define SQL_DIAG_DFC_SS_CREATE_DEFAULT (SQL_DIAG_DFC_SS_BASE-4) +#define SQL_DIAG_DFC_SS_CREATE_PROCEDURE (SQL_DIAG_DFC_SS_BASE-5) +#define SQL_DIAG_DFC_SS_CREATE_RULE (SQL_DIAG_DFC_SS_BASE-6) +#define SQL_DIAG_DFC_SS_CREATE_TRIGGER (SQL_DIAG_DFC_SS_BASE-7) +#define SQL_DIAG_DFC_SS_CURSOR_DECLARE (SQL_DIAG_DFC_SS_BASE-8) +#define SQL_DIAG_DFC_SS_CURSOR_OPEN (SQL_DIAG_DFC_SS_BASE-9) +#define SQL_DIAG_DFC_SS_CURSOR_FETCH (SQL_DIAG_DFC_SS_BASE-10) +#define SQL_DIAG_DFC_SS_CURSOR_CLOSE (SQL_DIAG_DFC_SS_BASE-11) +#define SQL_DIAG_DFC_SS_DEALLOCATE_CURSOR (SQL_DIAG_DFC_SS_BASE-12) +#define SQL_DIAG_DFC_SS_DBCC (SQL_DIAG_DFC_SS_BASE-13) +#define SQL_DIAG_DFC_SS_DISK (SQL_DIAG_DFC_SS_BASE-14) +#define SQL_DIAG_DFC_SS_DROP_DATABASE (SQL_DIAG_DFC_SS_BASE-15) +#define SQL_DIAG_DFC_SS_DROP_DEFAULT (SQL_DIAG_DFC_SS_BASE-16) +#define SQL_DIAG_DFC_SS_DROP_PROCEDURE (SQL_DIAG_DFC_SS_BASE-17) +#define SQL_DIAG_DFC_SS_DROP_RULE (SQL_DIAG_DFC_SS_BASE-18) +#define SQL_DIAG_DFC_SS_DROP_TRIGGER (SQL_DIAG_DFC_SS_BASE-19) +#define SQL_DIAG_DFC_SS_DUMP_DATABASE (SQL_DIAG_DFC_SS_BASE-20) +#define SQL_DIAG_DFC_SS_BACKUP_DATABASE (SQL_DIAG_DFC_SS_BASE-20) +#define SQL_DIAG_DFC_SS_DUMP_TABLE (SQL_DIAG_DFC_SS_BASE-21) +#define SQL_DIAG_DFC_SS_DUMP_TRANSACTION (SQL_DIAG_DFC_SS_BASE-22) +#define SQL_DIAG_DFC_SS_BACKUP_TRANSACTION (SQL_DIAG_DFC_SS_BASE-22) +#define SQL_DIAG_DFC_SS_GOTO (SQL_DIAG_DFC_SS_BASE-23) +#define SQL_DIAG_DFC_SS_INSERT_BULK (SQL_DIAG_DFC_SS_BASE-24) +#define SQL_DIAG_DFC_SS_KILL (SQL_DIAG_DFC_SS_BASE-25) +#define SQL_DIAG_DFC_SS_LOAD_DATABASE (SQL_DIAG_DFC_SS_BASE-26) +#define SQL_DIAG_DFC_SS_RESTORE_DATABASE (SQL_DIAG_DFC_SS_BASE-26) +#define SQL_DIAG_DFC_SS_LOAD_HEADERONLY (SQL_DIAG_DFC_SS_BASE-27) +#define SQL_DIAG_DFC_SS_RESTORE_HEADERONLY (SQL_DIAG_DFC_SS_BASE-27) +#define SQL_DIAG_DFC_SS_LOAD_TABLE (SQL_DIAG_DFC_SS_BASE-28) +#define SQL_DIAG_DFC_SS_LOAD_TRANSACTION (SQL_DIAG_DFC_SS_BASE-29) +#define SQL_DIAG_DFC_SS_RESTORE_TRANSACTION (SQL_DIAG_DFC_SS_BASE-29) +#define SQL_DIAG_DFC_SS_PRINT (SQL_DIAG_DFC_SS_BASE-30) +#define SQL_DIAG_DFC_SS_RAISERROR (SQL_DIAG_DFC_SS_BASE-31) +#define SQL_DIAG_DFC_SS_READTEXT (SQL_DIAG_DFC_SS_BASE-32) +#define SQL_DIAG_DFC_SS_RECONFIGURE (SQL_DIAG_DFC_SS_BASE-33) +#define SQL_DIAG_DFC_SS_RETURN (SQL_DIAG_DFC_SS_BASE-34) +#define SQL_DIAG_DFC_SS_SELECT_INTO (SQL_DIAG_DFC_SS_BASE-35) +#define SQL_DIAG_DFC_SS_SET (SQL_DIAG_DFC_SS_BASE-36) +#define SQL_DIAG_DFC_SS_SET_IDENTITY_INSERT (SQL_DIAG_DFC_SS_BASE-37) +#define SQL_DIAG_DFC_SS_SET_ROW_COUNT (SQL_DIAG_DFC_SS_BASE-38) +#define SQL_DIAG_DFC_SS_SET_STATISTICS (SQL_DIAG_DFC_SS_BASE-39) +#define SQL_DIAG_DFC_SS_SET_TEXTSIZE (SQL_DIAG_DFC_SS_BASE-40) +#define SQL_DIAG_DFC_SS_SETUSER (SQL_DIAG_DFC_SS_BASE-41) +#define SQL_DIAG_DFC_SS_SHUTDOWN (SQL_DIAG_DFC_SS_BASE-42) +#define SQL_DIAG_DFC_SS_TRANS_BEGIN (SQL_DIAG_DFC_SS_BASE-43) +#define SQL_DIAG_DFC_SS_TRANS_COMMIT (SQL_DIAG_DFC_SS_BASE-44) +#define SQL_DIAG_DFC_SS_TRANS_PREPARE (SQL_DIAG_DFC_SS_BASE-45) +#define SQL_DIAG_DFC_SS_TRANS_ROLLBACK (SQL_DIAG_DFC_SS_BASE-46) +#define SQL_DIAG_DFC_SS_TRANS_SAVE (SQL_DIAG_DFC_SS_BASE-47) +#define SQL_DIAG_DFC_SS_TRUNCATE_TABLE (SQL_DIAG_DFC_SS_BASE-48) +#define SQL_DIAG_DFC_SS_UPDATE_STATISTICS (SQL_DIAG_DFC_SS_BASE-49) +#define SQL_DIAG_DFC_SS_UPDATETEXT (SQL_DIAG_DFC_SS_BASE-50) +#define SQL_DIAG_DFC_SS_USE (SQL_DIAG_DFC_SS_BASE-51) +#define SQL_DIAG_DFC_SS_WAITFOR (SQL_DIAG_DFC_SS_BASE-52) +#define SQL_DIAG_DFC_SS_WRITETEXT (SQL_DIAG_DFC_SS_BASE-53) +#define SQL_DIAG_DFC_SS_DENY (SQL_DIAG_DFC_SS_BASE-54) +#define SQL_DIAG_DFC_SS_SET_XCTLVL (SQL_DIAG_DFC_SS_BASE-55) +#define SQL_DIAG_DFC_SS_MERGE (SQL_DIAG_DFC_SS_BASE-56) + +// Severity codes for SQL_DIAG_SS_SEVERITY +#define EX_ANY 0 +#define EX_INFO 10 +#define EX_MAXISEVERITY EX_INFO +#define EX_MISSING 11 +#define EX_TYPE 12 +#define EX_DEADLOCK 13 +#define EX_PERMIT 14 +#define EX_SYNTAX 15 +#define EX_USER 16 +#define EX_RESOURCE 17 +#define EX_INTOK 18 +#define MAXUSEVERITY EX_INTOK +#define EX_LIMIT 19 +#define EX_CMDFATAL 20 +#define MINFATALERR EX_CMDFATAL +#define EX_DBFATAL 21 +#define EX_TABCORRUPT 22 +#define EX_DBCORRUPT 23 +#define EX_HARDWARE 24 +#define EX_CONTROL 25 +// Internal server datatypes - used when binding to SQL_C_BINARY +#ifndef MAXNUMERICLEN // Resolve ODS/DBLib conflicts +// DB-Library datatypes +#define DBMAXCHAR (8000+1) // Max length of DBVARBINARY and DBVARCHAR, etc. +1 for zero byte +#define MAXNAME (SQL_MAX_SQLSERVERNAME+1) // Max server identifier length including zero byte +#ifdef UNICODE +typedef wchar_t DBCHAR; +#else +typedef char DBCHAR; + +#endif +typedef short SQLSMALLINT; + +typedef unsigned short SQLUSMALLINT; + +typedef unsigned char DBBINARY; + +typedef unsigned char DBTINYINT; + +typedef short DBSMALLINT; + +typedef unsigned short DBUSMALLINT; + +typedef double DBFLT8; + +typedef unsigned char DBBIT; + +typedef unsigned char DBBOOL; + +typedef float DBFLT4; + +typedef DBFLT4 DBREAL; + +typedef UINT DBUBOOL; + +typedef struct dbmoney + { + LONG mnyhigh; + ULONG mnylow; + } DBMONEY; + +typedef struct dbdatetime + { + LONG dtdays; + ULONG dttime; + } DBDATETIME; + +typedef struct dbdatetime4 + { + USHORT numdays; + USHORT nummins; + } DBDATETIM4; + +typedef LONG DBMONEY4; + +#include // 8-byte structure packing + +// New Date Time Structures +// New Structure for TIME2 +typedef struct tagSS_TIME2_STRUCT +{ + SQLUSMALLINT hour; + SQLUSMALLINT minute; + SQLUSMALLINT second; + SQLUINTEGER fraction; +} SQL_SS_TIME2_STRUCT; +// New Structure for TIMESTAMPOFFSET +typedef struct tagSS_TIMESTAMPOFFSET_STRUCT +{ + SQLSMALLINT year; + SQLUSMALLINT month; + SQLUSMALLINT day; + SQLUSMALLINT hour; + SQLUSMALLINT minute; + SQLUSMALLINT second; + SQLUINTEGER fraction; + SQLSMALLINT timezone_hour; + SQLSMALLINT timezone_minute; +} SQL_SS_TIMESTAMPOFFSET_STRUCT; + +typedef struct tagDBTIME2 +{ + USHORT hour; + USHORT minute; + USHORT second; + ULONG fraction; +} DBTIME2; + +typedef struct tagDBTIMESTAMPOFFSET +{ + SHORT year; + USHORT month; + USHORT day; + USHORT hour; + USHORT minute; + USHORT second; + ULONG fraction; + SHORT timezone_hour; + SHORT timezone_minute; +} DBTIMESTAMPOFFSET; + +#include // restore original structure packing + +// Money value *10,000 +#define DBNUM_PREC_TYPE BYTE +#define DBNUM_SCALE_TYPE BYTE +#define DBNUM_VAL_TYPE BYTE + +#if (ODBCVER < 0x0300) +#define MAXNUMERICLEN 16 +typedef struct dbnumeric // Internal representation of NUMERIC data type +{ + DBNUM_PREC_TYPE precision; // Precision + DBNUM_SCALE_TYPE scale; // Scale + BYTE sign; // Sign (1 if positive, 0 if negative) + DBNUM_VAL_TYPE val[MAXNUMERICLEN];// Value +} DBNUMERIC; +typedef DBNUMERIC DBDECIMAL;// Internal representation of DECIMAL data type +#else // Use ODBC 3.0 definitions since same as DBLib +#define MAXNUMERICLEN SQL_MAX_NUMERIC_LEN +typedef SQL_NUMERIC_STRUCT DBNUMERIC; +typedef SQL_NUMERIC_STRUCT DBDECIMAL; +#endif // ODCBVER +#endif // MAXNUMERICLEN + +#ifndef INT +typedef int INT; +typedef LONG DBINT; +typedef DBINT * LPDBINT; +#ifndef _LPCBYTE_DEFINED +#define _LPCBYTE_DEFINED +typedef BYTE const* LPCBYTE; +#endif //_LPCBYTE_DEFINED +#endif // INT +/************************************************************************** +This struct is a global used for gathering statistical data on the driver. +Access to this structure is controlled via the pStatCrit; +***************************************************************************/ +typedef struct sqlperf +{ + // Application Profile Statistics + DWORD TimerResolution; + DWORD SQLidu; + DWORD SQLiduRows; + DWORD SQLSelects; + DWORD SQLSelectRows; + DWORD Transactions; + DWORD SQLPrepares; + DWORD ExecDirects; + DWORD SQLExecutes; + DWORD CursorOpens; + DWORD CursorSize; + DWORD CursorUsed; + LDOUBLE PercentCursorUsed; + LDOUBLE AvgFetchTime; + LDOUBLE AvgCursorSize; + LDOUBLE AvgCursorUsed; + DWORD SQLFetchTime; + DWORD SQLFetchCount; + DWORD CurrentStmtCount; + DWORD MaxOpenStmt; + DWORD SumOpenStmt; + // Connection Statistics + DWORD CurrentConnectionCount; + DWORD MaxConnectionsOpened; + DWORD SumConnectionsOpened; + DWORD SumConnectiontime; + LDOUBLE AvgTimeOpened; + // Network Statistics + DWORD ServerRndTrips; + DWORD BuffersSent; + DWORD BuffersRec; + DWORD BytesSent; + DWORD BytesRec; + // Time Statistics; + DWORD msExecutionTime; + DWORD msNetWorkServerTime; +} SQLPERF; +// The following are options for SQL_COPT_SS_PERF_DATA and SQL_COPT_SS_PERF_QUERY +#define SQL_PERF_START 1 // Starts the driver sampling performance data. +#define SQL_PERF_STOP 2 // Stops the counters from sampling performance data. +// The following are defines for SQL_COPT_SS_PERF_DATA_LOG +#define SQL_SS_DL_DEFAULT TEXT("STATS.LOG") +// The following are defines for SQL_COPT_SS_PERF_QUERY_LOG +#define SQL_SS_QL_DEFAULT TEXT("QUERY.LOG") +// The following are defines for SQL_COPT_SS_PERF_QUERY_INTERVAL +#define SQL_SS_QI_DEFAULT 30000 // 30,000 milliseconds + +#ifndef SQLNCLI_NO_BCP +// Define the symbol SQLNCLI_NO_BCP if you are not using BCP in your application +// and you want to exclude the BCP-related definitions in this header file. + +// ODBC BCP prototypes and defines +// Return codes +#define SUCCEED 1 +#define FAIL 0 +#define SUCCEED_ABORT 2 +#define SUCCEED_ASYNC 3 +// Transfer directions +#define DB_IN 1 // Transfer from client to server +#define DB_OUT 2 // Transfer from server to client +// bcp_control option +#define BCPMAXERRS 1 // Sets max errors allowed +#define BCPFIRST 2 // Sets first row to be copied out +#define BCPLAST 3 // Sets number of rows to be copied out +#define BCPBATCH 4 // Sets input batch size +#define BCPKEEPNULLS 5 // Sets to insert NULLs for empty input values +#define BCPABORT 6 // Sets to have bcpexec return SUCCEED_ABORT +#define BCPODBC 7 // Sets ODBC canonical character output +#define BCPKEEPIDENTITY 8 // Sets IDENTITY_INSERT on +#if SQLNCLI_VER < 1000 +#define BCP6xFILEFMT 9 // DEPRECATED: Sets 6x file format on +#endif +#define BCPHINTSA 10 // Sets server BCP hints (ANSI string) +#define BCPHINTSW 11 // Sets server BCP hints (UNICODE string) +#define BCPFILECP 12 // Sets clients code page for the file +#define BCPUNICODEFILE 13 // Sets that the file contains unicode header +#define BCPTEXTFILE 14 // Sets BCP mode to expect a text file and to detect Unicode or ANSI automatically +#define BCPFILEFMT 15 // Sets file format version +#define BCPFMTXML 16 // Sets the format file type to xml +#define BCPFIRSTEX 17 // Starting Row for BCP operation (64 bit) +#define BCPLASTEX 18 // Ending Row for BCP operation (64 bit) +#define BCPROWCOUNT 19 // Total Number of Rows Copied (64 bit) +#define BCPDELAYREADFMT 20 // Delay reading format file unil bcp_exec +// BCPFILECP values +// Any valid code page that is installed on the client can be passed plus: +#define BCPFILECP_ACP 0 // Data in file is in Windows code page +#define BCPFILECP_OEMCP 1 // Data in file is in OEM code page (default) +#define BCPFILECP_RAW (-1)// Data in file is in Server code page (no conversion) +// bcp_collen definition +#define SQL_VARLEN_DATA (-10) // Use default length for column +// BCP column format properties +#define BCP_FMT_TYPE 0x01 +#define BCP_FMT_INDICATOR_LEN 0x02 +#define BCP_FMT_DATA_LEN 0x03 +#define BCP_FMT_TERMINATOR 0x04 +#define BCP_FMT_SERVER_COL 0x05 +#define BCP_FMT_COLLATION 0x06 +#define BCP_FMT_COLLATION_ID 0x07 +// bcp_setbulkmode properties +#define BCP_OUT_CHARACTER_MODE 0x01 +#define BCP_OUT_WIDE_CHARACTER_MODE 0x02 +#define BCP_OUT_NATIVE_TEXT_MODE 0x03 +#define BCP_OUT_NATIVE_MODE 0x04 + + + +// BCP functions +DBINT SQL_API bcp_batch (HDBC); +RETCODE SQL_API bcp_bind (HDBC, LPCBYTE, INT, DBINT, LPCBYTE, INT, INT, INT); +RETCODE SQL_API bcp_colfmt (HDBC, INT, BYTE, INT, DBINT, LPCBYTE, INT, INT); +RETCODE SQL_API bcp_collen (HDBC, DBINT, INT); +RETCODE SQL_API bcp_colptr (HDBC, LPCBYTE, INT); +RETCODE SQL_API bcp_columns (HDBC, INT); +RETCODE SQL_API bcp_control (HDBC, INT, void *); +DBINT SQL_API bcp_done (HDBC); +RETCODE SQL_API bcp_exec (HDBC, LPDBINT); +RETCODE SQL_API bcp_getcolfmt (HDBC, INT, INT, void *, INT, INT *); +RETCODE SQL_API bcp_initA (HDBC, LPCSTR, LPCSTR, LPCSTR, INT); +RETCODE SQL_API bcp_initW (HDBC, LPCWSTR, LPCWSTR, LPCWSTR, INT); +RETCODE SQL_API bcp_moretext (HDBC, DBINT, LPCBYTE); +RETCODE SQL_API bcp_readfmtA (HDBC, LPCSTR); +RETCODE SQL_API bcp_readfmtW (HDBC, LPCWSTR); +RETCODE SQL_API bcp_sendrow (HDBC); +RETCODE SQL_API bcp_setbulkmode (HDBC, INT, __in_bcount(cbField) void*, INT cbField, __in_bcount(cbRow) void *, INT cbRow); +RETCODE SQL_API bcp_setcolfmt (HDBC, INT, INT, void *, INT); +RETCODE SQL_API bcp_writefmtA (HDBC, LPCSTR); +RETCODE SQL_API bcp_writefmtW (HDBC, LPCWSTR); +CHAR* SQL_API dbprtypeA (INT); +WCHAR* SQL_API dbprtypeW (INT); +CHAR* SQL_API bcp_gettypenameA (INT, DBBOOL); +WCHAR* SQL_API bcp_gettypenameW (INT, DBBOOL); + +#ifdef UNICODE +#define bcp_init bcp_initW +#define bcp_readfmt bcp_readfmtW +#define bcp_writefmt bcp_writefmtW +#define dbprtype dbprtypeW +#define bcp_gettypename bcp_gettypenameW +#define BCPHINTS BCPHINTSW +#else +#define bcp_init bcp_initA +#define bcp_readfmt bcp_readfmtA +#define bcp_writefmt bcp_writefmtA +#define dbprtype dbprtypeA +#define bcp_gettypename bcp_gettypenameA +#define BCPHINTS BCPHINTSA +#endif // UNICODE + +#endif // SQLNCLI_NO_BCP + +// The following options have been deprecated +#define SQL_FAST_CONNECT (SQL_COPT_SS_BASE+0) +// Defines for use with SQL_FAST_CONNECT - only useable before connecting +#define SQL_FC_OFF 0L // Fast connect is off +#define SQL_FC_ON 1L // Fast connect is on +#define SQL_FC_DEFAULT SQL_FC_OFF +#define SQL_COPT_SS_ANSI_OEM (SQL_COPT_SS_BASE+6) +#define SQL_AO_OFF 0L +#define SQL_AO_ON 1L +#define SQL_AO_DEFAULT SQL_AO_OFF +#define SQL_CA_SS_BASE_COLUMN_NAME SQL_DESC_BASE_COLUMN_NAME + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // ODBCVER + + + +#ifdef __cplusplus +extern "C" { +#endif +#include + +//The following facilitates opening a handle to a SQL filestream +typedef enum _SQL_FILESTREAM_DESIRED_ACCESS { + SQL_FILESTREAM_READ = 0, + SQL_FILESTREAM_WRITE = 1, + SQL_FILESTREAM_READWRITE = 2 +} SQL_FILESTREAM_DESIRED_ACCESS; +#define SQL_FILESTREAM_OPEN_FLAG_ASYNC 0x00000001L +#define SQL_FILESTREAM_OPEN_FLAG_NO_BUFFERING 0x00000002L +#define SQL_FILESTREAM_OPEN_FLAG_NO_WRITE_THROUGH 0x00000004L +#define SQL_FILESTREAM_OPEN_FLAG_SEQUENTIAL_SCAN 0x00000008L +#define SQL_FILESTREAM_OPEN_FLAG_RANDOM_ACCESS 0x00000010L + + +HANDLE __stdcall OpenSqlFilestream ( + LPCWSTR FilestreamPath, + SQL_FILESTREAM_DESIRED_ACCESS DesiredAccess, + ULONG OpenOptions, + __in_bcount(FilestreamTransactionContextLength) + LPBYTE FilestreamTransactionContext, + SSIZE_T FilestreamTransactionContextLength, + PLARGE_INTEGER AllocationSize); +#define FSCTL_SQL_FILESTREAM_FETCH_OLD_CONTENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2392, METHOD_BUFFERED, FILE_ANY_ACCESS) + +#ifdef __cplusplus +} // extern "C" +#endif + + +#endif //__sqlncli_h__ + +#define SQL_COPT_SS_CONNECT_RETRY_COUNT (SQL_COPT_SS_BASE+34) // Post connection attribute used to get ConnectRetryCount +#define SQL_COPT_SS_CONNECT_RETRY_INTERVAL (SQL_COPT_SS_BASE+35) // Post connection attribute used to get ConnectRetryInterval +#ifdef SQL_COPT_SS_MAX_USED +#undef SQL_COPT_SS_MAX_USED +#endif // SQL_COPT_SS_MAX_USED +#define SQL_COPT_SS_MAX_USED SQL_COPT_SS_CONNECT_RETRY_INTERVAL + + +#ifndef _SQLUSERINSTANCE_H_ +#define _SQLUSERINSTANCE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +// Recommended buffer size to store a LocalDB connection string +#define LOCALDB_MAX_SQLCONNECTION_BUFFER_SIZE 260 + +// type definition for LocalDBCreateInstance function +typedef HRESULT __cdecl FnLocalDBCreateInstance ( + // I the LocalDB version (e.g. 11.0 or 11.0.1094.2) + __in_z PCWSTR wszVersion, + // I the instance name + __in_z PCWSTR pInstanceName, + // I reserved for the future use. Currently should be set to 0. + __in DWORD dwFlags +); + +// type definition for pointer to LocalDBCreateInstance function +typedef FnLocalDBCreateInstance* PFnLocalDBCreateInstance; + +// type definition for LocalDBStartInstance function +typedef HRESULT __cdecl FnLocalDBStartInstance ( + // I the LocalDB instance name + __in_z PCWSTR pInstanceName, + // I reserved for the future use. Currently should be set to 0. + __in DWORD dwFlags, + // O the buffer to store the connection string to the LocalDB instance + __out_ecount_z_opt(*lpcchSqlConnection) LPWSTR wszSqlConnection, + // I/O on input has the size of the wszSqlConnection buffer in characters. On output, if the given buffer size is + // too small, has the buffer size required, in characters, including trailing null. + __inout_opt LPDWORD lpcchSqlConnection +); + +// type definition for pointer to LocalDBStartInstance function +typedef FnLocalDBStartInstance* PFnLocalDBStartInstance; + +// Flags for the LocalDBFormatMessage function +#define LOCALDB_TRUNCATE_ERR_MESSAGE 0x0001L + +// type definition for LocalDBFormatMessage function +typedef HRESULT __cdecl FnLocalDBFormatMessage( + // I the LocalDB error code + __in HRESULT hrLocalDB, + // I Available flags: + // LOCALDB_TRUNCATE_ERR_MESSAGE - if the input buffer is too short, + // the error message will be truncated to fit into the buffer + __in DWORD dwFlags, + // I Language desired (LCID) or 0 (in which case Win32 FormatMessage order is used) + __in DWORD dwLanguageId, + // O the buffer to store the LocalDB error message + __out_ecount_z(*lpcchMessage) LPWSTR wszMessage, + // I/O on input has the size of the wszMessage buffer in characters. On output, if the given buffer size is + // too small, has the buffer size required, in characters, including trailing null. If the function succeeds + // contains the number of characters in the message, excluding the trailing null + __inout LPDWORD lpcchMessage +); + +// type definition for function pointer to LocalDBFormatMessage function +typedef FnLocalDBFormatMessage* PFnLocalDBFormatMessage; + + +// MessageId: LOCALDB_ERROR_NOT_INSTALLED +// +// MessageText: +// +// LocalDB is not installed. +// +#define LOCALDB_ERROR_NOT_INSTALLED ((HRESULT)0x89C50116L) + +//--------------------------------------------------------------------- +// Function: LocalDBCreateInstance +// +// Description: This function will create the new LocalDB instance. +// +// Available Flags: +// No flags available. Reserved for future use. +// +// Return Values: +// S_OK, if the function succeeds +// LOCALDB_ERROR_INVALID_PARAM_INSTANCE_NAME, if the instance name parameter is invalid +// LOCALDB_ERROR_INVALID_PARAM_VERSION, if the version parameter is invalid +// LOCALDB_ERROR_INVALID_PARAM_FLAGS, if the flags are invalid +// LOCALDB_ERROR_INVALID_OPERATION, if the user tries to create a default instance +// LOCALDB_ERROR_INSTANCE_FOLDER_PATH_TOO_LONG, if the path where instance should be stored is longer than MAX_PATH +// LOCALDB_ERROR_VERSION_REQUESTED_NOT_INSTALLED, if the specified service level is not installed +// LOCALDB_ERROR_INSTANCE_FOLDER_ALREADY_EXISTS, if the instance folder already exists and is not empty +// LOCALDB_ERROR_INSTANCE_EXISTS_WITH_LOWER_VERSION, if the specified instance already exists but with lower version +// LOCALDB_ERROR_CANNOT_CREATE_INSTANCE_FOLDER, if a folder cannot be created under %userprofile% +// LOCALDB_ERROR_CANNOT_GET_USER_PROFILE_FOLDER, if a user profile folder cannot be retrieved +// LOCALDB_ERROR_CANNOT_ACCESS_INSTANCE_FOLDER, if a instance folder cannot be accessed +// LOCALDB_ERROR_CANNOT_ACCESS_INSTANCE_REGISTRY, if a instance registry cannot be accessed +// LOCALDB_ERROR_INTERNAL_ERROR, if an unexpected error occurred. See event log for details +// LOCALDB_ERROR_CANNOT_MODIFY_INSTANCE_REGISTRY, if an instance registry cannot be modified +// LOCALDB_ERROR_CANNOT_CREATE_SQL_PROCESS, if a process for Sql Server cannot be created +// LOCALDB_ERROR_SQL_SERVER_STARTUP_FAILED, if a Sql Server process is started but Sql Server startup failed. +// LOCALDB_ERROR_INSTANCE_CONFIGURATION_CORRUPT, if a instance configuration is corrupted +// +FnLocalDBCreateInstance LocalDBCreateInstance; + +//--------------------------------------------------------------------- +// Function: LocalDBStartInstance +// +// Description: This function will start the given LocalDB instance. +// +// Return Values: +// S_OK, if the function succeeds +// LOCALDB_ERROR_UNKNOWN_INSTANCE, if the specified instance doesn't exist +// LOCALDB_ERROR_INVALID_PARAM_INSTANCE_NAME, if the instance name parameter is invalid +// LOCALDB_ERROR_INVALID_PARAM_CONNECTION, if the wszSqlConnection parameter is NULL +// LOCALDB_ERROR_INVALID_PARAM_FLAGS, if the flags are invalid +// LOCALDB_ERROR_INSUFFICIENT_BUFFER, if the buffer wszSqlConnection is too small +// LOCALDB_ERROR_INSTANCE_FOLDER_PATH_TOO_LONG, if the path where instance should be stored is longer than MAX_PATH + +// LOCALDB_ERROR_CANNOT_GET_USER_PROFILE_FOLDER, if a user profile folder cannot be retrieved +// LOCALDB_ERROR_CANNOT_ACCESS_INSTANCE_FOLDER, if a instance folder cannot be accessed +// LOCALDB_ERROR_CANNOT_ACCESS_INSTANCE_REGISTRY, if a instance registry cannot be accessed +// LOCALDB_ERROR_INTERNAL_ERROR, if an unexpected error occurred. See event log for details +// LOCALDB_ERROR_CANNOT_MODIFY_INSTANCE_REGISTRY, if an instance registry cannot be modified +// LOCALDB_ERROR_CANNOT_CREATE_SQL_PROCESS, if a process for Sql Server cannot be created +// LOCALDB_ERROR_SQL_SERVER_STARTUP_FAILED, if a Sql Server process is started but Sql Server startup failed. +// LOCALDB_ERROR_INSTANCE_CONFIGURATION_CORRUPT, if a instance configuration is corrupted +// +FnLocalDBStartInstance LocalDBStartInstance; + +// type definition for LocalDBStopInstance function +typedef HRESULT __cdecl FnLocalDBStopInstance ( + // I the LocalDB instance name + __in_z PCWSTR pInstanceName, + // I Available flags: + // LOCALDB_SHUTDOWN_KILL_PROCESS - force the instance to stop immediately + // LOCALDB_SHUTDOWN_WITH_NOWAIT - shutdown the instance with NOWAIT option + __in DWORD dwFlags, + // I the time in seconds to wait this operation to complete. If this value is 0, this function will return immediately + // without waiting for LocalDB instance to stop + __in ULONG ulTimeout +); + +// type definition for pointer to LocalDBStopInstance function +typedef FnLocalDBStopInstance* PFnLocalDBStopInstance; + +// Flags for the StopLocalDBInstance function +#define LOCALDB_SHUTDOWN_KILL_PROCESS 0x0001L +#define LOCALDB_SHUTDOWN_WITH_NOWAIT 0x0002L + +//--------------------------------------------------------------------- +// Function: LocalDBStopInstance +// +// Description: This function will shutdown the given LocalDB instance. +// If the flag LOCALDB_SHUTDOWN_KILL_PROCESS is set, the LocalDB instance will be killed immediately. +// IF the flag LOCALDB_SHUTDOWN_WITH_NOWAIT is set, the LocalDB instance will shutdown with NOWAIT option. +// +// Return Values: +// S_OK, if the function succeeds +// LOCALDB_ERROR_UNKNOWN_INSTANCE, if the specified instance doesn't exist +// LOCALDB_ERROR_INVALID_PARAM_INSTANCE_NAME, if the instance name parameter is invalid +// LOCALDB_ERROR_INVALID_PARAM_FLAGS, if the flags are invalid +// LOCALDB_ERROR_WAIT_TIMEOUT - if this function has not finished in given time +// LOCALDB_ERROR_INTERNAL_ERROR, if an unexpected error occurred. See event log for details +// +FnLocalDBStopInstance LocalDBStopInstance; + +// type definition for LocalDBDeleteInstance function +typedef HRESULT __cdecl FnLocalDBDeleteInstance ( + // I the LocalDB instance name + __in_z PCWSTR pInstanceName, + // I reserved for the future use. Currently should be set to 0. + __in DWORD dwFlags +); + +// type definition for pointer to LocalDBDeleteInstance function +typedef FnLocalDBDeleteInstance* PFnLocalDBDeleteInstance; + +//--------------------------------------------------------------------- +// Function: LocalDBDeleteInstance +// +// Description: This function will remove the given LocalDB instance. If the given instance is running this function will +// fail with the error code LOCALDB_ERROR_INSTANCE_BUSY. +// +// Return Values: +// S_OK, if the function succeeds +// LOCALDB_ERROR_INVALID_PARAM_INSTANCE_NAME, if the instance name parameter is invalid +// LOCALDB_ERROR_INVALID_PARAM_FLAGS, if the flags are invalid +// LOCALDB_ERROR_UNKNOWN_INSTANCE, if the specified instance doesn't exist +// LOCALDB_ERROR_INSTANCE_BUSY, if the given instance is running +// LOCALDB_ERROR_INTERNAL_ERROR, if an unexpected error occurred. See event log for details +// +FnLocalDBDeleteInstance LocalDBDeleteInstance; + +// Function: LocalDBFormatMessage +// +// Description: This function will return the localized textual description for the given LocalDB error +// +// Available Flags: +// LOCALDB_TRUNCATE_ERR_MESSAGE - the error message should be truncated to fit into the provided buffer +// +// Return Value: +// S_OK, if the function succeeds +// +// LOCALDB_ERROR_UNKNOWN_HRESULT, if the given HRESULT is unknown +// LOCALDB_ERROR_UNKNOWN_LANGUAGE_ID, if the given language id is unknown (0 is recommended for the // default language) +// LOCALDB_ERROR_UNKNOWN_ERROR_CODE, if the LocalDB error code is unknown +// LOCALDB_ERROR_INVALID_PARAM_FLAGS, if the flags are invalid +// LOCALDB_ERROR_INSUFFICIENT_BUFFER, if the input buffer is too short and LOCALDB_TRUNCATE_ERR_MESSAGE flag +// is not set +// LOCALDB_ERROR_INTERNAL_ERROR, if an unexpected error occurred. See event log for details +// +FnLocalDBFormatMessage LocalDBFormatMessage; + +#define MAX_LOCALDB_INSTANCE_NAME_LENGTH 128 +#define MAX_LOCALDB_PARENT_INSTANCE_LENGTH MAX_INSTANCE_NAME + +typedef WCHAR TLocalDBInstanceName[MAX_LOCALDB_INSTANCE_NAME_LENGTH + 1]; +typedef TLocalDBInstanceName* PTLocalDBInstanceName; + +// type definition for LocalDBGetInstances function +typedef HRESULT __cdecl FnLocalDBGetInstances( + // O buffer for a LocalDB instance names + __out PTLocalDBInstanceName pInstanceNames, + // I/O on input has the number slots for instance names in the pInstanceNames buffer. On output, + // has the number of existing LocalDB instances + __inout LPDWORD lpdwNumberOfInstances +); + +// type definition for pointer to LocalDBGetInstances function +typedef FnLocalDBGetInstances* PFnLocalDBGetInstances; + +// Function: LocalDBGetInstances +// +// Description: This function returns names for all existing Local DB instances +// +// Usage Example: +// DWORD dwN = 0; +// LocalDBGetInstances(NULL, &dwN); + +// PTLocalDBInstanceName insts = (PTLocalDBInstanceName) malloc(dwN * sizeof(TLocalDBInstanceName)); +// LocalDBGetInstances(insts, &dwN); + +// for (int i = 0; i < dwN; i++) +// wprintf(L"%s\n", insts[i]); +// +// Return values: +// S_OK, if the function succeeds +// +// LOCALDB_ERROR_INSUFFICIENT_BUFFER, the given buffer is to small +// LOCALDB_ERROR_INTERNAL_ERROR, if an unexpected error occurred. See event log for details +// +FnLocalDBGetInstances LocalDBGetInstances; + +// SID string format: S - Revision(1B) - Authority ID (6B) {- Sub authority ID (4B)} * max 15 sub-authorities = 1 + 1 + 3 + 1 + 15 + (1 + 10) * 15 +#define MAX_STRING_SID_LENGTH 186 + +#pragma pack(push) +#pragma pack(8) + +// DEVNOTE: If you want to modify this structure please read DEVNOTEs on top of function LocalDBGetInstanceInfo in sqluserinstance.cpp file. +// +typedef struct _LocalDBInstanceInfo +{ + DWORD cbLocalDBInstanceInfoSize; + TLocalDBInstanceName wszInstanceName; + BOOL bExists; + BOOL bConfigurationCorrupted; + BOOL bIsRunning; + DWORD dwMajor; + DWORD dwMinor; + DWORD dwBuild; + DWORD dwRevision; + FILETIME ftLastStartDateUTC; + WCHAR wszConnection[LOCALDB_MAX_SQLCONNECTION_BUFFER_SIZE]; + BOOL bIsShared; + TLocalDBInstanceName wszSharedInstanceName; + WCHAR wszOwnerSID[MAX_STRING_SID_LENGTH + 1]; + BOOL bIsAutomatic; +} LocalDBInstanceInfo; + +#pragma pack(pop) + +typedef LocalDBInstanceInfo* PLocalDBInstanceInfo; + +// type definition for LocalDBGetInstanceInfo function +typedef HRESULT __cdecl FnLocalDBGetInstanceInfo( + // I the LocalDB instance name + __in_z PCWSTR wszInstanceName, + // O instance information + __out PLocalDBInstanceInfo pInfo, + // I Size of LocalDBInstanceInfo structure in bytes + __in DWORD cbInfo); + +// type definition for pointer to LocalDBGetInstances function +typedef FnLocalDBGetInstanceInfo* PFnLocalDBGetInstanceInfo; + +// Function: LocalDBGetInstanceInfo +// +// Description: This function returns information about the given instance. +// +// Return values: +// S_OK, if the function succeeds +// +// ERROR_INVALID_PARAMETER, if some of the parameters is invalid +// LOCALDB_ERROR_INTERNAL_ERROR, if an unexpected error occurred. See event log for details +// +FnLocalDBGetInstanceInfo LocalDBGetInstanceInfo; + +// Version has format: Major.Minor[.Build[.Revision]]. Each of components is 32bit integer which is at most 40 digits and 3 dots +// +#define MAX_LOCALDB_VERSION_LENGTH 43 + +typedef WCHAR TLocalDBVersion[MAX_LOCALDB_VERSION_LENGTH + 1]; +typedef TLocalDBVersion* PTLocalDBVersion; + +// type definition for LocalDBGetVersions function +typedef HRESULT __cdecl FnLocalDBGetVersions( + // O buffer for installed LocalDB versions + __out PTLocalDBVersion pVersions, + // I/O on input has the number slots for versions in the pVersions buffer. On output, + // has the number of existing LocalDB versions + __inout LPDWORD lpdwNumberOfVersions +); + +// type definition for pointer to LocalDBGetVersions function +typedef FnLocalDBGetVersions* PFnLocalDBGetVersions; + +// Function: LocalDBGetVersions +// +// Description: This function returns all installed LocalDB versions. Returned versions will be in format Major.Minor +// +// Usage Example: +// DWORD dwN = 0; +// LocalDBGetVersions(NULL, &dwN); + +// PTLocalDBVersion versions = (PTLocalDBVersion) malloc(dwN * sizeof(TLocalDBVersion)); +// LocalDBGetVersions(insts, &dwN); + +// for (int i = 0; i < dwN; i++) +// wprintf(L"%s\n", insts[i]); +// +// Return values: +// S_OK, if the function succeeds +// +// LOCALDB_ERROR_INSUFFICIENT_BUFFER, the given buffer is to small +// LOCALDB_ERROR_INTERNAL_ERROR, if an unexpected error occurs. +// +FnLocalDBGetVersions LocalDBGetVersions; + +#pragma pack(push) +#pragma pack(8) + +// DEVNOTE: If you want to modify this structure please read DEVNOTEs on top of function LocalDBGetVersionInfo in sqluserinstance.cpp file. +// +typedef struct _LocalDBVersionInfo +{ + DWORD cbLocalDBVersionInfoSize; + TLocalDBVersion wszVersion; + BOOL bExists; + DWORD dwMajor; + DWORD dwMinor; + DWORD dwBuild; + DWORD dwRevision; +} LocalDBVersionInfo; + +#pragma pack(pop) + +typedef LocalDBVersionInfo* PLocalDBVersionInfo; + +// type definition for LocalDBGetVersionInfo function +typedef HRESULT __cdecl FnLocalDBGetVersionInfo( + // I LocalDB version string + __in_z PCWSTR wszVersion, + // O version information + __out PLocalDBVersionInfo pVersionInfo, + // I Size of LocalDBVersionInfo structure in bytes + __in DWORD cbVersionInfo +); + +// type definition for pointer to LocalDBGetVersionInfo function +typedef FnLocalDBGetVersionInfo* PFnLocalDBGetVersionInfo; + +// Function: LocalDBGetVersionInfo +// +// Description: This function returns information about the given LocalDB version +// +// Return values: +// S_OK, if the function succeeds +// LOCALDB_ERROR_INTERNAL_ERROR, if some internal error occurred +// LOCALDB_ERROR_INVALID_PARAMETER, if a input parameter is invalid +// +FnLocalDBGetVersionInfo LocalDBGetVersionInfo; + +typedef HRESULT __cdecl FnLocalDBStartTracing(); +typedef FnLocalDBStartTracing* PFnLocalDBStartTracing; + +// Function: LocalDBStartTracing +// +// Description: This function will write in registry that Tracing sessions should be started for the current user. +// +// Return values: +// S_OK - on success +// Propper HRESULT in case of failure +// +FnLocalDBStartTracing LocalDBStartTracing; + +typedef HRESULT __cdecl FnLocalDBStopTracing(); +typedef FnLocalDBStopTracing* PFnFnLocalDBStopTracing; + +// Function: LocalDBStopTracing +// +// Description: This function will write in registry that Tracing sessions should be stopped for the current user. +// +// Return values: +// S_OK - on success +// Propper HRESULT in case of failure +// +FnLocalDBStopTracing LocalDBStopTracing; + +// type definition for LocalDBShareInstance function +typedef HRESULT __cdecl FnLocalDBShareInstance( + // I the SID of the LocalDB instance owner + __in_opt PSID pOwnerSID, + // I the private name of LocalDB instance which should be shared + __in_z PCWSTR wszPrivateLocalDBInstanceName, + // I the public shared name + __in_z PCWSTR wszSharedName, + // I reserved for the future use. Currently should be set to 0. + __in DWORD dwFlags); + +// type definition for pointer to LocalDBShareInstance function +typedef FnLocalDBShareInstance* PFnLocalDBShareInstance; + +// Function: LocalDBShareInstance +// +// Description: This function will share the given private instance of the given user with the given shared name. +// This function has to be executed elevated. +// +// Return values: +// HRESULT +// +FnLocalDBShareInstance LocalDBShareInstance; + +// type definition for LocalDBUnshareInstance function +typedef HRESULT __cdecl FnLocalDBUnshareInstance( + // I the LocalDB instance name + __in_z PCWSTR pInstanceName, + // I reserved for the future use. Currently should be set to 0. + __in DWORD dwFlags); + +// type definition for pointer to LocalDBUnshareInstance function +typedef FnLocalDBUnshareInstance* PFnLocalDBUnshareInstance; + +// Function: LocalDBUnshareInstance +// +// Description: This function unshares the given LocalDB instance. +// If a shared name is given then that shared instance will be unshared. +// If a private name is given then we will check if the caller +// shares a private instance with the given private name and unshare it. +// +// Return values: +// HRESULT +// +FnLocalDBUnshareInstance LocalDBUnshareInstance; + +#ifdef __cplusplus +} // extern "C" +#endif + +#if defined(LOCALDB_DEFINE_PROXY_FUNCTIONS) +//--------------------------------------------------------------------- +// The following section is enabled only if the constant LOCALDB_DEFINE_PROXY_FUNCTIONS +// is defined. It provides an implementation of proxies for each of the LocalDB APIs. +// The proxy implementations use a common function to bind to entry points in the +// latest installed SqlUserInstance DLL, and then forward the requests. +// +// The current implementation loads the SqlUserInstance DLL on the first call into +// a proxy function. There is no provision for unloading the DLL. Note that if the +// process includes multiple binaries (EXE and one or more DLLs), each of them could +// load a separate instance of the SqlUserInstance DLL. +// +// For future consideration: allow the SqlUserInstance DLL to be unloaded dynamically. +// +// WARNING: these functions must not be called in DLL initialization, since a deadlock +// could result loading dependent DLLs. +//--------------------------------------------------------------------- + +// This macro provides the body for each proxy function. +// +#define LOCALDB_PROXY(LocalDBFn) static Fn##LocalDBFn* pfn##LocalDBFn = NULL; if (!pfn##LocalDBFn) {HRESULT hr = LocalDBGetPFn(#LocalDBFn, (FARPROC *)&pfn##LocalDBFn); if (FAILED(hr)) return hr;} return (*pfn##LocalDBFn) + +// Structure and function to parse the "Installed Versions" registry subkeys +// +typedef struct { + DWORD dwComponent[2]; + WCHAR wszKeyName[256]; +} Version; + +// The following algorithm is intended to match, in part, the .NET Version class. +// A maximum of two components are allowed, which must be separated with a period. +// Valid: "11", "11.0" +// Invalid: "", ".0", "11.", "11.0." +// +static BOOL ParseVersion(Version * pVersion) +{ + pVersion->dwComponent[0] = 0; + pVersion->dwComponent[1] = 0; + WCHAR * pwch = pVersion->wszKeyName; + + for (int i = 0; i<2; i++) + { + LONGLONG llVal = 0; + BOOL fHaveDigit = FALSE; + + while (*pwch >= L'0' && *pwch <= L'9') + { + llVal = llVal * 10 + (*pwch++ - L'0'); + fHaveDigit = TRUE; + + if (llVal > 0x7fffffff) + { + return FALSE; + } + } + + if (!fHaveDigit) + return FALSE; + + pVersion->dwComponent[i] = (DWORD) llVal; + + if (*pwch == L'\0') + return TRUE; + + if (*pwch != L'.') + return FALSE; + + pwch++; + } + // If we get here, the version string was terminated with L'.', which is not valid + // + return FALSE; +} + +#include + +// This function loads the correct LocalDB API DLL (if required) and returns a pointer to a procedure. +// Note that the first-loaded API DLL for the process will be used until process termination: installation of +// a new version of the API will not be recognized after first load. +// +static HRESULT LocalDBGetPFn(LPCSTR szLocalDBFn, FARPROC *pfnLocalDBFn) +{ + static volatile HMODULE hLocalDBDll = NULL; + + if (!hLocalDBDll) + { + LONG ec; + HKEY hkeyVersions = NULL; + HKEY hkeyVersion = NULL; + Version verHigh = {0}; + Version verCurrent; + DWORD cchKeyName; + DWORD dwValueType; + WCHAR wszLocalDBDll[MAX_PATH+1]; + DWORD cbLocalDBDll = sizeof(wszLocalDBDll) - sizeof(WCHAR); // to deal with RegQueryValueEx null-termination quirk + HMODULE hLocalDBDllTemp = NULL; + + if (ERROR_SUCCESS != (ec = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Microsoft SQL Server Local DB\\Installed Versions", 0, KEY_READ, &hkeyVersions))) + { + goto Cleanup; + } + + for (int i = 0; ; i++) + { + cchKeyName = 256; + if (ERROR_SUCCESS != (ec = RegEnumKeyExW(hkeyVersions, i, verCurrent.wszKeyName, &cchKeyName, 0, NULL, NULL, NULL))) + { + if (ERROR_NO_MORE_ITEMS == ec) + { + break; + } + goto Cleanup; + } + + if (!ParseVersion(&verCurrent)) + { + continue; // invalid version syntax + } + + if (verCurrent.dwComponent[0] > verHigh.dwComponent[0] || + (verCurrent.dwComponent[0] == verHigh.dwComponent[0] && verCurrent.dwComponent[1] > verHigh.dwComponent[1])) + { + verHigh = verCurrent; + } + } + if (!verHigh.wszKeyName[0]) + { + // ec must be ERROR_NO_MORE_ITEMS here + // + assert(ec == ERROR_NO_MORE_ITEMS); + + // We will change the error code to ERROR_FILE_NOT_FOUND in order to indicate that + // LocalDB instalation is not found. Registry key "SOFTWARE\\Microsoft\\Microsoft SQL Server Local DB\\Installed Versions" exists + // but it is empty. + // + ec = ERROR_FILE_NOT_FOUND; + goto Cleanup; + } + + if (ERROR_SUCCESS != (ec = RegOpenKeyExW(hkeyVersions, verHigh.wszKeyName, 0, KEY_READ, &hkeyVersion))) + { + goto Cleanup; + } + if (ERROR_SUCCESS != (ec = RegQueryValueExW(hkeyVersion, L"InstanceAPIPath", NULL, &dwValueType, (PBYTE) wszLocalDBDll, &cbLocalDBDll))) + { + goto Cleanup; + } + if (dwValueType != REG_SZ) + { + ec = ERROR_INVALID_DATA; + goto Cleanup; + } + // Ensure string value null-terminated + // Note that we left a spare character in the output buffer for RegQueryValueEx for this purpose + // + wszLocalDBDll[cbLocalDBDll/sizeof(WCHAR)] = L'\0'; + + hLocalDBDllTemp = LoadLibraryW(wszLocalDBDll); + if (NULL == hLocalDBDllTemp) + { + ec = GetLastError(); + goto Cleanup; + } + if (NULL == InterlockedCompareExchangePointer((volatile PVOID *)&hLocalDBDll, hLocalDBDllTemp, NULL)) + { + // We were the winner: we gave away our DLL handle + // + hLocalDBDllTemp = NULL; + } + ec = ERROR_SUCCESS; +Cleanup: + if (hLocalDBDllTemp) + FreeLibrary(hLocalDBDllTemp); + if (hkeyVersion) + RegCloseKey(hkeyVersion); + if (hkeyVersions) + RegCloseKey(hkeyVersions); + + // Error code ERROR_FILE_NOT_FOUND can occure if registry hive with installed LocalDB versions is missing. + // In that case we should return the LocalDB specific error code + // + if (ec == ERROR_FILE_NOT_FOUND) + return LOCALDB_ERROR_NOT_INSTALLED; + + if (ec != ERROR_SUCCESS) + return HRESULT_FROM_WIN32(ec); + } + + FARPROC pfn = GetProcAddress(hLocalDBDll, szLocalDBFn); + + if (!pfn) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + *pfnLocalDBFn = pfn; + return S_OK; +} + +// The following proxy functions forward calls to the latest LocalDB API DLL. +// + +HRESULT __cdecl +LocalDBCreateInstance ( + // I the LocalDB version (e.g. 11.0 or 11.0.1094.2) + __in_z PCWSTR wszVersion, + // I the instance name + __in_z PCWSTR pInstanceName, + // I reserved for the future use. Currently should be set to 0. + __in DWORD dwFlags +) +{ + LOCALDB_PROXY(LocalDBCreateInstance)(wszVersion, pInstanceName, dwFlags); +} + +HRESULT __cdecl +LocalDBStartInstance( + // I the instance name + __in_z PCWSTR pInstanceName, + // I reserved for the future use. Currently should be set to 0. + __in DWORD dwFlags, + // O the buffer to store the connection string to the LocalDB instance + __out_ecount_z_opt(*lpcchSqlConnection) LPWSTR wszSqlConnection, + // I/O on input has the size of the wszSqlConnection buffer in characters. On output, if the given buffer size is + // too small, has the buffer size required, in characters, including trailing null. + __inout_opt LPDWORD lpcchSqlConnection +) +{ + LOCALDB_PROXY(LocalDBStartInstance)(pInstanceName, dwFlags, wszSqlConnection, lpcchSqlConnection); +} + +HRESULT __cdecl +LocalDBStopInstance ( + // I the instance name + __in_z PCWSTR pInstanceName, + // I Available flags: + // LOCALDB_SHUTDOWN_KILL_PROCESS - force the instance to stop immediately + // LOCALDB_SHUTDOWN_WITH_NOWAIT - shutdown the instance with NOWAIT option + __in DWORD dwFlags, + // I the time in seconds to wait this operation to complete. If this value is 0, this function will return immediately + // without waiting for LocalDB instance to stop + __in ULONG ulTimeout +) +{ + LOCALDB_PROXY(LocalDBStopInstance)(pInstanceName, dwFlags, ulTimeout); +} + +HRESULT __cdecl +LocalDBDeleteInstance ( + // I the instance name + __in_z PCWSTR pInstanceName, + // reserved for the future use. Currently should be set to 0. + __in DWORD dwFlags +) +{ + LOCALDB_PROXY(LocalDBDeleteInstance)(pInstanceName, dwFlags); +} + +HRESULT __cdecl +LocalDBFormatMessage( + // I the LocalDB error code + __in HRESULT hrLocalDB, + // I Available flags: + // LOCALDB_TRUNCATE_ERR_MESSAGE - if the input buffer is too short, + // the error message will be truncated to fit into the buffer + __in DWORD dwFlags, + // I Language desired (LCID) or 0 (in which case Win32 FormatMessage order is used) + __in DWORD dwLanguageId, + // O the buffer to store the LocalDB error message + __out_ecount_z(*lpcchMessage) LPWSTR wszMessage, + // I/O on input has the size of the wszMessage buffer in characters. On output, if the given buffer size is + // too small, has the buffer size required, in characters, including trailing null. If the function succeeds + // contains the number of characters in the message, excluding the trailing null + __inout LPDWORD lpcchMessage +) +{ + LOCALDB_PROXY(LocalDBFormatMessage)(hrLocalDB, dwFlags, dwLanguageId, wszMessage, lpcchMessage); +} + +HRESULT __cdecl +LocalDBGetInstances( + // O buffer with instance names + __out PTLocalDBInstanceName pInstanceNames, + // I/O on input has the number slots for instance names in the pInstanceNames buffer. On output, + // has the number of existing LocalDB instances + __inout LPDWORD lpdwNumberOfInstances +) +{ + LOCALDB_PROXY(LocalDBGetInstances)(pInstanceNames, lpdwNumberOfInstances); +} + +HRESULT __cdecl +LocalDBGetInstanceInfo( + // I the instance name + __in_z PCWSTR wszInstanceName, + // O instance information + __out PLocalDBInstanceInfo pInfo, + // I Size of LocalDBInstanceInfo structure in bytes + __in DWORD cbInfo +) +{ + LOCALDB_PROXY(LocalDBGetInstanceInfo)(wszInstanceName, pInfo, cbInfo); +} + +HRESULT __cdecl +LocalDBStartTracing() +{ + LOCALDB_PROXY(LocalDBStartTracing)(); +} + +HRESULT __cdecl +LocalDBStopTracing() +{ + LOCALDB_PROXY(LocalDBStopTracing)(); +} + +HRESULT __cdecl +LocalDBShareInstance( + // I the SID of the LocalDB instance owner + __in_opt PSID pOwnerSID, + // I the private name of LocalDB instance which should be shared + __in_z PCWSTR wszLocalDBInstancePrivateName, + // I the public shared name + __in_z PCWSTR wszSharedName, + // I reserved for the future use. Currently should be set to 0. + __in DWORD dwFlags) +{ + LOCALDB_PROXY(LocalDBShareInstance)(pOwnerSID, wszLocalDBInstancePrivateName, wszSharedName, dwFlags); +} + +HRESULT __cdecl +LocalDBGetVersions( + // O buffer for installed LocalDB versions + __out PTLocalDBVersion pVersions, + // I/O on input has the number slots for versions in the pVersions buffer. On output, + // has the number of existing LocalDB versions + __inout LPDWORD lpdwNumberOfVersions +) +{ + LOCALDB_PROXY(LocalDBGetVersions)(pVersions, lpdwNumberOfVersions); +} + +HRESULT __cdecl +LocalDBUnshareInstance( + // I the LocalDB instance name + __in_z PCWSTR pInstanceName, + // I reserved for the future use. Currently should be set to 0. + __in DWORD dwFlags) +{ + LOCALDB_PROXY(LocalDBUnshareInstance)(pInstanceName, dwFlags); +} + +HRESULT __cdecl +LocalDBGetVersionInfo( + // I LocalDB version string + __in_z PCWSTR wszVersion, + // O version information + __out PLocalDBVersionInfo pVersionInfo, + // I Size of LocalDBVersionInfo structure in bytes + __in DWORD cbVersionInfo) +{ + LOCALDB_PROXY(LocalDBGetVersionInfo)(wszVersion, pVersionInfo, cbVersionInfo); +} + +#endif + +#endif // _SQLUSERINSTANCE_H_ + +//----------------------------------------------------------------------------- +// File: sqluserinstancemsgs.mc +// +// Copyright: Copyright (c) Microsoft Corporation +//----------------------------------------------------------------------------- +#ifndef _LOCALDB_MESSAGES_H_ +#define _LOCALDB_MESSAGES_H_ +// Header section +// +// Section with the LocalDB messages +// +// +// Values are 32 bit values laid out as follows: +// +// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 +// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 +// +-+-+-+-+-+---------------------+-------------------------------+ +// |S|R|C|N|r| Facility | Code | +// +-+-+-+-+-+---------------------+-------------------------------+ +// +// where +// +// S - Severity - indicates success/fail +// +// 0 - Success +// 1 - Fail (COERROR) +// +// R - reserved portion of the facility code, corresponds to NT's +// second severity bit. +// +// C - reserved portion of the facility code, corresponds to NT's +// C field. +// +// N - reserved portion of the facility code. Used to indicate a +// mapped NT status value. +// +// r - reserved portion of the facility code. Reserved for internal +// use. Used to indicate HRESULT values that are not status +// values, but are instead message ids for display strings. +// +// Facility - is the facility code +// +// Code - is the facility's status code +// +// +// Define the facility codes +// +#define FACILITY_LOCALDB 0x9C5 + + +// +// Define the severity codes +// +#define LOCALDB_SEVERITY_SUCCESS 0x0 +#define LOCALDB_SEVERITY_ERROR 0x2 + + +// +// MessageId: LOCALDB_ERROR_CANNOT_CREATE_INSTANCE_FOLDER +// +// MessageText: +// +// Cannot create folder for the LocalDB instance at: %%LOCALAPPDATA%%\Microsoft\Microsoft SQL Server Local DB\Instances\. +// +#define LOCALDB_ERROR_CANNOT_CREATE_INSTANCE_FOLDER ((HRESULT)0x89C50100L) + +// +// MessageId: LOCALDB_ERROR_INVALID_PARAMETER +// +// MessageText: +// +// The parameter for the LocalDB Instance API method is incorrect. Consult the API documentation. +// +#define LOCALDB_ERROR_INVALID_PARAMETER ((HRESULT)0x89C50101L) + +// +// MessageId: LOCALDB_ERROR_INSTANCE_EXISTS_WITH_LOWER_VERSION +// +// MessageText: +// +// Unable to create the LocalDB instance with specified version. An instance with the same name already exists, but it has lower version than the specified version. +// +#define LOCALDB_ERROR_INSTANCE_EXISTS_WITH_LOWER_VERSION ((HRESULT)0x89C50102L) + +// +// MessageId: LOCALDB_ERROR_CANNOT_GET_USER_PROFILE_FOLDER +// +// MessageText: +// +// Cannot access the user profile folder for local application data (%%LOCALAPPDATA%%). +// +#define LOCALDB_ERROR_CANNOT_GET_USER_PROFILE_FOLDER ((HRESULT)0x89C50103L) + +// +// MessageId: LOCALDB_ERROR_INSTANCE_FOLDER_PATH_TOO_LONG +// +// MessageText: +// +// The full path length of the LocalDB instance folder is longer than MAX_PATH. The instance must be stored in folder: %%LOCALAPPDATA%%\Microsoft\Microsoft SQL Server Local DB\Instances\. +// +#define LOCALDB_ERROR_INSTANCE_FOLDER_PATH_TOO_LONG ((HRESULT)0x89C50104L) + +// +// MessageId: LOCALDB_ERROR_CANNOT_ACCESS_INSTANCE_FOLDER +// +// MessageText: +// +// Cannot access LocalDB instance folder: %%LOCALAPPDATA%%\Microsoft\Microsoft SQL Server Local DB\Instances\. +// +#define LOCALDB_ERROR_CANNOT_ACCESS_INSTANCE_FOLDER ((HRESULT)0x89C50105L) + +// +// MessageId: LOCALDB_ERROR_CANNOT_ACCESS_INSTANCE_REGISTRY +// +// MessageText: +// +// Unexpected error occurred while trying to access the LocalDB instance registry configuration. See the Windows Application event log for error details. +// +#define LOCALDB_ERROR_CANNOT_ACCESS_INSTANCE_REGISTRY ((HRESULT)0x89C50106L) + +// +// MessageId: LOCALDB_ERROR_UNKNOWN_INSTANCE +// +// MessageText: +// +// The specified LocalDB instance does not exist. +// +#define LOCALDB_ERROR_UNKNOWN_INSTANCE ((HRESULT)0x89C50107L) + +// +// MessageId: LOCALDB_ERROR_INTERNAL_ERROR +// +// MessageText: +// +// Unexpected error occurred inside a LocalDB instance API method call. See the Windows Application event log for error details. +// +#define LOCALDB_ERROR_INTERNAL_ERROR ((HRESULT)0x89C50108L) + +// +// MessageId: LOCALDB_ERROR_CANNOT_MODIFY_INSTANCE_REGISTRY +// +// MessageText: +// +// Unexpected error occurred while trying to modify the registry configuration for the LocalDB instance. See the Windows Application event log for error details. +// +#define LOCALDB_ERROR_CANNOT_MODIFY_INSTANCE_REGISTRY ((HRESULT)0x89C50109L) + +// +// MessageId: LOCALDB_ERROR_SQL_SERVER_STARTUP_FAILED +// +// MessageText: +// +// Error occurred during LocalDB instance startup: SQL Server process failed to start. +// +#define LOCALDB_ERROR_SQL_SERVER_STARTUP_FAILED ((HRESULT)0x89C5010AL) + +// +// MessageId: LOCALDB_ERROR_INSTANCE_CONFIGURATION_CORRUPT +// +// MessageText: +// +// LocalDB instance is corrupted. See the Windows Application event log for error details. +// +#define LOCALDB_ERROR_INSTANCE_CONFIGURATION_CORRUPT ((HRESULT)0x89C5010BL) + +// +// MessageId: LOCALDB_ERROR_CANNOT_CREATE_SQL_PROCESS +// +// MessageText: +// +// Error occurred during LocalDB instance startup: unable to create the SQL Server process. +// +#define LOCALDB_ERROR_CANNOT_CREATE_SQL_PROCESS ((HRESULT)0x89C5010CL) + +// +// MessageId: LOCALDB_ERROR_UNKNOWN_VERSION +// +// MessageText: +// +// The specified LocalDB version is not available on this computer. +// +#define LOCALDB_ERROR_UNKNOWN_VERSION ((HRESULT)0x89C5010DL) + +// +// MessageId: LOCALDB_ERROR_UNKNOWN_LANGUAGE_ID +// +// MessageText: +// +// Error getting the localized error message. The language specified by 'Language ID' parameter is unknown. +// +#define LOCALDB_ERROR_UNKNOWN_LANGUAGE_ID ((HRESULT)0x89C5010EL) + +// +// MessageId: LOCALDB_ERROR_INSTANCE_STOP_FAILED +// +// MessageText: +// +// Stop operation for LocalDB instance failed to complete within the specified time. +// +#define LOCALDB_ERROR_INSTANCE_STOP_FAILED ((HRESULT)0x89C5010FL) + +// +// MessageId: LOCALDB_ERROR_UNKNOWN_ERROR_CODE +// +// MessageText: +// +// Error getting the localized error message. The specified error code is unknown. +// +#define LOCALDB_ERROR_UNKNOWN_ERROR_CODE ((HRESULT)0x89C50110L) + +// +// MessageId: LOCALDB_ERROR_VERSION_REQUESTED_NOT_INSTALLED +// +// MessageText: +// +// The LocalDB version available on this workstation is lower than the requested LocalDB version. +// +#define LOCALDB_ERROR_VERSION_REQUESTED_NOT_INSTALLED ((HRESULT)0x89C50111L) + +// +// MessageId: LOCALDB_ERROR_INSTANCE_BUSY +// +// MessageText: +// +// Requested operation on LocalDB instance cannot be performed because specified instance is currently in use. Stop the instance and try again. +// +#define LOCALDB_ERROR_INSTANCE_BUSY ((HRESULT)0x89C50112L) + +// +// MessageId: LOCALDB_ERROR_INVALID_OPERATION +// +// MessageText: +// +// Default LocalDB instances cannot be created, stopped or deleted manually. +// +#define LOCALDB_ERROR_INVALID_OPERATION ((HRESULT)0x89C50113L) + +// +// MessageId: LOCALDB_ERROR_INSUFFICIENT_BUFFER +// +// MessageText: +// +// The buffer passed to the LocalDB instance API method has insufficient size. +// +#define LOCALDB_ERROR_INSUFFICIENT_BUFFER ((HRESULT)0x89C50114L) + +// +// MessageId: LOCALDB_ERROR_WAIT_TIMEOUT +// +// MessageText: +// +// Timeout occurred inside the LocalDB instance API method. +// +#define LOCALDB_ERROR_WAIT_TIMEOUT ((HRESULT)0x89C50115L) + +// MessageId=0x0116 message id is reserved. This message ID will be used for error LOCALDB_ERROR_NOT_INSTALLED. +// This message is specific since it has to be present in SqlUserIntsnace.h because it can be returned by discovery API. +// +// +// MessageId: LOCALDB_ERROR_XEVENT_FAILED +// +// MessageText: +// +// Failed to start XEvent engine within the LocalDB Instance API. +// +#define LOCALDB_ERROR_XEVENT_FAILED ((HRESULT)0x89C50117L) + +// +// MessageId: LOCALDB_ERROR_AUTO_INSTANCE_CREATE_FAILED +// +// MessageText: +// +// Cannot create an automatic instance. See the Windows Application event log for error details. +// +#define LOCALDB_ERROR_AUTO_INSTANCE_CREATE_FAILED ((HRESULT)0x89C50118L) + +// +// MessageId: LOCALDB_ERROR_SHARED_NAME_TAKEN +// +// MessageText: +// +// Cannot create a shared instance. The specified shared instance name is already in use. +// +#define LOCALDB_ERROR_SHARED_NAME_TAKEN ((HRESULT)0x89C50119L) + +// +// MessageId: LOCALDB_ERROR_CALLER_IS_NOT_OWNER +// +// MessageText: +// +// API caller is not LocalDB instance owner. +// +#define LOCALDB_ERROR_CALLER_IS_NOT_OWNER ((HRESULT)0x89C5011AL) + +// +// MessageId: LOCALDB_ERROR_INVALID_INSTANCE_NAME +// +// MessageText: +// +// Specified LocalDB instance name is invalid. +// +#define LOCALDB_ERROR_INVALID_INSTANCE_NAME ((HRESULT)0x89C5011BL) + +// +// MessageId: LOCALDB_ERROR_INSTANCE_ALREADY_SHARED +// +// MessageText: +// +// The specified LocalDB instance is already shared with different shared name. +// +#define LOCALDB_ERROR_INSTANCE_ALREADY_SHARED ((HRESULT)0x89C5011CL) + +// +// MessageId: LOCALDB_ERROR_INSTANCE_NOT_SHARED +// +// MessageText: +// +// The specified LocalDB instance is not shared. +// +#define LOCALDB_ERROR_INSTANCE_NOT_SHARED ((HRESULT)0x89C5011DL) + +// +// MessageId: LOCALDB_ERROR_ADMIN_RIGHTS_REQUIRED +// +// MessageText: +// +// Administrator privileges are required in order to execute this operation. +// +#define LOCALDB_ERROR_ADMIN_RIGHTS_REQUIRED ((HRESULT)0x89C5011EL) + +// +// MessageId: LOCALDB_ERROR_TOO_MANY_SHARED_INSTANCES +// +// MessageText: +// +// There are too many shared instance and we cannot generate unique User Instance Name. Unshare some of the existing shared instances. +// +#define LOCALDB_ERROR_TOO_MANY_SHARED_INSTANCES ((HRESULT)0x89C5011FL) + +// +// MessageId: LOCALDB_ERROR_CANNOT_GET_LOCAL_APP_DATA_PATH +// +// MessageText: +// +// Cannot get a local application data path. Most probably a user profile is not loaded. If LocalDB is executed under IIS, make sure that profile loading is enabled for the current user. +// +#define LOCALDB_ERROR_CANNOT_GET_LOCAL_APP_DATA_PATH ((HRESULT)0x89C50120L) + +// +// MessageId: LOCALDB_ERROR_CANNOT_LOAD_RESOURCES +// +// MessageText: +// +// Cannot load resources for this DLL. Resources for this DLL should be stored in a subfolder Resources, with the same file name as this DLL and the extension ".RLL". +// +#define LOCALDB_ERROR_CANNOT_LOAD_RESOURCES ((HRESULT)0x89C50121L) + + // Detailed error descriptions +// +// MessageId: LOCALDB_EDETAIL_DATADIRECTORY_IS_MISSING +// +// MessageText: +// +// The "DataDirectory" registry value is missing in the LocalDB instance registry key: %1 +// +#define LOCALDB_EDETAIL_DATADIRECTORY_IS_MISSING ((HRESULT)0x89C50200L) + +// +// MessageId: LOCALDB_EDETAIL_CANNOT_ACCESS_INSTANCE_FOLDER +// +// MessageText: +// +// Cannot access LocalDB instance folder: %1 +// +#define LOCALDB_EDETAIL_CANNOT_ACCESS_INSTANCE_FOLDER ((HRESULT)0x89C50201L) + +// +// MessageId: LOCALDB_EDETAIL_DATADIRECTORY_IS_TOO_LONG +// +// MessageText: +// +// The "DataDirectory" registry value is too long in the LocalDB instance registry key: %1 +// +#define LOCALDB_EDETAIL_DATADIRECTORY_IS_TOO_LONG ((HRESULT)0x89C50202L) + +// +// MessageId: LOCALDB_EDETAIL_PARENT_INSTANCE_IS_MISSING +// +// MessageText: +// +// The "Parent Instance" registry value is missing in the LocalDB instance registry key: %1 +// +#define LOCALDB_EDETAIL_PARENT_INSTANCE_IS_MISSING ((HRESULT)0x89C50203L) + +// +// MessageId: LOCALDB_EDETAIL_PARENT_INSTANCE_IS_TOO_LONG +// +// MessageText: +// +// The "Parent Instance" registry value is too long in the LocalDB instance registry key: %1 +// +#define LOCALDB_EDETAIL_PARENT_INSTANCE_IS_TOO_LONG ((HRESULT)0x89C50204L) + +// +// MessageId: LOCALDB_EDETAIL_DATA_DIRECTORY_INVALID +// +// MessageText: +// +// Data directory for LocalDB instance is invalid: %1 +// +#define LOCALDB_EDETAIL_DATA_DIRECTORY_INVALID ((HRESULT)0x89C50205L) + +// +// MessageId: LOCALDB_EDETAIL_XEVENT_ASSERT +// +// MessageText: +// +// LocalDB instance API: XEvent engine assert: %1 in %2:%3 (%4) +// +#define LOCALDB_EDETAIL_XEVENT_ASSERT ((HRESULT)0x89C50206L) + +// +// MessageId: LOCALDB_EDETAIL_XEVENT_ERROR +// +// MessageText: +// +// LocalDB instance API: XEvent error: %1 +// +#define LOCALDB_EDETAIL_XEVENT_ERROR ((HRESULT)0x89C50207L) + +// +// MessageId: LOCALDB_EDETAIL_INSTALLATION_CORRUPTED +// +// MessageText: +// +// LocalDB installation is corrupted. Reinstall the LocalDB. +// +#define LOCALDB_EDETAIL_INSTALLATION_CORRUPTED ((HRESULT)0x89C50208L) + +// +// MessageId: LOCALDB_EDETAIL_CANNOT_GET_PROGRAM_FILES_LOCATION +// +// MessageText: +// +// LocalDB XEvent error: cannot determine %ProgramFiles% folder location. +// +#define LOCALDB_EDETAIL_CANNOT_GET_PROGRAM_FILES_LOCATION ((HRESULT)0x89C50209L) + +// +// MessageId: LOCALDB_EDETAIL_XEVENT_CANNOT_INITIALIZE +// +// MessageText: +// +// LocalDB XEvent error: Cannot initialize XEvent engine. +// +#define LOCALDB_EDETAIL_XEVENT_CANNOT_INITIALIZE ((HRESULT)0x89C5020AL) + +// +// MessageId: LOCALDB_EDETAIL_XEVENT_CANNOT_FIND_CONF_FILE +// +// MessageText: +// +// LocalDB XEvent error: Cannot find XEvents configuration file: %1 +// +#define LOCALDB_EDETAIL_XEVENT_CANNOT_FIND_CONF_FILE ((HRESULT)0x89C5020BL) + +// +// MessageId: LOCALDB_EDETAIL_XEVENT_CANNOT_CONFIGURE +// +// MessageText: +// +// LocalDB XEvent error: Cannot configure XEvents engine with the configuration file: %1 +// HRESULT returned: %2 +// +#define LOCALDB_EDETAIL_XEVENT_CANNOT_CONFIGURE ((HRESULT)0x89C5020CL) + +// +// MessageId: LOCALDB_EDETAIL_XEVENT_CONF_FILE_NAME_TOO_LONG +// +// MessageText: +// +// LocalDB XEvent error: XEvents engine configuration file too long +// +#define LOCALDB_EDETAIL_XEVENT_CONF_FILE_NAME_TOO_LONG ((HRESULT)0x89C5020DL) + +// +// MessageId: LOCALDB_EDETAIL_COINITIALIZEEX_FAILED +// +// MessageText: +// +// CoInitializeEx API failed. HRESULT returned: %1 +// +#define LOCALDB_EDETAIL_COINITIALIZEEX_FAILED ((HRESULT)0x89C5020EL) + +// +// MessageId: LOCALDB_EDETAIL_PARENT_INSTANCE_VERSION_INVALID +// +// MessageText: +// +// LocalDB parent instance version is invalid: %1 +// +#define LOCALDB_EDETAIL_PARENT_INSTANCE_VERSION_INVALID ((HRESULT)0x89C5020FL) + +// +// MessageId: LOCALDB_EDETAIL_WINAPI_ERROR +// +// MessageText: +// +// Windows API call %1 returned error code: %2. Windows system error message is: %3Reported at line: %4. %5 +// +#define LOCALDB_EDETAIL_WINAPI_ERROR ((HRESULT)0xC9C50210L) + +// +// MessageId: LOCALDB_EDETAIL_UNEXPECTED_RESULT +// +// MessageText: +// +// Function %1 returned %2 at line %3. +// +#define LOCALDB_EDETAIL_UNEXPECTED_RESULT ((HRESULT)0x89C50211L) + +// +#endif // _LOCALDB_MESSAGES_H_ + +#endif //__msodbcsql_h__ diff --git a/sqlsrv/php_sqlsrv.h b/sqlsrv/php_sqlsrv.h index 7f753a56..ae641509 100644 --- a/sqlsrv/php_sqlsrv.h +++ b/sqlsrv/php_sqlsrv.h @@ -8,20 +8,21 @@ // // Comments: Also contains "internal" declarations shared across source files. // -// Copyright Microsoft Corporation -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// -// You may obtain a copy of the License at: -// http://www.apache.org/licenses/LICENSE-2.0 +// Microsoft Drivers for PHP for SQL Server +// Copyright (c) Microsoft Corporation. All rights reserved. // +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use these files except in compliance with the License. + +// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -//--------------------------------------------------------------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------------------------------------------------------------- #include "core_sqlsrv.h" #include "version.h" diff --git a/sqlsrv/sqlncli.h b/sqlsrv/sqlncli.h deleted file mode 100644 index 518ddd4f..00000000 --- a/sqlsrv/sqlncli.h +++ /dev/null @@ -1,3043 +0,0 @@ - - -/* this ALWAYS GENERATED file contains the definitions for the interfaces */ - - - /* File created by MIDL compiler version 7.00.0474 */ -/* Compiler settings for sqlncli.idl: - Oicf, W1, Zp8, env=Win32 (32b run) - protocol : dce , ms_ext, c_ext, robust - error checks: allocation ref bounds_check enum stub_data - VC __declspec() decoration level: - __declspec(uuid()), __declspec(selectany), __declspec(novtable) - DECLSPEC_UUID(), MIDL_INTERFACE() -*/ -//@@MIDL_FILE_HEADING( ) - -#pragma warning( disable: 4049 ) /* more than 64k source lines */ - - -/* verify that the version is high enough to compile this file*/ -#ifndef __REQUIRED_RPCNDR_H_VERSION__ -#define __REQUIRED_RPCNDR_H_VERSION__ 475 -#endif - -#include "rpc.h" -#include "rpcndr.h" - -#ifndef __RPCNDR_H_VERSION__ -#error this stub requires an updated version of -#endif // __RPCNDR_H_VERSION__ - -#ifndef COM_NO_WINDOWS_H -#include "windows.h" -#include "ole2.h" -#endif /*COM_NO_WINDOWS_H*/ - -#ifndef __sqlncli_h__ -#define __sqlncli_h__ - -#if defined(_MSC_VER) && (_MSC_VER >= 1020) -#pragma once -#endif - -/* Forward Declarations */ - -#ifndef __ICommandWithParameters_FWD_DEFINED__ -#define __ICommandWithParameters_FWD_DEFINED__ -typedef interface ICommandWithParameters ICommandWithParameters; -#endif /* __ICommandWithParameters_FWD_DEFINED__ */ - - -#ifndef __IUMSInitialize_FWD_DEFINED__ -#define __IUMSInitialize_FWD_DEFINED__ -typedef interface IUMSInitialize IUMSInitialize; -#endif /* __IUMSInitialize_FWD_DEFINED__ */ - - -#ifndef __ISQLServerErrorInfo_FWD_DEFINED__ -#define __ISQLServerErrorInfo_FWD_DEFINED__ -typedef interface ISQLServerErrorInfo ISQLServerErrorInfo; -#endif /* __ISQLServerErrorInfo_FWD_DEFINED__ */ - - -#ifndef __IRowsetFastLoad_FWD_DEFINED__ -#define __IRowsetFastLoad_FWD_DEFINED__ -typedef interface IRowsetFastLoad IRowsetFastLoad; -#endif /* __IRowsetFastLoad_FWD_DEFINED__ */ - - -#ifndef __ISchemaLock_FWD_DEFINED__ -#define __ISchemaLock_FWD_DEFINED__ -typedef interface ISchemaLock ISchemaLock; -#endif /* __ISchemaLock_FWD_DEFINED__ */ - - -#ifndef __IBCPSession_FWD_DEFINED__ -#define __IBCPSession_FWD_DEFINED__ -typedef interface IBCPSession IBCPSession; -#endif /* __IBCPSession_FWD_DEFINED__ */ - - -#ifndef __ISSAbort_FWD_DEFINED__ -#define __ISSAbort_FWD_DEFINED__ -typedef interface ISSAbort ISSAbort; -#endif /* __ISSAbort_FWD_DEFINED__ */ - - -#ifndef __ISSCommandWithParameters_FWD_DEFINED__ -#define __ISSCommandWithParameters_FWD_DEFINED__ -typedef interface ISSCommandWithParameters ISSCommandWithParameters; -#endif /* __ISSCommandWithParameters_FWD_DEFINED__ */ - - -#ifndef __IDBAsynchStatus_FWD_DEFINED__ -#define __IDBAsynchStatus_FWD_DEFINED__ -typedef interface IDBAsynchStatus IDBAsynchStatus; -#endif /* __IDBAsynchStatus_FWD_DEFINED__ */ - - -#ifndef __ISSAsynchStatus_FWD_DEFINED__ -#define __ISSAsynchStatus_FWD_DEFINED__ -typedef interface ISSAsynchStatus ISSAsynchStatus; -#endif /* __ISSAsynchStatus_FWD_DEFINED__ */ - - -/* header files for imported files */ -#include "unknwn.h" -#include "oaidl.h" - -#ifdef __cplusplus -extern "C"{ -#endif - - -/* interface __MIDL_itf_sqlncli_0000_0000 */ -/* [local] */ - -//----------------------------------------------------------------------------- -// File: sqlncli.h -// -// Copyright: Copyright (c) Microsoft Corporation -// -// Contents: SQL Server Native Client OLEDB provider and ODBC driver specific -// definitions. -// -//----------------------------------------------------------------------------- - -#if !defined(SQLNCLI_VER) -#define SQLNCLI_VER 1000 -#endif - -#if SQLNCLI_VER >= 1000 - -#define SQLNCLI_PRODUCT_NAME_FULL_VER_ANSI "Microsoft SQL Server Native Client 10.0" -#define SQLNCLI_PRODUCT_NAME_FULL_ANSI "Microsoft SQL Server Native Client" -#define SQLNCLI_PRODUCT_NAME_SHORT_VER_ANSI "SQL Server Native Client 10.0" -#define SQLNCLI_PRODUCT_NAME_SHORT_ANSI "SQL Server Native Client" - -#define SQLNCLI_FILE_NAME_ANSI "sqlncli" -#define SQLNCLI_FILE_NAME_VER_ANSI "sqlncli10" -#define SQLNCLI_FILE_NAME_FULL_ANSI "sqlncli10.dll" - -#define SQLNCLI_PRODUCT_NAME_FULL_VER_UNICODE L"Microsoft SQL Server Native Client 10.0" -#define SQLNCLI_PRODUCT_NAME_FULL_UNICODE L"Microsoft SQL Server Native Client" -#define SQLNCLI_PRODUCT_NAME_SHORT_VER_UNICODE L"SQL Server Native Client 10.0" -#define SQLNCLI_PRODUCT_NAME_SHORT_UNICODE L"SQL Server Native Client" - -#define SQLNCLI_FILE_NAME_UNICODE L"sqlncli" -#define SQLNCLI_FILE_NAME_VER_UNICODE L"sqlncli10" -#define SQLNCLI_FILE_NAME_FULL_UNICODE L"sqlncli10.dll" - -#if defined(_SQLNCLI_OLEDB_) || !defined(_SQLNCLI_ODBC_) - -#define SQLNCLI_VI_PROG_ID_ANSI "SQLNCLI10" -#define SQLNCLI_VI_ERROR_LOOKUP_PROG_ID_ANSI "SQLNCLI10 ErrorLookup" -#define SQLNCLI_VI_ENUMERATOR_PROG_ID_ANSI "SQLNCLI10 Enumerator" - -#define SQLNCLI_PROG_ID_ANSI "SQLNCLI10.1" -#define SQLNCLI_ERROR_LOOKUP_PROG_ID_ANSI "SQLNCLI10 ErrorLookup.1" -#define SQLNCLI_ENUMERATOR_PROG_ID_ANSI "SQLNCLI10 Enumerator.1" - -#define SQLNCLI_VI_PROG_ID_UNICODE L"SQLNCLI10" -#define SQLNCLI_VI_ERROR_LOOKUP_PROG_ID_UNICODE L"SQLNCLI10 ErrorLookup" -#define SQLNCLI_VI_ENUMERATOR_PROG_ID_UNICODE L"SQLNCLI10 Enumerator" - -#define SQLNCLI_PROG_ID_UNICODE L"SQLNCLI10.1" -#define SQLNCLI_ERROR_LOOKUP_PROG_ID_UNICODE L"SQLNCLI10 ErrorLookup.1" -#define SQLNCLI_ENUMERATOR_PROG_ID_UNICODE L"SQLNCLI10 Enumerator.1" - -#define SQLNCLI_CLSID CLSID_SQLNCLI10 -#define SQLNCLI_ERROR_CLSID CLSID_SQLNCLI10_ERROR -#define SQLNCLI_ENUMERATOR_CLSID CLSID_SQLNCLI10_ENUMERATOR - -#endif // defined(_SQLNCLI_OLEDB_) || !defined(_SQLNCLI_ODBC_) - -#else // SQLNCLI_VER >= 1000 - -#define SQLNCLI_PRODUCT_NAME_FULL_VER_ANSI "Microsoft SQL Server Native Client" -#define SQLNCLI_PRODUCT_NAME_FULL_ANSI "Microsoft SQL Server Native Client" -#define SQLNCLI_PRODUCT_NAME_SHORT_VER_ANSI "SQL Native Client" -#define SQLNCLI_PRODUCT_NAME_SHORT_ANSI "SQL Native Client" - -#define SQLNCLI_FILE_NAME_ANSI "sqlncli" -#define SQLNCLI_FILE_NAME_VER_ANSI "sqlncli" -#define SQLNCLI_FILE_NAME_FULL_ANSI "sqlncli.dll" - -#define SQLNCLI_PRODUCT_NAME_FULL_VER_UNICODE L"Microsoft SQL Server Native Client" -#define SQLNCLI_PRODUCT_NAME_FULL_UNICODE L"Microsoft SQL Server Native Client" -#define SQLNCLI_PRODUCT_NAME_SHORT_VER_UNICODE L"SQL Native Client" -#define SQLNCLI_PRODUCT_NAME_SHORT_UNICODE L"SQL Native Client" - -#define SQLNCLI_FILE_NAME_UNICODE L"sqlncli" -#define SQLNCLI_FILE_NAME_VER_UNICODE L"sqlncli" -#define SQLNCLI_FILE_NAME_FULL_UNICODE L"sqlncli.dll" - -#if defined(_SQLNCLI_OLEDB_) || !defined(_SQLNCLI_ODBC_) - -#define SQLNCLI_VI_PROG_ID_ANSI "SQLNCLI" -#define SQLNCLI_VI_ERROR_LOOKUP_PROG_ID_ANSI "SQLNCLI ErrorLookup" -#define SQLNCLI_VI_ENUMERATOR_PROG_ID_ANSI "SQLNCLI Enumerator" - -#define SQLNCLI_PROG_ID_ANSI "SQLNCLI.1" -#define SQLNCLI_ERROR_LOOKUP_PROG_ID_ANSI "SQLNCLI ErrorLookup.1" -#define SQLNCLI_ENUMERATOR_PROG_ID_ANSI "SQLNCLI Enumerator.1" - -#define SQLNCLI_VI_PROG_ID_UNICODE L"SQLNCLI" -#define SQLNCLI_VI_ERROR_LOOKUP_PROG_ID_UNICODE L"SQLNCLI ErrorLookup" -#define SQLNCLI_VI_ENUMERATOR_PROG_ID_UNICODE L"SQLNCLI Enumerator" - -#define SQLNCLI_PROG_ID_UNICODE L"SQLNCLI.1" -#define SQLNCLI_ERROR_LOOKUP_PROG_ID_UNICODE L"SQLNCLI ErrorLookup.1" -#define SQLNCLI_ENUMERATOR_PROG_ID_UNICODE L"SQLNCLI Enumerator.1" - -#define SQLNCLI_CLSID CLSID_SQLNCLI -#define SQLNCLI_ERROR_CLSID CLSID_SQLNCLI_ERROR -#define SQLNCLI_ENUMERATOR_CLSID CLSID_SQLNCLI_ENUMERATOR - -#endif // defined(_SQLNCLI_OLEDB_) || !defined(_SQLNCLI_ODBC_) - -#endif // SQLNCLI_VER >= 1000 - -// define the character type agnostic constants -#if defined(_UNICODE) || defined(UNICODE) - -#define SQLNCLI_PRODUCT_NAME_FULL_VER SQLNCLI_PRODUCT_NAME_FULL_VER_UNICODE -#define SQLNCLI_PRODUCT_NAME_FULL SQLNCLI_PRODUCT_NAME_FULL_UNICODE -#define SQLNCLI_PRODUCT_NAME_SHORT_VER SQLNCLI_PRODUCT_NAME_SHORT_VER_UNICODE -#define SQLNCLI_PRODUCT_NAME_SHORT SQLNCLI_PRODUCT_NAME_SHORT_UNICODE - -#define SQLNCLI_FILE_NAME SQLNCLI_FILE_NAME_UNICODE -#define SQLNCLI_FILE_NAME_VER SQLNCLI_FILE_NAME_VER_UNICODE -#define SQLNCLI_FILE_NAME_FULL SQLNCLI_FILE_NAME_FULL_UNICODE - -#if defined(_SQLNCLI_OLEDB_) || !defined(_SQLNCLI_ODBC_) - -#define SQLNCLI_VI_PROG_ID SQLNCLI_VI_PROG_ID_UNICODE -#define SQLNCLI_VI_ERROR_LOOKUP_PROG_ID SQLNCLI_VI_ERROR_LOOKUP_PROG_ID_UNICODE -#define SQLNCLI_VI_ENUMERATOR_PROG_ID SQLNCLI_VI_ENUMERATOR_PROG_ID_UNICODE - -#define SQLNCLI_PROG_ID SQLNCLI_PROG_ID_UNICODE -#define SQLNCLI_ERROR_LOOKUP_PROG_ID SQLNCLI_ERROR_LOOKUP_PROG_ID_UNICODE -#define SQLNCLI_ENUMERATOR_PROG_ID SQLNCLI_ENUMERATOR_PROG_ID_UNICODE - -#endif // defined(_SQLNCLI_OLEDB_) || !defined(_SQLNCLI_ODBC_) - -#else // _UNICODE || UNICODE - -#define SQLNCLI_PRODUCT_NAME_FULL_VER SQLNCLI_PRODUCT_NAME_FULL_VER_ANSI -#define SQLNCLI_PRODUCT_NAME_FULL SQLNCLI_PRODUCT_NAME_FULL_ANSI -#define SQLNCLI_PRODUCT_NAME_SHORT_VER SQLNCLI_PRODUCT_NAME_SHORT_VER_ANSI -#define SQLNCLI_PRODUCT_NAME_SHORT SQLNCLI_PRODUCT_NAME_SHORT_ANSI - -#define SQLNCLI_FILE_NAME SQLNCLI_FILE_NAME_ANSI -#define SQLNCLI_FILE_NAME_VER SQLNCLI_FILE_NAME_VER_ANSI -#define SQLNCLI_FILE_NAME_FULL SQLNCLI_FILE_NAME_FULL_ANSI - -#if defined(_SQLNCLI_OLEDB_) || !defined(_SQLNCLI_ODBC_) - -#define SQLNCLI_VI_PROG_ID SQLNCLI_VI_PROG_ID_ANSI -#define SQLNCLI_VI_ERROR_LOOKUP_PROG_ID SQLNCLI_VI_ERROR_LOOKUP_PROG_ID_ANSI -#define SQLNCLI_VI_ENUMERATOR_PROG_ID SQLNCLI_VI_ENUMERATOR_PROG_ID_ANSI - -#define SQLNCLI_PROG_ID SQLNCLI_PROG_ID_ANSI -#define SQLNCLI_ERROR_LOOKUP_PROG_ID SQLNCLI_ERROR_LOOKUP_PROG_ID_ANSI -#define SQLNCLI_ENUMERATOR_PROG_ID SQLNCLI_ENUMERATOR_PROG_ID_ANSI - -#endif // defined(_SQLNCLI_OLEDB_) || !defined(_SQLNCLI_ODBC_) - -#endif // _UNICODE || UNICODE - -#if defined(_SQLNCLI_ODBC_) || !defined(_SQLNCLI_OLEDB_) - -#define SQLNCLI_DRIVER_NAME SQLNCLI_PRODUCT_NAME_SHORT_VER - -#endif - -// OLEDB part of SQL Server Native Client header - begin here -#if defined(_SQLNCLI_OLEDB_) || !defined(_SQLNCLI_ODBC_) -#ifndef __oledb_h__ -#include -#endif /*__oledb_h__*/ - -#if 0 // This is already defined in oledb.h - -#ifdef _WIN64 - -// Length of a non-character object, size -typedef ULONGLONG DBLENGTH; - -// Offset within a rowset -typedef LONGLONG DBROWOFFSET; - -// Number of rows -typedef LONGLONG DBROWCOUNT; - -typedef ULONGLONG DBCOUNTITEM; - -// Ordinal (column number, etc.) -typedef ULONGLONG DBORDINAL; - -typedef LONGLONG DB_LORDINAL; - -// Bookmarks -typedef ULONGLONG DBBKMARK; -// Offset in the buffer - -typedef ULONGLONG DBBYTEOFFSET; -// Reference count of each row/accessor handle - -typedef ULONG DBREFCOUNT; - -// Parameters -typedef ULONGLONG DB_UPARAMS; - -typedef LONGLONG DB_LPARAMS; - -// hash values corresponding to the elements (bookmarks) -typedef DWORDLONG DBHASHVALUE; - -// For reserve -typedef DWORDLONG DB_DWRESERVE; - -typedef LONGLONG DB_LRESERVE; - -typedef ULONGLONG DB_URESERVE; - -#else //_WIN64 - -// Length of a non-character object, size -typedef ULONG DBLENGTH; - -// Offset within a rowset -typedef LONG DBROWOFFSET; - -// Number of rows -typedef LONG DBROWCOUNT; - -typedef ULONG DBCOUNTITEM; - -// Ordinal (column number, etc.) -typedef ULONG DBORDINAL; - -typedef LONG DB_LORDINAL; - -// Bookmarks -typedef ULONG DBBKMARK; - -// Offset in the buffer -typedef ULONG DBBYTEOFFSET; - -// Reference count of each row handle -typedef ULONG DBREFCOUNT; - -// Parameters -typedef ULONG DB_UPARAMS; - -typedef LONG DB_LPARAMS; - -// hash values corresponding to the elements (bookmarks) -typedef DWORD DBHASHVALUE; - -// For reserve -typedef DWORD DB_DWRESERVE; - -typedef LONG DB_LRESERVE; - -typedef ULONG DB_URESERVE; - -#endif // _WIN64 -typedef DWORD DBKIND; - - -enum DBKINDENUM - { DBKIND_GUID_NAME = 0, - DBKIND_GUID_PROPID = ( DBKIND_GUID_NAME + 1 ) , - DBKIND_NAME = ( DBKIND_GUID_PROPID + 1 ) , - DBKIND_PGUID_NAME = ( DBKIND_NAME + 1 ) , - DBKIND_PGUID_PROPID = ( DBKIND_PGUID_NAME + 1 ) , - DBKIND_PROPID = ( DBKIND_PGUID_PROPID + 1 ) , - DBKIND_GUID = ( DBKIND_PROPID + 1 ) - } ; -typedef struct tagDBID - { - union - { - GUID guid; - GUID *pguid; - /* Empty union arm */ - } uGuid; - DBKIND eKind; - union - { - LPOLESTR pwszName; - ULONG ulPropid; - /* Empty union arm */ - } uName; - } DBID; - -typedef struct tagDB_NUMERIC - { - BYTE precision; - BYTE scale; - BYTE sign; - BYTE val[ 16 ]; - } DB_NUMERIC; - -typedef struct tagDBDATE - { - SHORT year; - USHORT month; - USHORT day; - } DBDATE; - -typedef struct tagDBTIME - { - USHORT hour; - USHORT minute; - USHORT second; - } DBTIME; - -typedef struct tagDBTIMESTAMP - { - SHORT year; - USHORT month; - USHORT day; - USHORT hour; - USHORT minute; - USHORT second; - ULONG fraction; - } DBTIMESTAMP; - -typedef struct tagDBOBJECT - { - DWORD dwFlags; - IID iid; - } DBOBJECT; - -typedef WORD DBTYPE; - -typedef ULONG_PTR HACCESSOR; - -typedef ULONG_PTR HCHAPTER; - -typedef DWORD DBPARAMFLAGS; - -typedef struct tagDBPARAMINFO - { - DBPARAMFLAGS dwFlags; - DBORDINAL iOrdinal; - LPOLESTR pwszName; - ITypeInfo *pTypeInfo; - DBLENGTH ulParamSize; - DBTYPE wType; - BYTE bPrecision; - BYTE bScale; - } DBPARAMINFO; - -typedef DWORD DBPROPID; - -typedef struct tagDBPROPIDSET - { - DBPROPID *rgPropertyIDs; - ULONG cPropertyIDs; - GUID guidPropertySet; - } DBPROPIDSET; - -typedef DWORD DBPROPFLAGS; - -typedef DWORD DBPROPOPTIONS; - -typedef DWORD DBPROPSTATUS; - -typedef struct tagDBPROP - { - DBPROPID dwPropertyID; - DBPROPOPTIONS dwOptions; - DBPROPSTATUS dwStatus; - DBID colid; - VARIANT vValue; - } DBPROP; - -typedef struct tagDBPROPSET - { - DBPROP *rgProperties; - ULONG cProperties; - GUID guidPropertySet; - } DBPROPSET; - - - -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0000_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0000_v0_0_s_ifspec; - -#ifndef __ICommandWithParameters_INTERFACE_DEFINED__ -#define __ICommandWithParameters_INTERFACE_DEFINED__ - -/* interface ICommandWithParameters */ -/* [unique][uuid][object][local] */ - -typedef struct tagDBPARAMBINDINFO - { - LPOLESTR pwszDataSourceType; - LPOLESTR pwszName; - DBLENGTH ulParamSize; - DBPARAMFLAGS dwFlags; - BYTE bPrecision; - BYTE bScale; - } DBPARAMBINDINFO; - - -EXTERN_C const IID IID_ICommandWithParameters; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("0c733a64-2a1c-11ce-ade5-00aa0044773d") - ICommandWithParameters : public IUnknown - { - public: - virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetParameterInfo( - /* [out][in] */ DB_UPARAMS *pcParams, - /* [size_is][size_is][out] */ DBPARAMINFO **prgParamInfo, - /* [out] */ OLECHAR **ppNamesBuffer) = 0; - - virtual /* [local] */ HRESULT STDMETHODCALLTYPE MapParameterNames( - /* [in] */ DB_UPARAMS cParamNames, - /* [size_is][in] */ const OLECHAR *rgParamNames[ ], - /* [size_is][out] */ DB_LPARAMS rgParamOrdinals[ ]) = 0; - - virtual /* [local] */ HRESULT STDMETHODCALLTYPE SetParameterInfo( - /* [in] */ DB_UPARAMS cParams, - /* [size_is][unique][in] */ const DB_UPARAMS rgParamOrdinals[ ], - /* [size_is][unique][in] */ const DBPARAMBINDINFO rgParamBindInfo[ ]) = 0; - - }; - -#else /* C style interface */ - - typedef struct ICommandWithParametersVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ICommandWithParameters * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - ICommandWithParameters * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - ICommandWithParameters * This); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetParameterInfo )( - ICommandWithParameters * This, - /* [out][in] */ DB_UPARAMS *pcParams, - /* [size_is][size_is][out] */ DBPARAMINFO **prgParamInfo, - /* [out] */ OLECHAR **ppNamesBuffer); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *MapParameterNames )( - ICommandWithParameters * This, - /* [in] */ DB_UPARAMS cParamNames, - /* [size_is][in] */ const OLECHAR *rgParamNames[ ], - /* [size_is][out] */ DB_LPARAMS rgParamOrdinals[ ]); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *SetParameterInfo )( - ICommandWithParameters * This, - /* [in] */ DB_UPARAMS cParams, - /* [size_is][unique][in] */ const DB_UPARAMS rgParamOrdinals[ ], - /* [size_is][unique][in] */ const DBPARAMBINDINFO rgParamBindInfo[ ]); - - END_INTERFACE - } ICommandWithParametersVtbl; - - interface ICommandWithParameters - { - CONST_VTBL struct ICommandWithParametersVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define ICommandWithParameters_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ICommandWithParameters_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ICommandWithParameters_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define ICommandWithParameters_GetParameterInfo(This,pcParams,prgParamInfo,ppNamesBuffer) \ - ( (This)->lpVtbl -> GetParameterInfo(This,pcParams,prgParamInfo,ppNamesBuffer) ) - -#define ICommandWithParameters_MapParameterNames(This,cParamNames,rgParamNames,rgParamOrdinals) \ - ( (This)->lpVtbl -> MapParameterNames(This,cParamNames,rgParamNames,rgParamOrdinals) ) - -#define ICommandWithParameters_SetParameterInfo(This,cParams,rgParamOrdinals,rgParamBindInfo) \ - ( (This)->lpVtbl -> SetParameterInfo(This,cParams,rgParamOrdinals,rgParamBindInfo) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - -/* [call_as] */ HRESULT STDMETHODCALLTYPE ICommandWithParameters_RemoteGetParameterInfo_Proxy( - ICommandWithParameters * This, - /* [out][in] */ DB_UPARAMS *pcParams, - /* [size_is][size_is][out] */ DBPARAMINFO **prgParamInfo, - /* [size_is][size_is][out] */ DBBYTEOFFSET **prgNameOffsets, - /* [out][in] */ DBLENGTH *pcbNamesBuffer, - /* [size_is][size_is][unique][out][in] */ OLECHAR **ppNamesBuffer, - /* [out] */ IErrorInfo **ppErrorInfoRem); - - -void __RPC_STUB ICommandWithParameters_RemoteGetParameterInfo_Stub( - IRpcStubBuffer *This, - IRpcChannelBuffer *_pRpcChannelBuffer, - PRPC_MESSAGE _pRpcMessage, - DWORD *_pdwStubPhase); - - -/* [call_as] */ HRESULT STDMETHODCALLTYPE ICommandWithParameters_RemoteMapParameterNames_Proxy( - ICommandWithParameters * This, - /* [in] */ DB_UPARAMS cParamNames, - /* [size_is][in] */ LPCOLESTR *rgParamNames, - /* [size_is][out] */ DB_LPARAMS *rgParamOrdinals, - /* [out] */ IErrorInfo **ppErrorInfoRem); - - -void __RPC_STUB ICommandWithParameters_RemoteMapParameterNames_Stub( - IRpcStubBuffer *This, - IRpcChannelBuffer *_pRpcChannelBuffer, - PRPC_MESSAGE _pRpcMessage, - DWORD *_pdwStubPhase); - - -/* [call_as] */ HRESULT STDMETHODCALLTYPE ICommandWithParameters_RemoteSetParameterInfo_Proxy( - ICommandWithParameters * This, - /* [in] */ DB_UPARAMS cParams, - /* [size_is][unique][in] */ const DB_UPARAMS *rgParamOrdinals, - /* [size_is][unique][in] */ const DBPARAMBINDINFO *rgParamBindInfo, - /* [out] */ IErrorInfo **ppErrorInfoRem); - - -void __RPC_STUB ICommandWithParameters_RemoteSetParameterInfo_Stub( - IRpcStubBuffer *This, - IRpcChannelBuffer *_pRpcChannelBuffer, - PRPC_MESSAGE _pRpcMessage, - DWORD *_pdwStubPhase); - - - -#endif /* __ICommandWithParameters_INTERFACE_DEFINED__ */ - - -/* interface __MIDL_itf_sqlncli_0000_0001 */ -/* [local] */ - -typedef DWORD DBASYNCHOP; - -typedef DWORD DBASYNCHPHASE; - -#endif // This is already defined in oledb.h - -//------------------------------------------------------------------- -// Variant Access macros, similar to ole automation. -//------------------------------------------------------------------- -#define V_SS_VT(X) ((X)->vt) -#define V_SS_UNION(X, Y) ((X)->Y) - -#define V_SS_UI1(X) V_SS_UNION(X, bTinyIntVal) -#define V_SS_I2(X) V_SS_UNION(X, sShortIntVal) -#define V_SS_I4(X) V_SS_UNION(X, lIntVal) -#define V_SS_I8(X) V_SS_UNION(X, llBigIntVal) - -#define V_SS_R4(X) V_SS_UNION(X, fltRealVal) -#define V_SS_R8(X) V_SS_UNION(X, dblFloatVal) -#define V_SS_UI4(X) V_SS_UNION(X, ulVal) - -#define V_SS_MONEY(X) V_SS_UNION(X, cyMoneyVal) -#define V_SS_SMALLMONEY(X) V_SS_UNION(X, cyMoneyVal) - -#define V_SS_WSTRING(X) V_SS_UNION(X, NCharVal) -#define V_SS_WVARSTRING(X) V_SS_UNION(X, NCharVal) - -#define V_SS_STRING(X) V_SS_UNION(X, CharVal) -#define V_SS_VARSTRING(X) V_SS_UNION(X, CharVal) - -#define V_SS_BIT(X) V_SS_UNION(X, fBitVal) -#define V_SS_GUID(X) V_SS_UNION(X, rgbGuidVal) - -#define V_SS_NUMERIC(X) V_SS_UNION(X, numNumericVal) -#define V_SS_DECIMAL(X) V_SS_UNION(X, numNumericVal) - -#define V_SS_BINARY(X) V_SS_UNION(X, BinaryVal) -#define V_SS_VARBINARY(X) V_SS_UNION(X, BinaryVal) - -#define V_SS_DATETIME(X) V_SS_UNION(X, tsDateTimeVal) -#define V_SS_SMALLDATETIME(X) V_SS_UNION(X, tsDateTimeVal) - -#define V_SS_UNKNOWN(X) V_SS_UNION(X, UnknownType) - -//Text and image types. -#define V_SS_IMAGE(X) V_SS_UNION(X, ImageVal) -#define V_SS_TEXT(X) V_SS_UNION(X, TextVal) -#define V_SS_NTEXT(X) V_SS_UNION(X, NTextVal) - -//Microsoft SQL Server 2008 datetime. -#define V_SS_DATE(X) V_SS_UNION(X, dDateVal) -#define V_SS_TIME2(X) V_SS_UNION(X, Time2Val) -#define V_SS_DATETIME2(X) V_SS_UNION(X, DateTimeVal) -#define V_SS_DATETIMEOFFSET(X) V_SS_UNION(X, DateTimeOffsetVal) - -//------------------------------------------------------------------- -// define SQL Server specific types. -//------------------------------------------------------------------- -typedef enum DBTYPEENUM EOledbTypes; -#define DBTYPE_XML ((EOledbTypes) 141) // introduced in SQL 2005 -#define DBTYPE_TABLE ((EOledbTypes) 143) // introduced in SQL 2008 -#define DBTYPE_DBTIME2 ((EOledbTypes) 145) // introduced in SQL 2008 -#define DBTYPE_DBTIMESTAMPOFFSET ((EOledbTypes) 146) // introduced in SQL 2008 -#ifdef _SQLOLEDB_H_ -#undef DBTYPE_SQLVARIANT -#endif //_SQLOLEDB_H_ -#define DBTYPE_SQLVARIANT ((EOledbTypes) 144) // introduced in MDAC 2.5 - - -#ifndef _SQLOLEDB_H_ -enum SQLVARENUM - { - VT_SS_EMPTY = DBTYPE_EMPTY, - VT_SS_NULL = DBTYPE_NULL, - VT_SS_UI1 = DBTYPE_UI1, - VT_SS_I2 = DBTYPE_I2, - VT_SS_I4 = DBTYPE_I4, - VT_SS_I8 = DBTYPE_I8, - - //Floats - VT_SS_R4 = DBTYPE_R4, - VT_SS_R8 = DBTYPE_R8, - - //Money - VT_SS_MONEY = DBTYPE_CY, - VT_SS_SMALLMONEY = 200, - - //Strings - VT_SS_WSTRING = 201, - VT_SS_WVARSTRING = 202, - - VT_SS_STRING = 203, - VT_SS_VARSTRING = 204, - - //Bit - VT_SS_BIT = DBTYPE_BOOL, - - //Guid - VT_SS_GUID = DBTYPE_GUID, - - //Exact precision - VT_SS_NUMERIC = DBTYPE_NUMERIC, - VT_SS_DECIMAL = 205, - - //Datetime - VT_SS_DATETIME = DBTYPE_DBTIMESTAMP, - VT_SS_SMALLDATETIME =206, - - //Binary - VT_SS_BINARY =207, - VT_SS_VARBINARY = 208, - //Future - VT_SS_UNKNOWN = 209, - - //Additional datetime - VT_SS_DATE = DBTYPE_DBDATE, - VT_SS_TIME2 = DBTYPE_DBTIME2, - VT_SS_DATETIME2 = 212, - VT_SS_DATETIMEOFFSET = DBTYPE_DBTIMESTAMPOFFSET, - }; -typedef unsigned short SSVARTYPE; - - -enum DBPARAMFLAGSENUM_SS_100 - { DBPARAMFLAGS_SS_ISVARIABLESCALE = 0x40000000 - } ; -enum DBCOLUMNFLAGSENUM_SS_100 - { DBCOLUMNFLAGS_SS_ISVARIABLESCALE = 0x40000000, - DBCOLUMNFLAGS_SS_ISCOLUMNSET = 0x80000000 - } ; - -//------------------------------------------------------------------- -// Class Factory Interface used to initialize pointer to UMS. -//------------------------------------------------------------------- - - -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0001_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0001_v0_0_s_ifspec; - -#ifndef __IUMSInitialize_INTERFACE_DEFINED__ -#define __IUMSInitialize_INTERFACE_DEFINED__ - -/* interface IUMSInitialize */ -/* [unique][uuid][object][local] */ - - -EXTERN_C const IID IID_IUMSInitialize; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("5cf4ca14-ef21-11d0-97e7-00c04fc2ad98") - IUMSInitialize : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE Initialize( - /* [in] */ void *pUMS) = 0; - - }; - -#else /* C style interface */ - - typedef struct IUMSInitializeVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IUMSInitialize * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IUMSInitialize * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IUMSInitialize * This); - - HRESULT ( STDMETHODCALLTYPE *Initialize )( - IUMSInitialize * This, - /* [in] */ void *pUMS); - - END_INTERFACE - } IUMSInitializeVtbl; - - interface IUMSInitialize - { - CONST_VTBL struct IUMSInitializeVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define IUMSInitialize_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define IUMSInitialize_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define IUMSInitialize_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define IUMSInitialize_Initialize(This,pUMS) \ - ( (This)->lpVtbl -> Initialize(This,pUMS) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __IUMSInitialize_INTERFACE_DEFINED__ */ - - -/* interface __MIDL_itf_sqlncli_0000_0002 */ -/* [local] */ - - -// the structure returned by ISQLServerErrorInfo::GetSQLServerInfo -typedef struct tagSSErrorInfo - { - LPOLESTR pwszMessage; - LPOLESTR pwszServer; - LPOLESTR pwszProcedure; - LONG lNative; - BYTE bState; - BYTE bClass; - WORD wLineNumber; - } SSERRORINFO; - - - -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0002_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0002_v0_0_s_ifspec; - -#ifndef __ISQLServerErrorInfo_INTERFACE_DEFINED__ -#define __ISQLServerErrorInfo_INTERFACE_DEFINED__ - -/* interface ISQLServerErrorInfo */ -/* [unique][uuid][object][local] */ - - -EXTERN_C const IID IID_ISQLServerErrorInfo; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("5CF4CA12-EF21-11d0-97E7-00C04FC2AD98") - ISQLServerErrorInfo : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE GetErrorInfo( - /* [out] */ SSERRORINFO **ppErrorInfo, - /* [out] */ OLECHAR **ppStringsBuffer) = 0; - - }; - -#else /* C style interface */ - - typedef struct ISQLServerErrorInfoVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ISQLServerErrorInfo * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - ISQLServerErrorInfo * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - ISQLServerErrorInfo * This); - - HRESULT ( STDMETHODCALLTYPE *GetErrorInfo )( - ISQLServerErrorInfo * This, - /* [out] */ SSERRORINFO **ppErrorInfo, - /* [out] */ OLECHAR **ppStringsBuffer); - - END_INTERFACE - } ISQLServerErrorInfoVtbl; - - interface ISQLServerErrorInfo - { - CONST_VTBL struct ISQLServerErrorInfoVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define ISQLServerErrorInfo_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ISQLServerErrorInfo_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ISQLServerErrorInfo_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define ISQLServerErrorInfo_GetErrorInfo(This,ppErrorInfo,ppStringsBuffer) \ - ( (This)->lpVtbl -> GetErrorInfo(This,ppErrorInfo,ppStringsBuffer) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __ISQLServerErrorInfo_INTERFACE_DEFINED__ */ - - -#ifndef __IRowsetFastLoad_INTERFACE_DEFINED__ -#define __IRowsetFastLoad_INTERFACE_DEFINED__ - -/* interface IRowsetFastLoad */ -/* [unique][uuid][object][local] */ - - -EXTERN_C const IID IID_IRowsetFastLoad; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("5CF4CA13-EF21-11d0-97E7-00C04FC2AD98") - IRowsetFastLoad : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE InsertRow( - /* [in] */ HACCESSOR hAccessor, - /* [in] */ void *pData) = 0; - - virtual HRESULT STDMETHODCALLTYPE Commit( - /* [in] */ BOOL fDone) = 0; - - }; - -#else /* C style interface */ - - typedef struct IRowsetFastLoadVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IRowsetFastLoad * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IRowsetFastLoad * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IRowsetFastLoad * This); - - HRESULT ( STDMETHODCALLTYPE *InsertRow )( - IRowsetFastLoad * This, - /* [in] */ HACCESSOR hAccessor, - /* [in] */ void *pData); - - HRESULT ( STDMETHODCALLTYPE *Commit )( - IRowsetFastLoad * This, - /* [in] */ BOOL fDone); - - END_INTERFACE - } IRowsetFastLoadVtbl; - - interface IRowsetFastLoad - { - CONST_VTBL struct IRowsetFastLoadVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define IRowsetFastLoad_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define IRowsetFastLoad_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define IRowsetFastLoad_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define IRowsetFastLoad_InsertRow(This,hAccessor,pData) \ - ( (This)->lpVtbl -> InsertRow(This,hAccessor,pData) ) - -#define IRowsetFastLoad_Commit(This,fDone) \ - ( (This)->lpVtbl -> Commit(This,fDone) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __IRowsetFastLoad_INTERFACE_DEFINED__ */ - - -/* interface __MIDL_itf_sqlncli_0000_0004 */ -/* [local] */ - -#include // 8-byte structure packing - -typedef struct tagDBTIME2 - { - USHORT hour; - USHORT minute; - USHORT second; - ULONG fraction; - } DBTIME2; - -typedef struct tagDBTIMESTAMPOFFSET - { - SHORT year; - USHORT month; - USHORT day; - USHORT hour; - USHORT minute; - USHORT second; - ULONG fraction; - SHORT timezone_hour; - SHORT timezone_minute; - } DBTIMESTAMPOFFSET; - -#include // restore original structure packing - -struct SSVARIANT - { - SSVARTYPE vt; - DWORD dwReserved1; - DWORD dwReserved2; - union - { - BYTE bTinyIntVal; - SHORT sShortIntVal; - LONG lIntVal; - LONGLONG llBigIntVal; - FLOAT fltRealVal; - DOUBLE dblFloatVal; - CY cyMoneyVal; - VARIANT_BOOL fBitVal; - BYTE rgbGuidVal[ 16 ]; - DB_NUMERIC numNumericVal; - DBDATE dDateVal; - DBTIMESTAMP tsDateTimeVal; - struct _Time2Val - { - DBTIME2 tTime2Val; - BYTE bScale; - } Time2Val; - struct _DateTimeVal - { - DBTIMESTAMP tsDateTimeVal; - BYTE bScale; - } DateTimeVal; - struct _DateTimeOffsetVal - { - DBTIMESTAMPOFFSET tsoDateTimeOffsetVal; - BYTE bScale; - } DateTimeOffsetVal; - struct _NCharVal - { - SHORT sActualLength; - SHORT sMaxLength; - WCHAR *pwchNCharVal; - BYTE rgbReserved[ 5 ]; - DWORD dwReserved; - WCHAR *pwchReserved; - } NCharVal; - struct _CharVal - { - SHORT sActualLength; - SHORT sMaxLength; - CHAR *pchCharVal; - BYTE rgbReserved[ 5 ]; - DWORD dwReserved; - WCHAR *pwchReserved; - } CharVal; - struct _BinaryVal - { - SHORT sActualLength; - SHORT sMaxLength; - BYTE *prgbBinaryVal; - DWORD dwReserved; - } BinaryVal; - struct _UnknownType - { - DWORD dwActualLength; - BYTE rgMetadata[ 16 ]; - BYTE *pUnknownData; - } UnknownType; - struct _BLOBType - { - DBOBJECT dbobj; - IUnknown *pUnk; - } BLOBType; - } ; - } ; -typedef DWORD LOCKMODE; - - -enum LOCKMODEENUM - { LOCKMODE_INVALID = 0, - LOCKMODE_EXCLUSIVE = ( LOCKMODE_INVALID + 1 ) , - LOCKMODE_SHARED = ( LOCKMODE_EXCLUSIVE + 1 ) - } ; - - -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0004_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0004_v0_0_s_ifspec; - -#ifndef __ISchemaLock_INTERFACE_DEFINED__ -#define __ISchemaLock_INTERFACE_DEFINED__ - -/* interface ISchemaLock */ -/* [unique][uuid][object][local] */ - - -EXTERN_C const IID IID_ISchemaLock; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("4C2389FB-2511-11d4-B258-00C04F7971CE") - ISchemaLock : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE GetSchemaLock( - /* [in] */ DBID *pTableID, - /* [in] */ LOCKMODE lmMode, - /* [out] */ HANDLE *phLockHandle, - /* [out] */ ULONGLONG *pTableVersion) = 0; - - virtual HRESULT STDMETHODCALLTYPE ReleaseSchemaLock( - /* [in] */ HANDLE hLockHandle) = 0; - - }; - -#else /* C style interface */ - - typedef struct ISchemaLockVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ISchemaLock * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - ISchemaLock * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - ISchemaLock * This); - - HRESULT ( STDMETHODCALLTYPE *GetSchemaLock )( - ISchemaLock * This, - /* [in] */ DBID *pTableID, - /* [in] */ LOCKMODE lmMode, - /* [out] */ HANDLE *phLockHandle, - /* [out] */ ULONGLONG *pTableVersion); - - HRESULT ( STDMETHODCALLTYPE *ReleaseSchemaLock )( - ISchemaLock * This, - /* [in] */ HANDLE hLockHandle); - - END_INTERFACE - } ISchemaLockVtbl; - - interface ISchemaLock - { - CONST_VTBL struct ISchemaLockVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define ISchemaLock_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ISchemaLock_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ISchemaLock_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define ISchemaLock_GetSchemaLock(This,pTableID,lmMode,phLockHandle,pTableVersion) \ - ( (This)->lpVtbl -> GetSchemaLock(This,pTableID,lmMode,phLockHandle,pTableVersion) ) - -#define ISchemaLock_ReleaseSchemaLock(This,hLockHandle) \ - ( (This)->lpVtbl -> ReleaseSchemaLock(This,hLockHandle) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __ISchemaLock_INTERFACE_DEFINED__ */ - - -#ifndef __IBCPSession_INTERFACE_DEFINED__ -#define __IBCPSession_INTERFACE_DEFINED__ - -/* interface IBCPSession */ -/* [unique][uuid][object][local] */ - - -EXTERN_C const IID IID_IBCPSession; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("88352D80-42D1-42f0-A170-AB0F8B45B939") - IBCPSession : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE BCPColFmt( - /* [in] */ DBORDINAL idxUserDataCol, - /* [in] */ int eUserDataType, - /* [in] */ int cbIndicator, - /* [in] */ int cbUserData, - /* [size_is][in] */ BYTE *pbUserDataTerm, - /* [in] */ int cbUserDataTerm, - /* [in] */ DBORDINAL idxServerCol) = 0; - - virtual HRESULT STDMETHODCALLTYPE BCPColumns( - /* [in] */ DBCOUNTITEM nColumns) = 0; - - virtual HRESULT STDMETHODCALLTYPE BCPControl( - /* [in] */ int eOption, - /* [in] */ void *iValue) = 0; - - virtual HRESULT STDMETHODCALLTYPE BCPDone( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE BCPExec( - /* [out] */ DBROWCOUNT *pRowsCopied) = 0; - - virtual HRESULT STDMETHODCALLTYPE BCPInit( - /* [string][in] */ const wchar_t *pwszTable, - /* [string][in] */ const wchar_t *pwszDataFile, - /* [string][in] */ const wchar_t *pwszErrorFile, - /* [in] */ int eDirection) = 0; - - virtual HRESULT STDMETHODCALLTYPE BCPReadFmt( - /* [string][in] */ const wchar_t *pwszFormatFile) = 0; - - virtual HRESULT STDMETHODCALLTYPE BCPWriteFmt( - /* [string][in] */ const wchar_t *pwszFormatFile) = 0; - - }; - -#else /* C style interface */ - - typedef struct IBCPSessionVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IBCPSession * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IBCPSession * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IBCPSession * This); - - HRESULT ( STDMETHODCALLTYPE *BCPColFmt )( - IBCPSession * This, - /* [in] */ DBORDINAL idxUserDataCol, - /* [in] */ int eUserDataType, - /* [in] */ int cbIndicator, - /* [in] */ int cbUserData, - /* [size_is][in] */ BYTE *pbUserDataTerm, - /* [in] */ int cbUserDataTerm, - /* [in] */ DBORDINAL idxServerCol); - - HRESULT ( STDMETHODCALLTYPE *BCPColumns )( - IBCPSession * This, - /* [in] */ DBCOUNTITEM nColumns); - - HRESULT ( STDMETHODCALLTYPE *BCPControl )( - IBCPSession * This, - /* [in] */ int eOption, - /* [in] */ void *iValue); - - HRESULT ( STDMETHODCALLTYPE *BCPDone )( - IBCPSession * This); - - HRESULT ( STDMETHODCALLTYPE *BCPExec )( - IBCPSession * This, - /* [out] */ DBROWCOUNT *pRowsCopied); - - HRESULT ( STDMETHODCALLTYPE *BCPInit )( - IBCPSession * This, - /* [string][in] */ const wchar_t *pwszTable, - /* [string][in] */ const wchar_t *pwszDataFile, - /* [string][in] */ const wchar_t *pwszErrorFile, - /* [in] */ int eDirection); - - HRESULT ( STDMETHODCALLTYPE *BCPReadFmt )( - IBCPSession * This, - /* [string][in] */ const wchar_t *pwszFormatFile); - - HRESULT ( STDMETHODCALLTYPE *BCPWriteFmt )( - IBCPSession * This, - /* [string][in] */ const wchar_t *pwszFormatFile); - - END_INTERFACE - } IBCPSessionVtbl; - - interface IBCPSession - { - CONST_VTBL struct IBCPSessionVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define IBCPSession_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define IBCPSession_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define IBCPSession_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define IBCPSession_BCPColFmt(This,idxUserDataCol,eUserDataType,cbIndicator,cbUserData,pbUserDataTerm,cbUserDataTerm,idxServerCol) \ - ( (This)->lpVtbl -> BCPColFmt(This,idxUserDataCol,eUserDataType,cbIndicator,cbUserData,pbUserDataTerm,cbUserDataTerm,idxServerCol) ) - -#define IBCPSession_BCPColumns(This,nColumns) \ - ( (This)->lpVtbl -> BCPColumns(This,nColumns) ) - -#define IBCPSession_BCPControl(This,eOption,iValue) \ - ( (This)->lpVtbl -> BCPControl(This,eOption,iValue) ) - -#define IBCPSession_BCPDone(This) \ - ( (This)->lpVtbl -> BCPDone(This) ) - -#define IBCPSession_BCPExec(This,pRowsCopied) \ - ( (This)->lpVtbl -> BCPExec(This,pRowsCopied) ) - -#define IBCPSession_BCPInit(This,pwszTable,pwszDataFile,pwszErrorFile,eDirection) \ - ( (This)->lpVtbl -> BCPInit(This,pwszTable,pwszDataFile,pwszErrorFile,eDirection) ) - -#define IBCPSession_BCPReadFmt(This,pwszFormatFile) \ - ( (This)->lpVtbl -> BCPReadFmt(This,pwszFormatFile) ) - -#define IBCPSession_BCPWriteFmt(This,pwszFormatFile) \ - ( (This)->lpVtbl -> BCPWriteFmt(This,pwszFormatFile) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __IBCPSession_INTERFACE_DEFINED__ */ - - -/* interface __MIDL_itf_sqlncli_0000_0006 */ -/* [local] */ - - -#endif //_SQLOLEDB_H_ - -#define ISOLATIONLEVEL_SNAPSHOT ((ISOLATIONLEVEL)(0x01000000)) // Changes made in other transactions can not be seen. - -#define DBPROPVAL_TI_SNAPSHOT 0x01000000L - - - -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0006_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0006_v0_0_s_ifspec; - -#ifndef __ISSAbort_INTERFACE_DEFINED__ -#define __ISSAbort_INTERFACE_DEFINED__ - -/* interface ISSAbort */ -/* [unique][uuid][object][local] */ - - -EXTERN_C const IID IID_ISSAbort; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("5CF4CA15-EF21-11d0-97E7-00C04FC2AD98") - ISSAbort : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE Abort( void) = 0; - - }; - -#else /* C style interface */ - - typedef struct ISSAbortVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ISSAbort * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - ISSAbort * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - ISSAbort * This); - - HRESULT ( STDMETHODCALLTYPE *Abort )( - ISSAbort * This); - - END_INTERFACE - } ISSAbortVtbl; - - interface ISSAbort - { - CONST_VTBL struct ISSAbortVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define ISSAbort_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ISSAbort_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ISSAbort_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define ISSAbort_Abort(This) \ - ( (This)->lpVtbl -> Abort(This) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __ISSAbort_INTERFACE_DEFINED__ */ - - -/* interface __MIDL_itf_sqlncli_0000_0007 */ -/* [local] */ - - -enum DBBINDFLAGENUM90 - { DBBINDFLAG_OBJECT = 0x2 - } ; - -enum SSACCESSORFLAGS - { SSACCESSOR_ROWDATA = 0x100 - } ; - -enum DBPROPFLAGSENUM90 - { DBPROPFLAGS_PARAMETER = 0x10000 - } ; -typedef struct tagSSPARAMPROPS - { - DBORDINAL iOrdinal; - ULONG cPropertySets; - DBPROPSET *rgPropertySets; - } SSPARAMPROPS; - - - -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0007_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0007_v0_0_s_ifspec; - -#ifndef __ISSCommandWithParameters_INTERFACE_DEFINED__ -#define __ISSCommandWithParameters_INTERFACE_DEFINED__ - -/* interface ISSCommandWithParameters */ -/* [unique][uuid][object][local] */ - - -EXTERN_C const IID IID_ISSCommandWithParameters; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("eec30162-6087-467c-b995-7c523ce96561") - ISSCommandWithParameters : public ICommandWithParameters - { - public: - virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetParameterProperties( - /* [out][in] */ DB_UPARAMS *pcParams, - /* [size_is][size_is][out] */ SSPARAMPROPS **prgParamProperties) = 0; - - virtual /* [local] */ HRESULT STDMETHODCALLTYPE SetParameterProperties( - /* [in] */ DB_UPARAMS cParams, - /* [size_is][unique][in] */ SSPARAMPROPS rgParamProperties[ ]) = 0; - - }; - -#else /* C style interface */ - - typedef struct ISSCommandWithParametersVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ISSCommandWithParameters * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - ISSCommandWithParameters * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - ISSCommandWithParameters * This); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetParameterInfo )( - ISSCommandWithParameters * This, - /* [out][in] */ DB_UPARAMS *pcParams, - /* [size_is][size_is][out] */ DBPARAMINFO **prgParamInfo, - /* [out] */ OLECHAR **ppNamesBuffer); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *MapParameterNames )( - ISSCommandWithParameters * This, - /* [in] */ DB_UPARAMS cParamNames, - /* [size_is][in] */ const OLECHAR *rgParamNames[ ], - /* [size_is][out] */ DB_LPARAMS rgParamOrdinals[ ]); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *SetParameterInfo )( - ISSCommandWithParameters * This, - /* [in] */ DB_UPARAMS cParams, - /* [size_is][unique][in] */ const DB_UPARAMS rgParamOrdinals[ ], - /* [size_is][unique][in] */ const DBPARAMBINDINFO rgParamBindInfo[ ]); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetParameterProperties )( - ISSCommandWithParameters * This, - /* [out][in] */ DB_UPARAMS *pcParams, - /* [size_is][size_is][out] */ SSPARAMPROPS **prgParamProperties); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *SetParameterProperties )( - ISSCommandWithParameters * This, - /* [in] */ DB_UPARAMS cParams, - /* [size_is][unique][in] */ SSPARAMPROPS rgParamProperties[ ]); - - END_INTERFACE - } ISSCommandWithParametersVtbl; - - interface ISSCommandWithParameters - { - CONST_VTBL struct ISSCommandWithParametersVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define ISSCommandWithParameters_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ISSCommandWithParameters_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ISSCommandWithParameters_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define ISSCommandWithParameters_GetParameterInfo(This,pcParams,prgParamInfo,ppNamesBuffer) \ - ( (This)->lpVtbl -> GetParameterInfo(This,pcParams,prgParamInfo,ppNamesBuffer) ) - -#define ISSCommandWithParameters_MapParameterNames(This,cParamNames,rgParamNames,rgParamOrdinals) \ - ( (This)->lpVtbl -> MapParameterNames(This,cParamNames,rgParamNames,rgParamOrdinals) ) - -#define ISSCommandWithParameters_SetParameterInfo(This,cParams,rgParamOrdinals,rgParamBindInfo) \ - ( (This)->lpVtbl -> SetParameterInfo(This,cParams,rgParamOrdinals,rgParamBindInfo) ) - - -#define ISSCommandWithParameters_GetParameterProperties(This,pcParams,prgParamProperties) \ - ( (This)->lpVtbl -> GetParameterProperties(This,pcParams,prgParamProperties) ) - -#define ISSCommandWithParameters_SetParameterProperties(This,cParams,rgParamProperties) \ - ( (This)->lpVtbl -> SetParameterProperties(This,cParams,rgParamProperties) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __ISSCommandWithParameters_INTERFACE_DEFINED__ */ - - -#ifndef __IDBAsynchStatus_INTERFACE_DEFINED__ -#define __IDBAsynchStatus_INTERFACE_DEFINED__ - -/* interface IDBAsynchStatus */ -/* [unique][uuid][object][local] */ - - -EXTERN_C const IID IID_IDBAsynchStatus; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("0c733a95-2a1c-11ce-ade5-00aa0044773d") - IDBAsynchStatus : public IUnknown - { - public: - virtual /* [local] */ HRESULT STDMETHODCALLTYPE Abort( - /* [in] */ HCHAPTER hChapter, - /* [in] */ DBASYNCHOP eOperation) = 0; - - virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetStatus( - /* [in] */ HCHAPTER hChapter, - /* [in] */ DBASYNCHOP eOperation, - /* [out] */ DBCOUNTITEM *pulProgress, - /* [out] */ DBCOUNTITEM *pulProgressMax, - /* [out] */ DBASYNCHPHASE *peAsynchPhase, - /* [out] */ LPOLESTR *ppwszStatusText) = 0; - - }; - -#else /* C style interface */ - - typedef struct IDBAsynchStatusVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IDBAsynchStatus * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IDBAsynchStatus * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IDBAsynchStatus * This); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *Abort )( - IDBAsynchStatus * This, - /* [in] */ HCHAPTER hChapter, - /* [in] */ DBASYNCHOP eOperation); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetStatus )( - IDBAsynchStatus * This, - /* [in] */ HCHAPTER hChapter, - /* [in] */ DBASYNCHOP eOperation, - /* [out] */ DBCOUNTITEM *pulProgress, - /* [out] */ DBCOUNTITEM *pulProgressMax, - /* [out] */ DBASYNCHPHASE *peAsynchPhase, - /* [out] */ LPOLESTR *ppwszStatusText); - - END_INTERFACE - } IDBAsynchStatusVtbl; - - interface IDBAsynchStatus - { - CONST_VTBL struct IDBAsynchStatusVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define IDBAsynchStatus_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define IDBAsynchStatus_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define IDBAsynchStatus_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define IDBAsynchStatus_Abort(This,hChapter,eOperation) \ - ( (This)->lpVtbl -> Abort(This,hChapter,eOperation) ) - -#define IDBAsynchStatus_GetStatus(This,hChapter,eOperation,pulProgress,pulProgressMax,peAsynchPhase,ppwszStatusText) \ - ( (This)->lpVtbl -> GetStatus(This,hChapter,eOperation,pulProgress,pulProgressMax,peAsynchPhase,ppwszStatusText) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - -/* [call_as] */ HRESULT STDMETHODCALLTYPE IDBAsynchStatus_RemoteAbort_Proxy( - IDBAsynchStatus * This, - /* [in] */ HCHAPTER hChapter, - /* [in] */ DBASYNCHOP eOperation, - /* [out] */ IErrorInfo **ppErrorInfoRem); - - -void __RPC_STUB IDBAsynchStatus_RemoteAbort_Stub( - IRpcStubBuffer *This, - IRpcChannelBuffer *_pRpcChannelBuffer, - PRPC_MESSAGE _pRpcMessage, - DWORD *_pdwStubPhase); - - -/* [call_as] */ HRESULT STDMETHODCALLTYPE IDBAsynchStatus_RemoteGetStatus_Proxy( - IDBAsynchStatus * This, - /* [in] */ HCHAPTER hChapter, - /* [in] */ DBASYNCHOP eOperation, - /* [unique][out][in] */ DBCOUNTITEM *pulProgress, - /* [unique][out][in] */ DBCOUNTITEM *pulProgressMax, - /* [unique][out][in] */ DBASYNCHPHASE *peAsynchPhase, - /* [unique][out][in] */ LPOLESTR *ppwszStatusText, - /* [out] */ IErrorInfo **ppErrorInfoRem); - - -void __RPC_STUB IDBAsynchStatus_RemoteGetStatus_Stub( - IRpcStubBuffer *This, - IRpcChannelBuffer *_pRpcChannelBuffer, - PRPC_MESSAGE _pRpcMessage, - DWORD *_pdwStubPhase); - - - -#endif /* __IDBAsynchStatus_INTERFACE_DEFINED__ */ - - -#ifndef __ISSAsynchStatus_INTERFACE_DEFINED__ -#define __ISSAsynchStatus_INTERFACE_DEFINED__ - -/* interface ISSAsynchStatus */ -/* [unique][uuid][object][local] */ - - -EXTERN_C const IID IID_ISSAsynchStatus; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("1FF1F743-8BB0-4c00-ACC4-C10E43B08FC1") - ISSAsynchStatus : public IDBAsynchStatus - { - public: - virtual /* [local] */ HRESULT STDMETHODCALLTYPE WaitForAsynchCompletion( - /* [in] */ DWORD dwMillisecTimeOut) = 0; - - }; - -#else /* C style interface */ - - typedef struct ISSAsynchStatusVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ISSAsynchStatus * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - ISSAsynchStatus * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - ISSAsynchStatus * This); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *Abort )( - ISSAsynchStatus * This, - /* [in] */ HCHAPTER hChapter, - /* [in] */ DBASYNCHOP eOperation); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetStatus )( - ISSAsynchStatus * This, - /* [in] */ HCHAPTER hChapter, - /* [in] */ DBASYNCHOP eOperation, - /* [out] */ DBCOUNTITEM *pulProgress, - /* [out] */ DBCOUNTITEM *pulProgressMax, - /* [out] */ DBASYNCHPHASE *peAsynchPhase, - /* [out] */ LPOLESTR *ppwszStatusText); - - /* [local] */ HRESULT ( STDMETHODCALLTYPE *WaitForAsynchCompletion )( - ISSAsynchStatus * This, - /* [in] */ DWORD dwMillisecTimeOut); - - END_INTERFACE - } ISSAsynchStatusVtbl; - - interface ISSAsynchStatus - { - CONST_VTBL struct ISSAsynchStatusVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define ISSAsynchStatus_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ISSAsynchStatus_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ISSAsynchStatus_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define ISSAsynchStatus_Abort(This,hChapter,eOperation) \ - ( (This)->lpVtbl -> Abort(This,hChapter,eOperation) ) - -#define ISSAsynchStatus_GetStatus(This,hChapter,eOperation,pulProgress,pulProgressMax,peAsynchPhase,ppwszStatusText) \ - ( (This)->lpVtbl -> GetStatus(This,hChapter,eOperation,pulProgress,pulProgressMax,peAsynchPhase,ppwszStatusText) ) - - -#define ISSAsynchStatus_WaitForAsynchCompletion(This,dwMillisecTimeOut) \ - ( (This)->lpVtbl -> WaitForAsynchCompletion(This,dwMillisecTimeOut) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __ISSAsynchStatus_INTERFACE_DEFINED__ */ - - -/* interface __MIDL_itf_sqlncli_0000_0010 */ -/* [local] */ - -//---------------------------------------------------------------------------- -// Values for STATUS bitmask for DBSCHEMA_TABLES & DBSCHEMA_TABLES_INFO -#define TABLE_HAS_UPDATE_INSTEAD_OF_TRIGGER 0x00000001 //table has IOT defined -#define TABLE_HAS_DELETE_INSTEAD_OF_TRIGGER 0x00000002 //table has IOT defined -#define TABLE_HAS_INSERT_INSTEAD_OF_TRIGGER 0x00000004 //table has IOT defined -#define TABLE_HAS_AFTER_UPDATE_TRIGGER 0x00000008 //table has update trigger -#define TABLE_HAS_AFTER_DELETE_TRIGGER 0x00000010 //table has delete trigger -#define TABLE_HAS_AFTER_INSERT_TRIGGER 0x00000020 //table has insert trigger -#define TABLE_HAS_CASCADE_UPDATE 0x00000040 //table has cascade update -#define TABLE_HAS_CASCADE_DELETE 0x00000080 //table has cascade delete - -//---------------------------------------------------------------------------- -// PropIds for DBPROP_INIT_GENERALTIMEOUT -#if (OLEDBVER >= 0x0210) -#define DBPROP_INIT_GENERALTIMEOUT 0x11cL -#endif - -//---------------------------------------------------------------------------- -// PropIds for DBPROPSET_SQLSERVERDATASOURCE -#define SSPROP_ENABLEFASTLOAD 2 -#define SSPROP_ENABLEBULKCOPY 3 - -//---------------------------------------------------------------------------- -// PropIds for DBPROPSET_SQLSERVERDATASOURCEINFO -#define SSPROP_UNICODELCID 2 -#define SSPROP_UNICODECOMPARISONSTYLE 3 -#define SSPROP_COLUMNLEVELCOLLATION 4 -#define SSPROP_CHARACTERSET 5 -#define SSPROP_SORTORDER 6 -#define SSPROP_CURRENTCOLLATION 7 -#define SSPROP_INTEGRATEDAUTHENTICATIONMETHOD 8 -#define SSPROP_MUTUALLYAUTHENTICATED 9 - -//---------------------------------------------------------------------------- -// PropIds for DBPROPSET_SQLSERVERDBINIT -#define SSPROP_INIT_CURRENTLANGUAGE 4 -#define SSPROP_INIT_NETWORKADDRESS 5 -#define SSPROP_INIT_NETWORKLIBRARY 6 -#define SSPROP_INIT_USEPROCFORPREP 7 -#define SSPROP_INIT_AUTOTRANSLATE 8 -#define SSPROP_INIT_PACKETSIZE 9 -#define SSPROP_INIT_APPNAME 10 -#define SSPROP_INIT_WSID 11 -#define SSPROP_INIT_FILENAME 12 -#define SSPROP_INIT_ENCRYPT 13 -#define SSPROP_AUTH_REPL_SERVER_NAME 14 -#define SSPROP_INIT_TAGCOLUMNCOLLATION 15 -#define SSPROP_INIT_MARSCONNECTION 16 -#define SSPROP_INIT_FAILOVERPARTNER 18 -#define SSPROP_AUTH_OLD_PASSWORD 19 -#define SSPROP_INIT_DATATYPECOMPATIBILITY 20 -#define SSPROP_INIT_TRUST_SERVER_CERTIFICATE 21 -#define SSPROP_INIT_SERVERSPN 22 -#define SSPROP_INIT_FAILOVERPARTNERSPN 23 - -//----------------------------------------------------------------------------- -// Values for SSPROP_INIT_USEPROCFORPREP -#define SSPROPVAL_USEPROCFORPREP_OFF 0 -#define SSPROPVAL_USEPROCFORPREP_ON 1 -#define SSPROPVAL_USEPROCFORPREP_ON_DROP 2 - -//----------------------------------------------------------------------------- -// Values for SSPROP_INIT_DATATYPECOMPATIBILITY -#define SSPROPVAL_DATATYPECOMPATIBILITY_SQL2000 80 -#define SSPROPVAL_DATATYPECOMPATIBILITY_DEFAULT 0 - -//---------------------------------------------------------------------------- -// PropIds for DBPROPSET_SQLSERVERSESSION -#define SSPROP_QUOTEDCATALOGNAMES 2 -#define SSPROP_ALLOWNATIVEVARIANT 3 -#define SSPROP_SQLXMLXPROGID 4 -#define SSPROP_ASYNCH_BULKCOPY 5 - -//---------------------------------------------------------------------------- -// PropIds for DBPROPSET_SQLSERVERROWSET -#define SSPROP_MAXBLOBLENGTH 8 -#define SSPROP_FASTLOADOPTIONS 9 -#define SSPROP_FASTLOADKEEPNULLS 10 -#define SSPROP_FASTLOADKEEPIDENTITY 11 -#define SSPROP_CURSORAUTOFETCH 12 -#define SSPROP_DEFERPREPARE 13 -#define SSPROP_IRowsetFastLoad 14 -#define SSPROP_QP_NOTIFICATION_TIMEOUT 17 -#define SSPROP_QP_NOTIFICATION_MSGTEXT 18 -#define SSPROP_QP_NOTIFICATION_OPTIONS 19 -#define SSPROP_NOCOUNT_STATUS 20 -#define SSPROP_COMPUTE_ID 21 -#define SSPROP_COLUMN_ID 22 -#define SSPROP_COMPUTE_BYLIST 23 -#define SSPROP_ISSAsynchStatus 24 - -//----------------------------------------------------------------------------- -// Values for SSPROP_QP_NOTIFICATION_TIMEOUT -#define SSPROPVAL_DEFAULT_NOTIFICATION_TIMEOUT 432000 /* in sec */ -#define SSPROPVAL_MAX_NOTIFICATION_TIMEOUT 0x7FFFFFFF /* in sec */ -#define MAX_NOTIFICATION_LEN 2000 /* NVARCHAR [2000] for both ID & DELIVERY_QUEUE */ - -//---------------------------------------------------------------------------- -// PropIds for DBPROPSET_SQLSERVERCOLUMN -#define SSPROP_COL_COLLATIONNAME 14 -#define SSPROP_COL_UDT_CATALOGNAME 31 -#define SSPROP_COL_UDT_SCHEMANAME 32 -#define SSPROP_COL_UDT_NAME 33 -#define SSPROP_COL_XML_SCHEMACOLLECTION_CATALOGNAME 34 -#define SSPROP_COL_XML_SCHEMACOLLECTION_SCHEMANAME 35 -#define SSPROP_COL_XML_SCHEMACOLLECTIONNAME 36 -#define SSPROP_COL_COMPUTED 37 - - -//---------------------------------------------------------------------------- -// PropIds for DBPROPSET_SQLSERVERSTREAM -#define SSPROP_STREAM_XMLROOT 19 - -//---------------------------------------------------------------------------- -// PropIds for DBPROPSET_SQLSERVERPARAMETER -#define SSPROP_PARAM_XML_SCHEMACOLLECTION_CATALOGNAME 24 -#define SSPROP_PARAM_XML_SCHEMACOLLECTION_SCHEMANAME 25 -#define SSPROP_PARAM_XML_SCHEMACOLLECTIONNAME 26 -#define SSPROP_PARAM_UDT_CATALOGNAME 27 -#define SSPROP_PARAM_UDT_SCHEMANAME 28 -#define SSPROP_PARAM_UDT_NAME 29 -#define SSPROP_PARAM_TYPE_CATALOGNAME 38 -#define SSPROP_PARAM_TYPE_SCHEMANAME 39 -#define SSPROP_PARAM_TYPE_TYPENAME 40 -#define SSPROP_PARAM_TABLE_DEFAULT_COLUMNS 41 -#define SSPROP_PARAM_TABLE_COLUMN_SORT_ORDER 42 - -//---------------------------------------------------------------------------- -// PropIds for DBPROPSET_SQLSERVERINDEX -#define SSPROP_INDEX_XML 1 - -//----------------------------------------------------------------------------- -// -#define BCP_TYPE_DEFAULT 0x00 -#define BCP_TYPE_SQLTEXT 0x23 -#define BCP_TYPE_SQLVARBINARY 0x25 -#define BCP_TYPE_SQLINTN 0x26 -#define BCP_TYPE_SQLVARCHAR 0x27 -#define BCP_TYPE_SQLBINARY 0x2d -#define BCP_TYPE_SQLIMAGE 0x22 -#define BCP_TYPE_SQLCHARACTER 0x2f -#define BCP_TYPE_SQLINT1 0x30 -#define BCP_TYPE_SQLBIT 0x32 -#define BCP_TYPE_SQLINT2 0x34 -#define BCP_TYPE_SQLINT4 0x38 -#define BCP_TYPE_SQLMONEY 0x3c -#define BCP_TYPE_SQLDATETIME 0x3d -#define BCP_TYPE_SQLFLT8 0x3e -#define BCP_TYPE_SQLFLTN 0x6d -#define BCP_TYPE_SQLMONEYN 0x6e -#define BCP_TYPE_SQLDATETIMN 0x6f -#define BCP_TYPE_SQLFLT4 0x3b -#define BCP_TYPE_SQLMONEY4 0x7a -#define BCP_TYPE_SQLDATETIM4 0x3a -#define BCP_TYPE_SQLDECIMAL 0x6a -#define BCP_TYPE_SQLNUMERIC 0x6c -#define BCP_TYPE_SQLUNIQUEID 0x24 -#define BCP_TYPE_SQLBIGCHAR 0xaf -#define BCP_TYPE_SQLBIGVARCHAR 0xa7 -#define BCP_TYPE_SQLBIGBINARY 0xad -#define BCP_TYPE_SQLBIGVARBINARY 0xa5 -#define BCP_TYPE_SQLBITN 0x68 -#define BCP_TYPE_SQLNCHAR 0xef -#define BCP_TYPE_SQLNVARCHAR 0xe7 -#define BCP_TYPE_SQLNTEXT 0x63 -#define BCP_TYPE_SQLDECIMALN 0x6a -#define BCP_TYPE_SQLNUMERICN 0x6c -#define BCP_TYPE_SQLINT8 0x7f -#define BCP_TYPE_SQLVARIANT 0x62 -#define BCP_TYPE_SQLUDT 0xf0 -#define BCP_TYPE_SQLXML 0xf1 -#define BCP_TYPE_SQLDATE 0x28 -#define BCP_TYPE_SQLTIME 0x29 -#define BCP_TYPE_SQLDATETIME2 0x2a -#define BCP_TYPE_SQLDATETIMEOFFSET 0x2b - -#define BCP_DIRECTION_IN 1 -#define BCP_DIRECTION_OUT 2 - -#define BCP_OPTION_MAXERRS 1 -#define BCP_OPTION_FIRST 2 -#define BCP_OPTION_LAST 3 -#define BCP_OPTION_BATCH 4 -#define BCP_OPTION_KEEPNULLS 5 -#define BCP_OPTION_ABORT 6 -#define BCP_OPTION_KEEPIDENTITY 8 -#define BCP_OPTION_HINTSA 10 -#define BCP_OPTION_HINTSW 11 -#define BCP_OPTION_FILECP 12 -#define BCP_OPTION_UNICODEFILE 13 -#define BCP_OPTION_TEXTFILE 14 -#define BCP_OPTION_FILEFMT 15 -#define BCP_OPTION_FMTXML 16 -#define BCP_OPTION_FIRSTEX 17 -#define BCP_OPTION_LASTEX 18 -#define BCP_OPTION_ROWCOUNT 19 - -#define BCP_FILECP_ACP 0 -#define BCP_FILECP_OEMCP 1 -#define BCP_FILECP_RAW (-1) - -#ifdef UNICODE -#define BCP_OPTION_HINTS BCP_OPTION_HINTSW -#else -#define BCP_OPTION_HINTS BCP_OPTION_HINTSA -#endif - -#define BCP_PREFIX_DEFAULT (-10) - -#define BCP_LENGTH_NULL (-1) -#define BCP_LENGTH_VARIABLE (-10) -// -//----------------------------------------------------------------------------- - - -//---------------------------------------------------------------------------- -// Provider-specific Class Ids -// - -#if SQLNCLI_VER >= 1000 - -extern const GUID OLEDBDECLSPEC CLSID_SQLNCLI10 = {0x8F4A6B68L,0x4F36,0x4e3c,{0xBE,0x81,0xBC,0x7C,0xA4,0xE9,0xC4,0x5C}}; -extern const GUID OLEDBDECLSPEC CLSID_SQLNCLI10_ERROR = {0x53F9C3BCL,0x275F,0x4FA5,{0xB3,0xE6,0x25,0xED,0xCD,0x51,0x20,0x23}}; -extern const GUID OLEDBDECLSPEC CLSID_SQLNCLI10_ENUMERATOR = {0x91E4F2A5L,0x1B07,0x45f6,{0x86,0xBF,0x92,0x03,0xC7,0xC7,0x2B,0xE3}}; - -#endif - -extern const GUID OLEDBDECLSPEC CLSID_SQLNCLI = {0x85ecafccL,0xbdd9,0x4b03,{0x97,0xa8,0xfa,0x65,0xcb,0xe3,0x85,0x9b}}; -extern const GUID OLEDBDECLSPEC CLSID_SQLNCLI_ERROR = {0xe8bc0a7aL,0xea71,0x4263,{0x8c,0xda,0x94,0xf3,0x88,0xb8,0xed,0x10}}; -extern const GUID OLEDBDECLSPEC CLSID_SQLNCLI_ENUMERATOR = {0x4898ad37L,0xfe05,0x42df,{0x92,0xf9,0xe8,0x57,0xdd,0xfe,0xe7,0x30}}; -extern const GUID OLEDBDECLSPEC CLSID_ROWSET_TVP = {0xc7ef28d5L,0x7bee,0x443f,{0x86,0xda,0xe3,0x98,0x4f,0xcd,0x4d,0xf9}}; - -//---------------------------------------------------------------------------- -// Provider-specific Interface Ids -// -#ifndef _SQLOLEDB_H_ -extern const GUID OLEDBDECLSPEC IID_ISQLServerErrorInfo = {0x5cf4ca12,0xef21,0x11d0,{0x97,0xe7,0x0,0xc0,0x4f,0xc2,0xad,0x98}}; -extern const GUID OLEDBDECLSPEC IID_IRowsetFastLoad = {0x5cf4ca13,0xef21,0x11d0,{0x97,0xe7,0x0,0xc0,0x4f,0xc2,0xad,0x98}}; -extern const GUID OLEDBDECLSPEC IID_IUMSInitialize = {0x5cf4ca14,0xef21,0x11d0,{0x97,0xe7,0x0,0xc0,0x4f,0xc2,0xad,0x98}}; -extern const GUID OLEDBDECLSPEC IID_ISchemaLock = {0x4c2389fb,0x2511,0x11d4,{0xb2,0x58,0x0,0xc0,0x4f,0x79,0x71,0xce}}; -extern const GUID OLEDBDECLSPEC IID_ISQLXMLHelper = {0xd22a7678L,0xf860,0x40cd,{0xa5,0x67,0x15,0x63,0xde,0xb4,0x6d,0x49}}; -#endif //_SQLOLEDB_H_ -extern const GUID OLEDBDECLSPEC IID_ISSAbort = {0x5cf4ca15,0xef21,0x11d0,{0x97,0xe7,0x0,0xc0,0x4f,0xc2,0xad,0x98}}; -extern const GUID OLEDBDECLSPEC IID_IBCPSession = {0x88352D80,0x42D1,0x42f0,{0xA1,0x70,0xAB,0x0F,0x8B,0x45,0xB9,0x39}}; -extern const GUID OLEDBDECLSPEC IID_ISSCommandWithParameters = {0xeec30162,0x6087,0x467c,{0xb9,0x95,0x7c,0x52,0x3c,0xe9,0x65,0x61}}; -extern const GUID OLEDBDECLSPEC IID_ISSAsynchStatus = {0x1FF1F743,0x8BB0, 0x4c00,{0xAC,0xC4,0xC1,0x0E,0x43,0xB0,0x8F,0xC1}}; - - -//---------------------------------------------------------------------------- -// Provider-specific schema rowsets -// -#ifndef _SQLOLEDB_H_ -extern const GUID OLEDBDECLSPEC DBSCHEMA_LINKEDSERVERS = {0x9093caf4,0x2eac,0x11d1,{0x98,0x9,0x0,0xc0,0x4f,0xc2,0xad,0x98}}; -#endif //_SQLOLEDB_H_ -extern const GUID OLEDBDECLSPEC DBSCHEMA_SQL_ASSEMBLIES = {0x7c1112c8, 0xc2d3, 0x4f6e, {0x94, 0x9a, 0x98, 0x3d, 0x38, 0xa5, 0x8f, 0x46}}; -extern const GUID OLEDBDECLSPEC DBSCHEMA_SQL_ASSEMBLY_DEPENDENCIES = {0xcb0f837b, 0x974c, 0x41b8, {0x90, 0x9d, 0x64, 0x9c, 0xaf, 0x45, 0xad, 0x2f}}; -extern const GUID OLEDBDECLSPEC DBSCHEMA_SQL_USER_TYPES = {0xf1198bd8, 0xa424, 0x4ea3, {0x8d, 0x4c, 0x60, 0x7e, 0xee, 0x2b, 0xab, 0x60}}; -extern const GUID OLEDBDECLSPEC DBSCHEMA_XML_COLLECTIONS = {0x56bfad8c, 0x6e8f, 0x480d, {0x91, 0xde, 0x35, 0x16, 0xd9, 0x9a, 0x5d, 0x10}}; -extern const GUID OLEDBDECLSPEC DBSCHEMA_SQL_TABLE_TYPES = {0x4e26cde7, 0xaaa4, 0x41ed, {0x93, 0xdd, 0x37, 0x6e, 0x6d, 0x40, 0x9c, 0x17}}; -extern const GUID OLEDBDECLSPEC DBSCHEMA_SQL_TABLE_TYPE_PRIMARY_KEYS = {0x9738faea, 0x31e8, 0x4f63, {0xae, 0xd, 0x61, 0x33, 0x16, 0x41, 0x8c, 0xdd}}; -extern const GUID OLEDBDECLSPEC DBSCHEMA_SQL_TABLE_TYPE_COLUMNS = {0xa663d94b, 0xddf7, 0x4a7f, {0xa5, 0x37, 0xd6, 0x1f, 0x12, 0x36, 0x5d, 0x7c}}; -extern const GUID OLEDBDECLSPEC DBSCHEMA_COLUMNS_EXTENDED = {0x66462f01, 0x633a, 0x44d9, {0xb0, 0xd0, 0xfe, 0x66, 0xf2, 0x1a, 0x0d, 0x24}}; -extern const GUID OLEDBDECLSPEC DBSCHEMA_SPARSE_COLUMN_SET = {0x31a4837c, 0xf9ff, 0x405f, {0x89, 0x82, 0x02, 0x19, 0xaa, 0xaa, 0x4a, 0x12}}; - - -#ifndef CRESTRICTIONS_DBSCHEMA_LINKEDSERVERS -#define CRESTRICTIONS_DBSCHEMA_LINKEDSERVERS 1 -#endif - -#ifndef CRESTRICTIONS_DBSCHEMA_ASSEMBLIES -#define CRESTRICTIONS_DBSCHEMA_SQL_ASSEMBLIES 4 -#endif - -#ifndef CRESTRICTIONS_DBSCHEMA_ASSEMBLY_DEPENDENCIES -#define CRESTRICTIONS_DBSCHEMA_SQL_ASSEMBLY_DEPENDENCIES 4 -#endif - -#ifndef CRESTRICTIONS_DBSCHEMA_USER_TYPES -#define CRESTRICTIONS_DBSCHEMA_SQL_USER_TYPES 3 -#endif - -#ifndef CRESTRICTIONS_DBSCHEMA_XML_COLLECTIONS -#define CRESTRICTIONS_DBSCHEMA_XML_COLLECTIONS 4 -#endif - -#ifndef CRESTRICTIONS_DBSCHEMA_SQL_TABLE_TYPES -#define CRESTRICTIONS_DBSCHEMA_SQL_TABLE_TYPES 3 -#endif - -#ifndef CRESTRICTIONS_DBSCHEMA_SQL_TABLE_TYPE_PRIMARY_KEYS -#define CRESTRICTIONS_DBSCHEMA_SQL_TABLE_TYPE_PRIMARY_KEYS 3 -#endif - -#ifndef CRESTRICTIONS_DBSCHEMA_SQL_TABLE_TYPE_COLUMNS -#define CRESTRICTIONS_DBSCHEMA_SQL_TABLE_TYPE_COLUMNS 4 -#endif - -#ifndef CRESTRICTIONS_DBSCHEMA_COLUMNS_EXTENDED -#define CRESTRICTIONS_DBSCHEMA_COLUMNS_EXTENDED 4 -#endif - -#ifndef CRESTRICTIONS_DBSCHEMA_SPARSE_COLUMN_SET -#define CRESTRICTIONS_DBSCHEMA_SPARSE_COLUMN_SET 4 -#endif - - -//---------------------------------------------------------------------------- -// Provider-specific property sets -// -#ifndef _SQLOLEDB_H_ -extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERDATASOURCE = {0x28efaee4,0x2d2c,0x11d1,{0x98,0x7,0x0,0xc0,0x4f,0xc2,0xad,0x98}}; -extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERDATASOURCEINFO= {0xdf10cb94,0x35f6,0x11d2,{0x9c,0x54,0x0,0xc0,0x4f,0x79,0x71,0xd3}}; -extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERDBINIT = {0x5cf4ca10,0xef21,0x11d0,{0x97,0xe7,0x0,0xc0,0x4f,0xc2,0xad,0x98}}; -extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERROWSET = {0x5cf4ca11,0xef21,0x11d0,{0x97,0xe7,0x0,0xc0,0x4f,0xc2,0xad,0x98}}; -extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERSESSION = {0x28efaee5,0x2d2c,0x11d1,{0x98,0x7,0x0,0xc0,0x4f,0xc2,0xad,0x98}}; -extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERCOLUMN = {0x3b63fb5e,0x3fbb,0x11d3,{0x9f,0x29,0x0,0xc0,0x4f,0x8e,0xe9,0xdc}}; -extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERSTREAM = {0x9f79c073,0x8a6d,0x4bca,{0xa8,0xa8,0xc9,0xb7,0x9a,0x9b,0x96,0x2d}}; -#endif //_SQLOLEDB_H_ -extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERPARAMETER = {0xfee09128,0xa67d,0x47ea,{0x8d,0x40,0x24,0xa1,0xd4,0x73,0x7e,0x8d}}; -extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERINDEX = {0xE428B84E,0xA6B7,0x413a,{0x94,0x65,0x56,0x23,0x2E,0x0D,0x2B,0xEB}}; -extern const GUID OLEDBDECLSPEC DBPROPSET_PARAMETERALL = {0x2cd2b7d8,0xe7c2,0x4f6c,{0x9b,0x30,0x75,0xe2,0x58,0x46,0x10,0x97}}; - - -//---------------------------------------------------------------------------- -// Provider-specific columns for IColumnsRowset -// -#define DBCOLUMN_SS_X_GUID {0x627bd890,0xed54,0x11d2,{0xb9,0x94,0x0,0xc0,0x4f,0x8c,0xa8,0x2c}} -// -#ifndef _SQLOLEDB_H_ -extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_COMPFLAGS = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)100}; -extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_SORTID = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)101}; -extern const DBID OLEDBDECLSPEC DBCOLUMN_BASETABLEINSTANCE = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)102}; -extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_TDSCOLLATION = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)103}; -#endif //_SQLOLEDB_H_ -extern const DBID OLEDBDECLSPEC DBCOLUMN_BASESERVERNAME = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)104}; -extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_XML_SCHEMACOLLECTION_CATALOGNAME= {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)105}; -extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_XML_SCHEMACOLLECTION_SCHEMANAME = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)106}; -extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_XML_SCHEMACOLLECTIONNAME = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)107}; -extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_UDT_CATALOGNAME = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)108}; -extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_UDT_SCHEMANAME = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)109}; -extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_UDT_NAME = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)110}; -extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_ASSEMBLY_TYPENAME= {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)111}; - -// OLEDB part of SQL Server Native Client header - end here! -#endif // defined(_SQLNCLI_OLEDB_) || !defined(_SQLNCLI_ODBC_) - -// ODBC part of SQL Server Native Client header - begin here! -#if defined(_SQLNCLI_ODBC_) || !defined(_SQLNCLI_OLEDB_) -#ifdef ODBCVER - -// max SQL Server identifier length -#define SQL_MAX_SQLSERVERNAME 128 - -// SQLSetConnectAttr driver specific defines. -// Microsoft has 1200 thru 1249 reserved for Microsoft SQL Server Native Client driver usage. -// Connection attributes -#define SQL_COPT_SS_BASE 1200 -#define SQL_COPT_SS_REMOTE_PWD (SQL_COPT_SS_BASE+1) // dbrpwset SQLSetConnectOption only -#define SQL_COPT_SS_USE_PROC_FOR_PREP (SQL_COPT_SS_BASE+2) // Use create proc for SQLPrepare -#define SQL_COPT_SS_INTEGRATED_SECURITY (SQL_COPT_SS_BASE+3) // Force integrated security on login -#define SQL_COPT_SS_PRESERVE_CURSORS (SQL_COPT_SS_BASE+4) // Preserve server cursors after SQLTransact -#define SQL_COPT_SS_USER_DATA (SQL_COPT_SS_BASE+5) // dbgetuserdata/dbsetuserdata -#define SQL_COPT_SS_ENLIST_IN_DTC SQL_ATTR_ENLIST_IN_DTC // Enlist in a DTC transaction -#define SQL_COPT_SS_ENLIST_IN_XA SQL_ATTR_ENLIST_IN_XA // Enlist in a XA transaction -#define SQL_COPT_SS_FALLBACK_CONNECT (SQL_COPT_SS_BASE+10) // Enables FallBack connections -#define SQL_COPT_SS_PERF_DATA (SQL_COPT_SS_BASE+11) // Used to access SQL Server ODBC driver performance data -#define SQL_COPT_SS_PERF_DATA_LOG (SQL_COPT_SS_BASE+12) // Used to set the logfile name for the Performance data -#define SQL_COPT_SS_PERF_QUERY_INTERVAL (SQL_COPT_SS_BASE+13) // Used to set the query logging threshold in milliseconds. -#define SQL_COPT_SS_PERF_QUERY_LOG (SQL_COPT_SS_BASE+14) // Used to set the logfile name for saving queryies. -#define SQL_COPT_SS_PERF_QUERY (SQL_COPT_SS_BASE+15) // Used to start and stop query logging. -#define SQL_COPT_SS_PERF_DATA_LOG_NOW (SQL_COPT_SS_BASE+16) // Used to make a statistics log entry to disk. -#define SQL_COPT_SS_QUOTED_IDENT (SQL_COPT_SS_BASE+17) // Enable/Disable Quoted Identifiers -#define SQL_COPT_SS_ANSI_NPW (SQL_COPT_SS_BASE+18) // Enable/Disable ANSI NULL, Padding and Warnings -#define SQL_COPT_SS_BCP (SQL_COPT_SS_BASE+19) // Allow BCP usage on connection -#define SQL_COPT_SS_TRANSLATE (SQL_COPT_SS_BASE+20) // Perform code page translation -#define SQL_COPT_SS_ATTACHDBFILENAME (SQL_COPT_SS_BASE+21) // File name to be attached as a database -#define SQL_COPT_SS_CONCAT_NULL (SQL_COPT_SS_BASE+22) // Enable/Disable CONCAT_NULL_YIELDS_NULL -#define SQL_COPT_SS_ENCRYPT (SQL_COPT_SS_BASE+23) // Allow strong encryption for data -#define SQL_COPT_SS_MARS_ENABLED (SQL_COPT_SS_BASE+24) // Multiple active result set per connection -#define SQL_COPT_SS_FAILOVER_PARTNER (SQL_COPT_SS_BASE+25) // Failover partner server -#define SQL_COPT_SS_OLDPWD (SQL_COPT_SS_BASE+26) // Old Password, used when changing password during login -#define SQL_COPT_SS_TXN_ISOLATION (SQL_COPT_SS_BASE+27) // Used to set/get any driver-specific or ODBC-defined TXN iso level -#define SQL_COPT_SS_TRUST_SERVER_CERTIFICATE (SQL_COPT_SS_BASE+28) // Trust server certificate -#define SQL_COPT_SS_SERVER_SPN (SQL_COPT_SS_BASE+29) // Server SPN -#define SQL_COPT_SS_FAILOVER_PARTNER_SPN (SQL_COPT_SS_BASE+30) // Failover partner server SPN -#define SQL_COPT_SS_INTEGRATED_AUTHENTICATION_METHOD (SQL_COPT_SS_BASE+31) // The integrated authentication method used for the connection -#define SQL_COPT_SS_MUTUALLY_AUTHENTICATED (SQL_COPT_SS_BASE+32) // Used to decide if the connection is mutually authenticated -#define SQL_COPT_SS_MAX_USED SQL_COPT_SS_MUTUALLY_AUTHENTICATED -// Define old names -#define SQL_REMOTE_PWD SQL_COPT_SS_REMOTE_PWD -#define SQL_USE_PROCEDURE_FOR_PREPARE SQL_COPT_SS_USE_PROC_FOR_PREP -#define SQL_INTEGRATED_SECURITY SQL_COPT_SS_INTEGRATED_SECURITY -#define SQL_PRESERVE_CURSORS SQL_COPT_SS_PRESERVE_CURSORS - -// SQLSetStmtAttr SQL Server Native Client driver specific defines. -// Statement attributes -#define SQL_SOPT_SS_BASE 1225 -#define SQL_SOPT_SS_TEXTPTR_LOGGING (SQL_SOPT_SS_BASE+0) // Text pointer logging -#define SQL_SOPT_SS_CURRENT_COMMAND (SQL_SOPT_SS_BASE+1) // dbcurcmd SQLGetStmtOption only -#define SQL_SOPT_SS_HIDDEN_COLUMNS (SQL_SOPT_SS_BASE+2) // Expose FOR BROWSE hidden columns -#define SQL_SOPT_SS_NOBROWSETABLE (SQL_SOPT_SS_BASE+3) // Set NOBROWSETABLE option -#define SQL_SOPT_SS_REGIONALIZE (SQL_SOPT_SS_BASE+4) // Regionalize output character conversions -#define SQL_SOPT_SS_CURSOR_OPTIONS (SQL_SOPT_SS_BASE+5) // Server cursor options -#define SQL_SOPT_SS_NOCOUNT_STATUS (SQL_SOPT_SS_BASE+6) // Real vs. Not Real row count indicator -#define SQL_SOPT_SS_DEFER_PREPARE (SQL_SOPT_SS_BASE+7) // Defer prepare until necessary -#define SQL_SOPT_SS_QUERYNOTIFICATION_TIMEOUT (SQL_SOPT_SS_BASE+8) // Notification timeout -#define SQL_SOPT_SS_QUERYNOTIFICATION_MSGTEXT (SQL_SOPT_SS_BASE+9) // Notification message text -#define SQL_SOPT_SS_QUERYNOTIFICATION_OPTIONS (SQL_SOPT_SS_BASE+10)// SQL service broker name -#define SQL_SOPT_SS_PARAM_FOCUS (SQL_SOPT_SS_BASE+11)// Direct subsequent calls to parameter related methods to set properties on constituent columns/parameters of container types -#define SQL_SOPT_SS_NAME_SCOPE (SQL_SOPT_SS_BASE+12)// Sets name scope for subsequent catalog function calls -#define SQL_SOPT_SS_MAX_USED SQL_SOPT_SS_NAME_SCOPE -// Define old names -#define SQL_TEXTPTR_LOGGING SQL_SOPT_SS_TEXTPTR_LOGGING -#define SQL_COPT_SS_BASE_EX 1240 -#define SQL_COPT_SS_BROWSE_CONNECT (SQL_COPT_SS_BASE_EX+1) // Browse connect mode of operation -#define SQL_COPT_SS_BROWSE_SERVER (SQL_COPT_SS_BASE_EX+2) // Single Server browse request. -#define SQL_COPT_SS_WARN_ON_CP_ERROR (SQL_COPT_SS_BASE_EX+3) // Issues warning when data from the server had a loss during code page conversion. -#define SQL_COPT_SS_CONNECTION_DEAD (SQL_COPT_SS_BASE_EX+4) // dbdead SQLGetConnectOption only. It will try to ping the server. Expensive connection check -#define SQL_COPT_SS_BROWSE_CACHE_DATA (SQL_COPT_SS_BASE_EX+5) // Determines if we should cache browse info. Used when returned buffer is greater then ODBC limit (32K) -#define SQL_COPT_SS_RESET_CONNECTION (SQL_COPT_SS_BASE_EX+6) // When this option is set, we will perform connection reset on next packet -#define SQL_COPT_SS_EX_MAX_USED SQL_COPT_SS_RESET_CONNECTION - -// SQLColAttributes driver specific defines. -// SQLSetDescField/SQLGetDescField driver specific defines. -// Microsoft has 1200 thru 1249 reserved for Microsoft SQL Server Native Client driver usage. -#define SQL_CA_SS_BASE 1200 -#define SQL_CA_SS_COLUMN_SSTYPE (SQL_CA_SS_BASE+0) // dbcoltype/dbalttype -#define SQL_CA_SS_COLUMN_UTYPE (SQL_CA_SS_BASE+1) // dbcolutype/dbaltutype -#define SQL_CA_SS_NUM_ORDERS (SQL_CA_SS_BASE+2) // dbnumorders -#define SQL_CA_SS_COLUMN_ORDER (SQL_CA_SS_BASE+3) // dbordercol -#define SQL_CA_SS_COLUMN_VARYLEN (SQL_CA_SS_BASE+4) // dbvarylen -#define SQL_CA_SS_NUM_COMPUTES (SQL_CA_SS_BASE+5) // dbnumcompute -#define SQL_CA_SS_COMPUTE_ID (SQL_CA_SS_BASE+6) // dbnextrow status return -#define SQL_CA_SS_COMPUTE_BYLIST (SQL_CA_SS_BASE+7) // dbbylist -#define SQL_CA_SS_COLUMN_ID (SQL_CA_SS_BASE+8) // dbaltcolid -#define SQL_CA_SS_COLUMN_OP (SQL_CA_SS_BASE+9) // dbaltop -#define SQL_CA_SS_COLUMN_SIZE (SQL_CA_SS_BASE+10) // dbcollen -#define SQL_CA_SS_COLUMN_HIDDEN (SQL_CA_SS_BASE+11) // Column is hidden (FOR BROWSE) -#define SQL_CA_SS_COLUMN_KEY (SQL_CA_SS_BASE+12) // Column is key column (FOR BROWSE) -//#define SQL_DESC_BASE_COLUMN_NAME_OLD (SQL_CA_SS_BASE+13) // This is defined at another location. -#define SQL_CA_SS_COLUMN_COLLATION (SQL_CA_SS_BASE+14) // Column collation (only for chars) -#define SQL_CA_SS_VARIANT_TYPE (SQL_CA_SS_BASE+15) -#define SQL_CA_SS_VARIANT_SQL_TYPE (SQL_CA_SS_BASE+16) -#define SQL_CA_SS_VARIANT_SERVER_TYPE (SQL_CA_SS_BASE+17) - -// XML, CLR UDT, and table valued parameter related metadata -#define SQL_CA_SS_UDT_CATALOG_NAME (SQL_CA_SS_BASE+18) // UDT catalog name -#define SQL_CA_SS_UDT_SCHEMA_NAME (SQL_CA_SS_BASE+19) // UDT schema name -#define SQL_CA_SS_UDT_TYPE_NAME (SQL_CA_SS_BASE+20) // UDT type name -#define SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME (SQL_CA_SS_BASE+21) // Qualified name of the assembly containing the UDT class -#define SQL_CA_SS_XML_SCHEMACOLLECTION_CATALOG_NAME (SQL_CA_SS_BASE+22) // Name of the catalog that contains XML Schema collection -#define SQL_CA_SS_XML_SCHEMACOLLECTION_SCHEMA_NAME (SQL_CA_SS_BASE+23) // Name of the schema that contains XML Schema collection -#define SQL_CA_SS_XML_SCHEMACOLLECTION_NAME (SQL_CA_SS_BASE+24) // Name of the XML Schema collection -#define SQL_CA_SS_CATALOG_NAME (SQL_CA_SS_BASE+25) // Catalog name -#define SQL_CA_SS_SCHEMA_NAME (SQL_CA_SS_BASE+26) // Schema name -#define SQL_CA_SS_TYPE_NAME (SQL_CA_SS_BASE+27) // Type name - -// table valued parameter related metadata -#define SQL_CA_SS_COLUMN_COMPUTED (SQL_CA_SS_BASE+29) // column is computed -#define SQL_CA_SS_COLUMN_IN_UNIQUE_KEY (SQL_CA_SS_BASE+30) // column is part of a unique key -#define SQL_CA_SS_COLUMN_SORT_ORDER (SQL_CA_SS_BASE+31) // column sort order -#define SQL_CA_SS_COLUMN_SORT_ORDINAL (SQL_CA_SS_BASE+32) // column sort ordinal -#define SQL_CA_SS_COLUMN_HAS_DEFAULT_VALUE (SQL_CA_SS_BASE+33) // column has default value for all rows of the table valued parameter - -// sparse column related metadata -#define SQL_CA_SS_IS_COLUMN_SET (SQL_CA_SS_BASE+34) // column is a column-set column for sparse columns - -// Legacy datetime related metadata -#define SQL_CA_SS_SERVER_TYPE (SQL_CA_SS_BASE+35) // column type to send on the wire for datetime types - -#define SQL_CA_SS_MAX_USED (SQL_CA_SS_BASE+36) - -// Defines returned by SQL_ATTR_CURSOR_TYPE/SQL_CURSOR_TYPE -#define SQL_CURSOR_FAST_FORWARD_ONLY 8 // Only returned by SQLGetStmtAttr/Option -// Defines for use with SQL_COPT_SS_USE_PROC_FOR_PREP -#define SQL_UP_OFF 0L // Procedures won't be used for prepare -#define SQL_UP_ON 1L // Procedures will be used for prepare -#define SQL_UP_ON_DROP 2L // Temp procedures will be explicitly dropped -#define SQL_UP_DEFAULT SQL_UP_ON -// Defines for use with SQL_COPT_SS_INTEGRATED_SECURITY - Pre-Connect Option only -#define SQL_IS_OFF 0L // Integrated security isn't used -#define SQL_IS_ON 1L // Integrated security is used -#define SQL_IS_DEFAULT SQL_IS_OFF -// Defines for use with SQL_COPT_SS_PRESERVE_CURSORS -#define SQL_PC_OFF 0L // Cursors are closed on SQLTransact -#define SQL_PC_ON 1L // Cursors remain open on SQLTransact -#define SQL_PC_DEFAULT SQL_PC_OFF -// Defines for use with SQL_COPT_SS_USER_DATA -#define SQL_UD_NOTSET NULL // No user data pointer set -// Defines for use with SQL_COPT_SS_TRANSLATE -#define SQL_XL_OFF 0L // Code page translation is not performed -#define SQL_XL_ON 1L // Code page translation is performed -#define SQL_XL_DEFAULT SQL_XL_ON -// Defines for use with SQL_COPT_SS_FALLBACK_CONNECT - Pre-Connect Option only -#define SQL_FB_OFF 0L // FallBack connections are disabled -#define SQL_FB_ON 1L // FallBack connections are enabled -#define SQL_FB_DEFAULT SQL_FB_OFF -// Defines for use with SQL_COPT_SS_BCP - Pre-Connect Option only -#define SQL_BCP_OFF 0L // BCP is not allowed on connection -#define SQL_BCP_ON 1L // BCP is allowed on connection -#define SQL_BCP_DEFAULT SQL_BCP_OFF -// Defines for use with SQL_COPT_SS_QUOTED_IDENT -#define SQL_QI_OFF 0L // Quoted identifiers are enable -#define SQL_QI_ON 1L // Quoted identifiers are disabled -#define SQL_QI_DEFAULT SQL_QI_ON -// Defines for use with SQL_COPT_SS_ANSI_NPW - Pre-Connect Option only -#define SQL_AD_OFF 0L // ANSI NULLs, Padding and Warnings are enabled -#define SQL_AD_ON 1L // ANSI NULLs, Padding and Warnings are disabled -#define SQL_AD_DEFAULT SQL_AD_ON -// Defines for use with SQL_COPT_SS_CONCAT_NULL - Pre-Connect Option only -#define SQL_CN_OFF 0L // CONCAT_NULL_YIELDS_NULL is off -#define SQL_CN_ON 1L // CONCAT_NULL_YIELDS_NULL is on -#define SQL_CN_DEFAULT SQL_CN_ON -// Defines for use with SQL_SOPT_SS_TEXTPTR_LOGGING -#define SQL_TL_OFF 0L // No logging on text pointer ops -#define SQL_TL_ON 1L // Logging occurs on text pointer ops -#define SQL_TL_DEFAULT SQL_TL_ON -// Defines for use with SQL_SOPT_SS_HIDDEN_COLUMNS -#define SQL_HC_OFF 0L // FOR BROWSE columns are hidden -#define SQL_HC_ON 1L // FOR BROWSE columns are exposed -#define SQL_HC_DEFAULT SQL_HC_OFF -// Defines for use with SQL_SOPT_SS_NOBROWSETABLE -#define SQL_NB_OFF 0L // NO_BROWSETABLE is off -#define SQL_NB_ON 1L // NO_BROWSETABLE is on -#define SQL_NB_DEFAULT SQL_NB_OFF -// Defines for use with SQL_SOPT_SS_REGIONALIZE -#define SQL_RE_OFF 0L // No regionalization occurs on output character conversions -#define SQL_RE_ON 1L // Regionalization occurs on output character conversions -#define SQL_RE_DEFAULT SQL_RE_OFF -// Defines for use with SQL_SOPT_SS_CURSOR_OPTIONS -#define SQL_CO_OFF 0L // Clear all cursor options -#define SQL_CO_FFO 1L // Fast-forward cursor will be used -#define SQL_CO_AF 2L // Autofetch on cursor open -#define SQL_CO_FFO_AF (SQL_CO_FFO|SQL_CO_AF) // Fast-forward cursor with autofetch -#define SQL_CO_FIREHOSE_AF 4L // Auto fetch on fire-hose cursors -#define SQL_CO_DEFAULT SQL_CO_OFF -//SQL_SOPT_SS_NOCOUNT_STATUS -#define SQL_NC_OFF 0L -#define SQL_NC_ON 1L -//SQL_SOPT_SS_DEFER_PREPARE -#define SQL_DP_OFF 0L -#define SQL_DP_ON 1L -//SQL_SOPT_SS_NAME_SCOPE -#define SQL_SS_NAME_SCOPE_TABLE 0L -#define SQL_SS_NAME_SCOPE_TABLE_TYPE 1L -#define SQL_SS_NAME_SCOPE_EXTENDED 2L -#define SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET 3L -#define SQL_SS_NAME_SCOPE_DEFAULT SQL_SS_NAME_SCOPE_TABLE -//SQL_COPT_SS_ENCRYPT -#define SQL_EN_OFF 0L -#define SQL_EN_ON 1L -//SQL_COPT_SS_TRUST_SERVER_CERTIFICATE -#define SQL_TRUST_SERVER_CERTIFICATE_NO 0L -#define SQL_TRUST_SERVER_CERTIFICATE_YES 1L -//SQL_COPT_SS_BROWSE_CONNECT -#define SQL_MORE_INFO_NO 0L -#define SQL_MORE_INFO_YES 1L -//SQL_COPT_SS_BROWSE_CACHE_DATA -#define SQL_CACHE_DATA_NO 0L -#define SQL_CACHE_DATA_YES 1L -//SQL_COPT_SS_RESET_CONNECTION -#define SQL_RESET_YES 1L -//SQL_COPT_SS_WARN_ON_CP_ERROR -#define SQL_WARN_NO 0L -#define SQL_WARN_YES 1L -//SQL_COPT_SS_MARS_ENABLED -#define SQL_MARS_ENABLED_NO 0L -#define SQL_MARS_ENABLED_YES 1L -/* SQL_TXN_ISOLATION_OPTION bitmasks */ -#define SQL_TXN_SS_SNAPSHOT 0x00000020L - -// The following are defines for SQL_CA_SS_COLUMN_SORT_ORDER -#define SQL_SS_ORDER_UNSPECIFIED 0L -#define SQL_SS_DESCENDING_ORDER 1L -#define SQL_SS_ASCENDING_ORDER 2L -#define SQL_SS_ORDER_DEFAULT SQL_SS_ORDER_UNSPECIFIED - -// Driver specific SQL data type defines. -// Microsoft has -150 thru -199 reserved for Microsoft SQL Server Native Client driver usage. -#define SQL_SS_VARIANT (-150) -#define SQL_SS_UDT (-151) -#define SQL_SS_XML (-152) -#define SQL_SS_TABLE (-153) -#define SQL_SS_TIME2 (-154) -#define SQL_SS_TIMESTAMPOFFSET (-155) - -// Local types to be used with SQL_CA_SS_SERVER_TYPE -#define SQL_SS_TYPE_DEFAULT 0L -#define SQL_SS_TYPE_SMALLDATETIME 1L -#define SQL_SS_TYPE_DATETIME 2L - -#ifndef SQLNCLI_NO_BCP -// Define the symbol SQLNCLI_NO_BCP if you are not using BCP in your application -// and you want to exclude the BCP-related definitions in this header file. - -// SQL Server Data Type defines. -// New types for SQL 6.0 and later servers -#define SQLTEXT 0x23 -#define SQLVARBINARY 0x25 -#define SQLINTN 0x26 -#define SQLVARCHAR 0x27 -#define SQLBINARY 0x2d -#define SQLIMAGE 0x22 -#define SQLCHARACTER 0x2f -#define SQLINT1 0x30 -#define SQLBIT 0x32 -#define SQLINT2 0x34 -#define SQLINT4 0x38 -#define SQLMONEY 0x3c -#define SQLDATETIME 0x3d -#define SQLFLT8 0x3e -#define SQLFLTN 0x6d -#define SQLMONEYN 0x6e -#define SQLDATETIMN 0x6f -#define SQLFLT4 0x3b -#define SQLMONEY4 0x7a -#define SQLDATETIM4 0x3a -// New types for SQL 6.0 and later servers -#define SQLDECIMAL 0x6a -#define SQLNUMERIC 0x6c -// New types for SQL 7.0 and later servers -#define SQLUNIQUEID 0x24 -#define SQLBIGCHAR 0xaf -#define SQLBIGVARCHAR 0xa7 -#define SQLBIGBINARY 0xad -#define SQLBIGVARBINARY 0xa5 -#define SQLBITN 0x68 -#define SQLNCHAR 0xef -#define SQLNVARCHAR 0xe7 -#define SQLNTEXT 0x63 -// New types for SQL 2000 and later servers -#define SQLINT8 0x7f -#define SQLVARIANT 0x62 -// New types for SQL 2005 and later servers -#define SQLUDT 0xf0 -#define SQLXML 0xf1 -// New types for SQL 2008 and later servers -#define SQLTABLE 0xf3 -#define SQLDATEN 0x28 -#define SQLTIMEN 0x29 -#define SQLDATETIME2N 0x2a -#define SQLDATETIMEOFFSETN 0x2b -// Define old names -#define SQLDECIMALN 0x6a -#define SQLNUMERICN 0x6c -#endif // SQLNCLI_NO_BCP - -// SQL_SS_LENGTH_UNLIMITED is used to describe the max length of -// VARCHAR(max), VARBINARY(max), NVARCHAR(max), and XML columns -#define SQL_SS_LENGTH_UNLIMITED 0 - -// User Data Type definitions. -// Returned by SQLColAttributes/SQL_CA_SS_COLUMN_UTYPE. -#define SQLudtBINARY 3 -#define SQLudtBIT 16 -#define SQLudtBITN 0 -#define SQLudtCHAR 1 -#define SQLudtDATETIM4 22 -#define SQLudtDATETIME 12 -#define SQLudtDATETIMN 15 -#define SQLudtDECML 24 -#define SQLudtDECMLN 26 -#define SQLudtFLT4 23 -#define SQLudtFLT8 8 -#define SQLudtFLTN 14 -#define SQLudtIMAGE 20 -#define SQLudtINT1 5 -#define SQLudtINT2 6 -#define SQLudtINT4 7 -#define SQLudtINTN 13 -#define SQLudtMONEY 11 -#define SQLudtMONEY4 21 -#define SQLudtMONEYN 17 -#define SQLudtNUM 10 -#define SQLudtNUMN 25 -#define SQLudtSYSNAME 18 -#define SQLudtTEXT 19 -#define SQLudtTIMESTAMP 80 -#define SQLudtUNIQUEIDENTIFIER 0 -#define SQLudtVARBINARY 4 -#define SQLudtVARCHAR 2 -#define MIN_USER_DATATYPE 256 -// Aggregate operator types. -// Returned by SQLColAttributes/SQL_CA_SS_COLUMN_OP. -#define SQLAOPSTDEV 0x30 // Standard deviation -#define SQLAOPSTDEVP 0x31 // Standard deviation population -#define SQLAOPVAR 0x32 // Variance -#define SQLAOPVARP 0x33 // Variance population -#define SQLAOPCNT 0x4b // Count -#define SQLAOPSUM 0x4d // Sum -#define SQLAOPAVG 0x4f // Average -#define SQLAOPMIN 0x51 // Min -#define SQLAOPMAX 0x52 // Max -#define SQLAOPANY 0x53 // Any -#define SQLAOPNOOP 0x56 // None -// SQLGetInfo driver specific defines. -// Microsoft has 1151 thru 1200 reserved for Microsoft SQL Server Native Client driver usage. -#define SQL_INFO_SS_FIRST 1199 -#define SQL_INFO_SS_NETLIB_NAMEW (SQL_INFO_SS_FIRST+0) // dbprocinfo -#define SQL_INFO_SS_NETLIB_NAMEA (SQL_INFO_SS_FIRST+1) // dbprocinfo -#define SQL_INFO_SS_MAX_USED SQL_INFO_SS_NETLIB_NAMEA -#ifdef UNICODE -#define SQL_INFO_SS_NETLIB_NAME SQL_INFO_SS_NETLIB_NAMEW -#else -#define SQL_INFO_SS_NETLIB_NAME SQL_INFO_SS_NETLIB_NAMEA -#endif -// SQLGetDiagField driver specific defines. -// Microsoft has -1150 thru -1199 reserved for Microsoft SQL Server Native Client driver usage. -#define SQL_DIAG_SS_BASE (-1150) -#define SQL_DIAG_SS_MSGSTATE (SQL_DIAG_SS_BASE) -#define SQL_DIAG_SS_SEVERITY (SQL_DIAG_SS_BASE-1) -#define SQL_DIAG_SS_SRVNAME (SQL_DIAG_SS_BASE-2) -#define SQL_DIAG_SS_PROCNAME (SQL_DIAG_SS_BASE-3) -#define SQL_DIAG_SS_LINE (SQL_DIAG_SS_BASE-4) -// SQLGetDiagField/SQL_DIAG_DYNAMIC_FUNCTION_CODE driver specific defines. -// Microsoft has -200 thru -299 reserved for Microsoft SQL Server Native Client driver usage. -#define SQL_DIAG_DFC_SS_BASE (-200) -#define SQL_DIAG_DFC_SS_ALTER_DATABASE (SQL_DIAG_DFC_SS_BASE-0) -#define SQL_DIAG_DFC_SS_CHECKPOINT (SQL_DIAG_DFC_SS_BASE-1) -#define SQL_DIAG_DFC_SS_CONDITION (SQL_DIAG_DFC_SS_BASE-2) -#define SQL_DIAG_DFC_SS_CREATE_DATABASE (SQL_DIAG_DFC_SS_BASE-3) -#define SQL_DIAG_DFC_SS_CREATE_DEFAULT (SQL_DIAG_DFC_SS_BASE-4) -#define SQL_DIAG_DFC_SS_CREATE_PROCEDURE (SQL_DIAG_DFC_SS_BASE-5) -#define SQL_DIAG_DFC_SS_CREATE_RULE (SQL_DIAG_DFC_SS_BASE-6) -#define SQL_DIAG_DFC_SS_CREATE_TRIGGER (SQL_DIAG_DFC_SS_BASE-7) -#define SQL_DIAG_DFC_SS_CURSOR_DECLARE (SQL_DIAG_DFC_SS_BASE-8) -#define SQL_DIAG_DFC_SS_CURSOR_OPEN (SQL_DIAG_DFC_SS_BASE-9) -#define SQL_DIAG_DFC_SS_CURSOR_FETCH (SQL_DIAG_DFC_SS_BASE-10) -#define SQL_DIAG_DFC_SS_CURSOR_CLOSE (SQL_DIAG_DFC_SS_BASE-11) -#define SQL_DIAG_DFC_SS_DEALLOCATE_CURSOR (SQL_DIAG_DFC_SS_BASE-12) -#define SQL_DIAG_DFC_SS_DBCC (SQL_DIAG_DFC_SS_BASE-13) -#define SQL_DIAG_DFC_SS_DISK (SQL_DIAG_DFC_SS_BASE-14) -#define SQL_DIAG_DFC_SS_DROP_DATABASE (SQL_DIAG_DFC_SS_BASE-15) -#define SQL_DIAG_DFC_SS_DROP_DEFAULT (SQL_DIAG_DFC_SS_BASE-16) -#define SQL_DIAG_DFC_SS_DROP_PROCEDURE (SQL_DIAG_DFC_SS_BASE-17) -#define SQL_DIAG_DFC_SS_DROP_RULE (SQL_DIAG_DFC_SS_BASE-18) -#define SQL_DIAG_DFC_SS_DROP_TRIGGER (SQL_DIAG_DFC_SS_BASE-19) -#define SQL_DIAG_DFC_SS_DUMP_DATABASE (SQL_DIAG_DFC_SS_BASE-20) -#define SQL_DIAG_DFC_SS_BACKUP_DATABASE (SQL_DIAG_DFC_SS_BASE-20) -#define SQL_DIAG_DFC_SS_DUMP_TABLE (SQL_DIAG_DFC_SS_BASE-21) -#define SQL_DIAG_DFC_SS_DUMP_TRANSACTION (SQL_DIAG_DFC_SS_BASE-22) -#define SQL_DIAG_DFC_SS_BACKUP_TRANSACTION (SQL_DIAG_DFC_SS_BASE-22) -#define SQL_DIAG_DFC_SS_GOTO (SQL_DIAG_DFC_SS_BASE-23) -#define SQL_DIAG_DFC_SS_INSERT_BULK (SQL_DIAG_DFC_SS_BASE-24) -#define SQL_DIAG_DFC_SS_KILL (SQL_DIAG_DFC_SS_BASE-25) -#define SQL_DIAG_DFC_SS_LOAD_DATABASE (SQL_DIAG_DFC_SS_BASE-26) -#define SQL_DIAG_DFC_SS_RESTORE_DATABASE (SQL_DIAG_DFC_SS_BASE-26) -#define SQL_DIAG_DFC_SS_LOAD_HEADERONLY (SQL_DIAG_DFC_SS_BASE-27) -#define SQL_DIAG_DFC_SS_RESTORE_HEADERONLY (SQL_DIAG_DFC_SS_BASE-27) -#define SQL_DIAG_DFC_SS_LOAD_TABLE (SQL_DIAG_DFC_SS_BASE-28) -#define SQL_DIAG_DFC_SS_LOAD_TRANSACTION (SQL_DIAG_DFC_SS_BASE-29) -#define SQL_DIAG_DFC_SS_RESTORE_TRANSACTION (SQL_DIAG_DFC_SS_BASE-29) -#define SQL_DIAG_DFC_SS_PRINT (SQL_DIAG_DFC_SS_BASE-30) -#define SQL_DIAG_DFC_SS_RAISERROR (SQL_DIAG_DFC_SS_BASE-31) -#define SQL_DIAG_DFC_SS_READTEXT (SQL_DIAG_DFC_SS_BASE-32) -#define SQL_DIAG_DFC_SS_RECONFIGURE (SQL_DIAG_DFC_SS_BASE-33) -#define SQL_DIAG_DFC_SS_RETURN (SQL_DIAG_DFC_SS_BASE-34) -#define SQL_DIAG_DFC_SS_SELECT_INTO (SQL_DIAG_DFC_SS_BASE-35) -#define SQL_DIAG_DFC_SS_SET (SQL_DIAG_DFC_SS_BASE-36) -#define SQL_DIAG_DFC_SS_SET_IDENTITY_INSERT (SQL_DIAG_DFC_SS_BASE-37) -#define SQL_DIAG_DFC_SS_SET_ROW_COUNT (SQL_DIAG_DFC_SS_BASE-38) -#define SQL_DIAG_DFC_SS_SET_STATISTICS (SQL_DIAG_DFC_SS_BASE-39) -#define SQL_DIAG_DFC_SS_SET_TEXTSIZE (SQL_DIAG_DFC_SS_BASE-40) -#define SQL_DIAG_DFC_SS_SETUSER (SQL_DIAG_DFC_SS_BASE-41) -#define SQL_DIAG_DFC_SS_SHUTDOWN (SQL_DIAG_DFC_SS_BASE-42) -#define SQL_DIAG_DFC_SS_TRANS_BEGIN (SQL_DIAG_DFC_SS_BASE-43) -#define SQL_DIAG_DFC_SS_TRANS_COMMIT (SQL_DIAG_DFC_SS_BASE-44) -#define SQL_DIAG_DFC_SS_TRANS_PREPARE (SQL_DIAG_DFC_SS_BASE-45) -#define SQL_DIAG_DFC_SS_TRANS_ROLLBACK (SQL_DIAG_DFC_SS_BASE-46) -#define SQL_DIAG_DFC_SS_TRANS_SAVE (SQL_DIAG_DFC_SS_BASE-47) -#define SQL_DIAG_DFC_SS_TRUNCATE_TABLE (SQL_DIAG_DFC_SS_BASE-48) -#define SQL_DIAG_DFC_SS_UPDATE_STATISTICS (SQL_DIAG_DFC_SS_BASE-49) -#define SQL_DIAG_DFC_SS_UPDATETEXT (SQL_DIAG_DFC_SS_BASE-50) -#define SQL_DIAG_DFC_SS_USE (SQL_DIAG_DFC_SS_BASE-51) -#define SQL_DIAG_DFC_SS_WAITFOR (SQL_DIAG_DFC_SS_BASE-52) -#define SQL_DIAG_DFC_SS_WRITETEXT (SQL_DIAG_DFC_SS_BASE-53) -#define SQL_DIAG_DFC_SS_DENY (SQL_DIAG_DFC_SS_BASE-54) -#define SQL_DIAG_DFC_SS_SET_XCTLVL (SQL_DIAG_DFC_SS_BASE-55) -#define SQL_DIAG_DFC_SS_MERGE (SQL_DIAG_DFC_SS_BASE-56) - -// Severity codes for SQL_DIAG_SS_SEVERITY -#define EX_ANY 0 -#define EX_INFO 10 -#define EX_MAXISEVERITY EX_INFO -#define EX_MISSING 11 -#define EX_TYPE 12 -#define EX_DEADLOCK 13 -#define EX_PERMIT 14 -#define EX_SYNTAX 15 -#define EX_USER 16 -#define EX_RESOURCE 17 -#define EX_INTOK 18 -#define MAXUSEVERITY EX_INTOK -#define EX_LIMIT 19 -#define EX_CMDFATAL 20 -#define MINFATALERR EX_CMDFATAL -#define EX_DBFATAL 21 -#define EX_TABCORRUPT 22 -#define EX_DBCORRUPT 23 -#define EX_HARDWARE 24 -#define EX_CONTROL 25 -// Internal server datatypes - used when binding to SQL_C_BINARY -#ifndef MAXNUMERICLEN // Resolve ODS/DBLib conflicts -// DB-Library datatypes -#define DBMAXCHAR (8000+1) // Max length of DBVARBINARY and DBVARCHAR, etc. +1 for zero byte -#define MAXNAME (SQL_MAX_SQLSERVERNAME+1) // Max server identifier length including zero byte -#ifdef UNICODE -typedef wchar_t DBCHAR; -#else -typedef char DBCHAR; - -#endif -typedef short SQLSMALLINT; - -typedef unsigned short SQLUSMALLINT; - -typedef long SQLINTEGER; - -typedef unsigned long SQLUINTEGER; - -typedef unsigned char DBBINARY; - -typedef unsigned char DBTINYINT; - -typedef short DBSMALLINT; - -typedef unsigned short DBUSMALLINT; - -typedef double DBFLT8; - -typedef unsigned char DBBIT; - -typedef unsigned char DBBOOL; - -typedef float DBFLT4; - -typedef DBFLT4 DBREAL; - -typedef UINT DBUBOOL; - -typedef struct dbmoney - { - LONG mnyhigh; - ULONG mnylow; - } DBMONEY; - -typedef struct dbdatetime - { - LONG dtdays; - ULONG dttime; - } DBDATETIME; - -typedef struct dbdatetime4 - { - USHORT numdays; - USHORT nummins; - } DBDATETIM4; - -typedef LONG DBMONEY4; - -#include // 8-byte structure packing - -// New Date Time Structures -// New Structure for TIME2 -typedef struct tagSS_TIME2_STRUCT - { - SQLUSMALLINT hour; - SQLUSMALLINT minute; - SQLUSMALLINT second; - SQLUINTEGER fraction; - } SQL_SS_TIME2_STRUCT; - -// New Structure for TIMESTAMPOFFSET -typedef struct tagSS_TIMESTAMPOFFSET_STRUCT - { - SQLSMALLINT year; - SQLUSMALLINT month; - SQLUSMALLINT day; - SQLUSMALLINT hour; - SQLUSMALLINT minute; - SQLUSMALLINT second; - SQLUINTEGER fraction; - SQLSMALLINT timezone_hour; - SQLSMALLINT timezone_minute; - } SQL_SS_TIMESTAMPOFFSET_STRUCT; - -#include // restore original structure packing - -// Money value *10,000 -#define DBNUM_PREC_TYPE BYTE -#define DBNUM_SCALE_TYPE BYTE -#define DBNUM_VAL_TYPE BYTE - -#if (ODBCVER < 0x0300) -#define MAXNUMERICLEN 16 -typedef struct dbnumeric // Internal representation of NUMERIC data type -{ - DBNUM_PREC_TYPE precision; // Precision - DBNUM_SCALE_TYPE scale; // Scale - BYTE sign; // Sign (1 if positive, 0 if negative) - DBNUM_VAL_TYPE val[MAXNUMERICLEN];// Value -} DBNUMERIC; -typedef DBNUMERIC DBDECIMAL;// Internal representation of DECIMAL data type -#else // Use ODBC 3.0 definitions since same as DBLib -#define MAXNUMERICLEN SQL_MAX_NUMERIC_LEN -typedef SQL_NUMERIC_STRUCT DBNUMERIC; -typedef SQL_NUMERIC_STRUCT DBDECIMAL; -#endif // ODCBVER -#endif // MAXNUMERICLEN - -#ifndef INT -typedef int INT; -typedef long DBINT; -typedef DBINT * LPDBINT; -#ifndef _LPCBYTE_DEFINED -#define _LPCBYTE_DEFINED -typedef BYTE const* LPCBYTE; -#endif //_LPCBYTE_DEFINED -#endif // INT -/************************************************************************** -This struct is a global used for gathering statistical data on the driver. -Access to this structure is controlled via the pStatCrit; -***************************************************************************/ -typedef struct sqlperf -{ - // Application Profile Statistics - DWORD TimerResolution; - DWORD SQLidu; - DWORD SQLiduRows; - DWORD SQLSelects; - DWORD SQLSelectRows; - DWORD Transactions; - DWORD SQLPrepares; - DWORD ExecDirects; - DWORD SQLExecutes; - DWORD CursorOpens; - DWORD CursorSize; - DWORD CursorUsed; - LDOUBLE PercentCursorUsed; - LDOUBLE AvgFetchTime; - LDOUBLE AvgCursorSize; - LDOUBLE AvgCursorUsed; - DWORD SQLFetchTime; - DWORD SQLFetchCount; - DWORD CurrentStmtCount; - DWORD MaxOpenStmt; - DWORD SumOpenStmt; - // Connection Statistics - DWORD CurrentConnectionCount; - DWORD MaxConnectionsOpened; - DWORD SumConnectionsOpened; - DWORD SumConnectiontime; - LDOUBLE AvgTimeOpened; - // Network Statistics - DWORD ServerRndTrips; - DWORD BuffersSent; - DWORD BuffersRec; - DWORD BytesSent; - DWORD BytesRec; - // Time Statistics; - DWORD msExecutionTime; - DWORD msNetWorkServerTime; -} SQLPERF; -// The following are options for SQL_COPT_SS_PERF_DATA and SQL_COPT_SS_PERF_QUERY -#define SQL_PERF_START 1 // Starts the driver sampling performance data. -#define SQL_PERF_STOP 2 // Stops the counters from sampling performance data. -// The following are defines for SQL_COPT_SS_PERF_DATA_LOG -#define SQL_SS_DL_DEFAULT TEXT("STATS.LOG") -// The following are defines for SQL_COPT_SS_PERF_QUERY_LOG -#define SQL_SS_QL_DEFAULT TEXT("QUERY.LOG") -// The following are defines for SQL_COPT_SS_PERF_QUERY_INTERVAL -#define SQL_SS_QI_DEFAULT 30000 // 30,000 milliseconds - -#ifndef SQLNCLI_NO_BCP -// Define the symbol SQLNCLI_NO_BCP if you are not using BCP in your application -// and you want to exclude the BCP-related definitions in this header file. - -// ODBC BCP prototypes and defines -// Return codes -#define SUCCEED 1 -#define FAIL 0 -#define SUCCEED_ABORT 2 -#define SUCCEED_ASYNC 3 -// Transfer directions -#define DB_IN 1 // Transfer from client to server -#define DB_OUT 2 // Transfer from server to client -// bcp_control option -#define BCPMAXERRS 1 // Sets max errors allowed -#define BCPFIRST 2 // Sets first row to be copied out -#define BCPLAST 3 // Sets number of rows to be copied out -#define BCPBATCH 4 // Sets input batch size -#define BCPKEEPNULLS 5 // Sets to insert NULLs for empty input values -#define BCPABORT 6 // Sets to have bcpexec return SUCCEED_ABORT -#define BCPODBC 7 // Sets ODBC canonical character output -#define BCPKEEPIDENTITY 8 // Sets IDENTITY_INSERT on -#if SQLNCLI_VER < 1000 -#define BCP6xFILEFMT 9 // DEPRECATED: Sets 6x file format on -#endif -#define BCPHINTSA 10 // Sets server BCP hints (ANSI string) -#define BCPHINTSW 11 // Sets server BCP hints (UNICODE string) -#define BCPFILECP 12 // Sets clients code page for the file -#define BCPUNICODEFILE 13 // Sets that the file contains unicode header -#define BCPTEXTFILE 14 // Sets BCP mode to expect a text file and to detect Unicode or ANSI automatically -#define BCPFILEFMT 15 // Sets file format version -#define BCPFMTXML 16 // Sets the format file type to xml -#define BCPFIRSTEX 17 // Starting Row for BCP operation (64 bit) -#define BCPLASTEX 18 // Ending Row for BCP operation (64 bit) -#define BCPROWCOUNT 19 // Total Number of Rows Copied (64 bit) -// BCPFILECP values -// Any valid code page that is installed on the client can be passed plus: -#define BCPFILECP_ACP 0 // Data in file is in Windows code page -#define BCPFILECP_OEMCP 1 // Data in file is in OEM code page (default) -#define BCPFILECP_RAW (-1)// Data in file is in Server code page (no conversion) -// bcp_collen definition -#define SQL_VARLEN_DATA (-10) // Use default length for column -// BCP column format properties -#define BCP_FMT_TYPE 0x01 -#define BCP_FMT_INDICATOR_LEN 0x02 -#define BCP_FMT_DATA_LEN 0x03 -#define BCP_FMT_TERMINATOR 0x04 -#define BCP_FMT_SERVER_COL 0x05 -#define BCP_FMT_COLLATION 0x06 -#define BCP_FMT_COLLATION_ID 0x07 -// BCP functions -DBINT SQL_API bcp_batch (HDBC); -RETCODE SQL_API bcp_bind (HDBC, LPCBYTE, INT, DBINT, LPCBYTE, INT, INT, INT); -RETCODE SQL_API bcp_colfmt (HDBC, INT, BYTE, INT, DBINT, LPCBYTE, INT, INT); -RETCODE SQL_API bcp_collen (HDBC, DBINT, INT); -RETCODE SQL_API bcp_colptr (HDBC, LPCBYTE, INT); -RETCODE SQL_API bcp_columns (HDBC, INT); -RETCODE SQL_API bcp_control (HDBC, INT, void *); -DBINT SQL_API bcp_done (HDBC); -RETCODE SQL_API bcp_exec (HDBC, LPDBINT); -RETCODE SQL_API bcp_getcolfmt (HDBC, INT, INT, void *, INT, INT *); -RETCODE SQL_API bcp_initA (HDBC, LPCSTR, LPCSTR, LPCSTR, INT); -RETCODE SQL_API bcp_initW (HDBC, LPCWSTR, LPCWSTR, LPCWSTR, INT); -RETCODE SQL_API bcp_moretext (HDBC, DBINT, LPCBYTE); -RETCODE SQL_API bcp_readfmtA (HDBC, LPCSTR); -RETCODE SQL_API bcp_readfmtW (HDBC, LPCWSTR); -RETCODE SQL_API bcp_sendrow (HDBC); -RETCODE SQL_API bcp_setcolfmt (HDBC, INT, INT, void *, INT); -RETCODE SQL_API bcp_writefmtA (HDBC, LPCSTR); -RETCODE SQL_API bcp_writefmtW (HDBC, LPCWSTR); -CHAR* SQL_API dbprtypeA (INT); -WCHAR* SQL_API dbprtypeW (INT); -CHAR* SQL_API bcp_gettypenameA (INT, DBBOOL); -WCHAR* SQL_API bcp_gettypenameW (INT, DBBOOL); -#ifdef UNICODE -#define bcp_init bcp_initW -#define bcp_readfmt bcp_readfmtW -#define bcp_writefmt bcp_writefmtW -#define dbprtype dbprtypeW -#define bcp_gettypename bcp_gettypenameW -#define BCPHINTS BCPHINTSW -#else -#define bcp_init bcp_initA -#define bcp_readfmt bcp_readfmtA -#define bcp_writefmt bcp_writefmtA -#define dbprtype dbprtypeA -#define bcp_gettypename bcp_gettypenameA -#define BCPHINTS BCPHINTSA -#endif // UNICODE - -#endif // SQLNCLI_NO_BCP - -// The following options have been deprecated -#define SQL_FAST_CONNECT (SQL_COPT_SS_BASE+0) -// Defines for use with SQL_FAST_CONNECT - only useable before connecting -#define SQL_FC_OFF 0L // Fast connect is off -#define SQL_FC_ON 1L // Fast connect is on -#define SQL_FC_DEFAULT SQL_FC_OFF -#define SQL_COPT_SS_ANSI_OEM (SQL_COPT_SS_BASE+6) -#define SQL_AO_OFF 0L -#define SQL_AO_ON 1L -#define SQL_AO_DEFAULT SQL_AO_OFF -#define SQL_CA_SS_BASE_COLUMN_NAME SQL_DESC_BASE_COLUMN_NAME - -#endif // ODBCVER -#endif // defined(_SQLNCLI_ODBC_) || !defined(_SQLNCLI_OLEDB_) -// ODBC part of SQL Server Native Client header - end here! - -//The following facilitates opening a handle to a SQL filestream -typedef enum _SQL_FILESTREAM_DESIRED_ACCESS { - SQL_FILESTREAM_READ = 0, - SQL_FILESTREAM_WRITE = 1, - SQL_FILESTREAM_READWRITE = 2 -} SQL_FILESTREAM_DESIRED_ACCESS; -#define SQL_FILESTREAM_OPEN_FLAG_ASYNC 0x00000001L -#define SQL_FILESTREAM_OPEN_FLAG_NO_BUFFERING 0x00000002L -#define SQL_FILESTREAM_OPEN_FLAG_NO_WRITE_THROUGH 0x00000004L -#define SQL_FILESTREAM_OPEN_FLAG_SEQUENTIAL_SCAN 0x00000008L -#define SQL_FILESTREAM_OPEN_FLAG_RANDOM_ACCESS 0x00000010L -HANDLE __stdcall OpenSqlFilestream ( - LPCWSTR FilestreamPath, - SQL_FILESTREAM_DESIRED_ACCESS DesiredAccess, - ULONG OpenOptions, - LPBYTE FilestreamTransactionContext, - SSIZE_T FilestreamTransactionContextLength, - PLARGE_INTEGER AllocationSize); -#define FSCTL_SQL_FILESTREAM_FETCH_OLD_CONTENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2392, METHOD_BUFFERED, FILE_ANY_ACCESS) - - - -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0010_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_sqlncli_0000_0010_v0_0_s_ifspec; - -/* Additional Prototypes for ALL interfaces */ - -/* end of Additional Prototypes */ - -#ifdef __cplusplus -} -#endif - -#endif - - diff --git a/sqlsrv/stmt.cpp b/sqlsrv/stmt.cpp index 521296ec..a8b7c638 100644 --- a/sqlsrv/stmt.cpp +++ b/sqlsrv/stmt.cpp @@ -537,7 +537,7 @@ PHP_FUNCTION( sqlsrv_field_metadata ) // specified statement active. The first (or only) result returned by a batch // query or stored procedure is active without a call to sqlsrv_next_result. // Any output parameters bound are only available after sqlsrv_next_result returns -// null as per SQL Native Client specs: http://msdn.microsoft.com/en-us/library/ms403283.aspx +// null as per ODBC Driver 11 for SQL Server specs: http://msdn.microsoft.com/en-us/library/ms403283.aspx // // Parameters // $stmt: The executed statement on which the next result is made active. diff --git a/sqlsrv/util.cpp b/sqlsrv/util.cpp index ca4e2cd6..f9b0a2ef 100644 --- a/sqlsrv/util.cpp +++ b/sqlsrv/util.cpp @@ -301,8 +301,8 @@ ss_error SS_ERRORS[] = { { SQLSRV_ERROR_DRIVER_NOT_INSTALLED, - { IMSSP, (SQLCHAR*) "This extension requires the Microsoft SQL Server 2012 Native Client. " - "Access the following URL to download the Microsoft SQL Server 2012 Native Client ODBC driver for %1!s!: " + { IMSSP, (SQLCHAR*) "This extension requires the ODBC Driver 11 for SQL Server. " + "Access the following URL to download the ODBC Driver 11 for SQL Server for %1!s!: " "http://go.microsoft.com/fwlink/?LinkId=163712", -49, true } }, @@ -445,8 +445,8 @@ bool ss_error_handler(sqlsrv_context& ctx, unsigned int sqlsrv_error_code, bool // [SQLSTATE] => HYT00 // [1] => 0 // [code] => 0 -// [2] => [Microsoft][SQL Native Client]Query timeout expired -// [message] => [Microsoft][SQL Native Client]Query timeout expired +// [2] => [Microsoft][ODBC Driver 11 for SQL Server]Query timeout expired +// [message] => [Microsoft][ODBC Driver 11 for SQL Server]Query timeout expired // ) // ) diff --git a/sqlsrv/version.h b/sqlsrv/version.h index d50d180a..dd67f4ee 100644 --- a/sqlsrv/version.h +++ b/sqlsrv/version.h @@ -3,24 +3,25 @@ // // Contents: Version number constants // -// Copyright Microsoft Corporation -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// -// You may obtain a copy of the License at: -// http://www.apache.org/licenses/LICENSE-2.0 +// Microsoft Drivers for PHP for SQL Server +// Copyright (c) Microsoft Corporation. All rights reserved. // +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use these files except in compliance with the License. + +// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. +// //---------------------------------------------------------------------------------------------------------------------------------- -#define VER_FILEVERSION_STR "3.0.1.0" -#define _FILEVERSION 3,0,1,0 +#define VER_FILEVERSION_STR "3.1.0.0" +#define _FILEVERSION 3,1,0,0 #define SQLVERSION_MAJOR 3 -#define SQLVERSION_MINOR 0 -#define SQLVERSION_MMDD 1 +#define SQLVERSION_MINOR 1 +#define SQLVERSION_MMDD 0 #define SQLVERSION_REVISION 0