summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfandrieu <fandrieu@gmail.com>2017-11-10 14:20:42 -0500
committerAdam Baratz <adambaratz@php.net>2017-11-10 14:21:07 -0500
commitb760b46216c388988052e3aebc1a184e97344be5 (patch)
treec2c177c2fc045de28033a0fd86e5708a4bdc2702
parent50421b3da5622cef3ff6150d63d08c945c402f9f (diff)
downloadphp-git-b760b46216c388988052e3aebc1a184e97344be5.tar.gz
Expose TDS version as \PDO::DBLIB_ATTR_TDS_VERSION attribute on \PDO instance
-rw-r--r--NEWS2
-rw-r--r--ext/pdo_dblib/dblib_driver.c71
-rw-r--r--ext/pdo_dblib/pdo_dblib.c1
-rw-r--r--ext/pdo_dblib/php_pdo_dblib_int.h1
-rw-r--r--ext/pdo_dblib/tests/dbtds.phpt17
5 files changed, 92 insertions, 0 deletions
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--
+<?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)