From 14aed3f3f60484a23f6d8dcb39dfe781349ad8b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Sat, 27 Apr 2024 22:20:16 +0200 Subject: [PATCH] Fix one more address round and rename namespace to Odbc --- UPGRADING | 6 + ext/odbc/odbc.stub.php | 122 +++++------ ext/odbc/odbc_arginfo.h | 102 +++++----- ext/odbc/php_odbc.c | 190 ++++++++---------- ext/odbc/tests/bug78470.phpt | 2 +- ext/odbc/tests/bug78473.phpt | 2 +- ext/odbc/tests/odbc_close_001.phpt | 8 +- ext/odbc/tests/odbc_close_all_001.phpt | 8 +- ext/odbc/tests/odbc_columnprivileges_001.phpt | 6 +- ext/odbc/tests/odbc_free_result_001.phpt | 2 +- ext/odbc/tests/odbc_tables_001.phpt | 8 +- 11 files changed, 224 insertions(+), 232 deletions(-) diff --git a/UPGRADING b/UPGRADING index ad6e5b839a8a0..ab71c4d7db576 100644 --- a/UPGRADING +++ b/UPGRADING @@ -67,6 +67,12 @@ PHP 8.4 UPGRADE NOTES - ODBC: . odbc_fetch_row() returns false when a value less than or equal to 0 is passed for parameter $row. Now, a warning is emitted in this case. + . odbc_connect() and odbc_pconnect() will now return an Odbc\Connection + object rather than a resource. Return value checks using is_resource() + should be replaced with checks for `false`. + . odbc_prepare(), odbc_exec(), and various other functions will now return + an Odbc\Result object rather than a resource. Return value checks using + is_resource() should be replaced with checks for `false`. - Opcache: . The JIT config defaults changed from opcache.jit=tracing and diff --git a/ext/odbc/odbc.stub.php b/ext/odbc/odbc.stub.php index f5ccb1c63d3f7..8e7a43d059dfc 100644 --- a/ext/odbc/odbc.stub.php +++ b/ext/odbc/odbc.stub.php @@ -2,7 +2,7 @@ /** @generate-class-entries */ -namespace ODBC { +namespace Odbc { /** * @strict-properties * @not-serializable @@ -234,7 +234,7 @@ class Result */ const SQL_TIMESTAMP = UNKNOWN; - #if (defined(ODBCVER) && (ODBCVER >= 0x0300)) +#if (defined(ODBCVER) && (ODBCVER >= 0x0300)) /** * @var int * @cvalue SQL_TYPE_DATE @@ -327,116 +327,116 @@ class Result */ const SQL_QUICK = UNKNOWN; - #endif +#endif function odbc_close_all(): void {} - function odbc_binmode(ODBC\Result $statement, int $mode): true {} + function odbc_binmode(Odbc\Result $statement, int $mode): true {} - function odbc_longreadlen(ODBC\Result $statement, int $length): true {} + function odbc_longreadlen(Odbc\Result $statement, int $length): true {} - function odbc_prepare(ODBC\Connection $odbc, string $query): ODBC\Result|false {} + function odbc_prepare(Odbc\Connection $odbc, string $query): Odbc\Result|false {} - function odbc_execute(ODBC\Result $statement, array $params = []): bool {} + function odbc_execute(Odbc\Result $statement, array $params = []): bool {} - function odbc_cursor(ODBC\Result $statement): string|false {} + function odbc_cursor(Odbc\Result $statement): string|false {} - #ifdef HAVE_SQLDATASOURCES - function odbc_data_source(ODBC\Connection $odbc, int $fetch_type): array|null|false {} - #endif +#ifdef HAVE_SQLDATASOURCES + function odbc_data_source(Odbc\Connection $odbc, int $fetch_type): array|null|false {} +#endif - function odbc_exec(ODBC\Connection $odbc, string $query): ODBC\Result|false {} + function odbc_exec(Odbc\Connection $odbc, string $query): Odbc\Result|false {} /** @alias odbc_exec */ - function odbc_do(ODBC\Connection $odbc, string $query): ODBC\Result|false {} + function odbc_do(Odbc\Connection $odbc, string $query): Odbc\Result|false {} #ifdef PHP_ODBC_HAVE_FETCH_HASH -/** @param resource $statement */ -function odbc_fetch_object($statement, ?int $row = null): stdClass|false {} + /** @param resource $statement */ + function odbc_fetch_object($statement, ?int $row = null): stdClass|false {} -/** @param resource $statement */ -function odbc_fetch_array($statement, ?int $row = null): array|false {} + /** @param resource $statement */ + function odbc_fetch_array($statement, ?int $row = null): array|false {} #endif -/** - * @param resource $statement - * @param array $array - */ -function odbc_fetch_into($statement, &$array, ?int $row = null): int|false {} + /** + * @param resource $statement + * @param array $array + */ + function odbc_fetch_into($statement, &$array, ?int $row = null): int|false {} - function odbc_fetch_row(ODBC\Result $statement, ?int $row = null): bool {} + function odbc_fetch_row(Odbc\Result $statement, ?int $row = null): bool {} - function odbc_result(ODBC\Result $statement, string|int $field): string|bool|null {} + function odbc_result(Odbc\Result $statement, string|int $field): string|bool|null {} /** @deprecated */ - function odbc_result_all(ODBC\Result $statement, string $format = ""): int|false {} + function odbc_result_all(Odbc\Result $statement, string $format = ""): int|false {} - function odbc_free_result(ODBC\Result $statement): true {} + function odbc_free_result(Odbc\Result $statement): true {} - function odbc_connect(string $dsn, ?string $user = null, #[\SensitiveParameter] ?string $password = null, int $cursor_option = SQL_CUR_USE_DRIVER): ODBC\Connection|false {} + function odbc_connect(string $dsn, ?string $user = null, #[\SensitiveParameter] ?string $password = null, int $cursor_option = SQL_CUR_USE_DRIVER): Odbc\Connection|false {} - function odbc_pconnect(string $dsn, ?string $user = null, #[\SensitiveParameter] ?string $password = null, int $cursor_option = SQL_CUR_USE_DRIVER): ODBC\Connection|false {} + function odbc_pconnect(string $dsn, ?string $user = null, #[\SensitiveParameter] ?string $password = null, int $cursor_option = SQL_CUR_USE_DRIVER): Odbc\Connection|false {} - function odbc_close(ODBC\Connection $odbc): void {} + function odbc_close(Odbc\Connection $odbc): void {} - function odbc_num_rows(ODBC\Result $statement): int {} + function odbc_num_rows(Odbc\Result $statement): int {} - #if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) - function odbc_next_result(ODBC\Result $statement): bool {} - #endif +#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) + function odbc_next_result(Odbc\Result $statement): bool {} +#endif - function odbc_num_fields(ODBC\Result $statement): int {} + function odbc_num_fields(Odbc\Result $statement): int {} - function odbc_field_name(ODBC\Result $statement, int $field): string|false {} + function odbc_field_name(Odbc\Result $statement, int $field): string|false {} - function odbc_field_type(ODBC\Result $statement, int $field): string|false {} + function odbc_field_type(Odbc\Result $statement, int $field): string|false {} - function odbc_field_len(ODBC\Result $statement, int $field): int|false {} + function odbc_field_len(Odbc\Result $statement, int $field): int|false {} /** @alias odbc_field_len */ - function odbc_field_precision(ODBC\Result $statement, int $field): int|false {} + function odbc_field_precision(Odbc\Result $statement, int $field): int|false {} - function odbc_field_scale(ODBC\Result $statement, int $field): int|false {} + function odbc_field_scale(Odbc\Result $statement, int $field): int|false {} - function odbc_field_num(ODBC\Result $statement, string $field): int|false {} + function odbc_field_num(Odbc\Result $statement, string $field): int|false {} - function odbc_autocommit(ODBC\Connection $odbc, ?bool $enable = null): int|bool {} + function odbc_autocommit(Odbc\Connection $odbc, ?bool $enable = null): int|bool {} - function odbc_commit(ODBC\Connection $odbc): bool {} + function odbc_commit(Odbc\Connection $odbc): bool {} - function odbc_rollback(ODBC\Connection $odbc): bool {} + function odbc_rollback(Odbc\Connection $odbc): bool {} - function odbc_error(?ODBC\Connection $odbc = null): string {} + function odbc_error(?Odbc\Connection $odbc = null): string {} - function odbc_errormsg(?ODBC\Connection $odbc = null): string {} + function odbc_errormsg(?Odbc\Connection $odbc = null): string {} - function odbc_setoption(ODBC\Connection|ODBC\Result $odbc, int $which, int $option, int $value): bool {} + function odbc_setoption(Odbc\Connection|Odbc\Result $odbc, int $which, int $option, int $value): bool {} - function odbc_tables(ODBC\Connection $odbc, ?string $catalog = null, ?string $schema = null, ?string $table = null, ?string $types = null): ODBC\Result|false {} + function odbc_tables(Odbc\Connection $odbc, ?string $catalog = null, ?string $schema = null, ?string $table = null, ?string $types = null): Odbc\Result|false {} - function odbc_columns(ODBC\Connection $odbc, ?string $catalog = null, ?string $schema = null, ?string $table = null, ?string $column = null): ODBC\Result|false {} + function odbc_columns(Odbc\Connection $odbc, ?string $catalog = null, ?string $schema = null, ?string $table = null, ?string $column = null): Odbc\Result|false {} - function odbc_gettypeinfo(ODBC\Connection $odbc, int $data_type = 0): ODBC\Result|false {} + function odbc_gettypeinfo(Odbc\Connection $odbc, int $data_type = 0): Odbc\Result|false {} - function odbc_primarykeys(ODBC\Connection $odbc, ?string $catalog, string $schema, string $table): ODBC\Result|false {} + function odbc_primarykeys(Odbc\Connection $odbc, ?string $catalog, string $schema, string $table): Odbc\Result|false {} - #if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35) - function odbc_procedurecolumns(ODBC\Connection $odbc, ?string $catalog = null, ?string $schema = null, ?string $procedure = null, ?string $column = null): ODBC\Result|false {} +#if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35) + function odbc_procedurecolumns(Odbc\Connection $odbc, ?string $catalog = null, ?string $schema = null, ?string $procedure = null, ?string $column = null): Odbc\Result|false {} - function odbc_procedures(ODBC\Connection $odbc, ?string $catalog = null, ?string $schema = null, ?string $procedure = null): ODBC\Result|false {} + function odbc_procedures(Odbc\Connection $odbc, ?string $catalog = null, ?string $schema = null, ?string $procedure = null): Odbc\Result|false {} - function odbc_foreignkeys(ODBC\Connection $odbc, ?string $pk_catalog, string $pk_schema, string $pk_table, string $fk_catalog, string $fk_schema, string $fk_table): ODBC\Result|false {} - #endif + function odbc_foreignkeys(Odbc\Connection $odbc, ?string $pk_catalog, string $pk_schema, string $pk_table, string $fk_catalog, string $fk_schema, string $fk_table): Odbc\Result|false {} +#endif - function odbc_specialcolumns(ODBC\Connection $odbc, int $type, ?string $catalog, string $schema, string $table, int $scope, int $nullable): ODBC\Result|false {} + function odbc_specialcolumns(Odbc\Connection $odbc, int $type, ?string $catalog, string $schema, string $table, int $scope, int $nullable): Odbc\Result|false {} - function odbc_statistics(ODBC\Connection $odbc, ?string $catalog, string $schema, string $table, int $unique, int $accuracy): ODBC\Result|false {} + function odbc_statistics(Odbc\Connection $odbc, ?string $catalog, string $schema, string $table, int $unique, int $accuracy): Odbc\Result|false {} - #if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) &&!defined(HAVE_SOLID_35) - function odbc_tableprivileges(ODBC\Connection $odbc, ?string $catalog, string $schema, string $table): ODBC\Result|false {} +#if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) &&!defined(HAVE_SOLID_35) + function odbc_tableprivileges(Odbc\Connection $odbc, ?string $catalog, string $schema, string $table): Odbc\Result|false {} - function odbc_columnprivileges(ODBC\Connection $odbc, ?string $catalog, string $schema, string $table, string $column): ODBC\Result|false {} - #endif + function odbc_columnprivileges(Odbc\Connection $odbc, ?string $catalog, string $schema, string $table, string $column): Odbc\Result|false {} +#endif /* odbc_utils.c */ diff --git a/ext/odbc/odbc_arginfo.h b/ext/odbc/odbc_arginfo.h index 451db23d7a0ab..c647fc96d3ebc 100644 --- a/ext/odbc/odbc_arginfo.h +++ b/ext/odbc/odbc_arginfo.h @@ -1,36 +1,36 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: c0d3607a59dba96e10fe27c061cf7d7da11dda2c */ + * Stub hash: 8c92ecc87f0b767f07d59bf32ec17ae55037aa44 */ 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_TRUE, 0) - ZEND_ARG_OBJ_INFO(0, statement, ODBC\\Result, 0) + ZEND_ARG_OBJ_INFO(0, statement, Odbc\\Result, 0) 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_TRUE, 0) - ZEND_ARG_OBJ_INFO(0, statement, ODBC\\Result, 0) + ZEND_ARG_OBJ_INFO(0, statement, Odbc\\Result, 0) ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_prepare, 0, 2, ODBC\\Result, MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, odbc, ODBC\\Connection, 0) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_prepare, 0, 2, Odbc\\Result, MAY_BE_FALSE) + ZEND_ARG_OBJ_INFO(0, odbc, Odbc\\Connection, 0) 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_OBJ_INFO(0, statement, ODBC\\Result, 0) + ZEND_ARG_OBJ_INFO(0, statement, Odbc\\Result, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, params, 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_OBJ_INFO(0, statement, ODBC\\Result, 0) + ZEND_ARG_OBJ_INFO(0, statement, Odbc\\Result, 0) 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_NULL|MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, odbc, ODBC\\Connection, 0) + ZEND_ARG_OBJ_INFO(0, odbc, Odbc\\Connection, 0) ZEND_ARG_TYPE_INFO(0, fetch_type, IS_LONG, 0) ZEND_END_ARG_INFO() #endif @@ -60,25 +60,25 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_odbc_fetch_into, 0, 2, MAY_BE_LO ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_fetch_row, 0, 1, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, statement, ODBC\\Result, 0) + ZEND_ARG_OBJ_INFO(0, statement, Odbc\\Result, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, row, IS_LONG, 1, "null") 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_OBJ_INFO(0, statement, ODBC\\Result, 0) + ZEND_ARG_OBJ_INFO(0, statement, Odbc\\Result, 0) 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_OBJ_INFO(0, statement, ODBC\\Result, 0) + ZEND_ARG_OBJ_INFO(0, statement, Odbc\\Result, 0) 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_TRUE, 0) - ZEND_ARG_OBJ_INFO(0, statement, ODBC\\Result, 0) + ZEND_ARG_OBJ_INFO(0, statement, Odbc\\Result, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_connect, 0, 1, ODBC\\Connection, MAY_BE_FALSE) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_connect, 0, 1, Odbc\\Connection, MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, dsn, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, user, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, password, IS_STRING, 1, "null") @@ -88,30 +88,30 @@ 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_OBJ_INFO(0, odbc, ODBC\\Connection, 0) + ZEND_ARG_OBJ_INFO(0, odbc, Odbc\\Connection, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_num_rows, 0, 1, IS_LONG, 0) - ZEND_ARG_OBJ_INFO(0, statement, ODBC\\Result, 0) + ZEND_ARG_OBJ_INFO(0, statement, Odbc\\Result, 0) 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_OBJ_INFO(0, statement, ODBC\\Result, 0) + ZEND_ARG_OBJ_INFO(0, statement, Odbc\\Result, 0) 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_OBJ_INFO(0, statement, ODBC\\Result, 0) + ZEND_ARG_OBJ_INFO(0, statement, Odbc\\Result, 0) ZEND_ARG_TYPE_INFO(0, field, 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_OBJ_INFO(0, statement, ODBC\\Result, 0) + ZEND_ARG_OBJ_INFO(0, statement, Odbc\\Result, 0) ZEND_ARG_TYPE_INFO(0, field, IS_LONG, 0) ZEND_END_ARG_INFO() @@ -120,65 +120,65 @@ ZEND_END_ARG_INFO() #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_OBJ_INFO(0, statement, ODBC\\Result, 0) + ZEND_ARG_OBJ_INFO(0, statement, Odbc\\Result, 0) ZEND_ARG_TYPE_INFO(0, field, 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_OBJ_INFO(0, odbc, ODBC\\Connection, 0) + ZEND_ARG_OBJ_INFO(0, odbc, Odbc\\Connection, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enable, _IS_BOOL, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_odbc_commit, 0, 1, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, odbc, ODBC\\Connection, 0) + ZEND_ARG_OBJ_INFO(0, odbc, Odbc\\Connection, 0) 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_OBJ_INFO_WITH_DEFAULT_VALUE(0, odbc, ODBC\\Connection, 1, "null") + ZEND_ARG_OBJ_INFO_WITH_DEFAULT_VALUE(0, odbc, Odbc\\Connection, 1, "null") 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_OBJ_TYPE_MASK(0, odbc, ODBC\\Connection|ODBC\\Result, 0, NULL) + ZEND_ARG_OBJ_TYPE_MASK(0, odbc, Odbc\\Connection|Odbc\\Result, 0, NULL) 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_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_tables, 0, 1, ODBC\\Result, MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, odbc, ODBC\\Connection, 0) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_tables, 0, 1, Odbc\\Result, MAY_BE_FALSE) + ZEND_ARG_OBJ_INFO(0, odbc, Odbc\\Connection, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, catalog, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, schema, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, table, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, types, IS_STRING, 1, "null") ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_columns, 0, 1, ODBC\\Result, MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, odbc, ODBC\\Connection, 0) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_columns, 0, 1, Odbc\\Result, MAY_BE_FALSE) + ZEND_ARG_OBJ_INFO(0, odbc, Odbc\\Connection, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, catalog, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, schema, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, table, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, column, IS_STRING, 1, "null") ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_gettypeinfo, 0, 1, ODBC\\Result, MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, odbc, ODBC\\Connection, 0) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_gettypeinfo, 0, 1, Odbc\\Result, MAY_BE_FALSE) + ZEND_ARG_OBJ_INFO(0, odbc, Odbc\\Connection, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, data_type, IS_LONG, 0, "0") ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_primarykeys, 0, 4, ODBC\\Result, MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, odbc, ODBC\\Connection, 0) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_primarykeys, 0, 4, Odbc\\Result, MAY_BE_FALSE) + ZEND_ARG_OBJ_INFO(0, odbc, Odbc\\Connection, 0) 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_END_ARG_INFO() #if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35) -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_procedurecolumns, 0, 1, ODBC\\Result, MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, odbc, ODBC\\Connection, 0) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_procedurecolumns, 0, 1, Odbc\\Result, MAY_BE_FALSE) + ZEND_ARG_OBJ_INFO(0, odbc, Odbc\\Connection, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, catalog, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, schema, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, procedure, IS_STRING, 1, "null") @@ -187,8 +187,8 @@ ZEND_END_ARG_INFO() #endif #if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35) -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_procedures, 0, 1, ODBC\\Result, MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, odbc, ODBC\\Connection, 0) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_procedures, 0, 1, Odbc\\Result, MAY_BE_FALSE) + ZEND_ARG_OBJ_INFO(0, odbc, Odbc\\Connection, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, catalog, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, schema, IS_STRING, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, procedure, IS_STRING, 1, "null") @@ -196,8 +196,8 @@ ZEND_END_ARG_INFO() #endif #if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) && !defined(HAVE_SOLID_35) -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_foreignkeys, 0, 7, ODBC\\Result, MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, odbc, ODBC\\Connection, 0) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_foreignkeys, 0, 7, Odbc\\Result, MAY_BE_FALSE) + ZEND_ARG_OBJ_INFO(0, odbc, Odbc\\Connection, 0) ZEND_ARG_TYPE_INFO(0, pk_catalog, IS_STRING, 1) ZEND_ARG_TYPE_INFO(0, pk_schema, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, pk_table, IS_STRING, 0) @@ -207,8 +207,8 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_foreignkeys, 0, 7, ODBC ZEND_END_ARG_INFO() #endif -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_specialcolumns, 0, 7, ODBC\\Result, MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, odbc, ODBC\\Connection, 0) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_specialcolumns, 0, 7, Odbc\\Result, MAY_BE_FALSE) + ZEND_ARG_OBJ_INFO(0, odbc, Odbc\\Connection, 0) ZEND_ARG_TYPE_INFO(0, type, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, catalog, IS_STRING, 1) ZEND_ARG_TYPE_INFO(0, schema, IS_STRING, 0) @@ -217,8 +217,8 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_specialcolumns, 0, 7, O ZEND_ARG_TYPE_INFO(0, nullable, IS_LONG, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_statistics, 0, 6, ODBC\\Result, MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, odbc, ODBC\\Connection, 0) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_statistics, 0, 6, Odbc\\Result, MAY_BE_FALSE) + ZEND_ARG_OBJ_INFO(0, odbc, Odbc\\Connection, 0) 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) @@ -227,8 +227,8 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_statistics, 0, 6, ODBC\ ZEND_END_ARG_INFO() #if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) &&!defined(HAVE_SOLID_35) -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_tableprivileges, 0, 4, ODBC\\Result, MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, odbc, ODBC\\Connection, 0) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_tableprivileges, 0, 4, Odbc\\Result, MAY_BE_FALSE) + ZEND_ARG_OBJ_INFO(0, odbc, Odbc\\Connection, 0) 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) @@ -236,8 +236,8 @@ ZEND_END_ARG_INFO() #endif #if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) &&!defined(HAVE_SOLID_35) -ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_columnprivileges, 0, 5, ODBC\\Result, MAY_BE_FALSE) - ZEND_ARG_OBJ_INFO(0, odbc, ODBC\\Connection, 0) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_odbc_columnprivileges, 0, 5, Odbc\\Result, MAY_BE_FALSE) + ZEND_ARG_OBJ_INFO(0, odbc, Odbc\\Connection, 0) 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) @@ -390,11 +390,11 @@ static const zend_function_entry ext_functions[] = { ZEND_FE_END }; -static const zend_function_entry class_ODBC_Connection_methods[] = { +static const zend_function_entry class_Odbc_Connection_methods[] = { ZEND_FE_END }; -static const zend_function_entry class_ODBC_Result_methods[] = { +static const zend_function_entry class_Odbc_Result_methods[] = { ZEND_FE_END }; @@ -498,22 +498,22 @@ static void register_odbc_symbols(int module_number) zend_add_parameter_attribute(zend_hash_str_find_ptr(CG(function_table), "odbc_pconnect", sizeof("odbc_pconnect") - 1), 2, ZSTR_KNOWN(ZEND_STR_SENSITIVEPARAMETER), 0); } -static zend_class_entry *register_class_ODBC_Connection(void) +static zend_class_entry *register_class_Odbc_Connection(void) { zend_class_entry ce, *class_entry; - INIT_NS_CLASS_ENTRY(ce, "ODBC", "Connection", class_ODBC_Connection_methods); + INIT_NS_CLASS_ENTRY(ce, "Odbc", "Connection", class_Odbc_Connection_methods); class_entry = zend_register_internal_class_ex(&ce, NULL); class_entry->ce_flags |= ZEND_ACC_NO_DYNAMIC_PROPERTIES|ZEND_ACC_NOT_SERIALIZABLE; return class_entry; } -static zend_class_entry *register_class_ODBC_Result(void) +static zend_class_entry *register_class_Odbc_Result(void) { zend_class_entry ce, *class_entry; - INIT_NS_CLASS_ENTRY(ce, "ODBC", "Result", class_ODBC_Result_methods); + INIT_NS_CLASS_ENTRY(ce, "Odbc", "Result", class_Odbc_Result_methods); class_entry = zend_register_internal_class_ex(&ce, NULL); class_entry->ce_flags |= ZEND_ACC_NO_DYNAMIC_PROPERTIES|ZEND_ACC_NOT_SERIALIZABLE; diff --git a/ext/odbc/php_odbc.c b/ext/odbc/php_odbc.c index bd32f4bcad04d..dd9c8a2dcc93c 100644 --- a/ext/odbc/php_odbc.c +++ b/ext/odbc/php_odbc.c @@ -77,7 +77,8 @@ static zend_object_handlers odbc_connection_object_handlers, odbc_result_object_ #define Z_ODBC_CONNECTION_P(zv) Z_ODBC_LINK_P(zv)->connection #define Z_ODBC_RESULT_P(zv) odbc_result_from_obj(Z_OBJ_P(zv)) -static void odbc_insert_new_result(odbc_connection *connection, zval *result) { +static void odbc_insert_new_result(odbc_connection *connection, zval *result) +{ ZEND_ASSERT(Z_TYPE_P(result) == IS_OBJECT); #if ZEND_DEBUG ZEND_ASSERT(instanceof_function(Z_OBJCE_P(result), odbc_result_ce)); @@ -90,20 +91,16 @@ static void odbc_insert_new_result(odbc_connection *connection, zval *result) { Z_ADDREF_P(result); } -static inline odbc_link *odbc_link_from_obj(zend_object *obj) { +static inline odbc_link *odbc_link_from_obj(zend_object *obj) +{ return (odbc_link *)((char *)(obj) - XtOffsetOf(odbc_link, std)); } static int _close_pconn_with_res(zval *zv, void *p) { zend_resource *le = Z_RES_P(zv); - if (le->type != le_pconn) { - return ZEND_HASH_APPLY_KEEP; - } - odbc_connection *list_conn = ((odbc_connection *)(le->ptr)); - odbc_connection *obj_conn = (odbc_connection *) p; - if (list_conn == obj_conn) { + if (le->ptr == p) { return ZEND_HASH_APPLY_REMOVE; } @@ -120,6 +117,41 @@ static int _close_pconn(zval *zv) } } +/* disconnect, and if it fails, then issue a rollback for any pending transaction (lurcher) */ +static void safe_odbc_disconnect( void *handle ) +{ + int ret; + + ret = SQLDisconnect( handle ); + if ( ret == SQL_ERROR ) + { + SQLTransact( NULL, handle, SQL_ROLLBACK ); + SQLDisconnect( handle ); + } +} + +static void free_connection(odbc_connection *conn, bool persistent) +{ + /* If aborted via timer expiration, don't try to call any unixODBC function */ + if (!(PG(connection_status) & PHP_CONNECTION_TIMEOUT)) { + safe_odbc_disconnect(conn->hdbc); + SQLFreeConnect(conn->hdbc); + SQLFreeEnv(conn->henv); + } + + conn->hdbc = NULL; + conn->henv = NULL; + + zend_hash_destroy(&conn->results); + + pefree(conn, persistent); + + ODBCG(num_links)--; + if (persistent) { + ODBCG(num_persistent)--; + } +} + static void odbc_link_free(odbc_link *link) { ZEND_ASSERT(link->connection && "link has already been closed"); @@ -127,32 +159,20 @@ static void odbc_link_free(odbc_link *link) close_results_with_connection(link->connection); if (!link->persistent) { - /* If aborted via timer expiration, don't try to call any unixODBC function */ - if (!(PG(connection_status) & PHP_CONNECTION_TIMEOUT)) { - safe_odbc_disconnect(link->connection->hdbc); - SQLFreeConnect(link->connection->hdbc); - SQLFreeEnv(link->connection->henv); - } - link->connection->hdbc = NULL; - link->connection->henv = NULL; - zend_hash_destroy(&link->connection->results); - efree(link->connection); - ODBCG(num_links)--; - } - - if (link->hash) { - zend_hash_del(&ODBCG(connections), link->hash); + free_connection(link->connection, link->persistent); } link->connection = NULL; if (link->hash) { + zend_hash_del(&ODBCG(connections), link->hash); zend_string_release_ex(link->hash, link->persistent); link->hash = NULL; } } -static zend_object *odbc_connection_create_object(zend_class_entry *class_type) { +static zend_object *odbc_connection_create_object(zend_class_entry *class_type) +{ odbc_link *intern = zend_object_alloc(sizeof(odbc_link), class_type); zend_object_std_init(&intern->std, class_type); @@ -162,7 +182,8 @@ static zend_object *odbc_connection_create_object(zend_class_entry *class_type) return &intern->std; } -static zend_function *odbc_connection_get_constructor(zend_object *object) { +static zend_function *odbc_connection_get_constructor(zend_object *object) +{ zend_throw_error(NULL, "Cannot directly construct ODBC\\Connection, use odbc_connect() or odbc_pconnect() instead"); return NULL; } @@ -178,11 +199,13 @@ static void odbc_connection_free_obj(zend_object *obj) zend_object_std_dtor(&link->std); } -static inline odbc_result *odbc_result_from_obj(zend_object *obj) { +static inline odbc_result *odbc_result_from_obj(zend_object *obj) +{ return (odbc_result *)((char *)(obj) - XtOffsetOf(odbc_result, std)); } -static zend_object *odbc_result_create_object(zend_class_entry *class_type) { +static zend_object *odbc_result_create_object(zend_class_entry *class_type) +{ odbc_result *intern = zend_object_alloc(sizeof(odbc_result), class_type); zend_object_std_init(&intern->std, class_type); @@ -192,7 +215,8 @@ static zend_object *odbc_result_create_object(zend_class_entry *class_type) { return &intern->std; } -static zend_function *odbc_result_get_constructor(zend_object *object) { +static zend_function *odbc_result_get_constructor(zend_object *object) +{ zend_throw_error(NULL, "Cannot directly construct ODBC\\Result, use an appropriate odbc_* function instead"); return NULL; } @@ -229,13 +253,14 @@ static void odbc_result_free(odbc_result *res) res->param_info = NULL; } - HashTable *tmp = &res->conn_ptr->results; + HashTable *results = &res->conn_ptr->results; res->conn_ptr = NULL; - zend_result status = zend_hash_index_del(tmp, res->index); + zend_result status = zend_hash_index_del(results, res->index); ZEND_ASSERT(status == SUCCESS); } -static void odbc_result_free_obj(zend_object *obj) { +static void odbc_result_free_obj(zend_object *obj) +{ odbc_result *result = odbc_result_from_obj(obj); if (result->conn_ptr) { @@ -277,7 +302,8 @@ ZEND_TSRMLS_CACHE_DEFINE() ZEND_GET_MODULE(odbc) #endif -static void close_results_with_connection(odbc_connection *conn) { +static void close_results_with_connection(odbc_connection *conn) +{ zval *p; ZEND_HASH_FOREACH_VAL(&conn->results, p) { @@ -290,37 +316,14 @@ static void close_results_with_connection(odbc_connection *conn) { zend_hash_clean(&conn->results); } -/* disconnect, and if it fails, then issue a rollback for any pending transaction (lurcher) */ -static void safe_odbc_disconnect( void *handle ) -{ - int ret; - - ret = SQLDisconnect( handle ); - if ( ret == SQL_ERROR ) - { - SQLTransact( NULL, handle, SQL_ROLLBACK ); - SQLDisconnect( handle ); - } -} - /* {{{ void _close_odbc_pconn */ static void _close_odbc_pconn(zend_resource *rsrc) { odbc_connection *conn = (odbc_connection *)rsrc->ptr; close_results_with_connection(conn); - zend_hash_destroy(&conn->results); - - /* If aborted via timer expiration, don't try to call any unixODBC function */ - if (!(PG(connection_status) & PHP_CONNECTION_TIMEOUT)) { - safe_odbc_disconnect(conn->hdbc); - SQLFreeConnect(conn->hdbc); - SQLFreeEnv(conn->henv); - } - free(conn); + free_connection(conn, true); - ODBCG(num_links)--; - ODBCG(num_persistent)--; rsrc->ptr = NULL; } /* }}} */ @@ -502,7 +505,7 @@ static PHP_GINIT_FUNCTION(odbc) ZEND_TSRMLS_CACHE_UPDATE(); #endif odbc_globals->num_persistent = 0; - zend_hash_init(&odbc_globals->connections, 0, NULL, NULL, 1); + zend_hash_init(&odbc_globals->connections, 0, NULL, NULL, true); } static PHP_GSHUTDOWN_FUNCTION(odbc) @@ -524,7 +527,7 @@ PHP_MINIT_FUNCTION(odbc) register_odbc_symbols(module_number); - odbc_connection_ce = register_class_ODBC_Connection(); + odbc_connection_ce = register_class_Odbc_Connection(); odbc_connection_ce->create_object = odbc_connection_create_object; odbc_connection_ce->default_object_handlers = &odbc_connection_object_handlers; @@ -535,7 +538,7 @@ PHP_MINIT_FUNCTION(odbc) odbc_connection_object_handlers.clone_obj = NULL; odbc_connection_object_handlers.compare = zend_objects_not_comparable; - odbc_result_ce = register_class_ODBC_Result(); + odbc_result_ce = register_class_Odbc_Result(); odbc_result_ce->create_object = odbc_result_create_object; odbc_result_ce->default_object_handlers = &odbc_result_object_handlers; @@ -800,7 +803,6 @@ void odbc_bindcols(odbc_result *result) /* {{{ odbc_transact */ void odbc_transact(INTERNAL_FUNCTION_PARAMETERS, int type) { - odbc_connection *conn; RETCODE rc; zval *pv_conn; @@ -808,7 +810,7 @@ void odbc_transact(INTERNAL_FUNCTION_PARAMETERS, int type) RETURN_THROWS(); } - conn = Z_ODBC_CONNECTION_P(pv_conn); + odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); rc = SQLTransact(conn->henv, conn->hdbc, (SQLUSMALLINT)((type)?SQL_COMMIT:SQL_ROLLBACK)); @@ -878,7 +880,7 @@ PHP_FUNCTION(odbc_close_all) RETURN_THROWS(); } - /* Loop through the non-persistent connection list, now close all non-persistent connections and their results */ + /* Loop through the link list, now close all links and their results */ ZEND_HASH_FOREACH_VAL(&ODBCG(connections), zv) { odbc_link *link = Z_ODBC_LINK_P(zv); if (link->connection) { @@ -913,7 +915,6 @@ PHP_FUNCTION(odbc_prepare) char *query; size_t query_len; odbc_result *result = NULL; - odbc_connection *conn; RETCODE rc; int i; #ifdef HAVE_SQL_EXTENDED_FETCH @@ -924,7 +925,7 @@ PHP_FUNCTION(odbc_prepare) RETURN_THROWS(); } - conn = Z_ODBC_CONNECTION_P(pv_conn); + odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); object_init_ex(return_value, odbc_result_ce); @@ -1247,7 +1248,6 @@ PHP_FUNCTION(odbc_data_source) zval *zv_conn; zend_long zv_fetch_type; RETCODE rc = 0; /* assume all is good */ - odbc_connection *conn; UCHAR server_name[100], desc[200]; SQLSMALLINT len1=0, len2=0, fetch_type; @@ -1262,7 +1262,7 @@ PHP_FUNCTION(odbc_data_source) RETURN_THROWS(); } - conn = Z_ODBC_CONNECTION_P(zv_conn); + odbc_connection *conn = Z_ODBC_CONNECTION_P(zv_conn); CHECK_ODBC_CONNECTION(conn); /* now we have the "connection" lets call the DataSource object */ @@ -1307,7 +1307,6 @@ PHP_FUNCTION(odbc_exec) char *query; size_t query_len; odbc_result *result = NULL; - odbc_connection *conn; RETCODE rc; #ifdef HAVE_SQL_EXTENDED_FETCH SQLUINTEGER scrollopts; @@ -1317,7 +1316,7 @@ PHP_FUNCTION(odbc_exec) RETURN_THROWS(); } - conn = Z_ODBC_CONNECTION_P(pv_conn); + odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); object_init_ex(return_value, odbc_result_ce); @@ -2130,7 +2129,7 @@ bool odbc_sqlconnect(zval *zv, char *db, char *uid, char *pwd, int cur_opt, bool object_init_ex(zv, odbc_connection_ce); link = Z_ODBC_LINK_P(zv); link->connection = pecalloc(1, sizeof(odbc_connection), persistent); - zend_hash_init(&link->connection->results, 0, NULL, ZVAL_PTR_DTOR, 1); + zend_hash_init(&link->connection->results, 0, NULL, ZVAL_PTR_DTOR, true); link->persistent = persistent; link->hash = zend_string_init(hash, hash_len, persistent); ret = SQLAllocEnv(&link->connection->henv); @@ -2300,7 +2299,7 @@ void odbc_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) } char *hashed_details; - int hashed_details_len = spprintf(&hashed_details, 0, "%d_%s_%s_%s_%s_%d", persistent, ODBC_TYPE, db, uid, pwd, cur_opt); + size_t hashed_details_len = spprintf(&hashed_details, 0, "%d_%s_%s_%s_%s_%d", persistent, ODBC_TYPE, db, uid, pwd, cur_opt); try_and_get_another_connection: @@ -2384,22 +2383,22 @@ void odbc_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) } } - zval *tmp; - if ((tmp = zend_hash_str_find(&ODBCG(connections), hashed_details, hashed_details_len)) == NULL) { + zval *link_zval; + if ((link_zval = zend_hash_str_find(&ODBCG(connections), hashed_details, hashed_details_len)) == NULL) { object_init_ex(return_value, odbc_connection_ce); odbc_link *link = Z_ODBC_LINK_P(return_value); link->connection = db_conn; link->hash = zend_string_init(hashed_details, hashed_details_len, persistent); link->persistent = true; } else { - ZVAL_COPY(return_value, tmp); + ZVAL_COPY(return_value, link_zval); ZEND_ASSERT(Z_ODBC_CONNECTION_P(return_value) == db_conn && "Persistent connection has changed"); } } } else { /* non-persistent */ - zval *tmp; - if ((tmp = zend_hash_str_find(&ODBCG(connections), hashed_details, hashed_details_len)) == NULL) { /* non-persistent, new */ + zval *link_zval; + if ((link_zval = zend_hash_str_find(&ODBCG(connections), hashed_details, hashed_details_len)) == NULL) { /* non-persistent, new */ if (ODBCG(max_links) != -1 && ODBCG(num_links) >= ODBCG(max_links)) { php_error_docref(NULL, E_WARNING, "Too many open connections (" ZEND_LONG_FMT ")", ODBCG(num_links)); efree(hashed_details); @@ -2415,7 +2414,7 @@ void odbc_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) zend_hash_str_add_new(&ODBCG(connections), hashed_details, hashed_details_len, return_value); } else { /* non-persistent, pre-existing */ - ZVAL_COPY(return_value, tmp); + ZVAL_COPY(return_value, link_zval); } } efree(hashed_details); @@ -2427,14 +2426,13 @@ PHP_FUNCTION(odbc_close) { zval *pv_conn; odbc_link *link; - odbc_connection *connection; if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &pv_conn, odbc_connection_ce) == FAILURE) { RETURN_THROWS(); } link = Z_ODBC_LINK_P(pv_conn); - connection = Z_ODBC_CONNECTION_P(pv_conn); + odbc_connection *connection = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(connection); odbc_link_free(link); @@ -2651,7 +2649,6 @@ PHP_FUNCTION(odbc_field_num) /* There can be problems with pconnections!*/ PHP_FUNCTION(odbc_autocommit) { - odbc_connection *conn; RETCODE rc; zval *pv_conn; bool pv_onoff = 0; @@ -2661,7 +2658,7 @@ PHP_FUNCTION(odbc_autocommit) RETURN_THROWS(); } - conn = Z_ODBC_CONNECTION_P(pv_conn); + odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); if (!pv_onoff_is_null) { @@ -2815,7 +2812,6 @@ PHP_FUNCTION(odbc_tables) { zval *pv_conn; odbc_result *result = NULL; - odbc_connection *conn; char *cat = NULL, *schema = NULL, *table = NULL, *type = NULL; size_t cat_len = 0, schema_len = 0, table_len = 0, type_len = 0; RETCODE rc; @@ -2825,7 +2821,7 @@ PHP_FUNCTION(odbc_tables) RETURN_THROWS(); } - conn = Z_ODBC_CONNECTION_P(pv_conn); + odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); object_init_ex(return_value, odbc_result_ce); @@ -2881,7 +2877,6 @@ PHP_FUNCTION(odbc_columns) { zval *pv_conn; odbc_result *result = NULL; - odbc_connection *conn; char *cat = NULL, *schema = NULL, *table = NULL, *column = NULL; size_t cat_len = 0, schema_len = 0, table_len = 0, column_len = 0; RETCODE rc; @@ -2891,7 +2886,7 @@ PHP_FUNCTION(odbc_columns) RETURN_THROWS(); } - conn = Z_ODBC_CONNECTION_P(pv_conn); + odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); object_init_ex(return_value, odbc_result_ce); @@ -2950,7 +2945,6 @@ PHP_FUNCTION(odbc_columnprivileges) { zval *pv_conn; odbc_result *result = NULL; - odbc_connection *conn; char *cat = NULL, *schema, *table, *column; size_t cat_len = 0, schema_len, table_len, column_len; RETCODE rc; @@ -2960,7 +2954,7 @@ PHP_FUNCTION(odbc_columnprivileges) RETURN_THROWS(); } - conn = Z_ODBC_CONNECTION_P(pv_conn); + odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); object_init_ex(return_value, odbc_result_ce); @@ -3013,7 +3007,6 @@ PHP_FUNCTION(odbc_foreignkeys) { zval *pv_conn; odbc_result *result = NULL; - odbc_connection *conn; char *pcat = NULL, *pschema, *ptable, *fcat, *fschema, *ftable; size_t pcat_len = 0, pschema_len, ptable_len, fcat_len, fschema_len, ftable_len; RETCODE rc; @@ -3035,7 +3028,7 @@ PHP_FUNCTION(odbc_foreignkeys) EMPTY_TO_NULL(ftable); #endif - conn = Z_ODBC_CONNECTION_P(pv_conn); + odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); object_init_ex(return_value, odbc_result_ce); @@ -3090,7 +3083,6 @@ PHP_FUNCTION(odbc_gettypeinfo) zval *pv_conn; zend_long pv_data_type = SQL_ALL_TYPES; odbc_result *result = NULL; - odbc_connection *conn; RETCODE rc; SQLSMALLINT data_type; @@ -3100,7 +3092,7 @@ PHP_FUNCTION(odbc_gettypeinfo) data_type = (SQLSMALLINT) pv_data_type; - conn = Z_ODBC_CONNECTION_P(pv_conn); + odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); object_init_ex(return_value, odbc_result_ce); @@ -3147,7 +3139,6 @@ PHP_FUNCTION(odbc_primarykeys) { zval *pv_conn; odbc_result *result = NULL; - odbc_connection *conn; char *cat = NULL, *schema = NULL, *table = NULL; size_t cat_len = 0, schema_len, table_len; RETCODE rc; @@ -3156,7 +3147,7 @@ PHP_FUNCTION(odbc_primarykeys) RETURN_THROWS(); } - conn = Z_ODBC_CONNECTION_P(pv_conn); + odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); object_init_ex(return_value, odbc_result_ce); @@ -3207,7 +3198,6 @@ PHP_FUNCTION(odbc_procedurecolumns) { zval *pv_conn; odbc_result *result = NULL; - odbc_connection *conn; char *cat = NULL, *schema = NULL, *proc = NULL, *col = NULL; size_t cat_len = 0, schema_len = 0, proc_len = 0, col_len = 0; RETCODE rc; @@ -3217,7 +3207,7 @@ PHP_FUNCTION(odbc_procedurecolumns) RETURN_THROWS(); } - conn = Z_ODBC_CONNECTION_P(pv_conn); + odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); object_init_ex(return_value, odbc_result_ce); @@ -3270,7 +3260,6 @@ PHP_FUNCTION(odbc_procedures) { zval *pv_conn; odbc_result *result = NULL; - odbc_connection *conn; char *cat = NULL, *schema = NULL, *proc = NULL; size_t cat_len = 0, schema_len = 0, proc_len = 0; RETCODE rc; @@ -3279,7 +3268,7 @@ PHP_FUNCTION(odbc_procedures) RETURN_THROWS(); } - conn = Z_ODBC_CONNECTION_P(pv_conn); + odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); object_init_ex(return_value, odbc_result_ce); @@ -3331,7 +3320,6 @@ PHP_FUNCTION(odbc_specialcolumns) zval *pv_conn; zend_long vtype, vscope, vnullable; odbc_result *result = NULL; - odbc_connection *conn; char *cat = NULL, *schema = NULL, *name = NULL; size_t cat_len = 0, schema_len, name_len; SQLUSMALLINT type, scope, nullable; @@ -3346,7 +3334,7 @@ PHP_FUNCTION(odbc_specialcolumns) scope = (SQLUSMALLINT) vscope; nullable = (SQLUSMALLINT) vnullable; - conn = Z_ODBC_CONNECTION_P(pv_conn); + odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); object_init_ex(return_value, odbc_result_ce); @@ -3399,7 +3387,6 @@ PHP_FUNCTION(odbc_statistics) zval *pv_conn; zend_long vunique, vreserved; odbc_result *result = NULL; - odbc_connection *conn; char *cat = NULL, *schema, *name; size_t cat_len = 0, schema_len, name_len; SQLUSMALLINT unique, reserved; @@ -3413,7 +3400,7 @@ PHP_FUNCTION(odbc_statistics) unique = (SQLUSMALLINT) vunique; reserved = (SQLUSMALLINT) vreserved; - conn = Z_ODBC_CONNECTION_P(pv_conn); + odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); object_init_ex(return_value, odbc_result_ce); @@ -3466,7 +3453,6 @@ PHP_FUNCTION(odbc_tableprivileges) { zval *pv_conn; odbc_result *result = NULL; - odbc_connection *conn; char *cat = NULL, *schema = NULL, *table = NULL; size_t cat_len = 0, schema_len, table_len; RETCODE rc; @@ -3475,7 +3461,7 @@ PHP_FUNCTION(odbc_tableprivileges) RETURN_THROWS(); } - conn = Z_ODBC_CONNECTION_P(pv_conn); + odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); object_init_ex(return_value, odbc_result_ce); diff --git a/ext/odbc/tests/bug78470.phpt b/ext/odbc/tests/bug78470.phpt index f14865a90e363..92bd5c067f7b0 100644 --- a/ext/odbc/tests/bug78470.phpt +++ b/ext/odbc/tests/bug78470.phpt @@ -12,5 +12,5 @@ $conn = odbc_connect($dsn, $user, $pass); var_dump(odbc_specialcolumns($conn, SQL_BEST_ROWID, '', '', '', SQL_SCOPE_CURROW, SQL_NO_NULLS)); ?> --EXPECTF-- -object(ODBC\Result)#%d (%d) { +object(Odbc\Result)#%d (%d) { } diff --git a/ext/odbc/tests/bug78473.phpt b/ext/odbc/tests/bug78473.phpt index bed712e37bd8d..9313237efde2b 100644 --- a/ext/odbc/tests/bug78473.phpt +++ b/ext/odbc/tests/bug78473.phpt @@ -12,5 +12,5 @@ try { var_dump(STDIN); ?> --EXPECT-- -odbc_close(): Argument #1 ($odbc) must be of type ODBC\Connection, resource given +odbc_close(): Argument #1 ($odbc) must be of type Odbc\Connection, resource given resource(1) of type (stream) diff --git a/ext/odbc/tests/odbc_close_001.phpt b/ext/odbc/tests/odbc_close_001.phpt index 2bcc0ba1b7c4f..1c970b58959d9 100644 --- a/ext/odbc/tests/odbc_close_001.phpt +++ b/ext/odbc/tests/odbc_close_001.phpt @@ -48,13 +48,13 @@ try { ?> --EXPECTF-- -object(ODBC\Connection)#%d (%d) { +object(Odbc\Connection)#%d (%d) { } -object(ODBC\Connection)#%d (%d) { +object(Odbc\Connection)#%d (%d) { } -object(ODBC\Result)#%d (%d) { +object(Odbc\Result)#%d (%d) { } -object(ODBC\Result)#%d (%d) { +object(Odbc\Result)#%d (%d) { } ODBC connection has already been closed ODBC connection has already been closed diff --git a/ext/odbc/tests/odbc_close_all_001.phpt b/ext/odbc/tests/odbc_close_all_001.phpt index 47da881accf70..3dc24b5679d56 100644 --- a/ext/odbc/tests/odbc_close_all_001.phpt +++ b/ext/odbc/tests/odbc_close_all_001.phpt @@ -47,13 +47,13 @@ try { ?> --EXPECTF-- -object(ODBC\Connection)#%d (%d) { +object(Odbc\Connection)#%d (%d) { } -object(ODBC\Connection)#%d (%d) { +object(Odbc\Connection)#%d (%d) { } -object(ODBC\Result)#%d (%d) { +object(Odbc\Result)#%d (%d) { } -object(ODBC\Result)#%d (%d) { +object(Odbc\Result)#%d (%d) { } ODBC connection has already been closed ODBC connection has already been closed diff --git a/ext/odbc/tests/odbc_columnprivileges_001.phpt b/ext/odbc/tests/odbc_columnprivileges_001.phpt index 552c88f23731a..be8fa20699009 100644 --- a/ext/odbc/tests/odbc_columnprivileges_001.phpt +++ b/ext/odbc/tests/odbc_columnprivileges_001.phpt @@ -22,7 +22,7 @@ var_dump(odbc_fetch_row($result)); ?> --EXPECTF-- -object(ODBC\Result)#%d (%d) { +object(Odbc\Result)#%d (%d) { } bool(false) @@ -31,9 +31,9 @@ Deprecated: odbc_columnprivileges(): Passing null to parameter #3 ($schema) of t Deprecated: odbc_columnprivileges(): Passing null to parameter #4 ($table) of type string is deprecated in %s on line %d Deprecated: odbc_columnprivileges(): Passing null to parameter #5 ($column) of type string is deprecated in %s on line %d -object(ODBC\Result)#%d (%d) { +object(Odbc\Result)#%d (%d) { } bool(false) -object(ODBC\Result)#%d (%d) { +object(Odbc\Result)#%d (%d) { } bool(false) diff --git a/ext/odbc/tests/odbc_free_result_001.phpt b/ext/odbc/tests/odbc_free_result_001.phpt index 2490c05e4c740..28808f64208cf 100644 --- a/ext/odbc/tests/odbc_free_result_001.phpt +++ b/ext/odbc/tests/odbc_free_result_001.phpt @@ -58,6 +58,6 @@ odbc_exec($conn, 'DROP TABLE free_result'); bool(true) string(1) "1" bool(true) -odbc_free_result(): Argument #1 ($statement) must be of type ODBC\Result, ODBC\Connection given +odbc_free_result(): Argument #1 ($statement) must be of type Odbc\Result, Odbc\Connection given ODBC result has already been closed ODBC result has already been closed diff --git a/ext/odbc/tests/odbc_tables_001.phpt b/ext/odbc/tests/odbc_tables_001.phpt index f013be7f06ba8..4708bcd801d6f 100644 --- a/ext/odbc/tests/odbc_tables_001.phpt +++ b/ext/odbc/tests/odbc_tables_001.phpt @@ -27,17 +27,17 @@ var_dump(odbc_fetch_row($result)); ?> --EXPECTF-- -object(ODBC\Result)#%d (%d) { +object(Odbc\Result)#%d (%d) { } bool(false) -object(ODBC\Result)#%d (%d) { +object(Odbc\Result)#%d (%d) { } bool(true) bool(true) -object(ODBC\Result)#%d (%d) { +object(Odbc\Result)#%d (%d) { } bool(true) bool(true) -object(ODBC\Result)#%d (%d) { +object(Odbc\Result)#%d (%d) { } bool(false)