]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-7.4' into master
authorChristoph M. Becker <cmbecker69@gmx.de>
Thu, 24 Sep 2020 10:23:08 +0000 (12:23 +0200)
committerChristoph M. Becker <cmbecker69@gmx.de>
Thu, 24 Sep 2020 10:23:37 +0000 (12:23 +0200)
* PHP-7.4:
  Fix #78470: odbc_specialcolumns() no longer accepts $nullable

1  2 
ext/odbc/odbc.stub.php
ext/odbc/odbc_arginfo.h
ext/odbc/php_odbc.c

index 9316f1d7e41cea1966b078325d263f9ef0bbbc37,0000000000000000000000000000000000000000..36d8ad6dc70d6e8657c5dbbc9308c127760053c1
mode 100644,000000..100644
--- /dev/null
@@@ -1,197 -1,0 +1,197 @@@
- function odbc_specialcolumns($connection_id, int $type, ?string $qualifier, string $owner, string $table, int $scope) {}
 +<?php
 +
 +/** @generate-function-entries */
 +
 +function odbc_close_all(): void {}
 +
 +/** @param resource $result_id */
 +function odbc_binmode($result_id, int $mode): bool {}
 +
 +/** @param resource $result_id */
 +function odbc_longreadlen($result_id, int $length): bool {}
 +
 +/**
 + * @param resource $connection_id
 + * @return resource|false
 + */
 +function odbc_prepare($connection_id, string $query) {}
 +
 +/** @param resource $result_id */
 +function odbc_execute($result_id, array $parameters_array = UNKNOWN): bool {}
 +
 +/** @param resource $result_id */
 +function odbc_cursor($result_id): string|false {}
 +
 +#ifdef HAVE_SQLDATASOURCES
 +/** @param resource $connection_id */
 +function odbc_data_source($connection_id, int $fetch_type): array|false {}
 +#endif
 +
 +/**
 + * @param resource $connection_id
 + * @return resource|false
 + */
 +function odbc_exec($connection_id, string $query, int $flags = UNKNOWN) {}
 +
 +/**
 + * @param resource $connection_id
 + * @return resource|false
 + * @alias odbc_exec
 + */
 +function odbc_do($connection_id, string $query, int $flags = UNKNOWN) {}
 +
 +#ifdef PHP_ODBC_HAVE_FETCH_HASH
 +/** @param resource $result */
 +function odbc_fetch_object($result, int $rownumber = -1): stdClass|false {}
 +
 +/** @param resource $result */
 +function odbc_fetch_array($result, int $rownumber = -1): array|false {}
 +#endif
 +
 +/**
 + * @param resource $result_id
 + * @param array $result_array
 + */
 +function odbc_fetch_into($result_id, &$result_array, int $rownumber = 0): int|false {}
 +
 +/** @param resource $result_id */
 +function odbc_fetch_row($result_id, int $row_number = UNKNOWN): bool {}
 +
 +/** @param resource $result_id */
 +function odbc_result($result_id, string|int $field): string|bool|null {}
 +
 +/** @param resource $result_id */
 +function odbc_result_all($result_id, string $format = ""): int|false {}
 +
 +/** @param resource $result_id */
 +function odbc_free_result($result_id): bool {}
 +
 +/** @return resource|false */
 +function odbc_connect(string $dsn, string $user, string $password, int $cursor_option = SQL_CUR_USE_DRIVER) {}
 +
 +/** @return resource|false */
 +function odbc_pconnect(string $dsn, string $user, string $password, int $cursor_option = SQL_CUR_USE_DRIVER) {}
 +
 +/** @param resource $connection_id */
 +function odbc_close($connection_id): void {}
 +
 +/** @param resource $result_id */
 +function odbc_num_rows($result_id): int {}
 +
 +#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30)
 +/** @param resource $result_id */
 +function odbc_next_result($result_id): bool {}
 +#endif
 +
 +/** @param resource $result_id */
 +function odbc_num_fields($result_id): int {}
 +
 +/** @param resource $result_id */
 +function odbc_field_name($result_id, int $field_number): string|false {}
 +
 +/** @param resource $result_id */
 +function odbc_field_type($result_id, int $field_number): string|false {}
 +
 +/** @param resource $result_id */
 +function odbc_field_len($result_id, int $field_number): int|false {}
 +
 +/**
 + * @param resource $result_id
 + * @alias odbc_field_len
 + */
 +function odbc_field_precision($result_id, int $field_number): int|false {}
 +
 +/** @param resource $result_id */
 +function odbc_field_scale($result_id, int $field_number): int|false {}
 +
 +/** @param resource $result_id */
 +function odbc_field_num($result_id, string $field_name): int|false {}
 +
 +/** @param resource $connection_id */
 +function odbc_autocommit($connection_id, int $onoff = 0): int|bool {}
 +
 +/** @param resource $connection_id */
 +function odbc_commit($connection_id): bool {}
 +
 +/** @param resource $connection_id */
 +function odbc_rollback($connection_id): bool {}
 +
 +/** @param resource $connection_id */
 +function odbc_error($connection_id = UNKNOWN): string {}
 +
 +/** @param resource $connection_id */
 +function odbc_errormsg($connection_id = UNKNOWN): string {}
 +
 +/** @param resource $conn_id */
 +function odbc_setoption($conn_id, int $which, int $option, int $value): bool {}
 +
 +/**
 + * @param resource $connection_id
 + * @return resource|false
 + */
 +function odbc_tables($connection_id, ?string $qualfier = null, string $owner = UNKNOWN, string $name = UNKNOWN, string $table_types = UNKNOWN) {}
 +
 +/**
 + * @param resource $connection_id
 + * @return resource|false
 + */
 +function odbc_columns($connection_id, ?string $qualifier = null, string $owner = UNKNOWN, string $table_name = UNKNOWN, string $column_name = UNKNOWN) {}
 +
 +/**
 + * @param resource $connection_id
 + * @return resource|false
 + */
 +function odbc_gettypeinfo($connection_id, int $data_type = 0) {}
 +
 +/**
 + * @param resource $connection_id
 + * @return resource|false
 + */
 +function odbc_primarykeys($connection_id, ?string $qualifier, string $owner, string $table) {}
 +
 +#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35)
 +/**
 + * @param resource $connection_id
 + * @return resource|false
 + */
 +function odbc_procedurecolumns($connection_id, ?string $qualifier = null, string $owner = UNKNOWN, string $proc = UNKNOWN, string $column = UNKNOWN) {}
 +
 +/**
 + * @param resource $connection_id
 + * @return resource|false
 + */
 +function odbc_procedures($connection_id, ?string $qualifier = null, string $owner = UNKNOWN, string $name = UNKNOWN) {}
 +
 +/**
 + * @param resource $connection_id
 + * @return resource|false
 + */
 +function odbc_foreignkeys($connection_id, ?string $pk_qualifier, string $pk_owner, string $pk_table, string $fk_qualifier, string $fk_owner, string $fk_table) {}
 +#endif
 +
 +/**
 + * @see https://bugs.php.net/bug.php?id=78470
 + * @param resource $connection_id
 + * @return resource|false
 + */
