mirror of
https://github.com/php/php-src.git
synced 2024-11-29 04:46:07 +08:00
Merge branch 'PHP-5.5' into PHP-5.6
* PHP-5.5: updated NEWS added test for bug #69354 revert skipif, this should run everywhere further ODBC 3.0 compliance more compliance with the ODBC 3.0 test fixes
This commit is contained in:
commit
b1997278fd
@ -960,9 +960,9 @@ int odbc_bindcols(odbc_result *result TSRMLS_DC)
|
||||
charextraalloc = 0;
|
||||
colfieldid = SQL_COLUMN_DISPLAY_SIZE;
|
||||
|
||||
rc = SQLColAttributes(result->stmt, (SQLUSMALLINT)(i+1), SQL_COLUMN_NAME,
|
||||
rc = PHP_ODBC_SQLCOLATTRIBUTE(result->stmt, (SQLUSMALLINT)(i+1), PHP_ODBC_DESC_BASE_COLUMN_NAME,
|
||||
result->values[i].name, sizeof(result->values[i].name), &colnamelen, 0);
|
||||
rc = SQLColAttributes(result->stmt, (SQLUSMALLINT)(i+1), SQL_COLUMN_TYPE,
|
||||
rc = PHP_ODBC_SQLCOLATTRIBUTE(result->stmt, (SQLUSMALLINT)(i+1), SQL_COLUMN_TYPE,
|
||||
NULL, 0, NULL, &result->values[i].coltype);
|
||||
|
||||
/* Don't bind LONG / BINARY columns, so that fetch behaviour can
|
||||
@ -997,7 +997,7 @@ int odbc_bindcols(odbc_result *result TSRMLS_DC)
|
||||
charextraalloc = 1;
|
||||
#endif
|
||||
default:
|
||||
rc = SQLColAttributes(result->stmt, (SQLUSMALLINT)(i+1), colfieldid,
|
||||
rc = PHP_ODBC_SQLCOLATTRIBUTE(result->stmt, (SQLUSMALLINT)(i+1), colfieldid,
|
||||
NULL, 0, NULL, &displaysize);
|
||||
/* Workaround for Oracle ODBC Driver bug (#50162) when fetching TIMESTAMP column */
|
||||
if (result->values[i].coltype == SQL_TIMESTAMP) {
|
||||
@ -1091,7 +1091,7 @@ void odbc_column_lengths(INTERNAL_FUNCTION_PARAMETERS, int type)
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
SQLColAttributes(result->stmt, (SQLUSMALLINT)pv_num, (SQLUSMALLINT) (type?SQL_COLUMN_SCALE:SQL_COLUMN_PRECISION), NULL, 0, NULL, &len);
|
||||
PHP_ODBC_SQLCOLATTRIBUTE(result->stmt, (SQLUSMALLINT)pv_num, (SQLUSMALLINT) (type?SQL_COLUMN_SCALE:SQL_COLUMN_PRECISION), NULL, 0, NULL, &len);
|
||||
|
||||
RETURN_LONG(len);
|
||||
}
|
||||
@ -2135,7 +2135,7 @@ PHP_FUNCTION(odbc_result)
|
||||
fieldsize = result->longreadlen;
|
||||
}
|
||||
} else {
|
||||
SQLColAttributes(result->stmt, (SQLUSMALLINT)(field_ind + 1),
|
||||
PHP_ODBC_SQLCOLATTRIBUTE(result->stmt, (SQLUSMALLINT)(field_ind + 1),
|
||||
(SQLUSMALLINT)((sql_c_type == SQL_C_BINARY) ? SQL_COLUMN_LENGTH :
|
||||
SQL_COLUMN_DISPLAY_SIZE),
|
||||
NULL, 0, NULL, &fieldsize);
|
||||
@ -2871,7 +2871,7 @@ PHP_FUNCTION(odbc_field_type)
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
SQLColAttributes(result->stmt, (SQLUSMALLINT)pv_num, SQL_COLUMN_TYPE_NAME, tmp, 31, &tmplen, NULL);
|
||||
PHP_ODBC_SQLCOLATTRIBUTE(result->stmt, (SQLUSMALLINT)pv_num, SQL_COLUMN_TYPE_NAME, tmp, 31, &tmplen, NULL);
|
||||
RETURN_STRING(tmp,1)
|
||||
}
|
||||
/* }}} */
|
||||
|
@ -281,8 +281,16 @@ void odbc_sql_error(ODBC_SQL_ERROR_PARAMS);
|
||||
|
||||
#if defined(ODBCVER) && (ODBCVER >= 0x0300)
|
||||
#define IS_SQL_LONG(x) (x == SQL_LONGVARBINARY || x == SQL_LONGVARCHAR || x == SQL_WLONGVARCHAR)
|
||||
|
||||
#define PHP_ODBC_SQLCOLATTRIBUTE SQLColAttribute
|
||||
|
||||
#define PHP_ODBC_DESC_BASE_COLUMN_NAME SQL_DESC_BASE_COLUMN_NAME
|
||||
#else
|
||||
#define IS_SQL_LONG(x) (x == SQL_LONGVARBINARY || x == SQL_LONGVARCHAR)
|
||||
|
||||
#define PHP_ODBC_SQLCOLATTRIBUTE SQLColAttributes
|
||||
|
||||
#define PHP_ODBC_DESC_BASE_COLUMN_NAME SQL_COLUMN_NAME
|
||||
#endif
|
||||
#define IS_SQL_BINARY(x) (x == SQL_BINARY || x == SQL_VARBINARY || x == SQL_LONGVARBINARY)
|
||||
|
||||
|
@ -2,6 +2,11 @@
|
||||
odbc_exec(): Getting accurate unicode data from query
|
||||
--SKIPIF--
|
||||
<?php include 'skipif.inc'; ?>
|
||||
<?php
|
||||
if ("unixODBC" != ODBC_TYPE) {
|
||||
die("skip ODBC_TYPE != unixODBC");
|
||||
}
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
|
43
ext/odbc/tests/bug69354.phpt
Normal file
43
ext/odbc/tests/bug69354.phpt
Normal file
@ -0,0 +1,43 @@
|
||||
--TEST--
|
||||
Bug #69354 Incorrect use of SQLColAttributes with ODBC 3.0
|
||||
--SKIPIF--
|
||||
<?php include 'skipif.inc'; ?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
include 'config.inc';
|
||||
|
||||
$conn = odbc_connect($dsn, $user, $pass);
|
||||
|
||||
@odbc_exec($conn, 'CREATE DATABASE odbcTEST');
|
||||
|
||||
odbc_exec($conn, 'CREATE TABLE FOO (ID INT, VARCHAR_COL VARCHAR(100))');
|
||||
|
||||
odbc_exec($conn, "INSERT INTO FOO(ID, VARCHAR_COL) VALUES (1, '" . str_repeat("a", 100) . "')");
|
||||
|
||||
$res = odbc_exec($conn,"select VARCHAR_COL from FOO");
|
||||
if ($res) {
|
||||
if (odbc_fetch_row($res)) {
|
||||
$ret = odbc_result($res,'varchar_col');
|
||||
echo strlen($ret), "\n";
|
||||
echo $ret[0], "\n";
|
||||
echo $ret[strlen($ret)-1], "\n";
|
||||
}
|
||||
}
|
||||
?>
|
||||
==DONE==
|
||||
--EXPECT--
|
||||
100
|
||||
a
|
||||
a
|
||||
==DONE==
|
||||
--CLEAN--
|
||||
<?php
|
||||
include 'config.inc';
|
||||
|
||||
$conn = odbc_connect($dsn, $user, $pass);
|
||||
|
||||
odbc_exec($conn, 'DROP TABLE FOO');
|
||||
odbc_exec($conn, 'DROP DATABASE odbcTEST');
|
||||
|
||||
?>
|
@ -2,6 +2,11 @@
|
||||
odbc_exec(): Basic test
|
||||
--SKIPIF--
|
||||
<?php include 'skipif.inc'; ?>
|
||||
<?php
|
||||
if ("unixODBC" != ODBC_TYPE) {
|
||||
die("skip ODBC_TYPE != unixODBC");
|
||||
}
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
|
@ -11,7 +11,7 @@ $conn = odbc_connect($dsn, $user, $pass);
|
||||
|
||||
odbc_exec($conn, 'CREATE DATABASE odbcTEST');
|
||||
|
||||
odbc_exec($conn, 'CREATE TABLE FOO (TEST INT)');
|
||||
odbc_exec($conn, 'CREATE TABLE FOO (TEST INT NOT NULL)');
|
||||
odbc_exec($conn, 'ALTER TABLE FOO ADD PRIMARY KEY (TEST)');
|
||||
|
||||
odbc_exec($conn, 'INSERT INTO FOO VALUES (1)');
|
||||
|
Loading…
Reference in New Issue
Block a user