mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Implement server type/version for PDO_ODBC getAttr (#6935)
As an example using the IBM Db2i ODBC driver: PDO::ATTR_SERVER_INFO: DB2/400 SQL PDO::ATTR_SERVER_VERSION: 07.02.0015
This commit is contained in:
parent
2cd5a200f5
commit
207666ee84
2 changed files with 42 additions and 1 deletions
|
@ -350,6 +350,21 @@ static bool odbc_handle_set_attr(pdo_dbh_t *dbh, zend_long attr, zval *val)
|
|||
}
|
||||
}
|
||||
|
||||
static int pdo_odbc_get_info_string(pdo_dbh_t *dbh, SQLUSMALLINT type, zval *val)
|
||||
{
|
||||
RETCODE rc;
|
||||
SQLSMALLINT out_len;
|
||||
char buf[256];
|
||||
pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data;
|
||||
rc = SQLGetInfo(H->dbc, type, (SQLPOINTER)buf, sizeof(buf), &out_len);
|
||||
/* returning -1 is treated as an error, not as unsupported */
|
||||
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
|
||||
return -1;
|
||||
}
|
||||
ZVAL_STRINGL(val, buf, out_len);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int odbc_handle_get_attr(pdo_dbh_t *dbh, zend_long attr, zval *val)
|
||||
{
|
||||
pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data;
|
||||
|
@ -359,9 +374,11 @@ static int odbc_handle_get_attr(pdo_dbh_t *dbh, zend_long attr, zval *val)
|
|||
return 1;
|
||||
|
||||
case PDO_ATTR_SERVER_VERSION:
|
||||
return pdo_odbc_get_info_string(dbh, SQL_DBMS_VER, val);
|
||||
case PDO_ATTR_SERVER_INFO:
|
||||
return pdo_odbc_get_info_string(dbh, SQL_DBMS_NAME, val);
|
||||
case PDO_ATTR_PREFETCH:
|
||||
case PDO_ATTR_TIMEOUT:
|
||||
case PDO_ATTR_SERVER_INFO:
|
||||
case PDO_ATTR_CONNECTION_STATUS:
|
||||
break;
|
||||
case PDO_ODBC_ATTR_ASSUME_UTF8:
|
||||
|
|
24
ext/pdo_odbc/tests/get_attribute_server.phpt
Normal file
24
ext/pdo_odbc/tests/get_attribute_server.phpt
Normal file
|
@ -0,0 +1,24 @@
|
|||
--TEST--
|
||||
PDO ODBC getAttribute SERVER_INFO and SERVER_VERSION
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded('pdo_odbc')) print 'skip not loaded';
|
||||
require 'ext/pdo/tests/pdo_test.inc';
|
||||
PDOTest::skip();
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require 'ext/pdo/tests/pdo_test.inc';
|
||||
$db = PDOTest::test_factory('ext/pdo_odbc/tests/common.phpt');
|
||||
// Obviously, we can't assume what driver is being used, so just check strings
|
||||
// Example driver output (MariaDB ODBC):
|
||||
// PDO::ATTR_SERVER_INFO: MariaDB
|
||||
// PDO::ATTR_SERVER_VERSION: 10.04.000018
|
||||
// As well as IBM i ODBC:
|
||||
// PDO::ATTR_SERVER_INFO: DB2/400 SQL
|
||||
// PDO::ATTR_SERVER_VERSION: 07.02.0015
|
||||
var_dump($db->getAttribute(PDO::ATTR_SERVER_INFO));
|
||||
var_dump($db->getAttribute(PDO::ATTR_SERVER_VERSION));
|
||||
--EXPECTF--
|
||||
string(%d) "%s"
|
||||
string(%d) "%s"
|
Loading…
Add table
Add a link
Reference in a new issue