Merge pull request #1503 from microsoft/dev

Merge to master for 5.12.0 release
This commit is contained in:
Sicong 2024-01-30 21:43:06 -08:00 коммит произвёл GitHub
Родитель 00faac11a3 e253bcdee5
Коммит 98ff5a8bd4
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
5 изменённых файлов: 87 добавлений и 40 удалений

Просмотреть файл

@ -3,6 +3,41 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/)
## 5.12.0 - 2024-01-31
Updated PECL release packages. Here is the list of updates:
### Added
- Support for PHP 8.3
- Support for Alpine 3.19
### Removed
- Support for PHP 8.0
- Support for Ubuntu 18.04
- Support for Alpine 3.15
### Fixed
- Update connection string keywords set function (#1484)
- Fix error throw for multiple result sets (#1485)
- Fix invalid precision error (#1497)
### Limitations
- No support for inout / output params when using sql_variant type
- No support for inout / output params when formatting decimal values
- In Linux and macOS, setlocale() only takes effect if it is invoked before the first connection. Attempting to set the locale after connecting will not work
- Always Encrypted requires [MS ODBC Driver 17+](https://docs.microsoft.com/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server)
- Only Windows Certificate Store and Azure Key Vault are supported. Custom Keystores are not yet supported
- Issue [#716](https://github.com/Microsoft/msphpsql/issues/716) - With Always Encrypted enabled, named parameters in subqueries are not supported
- Issue [#1050](https://github.com/microsoft/msphpsql/issues/1050) - With Always Encrypted enabled, insertion requires the column list for any tables with identity columns
- [Always Encrypted limitations](https://docs.microsoft.com/sql/connect/php/using-always-encrypted-php-drivers#limitations-of-the-php-drivers-when-using-always-encrypted)
### Known Issues
- This release requires ODBC Driver 17.4.2 or above. Otherwise, a warning about failing to set an attribute may be suppressed when using an older ODBC driver.
- Connection pooling on Linux or macOS is not recommended with [unixODBC](http://www.unixodbc.org/) < 2.3.7
- When pooling is enabled in Linux or macOS
- unixODBC <= 2.3.4 (Linux and macOS) might not return proper diagnostic information, such as error messages, warnings and informative messages
- due to this unixODBC bug, fetch large data (such as xml, binary) as streams as a workaround. See the examples [here](https://github.com/Microsoft/msphpsql/wiki/Features#pooling)
## 5.12.0-beta1 - 2023-12-08
Updated PECL release packages. Here is the list of updates:

Просмотреть файл

@ -392,6 +392,7 @@ void core_sqlsrv_bind_param( _Inout_ sqlsrv_stmt* stmt, _In_ SQLUSMALLINT param_
} else {
SQLSRV_ASSERT(false, "sqlsrv_params_container::insert_param - Invalid parameter direction.");
}
stmt->params_container.insert_param(param_num, new_param);
param_ptr = new_param;
new_param.transferred();
@ -2508,9 +2509,6 @@ void sqlsrv_param::bind_param(_Inout_ sqlsrv_stmt* stmt)
}
core::SQLBindParameter(stmt, param_pos + 1, direction, c_data_type, sql_data_type, column_size, decimal_digits, buffer, buffer_length, &strlen_or_indptr);
if (!stmt->conn->ce_option.enabled && !stmt->format_decimals) {
sql_data_type = SQL_UNKNOWN_TYPE;
}
}
void sqlsrv_param::init_data_from_zval(_Inout_ sqlsrv_stmt* stmt)

Просмотреть файл

@ -31,7 +31,7 @@
#define SQLVERSION_BUILD 0
// For previews, set this constant to 1, 2 and so on. Otherwise, set it to 0
#define PREVIEW 1
#define PREVIEW 0
#define SEMVER_PRERELEASE
// Semantic versioning build metadata, build meta data is not counted in precedence order.
@ -59,7 +59,7 @@
#define _FILEVERSION SQLVERSION_MAJOR,SQLVERSION_MINOR,SQLVERSION_PATCH,SQLVERSION_BUILD
// PECL package version ('-' or '+' is not allowed) - to support Pickle do not use macros below
#define PHP_SQLSRV_VERSION "5.12.0beta1"
#define PHP_PDO_SQLSRV_VERSION "5.12.0beta1"
#define PHP_SQLSRV_VERSION "5.12.0"
#define PHP_PDO_SQLSRV_VERSION "5.12.0"
#endif // VERSION_H

Просмотреть файл

@ -0,0 +1,48 @@
--TEST--
HY104 Invalid precision value when reusing prepared statement
--SKIPIF--
<?php require('skipif_versions_old.inc'); ?>
--FILE--
<?php
set_time_limit(0);
sqlsrv_configure('WarningsReturnAsErrors', 0);
sqlsrv_configure('LogSeverity', SQLSRV_LOG_SEVERITY_ALL);
require_once('MsCommon.inc');
$conn = connect(array('CharacterSet'=>'UTF-8'));
if (!$conn) {
fatalError("Failed to connect");
}
$tableName = 'php_test_table';
$column = array(new AE\ColumnMeta("VARCHAR(8000)", "TestColumn", "NULL"));
$stmt = AE\createTable($conn, $tableName, $column);
if (!$stmt) {
fatalError("Failed to create table $tableName\n");
}
$query = "INSERT INTO $tableName (TestColumn) VALUES (?)";
$parameterValue = "Test value.";
$parameterReference[0] = [ & $parameterValue, SQLSRV_PARAM_IN, null, SQLSRV_SQLTYPE_VARCHAR('8000') ];
$queryHandle = sqlsrv_prepare($conn, $query, $parameterReference);
$r1 = sqlsrv_execute($queryHandle);
if ($r1 === false) {
print_r(sqlsrv_errors(SQLSRV_ERR_ALL));
}
$r2 = sqlsrv_execute($queryHandle);
if ($r2 === false) {
print_r(sqlsrv_errors(SQLSRV_ERR_ALL));
}
dropTable($conn, $tableName);
sqlsrv_close($conn);
echo "Done\n";
?>
--EXPECT--
Done

Просмотреть файл

@ -1,34 +0,0 @@
--TEST--
Test for Github Issue 1448
--DESCRIPTION--
Prepare and execute with int, then execute with string caused "Invalid character value for cast specification" error.
Repro script provided by thsmrtone1
--FILE--
<?php
sqlsrv_configure( 'WarningsReturnAsErrors', 0 );
sqlsrv_configure( 'LogSeverity', SQLSRV_LOG_SEVERITY_ALL );
require_once( 'MsCommon.inc' );
$conn = Connect();
if( !$conn ) {
var_dump( sqlsrv_errors() );
die( "sqlsrv_connect failed." );
}
sqlsrv_query($conn, "CREATE TABLE test1448 (testCol nvarchar(50) NULL)");
$v0 = 1000;
$stmt = sqlsrv_prepare($conn, 'INSERT INTO [test1448] (testCol) VALUES (?);', [&$v0]);
sqlsrv_execute($stmt);
$v0 = 'abcd';
sqlsrv_execute($stmt);
$error = sqlsrv_errors(SQLSRV_ERR_ERRORS);
var_dump($error);
dropTable($conn, "test1448");
sqlsrv_close($conn);
?>
--EXPECT--
NULL