diff options
author | fandrieu <fandrieu@gmail.com> | 2017-11-10 14:20:42 -0500 |
---|---|---|
committer | Adam Baratz <adambaratz@php.net> | 2017-11-10 14:21:07 -0500 |
commit | b760b46216c388988052e3aebc1a184e97344be5 (patch) | |
tree | c2c177c2fc045de28033a0fd86e5708a4bdc2702 | |
parent | 50421b3da5622cef3ff6150d63d08c945c402f9f (diff) | |
download | php-git-b760b46216c388988052e3aebc1a184e97344be5.tar.gz |
Expose TDS version as \PDO::DBLIB_ATTR_TDS_VERSION attribute on \PDO instance
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | ext/pdo_dblib/dblib_driver.c | 71 | ||||
-rw-r--r-- | ext/pdo_dblib/pdo_dblib.c | 1 | ||||
-rw-r--r-- | ext/pdo_dblib/php_pdo_dblib_int.h | 1 | ||||
-rw-r--r-- | ext/pdo_dblib/tests/dbtds.phpt | 17 |
5 files changed, 92 insertions, 0 deletions
@@ -82,6 +82,8 @@ PHP NEWS . Implemented request #69592 (allow 0-column rowsets to be skipped automatically). (fandrieu) . Fixed bug #74243 (allow locales.conf to drive datetime format). (fandrieu) + . Expose TDS version as \PDO::DBLIB_ATTR_TDS_VERSION attribute on \PDO + instance. (fandrieu) - PDO_OCI: . Fixed bug #74631 (PDO_PCO with PHP-FPM: OCI environment initialized diff --git a/ext/pdo_dblib/dblib_driver.c b/ext/pdo_dblib/dblib_driver.c index f66e83734c..502238219f 100644 --- a/ext/pdo_dblib/dblib_driver.c +++ b/ext/pdo_dblib/dblib_driver.c @@ -298,6 +298,73 @@ static int dblib_set_attr(pdo_dbh_t *dbh, zend_long attr, zval *val) } } +static void dblib_get_tds_version(zval *return_value, int tds) +{ + switch (tds) { + case DBTDS_2_0: + ZVAL_STRING(return_value, "2.0"); + break; + + case DBTDS_3_4: + ZVAL_STRING(return_value, "3.4"); + break; + + case DBTDS_4_0: + ZVAL_STRING(return_value, "4.0"); + break; + + case DBTDS_4_2: + ZVAL_STRING(return_value, "4.2"); + break; + + case DBTDS_4_6: + ZVAL_STRING(return_value, "4.6"); + break; + + case DBTDS_4_9_5: + ZVAL_STRING(return_value, "4.9.5"); + break; + + case DBTDS_5_0: + ZVAL_STRING(return_value, "5.0"); + break; + +#ifdef DBTDS_7_0 + case DBTDS_7_0: + ZVAL_STRING(return_value, "7.0"); + break; +#endif + +#ifdef DBTDS_7_1 + case DBTDS_7_1: + ZVAL_STRING(return_value, "7.1"); + break; +#endif + +#ifdef DBTDS_7_2 + case DBTDS_7_2: + ZVAL_STRING(return_value, "7.2"); + break; +#endif + +#ifdef DBTDS_7_3 + case DBTDS_7_3: + ZVAL_STRING(return_value, "7.3"); + break; +#endif + +#ifdef DBTDS_7_4 + case DBTDS_7_4: + ZVAL_STRING(return_value, "7.4"); + break; +#endif + + default: + ZVAL_FALSE(return_value); + break; + } +} + static int dblib_get_attribute(pdo_dbh_t *dbh, zend_long attr, zval *return_value) { pdo_dblib_db_handle *H = (pdo_dblib_db_handle *)dbh->driver_data; @@ -320,6 +387,10 @@ static int dblib_get_attribute(pdo_dbh_t *dbh, zend_long attr, zval *return_valu ZVAL_STRING(return_value, dbversion()); break; + case PDO_DBLIB_ATTR_TDS_VERSION: + dblib_get_tds_version(return_value, dbtds(H->link)); + break; + case PDO_DBLIB_ATTR_SKIP_EMPTY_ROWSETS: ZVAL_BOOL(return_value, H->skip_empty_rowsets); break; diff --git a/ext/pdo_dblib/pdo_dblib.c b/ext/pdo_dblib/pdo_dblib.c index 98e21c9d86..223d7bc18d 100644 --- a/ext/pdo_dblib/pdo_dblib.c +++ b/ext/pdo_dblib/pdo_dblib.c @@ -195,6 +195,7 @@ PHP_MINIT_FUNCTION(pdo_dblib) REGISTER_PDO_CLASS_CONST_LONG("DBLIB_ATTR_QUERY_TIMEOUT", (long) PDO_DBLIB_ATTR_QUERY_TIMEOUT); REGISTER_PDO_CLASS_CONST_LONG("DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER", (long) PDO_DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER); REGISTER_PDO_CLASS_CONST_LONG("DBLIB_ATTR_VERSION", (long) PDO_DBLIB_ATTR_VERSION); + REGISTER_PDO_CLASS_CONST_LONG("DBLIB_ATTR_TDS_VERSION", (long) PDO_DBLIB_ATTR_TDS_VERSION); REGISTER_PDO_CLASS_CONST_LONG("DBLIB_ATTR_SKIP_EMPTY_ROWSETS", (long) PDO_DBLIB_ATTR_SKIP_EMPTY_ROWSETS); REGISTER_PDO_CLASS_CONST_LONG("DBLIB_ATTR_DATETIME_CONVERT", (long) PDO_DBLIB_ATTR_DATETIME_CONVERT); diff --git a/ext/pdo_dblib/php_pdo_dblib_int.h b/ext/pdo_dblib/php_pdo_dblib_int.h index b3bd04714f..d1be37ee79 100644 --- a/ext/pdo_dblib/php_pdo_dblib_int.h +++ b/ext/pdo_dblib/php_pdo_dblib_int.h @@ -157,6 +157,7 @@ enum { PDO_DBLIB_ATTR_QUERY_TIMEOUT, PDO_DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER, PDO_DBLIB_ATTR_VERSION, + PDO_DBLIB_ATTR_TDS_VERSION, PDO_DBLIB_ATTR_SKIP_EMPTY_ROWSETS, PDO_DBLIB_ATTR_DATETIME_CONVERT, }; diff --git a/ext/pdo_dblib/tests/dbtds.phpt b/ext/pdo_dblib/tests/dbtds.phpt new file mode 100644 index 0000000000..1f3f35ff30 --- /dev/null +++ b/ext/pdo_dblib/tests/dbtds.phpt @@ -0,0 +1,17 @@ +--TEST-- +PDO_DBLIB: \PDO::DBLIB_ATTR_TDS_VERSION exposes a string or false +--SKIPIF-- +<?php +if (!extension_loaded('pdo_dblib')) die('skip not loaded'); +require __DIR__ . '/config.inc'; +?> +--FILE-- +<?php +require __DIR__ . '/config.inc'; + +$version = $db->getAttribute(PDO::DBLIB_ATTR_TDS_VERSION); +var_dump((is_string($version) && strlen($version)) || $version === false); + +?> +--EXPECT-- +bool(true) |