Skip to content

Commit b760b46

Browse files
fandrieuadambaratz
authored andcommitted
Expose TDS version as \PDO::DBLIB_ATTR_TDS_VERSION attribute on \PDO instance
1 parent 50421b3 commit b760b46

File tree

5 files changed

+92
-0
lines changed

5 files changed

+92
-0
lines changed

NEWS

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ PHP NEWS
8282
. Implemented request #69592 (allow 0-column rowsets to be skipped
8383
automatically). (fandrieu)
8484
. Fixed bug #74243 (allow locales.conf to drive datetime format). (fandrieu)
85+
. Expose TDS version as \PDO::DBLIB_ATTR_TDS_VERSION attribute on \PDO
86+
instance. (fandrieu)
8587

8688
- PDO_OCI:
8789
. Fixed bug #74631 (PDO_PCO with PHP-FPM: OCI environment initialized

ext/pdo_dblib/dblib_driver.c

+71
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,73 @@ static int dblib_set_attr(pdo_dbh_t *dbh, zend_long attr, zval *val)
298298
}
299299
}
300300

301+
static void dblib_get_tds_version(zval *return_value, int tds)
302+
{
303+
switch (tds) {
304+
case DBTDS_2_0:
305+
ZVAL_STRING(return_value, "2.0");
306+
break;
307+
308+
case DBTDS_3_4:
309+
ZVAL_STRING(return_value, "3.4");
310+
break;
311+
312+
case DBTDS_4_0:
313+
ZVAL_STRING(return_value, "4.0");
314+
break;
315+
316+
case DBTDS_4_2:
317+
ZVAL_STRING(return_value, "4.2");
318+
break;
319+
320+
case DBTDS_4_6:
321+
ZVAL_STRING(return_value, "4.6");
322+
break;
323+
324+
case DBTDS_4_9_5:
325+
ZVAL_STRING(return_value, "4.9.5");
326+
break;
327+
328+
case DBTDS_5_0:
329+
ZVAL_STRING(return_value, "5.0");
330+
break;
331+
332+
#ifdef DBTDS_7_0
333+
case DBTDS_7_0:
334+
ZVAL_STRING(return_value, "7.0");
335+
break;
336+
#endif
337+
338+
#ifdef DBTDS_7_1
339+
case DBTDS_7_1:
340+
ZVAL_STRING(return_value, "7.1");
341+
break;
342+
#endif
343+
344+
#ifdef DBTDS_7_2
345+
case DBTDS_7_2:
346+
ZVAL_STRING(return_value, "7.2");
347+
break;
348+
#endif
349+
350+
#ifdef DBTDS_7_3
351+
case DBTDS_7_3:
352+
ZVAL_STRING(return_value, "7.3");
353+
break;
354+
#endif
355+
356+
#ifdef DBTDS_7_4
357+
case DBTDS_7_4:
358+
ZVAL_STRING(return_value, "7.4");
359+
break;
360+
#endif
361+
362+
default:
363+
ZVAL_FALSE(return_value);
364+
break;
365+
}
366+
}
367+
301368
static int dblib_get_attribute(pdo_dbh_t *dbh, zend_long attr, zval *return_value)
302369
{
303370
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
320387
ZVAL_STRING(return_value, dbversion());
321388
break;
322389

390+
case PDO_DBLIB_ATTR_TDS_VERSION:
391+
dblib_get_tds_version(return_value, dbtds(H->link));
392+
break;
393+
323394
case PDO_DBLIB_ATTR_SKIP_EMPTY_ROWSETS:
324395
ZVAL_BOOL(return_value, H->skip_empty_rowsets);
325396
break;

ext/pdo_dblib/pdo_dblib.c

+1
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@ PHP_MINIT_FUNCTION(pdo_dblib)
195195
REGISTER_PDO_CLASS_CONST_LONG("DBLIB_ATTR_QUERY_TIMEOUT", (long) PDO_DBLIB_ATTR_QUERY_TIMEOUT);
196196
REGISTER_PDO_CLASS_CONST_LONG("DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER", (long) PDO_DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER);
197197
REGISTER_PDO_CLASS_CONST_LONG("DBLIB_ATTR_VERSION", (long) PDO_DBLIB_ATTR_VERSION);
198+
REGISTER_PDO_CLASS_CONST_LONG("DBLIB_ATTR_TDS_VERSION", (long) PDO_DBLIB_ATTR_TDS_VERSION);
198199
REGISTER_PDO_CLASS_CONST_LONG("DBLIB_ATTR_SKIP_EMPTY_ROWSETS", (long) PDO_DBLIB_ATTR_SKIP_EMPTY_ROWSETS);
199200
REGISTER_PDO_CLASS_CONST_LONG("DBLIB_ATTR_DATETIME_CONVERT", (long) PDO_DBLIB_ATTR_DATETIME_CONVERT);
200201

ext/pdo_dblib/php_pdo_dblib_int.h

+1
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ enum {
157157
PDO_DBLIB_ATTR_QUERY_TIMEOUT,
158158
PDO_DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER,
159159
PDO_DBLIB_ATTR_VERSION,
160+
PDO_DBLIB_ATTR_TDS_VERSION,
160161
PDO_DBLIB_ATTR_SKIP_EMPTY_ROWSETS,
161162
PDO_DBLIB_ATTR_DATETIME_CONVERT,
162163
};

ext/pdo_dblib/tests/dbtds.phpt

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
--TEST--
2+
PDO_DBLIB: \PDO::DBLIB_ATTR_TDS_VERSION exposes a string or false
3+
--SKIPIF--
4+
<?php
5+
if (!extension_loaded('pdo_dblib')) die('skip not loaded');
6+
require __DIR__ . '/config.inc';
7+
?>
8+
--FILE--
9+
<?php
10+
require __DIR__ . '/config.inc';
11+
12+
$version = $db->getAttribute(PDO::DBLIB_ATTR_TDS_VERSION);
13+
var_dump((is_string($version) && strlen($version)) || $version === false);
14+
15+
?>
16+
--EXPECT--
17+
bool(true)

0 commit comments

Comments
 (0)