++function odbc_specialcolumns($connection_id, int $type, ?string $qualifier, string $owner, string $table, int $scope, int $nullable) {}
 +
 +/**
 + * @param resource $connection_id
 + * @return resource|false
 + */
 +function odbc_statistics($connection_id, ?string $qualfier, string $owner, string $name, int $unique, int $accuracy) {}
 +
 +#if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) &&!defined(HAVE_SOLID_35)
 +/**
 + * @param resource $connection_id
 + * @return resource|false
 + */
 +function odbc_tableprivileges($connection_id, ?string $qualifier, string $owner, string $name) {}
 +
 +/**
 + * @param resource $connection_id
 + * @return resource|false
 + */
 +function odbc_columnprivileges($connection_id, ?string $catalog, string $schema, string $table, string $column) {}
 +#endif
index 7d42c63530a098a7b02062db713cf52cea7947d8,0000000000000000000000000000000000000000..738bd4488674de611a08e6e8bdbdd4481d02aa16
mode 100644,000000..100644
--- /dev/null
@@@ -1,380 -1,0 +1,381 @@@
-  * Stub hash: 57db79b23d127851f985d9b6280b113637384a68 */
 +/* This is a generated file, edit the .stub.php file instead.
- ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_specialcolumns, 0, 0, 6)
++ * Stub hash: b533372de4f1110216b2545121d7851022980650 */
 +
 +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_close_all, 0, 0, IS_VOID, 0)
 +ZEND_END_ARG_INFO()
 +
 +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_binmode, 0, 2, _IS_BOOL, 0)
 +      ZEND_ARG_INFO(0, result_id)
 +      ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0)
 +ZEND_END_ARG_INFO()
 +
 +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_longreadlen, 0, 2, _IS_BOOL, 0)
 +      ZEND_ARG_INFO(0, result_id)
 +      ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0)
 +ZEND_END_ARG_INFO()
 +
 +ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_prepare, 0, 0, 2)
 +      ZEND_ARG_INFO(0, connection_id)
 +      ZEND_ARG_TYPE_INFO(0, query, IS_STRING, 0)
 +ZEND_END_ARG_INFO()
 +
 +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_execute, 0, 1, _IS_BOOL, 0)
 +      ZEND_ARG_INFO(0, result_id)
 +      ZEND_ARG_TYPE_INFO(0, parameters_array, IS_ARRAY, 0)
 +ZEND_END_ARG_INFO()
 +
 +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_odbc_cursor, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
 +      ZEND_ARG_INFO(0, result_id)
 +ZEND_END_ARG_INFO()
 +
 +#if defined(HAVE_SQLDATASOURCES)
 +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_odbc_data_source, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE)
 +      ZEND_ARG_INFO(0, connection_id)
 +      ZEND_ARG_TYPE_INFO(0, fetch_type, IS_LONG, 0)
 +ZEND_END_ARG_INFO()
 +#endif
 +
 +ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_exec, 0, 0, 2)
 +      ZEND_ARG_INFO(0, connection_id)
 +      ZEND_ARG_TYPE_INFO(0, query, IS_STRING, 0)
 +      ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0)
 +ZEND_END_ARG_INFO()
 +
 +#define arginfo_odbc_do arginfo_odbc_exec
 +
 +#if defined(PHP_ODBC_HAVE_FETCH_HASH)
 +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_fetch_object, 0, 1, stdClass, MAY_BE_FALSE)
 +      ZEND_ARG_INFO(0, result)
 +      ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, rownumber, IS_LONG, 0, "-1")
 +ZEND_END_ARG_INFO()
 +#endif
 +
 +#if defined(PHP_ODBC_HAVE_FETCH_HASH)
 +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_odbc_fetch_array, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
 +      ZEND_ARG_INFO(0, result)
 +      ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, rownumber, IS_LONG, 0, "-1")
 +ZEND_END_ARG_INFO()
 +#endif
 +
 +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_odbc_fetch_into, 0, 2, MAY_BE_LONG|MAY_BE_FALSE)
 +      ZEND_ARG_INFO(0, result_id)
 +      ZEND_ARG_INFO(1, result_array)
 +      ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, rownumber, IS_LONG, 0, "0")
 +ZEND_END_ARG_INFO()
 +
 +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_fetch_row, 0, 1, _IS_BOOL, 0)
 +      ZEND_ARG_INFO(0, result_id)
 +      ZEND_ARG_TYPE_INFO(0, row_number, IS_LONG, 0)
 +ZEND_END_ARG_INFO()
 +
 +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_odbc_result, 0, 2, MAY_BE_STRING|MAY_BE_BOOL|MAY_BE_NULL)
 +      ZEND_ARG_INFO(0, result_id)
 +      ZEND_ARG_TYPE_MASK(0, field, MAY_BE_STRING|MAY_BE_LONG, NULL)
 +ZEND_END_ARG_INFO()
 +
 +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_odbc_result_all, 0, 1, MAY_BE_LONG|MAY_BE_FALSE)
 +      ZEND_ARG_INFO(0, result_id)
 +      ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, format, IS_STRING, 0, "\"\"")
 +ZEND_END_ARG_INFO()
 +
 +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_free_result, 0, 1, _IS_BOOL, 0)
 +      ZEND_ARG_INFO(0, result_id)
 +ZEND_END_ARG_INFO()
 +
 +ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_connect, 0, 0, 3)
 +      ZEND_ARG_TYPE_INFO(0, dsn, IS_STRING, 0)
 +      ZEND_ARG_TYPE_INFO(0, user, IS_STRING, 0)
 +      ZEND_ARG_TYPE_INFO(0, password, IS_STRING, 0)
 +      ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, cursor_option, IS_LONG, 0, "SQL_CUR_USE_DRIVER")
 +ZEND_END_ARG_INFO()
 +
 +#define arginfo_odbc_pconnect arginfo_odbc_connect
 +
 +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_close, 0, 1, IS_VOID, 0)
 +      ZEND_ARG_INFO(0, connection_id)
 +ZEND_END_ARG_INFO()
 +
 +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_num_rows, 0, 1, IS_LONG, 0)
 +      ZEND_ARG_INFO(0, result_id)
 +ZEND_END_ARG_INFO()
 +
 +#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30)
 +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_next_result, 0, 1, _IS_BOOL, 0)
 +      ZEND_ARG_INFO(0, result_id)
 +ZEND_END_ARG_INFO()
 +#endif
 +
 +#define arginfo_odbc_num_fields arginfo_odbc_num_rows
 +
 +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_odbc_field_name, 0, 2, MAY_BE_STRING|MAY_BE_FALSE)
 +      ZEND_ARG_INFO(0, result_id)
 +      ZEND_ARG_TYPE_INFO(0, field_number, IS_LONG, 0)
 +ZEND_END_ARG_INFO()
 +
 +#define arginfo_odbc_field_type arginfo_odbc_field_name
 +
 +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_odbc_field_len, 0, 2, MAY_BE_LONG|MAY_BE_FALSE)
 +      ZEND_ARG_INFO(0, result_id)
 +      ZEND_ARG_TYPE_INFO(0, field_number, IS_LONG, 0)
 +ZEND_END_ARG_INFO()
 +
 +#define arginfo_odbc_field_precision arginfo_odbc_field_len
 +
 +#define arginfo_odbc_field_scale arginfo_odbc_field_len
 +
 +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_odbc_field_num, 0, 2, MAY_BE_LONG|MAY_BE_FALSE)
 +      ZEND_ARG_INFO(0, result_id)
 +      ZEND_ARG_TYPE_INFO(0, field_name, IS_STRING, 0)
 +ZEND_END_ARG_INFO()
 +
 +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_odbc_autocommit, 0, 1, MAY_BE_LONG|MAY_BE_BOOL)
 +      ZEND_ARG_INFO(0, connection_id)
 +      ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, onoff, IS_LONG, 0, "0")
 +ZEND_END_ARG_INFO()
 +
 +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_commit, 0, 1, _IS_BOOL, 0)
 +      ZEND_ARG_INFO(0, connection_id)
 +ZEND_END_ARG_INFO()
 +
 +#define arginfo_odbc_rollback arginfo_odbc_commit
 +
 +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_error, 0, 0, IS_STRING, 0)
 +      ZEND_ARG_INFO(0, connection_id)
 +ZEND_END_ARG_INFO()
 +
 +#define arginfo_odbc_errormsg arginfo_odbc_error
 +
 +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_setoption, 0, 4, _IS_BOOL, 0)
 +      ZEND_ARG_INFO(0, conn_id)
 +      ZEND_ARG_TYPE_INFO(0, which, IS_LONG, 0)
 +      ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0)
 +      ZEND_ARG_TYPE_INFO(0, value, IS_LONG, 0)
 +ZEND_END_ARG_INFO()
 +
 +ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_tables, 0, 0, 1)
 +      ZEND_ARG_INFO(0, connection_id)
 +      ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, qualfier, IS_STRING, 1, "null")
 +      ZEND_ARG_TYPE_INFO(0, owner, IS_STRING, 0)
 +      ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
 +      ZEND_ARG_TYPE_INFO(0, table_types, IS_STRING, 0)
 +ZEND_END_ARG_INFO()
 +
 +ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_columns, 0, 0, 1)
 +      ZEND_ARG_INFO(0, connection_id)
 +      ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, qualifier, IS_STRING, 1, "null")
 +      ZEND_ARG_TYPE_INFO(0, owner, IS_STRING, 0)
 +      ZEND_ARG_TYPE_INFO(0, table_name, IS_STRING, 0)
 +      ZEND_ARG_TYPE_INFO(0, column_name, IS_STRING, 0)
 +ZEND_END_ARG_INFO()
 +
 +ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_gettypeinfo, 0, 0, 1)
 +      ZEND_ARG_INFO(0, connection_id)
 +      ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, data_type, IS_LONG, 0, "0")
 +ZEND_END_ARG_INFO()
 +
 +ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_primarykeys, 0, 0, 4)
 +      ZEND_ARG_INFO(0, connection_id)
 +      ZEND_ARG_TYPE_INFO(0, qualifier, IS_STRING, 1)
 +      ZEND_ARG_TYPE_INFO(0, owner, IS_STRING, 0)
 +      ZEND_ARG_TYPE_INFO(0, table, IS_STRING, 0)
 +ZEND_END_ARG_INFO()
 +
 +#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35)
 +ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_procedurecolumns, 0, 0, 1)
 +      ZEND_ARG_INFO(0, connection_id)
 +      ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, qualifier, IS_STRING, 1, "null")
 +      ZEND_ARG_TYPE_INFO(0, owner, IS_STRING, 0)
 +      ZEND_ARG_TYPE_INFO(0, proc, IS_STRING, 0)
 +      ZEND_ARG_TYPE_INFO(0, column, IS_STRING, 0)
 +ZEND_END_ARG_INFO()
 +#endif
 +
 +#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35)
 +ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_procedures, 0, 0, 1)
 +      ZEND_ARG_INFO(0, connection_id)
 +      ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, qualifier, IS_STRING, 1, "null")
 +      ZEND_ARG_TYPE_INFO(0, owner, IS_STRING, 0)
 +      ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
 +ZEND_END_ARG_INFO()
 +#endif
 +
 +#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35)
 +ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_foreignkeys, 0, 0, 7)
 +      ZEND_ARG_INFO(0, connection_id)
 +      ZEND_ARG_TYPE_INFO(0, pk_qualifier, IS_STRING, 1)
 +      ZEND_ARG_TYPE_INFO(0, pk_owner, IS_STRING, 0)
 +      ZEND_ARG_TYPE_INFO(0, pk_table, IS_STRING, 0)
 +      ZEND_ARG_TYPE_INFO(0, fk_qualifier, IS_STRING, 0)
 +      ZEND_ARG_TYPE_INFO(0, fk_owner, IS_STRING, 0)
 +      ZEND_ARG_TYPE_INFO(0, fk_table, IS_STRING, 0)
 +ZEND_END_ARG_INFO()
 +#endif
 +
++ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_specialcolumns, 0, 0, 7)
 +      ZEND_ARG_INFO(0, connection_id)
 +      ZEND_ARG_TYPE_INFO(0, type, IS_LONG, 0)
 +      ZEND_ARG_TYPE_INFO(0, qualifier, IS_STRING, 1)
 +      ZEND_ARG_TYPE_INFO(0, owner, IS_STRING, 0)
 +      ZEND_ARG_TYPE_INFO(0, table, IS_STRING, 0)
 +      ZEND_ARG_TYPE_INFO(0, scope, IS_LONG, 0)
++      ZEND_ARG_TYPE_INFO(0, nullable, IS_LONG, 0)
 +ZEND_END_ARG_INFO()
 +
 +ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_statistics, 0, 0, 6)
 +      ZEND_ARG_INFO(0, connection_id)
 +      ZEND_ARG_TYPE_INFO(0, qualfier, IS_STRING, 1)
 +      ZEND_ARG_TYPE_INFO(0, owner, IS_STRING, 0)
 +      ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
 +      ZEND_ARG_TYPE_INFO(0, unique, IS_LONG, 0)
 +      ZEND_ARG_TYPE_INFO(0, accuracy, IS_LONG, 0)
 +ZEND_END_ARG_INFO()
 +
 +#if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) &&!defined(HAVE_SOLID_35)
 +ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_tableprivileges, 0, 0, 4)
 +      ZEND_ARG_INFO(0, connection_id)
 +      ZEND_ARG_TYPE_INFO(0, qualifier, IS_STRING, 1)
 +      ZEND_ARG_TYPE_INFO(0, owner, IS_STRING, 0)
 +      ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
 +ZEND_END_ARG_INFO()
 +#endif
 +
 +#if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) &&!defined(HAVE_SOLID_35)
 +ZEND_BEGIN_ARG_INFO_EX(arginfo_odbc_columnprivileges, 0, 0, 5)
 +      ZEND_ARG_INFO(0, connection_id)
 +      ZEND_ARG_TYPE_INFO(0, catalog, IS_STRING, 1)
 +      ZEND_ARG_TYPE_INFO(0, schema, IS_STRING, 0)
 +      ZEND_ARG_TYPE_INFO(0, table, IS_STRING, 0)
 +      ZEND_ARG_TYPE_INFO(0, column, IS_STRING, 0)
 +ZEND_END_ARG_INFO()
 +#endif
 +
 +
 +ZEND_FUNCTION(odbc_close_all);
 +ZEND_FUNCTION(odbc_binmode);
 +ZEND_FUNCTION(odbc_longreadlen);
 +ZEND_FUNCTION(odbc_prepare);
 +ZEND_FUNCTION(odbc_execute);
 +ZEND_FUNCTION(odbc_cursor);
 +#if defined(HAVE_SQLDATASOURCES)
 +ZEND_FUNCTION(odbc_data_source);
 +#endif
 +ZEND_FUNCTION(odbc_exec);
 +#if defined(PHP_ODBC_HAVE_FETCH_HASH)
 +ZEND_FUNCTION(odbc_fetch_object);
 +#endif
 +#if defined(PHP_ODBC_HAVE_FETCH_HASH)
 +ZEND_FUNCTION(odbc_fetch_array);
 +#endif
 +ZEND_FUNCTION(odbc_fetch_into);
 +ZEND_FUNCTION(odbc_fetch_row);
 +ZEND_FUNCTION(odbc_result);
 +ZEND_FUNCTION(odbc_result_all);
 +ZEND_FUNCTION(odbc_free_result);
 +ZEND_FUNCTION(odbc_connect);
 +ZEND_FUNCTION(odbc_pconnect);
 +ZEND_FUNCTION(odbc_close);
 +ZEND_FUNCTION(odbc_num_rows);
 +#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30)
 +ZEND_FUNCTION(odbc_next_result);
 +#endif
 +ZEND_FUNCTION(odbc_num_fields);
 +ZEND_FUNCTION(odbc_field_name);
 +ZEND_FUNCTION(odbc_field_type);
 +ZEND_FUNCTION(odbc_field_len);
 +ZEND_FUNCTION(odbc_field_scale);
 +ZEND_FUNCTION(odbc_field_num);
 +ZEND_FUNCTION(odbc_autocommit);
 +ZEND_FUNCTION(odbc_commit);
 +ZEND_FUNCTION(odbc_rollback);
 +ZEND_FUNCTION(odbc_error);
 +ZEND_FUNCTION(odbc_errormsg);
 +ZEND_FUNCTION(odbc_setoption);
 +ZEND_FUNCTION(odbc_tables);
 +ZEND_FUNCTION(odbc_columns);
 +ZEND_FUNCTION(odbc_gettypeinfo);
 +ZEND_FUNCTION(odbc_primarykeys);
 +#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35)
 +ZEND_FUNCTION(odbc_procedurecolumns);
 +#endif
 +#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35)
 +ZEND_FUNCTION(odbc_procedures);
 +#endif
 +#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35)
 +ZEND_FUNCTION(odbc_foreignkeys);
 +#endif
 +ZEND_FUNCTION(odbc_specialcolumns);
 +ZEND_FUNCTION(odbc_statistics);
 +#if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) &&!defined(HAVE_SOLID_35)
 +ZEND_FUNCTION(odbc_tableprivileges);
 +#endif
 +#if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) &&!defined(HAVE_SOLID_35)
 +ZEND_FUNCTION(odbc_columnprivileges);
 +#endif
 +
 +
 +static const zend_function_entry ext_functions[] = {
 +      ZEND_FE(odbc_close_all, arginfo_odbc_close_all)
 +      ZEND_FE(odbc_binmode, arginfo_odbc_binmode)
 +      ZEND_FE(odbc_longreadlen, arginfo_odbc_longreadlen)
 +      ZEND_FE(odbc_prepare, arginfo_odbc_prepare)
 +      ZEND_FE(odbc_execute, arginfo_odbc_execute)
 +      ZEND_FE(odbc_cursor, arginfo_odbc_cursor)
 +#if defined(HAVE_SQLDATASOURCES)
 +      ZEND_FE(odbc_data_source, arginfo_odbc_data_source)
 +#endif
 +      ZEND_FE(odbc_exec, arginfo_odbc_exec)
 +      ZEND_FALIAS(odbc_do, odbc_exec, arginfo_odbc_do)
 +#if defined(PHP_ODBC_HAVE_FETCH_HASH)
 +      ZEND_FE(odbc_fetch_object, arginfo_odbc_fetch_object)
 +#endif
 +#if defined(PHP_ODBC_HAVE_FETCH_HASH)
 +      ZEND_FE(odbc_fetch_array, arginfo_odbc_fetch_array)
 +#endif
 +      ZEND_FE(odbc_fetch_into, arginfo_odbc_fetch_into)
 +      ZEND_FE(odbc_fetch_row, arginfo_odbc_fetch_row)
 +      ZEND_FE(odbc_result, arginfo_odbc_result)
 +      ZEND_FE(odbc_result_all, arginfo_odbc_result_all)
 +      ZEND_FE(odbc_free_result, arginfo_odbc_free_result)
 +      ZEND_FE(odbc_connect, arginfo_odbc_connect)
 +      ZEND_FE(odbc_pconnect, arginfo_odbc_pconnect)
 +      ZEND_FE(odbc_close, arginfo_odbc_close)
 +      ZEND_FE(odbc_num_rows, arginfo_odbc_num_rows)
 +#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30)
 +      ZEND_FE(odbc_next_result, arginfo_odbc_next_result)
 +#endif
 +      ZEND_FE(odbc_num_fields, arginfo_odbc_num_fields)
 +      ZEND_FE(odbc_field_name, arginfo_odbc_field_name)
 +      ZEND_FE(odbc_field_type, arginfo_odbc_field_type)
 +      ZEND_FE(odbc_field_len, arginfo_odbc_field_len)
 +      ZEND_FALIAS(odbc_field_precision, odbc_field_len, arginfo_odbc_field_precision)
 +      ZEND_FE(odbc_field_scale, arginfo_odbc_field_scale)
 +      ZEND_FE(odbc_field_num, arginfo_odbc_field_num)
 +      ZEND_FE(odbc_autocommit, arginfo_odbc_autocommit)
 +      ZEND_FE(odbc_commit, arginfo_odbc_commit)
 +      ZEND_FE(odbc_rollback, arginfo_odbc_rollback)
 +      ZEND_FE(odbc_error, arginfo_odbc_error)
 +      ZEND_FE(odbc_errormsg, arginfo_odbc_errormsg)
 +      ZEND_FE(odbc_setoption, arginfo_odbc_setoption)
 +      ZEND_FE(odbc_tables, arginfo_odbc_tables)
 +      ZEND_FE(odbc_columns, arginfo_odbc_columns)
 +      ZEND_FE(odbc_gettypeinfo, arginfo_odbc_gettypeinfo)
 +      ZEND_FE(odbc_primarykeys, arginfo_odbc_primarykeys)
 +#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35)
 +      ZEND_FE(odbc_procedurecolumns, arginfo_odbc_procedurecolumns)
 +#endif
 +#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35)
 +      ZEND_FE(odbc_procedures, arginfo_odbc_procedures)
 +#endif
 +#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35)
 +      ZEND_FE(odbc_foreignkeys, arginfo_odbc_foreignkeys)
 +#endif
 +      ZEND_FE(odbc_specialcolumns, arginfo_odbc_specialcolumns)
 +      ZEND_FE(odbc_statistics, arginfo_odbc_statistics)
 +#if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) &&!defined(HAVE_SOLID_35)
 +      ZEND_FE(odbc_tableprivileges, arginfo_odbc_tableprivileges)
 +#endif
 +#if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) &&!defined(HAVE_SOLID_35)
 +      ZEND_FE(odbc_columnprivileges, arginfo_odbc_columnprivileges)
 +#endif
 +      ZEND_FE_END
 +};
index 6636a810433d72632fbf0a692169ae622f753327,d8cbe65c583d6fec32a039daa44cf8db4ccbc43c..0cfa52be4405842083ce910963f4011656909754
@@@ -3298,9 -3667,9 +3298,9 @@@ PHP_FUNCTION(odbc_specialcolumns
        SQLUSMALLINT type, scope, nullable;
        RETCODE rc;
  
-       if (zend_parse_parameters(ZEND_NUM_ARGS(), "rls!ssl", &pv_conn, &vtype, &cat, &cat_len, &schema, &schema_len,
+       if (zend_parse_parameters(ZEND_NUM_ARGS(), "rls!ssll", &pv_conn, &vtype, &cat, &cat_len, &schema, &schema_len,
                &name, &name_len, &vscope, &vnullable) == FAILURE) {
 -              return;
 +              RETURN_THROWS();
        }
  
        type = (SQLUSMALLINT) vtype;