From cad66533f0cb936154caca6e6857a3490887cc11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Tue, 9 Feb 2021 23:21:26 +0100 Subject: Generate class entries from stubs for ldap, libxml, mbstring and mysqli Closes GH-6684 --- build/gen_stub.php | 5 +- ext/ldap/ldap.stub.php | 2 +- ext/ldap/ldap_arginfo.h | 2 +- ext/libxml/libxml.stub.php | 1 + ext/libxml/libxml_arginfo.h | 2 +- ext/mbstring/mbstring.stub.php | 2 +- ext/mbstring/mbstring_arginfo.h | 2 +- ext/mysqli/mysqli.c | 88 +++-------- ext/mysqli/mysqli.stub.php | 126 +++++++++++++++- ext/mysqli/mysqli_arginfo.h | 319 +++++++++++++++++++++++++++++++++++++++- ext/mysqli/php_mysqli_structs.h | 7 - 11 files changed, 471 insertions(+), 85 deletions(-) diff --git a/build/gen_stub.php b/build/gen_stub.php index 71fe1f4f18..ee4033ab10 100755 --- a/build/gen_stub.php +++ b/build/gen_stub.php @@ -1114,10 +1114,11 @@ class PropertyInfo break; case "string": - if (empty($value)) { + if ($value === "") { $code .= "\tZVAL_EMPTY_STRING(&$zvalName);\n"; } else { - $code .= "\tZVAL_STRING(&$zvalName, \"$value\");\n"; + $code .= "\tzend_string *{$zvalName}_str = zend_string_init(\"$value\", sizeof(\"$value\") - 1, 1);\n"; + $code .= "\tZVAL_STR(&$zvalName, {$zvalName}_str);\n"; } break; diff --git a/ext/ldap/ldap.stub.php b/ext/ldap/ldap.stub.php index d859c69af3..65634372fd 100644 --- a/ext/ldap/ldap.stub.php +++ b/ext/ldap/ldap.stub.php @@ -1,6 +1,6 @@ ce_flags |= ZEND_ACC_FINAL; - zend_declare_property_long(mysqli_exception_class_entry, "code", sizeof("code")-1, 0, ZEND_ACC_PROTECTED); - zend_declare_property_string(mysqli_exception_class_entry, "sqlstate", sizeof("sqlstate")-1, "00000", ZEND_ACC_PROTECTED); + mysqli_exception_class_entry = register_class_mysqli_sql_exception(spl_ce_RuntimeException); - REGISTER_MYSQLI_CLASS_ENTRY("mysqli_driver", mysqli_driver_class_entry, class_mysqli_driver_methods); - ce = mysqli_driver_class_entry; + mysqli_driver_class_entry = register_class_mysqli_driver(); + mysqli_driver_class_entry->create_object = mysqli_objects_new; zend_hash_init(&mysqli_driver_properties, 0, NULL, free_prop_handler, 1); MYSQLI_ADD_PROPERTIES(&mysqli_driver_properties, mysqli_driver_property_entries); - zend_declare_property_null(ce, "client_info", sizeof("client_info") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "client_version", sizeof("client_version") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "driver_version", sizeof("driver_version") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "reconnect", sizeof("reconnect") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "report_mode", sizeof("report_mode") - 1, ZEND_ACC_PUBLIC); - ce->ce_flags |= ZEND_ACC_FINAL; - zend_hash_add_ptr(&classes, ce->name, &mysqli_driver_properties); - - REGISTER_MYSQLI_CLASS_ENTRY("mysqli", mysqli_link_class_entry, class_mysqli_methods); - ce = mysqli_link_class_entry; + zend_hash_add_ptr(&classes, mysqli_driver_class_entry->name, &mysqli_driver_properties); + + mysqli_link_class_entry = register_class_mysqli(); + mysqli_link_class_entry->create_object = mysqli_objects_new; zend_hash_init(&mysqli_link_properties, 0, NULL, free_prop_handler, 1); MYSQLI_ADD_PROPERTIES(&mysqli_link_properties, mysqli_link_property_entries); - zend_declare_property_null(ce, "affected_rows", sizeof("affected_rows") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "client_info", sizeof("client_info") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "client_version", sizeof("client_version") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "connect_errno", sizeof("connect_errno") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "connect_error", sizeof("connect_error") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "errno", sizeof("errno") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "error", sizeof("error") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "error_list", sizeof("error_list") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "field_count", sizeof("field_count") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "host_info", sizeof("host_info") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "info", sizeof("info") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "insert_id", sizeof("insert_id") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "server_info", sizeof("server_info") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "server_version", sizeof("server_version") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "sqlstate", sizeof("sqlstate") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "protocol_version", sizeof("protocol_version") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "thread_id", sizeof("thread_id") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "warning_count", sizeof("warning_count") - 1, ZEND_ACC_PUBLIC); - zend_hash_add_ptr(&classes, ce->name, &mysqli_link_properties); - - REGISTER_MYSQLI_CLASS_ENTRY("mysqli_warning", mysqli_warning_class_entry, class_mysqli_warning_methods); - ce = mysqli_warning_class_entry; - ce->ce_flags |= ZEND_ACC_FINAL; + zend_hash_add_ptr(&classes, mysqli_link_class_entry->name, &mysqli_link_properties); + + mysqli_warning_class_entry = register_class_mysqli_warning(); + mysqli_warning_class_entry->create_object = mysqli_objects_new; zend_hash_init(&mysqli_warning_properties, 0, NULL, free_prop_handler, 1); MYSQLI_ADD_PROPERTIES(&mysqli_warning_properties, mysqli_warning_property_entries); - zend_declare_property_null(ce, "message", sizeof("message") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "sqlstate", sizeof("sqlstate") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "errno", sizeof("errno") - 1, ZEND_ACC_PUBLIC); - zend_hash_add_ptr(&classes, ce->name, &mysqli_warning_properties); + zend_hash_add_ptr(&classes, mysqli_warning_class_entry->name, &mysqli_warning_properties); - REGISTER_MYSQLI_CLASS_ENTRY("mysqli_result", mysqli_result_class_entry, class_mysqli_result_methods); - ce = mysqli_result_class_entry; + mysqli_result_class_entry = register_class_mysqli_result(zend_ce_aggregate); + mysqli_result_class_entry->create_object = mysqli_objects_new; + mysqli_result_class_entry->get_iterator = php_mysqli_result_get_iterator; zend_hash_init(&mysqli_result_properties, 0, NULL, free_prop_handler, 1); MYSQLI_ADD_PROPERTIES(&mysqli_result_properties, mysqli_result_property_entries); - zend_declare_property_null(ce, "current_field", sizeof("current_field") - 1,ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "field_count", sizeof("field_count") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "lengths", sizeof("lengths") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "num_rows", sizeof("num_rows") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "type", sizeof("type") - 1, ZEND_ACC_PUBLIC); - mysqli_result_class_entry->get_iterator = php_mysqli_result_get_iterator; - zend_class_implements(mysqli_result_class_entry, 1, zend_ce_aggregate); - zend_hash_add_ptr(&classes, ce->name, &mysqli_result_properties); + zend_hash_add_ptr(&classes, mysqli_result_class_entry->name, &mysqli_result_properties); - REGISTER_MYSQLI_CLASS_ENTRY("mysqli_stmt", mysqli_stmt_class_entry, class_mysqli_stmt_methods); - ce = mysqli_stmt_class_entry; + mysqli_stmt_class_entry = register_class_mysqli_stmt(); + mysqli_stmt_class_entry->create_object = mysqli_objects_new; zend_hash_init(&mysqli_stmt_properties, 0, NULL, free_prop_handler, 1); MYSQLI_ADD_PROPERTIES(&mysqli_stmt_properties, mysqli_stmt_property_entries); - zend_declare_property_null(ce, "affected_rows", sizeof("affected_rows") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "insert_id", sizeof("insert_id") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "num_rows", sizeof("num_rows") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "param_count", sizeof("param_count") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "field_count", sizeof("field_count") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "errno", sizeof("errno") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "error", sizeof("error") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "error_list", sizeof("error_list") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "sqlstate", sizeof("sqlstate") - 1, ZEND_ACC_PUBLIC); - zend_declare_property_null(ce, "id", sizeof("id") - 1, ZEND_ACC_PUBLIC); - zend_hash_add_ptr(&classes, ce->name, &mysqli_stmt_properties); + zend_hash_add_ptr(&classes, mysqli_stmt_class_entry->name, &mysqli_stmt_properties); /* mysqli_options */ REGISTER_LONG_CONSTANT("MYSQLI_READ_DEFAULT_GROUP", MYSQL_READ_DEFAULT_GROUP, CONST_CS | CONST_PERSISTENT); diff --git a/ext/mysqli/mysqli.stub.php b/ext/mysqli/mysqli.stub.php index 0fa4e194b7..7bb10b3aa3 100644 --- a/ext/mysqli/mysqli.stub.php +++ b/ext/mysqli/mysqli.stub.php @@ -1,13 +1,81 @@ ce_flags |= ZEND_ACC_FINAL; + + zval property_client_info_default_value; + ZVAL_NULL(&property_client_info_default_value); + zend_string *property_client_info_name = zend_string_init("client_info", sizeof("client_info") - 1, 1); + zend_declare_property_ex(class_entry, property_client_info_name, &property_client_info_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_client_info_name); + + zval property_client_version_default_value; + ZVAL_NULL(&property_client_version_default_value); + zend_string *property_client_version_name = zend_string_init("client_version", sizeof("client_version") - 1, 1); + zend_declare_property_ex(class_entry, property_client_version_name, &property_client_version_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_client_version_name); + + zval property_driver_version_default_value; + ZVAL_NULL(&property_driver_version_default_value); + zend_string *property_driver_version_name = zend_string_init("driver_version", sizeof("driver_version") - 1, 1); + zend_declare_property_ex(class_entry, property_driver_version_name, &property_driver_version_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_driver_version_name); + + zval property_reconnect_default_value; + ZVAL_NULL(&property_reconnect_default_value); + zend_string *property_reconnect_name = zend_string_init("reconnect", sizeof("reconnect") - 1, 1); + zend_declare_property_ex(class_entry, property_reconnect_name, &property_reconnect_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_reconnect_name); + + zval property_report_mode_default_value; + ZVAL_NULL(&property_report_mode_default_value); + zend_string *property_report_mode_name = zend_string_init("report_mode", sizeof("report_mode") - 1, 1); + zend_declare_property_ex(class_entry, property_report_mode_name, &property_report_mode_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_report_mode_name); + + return class_entry; +} + +static zend_class_entry *register_class_mysqli(void) +{ + zend_class_entry ce, *class_entry; + + INIT_CLASS_ENTRY(ce, "mysqli", class_mysqli_methods); + class_entry = zend_register_internal_class_ex(&ce, NULL); + + zval property_affected_rows_default_value; + ZVAL_NULL(&property_affected_rows_default_value); + zend_string *property_affected_rows_name = zend_string_init("affected_rows", sizeof("affected_rows") - 1, 1); + zend_declare_property_ex(class_entry, property_affected_rows_name, &property_affected_rows_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_affected_rows_name); + + zval property_client_info_default_value; + ZVAL_NULL(&property_client_info_default_value); + zend_string *property_client_info_name = zend_string_init("client_info", sizeof("client_info") - 1, 1); + zend_declare_property_ex(class_entry, property_client_info_name, &property_client_info_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_client_info_name); + + zval property_client_version_default_value; + ZVAL_NULL(&property_client_version_default_value); + zend_string *property_client_version_name = zend_string_init("client_version", sizeof("client_version") - 1, 1); + zend_declare_property_ex(class_entry, property_client_version_name, &property_client_version_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_client_version_name); + + zval property_connect_errno_default_value; + ZVAL_NULL(&property_connect_errno_default_value); + zend_string *property_connect_errno_name = zend_string_init("connect_errno", sizeof("connect_errno") - 1, 1); + zend_declare_property_ex(class_entry, property_connect_errno_name, &property_connect_errno_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_connect_errno_name); + + zval property_connect_error_default_value; + ZVAL_NULL(&property_connect_error_default_value); + zend_string *property_connect_error_name = zend_string_init("connect_error", sizeof("connect_error") - 1, 1); + zend_declare_property_ex(class_entry, property_connect_error_name, &property_connect_error_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_connect_error_name); + + zval property_errno_default_value; + ZVAL_NULL(&property_errno_default_value); + zend_string *property_errno_name = zend_string_init("errno", sizeof("errno") - 1, 1); + zend_declare_property_ex(class_entry, property_errno_name, &property_errno_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_errno_name); + + zval property_error_default_value; + ZVAL_NULL(&property_error_default_value); + zend_string *property_error_name = zend_string_init("error", sizeof("error") - 1, 1); + zend_declare_property_ex(class_entry, property_error_name, &property_error_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_error_name); + + zval property_error_list_default_value; + ZVAL_NULL(&property_error_list_default_value); + zend_string *property_error_list_name = zend_string_init("error_list", sizeof("error_list") - 1, 1); + zend_declare_property_ex(class_entry, property_error_list_name, &property_error_list_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_error_list_name); + + zval property_field_count_default_value; + ZVAL_NULL(&property_field_count_default_value); + zend_string *property_field_count_name = zend_string_init("field_count", sizeof("field_count") - 1, 1); + zend_declare_property_ex(class_entry, property_field_count_name, &property_field_count_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_field_count_name); + + zval property_host_info_default_value; + ZVAL_NULL(&property_host_info_default_value); + zend_string *property_host_info_name = zend_string_init("host_info", sizeof("host_info") - 1, 1); + zend_declare_property_ex(class_entry, property_host_info_name, &property_host_info_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_host_info_name); + + zval property_info_default_value; + ZVAL_NULL(&property_info_default_value); + zend_string *property_info_name = zend_string_init("info", sizeof("info") - 1, 1); + zend_declare_property_ex(class_entry, property_info_name, &property_info_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_info_name); + + zval property_insert_id_default_value; + ZVAL_NULL(&property_insert_id_default_value); + zend_string *property_insert_id_name = zend_string_init("insert_id", sizeof("insert_id") - 1, 1); + zend_declare_property_ex(class_entry, property_insert_id_name, &property_insert_id_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_insert_id_name); + + zval property_server_info_default_value; + ZVAL_NULL(&property_server_info_default_value); + zend_string *property_server_info_name = zend_string_init("server_info", sizeof("server_info") - 1, 1); + zend_declare_property_ex(class_entry, property_server_info_name, &property_server_info_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_server_info_name); + + zval property_server_version_default_value; + ZVAL_NULL(&property_server_version_default_value); + zend_string *property_server_version_name = zend_string_init("server_version", sizeof("server_version") - 1, 1); + zend_declare_property_ex(class_entry, property_server_version_name, &property_server_version_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_server_version_name); + + zval property_sqlstate_default_value; + ZVAL_NULL(&property_sqlstate_default_value); + zend_string *property_sqlstate_name = zend_string_init("sqlstate", sizeof("sqlstate") - 1, 1); + zend_declare_property_ex(class_entry, property_sqlstate_name, &property_sqlstate_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_sqlstate_name); + + zval property_protocol_version_default_value; + ZVAL_NULL(&property_protocol_version_default_value); + zend_string *property_protocol_version_name = zend_string_init("protocol_version", sizeof("protocol_version") - 1, 1); + zend_declare_property_ex(class_entry, property_protocol_version_name, &property_protocol_version_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_protocol_version_name); + + zval property_thread_id_default_value; + ZVAL_NULL(&property_thread_id_default_value); + zend_string *property_thread_id_name = zend_string_init("thread_id", sizeof("thread_id") - 1, 1); + zend_declare_property_ex(class_entry, property_thread_id_name, &property_thread_id_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_thread_id_name); + + zval property_warning_count_default_value; + ZVAL_NULL(&property_warning_count_default_value); + zend_string *property_warning_count_name = zend_string_init("warning_count", sizeof("warning_count") - 1, 1); + zend_declare_property_ex(class_entry, property_warning_count_name, &property_warning_count_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_warning_count_name); + + return class_entry; +} + +static zend_class_entry *register_class_mysqli_result(zend_class_entry *class_entry_IteratorAggregate) +{ + zend_class_entry ce, *class_entry; + + INIT_CLASS_ENTRY(ce, "mysqli_result", class_mysqli_result_methods); + class_entry = zend_register_internal_class_ex(&ce, NULL); + zend_class_implements(class_entry, 1, class_entry_IteratorAggregate); + + zval property_current_field_default_value; + ZVAL_NULL(&property_current_field_default_value); + zend_string *property_current_field_name = zend_string_init("current_field", sizeof("current_field") - 1, 1); + zend_declare_property_ex(class_entry, property_current_field_name, &property_current_field_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_current_field_name); + + zval property_field_count_default_value; + ZVAL_NULL(&property_field_count_default_value); + zend_string *property_field_count_name = zend_string_init("field_count", sizeof("field_count") - 1, 1); + zend_declare_property_ex(class_entry, property_field_count_name, &property_field_count_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_field_count_name); + + zval property_lengths_default_value; + ZVAL_NULL(&property_lengths_default_value); + zend_string *property_lengths_name = zend_string_init("lengths", sizeof("lengths") - 1, 1); + zend_declare_property_ex(class_entry, property_lengths_name, &property_lengths_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_lengths_name); + + zval property_num_rows_default_value; + ZVAL_NULL(&property_num_rows_default_value); + zend_string *property_num_rows_name = zend_string_init("num_rows", sizeof("num_rows") - 1, 1); + zend_declare_property_ex(class_entry, property_num_rows_name, &property_num_rows_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_num_rows_name); + + zval property_type_default_value; + ZVAL_NULL(&property_type_default_value); + zend_string *property_type_name = zend_string_init("type", sizeof("type") - 1, 1); + zend_declare_property_ex(class_entry, property_type_name, &property_type_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_type_name); + + return class_entry; +} + +static zend_class_entry *register_class_mysqli_stmt(void) +{ + zend_class_entry ce, *class_entry; + + INIT_CLASS_ENTRY(ce, "mysqli_stmt", class_mysqli_stmt_methods); + class_entry = zend_register_internal_class_ex(&ce, NULL); + + zval property_affected_rows_default_value; + ZVAL_NULL(&property_affected_rows_default_value); + zend_string *property_affected_rows_name = zend_string_init("affected_rows", sizeof("affected_rows") - 1, 1); + zend_declare_property_ex(class_entry, property_affected_rows_name, &property_affected_rows_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_affected_rows_name); + + zval property_insert_id_default_value; + ZVAL_NULL(&property_insert_id_default_value); + zend_string *property_insert_id_name = zend_string_init("insert_id", sizeof("insert_id") - 1, 1); + zend_declare_property_ex(class_entry, property_insert_id_name, &property_insert_id_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_insert_id_name); + + zval property_num_rows_default_value; + ZVAL_NULL(&property_num_rows_default_value); + zend_string *property_num_rows_name = zend_string_init("num_rows", sizeof("num_rows") - 1, 1); + zend_declare_property_ex(class_entry, property_num_rows_name, &property_num_rows_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_num_rows_name); + + zval property_param_count_default_value; + ZVAL_NULL(&property_param_count_default_value); + zend_string *property_param_count_name = zend_string_init("param_count", sizeof("param_count") - 1, 1); + zend_declare_property_ex(class_entry, property_param_count_name, &property_param_count_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_param_count_name); + + zval property_field_count_default_value; + ZVAL_NULL(&property_field_count_default_value); + zend_string *property_field_count_name = zend_string_init("field_count", sizeof("field_count") - 1, 1); + zend_declare_property_ex(class_entry, property_field_count_name, &property_field_count_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_field_count_name); + + zval property_errno_default_value; + ZVAL_NULL(&property_errno_default_value); + zend_string *property_errno_name = zend_string_init("errno", sizeof("errno") - 1, 1); + zend_declare_property_ex(class_entry, property_errno_name, &property_errno_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_errno_name); + + zval property_error_default_value; + ZVAL_NULL(&property_error_default_value); + zend_string *property_error_name = zend_string_init("error", sizeof("error") - 1, 1); + zend_declare_property_ex(class_entry, property_error_name, &property_error_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_error_name); + + zval property_error_list_default_value; + ZVAL_NULL(&property_error_list_default_value); + zend_string *property_error_list_name = zend_string_init("error_list", sizeof("error_list") - 1, 1); + zend_declare_property_ex(class_entry, property_error_list_name, &property_error_list_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_error_list_name); + + zval property_sqlstate_default_value; + ZVAL_NULL(&property_sqlstate_default_value); + zend_string *property_sqlstate_name = zend_string_init("sqlstate", sizeof("sqlstate") - 1, 1); + zend_declare_property_ex(class_entry, property_sqlstate_name, &property_sqlstate_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_sqlstate_name); + + zval property_id_default_value; + ZVAL_NULL(&property_id_default_value); + zend_string *property_id_name = zend_string_init("id", sizeof("id") - 1, 1); + zend_declare_property_ex(class_entry, property_id_name, &property_id_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_id_name); + + return class_entry; +} + +static zend_class_entry *register_class_mysqli_warning(void) +{ + zend_class_entry ce, *class_entry; + + INIT_CLASS_ENTRY(ce, "mysqli_warning", class_mysqli_warning_methods); + class_entry = zend_register_internal_class_ex(&ce, NULL); + class_entry->ce_flags |= ZEND_ACC_FINAL; + + zval property_message_default_value; + ZVAL_NULL(&property_message_default_value); + zend_string *property_message_name = zend_string_init("message", sizeof("message") - 1, 1); + zend_declare_property_ex(class_entry, property_message_name, &property_message_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_message_name); + + zval property_sqlstate_default_value; + ZVAL_NULL(&property_sqlstate_default_value); + zend_string *property_sqlstate_name = zend_string_init("sqlstate", sizeof("sqlstate") - 1, 1); + zend_declare_property_ex(class_entry, property_sqlstate_name, &property_sqlstate_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_sqlstate_name); + + zval property_errno_default_value; + ZVAL_NULL(&property_errno_default_value); + zend_string *property_errno_name = zend_string_init("errno", sizeof("errno") - 1, 1); + zend_declare_property_ex(class_entry, property_errno_name, &property_errno_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_errno_name); + + return class_entry; +} + +static zend_class_entry *register_class_mysqli_sql_exception(zend_class_entry *class_entry_RuntimeException) +{ + zend_class_entry ce, *class_entry; + + INIT_CLASS_ENTRY(ce, "mysqli_sql_exception", class_mysqli_sql_exception_methods); + class_entry = zend_register_internal_class_ex(&ce, class_entry_RuntimeException); + class_entry->ce_flags |= ZEND_ACC_FINAL; + + zval property_sqlstate_default_value; + zend_string *property_sqlstate_default_value_str = zend_string_init("00000", sizeof("00000") - 1, 1); + ZVAL_STR(&property_sqlstate_default_value, property_sqlstate_default_value_str); + zend_string *property_sqlstate_name = zend_string_init("sqlstate", sizeof("sqlstate") - 1, 1); + zend_declare_property_ex(class_entry, property_sqlstate_name, &property_sqlstate_default_value, ZEND_ACC_PROTECTED, NULL); + zend_string_release(property_sqlstate_name); + + return class_entry; +} diff --git a/ext/mysqli/php_mysqli_structs.h b/ext/mysqli/php_mysqli_structs.h index 6ab9615985..a39e68b276 100644 --- a/ext/mysqli/php_mysqli_structs.h +++ b/ext/mysqli/php_mysqli_structs.h @@ -186,13 +186,6 @@ extern void php_mysqli_fetch_into_hash_aux(zval *return_value, MYSQL_RES * resul mysql->multi_query = 1; \ } -#define REGISTER_MYSQLI_CLASS_ENTRY(name, mysqli_entry, class_functions) { \ - zend_class_entry ce; \ - INIT_CLASS_ENTRY(ce, name,class_functions); \ - ce.create_object = mysqli_objects_new; \ - mysqli_entry = zend_register_internal_class(&ce); \ -} \ - #define MYSQLI_REGISTER_RESOURCE_EX(__ptr, __zval) \ (Z_MYSQLI_P(__zval))->ptr = __ptr; -- cgit v1.2.1