diff --git a/CHANGELOG.md b/CHANGELOG.md index aaeeb198..be5eb651 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,27 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) +## Windows/Linux/MAC 5.0.0-preview - 2017-07-31 +Updated PECL release packages. Here is the list of updates: + +### Added +- Added support for PHP 7.2 Beta 1 + +### Changed +- Implementation of PDO::lastInsertId($name) to return the last inserted sequence number if the sequence name is supplied to the function ([lastInsertId](https://github.com/Microsoft/msphpsql/wiki/Features#lastinsertid)) + +### Removed +- No longer support Ubuntu 15 +- Supplying tablename into PDO::lastInsertId($name) no longer return the last inserted row ([lastInsertId](https://github.com/Microsoft/msphpsql/wiki/Features#lastinsertid)) + +### Limitation +- No support for inout / output params when using sql_variant type + +### Known Issues +- When pooling is enabled in Linux or MAC + - unixODBC <= 2.3.4 (Linux and MAC) might not return proper diagnostics 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/Connection-Pooling-on-Linux-and-Mac) + ## Windows/Linux/MAC 4.3.0 - 2017-07-06 Production Ready release for SQLSRV and PDO_SQLSRV drivers on Sierra, El Capitan, Debian 8, Ubuntu 15, Ubuntu 16, CentOS 7, and Windows. Here is the changlog since the last Production Ready release. diff --git a/README.md b/README.md index 75b2a438..c78c480b 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,8 @@ Thank you for taking time to take our February survey. Let us know how we are do |-------------------------|--------------------------| ------------------ | [![av-image][]][av-site]| [![tv-image][]][tv-site] |[![Coverage Status][]][coveralls-site] -[av-image]: https://ci.appveyor.com/api/projects/status/github/Microsoft/msphpsql?branch=dev&svg=true -[av-site]: https://ci.appveyor.com/project/Microsoft-PHPSQL/msphpsql +[av-image]: https://ci.appveyor.com/api/projects/status/xhp4nq9ouljnhxqf/branch/dev?svg=true +[av-site]: https://ci.appveyor.com/project/Microsoft-PHPSQL/msphpsql-frhmr/branch/dev [tv-image]: https://travis-ci.org/Microsoft/msphpsql.svg?branch=dev [tv-site]: https://travis-ci.org/Microsoft/msphpsql/ [Coverage Status]: https://coveralls.io/repos/github/Microsoft/msphpsql/badge.svg?branch=dev diff --git a/source/pdo_sqlsrv/config.w32 b/source/pdo_sqlsrv/config.w32 index dea793d4..14eb7205 100644 --- a/source/pdo_sqlsrv/config.w32 +++ b/source/pdo_sqlsrv/config.w32 @@ -3,7 +3,7 @@ // // Contents: JScript build configuration used by buildconf.bat // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/pdo_sqlsrv/pdo_dbh.cpp b/source/pdo_sqlsrv/pdo_dbh.cpp index da2bc727..81352cfe 100644 --- a/source/pdo_sqlsrv/pdo_dbh.cpp +++ b/source/pdo_sqlsrv/pdo_dbh.cpp @@ -3,7 +3,7 @@ // // Contents: Implements the PDO object for PDO_SQLSRV // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License @@ -30,8 +30,8 @@ namespace { const char LAST_INSERT_ID_QUERY[] = "SELECT @@IDENTITY;"; const size_t LAST_INSERT_ID_BUFF_LEN = 10; // size of the buffer to hold the string value of the last insert id integer -const char TABLE_LAST_INSERT_ID_QUERY[] = "SELECT IDENT_CURRENT(%s)"; -const int LAST_INSERT_ID_QUERY_MAX_LEN = sizeof( TABLE_LAST_INSERT_ID_QUERY ) + SQL_MAX_SQLSERVERNAME + 2; // include the quotes +const char SEQUENCE_CURRENT_VALUE_QUERY[] = "SELECT CURRENT_VALUE FROM SYS.SEQUENCES WHERE NAME=%s"; +const int LAST_INSERT_ID_QUERY_MAX_LEN = sizeof( SEQUENCE_CURRENT_VALUE_QUERY ) + SQL_MAX_SQLSERVERNAME + 2; // include the quotes // List of PDO supported connection options. namespace PDOConnOptionNames { @@ -1235,7 +1235,7 @@ char * pdo_sqlsrv_dbh_last_id( _Inout_ pdo_dbh_t *dbh, _In_z_ const char *name, size_t quoted_len = 0; int quoted = pdo_sqlsrv_dbh_quote( dbh, name, strlen( name ), "ed_table, "ed_len, PDO_PARAM_NULL TSRMLS_CC ); SQLSRV_ASSERT( quoted, "PDO::lastInsertId failed to quote the table name."); - snprintf( last_insert_id_query, LAST_INSERT_ID_QUERY_MAX_LEN, TABLE_LAST_INSERT_ID_QUERY, quoted_table ); + snprintf( last_insert_id_query, LAST_INSERT_ID_QUERY_MAX_LEN, SEQUENCE_CURRENT_VALUE_QUERY, quoted_table ); sqlsrv_free( quoted_table ); } diff --git a/source/pdo_sqlsrv/pdo_init.cpp b/source/pdo_sqlsrv/pdo_init.cpp index c8076e11..afa47b3c 100644 --- a/source/pdo_sqlsrv/pdo_init.cpp +++ b/source/pdo_sqlsrv/pdo_init.cpp @@ -3,7 +3,7 @@ // // Contents: initialization routines for PDO_SQLSRV // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/pdo_sqlsrv/pdo_parser.cpp b/source/pdo_sqlsrv/pdo_parser.cpp index 56292a31..e7194160 100644 --- a/source/pdo_sqlsrv/pdo_parser.cpp +++ b/source/pdo_sqlsrv/pdo_parser.cpp @@ -5,7 +5,7 @@ // // Copyright Microsoft Corporation // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/pdo_sqlsrv/pdo_stmt.cpp b/source/pdo_sqlsrv/pdo_stmt.cpp index 7edb17dc..85d726fd 100644 --- a/source/pdo_sqlsrv/pdo_stmt.cpp +++ b/source/pdo_sqlsrv/pdo_stmt.cpp @@ -3,7 +3,7 @@ // // Contents: Implements the PDOStatement object for the PDO_SQLSRV // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/pdo_sqlsrv/pdo_util.cpp b/source/pdo_sqlsrv/pdo_util.cpp index 3e05ff1c..3f08c0b3 100644 --- a/source/pdo_sqlsrv/pdo_util.cpp +++ b/source/pdo_sqlsrv/pdo_util.cpp @@ -3,7 +3,7 @@ // // Contents: Utility functions used by both connection or statement functions // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/pdo_sqlsrv/php_pdo_sqlsrv.h b/source/pdo_sqlsrv/php_pdo_sqlsrv.h index 36b0eddf..73ca9ac2 100644 --- a/source/pdo_sqlsrv/php_pdo_sqlsrv.h +++ b/source/pdo_sqlsrv/php_pdo_sqlsrv.h @@ -6,7 +6,7 @@ // // Contents: Declarations for the extension // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/pdo_sqlsrv/template.rc b/source/pdo_sqlsrv/template.rc index 63326055..9ccfc835 100644 --- a/source/pdo_sqlsrv/template.rc +++ b/source/pdo_sqlsrv/template.rc @@ -3,7 +3,7 @@ // // Contents: Version resource // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/FormattedPrint.cpp b/source/shared/FormattedPrint.cpp index ba5520bd..5ddfdfa6 100644 --- a/source/shared/FormattedPrint.cpp +++ b/source/shared/FormattedPrint.cpp @@ -6,7 +6,7 @@ // Contents: Contains functions for handling Windows format strings // and UTF-16 on non-Windows platforms // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/FormattedPrint.h b/source/shared/FormattedPrint.h index d789afa7..c5ee154e 100644 --- a/source/shared/FormattedPrint.h +++ b/source/shared/FormattedPrint.h @@ -4,7 +4,7 @@ // Contents: Contains functions for handling Windows format strings // and UTF-16 on non-Windows platforms // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/StringFunctions.cpp b/source/shared/StringFunctions.cpp index ca2ec89b..d8e1caf2 100644 --- a/source/shared/StringFunctions.cpp +++ b/source/shared/StringFunctions.cpp @@ -3,7 +3,7 @@ // // Contents: Contains functions for handling UTF-16 on non-Windows platforms // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/StringFunctions.h b/source/shared/StringFunctions.h index 323d308a..1cd765cf 100644 --- a/source/shared/StringFunctions.h +++ b/source/shared/StringFunctions.h @@ -3,7 +3,7 @@ // // Contents: Contains functions for handling UTF-16 on non-Windows platforms // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/core_conn.cpp b/source/shared/core_conn.cpp index 4b488b16..0cc17a64 100644 --- a/source/shared/core_conn.cpp +++ b/source/shared/core_conn.cpp @@ -3,7 +3,7 @@ // // Contents: Core routines that use connection handles shared between sqlsrv and pdo_sqlsrv // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/core_init.cpp b/source/shared/core_init.cpp index 89f75a84..29bb9ec7 100644 --- a/source/shared/core_init.cpp +++ b/source/shared/core_init.cpp @@ -3,7 +3,7 @@ // // Contents: common initialization routines shared by PDO and sqlsrv // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/core_results.cpp b/source/shared/core_results.cpp index e28cbbed..2130875c 100644 --- a/source/shared/core_results.cpp +++ b/source/shared/core_results.cpp @@ -3,7 +3,7 @@ // // Contents: Result sets // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/core_sqlsrv.h b/source/shared/core_sqlsrv.h index 6f904f72..8bc799c6 100644 --- a/source/shared/core_sqlsrv.h +++ b/source/shared/core_sqlsrv.h @@ -6,7 +6,7 @@ // // Contents: Core routines and constants shared by the Microsoft Drivers for PHP for SQL Server // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/core_stmt.cpp b/source/shared/core_stmt.cpp index 54c44fe5..349dbfc0 100644 --- a/source/shared/core_stmt.cpp +++ b/source/shared/core_stmt.cpp @@ -3,7 +3,7 @@ // // Contents: Core routines that use statement handles shared between sqlsrv and pdo_sqlsrv // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/core_stream.cpp b/source/shared/core_stream.cpp index b56e58ca..c19b14f9 100644 --- a/source/shared/core_stream.cpp +++ b/source/shared/core_stream.cpp @@ -3,7 +3,7 @@ // // Contents: Implementation of PHP streams for reading SQL Server data // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/core_util.cpp b/source/shared/core_util.cpp index 61f66bdb..da64d42a 100644 --- a/source/shared/core_util.cpp +++ b/source/shared/core_util.cpp @@ -5,7 +5,7 @@ // // Comments: Mostly error handling and some type handling // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/globalization.h b/source/shared/globalization.h index cd8b744f..0781d607 100644 --- a/source/shared/globalization.h +++ b/source/shared/globalization.h @@ -4,7 +4,7 @@ // Contents: Contains functions for handling Windows format strings // and UTF-16 on non-Windows platforms // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/interlockedatomic.h b/source/shared/interlockedatomic.h index 30941ee0..2642e5a5 100644 --- a/source/shared/interlockedatomic.h +++ b/source/shared/interlockedatomic.h @@ -4,7 +4,7 @@ // Contents: Contains a portable abstraction for interlocked, atomic // operations on int32_t and pointer types. // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/interlockedatomic_gcc.h b/source/shared/interlockedatomic_gcc.h index e4e4205b..8f54ad46 100644 --- a/source/shared/interlockedatomic_gcc.h +++ b/source/shared/interlockedatomic_gcc.h @@ -4,7 +4,7 @@ // Contents: Contains a portable abstraction for interlocked, atomic // operations on int32_t and pointer types. // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/interlockedslist.h b/source/shared/interlockedslist.h index 0a262aeb..1af301b0 100644 --- a/source/shared/interlockedslist.h +++ b/source/shared/interlockedslist.h @@ -4,7 +4,7 @@ // Contents: Contains a portable abstraction for interlocked, singly // linked list. // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/localization.hpp b/source/shared/localization.hpp index a5310650..c2709a46 100644 --- a/source/shared/localization.hpp +++ b/source/shared/localization.hpp @@ -3,7 +3,7 @@ // // Contents: Contains portable classes for localization // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/localizationimpl.cpp b/source/shared/localizationimpl.cpp index 381b9cc5..59a58fa9 100644 --- a/source/shared/localizationimpl.cpp +++ b/source/shared/localizationimpl.cpp @@ -5,7 +5,7 @@ // Must be included in one c/cpp file per binary // A build error will occur if this inclusion policy is not followed // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/msodbcsql.h b/source/shared/msodbcsql.h index e2a4bf0d..9c6e0d41 100644 --- a/source/shared/msodbcsql.h +++ b/source/shared/msodbcsql.h @@ -1,405 +1,405 @@ -#ifndef __msodbcsql_h__ -#define __msodbcsql_h__ - -//--------------------------------------------------------------------------------------------------------------------------------- -// File: msodbcsql.h -// -// Contents: Routines that use statement handles. This is a subset of the header file msodbcsql.h in the ODBC Driver. -// -// Contents: This SDK is not supported under any Microsoft standard support -// program or service. The information is provided AS IS without -// warranty of any kind. Microsoft disclaims all implied -// warranties including, without limitation, any implied -// warranties of merchantability or of fitness for a particular -// purpose. The entire risk arising out of the use of this SDK -// remains with you. In no event shall Microsoft, its authors, or -// anyone else involved in the creation, production, or delivery -// of this SDK be liable for any damages whatsoever (including, -// without limitation, damages for loss of business profits, -// business interruption, loss of business information, or other -// pecuniary loss) arising out of the use of or inability to use -// this SDK, even if Microsoft has been advised of the possibility -// of such damages. -// Microsoft Drivers 4.3 for PHP for SQL Server -// Copyright(c) Microsoft Corporation -// All rights reserved. -// MIT License -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files(the ""Software""), -// to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and / or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions : -// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -// THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -// IN THE SOFTWARE. -//--------------------------------------------------------------------------------------------------------------------------------- - - -#if !defined(SQLODBC_VER) -#define SQLODBC_VER 1300 -#endif - -#if SQLODBC_VER >= 1300 - -#define SQLODBC_PRODUCT_NAME_FULL_VER_ANSI "Microsoft ODBC Driver 13 for SQL Server" -#define SQLODBC_PRODUCT_NAME_FULL_ANSI "Microsoft ODBC Driver for SQL Server" -#define SQLODBC_PRODUCT_NAME_SHORT_VER_ANSI "ODBC Driver 13 for SQL Server" -#define SQLODBC_PRODUCT_NAME_SHORT_ANSI "ODBC Driver for SQL Server" - -#endif // SQLODBC_VER >= 1300 - -#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_DRIVER_NAME SQLODBC_PRODUCT_NAME_SHORT_VER - -// max SQL Server identifier length -#define SQL_MAX_SQLSERVERNAME 128 - - -// SQLSetConnectAttr driver specific defines. -// Microsoft has 1200 thru 1249 reserved for Microsoft ODBC Driver for SQL Server usage. -// Connection attributes - -#define SQL_COPT_SS_BASE 1200 -#define SQL_COPT_SS_INTEGRATED_SECURITY (SQL_COPT_SS_BASE+3) // Force integrated security on login -#define SQL_COPT_SS_TRANSLATE (SQL_COPT_SS_BASE+20) // Perform code page translation -#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_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 - -// SQLSetStmtAttr Microsoft ODBC Driver for SQL Server 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_NOBROWSETABLE (SQL_SOPT_SS_BASE+3) // Set NOBROWSETABLE option -#define SQL_SOPT_SS_COLUMN_ENCRYPTION (SQL_SOPT_SS_BASE+13)// Sets the column encryption mode -// Define old names -#define SQL_TEXTPTR_LOGGING SQL_SOPT_SS_TEXTPTR_LOGGING -#define SQL_COPT_SS_BASE_EX 1240 -#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_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_TNIR (SQL_COPT_SS_BASE_EX+9) // Transparent Network IP Resolution -#define SQL_COPT_SS_COLUMN_ENCRYPTION (SQL_COPT_SS_BASE_EX+10)// Column Encryption Enabled or Disabled -#define SQL_COPT_SS_CEKEYSTOREPROVIDER (SQL_COPT_SS_BASE_EX+11)// Load a keystore provider or read the list of loaded keystore providers -#define SQL_COPT_SS_CEKEYSTOREDATA (SQL_COPT_SS_BASE_EX+12)// Communicate with loaded keystore providers -#define SQL_COPT_SS_TRUSTEDCMKPATHS (SQL_COPT_SS_BASE_EX+13)// List of trusted CMK paths -#define SQL_COPT_SS_CEKCACHETTL (SQL_COPT_SS_BASE_EX+14)// Symmetric Key Cache TTL -#define SQL_COPT_SS_AUTHENTICATION (SQL_COPT_SS_BASE_EX+15)// The authentication method used for the connection - -// SQLColAttributes driver specific defines. -// SQLSetDescField/SQLGetDescField driver specific defines. -// Microsoft has 1200 thru 1249 reserved for Microsoft ODBC Driver for SQL Server 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_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_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 - -// force column encryption -#define SQL_CA_SS_FORCE_ENCRYPT (SQL_CA_SS_BASE+36) // indicate mandatory encryption for this parameter - -#define SQL_CA_SS_MAX_USED (SQL_CA_SS_BASE+37) -// 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_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_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_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_COLUMN_ENCRYPTION -#define SQL_CE_DISABLED 0L // Disabled -#define SQL_CE_RESULTSETONLY 1L // Decryption Only (resultsets and return values) -#define SQL_CE_ENABLED 3L // Enabled (both encryption and decryption) - // Defines for use with SQL_COPT_SS_COLUMN_ENCRYPTION -#define SQL_COLUMN_ENCRYPTION_DISABLE 0L -#define SQL_COLUMN_ENCRYPTION_ENABLE 1L -#define SQL_COLUMN_ENCRYPTION_DEFAULT SQL_COLUMN_ENCRYPTION_DISABLE - // Defines for use with SQL_COPT_SS_CEKCACHETTL -#define SQL_CEKCACHETTL_DEFAULT 7200L // TTL value in seconds (2 hours) -// 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_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 ODBC Driver for SQL Server 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 - -// 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 - -// SQLGetDiagField driver specific defines. -// Microsoft has -1150 thru -1199 reserved for Microsoft ODBC Driver for SQL Server 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 ODBC Driver for SQL Server 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 - -// Data is defined to be past the end of the structure header. -// This is accepted by MSVC, GCC, and C99 standard but former emits -// unnecessary warning, hence it has to be disabled. - -#if defined(_MSC_VER) -#pragma warning(push) -#pragma warning(disable:4200) -#endif - -// Communication between the driver and application via the CEKeystoreData structure -typedef struct CEKeystoreData -{ - wchar_t *name; - unsigned int dataSize; - char data[]; -} CEKEYSTOREDATA; - -#if defined(_MSC_VER) -#pragma warning(pop) -#endif - -// The following constants are for the Azure Key Vault configuration interface -#define AKV_CONFIG_FLAGS 0 -#define AKVCFG_AUTHMODE 0x0000000F -#define AKVCFG_AUTHMODE_ACCESSTOKEN 0 -#define AKVCFG_AUTHMODE_CLIENTKEY 1 -#define AKVCFG_AUTHMODE_PASSWORD 2 -#define AKVCFG_AUTHMODE_INTEGRATED 3 -#define AKVCFG_AUTHMODE_CERTIFICATE 4 -#define AKVCFG_NOAUTORENEW 0x00000010 - -#define AKV_CONFIG_PRINCIPALID 1 -#define AKV_CONFIG_AUTHSECRET 2 -#define AKV_CONFIG_ACCESSTOKEN 3 -#define AKV_CONFIG_TOKENEXPIRY 4 -#define AKV_CONFIG_MAXRETRIES 5 -#define AKV_CONFIG_RETRYTIMEOUT 6 -#define AKV_CONFIG_RETRYWAIT 7 - -#define AKV_CONFIG_RESET 255 -#endif // __msodbcsql_h__ - +#ifndef __msodbcsql_h__ +#define __msodbcsql_h__ + +//--------------------------------------------------------------------------------------------------------------------------------- +// File: msodbcsql.h +// +// Contents: Routines that use statement handles. This is a subset of the header file msodbcsql.h in the ODBC Driver. +// +// Contents: This SDK is not supported under any Microsoft standard support +// program or service. The information is provided AS IS without +// warranty of any kind. Microsoft disclaims all implied +// warranties including, without limitation, any implied +// warranties of merchantability or of fitness for a particular +// purpose. The entire risk arising out of the use of this SDK +// remains with you. In no event shall Microsoft, its authors, or +// anyone else involved in the creation, production, or delivery +// of this SDK be liable for any damages whatsoever (including, +// without limitation, damages for loss of business profits, +// business interruption, loss of business information, or other +// pecuniary loss) arising out of the use of or inability to use +// this SDK, even if Microsoft has been advised of the possibility +// of such damages. +// Microsoft Drivers 5.0 for PHP for SQL Server +// Copyright(c) Microsoft Corporation +// All rights reserved. +// MIT License +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files(the ""Software""), +// to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and / or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions : +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +//--------------------------------------------------------------------------------------------------------------------------------- + + +#if !defined(SQLODBC_VER) +#define SQLODBC_VER 1300 +#endif + +#if SQLODBC_VER >= 1300 + +#define SQLODBC_PRODUCT_NAME_FULL_VER_ANSI "Microsoft ODBC Driver 13 for SQL Server" +#define SQLODBC_PRODUCT_NAME_FULL_ANSI "Microsoft ODBC Driver for SQL Server" +#define SQLODBC_PRODUCT_NAME_SHORT_VER_ANSI "ODBC Driver 13 for SQL Server" +#define SQLODBC_PRODUCT_NAME_SHORT_ANSI "ODBC Driver for SQL Server" + +#endif // SQLODBC_VER >= 1300 + +#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_DRIVER_NAME SQLODBC_PRODUCT_NAME_SHORT_VER + +// max SQL Server identifier length +#define SQL_MAX_SQLSERVERNAME 128 + + +// SQLSetConnectAttr driver specific defines. +// Microsoft has 1200 thru 1249 reserved for Microsoft ODBC Driver for SQL Server usage. +// Connection attributes + +#define SQL_COPT_SS_BASE 1200 +#define SQL_COPT_SS_INTEGRATED_SECURITY (SQL_COPT_SS_BASE+3) // Force integrated security on login +#define SQL_COPT_SS_TRANSLATE (SQL_COPT_SS_BASE+20) // Perform code page translation +#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_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 + +// SQLSetStmtAttr Microsoft ODBC Driver for SQL Server 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_NOBROWSETABLE (SQL_SOPT_SS_BASE+3) // Set NOBROWSETABLE option +#define SQL_SOPT_SS_COLUMN_ENCRYPTION (SQL_SOPT_SS_BASE+13)// Sets the column encryption mode +// Define old names +#define SQL_TEXTPTR_LOGGING SQL_SOPT_SS_TEXTPTR_LOGGING +#define SQL_COPT_SS_BASE_EX 1240 +#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_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_TNIR (SQL_COPT_SS_BASE_EX+9) // Transparent Network IP Resolution +#define SQL_COPT_SS_COLUMN_ENCRYPTION (SQL_COPT_SS_BASE_EX+10)// Column Encryption Enabled or Disabled +#define SQL_COPT_SS_CEKEYSTOREPROVIDER (SQL_COPT_SS_BASE_EX+11)// Load a keystore provider or read the list of loaded keystore providers +#define SQL_COPT_SS_CEKEYSTOREDATA (SQL_COPT_SS_BASE_EX+12)// Communicate with loaded keystore providers +#define SQL_COPT_SS_TRUSTEDCMKPATHS (SQL_COPT_SS_BASE_EX+13)// List of trusted CMK paths +#define SQL_COPT_SS_CEKCACHETTL (SQL_COPT_SS_BASE_EX+14)// Symmetric Key Cache TTL +#define SQL_COPT_SS_AUTHENTICATION (SQL_COPT_SS_BASE_EX+15)// The authentication method used for the connection + +// SQLColAttributes driver specific defines. +// SQLSetDescField/SQLGetDescField driver specific defines. +// Microsoft has 1200 thru 1249 reserved for Microsoft ODBC Driver for SQL Server 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_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_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 + +// force column encryption +#define SQL_CA_SS_FORCE_ENCRYPT (SQL_CA_SS_BASE+36) // indicate mandatory encryption for this parameter + +#define SQL_CA_SS_MAX_USED (SQL_CA_SS_BASE+37) +// 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_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_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_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_COLUMN_ENCRYPTION +#define SQL_CE_DISABLED 0L // Disabled +#define SQL_CE_RESULTSETONLY 1L // Decryption Only (resultsets and return values) +#define SQL_CE_ENABLED 3L // Enabled (both encryption and decryption) + // Defines for use with SQL_COPT_SS_COLUMN_ENCRYPTION +#define SQL_COLUMN_ENCRYPTION_DISABLE 0L +#define SQL_COLUMN_ENCRYPTION_ENABLE 1L +#define SQL_COLUMN_ENCRYPTION_DEFAULT SQL_COLUMN_ENCRYPTION_DISABLE + // Defines for use with SQL_COPT_SS_CEKCACHETTL +#define SQL_CEKCACHETTL_DEFAULT 7200L // TTL value in seconds (2 hours) +// 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_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 ODBC Driver for SQL Server 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 + +// 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 + +// SQLGetDiagField driver specific defines. +// Microsoft has -1150 thru -1199 reserved for Microsoft ODBC Driver for SQL Server 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 ODBC Driver for SQL Server 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 + +// Data is defined to be past the end of the structure header. +// This is accepted by MSVC, GCC, and C99 standard but former emits +// unnecessary warning, hence it has to be disabled. + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable:4200) +#endif + +// Communication between the driver and application via the CEKeystoreData structure +typedef struct CEKeystoreData +{ + wchar_t *name; + unsigned int dataSize; + char data[]; +} CEKEYSTOREDATA; + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + +// The following constants are for the Azure Key Vault configuration interface +#define AKV_CONFIG_FLAGS 0 +#define AKVCFG_AUTHMODE 0x0000000F +#define AKVCFG_AUTHMODE_ACCESSTOKEN 0 +#define AKVCFG_AUTHMODE_CLIENTKEY 1 +#define AKVCFG_AUTHMODE_PASSWORD 2 +#define AKVCFG_AUTHMODE_INTEGRATED 3 +#define AKVCFG_AUTHMODE_CERTIFICATE 4 +#define AKVCFG_NOAUTORENEW 0x00000010 + +#define AKV_CONFIG_PRINCIPALID 1 +#define AKV_CONFIG_AUTHSECRET 2 +#define AKV_CONFIG_ACCESSTOKEN 3 +#define AKV_CONFIG_TOKENEXPIRY 4 +#define AKV_CONFIG_MAXRETRIES 5 +#define AKV_CONFIG_RETRYTIMEOUT 6 +#define AKV_CONFIG_RETRYWAIT 7 + +#define AKV_CONFIG_RESET 255 +#endif // __msodbcsql_h__ + diff --git a/source/shared/sal_def.h b/source/shared/sal_def.h index 8116f9c1..13fd73ab 100644 --- a/source/shared/sal_def.h +++ b/source/shared/sal_def.h @@ -3,7 +3,7 @@ // // Contents: Contains the minimal definitions to build on non-Windows platforms // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/typedefs_for_linux.h b/source/shared/typedefs_for_linux.h index 9906c9d3..531d637d 100644 --- a/source/shared/typedefs_for_linux.h +++ b/source/shared/typedefs_for_linux.h @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------------------------------------------------------- // File: typedefs_for_linux.h // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/version.h b/source/shared/version.h index ba205053..98eebfae 100644 --- a/source/shared/version.h +++ b/source/shared/version.h @@ -4,7 +4,7 @@ // File: version.h // Contents: Version number constants // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License @@ -26,8 +26,8 @@ // Increase Major number with backward incompatible breaking changes. // Increase Minor with backward compatible new functionalities and API changes. // Increase Patch for backward compatible fixes. -#define SQLVERSION_MAJOR 4 -#define SQLVERSION_MINOR 3 +#define SQLVERSION_MAJOR 5 +#define SQLVERSION_MINOR 0 #define SQLVERSION_PATCH 0 #define SQLVERSION_BUILD 0 @@ -35,7 +35,7 @@ // for stable releases should be empty // "-RC" for release candidates // "-preview" for ETP -#define SEMVER_PRERELEASE +#define SEMVER_PRERELEASE "preview" // Semantic versioning build metadata, build meta data is not counted in precedence order. #define SEMVER_BUILDMETA @@ -47,8 +47,10 @@ // Main version, dot separated 3 digits, Major.Minor.Patch #define VER_APIVERSION_STR STRINGIFY( SQLVERSION_MAJOR ) "." STRINGIFY( SQLVERSION_MINOR ) "." STRINGIFY( SQLVERSION_PATCH ) -// Remove "-" if SEMVER_PRERELEASE is empty (for stable releases) -#define VER_FILEVERSION_STR VER_APIVERSION_STR SEMVER_PRERELEASE SEMVER_BUILDMETA +// For preview release, we want the following: +// #define VER_FILEVERSION_STR VER_APIVERSION_STR "-" SEMVER_PRERELEASE SEMVER_BUILDMETA +// because pecl doesn't like dashes. However, if SEMVER_PRERELEASE is empty, the "-" must be removed +#define VER_FILEVERSION_STR VER_APIVERSION_STR "-" SEMVER_PRERELEASE SEMVER_BUILDMETA #define _FILEVERSION SQLVERSION_MAJOR,SQLVERSION_MINOR,SQLVERSION_PATCH,SQLVERSION_BUILD // PECL package version macros (can't have '-' or '+') diff --git a/source/shared/xplat.h b/source/shared/xplat.h index b29689c5..2032a164 100644 --- a/source/shared/xplat.h +++ b/source/shared/xplat.h @@ -3,7 +3,7 @@ // // Contents: include for definition of Windows types for non-Windows platforms // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/xplat_intsafe.h b/source/shared/xplat_intsafe.h index 1fd43551..56f2eed8 100644 --- a/source/shared/xplat_intsafe.h +++ b/source/shared/xplat_intsafe.h @@ -4,7 +4,7 @@ // Contents: This module defines helper functions to prevent // integer overflow bugs. // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/xplat_winerror.h b/source/shared/xplat_winerror.h index f3f0878b..a6078c6e 100644 --- a/source/shared/xplat_winerror.h +++ b/source/shared/xplat_winerror.h @@ -3,7 +3,7 @@ // // Contents: Contains the minimal definitions to build on non-Windows platforms // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/xplat_winnls.h b/source/shared/xplat_winnls.h index a91dd554..d80367f9 100644 --- a/source/shared/xplat_winnls.h +++ b/source/shared/xplat_winnls.h @@ -3,7 +3,7 @@ // // Contents: Contains the minimal definitions to build on non-Windows platforms // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/sqlsrv/config.w32 b/source/sqlsrv/config.w32 index 811602fe..81b3d019 100644 --- a/source/sqlsrv/config.w32 +++ b/source/sqlsrv/config.w32 @@ -3,7 +3,7 @@ // // Contents: JScript build configuration used by buildconf.bat // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/sqlsrv/conn.cpp b/source/sqlsrv/conn.cpp index 8da98f30..2e2f6f99 100644 --- a/source/sqlsrv/conn.cpp +++ b/source/sqlsrv/conn.cpp @@ -3,7 +3,7 @@ // // Contents: Routines that use connection handles // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/sqlsrv/init.cpp b/source/sqlsrv/init.cpp index f6626122..12a02f0e 100644 --- a/source/sqlsrv/init.cpp +++ b/source/sqlsrv/init.cpp @@ -2,7 +2,7 @@ // File: init.cpp // Contents: initialization routines for the extension // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/sqlsrv/php_sqlsrv.h b/source/sqlsrv/php_sqlsrv.h index 82168296..1147f539 100644 --- a/source/sqlsrv/php_sqlsrv.h +++ b/source/sqlsrv/php_sqlsrv.h @@ -8,7 +8,7 @@ // // Comments: Also contains "internal" declarations shared across source files. // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/sqlsrv/stmt.cpp b/source/sqlsrv/stmt.cpp index 1155782b..015dddfc 100644 --- a/source/sqlsrv/stmt.cpp +++ b/source/sqlsrv/stmt.cpp @@ -3,7 +3,7 @@ // // Contents: Routines that use statement handles // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/sqlsrv/template.rc b/source/sqlsrv/template.rc index 5502389a..2dd474e3 100644 --- a/source/sqlsrv/template.rc +++ b/source/sqlsrv/template.rc @@ -3,7 +3,7 @@ // // Contents: Version resource // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/sqlsrv/util.cpp b/source/sqlsrv/util.cpp index 47ff0a01..cd04101c 100644 --- a/source/sqlsrv/util.cpp +++ b/source/sqlsrv/util.cpp @@ -5,7 +5,7 @@ // // Comments: Mostly error handling and some type handling // -// Microsoft Drivers 4.3 for PHP for SQL Server +// Microsoft Drivers 5.0 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/test/functional/pdo_sqlsrv/MsSetup.inc b/test/functional/pdo_sqlsrv/MsSetup.inc index 96343778..2aa68b27 100644 --- a/test/functional/pdo_sqlsrv/MsSetup.inc +++ b/test/functional/pdo_sqlsrv/MsSetup.inc @@ -40,4 +40,4 @@ $marsMode = true; $dsnMode = true; $traceEnabled = false; -?> +?> \ No newline at end of file diff --git a/test/functional/pdo_sqlsrv/pdo_278_lastinsertid_seq.phpt b/test/functional/pdo_sqlsrv/pdo_278_lastinsertid_seq.phpt new file mode 100644 index 00000000..c0d35ed7 --- /dev/null +++ b/test/functional/pdo_sqlsrv/pdo_278_lastinsertid_seq.phpt @@ -0,0 +1,61 @@ +--TEST-- +Provide name in lastInsertId to retrieve the last sequence number +--SKIPIF-- +--FILE-- +getAttribute(PDO::ATTR_SERVER_VERSION)); + if ($version_arr[0] < 11) { + echo "Done\n"; + } + else { + $tableName1 = GetTempTableName('tab1', false); + $tableName2 = GetTempTableName('tab2', false); + $sequenceName = 'sequence1'; + + $stmt = $conn->query("IF OBJECT_ID('$sequenceName', 'SO') IS NOT NULL DROP SEQUENCE $sequenceName"); + $sql = "CREATE TABLE $tableName1 (seqnum INTEGER NOT NULL PRIMARY KEY, SomeNumber INT)"; + $stmt = $conn->query($sql); + $sql = "CREATE TABLE $tableName2 (ID INT IDENTITY(1,2), SomeValue char(10))"; + $stmt = $conn->query($sql); + + $sql = "CREATE SEQUENCE $sequenceName AS INTEGER START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 100 CYCLE"; + $stmt = $conn->query($sql); + + $ret = $conn->exec("INSERT INTO $tableName1 VALUES( NEXT VALUE FOR $sequenceName, 20 )"); + $ret = $conn->exec("INSERT INTO $tableName1 VALUES( NEXT VALUE FOR $sequenceName, 40 )"); + $ret = $conn->exec("INSERT INTO $tableName1 VALUES( NEXT VALUE FOR $sequenceName, 60 )"); + $ret = $conn->exec("INSERT INTO $tableName2 VALUES( '20' )"); + // return the last sequence number is sequence name is provided + $lastSeq = $conn->lastInsertId($sequenceName); + // defaults to $tableName2 -- because it returns the last inserted id value + $lastRow = $conn->lastInsertId(); + + if ($lastSeq == 3 && $lastRow == 1) { + echo "Done\n"; + } + else { + echo "sequence value or identity does not match as expected\n"; + } + $stmt = $conn->query("DROP TABLE $tableName1"); + $stmt = $conn->query("DROP TABLE $tableName2"); + $stmt = $conn->query("DROP SEQUENCE $sequenceName"); + $stmt = null; + } + $conn = null; +} +catch (Exception $e){ + echo "Exception $e\n"; +} + +?> +--EXPECT-- +Done \ No newline at end of file diff --git a/test/functional/pdo_sqlsrv/pdo_278_lastinsertid_seq_2.phpt b/test/functional/pdo_sqlsrv/pdo_278_lastinsertid_seq_2.phpt new file mode 100644 index 00000000..6782d6c5 --- /dev/null +++ b/test/functional/pdo_sqlsrv/pdo_278_lastinsertid_seq_2.phpt @@ -0,0 +1,64 @@ +--TEST-- +LastInsertId returns the last sequences operating on the same table +--SKIPIF-- +--FILE-- +getAttribute(PDO::ATTR_SERVER_VERSION)); + if ($version_arr[0] < 11) { + echo "Done\n"; + } + else { + $tableName = GetTempTableName('tab', false); + $sequence1 = 'sequence1'; + $sequence2 = 'sequenceNeg1'; + $stmt = $conn->query("IF OBJECT_ID('$sequence1', 'SO') IS NOT NULL DROP SEQUENCE $sequence1"); + $stmt = $conn->query("IF OBJECT_ID('$sequence2', 'SO') IS NOT NULL DROP SEQUENCE $sequence2"); + $sql = "CREATE TABLE $tableName (ID INT IDENTITY(1,1), SeqNumInc INTEGER NOT NULL PRIMARY KEY, SomeNumber INT)"; + $stmt = $conn->query($sql); + $sql = "CREATE SEQUENCE $sequence1 AS INTEGER START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 100"; + $stmt = $conn->query($sql); + + $sql = "CREATE SEQUENCE $sequence2 AS INTEGER START WITH 200 INCREMENT BY -1 MINVALUE 101 MAXVALUE 200"; + $stmt = $conn->query($sql); + $ret = $conn->exec("INSERT INTO $tableName VALUES( NEXT VALUE FOR $sequence1, 20 )"); + $ret = $conn->exec("INSERT INTO $tableName VALUES( NEXT VALUE FOR $sequence2, 180 )"); + $ret = $conn->exec("INSERT INTO $tableName VALUES( NEXT VALUE FOR $sequence1, 40 )"); + $ret = $conn->exec("INSERT INTO $tableName VALUES( NEXT VALUE FOR $sequence2, 160 )"); + $ret = $conn->exec("INSERT INTO $tableName VALUES( NEXT VALUE FOR $sequence1, 60 )"); + $ret = $conn->exec("INSERT INTO $tableName VALUES( NEXT VALUE FOR $sequence2, 140 )"); + // return the last sequence number of 'sequence1' + $lastSeq1 = $conn->lastInsertId($sequence1); + + // return the last sequence number of 'sequenceNeg1' + $lastSeq2 = $conn->lastInsertId($sequence2); + + // providing a table name in lastInsertId should return an empty string + $lastSeq3 = $conn->lastInsertId($tableName); + + if ($lastSeq1 == 3 && $lastSeq2 == 198 && $lastSeq3 == "") { + echo "Done\n"; + } + + $stmt = $conn->query("DROP TABLE $tableName"); + $stmt = $conn->query("DROP SEQUENCE $sequence1"); + $stmt = $conn->query("DROP SEQUENCE $sequence2"); + $stmt = null; + } + $conn = null; +} + catch (Exception $e){ + echo "Exception $e\n"; +} + +?> +--EXPECT-- +Done \ No newline at end of file diff --git a/test/functional/sqlsrv/TC21_Connection.phpt b/test/functional/sqlsrv/TC21_Connection.phpt index ed0b57c4..0d3b53dc 100644 --- a/test/functional/sqlsrv/TC21_Connection.phpt +++ b/test/functional/sqlsrv/TC21_Connection.phpt @@ -35,8 +35,8 @@ function ConnectionTest() // Valid connection attempt => no errors are expected Trace("\nValid connection attempt (to $server) ....\n"); $conn2 = Connect(); - $errors = sqlsrv_errors(SQLSRV_ERR_ERRORS); - if(count($errors) != 0) + $errors = sqlsrv_errors(SQLSRV_ERR_ERRORS); + if (!empty($errors)) { die("No errors were expected on valid connection attempts."); } diff --git a/test/functional/sqlsrv/sqlsrv_close.phpt b/test/functional/sqlsrv/sqlsrv_close.phpt index ad0d9dab..2c8e2d10 100644 --- a/test/functional/sqlsrv/sqlsrv_close.phpt +++ b/test/functional/sqlsrv/sqlsrv_close.phpt @@ -14,9 +14,10 @@ using an already closed connection. $conn2 = Connect(); $stmt1 = sqlsrv_query($conn2, "IF OBJECT_ID('PHPTable', 'U') IS NOT NULL DROP TABLE [PHPTable]"); $errors = sqlsrv_errors(); - $count = count($errors); - $error = $errors[0]; - $value = $error['message']; + if (!empty($errors)) + { + die("No errors were expected on valid connection attempts."); + } $stmt2 = sqlsrv_query($conn2, "CREATE TABLE [PHPTable] ([c1_int] int, [c2_bit] bit, [c3_tinyint] tinyint, [c4_smallint] smallint, [c5_bigint] bigint, [c6_float] float, [c7_real] real, [c8_decimal] decimal(28,4), [c9_numeric] numeric(32,0), [c10_money] money, [c11_smallmoney] smallmoney, [c12_char] char(512), [c13_varchar] varchar(512), [c14_varchar(max)] varchar(max), [c15_text] text, [c16_nchar] nchar(512), [c17_nvarchar] nvarchar(512), [c18_nvarchar(max)] nvarchar(max), [c19_ntext] ntext, [c20_binary] binary(512), [c21_varbinary] varbinary(512), [c22_varbinary(max)] varbinary(max), [c23_image] image, [c24_uniqueidentifier] uniqueidentifier, [c25_timestamp] timestamp, [c26_datetime] datetime, [c27_smalldatetime] smalldatetime)"); sqlsrv_free_stmt($stmt2); $stmt3 = sqlsrv_query($conn2, "INSERT INTO [PHPTable] ([c1_int], [c2_bit], [c3_tinyint], [c4_smallint], [c5_bigint], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar(max)], [c15_text], [c16_nchar], [c17_nvarchar], [c18_nvarchar(max)], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary(max)], [c23_image], [c24_uniqueidentifier], [c26_datetime], [c27_smalldatetime]) VALUES (-1, null, 255, 29430, -1023675178, 1, 3.4E+38, 0.6199, 0, -922337203685477.5808, 0.1695, '', null, '|Cb*vzu£ruZCzAAbÃ,@ +©¢ß_ýzÖäv,uåh,ÜÐo:üaðzÐ*OO/AC£ZUüßå>UßZa:ßðßbUO£vz@ö_z:+î<*ßäÄТBýð >Z>*oü_h+îZðaÜÜßC*ã*@~Ö:ÖzvýüÃÖîÃßÜbbOuªO¢Üýö~CäA_~_AÃbßhßýÖbäOZbZBÖauîßüߢ/oð|oO.ö/BråýÖüöZr:_z:<ö©<+äߢÜ~rb¢©rUß~£ðÖrä,BýAZ¢¢>Zzý©ýåÃß_hß ¢©ðhzÐA+åî,ÄZbv,+ß@ahbðÖ¢ýu*CÜBßöåuÄoäÐ_~U¢+îZ+î¢z/ĪßO|Öo>z@©UBߪÖ.ã_u@Bü.î/_ä*¢zÐß*+OoÄ©üa*/Aða_|z@übbBð¢¢+ZCuzoÃrð/Ö./ªÃO~uo£ö>åîü_ߣv©Ð/Ö_ß._ÖÃOÖãý~Üoåðvå>åÖüÃå,uUÖ*AövÃz©åßZ¢ã@üîC>zCß©å++Oä©ÜãðAz>ðãÄåÄå:<ýCýv£*Üb~+bC.B:©|Bã£îAåUz ªhOuß/£*ÃÖ+C@@îÃv_ürBß+b ¢bß~öuÖö Уî+~£:b.ÃZ:~zÐrÜ*ZCUÜÖhîo+ßÖÐ_¢oOÜUßåüzÐa.©ÜäAÐb,oå<ãBöîÜ<.v£z©o£Z,@>,î+ü+u+b*AC£Ð+|£o Bã A.|bBÄÖ>C~£r~ýv@><å~ß.:Z¢îðB@>özÃo+<ßîZ@ª|U/,b©äZv:öB££ððßAC©b bCAÃuhvAýýöý ¢C_ÐöðäbZ@u~vßåÄ+:äÐ>ªÖZ:rÃr~oß*~ÄOýäzä@uöÃ~oO+|îÃ|ooAa>:rªU,B_+/>~üäb|h.ÐÖCÐðCvßhzO|Ä©@©Ã¢Ch.zh©~.ÄäC.Ð/vîÜ_b*.vÜ£ÜßzAvO@î:ߪªÄ/Ü:©./:ÜOîÖZßîý~*rä*Ö@**|h@ uüöߣr*Ü¢©ýß äªå|Ö:v_zBªÐvöî/BCvîC|rüö¢ª|rüÃrbAåð:ßßÃvßîå b,v/ @_Äðrz.ð¢Cãà .,Ãubýüzz~¢ £ ¢äu*hå:h>Cã~@_O©ã~:|<ö+Or:*ruhZå£BZÖî>|:åvî|,<a|CÄ._ÃÃaZîb_,öbåäh£bv©©aÜ:h./ÃÖ@Ð @uß<.voüßZÐvh*zåaÖ+~/ÜßâB|v|~h_ßb/ßb,Ä,îZå+v> ÜC|Ãýhhå', 'Cã Ãî.rhr:bð<ߪbýÃoî/.CÜßoýåh,©OÃ.ö_,Ãaå©UbbUä¢ÖBöh:ÐãüÃÐ|îÐ.zýßÜåubäb£ZÃZur*b@ð@Ußrvu:ã/Ußãßv:+UZZ*¢|åbzãÜ:¢Ü*©AürO>ß_|/,¢¢uß>.ãäübÜozö+Öå./ýu©åoßãbvä/ÐÄðUöUß<**¢Ößzåå©vßÖîhh/oöÖbA©+|a@ bUbýCö.bb+<ä~vðoß:B@ª~bbbÃBoßC>|CîaÄ<Öüýªrü+bzÄ|ª/Z|_ÐZa@@.,î ð r/öãZv å£vB¢@ÄýÖü@|+ßöA+¢ýOü |Bvv¢O£+åZ*B.ðv££<ß_©/,Ü|@v,|uZb+_bOß+î_ +Burv.aÖÄü>+.£CÄ<ÃCðUߣavÐäãBãZ~Zrz*o~ZCU¢ãvßÄöåö: ©ß¢b_/uð__O©å©îbr*Ü_î,ý©¢ü,r|Üüå¢>¢ß©hÖîð£Ö|büö~å£Ð_O', N'vßö:|ba+Ö|zA,AC,b~å¢v£/¢£Aß ðA/ÃÄb+ýЩOäîvaýÐö|_ÖU©özzO¢+zß_UÃ:Ähªzz©h©.,aÄý¢/åÃ:v~Ã+<,.îÖ¢.㢢ußZäh£Uå¢|U_Z~Oýð.CBüCÜ*£rå.î>U|Ü,ãÃhß bã_hÐîrüßÜ@O ãÜ_ä Aý.îr~Ã.ÄÄäýªU~<ЪªbýÜö.@äCäª_ðüü*Cãðo¢ü:zO>BãOZªãCOðß*Uba, :ãßOßîAUhÖ||ý¢¢©~:zÃÃãUÖ/ÖAOaäÜðÜZ@ª>aÃrßðoäZ_Ozo©©ªÃÄ¢ª~bÐAääuvü£ÜÃCaO|ÖBåÖÃ,<å|Ða*OOub©îA:v©*öÄåå£Ö>Oh>BäªßäðO|äýå>:.B¢+üäBåå:£ªo@ªªU*UBÜÄÜã+<£Ã_~Öu£ß,<ªßÃbZ@å@ðZå_~+v¢£.©Ä Üý>u, ZÄ.ü*CCa/©OßUßUîB~BBO C~Uh©oßßrãårªß@ @.:+ãü:ª/îbäîîCzoöªãÐu:üO¢:*ðbr/,Übâß>oC£ÄÜböðzÄ~b£u©~zö>rr>C©,ã:Cã/©*:/Ðb@ÃåuÄo£*ý|uÐOÖÐhªZ©ýüzb/<ß :z,h.ÐöbÃ_ÐoÖÐCrª/ÐîÃ+:Z*/ß©ö<@£Ü*_©ðöAÖä,~*öAar.ª£ouª¢BäBÜüðvCuaB,.r/v©.ýbzßB* .ªv*ß*.OÄ/ßßobß~v**䢪ýü ýÖU_ ZÖÖ:_ aÜ.©ÃuÄÖ¢/>*o:A:Ö>ÃߪzAߪo¢+obbÄ>>~<ð©o.åU å<,BBZãavÖÐÐÄÖ~b_~*ª~+ßä©å|@b Zö*üh*rb_bzAßüÜÖåÐ*ª¢ß_£Ö@Ã_.rÐ öð:Ü+ЪUä:bvZ_|ãbîaßo:Ä:.Är¢©££ *ýBå>ý,hCBÐoÖv+röä:>OðoªÐªh@@*A*bÐv@+ýzuBÜ©ZUz@ Üa£~O>ÐvÃAbªC*rÖß©~î,ãîU rÄ~üßOBÖäãîÐðý._.ãÖðu_öÄ:ß_auö*ä| Zo*ýah C©Üå>A£b_î>Ao~ÄðUÖUÜ/A/übý.©ÖvªÖÖ| *o,î~£AÖOüvzz,+©az£böåÃüZ.äÜ ªðO~ý|rÐ rð©Ãß.ýrBv,~ª/C>,<:.ªOßU.~AbÐ ãoöÃBÄ.vbvüB ~,Öa hhäãå*aU< åååbr.|oß~ürO,rÃÖ@uubß_*. _@Üåbªz/aÖ@Z𩪩©î+ðü:¢rª>Avvb*@©ääb,ð>*îÐ,:o:~|¢,o¢ý>+bå|Z~~AOö,a¢bß|vÖ.AaubOAhî<¢åîÄ_O<Ü', N'¢îÜä|:boß@ÖbC.rö>~à ÜC¢_.Ö£ßrhCÖýîÃv@ãßrzªÜîÃýã©*ãuB|oåßßßöUÖ~©ä:u.+ /ßÄ~h/î*Ää/îý/*îAOãAå:Äî_/Äðð::|: ða@@/Ðü:Bö@ Üh ü/b~ /üCßAÄÄü.v,ä:©@*+>ÐBb.*Ü,r©~ªüA,üCîüîÄ<Ðaabã_£åB¢ü~ðz>Zaª .ãAh*:Uaî Ö_:£aaBA+@UÐz|ü£+Bb<ãå*|z£Ãå©~~_Ö|*b@ðîz,U£bB©@:ª B:å£|_aräãh,©ÜvZ~¢ðo ä£î,ÐuB<.zZBÖZ.:hUÜ ÜähbA:ö£©.ðAUA ßoZä<ÜöU/hZBUA@B~rðb:ß©.BУ Ä~UäÐö~zã+z_ߢÃîÖ*êh *ß öäA>äÜÐCª_äå/*z:rUrî+UãBÖ©ÐbbO+u.@Üb_ßüª|.uBßa ý+oöbhðöÃAðÐrAÃb.o¢<î~Uî,vª*öAÖvÐ*ЩîUzB>|bAªBÜ|ä*ßðr_..hU_ß@~ý©Z£aãzAOoä_ü >rZz>b<ªußbOö @£Ä>|ð|.ÖüBövãO¢b©~bîööUz@:+übÖB/ u_ߢ/ªÖ.ªä.~Ä:OBßOýZ+vbZ*£OÄÄ@zß@¢AÖÃ:öãÄOrA|îßaOäu~Bhüö>@ZÜ.AÄB_~bB...*uh~rbaÄ/ão@ãZÐÄ+©BvoOO.©ýãÐ~Ö:å+ü|Öä>ßãðv>äßßäÃ.zoUObÐîÐü>ЪC|Ü+.+ÖßîUÖ+*UoOªzÃChzv~uÄzu£AåýbußÃÐ<,:Bå@b.åßß~Ðh©ßª<ßZOoÄb_oå*ÖZC/:/CðuAUÜrO å@¢ðåuO<Öý,_z©,|ТУªÃ+CZaÐ~~uABýãß_îuýC~ß+/båßUã:@h:_ÐOh>£å>~î@üZ|<ää£>£¢bß öb,r>ÖCÃå¢:B£,,~C¢aîä:Ü ,üßA>ã>ðär/U©ýßßßb©C+uoÃäor/ZZ|C+ãÜ/bOäðözÐ_.ö>h,:ßO¢ÐO¢äÃubÖÐrv|ä<¢vö£ü åöÃÖªvð©bbß>,<¢£o|,ößOrC:ý|:åå/ßãäÖß<äU/z,©Ã+ÜO+ãüB,va@ÃÖ~z¢Ä:Ürªa©@Ðãozzö£,>>ЩßrªðÜb|ß bbî_¢Äãªää.|/ãrÃÜvÖÃußÜa.+|o|ªCýüUCUÖhCu@.A|bröããoüÄ_/ߪu:Av£_Cbð/Cßv¢uuÄZC_+Cãaz_¢zä.O.B¢/ZüÜvA£ov©äOª,z©ßvzvuCªaöCîßu@vÄÄ£rövðabårãooCðUýrªðBã, ©üßohßöÖ.o<üO+.åUu,Av/äãO£ãaî ¢åvåvzBäöbvbÖa£üb¢ßЩä/+buBýü<ýðãb_~ÄzBCÜ+Z ÜOÃäOu~uuO£Ö/åßArCî:b U©özo|Z¢|vÃî/Z:ÜZãÖßoî@ä©Übbo/b~ß@@~ü*zUaß+ÖÃU@_UÜð@.>hbüb¢,>r_oz+:ªåÐîÐß*U|~oªÜ+öýýîÃß@rîroý*B¢£öÖ_zvðr¢ÜaýZrªv¢Ð|U¢|ð.ü_ÐÖ:vªð¢.bühOOC*ªÐaß©CÐ+|v_b*bð*Bã.ßÜbߪoö,uv::ß,îßo~+|~©î@.üðßB_Ã>£ÖZ||ð,£ÄÄ@BBßУ/ZÖÜÄvãhä@,£uozÃ~üßAC*UUOÄääoß.ªuv*ßÜîÜ,ðhÃA_Ð/_,ã>haÃ_BA@ªý.üýbCÜ/öß<îÃO.Cü£rÄ/Zz< Z~@ÐUÜUzßüüo£ðÖz<Ðððßüª~|/ãßoÄB>©Äãrîu|Ä©,,/hßýZühß~_,@zýðoßö/hbå<<ðB_.UOuv.~o/Ö:|ãAå@övr@rübÖÖuUz|© br.Ä|. hCÐß<,*,ªCr+_uÐ|*/O.:AOZªÜ/,*/zzCªCbÜ+<©,+ªCBrhC ¢bZ+ýåBö:uÄüüAOßåvðB£ßüü@ab/bO.£zbÐ+aðCÐAhzoÜÃ.*/Zrðra©ßB äüß©åvßb£îZßßühOb><ßOãªÐýÖü<:Z.îZÃbhö*vA*ÐA@b¢>Ußaöo*vha+b©hz ª*>+_CåaUÄU/<:ßb©+vÐÃ/ U|a|bÖå©CÐAC©a©B+*ßÜUîîÜÃrZ,zä|¢oaUß@_ßU+ACÃ: hbýZå+î£B*©uåä:>+vO,ü£Öå|ã__.uÜr *bu,aýrÐ>ðîhZ©üÜå©ä@b+åäbCß_Ä©äЪöuðvvöCÐbåZ_åã üB*ÃÜ<,ßörZ<<£üåuo.:aßýboÖ Öª~zoZ<~¢ OüC|.ýbü<¢bCab,:+zhCZ@ao£r+åCrab |bOzî~ãîbÃhv¢ª@ðÄîo/@A£üüðu¢OävªýÜ/auo<Ðzrrãäåa~ãü.Zã£ß@.r ý*uÄu._Zäo>Ã_//h ãßCbð£Üu:ýÖ üðªaã<+b<ý/ ~h.*våã.@>âBUbÄ:>Ü.ÜöîUî©Ãöbbãã*ß>Üu/ü|o*ß:uýð~/£¢ýuA_¢UO:~Oå*:£ãvzÖZ>a@rv/h/AîÖC@..ä¢ Uä@bý,,vý+ß+Ä¢ãhoª:AÖC>ßo_ãb*ðAßuðbåÖ:Ahßý/Ü¢£rCZ,vß,~|C+Äî/_*îb aoß|ö,Ã| UÖÃÐO>*ÄÜü©u,¢+ö@A|~~:B+/ª>,_*ý|Ub*ß/¢_,Bã|ð,C¢@/¢.*hüÐÜ©zz~aöo.üCü v|>î>O>Öåoýzýüüðö£.v*~hh ö+o©hüZoZUäC@äü<üî@ ýªbüu< ÃÃüÃ.+||ß bÐrÃoÃÄBß.ß/ß+âß* zr:£¢~:z|:ÐözOoîo ¢ßð ä.b@Uîªaß|uuv¢:@zO@.ý A~B*_Ä_£OÐbÃAZbÖ@C_Ou*ªAüZh<>,Ãß>ߪ>:ÖO©¢ýåÐ.~ªO:_©,äßC©ýb+U|boÜbZOuÃ~zÖöå|u:å¢,ÃüAüÐZðÃÃð>+', 0x673D69FE556ADF245AF7DA561AD24A053FF2DA447CBCED68EB2B0944D8E3922D9EF8DE088F120EFE46E8C681A7E81741F8F6E1CF375BA5AA50011329609A4B7665ACB822F441762CE3DBFD94F66BC00213C74CE102C2F5425234B88DFFE49DAC9C4F1BFB30F54DB780B4EB5B5D11B4E4411016994E6A74A3B675CFBF88E82DFF3E51F7A650C5D11E7994614DD799E5417FD34CEECE045D32DA7845BA258D2E9787EB1D0B190D947C3EF71FBA0827CB1C908E3FB49C3F3139F4C5CBD87F17F8EB66CAC5EB7CDA28723FD0AFD6E4A329B3AC282A974E79FB48BAE3165342BBFC27FE34533E61E0A0B566CD75CB8F5A55519B182C57EC619DECCE7D3098C3D42F83D488D8B04FEB51CB88743180042FB85F8EC5B82A8FA53A9C96666FE4AF07F2919EF1F70782A401B0C660CE77301DE89FC4D109FD1B05F42E4D3B1AE97B6D1C80819FE11237B1DDEAC308642FD6C26C787DD01FDEFEF47699FDC8BA468A183459444DF6903BD66813F31F3A13A1C4588ACEA16BAB4D3D828D2948156EF79660AAD30AEB89CCDB3DA7680CEBDFBA62F738703078E8AD890B06CB6867F2C0F91C5DBF8F4096D9CFBDF264C3424152A3D3C751DCFDC71E77FD49FFE4BD64744AE66EF08E202A22615FA1728584E946C9B42795A0A1E4FB553E4792F696, 0x597E19DDD451C483A8A4EF7C5C5498F21303352F96CED4A901739A4FD8972BCA6B9019066A0C7278F0A4ECFBB2689F00A5547FF361C47B8AA970DB61B674AA11792411CC3A91880790BD3F, 0xD8F799D399A983173869A6158E5CFA3011C17BF9DA828D56D3C613CC7862A38589A8D179428D1CCB27F940BA6BB6AB348DD67FFBC4F70656694200D395B79FD5C6208BE58B81EE83A4B0D2E141D2EB1C1ADE3FA1E2A8C192A27A0FFF8C4935705A6AF44A2BC6A90CE7FB56132425149656E4B9B777FDF21E5FF8431171EEF75B7A6287D6DEA0F1533532BAE751AD6E7C6578A8A88F7EF85C78D6EB3282979AF804FA98C19E3DB8B6F3658144430BCCB18AC7ABF9464ECBFC6A2A5E07B5BED19E98C1E25614ACDE27C0F2B52AFCB3186C0939A8BBECA1B2B62F9C5773DFB0003494E3AC8229769CDEE883385399A1FFB712F2FD7B1615B1F70E2C2778556A480FF2809619079542939CCAD268685F1C8D9C9F61ECB2841D7E31B474FD4E23887E3A2961180AE5B07CAF69DE4C42498FAF0F99DCB5095C5C6D6218E8522145457941542E3EFD0382B6EFE43C48A5D13BE825C4EDB547D375DECCF3B5F2FD5D5B6A24650BEE1B50B10B1625C5251F13C791DCFF2D5C5790316EDE4F720A4D90B89288D2243FC64CCDD412E19E210D4FBEB92B2416FD30FE1294349D0FCBDEA7BE866D339C4DEF88CB9032584976F10F608E91B9DE297ABB6289C0900B293C01F66B2317B4DAB371C9A35985CAD7B49CA2243C803925C9940CB1D0128D5F7CA1533062DE52DA5A85DB20EF3ACFF4F08BD524EDE6ECBBC8D0A18E0B0209A0E36A26B7329974D649C8CAB6A519368EC518C1453D697196B59768923DC4CE577C3B3C841318C15616FEDA251C3516AF9A12C9F241C4627AF890029A31E29985F9723A6ADCB17AAD566B2F3E8E4C7A7F81B9F72AFADB16B7D8C18C831527243465552BA9FBACD2E9981C9CD59424ECAC16821878EA6E8A1D5B82921A25F7972F46FAD83820D084D5E60E92DE3F4122B4D5DF6D930EAC4AF7CB0D4E781AB7C4A0856C8E9A4BB38B46FE4391DBDCABDE1A5FDD45458A03209AB0E16D13810CBB2E4AF159D2B2886821542694CB1A6E1A1F2F33183C727E16814BF4EA694577C4F2876290EB520B68D77523F0636E557F41C74DE34EF37FBCCBDAD786BD9EFFDCDC62A243B8DE2ECD24CB41C74E8EB312F675A8A1F79475FE08A5C4117A84AA3975471300CB12C6639880BF83B2B86D3D27C59048F55DE448ECA43A12191D52A0200751077AB246E4AE450977D5F24B503787E9B4F361431763CB1427D7B4497B2D1F62AA6666C3747EAC9AAF546C73FA58EADA92339DACBFC439A4AF9D1E0CF9FB8D49B690A0E9D1C4753647C693C2F6581ACEEDD9B7479072A3E62CC213D75F9FA0B4C623BC69B70009CDBE6764F83077AD5683501F204346B943ECBABC0EB09DD6A726DFFCD29BB017ECD0E988280EABB6B514BD530F808070806A797DFD43FA1D2091BCD1507ADABBD338325059BD9035410307F9F34AC627A56F7B68213319A8D5CC689651D9653A3A0180D64D3016C2D9443BF93C002AD6CB952CE1FF7299A01F8A7A8D55FAE3689ECCBFF1CAEFDA7558B88FDDF71F6CD4A192CBBCAC843BC767E0B7C3B5886DDF60D35B7041380BDBBAB68846E3BCA8FF1DA6ECC22E27BB1A90F789E93816BFD04BAF7D23C4FB936986F001F5FBF5E4AB37B7A50F9CAAB0381841DF49AE21A3A3F7B8FA333E843B2213823C3E26C51E9B13DEB28071B033A0FF440B821C49BA644C5DFE42FAB16CB37C83FB196E711253224436D06F223246855A34FA79B805C9C8D8F1C8C6DCA06271FF03EEB419328D32B860D813E9F4292BB8BDA07C723AC47D325195804A8C46A3D35F701F44916B27A6C7C0582DB5DFE3C79D0D1F00E5FEC43F7081C89C0DE82B19343F89840AE7275178D6AA796C507D71B2B8AC7F27A2EE61ABDFD30FA28A99DF943EF875555FBDB5E6CD870F534BD3200456EA553BACF2925128D82B1318AEEE3CCAE42D57081C53FAF699591BDF0D600CB30A4CA044A4E84B66232C8692A2CD1F99D28866A5C8FC3A975A44139976721B781E600D624DF826FCE2F1E4EFCC6854CB39820C84F967EA0E1109E960D5B2EFB1110E7341C0BD4BDA626AC3D7174ACBF1EF485FF466977EB776FE50440EC6272F0132DEBDF5120A7C3631228FA312F7C63EF8708C52FB4B7A90BCCBC26C07CB9B4393D6E46C0DFCDC3DE3BD3474EF136307890615559ADD05E7642D3847480F2F65864B103C125A30FC934F6F3E1705A0A867BAE201B646A8B6D0FD07E0C395F5D38ECEEEA30327F52FD519C24B6EC7D05F8C90DF8D2C2EAF3FA3596B14524F39FE599BB04916FCA540C5B32B9C835D48092DA85433B567A65F1EAE00A9BCE0DC86E0C3F1D21687488FEA9FC7790213BC451161E7AAFB0548F2F5502A67FCFC84E5D7A5BCC06C75F3A65FC44816A02D5C0BF2BA975AF8318ADA7BFFDDC65CE193EE1BE2A15D57FCD99B6E414A37BC3252C7F31F74416429EDA51AE1446D982D497E305AFABE8BFFB3F6E1FBECB6E7531D48AD15D23C6C5289F1F4FB4275B76B0341F7CB066238943BF46B7E5F683D36BEC7C3FCC0825A0D12DED008C990BC3E3F75F8AABE1B4CBB1018D9DDD1EEF221B4BE3C7BB1BBAB80E6EAB828912FCAAB382D3EE9709277A27B08EBA7A97D3C24EBAF540B53418C84CA77C4D4622429E14E2EA4A3AF09B1214699FFA9CF04D768AE943CE2DBBF57F7A0BA1FF8CEA34056DF0A587BD89875E2FE32C4B941E3B4C59F5B25CEE846058ED6AD03F5E9B852A359A9CAC5AB5C90161E59E4A8FA9DB5BD055959737D716E9804CAA42A9480F945DF21609819EE1A43CA0FAF8E615C9438F746EF8F5FDF25E83A31C0E1B765819E609EC9D83D1DA3163F15A86EC1DF37A7356C334E9169E600FC785DE82E388B658D112EC293BBFBDAA2D8504936B7265BFA19AB4B32320DF7B8C8DCC5C0BBE8068943E0B0B174147A7159ACB8189DCA445101ED148D3F335B03370ACBDE3519E6EF4ABFF2D776AA850431DAD98554DE1AFD9873BECED3794A1085AC7969489B3B3FC6C9CEDDD86DDB57670F5C6559D5AE58EFCD46C15A181BD075E252C9301CBC959F99BF8B103C252A986766C31DE4B6AFFE21797B5579E4AEAEFD68F51B12274B53C6C6C0162348B2A71B29F3B157B3902BA2CA0EA2403F25B410DD12D42F0F85401A70561EF699DAD9C7D43950F1FC564AD7CA794718A91386A10B054635DE770CA3B397E75C723508F035DB6C06D4C31486C8FD65963E28705CCF7DEA9493A3E85C2DAD3E656FED64947057E2CEA680CC48F0C06DE01176648B268A8DF54A745C91F20FD82785AF17DA98D025E745A2B64FB0A2A3D335084AB748B23EE4606F4AFCFA50DB96A7A5C241A9934841507D4583D43D45A8D0895CEAC421DED270327A298629EDF4C61FA70BDF612AA2BF0966CA6CBA10222AA12B71F4F1D185C6F0D177181FBA269050BDB59639C86E5FB92ABBBB1465B62257FEE4FE7B00D44D2244EF90B389A04F403A1BFD5A8CF0D9BC113BC616CAB28A1A55C120D6271450E86873F5D9DEAC2F8A6B7AD949B8C7CB0E0B426AC40E36579264755EC87F791826CB14F218FBFFDE650C3CAA4FD841628DF612CAE5AA8BDA311C6275684D660AF262B37EA4D4B2120B6404B8D18B07B92313D0D26DAE327B3F3AC0FB988A7517A532B7ED25C3BDB943FFBF81A6D308A615A851547D949C442F373E6913B67A80EEEC139FD319946055168E6EEEB1D56C311AE6EF39219A109573BEED8454A58D843F93BABF69D2FB14F1FE66062D557D62D238F8CF8A47CC520209605BA7DB017100E9AF1E1BACC748EBDB4723330A681D408AB21BACBEFAF8C667BD60719F6C16FCF50543A65F472570B0E3AE00A91EF8A1421B1C29E5C442EFB658B3EF66D64C6F30263D042476E1438DABFCDA4BF81C49C5BF2E844FEC1631C254EF0693350AD9973FCF83E1F37DCC39D99C3AC768A3BE3B6A2AA7A7C81F430F0C41CF86DAAF57A122430C299968D142624A7650DC695AB131CB290A6232CF208B73D4B1AD455F294499A5259695A1025964447DA8F333A3E71D550F864C3EF074EC9D259320941CEB4D0C42C3351A9B2927B1FDED5177974031CA8FF050A3F75BB5B1AAF77C6E38D028925BE7F0DFB103B9E55E9B4002227406E56155042C9BAA14E70E8470A3ADB8782DC5BE1CB04F52188C366A445C1AB28E36F1960DE3CBFBF7B0D209D02D931638A622133D645755950F3D78F63066B7CC5CF63AB216AB9561C9C76BDD4581EBF920329D3A077529DE9C01FDA55305C64A1A3D7437596321FA8CB1739CEB774F8D527ED5FEC87DC4E6CC5B1614ADF00EC40021C2080CB3A0BC10A2AD55018DF224B16F53D42FC8819D788D6BFD4D0D4D9CA3AE9CCAB447819EDE19EE25D06EE53E69F1623D9C3995389F258F7E48A26F035511B253F0286F6AEEB4F516D95CCD0AA82C945BAA0F006919632A8FB702563CAAEBD0BFBC914E4182F84EE7437F5E435885D51B0E1359451048398DFDE0B2EC5EB96CEE8C0D4E17DE53D9B1C118269A04E736322C3A2D96928AAE7357C143A2456288891370B74A37BE3DBB39A784F8229F8815A980C0238CD55C015FDABF1D0F376C5E8F9C879430ECFB6DFD725CEA06B551B7382DF8C5A165FD3D13B5EA5CFF20AB023A25688518F4E5BD845225197871FBAA8807E4E13EA6BD2A9F49807A019E6EDDC65AAFE04DCC9F44483B404E3FE3C5A1BA40D3F83BCAC493683EE5CF736ABBE6E448531DC11A5CBC689F9802666EEABB83DEC0C1CA76A1FB961C780EE6CFD1DE805A6AF790A7DFA0E3178F9C31C12DFA54294B94AAFA1B6EA65787A5A14ED598CEBA820B03F32BDBFF20DDB3E604CAD5EE7EBABC843D34853FFB50382039FE9541F7CE763E21F660FD6F95891D6788A28CB2B7239418139086FDCC08A2F3BBC5224871EE365397CC8859BF14A7AA68D772AEAB6E82DA0128E33DF04055EDBD0AB4D067D4F59A6B391BEA9B3A59FFE9DC94F495F4474D424747490AF86356769A9BB45FD74293E1D8427253973FC6CFE45413AC6157C9C2678D1F8DAC9072D5C473009FA4A011990112BDB1D5F9AA08807926A44FA91542D2F2F74923053548D09C8E233E272A44427AAA4E9A17EC6DE2170C326ACE851A5EBDCCB2A8C775FBDD75E1386B87C9594FE261D4FFC6A8BA058A660BF902DE011673C5815A779B7B04AF712535B4025B4DB3E3886CB01B971511AD1D606A02DA96DF21F8C148FFD746E6D04F55828551870BBE451F569565572D6B48CA7D1A9AAD968E55920A9A05B30B4186E0CC42928C5B9555ABBCBB404ABBA093DCB70DC8CB35A2BEF42FBF7D70B89214140E858BEBD9BB6EE7C4EEF0DB4D0BD6690629FBFE79BAAB2A849E5C9C18E4F329A72C3B3615A702FB9EE00646B1E2A624E8146A8F96169A53D960673A5FD2CFE0FBC73421CF9F545E26FF5F99B46479A1F837B3047A64929192E85DB440C79CCB10264BEAAE855549BF0B6896B6009F74E7C642271ECB659734A38EE7429F1E5E6394888D198FF273E16A446EFBFBDA9148E8CD7A8575AD45C0B3B50BF66E061FED0A332278125A58D3CF45B486F69C38C8FD9E5AD2A3D9EEE743CD66D9E77C73632481F0C8B819368D74A7B52FF8BEC9177D43F9CFAC4D4931453B3445F47FEB52D2506275AB6F0FE468CC5EFC23BFEE85034E5BA483A3B6D738BE827DE5F198F5BB625CA75B546B0D331567E0EF4D0E864CAE41A52347CF2F9A8A3DECED91FE77336840C0624629AEE34D716E3CD6E8EAB0FC3036AFF3D174932D0DD1177E20A116EFAC860C4D23068493C2D6D660F2C4A2523CF061C8C74097CC2C34385896642CCF584C2962DE62D82AB11B30FB9E323A492FC54230404D276CEE3F21EFCD2CFC5DA90608A69A4073D9183616AC0F9C2EF9FAEF29D121FC8F0A24BD739E41E95C851FD251972A94AEEE51691809367B5C521127F5DE032B3BAC77FD81DDCDD5972ED9918D3C4A96CF65403A7FB8E485D3A860208C1AF47E82F396A5202D12D1217CD1E92FA5EE1F077B588F9DC8AB83C8F229D97DAC487D3A5B0F99A6A576A2536F1803E7FA552EBA401811C164E0B94813DC2E033953753353AFD49555796204B53C2EAFA79BCD9CFB1F3C9336BCD57B565192C8479E191BA3D0944B809864C7B60D0B28B109A0770F91081A17E1FC97D9593F03E699BC1722130BD707811B62BA75DC29B0ACC94CB11AB8B696FF03C2D3FD71275861E01D50F4069EFEC8708E75A55FA205D3E72D90F352CCE00680220F49030A0FF4095894BFD9BBA62A4EE8A92A40F09F61BD00164497650E143C4974E38FB4C4667E819B060D45F92B8665A56A22B6C68F82AD8C03F3CB5DA44A80828F47C39B992343ABBE5498537706EABD31BFA3F28683E460E127C172B324F7BC8DC36AE4C3CA0B47DF0A073AEA5A15FD090D2BE5A68EFB0B6262BA7261D0F89A5DDCC5B39C05FA67B35C137C7CA9768612C369A5F81215FFC85E81600F99E50E126CDD0D9462610312C4314A7B7F8FB9EC335F9D6752A24BC6C6EA3D849A571A7604690FCC68F2B062659233E0CB8449CFC873DC3947A7BFCA9147CE77247F786D17D376157FEC8440AF3B01BF6E6AFB41A16DBB267AE02E5DAA453A2023393EE61AC6C9F70E3350DBEF9B890CA5005B264C8CD5B6C352F237A4196A3AB2631C76FC1BA5A7A103336D1DE036DF5622B8AAE913D496638823C7D49252F4C816298B7E130F8A5AB38548596798E31B12E08261C0509E8E851374F8DED30FB13EA407B6AB6043122D4F358E8C3DFCEF3FABC1B1D09308C58BFDF8FF9B917CE076971AC2902D70B29D6F33701A1002481784B832115DE0AA9C412BAD6743779CD35518F522395E123B0F13606097AB7AFAB0E817D94ACF18B670254F01C24B5AF8979DC5F80D26DD25A6F60249804A0596B0B3B65A5FC28986FF3EB2130F1078C3B967C9F9E582ED8A0BF13353CCCE352620B8510F94FF98D4143FF8CE73C916957E3E9018800BB02DC52C4E6E8F35B931088CF357BF692FB9CEF5E5A68A1F1641DB9DD58D3E1DA51507234967B02A44DE85C6C5E7D6BED6140FD6498A250AA3A6160D93F2602BF3EBE6DE4F9B1FC709A4B10720C35A2E6B1CC7C07E68D31AEFFD80A351A397527D5AD3D901F86F3AF548CDA4D91DE9E04CE7A2762AA0AD8B17CBEE511B7B75650D5F8AC6EF802D72AD8DCB359A2E41D1139F576A012027DDAC48C235091D1E79D267977A9323F0CCB92FC99DD477F0E88A1C3E7B240B63EC37AD19A7BDF8688F6E52633397C63EF0AF8BB0D1578A083558D9AAEDDFA354C603AB42E50A490EC1C6392F8214BD51C3DD4DCC995B9294ADA5E44FE34D7BB0CBFD9D2FEB8359E6657DEE0A1D5A85209A88E70F91D6BB6A7116954025F92A744B896485768D663F8467661C6D8776521FC3B45B656C1EF44132BDD4EE18C06C5279BF94F600A90D22A78B2A6F9FFCEAA042206245CE0FDE6A6F4344D091516BA7FAC9F4C7E25B1F19A739BEE1F484A135D234ABF85D26846AE02987BC653C90551F8374D60823BEE601499E9450FD76EAA10EFD5DA57349D4458AE6B8D463B36AA968C1710FCB2DAF75C4F71488EF19E3B39C1A573F33AFAC3AA0917E3D05129E9533EBE73C05DAD6E04EE7E17C344B5570030538485C2B75B814376E3AAF7170B2587E540332A6ADC14476F04BCE3005553B0D3900DA553908762E27CE6B9B31DC772E23B5F7523D5C577603E63A29EAE43119FEA1376FD802454B8D047FDE55A84413D4A00D4F5EE9CFDDA8635253CE4C44439C529D90A407562070ABC439DD79205BA1265549D7E2BB15D15AC774B0F27D40BF3C42030BB46FCC49ECDEB32496002F42F6B1A7F7FA6CBA9687BE4A40E16F7E2D847AA1361D4FECB78800EA0308F13B5A9732BA40D649C5D0876C84F6248C677D6085A01B5FF825A7C4F06FFA81B78E9583F0A8AFB53D573AB5D1AFB0CBF692FB986CA282511FFB9F0C127BE6DACA4ED0DEEE7334E3B7C8232E65668E4974DBCD5D736115140B4463F409A2A2C17160EA82DED1DC835D17E0A47F54EBB86D569836AD88666939BCD3AA0F3FDA152561BD057C0B6AA2FE4A005B817094B658AB87B30A6B13E8FA814922FE32741D3DCB7F1E97E63B61EBF53863880AE7C8281C5164B7260AB94DD40BFBC147A4CBD5E21EB5F1751F716F26C71533B060EF9980FAE1E10F6516C1C5D1C3DB40A0A4506C8DA5EC32D7B2FDDFF5915FF4869C731B62414DC3EAC57C07F42BA45B962F8523C4C722BB0367A848E3011AD3B7CC3F3450BFDD5F568D81C729E43DAC0EA149C60C3B30BE7AB818FB9805DFE8ABA84F28EC6F0BD65126CC37455A911E29FC3A41B854C77B9B80BA98A7E1C651AE981C809514BF9E967274E56FF8791F26FAD19BCB9D3056E0D48C6CB5732F6F607B89AD3E1189153D9BAB45E0E20CA3079A71AD102B861068C59FC08752E823430484F46FCBE01470BC5E2FF2EA76FEC7E9651A01815F35F478447871C88DEAB28701DB5D18333BB95C3C54CC561E7D4FA1F99DEDCE21C2A54FFFF68668A2A82E737C6AE89AA0AEB62A60A4440B689D5AC728D0CEF0FDE4663F360D193DB451BA942559DAB394B5014AE7C36D7D7D99E7619CBF3FD2D93E769704A963929578750FEAB0E50EC3A63273CF84083977E9C29C26B7A1F411E7BBE7E342AFEB516EB46E4D5D92CDB4D89DF58CCC0255353C201BE7C66CDDD780FD02F5FE2B80F6472161CF99EC1956F5E84D19AB6844E466B1A62294038A02D797CD5F90D8B5AC1CFE44ABA1859B5006C4F2DE1EC32C18B91D8F4C855E6143965EF8021EB9C61D33A1FCAC239843E016561BCF11ACE3136AB4A672486927BE9C0115438D99314DFED5AB7DC67FF420DAAE362E439231E97AE4976A1253D4C9793E10228300527C25CDD13C01664CEBBF85979933F87B0ACF2BC8A901C73AAB00E103886FD29DDA5CB90975C0F5E71497ACAA8DBB3A9680C305535737A9, 0x93253B2062C47CEDE8BD3D7AEF0549D944B411, '08d2a6e7-72e4-4c2c-b1c1-4cd363f653c1', '2479-02-01 02:49:22.037', '1963-09-15 02:54')"); diff --git a/test/functional/sqlsrv/sqlsrv_fetch_field_twice_data_types.phpt b/test/functional/sqlsrv/sqlsrv_fetch_field_twice_data_types.phpt index 11009693..333c87d5 100644 --- a/test/functional/sqlsrv/sqlsrv_fetch_field_twice_data_types.phpt +++ b/test/functional/sqlsrv/sqlsrv_fetch_field_twice_data_types.phpt @@ -72,7 +72,7 @@ function FetchField($stmt, $idx, $numFields, $errorExpected) function PrintError($errorExpected = true) { $errors = sqlsrv_errors(SQLSRV_ERR_ALL); - if (count($errors) > 0) + if (!empty($errors)) { $e = $errors[0]; var_dump($e['message']); diff --git a/test/functional/sqlsrv/sqlsrv_input_param_unknown_encoding.phpt b/test/functional/sqlsrv/sqlsrv_input_param_unknown_encoding.phpt index 4b76ca31..65e90fc6 100644 --- a/test/functional/sqlsrv/sqlsrv_input_param_unknown_encoding.phpt +++ b/test/functional/sqlsrv/sqlsrv_input_param_unknown_encoding.phpt @@ -52,7 +52,7 @@ sqlsrv_close($conn); ?> --EXPECTREGEX-- -Notice\: Use of undefined constant SQLSRV_ENC_UNKNOWN - assumed \'SQLSRV_ENC_UNKNOWN\' in .+(\/|\\)sqlsrv_input_param_unknown_encoding\.php on line 26 +(Warning|Notice)\: Use of undefined constant SQLSRV_ENC_UNKNOWN - assumed \'SQLSRV_ENC_UNKNOWN\' (\(this will throw an Error in a future version of PHP\) )?in .+(\/|\\)sqlsrv_input_param_unknown_encoding\.php on line 26 Array \( \[0\] => Array @@ -67,7 +67,7 @@ Array \) -Notice\: Use of undefined constant SQLSRV_ENC_UNKNOWN - assumed \'SQLSRV_ENC_UNKNOWN\' in .+(\/|\\)sqlsrv_input_param_unknown_encoding\.php on line 33 +(Warning|Notice)\: Use of undefined constant SQLSRV_ENC_UNKNOWN - assumed \'SQLSRV_ENC_UNKNOWN\' (\(this will throw an Error in a future version of PHP\) )?in .+(\/|\\)sqlsrv_input_param_unknown_encoding\.php on line 33 Array \( \[0\] => Array @@ -81,4 +81,3 @@ Array \) \) -