From: fandrieu Date: Fri, 10 Nov 2017 19:20:42 +0000 (-0500) Subject: Expose TDS version as \PDO::DBLIB_ATTR_TDS_VERSION attribute on \PDO instance X-Git-Tag: php-7.3.0alpha1~1059 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b760b46216c388988052e3aebc1a184e97344be5;p=php Expose TDS version as \PDO::DBLIB_ATTR_TDS_VERSION attribute on \PDO instance --- diff --git a/NEWS b/NEWS index 909033fa6a..9567993c76 100644 --- a/NEWS +++ b/NEWS @@ -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-- + +--FILE-- +getAttribute(PDO::DBLIB_ATTR_TDS_VERSION); +var_dump((is_string($version) && strlen($version)) || $version === false); + +?> +--EXPECT-- +bool(true)