php-sqlsrv/source/sqlsrv/php_sqlsrv.h
David Puglielli 7458a6c1c6
5.8.0 RTW dev to master (#1087)
* Fixed the potential error reported by Prefast code analysis

* Use SQLSRV_ASSERT for checking NULL ptrs

* For these AKV tests check env despite not AE connected

* Added the driver option to run functional tests

* Fixed connection pooling tests for more than one ODBC drivers

* added driver option to pdo isPooled.php

* Removed win32 ifdefs re connection resiliency (#802)

* Set the driver argument for getDSN to null by default (#798)

* Added the driver argument to getDSN

* Dropped the driver argument but set to null as default

* Removed the AE condition in locale support

* Modified the AE condition for locale support

* Changed int to SQLLEN to avoid infinite loop (#806)

* Version 5.3.0 (#803)

* Version 5.3.0

* Fixed the wrong replacements

* Added comments block to m4 files

* Use dnl for comments

*  Modified AE fetch phptypes test to insert only one row at a time and loop through php types (#801)

* Modified AE fetch phptypes test to insert only one row at a time and loop through php types

* Fixed formatting

* Streamlined two very similar large column name tests (#807)

* Streamlined two very similar large column name tests

* Changed the EOL

* Updates to change log and readme (#811)

* Updates to change log and readme

* Dropped support for Ubuntu 17

* Modified as per review comments

* Fixed connection resiliency tests for Unix, updated AppVeyor for ODBC 17.2

* Fixed expected output

* Fixed output and skipifs

* Fixed skipifs and output

* Fixed driver name

* Updated installation instructions and sample script (#813)

* Updated instructions and sample test for 5.3.0 RTW

* Fixed sample code to adhere to php coding standard

* Fixed cases and spaces

* Modified NOTE for UB 18.04 based on review comments

* Added 'exit'

* Modified change log and readme based on review to PR 811

* Applied review comments

* build output to debug appveyor failure

* removed debug output

* Streamlined two very similar large column name tests (#815)

* Streamlined two very similar large column name tests

* Added random number of test table names to avoid operand clash issues

* Replaced to with for based on review

* Changelog updated

* changelog updated, test skipif changed to run on unix platforms

* Fixed skipif typo

* Fixed typo in skipif for pdo

* Fixed some output for Travis

* Moved error checking inside pdo connres tests

* Added links back to changelog

* Fixed output for sqlsrv connres tests

* Fixed output

* Fixed output again

* Fixed skipifs for connres

* Tweaked per review comments

* Changes made to source and tests to support PHP 7.3 (#822)

* Changes made to support php 7.3

* Correct use of the smart pointer

* Fixed the tests for 7.3

* Some clean up for array_init()

* Fixed formattings and clean up

* One more fix

* Initialising strings with nulls

* Removed some spaces

* Made array index spacing consistent

* Fix for compilation problem

* Fix for compilation problem again

* Before freeing stmt in destructor check if dbh driver data is NULL  (#829)

* Issue 434 - set dbh driver data to NULL as well in destructor

* Reverted the last change but instead check if dbh driver_data is already freed

* Modified the comment

* Added driver to the skipif conditions (#831)

* Used git clone instead to download source from a branch of a tag (#832)

* Modified the error handling to make it more flexible (#833)

* Made error handling more flexible

* Fixed a minor issue with a test

* Enabled Spectre Mitigations (#836)

* Incorporated changes in PR 634 to pdo_sqlsrv (#834)

* Incorporated changes in PR 634 to pdo_sqlsrv

* Reverted the changes because the array is for internal use only

* Modified README re user's suggestion (#841)

* Modified README re user's suggestion

* Moved the if condition to the end as per review

* Adding supporting for Azure AD access token (#837)

* Adding supporting for Azure AD access token

* Added more comments for the AD access token skipif files

* Save the pointer to access token struct until after connecting

* Clear the access token data before freeing the memory

* Added a reference as per review

* Feature request - new PDO_STMT_OPTION_FETCHES_DATETIME_TYPE flag for pdo_sqlsrv to return datetime as objects (#842)

* Feature request - issue 648

* Fixed constructor for field_cache and added another test

* Added tests for FETCH_BOUND

* Added a new test for output param

* Modified output param test to set attributes differently

* Removed a useless helped function in a test

* Combined two new tests into one as per review

* Uncommented dropTable

* Feature request - add ReturnDatesAsStrings option to statement level for sqlsrv  (#844)

* Added ReturnDatesAsStrings option to the statement level

* Added new tests for ReturnDatesAsStrings at statement level

* Added more datetime types as per review

* Updated version 5.4.0-preview (#846)

* Updated version 5.4.0-preview

* Replaced 5.3 with 5.4

* Fixed sqlsrv datetime tests to connect with ColumnEncryption variables (#849)

* Change log for 5.4.0-preview (#850)

* Updated change log for 5.4.0-preview

* Updated 5.4.0 preview to add two new feature requests

* Modified change log as per review

* Modified the wordings

* Updated readme, changelog, and install instructions

* Clear AKV data after setting the connection attribute or when exception is thrown (#854)

* Dev (#820)

* Fixed the potential error reported by Prefast code analysis

* Use SQLSRV_ASSERT for checking NULL ptrs

* For these AKV tests check env despite not AE connected

* Added the driver option to run functional tests

* Fixed connection pooling tests for more than one ODBC drivers

* added driver option to pdo isPooled.php

* Removed win32 ifdefs re connection resiliency (#802)

* Set the driver argument for getDSN to null by default (#798)

* Added the driver argument to getDSN

* Dropped the driver argument but set to null as default

* Removed the AE condition in locale support

* Modified the AE condition for locale support

* Changed int to SQLLEN to avoid infinite loop (#806)

* Version 5.3.0 (#803)

* Version 5.3.0

* Fixed the wrong replacements

* Added comments block to m4 files

* Use dnl for comments

*  Modified AE fetch phptypes test to insert only one row at a time and loop through php types (#801)

* Modified AE fetch phptypes test to insert only one row at a time and loop through php types

* Fixed formatting

* Streamlined two very similar large column name tests (#807)

* Streamlined two very similar large column name tests

* Changed the EOL

* Updates to change log and readme (#811)

* Updates to change log and readme

* Dropped support for Ubuntu 17

* Modified as per review comments

* Fixed connection resiliency tests for Unix, updated AppVeyor for ODBC 17.2

* Fixed expected output

* Fixed output and skipifs

* Fixed skipifs and output

* Fixed driver name

* Updated installation instructions and sample script (#813)

* Updated instructions and sample test for 5.3.0 RTW

* Fixed sample code to adhere to php coding standard

* Fixed cases and spaces

* Modified NOTE for UB 18.04 based on review comments

* Added 'exit'

* Modified change log and readme based on review to PR 811

* Applied review comments

* build output to debug appveyor failure

* removed debug output

* Streamlined two very similar large column name tests (#815)

* Streamlined two very similar large column name tests

* Added random number of test table names to avoid operand clash issues

* Replaced to with for based on review

* Changelog updated

* changelog updated, test skipif changed to run on unix platforms

* Fixed skipif typo

* Fixed typo in skipif for pdo

* Fixed some output for Travis

* Moved error checking inside pdo connres tests

* Added links back to changelog

* Fixed output for sqlsrv connres tests

* Fixed output

* Fixed output again

* Clear AKV data after connection or when exception is thrown

* Modified tests too to skip some AKV tests without real credentials

* Used assignment operator also free the existing memory

* Change readme links to https

* Change readme links to https

Merging this commit to dev

* Save meta data for the fetched result set (#855)

* Save meta data on fetched result sets

* Fixed a compilation error

* Optimized some more -- metadata should be available when fetching

* Skip conversion for strings of numeric values, integers, floats, decimals etc

* Set encoding char for numeric data

* Apply review

* Added Mojave to macOS instructions (#862)

Added Mojave to macOS instructions

* Fixed the broken links of Appveyor status badge (#863)

* Feature request 415 for sqlsrv (#861)

* Modified how to send stream data using SQLPutData and SQLParamData (#865)

* Updated instructions to include Ubuntu 18.10 (#869)

* Feature request 415 for pdo_sqlsrv (#873)

* Skipped some tests when running against Azure (#874)

* Modified config files to add the compiler flag, /Qspectre (#878)

* Merge the commit from master re survey image link (#880)

* Fixed the flaws of decimal tests and added more debugging (#879)

* Changed sample code to adhere to PSR standard (#887)

* Decimal places for money types only (#886)

* Version update for 5.5.0-preview (#889)

* Fixed the error in the pdo decimal test (#890)

* Removed warning messages while compiling extensions (#892)

* Improve performance of Unicode conversions (#891)

* Update sqlsrv_statement_format_money_scales.phpt

Do not encrypt money / smallmoney fields in the test table

* Change log 5.5.0-preview (#895)

* updated docs for php 7.3

* Fixed broken links

* Added back Ubuntu 18.10 ODBC instruction

* Drop tests related to fake passwords (#905)

* Initialize output param buffer when allocating extra space (#907)

* Enable compiling extensions statically into PHP (#904)

* Dropped dbname variable and set QUOTED_IDENTIFIER to ON (#911)

* Skipped the non-applicables tests against Azure Data Warehouse (#913)

* Support for Managed Identity for Azure resources (#875)

* Changed version 5.6.0 (#918)

* Initialize hasLoss before passing into Convert function (#919)

* Added new tests for setting client buffer size related to issue 228 (#920)

* Fixed load order issue in sqlsrv

* Added source indexing for symbols (#922)

* Modified linux and mac instructions for 5.6.0 RTW (#926)

* Change log 5.6.0 (#921)

* add Language option on connect

* Updated AppVeyor to download ODBC driver 17.3 (#941)

* Issue 937 - fixed ASSERT and added new tests (#940)

* Changed travis to pull mcr.microsoft.com/mssql/server:2017-latest instead (#943)

* Modified money tests to test the accuracies of floats (#944)

* Fixed the returned values for PDOStatement::getColumnMeta (#946)

* Onboarding to Azure Pipelines (#949)

* Fixed the error in Issue 570  (#952)

* Added a new status badge on readme (#953)

* Added new tests for issue 569 (#951)

* Fix issue 955 - errors building sqlsrv alone (#956)

* Modified test_largeData for Linux CI (#954)

* Issue 937 - fixed ASSERT and added new tests (#940)


(cherry picked from commit 12d01c9189)

* Fixed the returned values for PDOStatement::getColumnMeta (#946)


(cherry picked from commit 7309fb90b1)

* Fix issue 955 - errors building sqlsrv alone (#956)

(cherry picked from commit 15f61bd0b4)

* 5.6.1 hotfix

* Updated change log

* Tests modified for language option for SQL Azure (#963)

* Update azure-pipelines.yml for Azure Pipelines [skip ci] (#964)

* Added more checks for error conditions (#965)

* Removed forward cursor condition

* Added row and column count checks

* Revert "Update azure-pipelines.yml for Azure Pipelines [skip ci] (#964)" (#969)

This reverts commit 7d389e0cff.

* Add new pdo_sqlsrv tests for utf8 encoding errors (#966)

* Modified to check if qualified for AE connections (#967)

* Fixed test and error message

* Minor fixes

* Test fixes

* Addressed review comments

* Fixed test failure

* Made Azure AD tests more robust (#973)

* Addressed review comments

* Issue 970: use quotes for variables (#971)

* Added batch query test

* Fixed 32 bit test failure

* Addressed review comments

* Formatting changes

* Used different skipif conditions for these two tests that require AE connections (#977)

* Simplified insert logic

* Modified get column meta method to reference saved metadata (#978)

* Revert "Used different skipif conditions for these two tests that require AE connections (#977)" (#980)

This reverts commit ee3c85afa8.

* Fixed failing tests (#981)

*  Data Classification sensitivity metadata retrieval (#979)

* Added more pdo tests to verify different error conditions (#984)

* Fixed memory issues with data classification (#985)

* Added connection string flag

* Removed unix skipif

* Fixed test output

* Fixed pdo test

* Changed flag name

* Fixed test output

* Updated links and versions (#987) (#988)

* Fixed test output (again)

* Fixed test output (again)

* Fixed test output (again)

* Replaced expected test output altogether

* Fixed locale issue

* Corrected formatting

* Replaced EXPECTF with EXPECT

* Fixed two failing tests (#991)

* Redesigned some tests based on recent test results (#992)

* Modified pipelines to connect using sqlcmd inside of the container instead (#995)

* Added batch query

* Added batch query test for pdo (#997)

* Added a new test and modify a non LOB sqlsrv test (#1000)

* Two index zval functions are macros in php 7.4 (#1001)

* Replaced uint with size_t (#1004)

*  Check compiler version for php 74 (#1005)

* Fixed tests that failed in php 7.4 (#1006)

* Improve data caching with datetime objects (#1008)

* Fixed for issues found by Semmle (#1011)

* Removed unneeded constants

* Fixed sqlsrv_free_stmt argument info

* Fixed brace escape to avoid buffer overflow

* Fixed brace escape and added test

* Debugging test failure on Bamboo

* Removed debugging output

* Debugging test failure on Bamboo

* Removed debugging output

* Added more test cases

* Changed range check to use strchr

* Added pdo test

* Fixed test and formatting

* Addressed various issues with PHP 7.4 beta1 (#1015)

* Updated dockerfile to use UB 18.04 and PHP 73 (#1016)

* Added survey results (#1017)

* Updated ODBC driver 17.4 (#1019)

* Modified output.py to take a new argument and travis yml to use include for coveralls (#1020)

*  Used constants in memory stress tests for easier configuration (#1022)

* Removed KSP related scripts and files (#1030)

* Updated version to 5.7.0 preview (#1029)

* Change log for 5.7.0 (#1028)

* Modified how drivers handle query timeout settings (#1037)

* Feature request: support extended string types (#1043)

* Added the required file to ansi tests (#1047)

* Always Encrypted v2 support (#1045)

* Change to support ae-v2

* Add support for AE V2

* Added some descriptions and comments

* Fixed PDO pattern matching

* Updated key generation scripts

* Fixed key script

* Fixed char/nchar results, fixed formatting issues

* Addressed review comments

* Updated key scripts

* Debugging aev2 keyword failure

* Debugging aev2 keyword failure

* Debugging aev2 keyword failure

* Debugging aev2 keyword failure

* Added skipif to ae v2 keyword test

* Addressed review comments

* Fixed braces and camel caps

* Updated test descriptions

* Added detail to test descriptions

* Tiny change

* Modified pdo tests to work with column encryption (#1051)

* Saved php types with metadata when fetching (#1049)

* Updated survey charts for Nov 2019 (#1057)

* Updated all CIs (#1058)

* Change log 5.7.1 preview (#1060)

* Fix AKV keyword test for AE v2 behaviour (#1061)

* Master (#936)

5.6.0 RTW

* 5.6.1 hotfix (#959)

* Updated links and versions (#987)

* Fixed AKV keyword tests for AE v2

* Added comment

* Free proc cache before starting test

* Fixed comment

* Update linux mac instructions for php 7.4 (#1062)

* Updated appveyor yml to build 7.3 and 7.4 (#1065)

* Fixes suggested by Semmle (#1068)

* Fixes suggested by Semmle

* Updated azure-pipelines

* Added configurable options for setting locales (#1069)

#1063

* Fixed the skipif wordings and styles (#1070)

* Modified locale tests to work in both linux and mac (#1074)

* Include sql_variant type for buffered queries (#1080)

* Updated versions and year (#1082)

* Change log for version 5.8.0 (#1083)

* 5.8.0 rtw docs (#1086)

* updated install instructions and changelog

* removed md extensions

* Addressed review comments

* added path

* Fixed link

Co-authored-by: Jenny Tam <v-yitam@microsoft.com>
Co-authored-by: Gert de Pagter <BackEndTea@users.noreply.github.com>
Co-authored-by: Jannes Jeising <jannes@jeising.net>
Co-authored-by: Guillaume Degoulet <34232764+gdegoulet@users.noreply.github.com>
2020-01-31 14:02:45 -08:00

140 lines
5.7 KiB
C

#ifndef PHP_SQLSRV_H
#define PHP_SQLSRV_H
//---------------------------------------------------------------------------------------------------------------------------------
// File: php_sqlsrv.h
//
// Contents: Declarations for the extension
//
// Comments: Also contains "internal" declarations shared across source files.
//
// Microsoft Drivers 5.8 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.
//---------------------------------------------------------------------------------------------------------------------------------
#include "php.h"
//*********************************************************************************************************************************
// Global variables
//*********************************************************************************************************************************
// request level variables
ZEND_BEGIN_MODULE_GLOBALS(sqlsrv)
// global objects for errors and warnings. These are returned by sqlsrv_errors.
zval errors;
zval warnings;
// flags for error handling and logging (set via sqlsrv_configure or php.ini)
zend_long log_severity;
zend_long log_subsystems;
zend_long current_subsystem;
zend_bool warnings_return_as_errors;
zend_long buffered_query_limit;
#ifndef _WIN32
zend_long set_locale_info;
#endif
ZEND_END_MODULE_GLOBALS(sqlsrv)
ZEND_EXTERN_MODULE_GLOBALS(sqlsrv);
// macro used to access the global variables. Use it to make global variable access agnostic to threads
#define SQLSRV_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(sqlsrv, v)
#if defined(ZTS)
ZEND_TSRMLS_CACHE_EXTERN();
#endif
//*********************************************************************************************************************************
// Initialization Functions
//*********************************************************************************************************************************
// variables set during initialization
extern zend_module_entry g_sqlsrv_module_entry; // describes the extension to PHP
#define phpext_sqlsrv_ptr &g_sqlsrv_module_entry
// module initialization
PHP_MINIT_FUNCTION(sqlsrv);
// module shutdown function
PHP_MSHUTDOWN_FUNCTION(sqlsrv);
// request initialization function
PHP_RINIT_FUNCTION(sqlsrv);
// request shutdown function
PHP_RSHUTDOWN_FUNCTION(sqlsrv);
// module info function (info returned by phpinfo())
PHP_MINFO_FUNCTION(sqlsrv);
//*********************************************************************************************************************************
// Functions
//*********************************************************************************************************************************
PHP_FUNCTION(sqlsrv_connect);
PHP_FUNCTION(sqlsrv_begin_transaction);
PHP_FUNCTION(sqlsrv_client_info);
PHP_FUNCTION(sqlsrv_close);
PHP_FUNCTION(sqlsrv_commit);
PHP_FUNCTION(sqlsrv_query);
PHP_FUNCTION(sqlsrv_prepare);
PHP_FUNCTION(sqlsrv_rollback);
PHP_FUNCTION(sqlsrv_server_info);
PHP_FUNCTION(sqlsrv_cancel);
PHP_FUNCTION(sqlsrv_execute);
PHP_FUNCTION(sqlsrv_fetch);
PHP_FUNCTION(sqlsrv_fetch_array);
PHP_FUNCTION(sqlsrv_fetch_object);
PHP_FUNCTION(sqlsrv_field_metadata);
PHP_FUNCTION(sqlsrv_free_stmt);
PHP_FUNCTION(sqlsrv_get_field);
PHP_FUNCTION(sqlsrv_has_rows);
PHP_FUNCTION(sqlsrv_next_result);
PHP_FUNCTION(sqlsrv_num_fields);
PHP_FUNCTION(sqlsrv_num_rows);
PHP_FUNCTION(sqlsrv_rows_affected);
PHP_FUNCTION(sqlsrv_send_stream_data);
// type functions for SQL types.
// to expose SQL Server paramterized types, we use functions that return encoded integers that contain the size/precision etc.
// for example, SQLSRV_SQLTYPE_VARCHAR(4000) matches the usage of SQLSRV_SQLTYPE_INT with the size added.
PHP_FUNCTION(SQLSRV_SQLTYPE_BINARY);
PHP_FUNCTION(SQLSRV_SQLTYPE_CHAR);
PHP_FUNCTION(SQLSRV_SQLTYPE_DECIMAL);
PHP_FUNCTION(SQLSRV_SQLTYPE_NCHAR);
PHP_FUNCTION(SQLSRV_SQLTYPE_NUMERIC);
PHP_FUNCTION(SQLSRV_SQLTYPE_NVARCHAR);
PHP_FUNCTION(SQLSRV_SQLTYPE_VARBINARY);
PHP_FUNCTION(SQLSRV_SQLTYPE_VARCHAR);
// PHP type functions
// strings and streams may have an encoding parameterized, so we use the functions
// the valid encodings are SQLSRV_ENC_BINARY and SQLSRV_ENC_CHAR.
PHP_FUNCTION(SQLSRV_PHPTYPE_STREAM);
PHP_FUNCTION(SQLSRV_PHPTYPE_STRING);
// These functions set and retrieve configuration settings. Configuration settings defined are:
// WarningsReturnAsErrors - treat all ODBC warnings as errors and return false from sqlsrv APIs.
// LogSeverity - combination of severity of messages to log (see Logging)
// LogSubsystems - subsystems within sqlsrv to log messages (see Logging)
PHP_FUNCTION(sqlsrv_configure);
PHP_FUNCTION(sqlsrv_get_config);
// *** extension error functions ***
PHP_FUNCTION(sqlsrv_errors);
#endif /* PHP_SQLSRV_H */