@@ -952,12 +952,13 @@ PHP_METHOD(SQLite3, createFunction)
952
952
php_sqlite3_func * func ;
953
953
char * sql_func ;
954
954
size_t sql_func_len ;
955
- zval * callback_func ;
955
+ zend_fcall_info fci ;
956
+ zend_fcall_info_cache fcc ;
956
957
zend_long sql_func_num_args = -1 ;
957
958
zend_long flags = 0 ;
958
959
db_obj = Z_SQLITE3_DB_P (object );
959
960
960
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "sz |ll" , & sql_func , & sql_func_len , & callback_func , & sql_func_num_args , & flags ) == FAILURE ) {
961
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "sf |ll" , & sql_func , & sql_func_len , & fci , & fcc , & sql_func_num_args , & flags ) == FAILURE ) {
961
962
RETURN_THROWS ();
962
963
}
963
964
@@ -967,19 +968,12 @@ PHP_METHOD(SQLite3, createFunction)
967
968
RETURN_FALSE ;
968
969
}
969
970
970
- if (!zend_is_callable (callback_func , 0 , NULL )) {
971
- zend_string * callback_name = zend_get_callable_name (callback_func );
972
- php_sqlite3_error (db_obj , "Not a valid callback function %s" , ZSTR_VAL (callback_name ));
973
- zend_string_release_ex (callback_name , 0 );
974
- RETURN_FALSE ;
975
- }
976
-
977
971
func = (php_sqlite3_func * )ecalloc (1 , sizeof (* func ));
978
972
979
973
if (sqlite3_create_function (db_obj -> db , sql_func , sql_func_num_args , flags | SQLITE_UTF8 , func , php_sqlite3_callback_func , NULL , NULL ) == SQLITE_OK ) {
980
974
func -> func_name = estrdup (sql_func );
981
975
982
- ZVAL_COPY (& func -> func , callback_func );
976
+ ZVAL_COPY (& func -> func , & fci . function_name );
983
977
984
978
func -> argc = sql_func_num_args ;
985
979
func -> next = db_obj -> funcs ;
@@ -1001,11 +995,12 @@ PHP_METHOD(SQLite3, createAggregate)
1001
995
php_sqlite3_func * func ;
1002
996
char * sql_func ;
1003
997
size_t sql_func_len ;
1004
- zval * step_callback , * fini_callback ;
998
+ zend_fcall_info step_fci , fini_fci ;
999
+ zend_fcall_info_cache step_fcc , fini_fcc ;
1005
1000
zend_long sql_func_num_args = -1 ;
1006
1001
db_obj = Z_SQLITE3_DB_P (object );
1007
1002
1008
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "szz |l" , & sql_func , & sql_func_len , & step_callback , & fini_callback , & sql_func_num_args ) == FAILURE ) {
1003
+ 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 ) {
1009
1004
RETURN_THROWS ();
1010
1005
}
1011
1006
@@ -1015,27 +1010,13 @@ PHP_METHOD(SQLite3, createAggregate)
1015
1010
RETURN_FALSE ;
1016
1011
}
1017
1012
1018
- if (!zend_is_callable (step_callback , 0 , NULL )) {
1019
- zend_string * callback_name = zend_get_callable_name (step_callback );
1020
- php_sqlite3_error (db_obj , "Not a valid callback function %s" , ZSTR_VAL (callback_name ));
1021
- zend_string_release_ex (callback_name , 0 );
1022
- RETURN_FALSE ;
1023
- }
1024
-
1025
- if (!zend_is_callable (fini_callback , 0 , NULL )) {
1026
- zend_string * callback_name = zend_get_callable_name (fini_callback );
1027
- php_sqlite3_error (db_obj , "Not a valid callback function %s" , ZSTR_VAL (callback_name ));
1028
- zend_string_release_ex (callback_name , 0 );
1029
- RETURN_FALSE ;
1030
- }
1031
-
1032
1013
func = (php_sqlite3_func * )ecalloc (1 , sizeof (* func ));
1033
1014
1034
1015
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 ) {
1035
1016
func -> func_name = estrdup (sql_func );
1036
1017
1037
- ZVAL_COPY (& func -> step , step_callback );
1038
- ZVAL_COPY (& func -> fini , fini_callback );
1018
+ ZVAL_COPY (& func -> step , & step_fci . function_name );
1019
+ ZVAL_COPY (& func -> fini , & fini_fci . function_name );
1039
1020
1040
1021
func -> argc = sql_func_num_args ;
1041
1022
func -> next = db_obj -> funcs ;
@@ -1057,10 +1038,11 @@ PHP_METHOD(SQLite3, createCollation)
1057
1038
php_sqlite3_collation * collation ;
1058
1039
char * collation_name ;
1059
1040
size_t collation_name_len ;
1060
- zval * callback_func ;
1041
+ zend_fcall_info fci ;
1042
+ zend_fcall_info_cache fcc ;
1061
1043
db_obj = Z_SQLITE3_DB_P (object );
1062
1044
1063
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "sz " , & collation_name , & collation_name_len , & callback_func ) == FAILURE ) {
1045
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "sf " , & collation_name , & collation_name_len , & fci , & fcc ) == FAILURE ) {
1064
1046
RETURN_THROWS ();
1065
1047
}
1066
1048
@@ -1070,18 +1052,11 @@ PHP_METHOD(SQLite3, createCollation)
1070
1052
RETURN_FALSE ;
1071
1053
}
1072
1054
1073
- if (!zend_is_callable (callback_func , 0 , NULL )) {
1074
- zend_string * callback_name = zend_get_callable_name (callback_func );
1075
- php_sqlite3_error (db_obj , "Not a valid callback function %s" , ZSTR_VAL (callback_name ));
1076
- zend_string_release_ex (callback_name , 0 );
1077
- RETURN_FALSE ;
1078
- }
1079
-
1080
1055
collation = (php_sqlite3_collation * )ecalloc (1 , sizeof (* collation ));
1081
1056
if (sqlite3_create_collation (db_obj -> db , collation_name , SQLITE_UTF8 , collation , php_sqlite3_callback_compare ) == SQLITE_OK ) {
1082
1057
collation -> collation_name = estrdup (collation_name );
1083
1058
1084
- ZVAL_COPY (& collation -> cmp_func , callback_func );
1059
+ ZVAL_COPY (& collation -> cmp_func , & fci . function_name );
1085
1060
1086
1061
collation -> next = db_obj -> collations ;
1087
1062
db_obj -> collations = collation ;
0 commit comments