Skip to content

Commit 14056cb

Browse files
committed
Revert aggregate
1 parent 928faec commit 14056cb

File tree

1 file changed

+14
-14
lines changed

1 file changed

+14
-14
lines changed

ext/sqlite3/sqlite3.c

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -994,24 +994,14 @@ PHP_METHOD(SQLite3, createAggregate)
994994
zend_long sql_func_num_args = -1;
995995
db_obj = Z_SQLITE3_DB_P(object);
996996

997-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "sFF|l", &sql_func, &sql_func_len, &step_fci, &step_fcc, &fini_fci, &fini_fcc, &sql_func_num_args) == FAILURE) {
998-
zend_release_fcall_info_cache(&step_fcc);
999-
zend_release_fcall_info_cache(&fini_fcc);
997+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "sff|l", &sql_func, &sql_func_len, &step_fci, &step_fcc, &fini_fci, &fini_fcc, &sql_func_num_args) == FAILURE) {
1000998
RETURN_THROWS();
1001999
}
10021000

1003-
/* Cannot use SQLITE3_CHECK_INITIALIZED_FREE_TRAMPOLINE() as we have 2 FCCs */
1004-
if (!db_obj || !db_obj->initialised) {
1005-
zend_release_fcall_info_cache(&step_fcc);
1006-
zend_release_fcall_info_cache(&fini_fcc);
1007-
zend_throw_error(NULL, "The SQLite3 object has not been correctly initialised or is already closed");
1008-
RETURN_THROWS();
1009-
}
1001+
SQLITE3_CHECK_INITIALIZED(db_obj, db_obj->initialised, SQLite3)
10101002

10111003
if (!sql_func_len) {
10121004
/* TODO Add warning/ValueError that name cannot be empty? */
1013-
zend_release_fcall_info_cache(&step_fcc);
1014-
zend_release_fcall_info_cache(&fini_fcc);
10151005
RETURN_FALSE;
10161006
}
10171007

@@ -1020,7 +1010,19 @@ PHP_METHOD(SQLite3, createAggregate)
10201010
if (sqlite3_create_function(db_obj->db, sql_func, sql_func_num_args, SQLITE_UTF8, func, NULL, php_sqlite3_callback_step, php_sqlite3_callback_final) == SQLITE_OK) {
10211011
func->func_name = estrdup(sql_func);
10221012

1013+
if (!ZEND_FCC_INITIALIZED(step_fcc)) {
1014+
/* Call trampoline has been cleared by zpp. Refetch it, because we want to deal
1015+
* with it outselves. It is important that it is not refetched on every call,
1016+
* because calls may occur from different scopes. */
1017+
zend_is_callable_ex(&step_fci.function_name, NULL, IS_CALLABLE_SUPPRESS_DEPRECATIONS, NULL, &step_fcc, NULL);
1018+
}
10231019
zend_fcc_dup(&func->step, &step_fcc);
1020+
if (!ZEND_FCC_INITIALIZED(fini_fcc)) {
1021+
/* Call trampoline has been cleared by zpp. Refetch it, because we want to deal
1022+
* with it outselves. It is important that it is not refetched on every call,
1023+
* because calls may occur from different scopes. */
1024+
zend_is_callable_ex(&fini_fci.function_name, NULL, IS_CALLABLE_SUPPRESS_DEPRECATIONS, NULL, &fini_fcc, NULL);
1025+
}
10241026
zend_fcc_dup(&func->fini, &fini_fcc);
10251027

10261028
func->argc = sql_func_num_args;
@@ -1030,8 +1032,6 @@ PHP_METHOD(SQLite3, createAggregate)
10301032
RETURN_TRUE;
10311033
}
10321034
efree(func);
1033-
zend_release_fcall_info_cache(&step_fcc);
1034-
zend_release_fcall_info_cache(&fini_fcc);
10351035

10361036
RETURN_FALSE;
10371037
}

0 commit comments

Comments
 (0)