Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable compiling extensions statically into PHP #904

Merged
merged 4 commits into from
Dec 20, 2018
Merged

Enable compiling extensions statically into PHP #904

merged 4 commits into from
Dec 20, 2018

Conversation

jjeising
Copy link
Contributor

@jjeising jjeising commented Dec 9, 2018

This should enable compiling both extensions statically into PHP and fixes #894. I've tested building statically and as a shared module against PHP 7.2.13.

I've tried to introduce only a few extraneous changes. I've removed some duplicate lines from php_sqlsrv(_int).h that were already present in core_sqlsrv.h. For a short time I also had this change included, but is not needed, as the ini definitions will remain in the internal header files. You may be nonetheless interested in cleaning this up a little.

To include both extensions at the same time on Windows there is probably a change needed to configure_module_dirname + "\\shared" in config.w32, but I'm not familiar with syntax there.

@jjeising jjeising changed the title PHP static build, fix #894 Enable compiling extensions statically into PHP Dec 9, 2018
@coveralls
Copy link

coveralls commented Dec 9, 2018

Coverage Status

Coverage increased (+0.02%) to 72.342% when pulling 579ac0a on jjeising:php-static-build into d4f840f on Microsoft:dev.

@codecov-io
Copy link

codecov-io commented Dec 9, 2018

Codecov Report

Merging #904 into dev will increase coverage by 0.05%.
The diff coverage is n/a.

Impacted file tree graph

@@            Coverage Diff             @@
##              dev     #904      +/-   ##
==========================================
+ Coverage   80.32%   80.37%   +0.05%     
==========================================
  Files          25       25              
  Lines        7731     7731              
==========================================
+ Hits         6210     6214       +4     
+ Misses       1521     1517       -4
Impacted Files Coverage Δ
...x86/php-7.1.25-src/ext/sqlsrv/shared/core_init.cpp 54.16% <0%> (-4.33%) ⬇️
...php-7.1.25-src/ext/pdo_sqlsrv/shared/core_init.cpp 54.16% <0%> (-4.33%) ⬇️
...php-7.1.25-src/ext/pdo_sqlsrv/shared/core_stmt.cpp 75.64% <0%> (-0.1%) ⬇️
...4/x86/php-7.1.25-src/ext/pdo_sqlsrv/pdo_parser.cpp 91.35% <0%> (ø) ⬆️
...phpdev/vc14/x86/php-7.1.25-src/ext/sqlsrv/stmt.cpp 88.99% <0%> (ø) ⬆️
...phpdev/vc14/x86/php-7.1.25-src/ext/sqlsrv/util.cpp 84.37% <0%> (ø) ⬆️
...c14/x86/php-7.1.25-src/ext/pdo_sqlsrv/pdo_stmt.cpp 85.07% <0%> (ø) ⬆️
...phpdev/vc14/x86/php-7.1.25-src/ext/sqlsrv/conn.cpp 83.88% <0%> (ø) ⬆️
...c14/x86/php-7.1.25-src/ext/pdo_sqlsrv/pdo_util.cpp 90.21% <0%> (ø) ⬆️
...vc14/x86/php-7.1.25-src/ext/pdo_sqlsrv/pdo_dbh.cpp 91.68% <0%> (ø) ⬆️
... and 7 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update d4f840f...579ac0a. Read the comment docs.

@david-puglielli david-puglielli self-requested a review December 10, 2018 19:03
if test -f $srcdir/ext/sqlsrv/shared/core_sqlsrv.h; then
pdo_sqlsrv_inc_path=$srcdir/ext/sqlsrv/shared/
shared_src_class=""
elif test -f $srcdir/ext/pdo_sqlsrv/shared/core_sqlsrv.h; then
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change makes it impossible to compile just pdo_sqlsrv without sqlsrv (I get a bunch of undefined reference compilation errors), but without it I get multiple definition errors if I try to compile both drivers because the core source files are included twice. This is one of the reasons why we never added the ability to compile the drivers statically. Do you know a way around these errors?

Copy link
Contributor Author

@jjeising jjeising Dec 10, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change makes it impossible to compile just pdo_sqlsrv without sqlsrv (I get a bunch of undefined reference compilation errors)

Can you elaborate a bit what you've tried to do? This should only happen if you copy both extensions to the PHP source ext/ directory and then specify --disable-sqlsrv. As this should be required rarely I thought it might be better than no support. But it is probably possible to test if sqlsrv is enabled, like this. I'll have a look.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@david-puglielli I've added the additional check. Had to swap between the extensions, because pdo_sqlsrv is included first by buildconf. This might be a bit fragile, but enables me to build both without arguments and with --with-pdo_sqlsrv --disable-sqlsrv and also with both extensions active. Does this address your concerns?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, I think your recent changes address my concerns. I've tested every combination, and the only one that doesn't work is pdo_sqlsrv shared and sqlsrv static, but I don't think that's a big problem. We will continue testing and see if we can get it working on Windows as well.

@david-puglielli
Copy link
Contributor

We will be merging this PR as soon as we figure out how to implement this on Windows as well, but we can't before then. Please feel free to update this PR if you have any suggestions.

@david-puglielli
Copy link
Contributor

Ok, figured out how to get it working on Windows. Changes were required to config.w32 for sqlsrv, but we also had to move DllMain out of the core files and put a separate copy in init.cpp and pdo_init.cpp. Additionally we had to add an extern declaration in php_pdo_sqlsrv_int.cpp.

@jjeising Please see my changes at the static-compilation branch of david-puglielli/msphpsql and incorporate them in this PR.

@jjeising
Copy link
Contributor Author

Thanks for your additional work! 🎉

Please see my changes at the static-compilation branch of david-puglielli/msphpsql and incorporate them in this PR.

I've squashed the missing extern declaration and updated config.w32. I've tried to reduce duplicate code there.

@yitam yitam merged commit 4efb54e into microsoft:dev Dec 20, 2018
@jjeising jjeising deleted the php-static-build branch December 21, 2018 22:29
david-puglielli added a commit that referenced this pull request Jan 31, 2020
* 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 12d01c9)

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


(cherry picked from commit 7309fb9)

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

(cherry picked from commit 15f61bd)

* 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 7d389e0.

* 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 ee3c85a.

* 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants