4.1.4 Release
This commit is contained in:
parent
724884a343
commit
928be6d371
|
@ -10,6 +10,11 @@ The Microsoft Drivers for PHP for SQL Server Team
|
||||||
|
|
||||||
##Announcements
|
##Announcements
|
||||||
|
|
||||||
|
**October 25 , 2016** : Updated Windows drivers (4.1.4) compiled with PHP 7.0.12 and 7.1 are available. Here is the list of updates:
|
||||||
|
|
||||||
|
- Drivers versioning has been redesigned as Major#.Minor#.Release#.Build#. Build number is specific to binaries and it doesn't match with the number on the source.
|
||||||
|
- Fixed the issue with duplicate warning messages in PDO_SQLSRV drivers when error mode is set to PDO::ERRMODE_WARNING.
|
||||||
|
|
||||||
**October 4 , 2016** : Updated Windows drivers (4.1.3) compiled with PHP 7.0.11 and 7.1.0RC3 are available. Here is the list of updates:
|
**October 4 , 2016** : Updated Windows drivers (4.1.3) compiled with PHP 7.0.11 and 7.1.0RC3 are available. Here is the list of updates:
|
||||||
|
|
||||||
- Fixed [issue #139](https://github.com/Microsoft/msphpsql/issues/139) : sqlsrv_fetch_object calls custom class constructor in static context and outputs an error.
|
- Fixed [issue #139](https://github.com/Microsoft/msphpsql/issues/139) : sqlsrv_fetch_object calls custom class constructor in static context and outputs an error.
|
||||||
|
|
|
@ -1612,7 +1612,7 @@ void core_sqlsrv_format_driver_error( sqlsrv_context& ctx, sqlsrv_error_const co
|
||||||
const char* get_last_error_message( DWORD last_error = 0 );
|
const char* get_last_error_message( DWORD last_error = 0 );
|
||||||
|
|
||||||
// a wrapper around FormatMessage that can take variadic args rather than a a va_arg pointer
|
// a wrapper around FormatMessage that can take variadic args rather than a a va_arg pointer
|
||||||
DWORD core_sqlsrv_format_message( char*& output_buffer, unsigned output_len, const char* format, ... );
|
DWORD core_sqlsrv_format_message( char* output_buffer, unsigned output_len, const char* format, ... );
|
||||||
|
|
||||||
// convenience functions that overload either a reference or a pointer so we can use
|
// convenience functions that overload either a reference or a pointer so we can use
|
||||||
// either in the CHECK_* functions.
|
// either in the CHECK_* functions.
|
||||||
|
|
|
@ -306,12 +306,12 @@ void core_sqlsrv_format_driver_error( sqlsrv_context& ctx, sqlsrv_error_const co
|
||||||
LOG( severity, "%1!s!: message = %2!s!", ctx.func(), formatted_error->native_message );
|
LOG( severity, "%1!s!: message = %2!s!", ctx.func(), formatted_error->native_message );
|
||||||
}
|
}
|
||||||
|
|
||||||
DWORD core_sqlsrv_format_message( char*& output_buffer, unsigned output_len, const char* format, ... )
|
DWORD core_sqlsrv_format_message( char* output_buffer, unsigned output_len, const char* format, ... )
|
||||||
{
|
{
|
||||||
va_list format_args;
|
va_list format_args;
|
||||||
va_start( format_args, format );
|
va_start( format_args, format );
|
||||||
|
|
||||||
DWORD rc = FormatMessage( FORMAT_MESSAGE_FROM_STRING, format, 0, 0, static_cast<LPSTR>(output_buffer), SQL_MAX_MESSAGE_LENGTH, &format_args );
|
DWORD rc = FormatMessage( FORMAT_MESSAGE_FROM_STRING, format, 0, 0, static_cast<LPSTR>(output_buffer), output_len, &format_args );
|
||||||
|
|
||||||
va_end( format_args );
|
va_end( format_args );
|
||||||
|
|
||||||
|
|
|
@ -25,13 +25,16 @@
|
||||||
// *** internal constants ***
|
// *** internal constants ***
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
const char WARNING_TEMPLATE[] = "SQLSTATE: %1!s!\nError Code: %2!d!\nMError Message: %3!s!\n";
|
const char WARNING_TEMPLATE[] = "SQLSTATE: %1!s!\nError Code: %2!d!\nError Message: %3!s!\n";
|
||||||
const char EXCEPTION_MSG_TEMPLATE[] = "SQLSTATE[%s]: %s";
|
const char EXCEPTION_MSG_TEMPLATE[] = "SQLSTATE[%s]: %s";
|
||||||
char EXCEPTION_PROPERTY_MSG[] = "message";
|
char EXCEPTION_PROPERTY_MSG[] = "message";
|
||||||
char EXCEPTION_PROPERTY_CODE[] = "code";
|
char EXCEPTION_PROPERTY_CODE[] = "code";
|
||||||
char EXCEPTION_PROPERTY_ERRORINFO[] = "errorInfo";
|
char EXCEPTION_PROPERTY_ERRORINFO[] = "errorInfo";
|
||||||
const int MAX_DIGITS = 11; // +-2 billion = 10 digits + 1 for the sign if negative
|
const int MAX_DIGITS = 11; // +-2 billion = 10 digits + 1 for the sign if negative
|
||||||
|
|
||||||
|
// the warning message is not the error message alone; it must take WARNING_TEMPLATE above into consideration without the formats
|
||||||
|
const int WARNING_MIN_LENGTH = strlen(WARNING_TEMPLATE) - strlen("%1!s!%2!d!%3!s!");
|
||||||
|
|
||||||
// buffer used to hold a formatted log message prior to actually logging it.
|
// buffer used to hold a formatted log message prior to actually logging it.
|
||||||
const int LOG_MSG_SIZE = 2048;
|
const int LOG_MSG_SIZE = 2048;
|
||||||
char log_msg[ LOG_MSG_SIZE ];
|
char log_msg[ LOG_MSG_SIZE ];
|
||||||
|
@ -459,12 +462,12 @@ bool pdo_sqlsrv_handle_dbh_error( sqlsrv_context& ctx, unsigned int sqlsrv_error
|
||||||
case PDO_ERRMODE_WARNING:
|
case PDO_ERRMODE_WARNING:
|
||||||
if( !warning ) {
|
if( !warning ) {
|
||||||
size_t msg_len = strlen( reinterpret_cast<const char*>( error->native_message )) + SQL_SQLSTATE_BUFSIZE
|
size_t msg_len = strlen( reinterpret_cast<const char*>( error->native_message )) + SQL_SQLSTATE_BUFSIZE
|
||||||
+ MAX_DIGITS + 1;
|
+ MAX_DIGITS + WARNING_MIN_LENGTH + 1;
|
||||||
char* msg = static_cast<char*>( sqlsrv_malloc( msg_len ));
|
sqlsrv_malloc_auto_ptr<char> msg;
|
||||||
|
msg = static_cast<char*>( sqlsrv_malloc( msg_len ) );
|
||||||
core_sqlsrv_format_message( msg, static_cast<unsigned int>( msg_len ), WARNING_TEMPLATE, error->sqlstate, error->native_code,
|
core_sqlsrv_format_message( msg, static_cast<unsigned int>( msg_len ), WARNING_TEMPLATE, error->sqlstate, error->native_code,
|
||||||
error->native_message );
|
error->native_message );
|
||||||
php_error( E_WARNING, msg );
|
php_error( E_WARNING, msg );
|
||||||
sqlsrv_free( msg );
|
|
||||||
}
|
}
|
||||||
ctx.set_last_error( error );
|
ctx.set_last_error( error );
|
||||||
break;
|
break;
|
||||||
|
@ -509,15 +512,6 @@ bool pdo_sqlsrv_handle_stmt_error( sqlsrv_context& ctx, unsigned int sqlsrv_erro
|
||||||
ctx.set_last_error( error );
|
ctx.set_last_error( error );
|
||||||
break;
|
break;
|
||||||
case PDO_ERRMODE_WARNING:
|
case PDO_ERRMODE_WARNING:
|
||||||
if( !warning ) {
|
|
||||||
size_t msg_len = strlen( reinterpret_cast<const char*>( error->native_message )) + SQL_SQLSTATE_BUFSIZE
|
|
||||||
+ MAX_DIGITS + 1;
|
|
||||||
char* msg = static_cast<char*>( sqlsrv_malloc(SQL_MAX_MESSAGE_LENGTH+1));
|
|
||||||
core_sqlsrv_format_message( msg, static_cast<unsigned int>( msg_len ), WARNING_TEMPLATE, error->sqlstate, error->native_code,
|
|
||||||
error->native_message );
|
|
||||||
php_error( E_WARNING, msg );
|
|
||||||
sqlsrv_free( msg );
|
|
||||||
}
|
|
||||||
ctx.set_last_error( error );
|
ctx.set_last_error( error );
|
||||||
break;
|
break;
|
||||||
case PDO_ERRMODE_SILENT:
|
case PDO_ERRMODE_SILENT:
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#define PHP_PDO_SQLSRV_H
|
#define PHP_PDO_SQLSRV_H
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------------------
|
||||||
// File: pdo_sqlsrv.h
|
// File: php_pdo_sqlsrv.h
|
||||||
//
|
//
|
||||||
// Contents: Declarations for the extension
|
// Contents: Declarations for the extension
|
||||||
//
|
//
|
||||||
|
|
|
@ -43,8 +43,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||||
|
|
||||||
//Version
|
//Version
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION SQLVERSION_MAJOR,SQLVERSION_MINOR, SQLVERSION_MMDD, SQLVERSION_REVISION
|
FILEVERSION SQLVERSION_MAJOR,SQLVERSION_MINOR, SQLVERSION_RELEASE, SQLVERSION_BUILD
|
||||||
PRODUCTVERSION SQLVERSION_MAJOR,SQLVERSION_MINOR,SQLVERSION_MMDD,0
|
PRODUCTVERSION SQLVERSION_MAJOR,SQLVERSION_MINOR,SQLVERSION_RELEASE,0
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS VS_FF_DEBUG
|
FILEFLAGS VS_FF_DEBUG
|
||||||
|
@ -61,13 +61,13 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "Comments", "This product includes PHP software that is freely available from http://www.php.net/software/. Copyright © 2001-2016 The PHP Group. All rights reserved.\0"
|
VALUE "Comments", "This product includes PHP software that is freely available from http://www.php.net/software/. Copyright © 2001-2016 The PHP Group. All rights reserved.\0"
|
||||||
VALUE "CompanyName", "Microsoft Corp.\0"
|
VALUE "CompanyName", "Microsoft Corp.\0"
|
||||||
VALUE "FileDescription", "Microsoft Drivers for PHP for SQL Server (PDO Driver)\0"
|
VALUE "FileDescription", "Microsoft Drivers for PHP for SQL Server\0"
|
||||||
VALUE "FileVersion", STRVER4(SQLVERSION_MAJOR,SQLVERSION_MINOR, SQLVERSION_MMDD, SQLVERSION_REVISION)
|
VALUE "FileVersion", STRVER4(SQLVERSION_MAJOR,SQLVERSION_MINOR, SQLVERSION_RELEASE, SQLVERSION_BUILD)
|
||||||
VALUE "InternalName", FILE_NAME "\0"
|
VALUE "InternalName", FILE_NAME "\0"
|
||||||
VALUE "LegalCopyright", "Copyright Microsoft Corporation.\0"
|
VALUE "LegalCopyright", "Copyright Microsoft Corporation.\0"
|
||||||
VALUE "OriginalFilename", FILE_NAME "\0"
|
VALUE "OriginalFilename", FILE_NAME "\0"
|
||||||
VALUE "ProductName", "Microsoft Drivers for PHP for SQL Server\0"
|
VALUE "ProductName", "Microsoft Drivers for PHP for SQL Server\0"
|
||||||
VALUE "ProductVersion", STRVER3(SQLVERSION_MAJOR,SQLVERSION_MINOR, SQLVERSION_MMDD)
|
VALUE "ProductVersion", STRVER3(SQLVERSION_MAJOR,SQLVERSION_MINOR, SQLVERSION_RELEASE)
|
||||||
VALUE "URL", "http://www.microsoft.com\0"
|
VALUE "URL", "http://www.microsoft.com\0"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
|
@ -16,12 +16,20 @@
|
||||||
// IN THE SOFTWARE.
|
// IN THE SOFTWARE.
|
||||||
//---------------------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
#define VER_FILEVERSION_STR "4.1.0.0"
|
// helper macros to stringify the a macro value
|
||||||
#define _FILEVERSION 4,1,0,0
|
#define STRINGIFY(a) TOSTRING(a)
|
||||||
|
#define TOSTRING(a) #a
|
||||||
|
|
||||||
#define SQLVERSION_MAJOR 4
|
#define SQLVERSION_MAJOR 4
|
||||||
#define SQLVERSION_MINOR 1
|
#define SQLVERSION_MINOR 1
|
||||||
#define SQLVERSION_MMDD 0
|
#define SQLVERSION_RELEASE 4
|
||||||
#define SQLVERSION_REVISION 0
|
#define SQLVERSION_BUILD 0
|
||||||
|
|
||||||
|
#define VER_FILEVERSION_STR STRINGIFY( SQLVERSION_MAJOR ) "." STRINGIFY( SQLVERSION_MINOR ) "." STRINGIFY( SQLVERSION_RELEASE ) "." STRINGIFY( SQLVERSION_BUILD )
|
||||||
|
#define _FILEVERSION SQLVERSION_MAJOR,SQLVERSION_MINOR,SQLVERSION_RELEASE,SQLVERSION_BUILD
|
||||||
|
#define PHP_SQLSRV_VERSION STRINGIFY( SQLVERSION_MAJOR ) "." STRINGIFY( SQLVERSION_MINOR ) "." STRINGIFY( SQLVERSION_RELEASE )
|
||||||
|
#define PHP_PDO_SQLSRV_VERSION PHP_SQLSRV_VERSION
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1205,7 +1205,7 @@ void add_conn_option_key( sqlsrv_context& ctx, zend_string* key, size_t key_len,
|
||||||
HashTable* options_ht, zval* data TSRMLS_DC )
|
HashTable* options_ht, zval* data TSRMLS_DC )
|
||||||
{
|
{
|
||||||
int option_key = ::get_conn_option_key( ctx, key, key_len, data TSRMLS_CC );
|
int option_key = ::get_conn_option_key( ctx, key, key_len, data TSRMLS_CC );
|
||||||
CHECK_CUSTOM_ERROR((option_key == SQLSRV_STMT_OPTION_INVALID ), ctx, SS_SQLSRV_ERROR_INVALID_OPTION, key ) {
|
CHECK_CUSTOM_ERROR((option_key == SQLSRV_STMT_OPTION_INVALID ), ctx, SS_SQLSRV_ERROR_INVALID_OPTION, ZSTR_VAL( key ) ) {
|
||||||
|
|
||||||
throw ss::SSException();
|
throw ss::SSException();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1612,7 +1612,7 @@ void core_sqlsrv_format_driver_error( sqlsrv_context& ctx, sqlsrv_error_const co
|
||||||
const char* get_last_error_message( DWORD last_error = 0 );
|
const char* get_last_error_message( DWORD last_error = 0 );
|
||||||
|
|
||||||
// a wrapper around FormatMessage that can take variadic args rather than a a va_arg pointer
|
// a wrapper around FormatMessage that can take variadic args rather than a a va_arg pointer
|
||||||
DWORD core_sqlsrv_format_message( char*& output_buffer, unsigned output_len, const char* format, ... );
|
DWORD core_sqlsrv_format_message( char* output_buffer, unsigned output_len, const char* format, ... );
|
||||||
|
|
||||||
// convenience functions that overload either a reference or a pointer so we can use
|
// convenience functions that overload either a reference or a pointer so we can use
|
||||||
// either in the CHECK_* functions.
|
// either in the CHECK_* functions.
|
||||||
|
|
|
@ -306,12 +306,12 @@ void core_sqlsrv_format_driver_error( sqlsrv_context& ctx, sqlsrv_error_const co
|
||||||
LOG( severity, "%1!s!: message = %2!s!", ctx.func(), formatted_error->native_message );
|
LOG( severity, "%1!s!: message = %2!s!", ctx.func(), formatted_error->native_message );
|
||||||
}
|
}
|
||||||
|
|
||||||
DWORD core_sqlsrv_format_message( char*& output_buffer, unsigned output_len, const char* format, ... )
|
DWORD core_sqlsrv_format_message( char* output_buffer, unsigned output_len, const char* format, ... )
|
||||||
{
|
{
|
||||||
va_list format_args;
|
va_list format_args;
|
||||||
va_start( format_args, format );
|
va_start( format_args, format );
|
||||||
|
|
||||||
DWORD rc = FormatMessage( FORMAT_MESSAGE_FROM_STRING, format, 0, 0, static_cast<LPSTR>(output_buffer), SQL_MAX_MESSAGE_LENGTH, &format_args );
|
DWORD rc = FormatMessage( FORMAT_MESSAGE_FROM_STRING, format, 0, 0, static_cast<LPSTR>(output_buffer), output_len, &format_args );
|
||||||
|
|
||||||
va_end( format_args );
|
va_end( format_args );
|
||||||
|
|
||||||
|
|
|
@ -330,7 +330,7 @@ PHP_FUNCTION( sqlsrv_fetch )
|
||||||
|
|
||||||
ss_sqlsrv_stmt* stmt = NULL;
|
ss_sqlsrv_stmt* stmt = NULL;
|
||||||
// NOTE: zend_parse_parameter expect zend_long when the type spec is 'l',and core_sqlsrv_fetch expect short int
|
// NOTE: zend_parse_parameter expect zend_long when the type spec is 'l',and core_sqlsrv_fetch expect short int
|
||||||
int fetch_style = SQL_FETCH_NEXT; // default value for parameter if one isn't supplied
|
zend_long fetch_style = SQL_FETCH_NEXT; // default value for parameter if one isn't supplied
|
||||||
zend_long fetch_offset = 0; // default value for parameter if one isn't supplied
|
zend_long fetch_offset = 0; // default value for parameter if one isn't supplied
|
||||||
|
|
||||||
// take only the statement resource
|
// take only the statement resource
|
||||||
|
@ -343,7 +343,7 @@ PHP_FUNCTION( sqlsrv_fetch )
|
||||||
throw ss::SSException();
|
throw ss::SSException();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool result = core_sqlsrv_fetch( stmt, fetch_style, fetch_offset TSRMLS_CC );
|
bool result = core_sqlsrv_fetch( stmt, static_cast<SQLSMALLINT>(fetch_style), fetch_offset TSRMLS_CC );
|
||||||
if( !result ) {
|
if( !result ) {
|
||||||
RETURN_NULL();
|
RETURN_NULL();
|
||||||
}
|
}
|
||||||
|
@ -383,7 +383,7 @@ PHP_FUNCTION( sqlsrv_fetch_array )
|
||||||
|
|
||||||
ss_sqlsrv_stmt* stmt = NULL;
|
ss_sqlsrv_stmt* stmt = NULL;
|
||||||
zend_long fetch_type = SQLSRV_FETCH_BOTH; // default value for parameter if one isn't supplied
|
zend_long fetch_type = SQLSRV_FETCH_BOTH; // default value for parameter if one isn't supplied
|
||||||
int fetch_style = SQL_FETCH_NEXT; // default value for parameter if one isn't supplied
|
zend_long fetch_style = SQL_FETCH_NEXT; // default value for parameter if one isn't supplied
|
||||||
zend_long fetch_offset = 0; // default value for parameter if one isn't supplied
|
zend_long fetch_offset = 0; // default value for parameter if one isn't supplied
|
||||||
|
|
||||||
// retrieve the statement resource and optional fetch type (see enum SQLSRV_FETCH_TYPE),
|
// retrieve the statement resource and optional fetch type (see enum SQLSRV_FETCH_TYPE),
|
||||||
|
@ -402,7 +402,7 @@ PHP_FUNCTION( sqlsrv_fetch_array )
|
||||||
throw ss::SSException();
|
throw ss::SSException();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool result = core_sqlsrv_fetch( stmt, fetch_style, fetch_offset TSRMLS_CC );
|
bool result = core_sqlsrv_fetch( stmt, static_cast<SQLSMALLINT>(fetch_style), fetch_offset TSRMLS_CC );
|
||||||
if( !result ) {
|
if( !result ) {
|
||||||
RETURN_NULL();
|
RETURN_NULL();
|
||||||
}
|
}
|
||||||
|
@ -764,7 +764,7 @@ PHP_FUNCTION( sqlsrv_fetch_object )
|
||||||
ss_sqlsrv_stmt* stmt = NULL;
|
ss_sqlsrv_stmt* stmt = NULL;
|
||||||
zval* class_name_z = NULL;
|
zval* class_name_z = NULL;
|
||||||
zval* ctor_params_z = NULL;
|
zval* ctor_params_z = NULL;
|
||||||
int fetch_style = SQL_FETCH_NEXT; // default value for parameter if one isn't supplied
|
zend_long fetch_style = SQL_FETCH_NEXT; // default value for parameter if one isn't supplied
|
||||||
zend_long fetch_offset = 0; // default value for parameter if one isn't supplied
|
zend_long fetch_offset = 0; // default value for parameter if one isn't supplied
|
||||||
|
|
||||||
// stdClass is the name of the system's default base class in PHP
|
// stdClass is the name of the system's default base class in PHP
|
||||||
|
@ -801,7 +801,7 @@ PHP_FUNCTION( sqlsrv_fetch_object )
|
||||||
}
|
}
|
||||||
|
|
||||||
// fetch the data
|
// fetch the data
|
||||||
bool result = core_sqlsrv_fetch( stmt, fetch_style, fetch_offset TSRMLS_CC );
|
bool result = core_sqlsrv_fetch( stmt, static_cast<SQLSMALLINT>(fetch_style), fetch_offset TSRMLS_CC );
|
||||||
if( !result ) {
|
if( !result ) {
|
||||||
RETURN_NULL();
|
RETURN_NULL();
|
||||||
}
|
}
|
||||||
|
@ -863,11 +863,11 @@ PHP_FUNCTION( sqlsrv_fetch_object )
|
||||||
int i = 0;
|
int i = 0;
|
||||||
zval* value_z = NULL;
|
zval* value_z = NULL;
|
||||||
ZEND_HASH_FOREACH_VAL( ctor_params_ht, value_z ) {
|
ZEND_HASH_FOREACH_VAL( ctor_params_ht, value_z ) {
|
||||||
ZVAL_COPY_VALUE( ¶ms_m[i], value_z );
|
zr = ( value_z ) ? SUCCESS : FAILURE;
|
||||||
zr = ( NULL != ¶ms_m[i] ) ? SUCCESS : FAILURE;
|
|
||||||
CHECK_ZEND_ERROR( zr, stmt, SS_SQLSRV_ERROR_ZEND_OBJECT_FAILED, class_name ) {
|
CHECK_ZEND_ERROR( zr, stmt, SS_SQLSRV_ERROR_ZEND_OBJECT_FAILED, class_name ) {
|
||||||
throw ss::SSException();
|
throw ss::SSException();
|
||||||
}
|
}
|
||||||
|
ZVAL_COPY_VALUE(¶ms_m[i], value_z);
|
||||||
i++;
|
i++;
|
||||||
} ZEND_HASH_FOREACH_END();
|
} ZEND_HASH_FOREACH_END();
|
||||||
} //if( !Z_ISUNDEF( ctor_params_z ))
|
} //if( !Z_ISUNDEF( ctor_params_z ))
|
||||||
|
|
|
@ -43,8 +43,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||||
|
|
||||||
//Version
|
//Version
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION SQLVERSION_MAJOR,SQLVERSION_MINOR, SQLVERSION_MMDD, SQLVERSION_REVISION
|
FILEVERSION SQLVERSION_MAJOR,SQLVERSION_MINOR, SQLVERSION_RELEASE, SQLVERSION_BUILD
|
||||||
PRODUCTVERSION SQLVERSION_MAJOR,SQLVERSION_MINOR,SQLVERSION_MMDD,0
|
PRODUCTVERSION SQLVERSION_MAJOR,SQLVERSION_MINOR,SQLVERSION_RELEASE,0
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS VS_FF_DEBUG
|
FILEFLAGS VS_FF_DEBUG
|
||||||
|
@ -61,13 +61,13 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "Comments", "This product includes PHP software that is freely available from http://www.php.net/software/. Copyright © 2001-2016 The PHP Group. All rights reserved.\0"
|
VALUE "Comments", "This product includes PHP software that is freely available from http://www.php.net/software/. Copyright © 2001-2016 The PHP Group. All rights reserved.\0"
|
||||||
VALUE "CompanyName", "Microsoft Corp.\0"
|
VALUE "CompanyName", "Microsoft Corp.\0"
|
||||||
VALUE "FileDescription", "Microsoft Drivers for PHP for SQL Server (PDO Driver)\0"
|
VALUE "FileDescription", "Microsoft Drivers for PHP for SQL Server\0"
|
||||||
VALUE "FileVersion", STRVER4(SQLVERSION_MAJOR,SQLVERSION_MINOR, SQLVERSION_MMDD, SQLVERSION_REVISION)
|
VALUE "FileVersion", STRVER4(SQLVERSION_MAJOR,SQLVERSION_MINOR, SQLVERSION_RELEASE, SQLVERSION_BUILD)
|
||||||
VALUE "InternalName", FILE_NAME "\0"
|
VALUE "InternalName", FILE_NAME "\0"
|
||||||
VALUE "LegalCopyright", "Copyright Microsoft Corporation.\0"
|
VALUE "LegalCopyright", "Copyright Microsoft Corporation.\0"
|
||||||
VALUE "OriginalFilename", FILE_NAME "\0"
|
VALUE "OriginalFilename", FILE_NAME "\0"
|
||||||
VALUE "ProductName", "Microsoft Drivers for PHP for SQL Server\0"
|
VALUE "ProductName", "Microsoft Drivers for PHP for SQL Server\0"
|
||||||
VALUE "ProductVersion", STRVER3(SQLVERSION_MAJOR,SQLVERSION_MINOR, SQLVERSION_MMDD)
|
VALUE "ProductVersion", STRVER3(SQLVERSION_MAJOR,SQLVERSION_MINOR, SQLVERSION_RELEASE)
|
||||||
VALUE "URL", "http://www.microsoft.com\0"
|
VALUE "URL", "http://www.microsoft.com\0"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
|
@ -16,12 +16,20 @@
|
||||||
// IN THE SOFTWARE.
|
// IN THE SOFTWARE.
|
||||||
//---------------------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
#define VER_FILEVERSION_STR "4.1.0.0"
|
// helper macros to stringify the a macro value
|
||||||
#define _FILEVERSION 4,1,0,0
|
#define STRINGIFY(a) TOSTRING(a)
|
||||||
|
#define TOSTRING(a) #a
|
||||||
|
|
||||||
#define SQLVERSION_MAJOR 4
|
#define SQLVERSION_MAJOR 4
|
||||||
#define SQLVERSION_MINOR 1
|
#define SQLVERSION_MINOR 1
|
||||||
#define SQLVERSION_MMDD 0
|
#define SQLVERSION_RELEASE 4
|
||||||
#define SQLVERSION_REVISION 0
|
#define SQLVERSION_BUILD 0
|
||||||
|
|
||||||
|
#define VER_FILEVERSION_STR STRINGIFY( SQLVERSION_MAJOR ) "." STRINGIFY( SQLVERSION_MINOR ) "." STRINGIFY( SQLVERSION_RELEASE ) "." STRINGIFY( SQLVERSION_BUILD )
|
||||||
|
#define _FILEVERSION SQLVERSION_MAJOR,SQLVERSION_MINOR,SQLVERSION_RELEASE,SQLVERSION_BUILD
|
||||||
|
#define PHP_SQLSRV_VERSION STRINGIFY( SQLVERSION_MAJOR ) "." STRINGIFY( SQLVERSION_MINOR ) "." STRINGIFY( SQLVERSION_RELEASE )
|
||||||
|
#define PHP_PDO_SQLSRV_VERSION PHP_SQLSRV_VERSION
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue