summaryrefslogtreecommitdiff
path: root/ext/mysqli/mysqli_prop.c
diff options
context:
space:
mode:
authorGeorg Richter <georg@php.net>2003-11-22 21:20:07 +0000
committerGeorg Richter <georg@php.net>2003-11-22 21:20:07 +0000
commit230b207849e883a08e361b250eb4a0fd367b3e01 (patch)
tree65651b4158f90b9c0b31e3703a09d089eae7336f /ext/mysqli/mysqli_prop.c
parent28b6c35d80bcdaab0cce5652550f2233c4e9577b (diff)
downloadphp-git-230b207849e883a08e361b250eb4a0fd367b3e01.tar.gz
- Added multiquery support:
mysqli_multi_query mysqli_more_results mysqli_next_results - added read-only properties (and removed methods) object mysql affected_rows client_flags client_version errno, error, host, host_info, info server_capabilities, server_version sqlstate, port, protocol_version, server_language thread_id, user, warning_count object result current_field, field_count, lengths, num_rows, type object stmt query, param_count, field_count, id, errno, error, sqlstate - added constructor - minor fixes, prototypes
Diffstat (limited to 'ext/mysqli/mysqli_prop.c')
-rw-r--r--ext/mysqli/mysqli_prop.c181
1 files changed, 181 insertions, 0 deletions
diff --git a/ext/mysqli/mysqli_prop.c b/ext/mysqli/mysqli_prop.c
new file mode 100644
index 0000000000..cfb2fa2c91
--- /dev/null
+++ b/ext/mysqli/mysqli_prop.c
@@ -0,0 +1,181 @@
+/*
+ +----------------------------------------------------------------------+
+ | PHP Version 5 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997-2002 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.0 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | http://www.php.net/license/3_0.txt. |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@php.net so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Author: Georg Richter <georg@php.net> |
+ +----------------------------------------------------------------------+
+
+ $Id$
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <signal.h>
+
+#include "php.h"
+#include "php_ini.h"
+#include "ext/standard/info.h"
+#include "php_mysqli.h"
+
+#define MYSQLI_MAP_PROPERTY_LONG(__func, __type, __val)\
+int __func(mysqli_object *obj, zval **retval TSRMLS_DC) \
+{\
+ __type *p = (__type *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;\
+ ALLOC_ZVAL(*retval);\
+ if (!p) {\
+ ZVAL_NULL(*retval);\
+ } else {\
+ ZVAL_LONG(*retval, (long)p->__val);\
+ }\
+ return SUCCESS;\
+}\
+
+#define MYSQLI_MAP_PROPERTY_STRING(__func, __type, __val)\
+int __func(mysqli_object *obj, zval **retval TSRMLS_DC) \
+{\
+ __type *p = (__type *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;\
+ ALLOC_ZVAL(*retval);\
+ if (!p) {\
+ ZVAL_NULL(*retval);\
+ } else {\
+ if (!p->__val) {\
+ ZVAL_NULL(*retval);\
+ } else {\
+ ZVAL_STRING(*retval, p->__val, 1);\
+ }\
+ }\
+ return SUCCESS;\
+}\
+
+/* {{{ property link_client_version_read */
+int link_client_version_read(mysqli_object *obj, zval **retval TSRMLS_DC) {
+ ALLOC_ZVAL(*retval);
+ ZVAL_STRING(*retval, MYSQL_SERVER_VERSION, 1);
+ return SUCCESS;
+}
+/* }}} */
+
+/* link properties */
+MYSQLI_MAP_PROPERTY_LONG(link_affected_rows_read, MYSQL, affected_rows);
+MYSQLI_MAP_PROPERTY_LONG(link_client_flags_read, MYSQL, client_flag);
+MYSQLI_MAP_PROPERTY_LONG(link_errno_read, MYSQL, net.last_errno);
+MYSQLI_MAP_PROPERTY_STRING(link_error_read, MYSQL, net.last_error);
+MYSQLI_MAP_PROPERTY_LONG(link_field_count_read, MYSQL, field_count);
+MYSQLI_MAP_PROPERTY_STRING(link_host_read, MYSQL, host);
+MYSQLI_MAP_PROPERTY_STRING(link_host_info_read, MYSQL, host_info);
+MYSQLI_MAP_PROPERTY_STRING(link_info_read, MYSQL, info);
+MYSQLI_MAP_PROPERTY_LONG(link_port_read, MYSQL, port);
+MYSQLI_MAP_PROPERTY_LONG(link_protocol_version_read, MYSQL, protocol_version);
+MYSQLI_MAP_PROPERTY_LONG(link_server_capabilities_read, MYSQL, server_capabilities);
+MYSQLI_MAP_PROPERTY_LONG(link_server_language_read, MYSQL, server_language);
+MYSQLI_MAP_PROPERTY_STRING(link_server_version_read, MYSQL, server_version);
+MYSQLI_MAP_PROPERTY_STRING(link_sqlstate_read, MYSQL, net.sqlstate);
+MYSQLI_MAP_PROPERTY_LONG(link_thread_id_read, MYSQL, thread_id);
+MYSQLI_MAP_PROPERTY_STRING(link_user_read, MYSQL, user);
+MYSQLI_MAP_PROPERTY_LONG(link_warning_count_read, MYSQL, warning_count);
+
+/* result properties */
+
+/* {{{ property result_type_read */
+int result_type_read(mysqli_object *obj, zval **retval TSRMLS_DC) {
+ MYSQL_RES *p = (MYSQL_RES *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;
+
+ ALLOC_ZVAL(*retval);
+ if (!p) {
+ ZVAL_NULL(*retval);
+ } else {
+ ZVAL_LONG(*retval, (p->data) ? MYSQLI_STORE_RESULT : MYSQLI_USE_RESULT);
+ }
+ return SUCCESS;
+}
+/* }}} */
+
+/* {{{ property result_lengths_read */
+int result_lengths_read(mysqli_object *obj, zval **retval TSRMLS_DC) {
+ MYSQL_RES *p = (MYSQL_RES *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr;
+
+ ALLOC_ZVAL(*retval);
+ if (!p || !p->field_count) {
+ ZVAL_NULL(*retval);
+ } else {
+ ulong i;
+ zval *l;
+
+ array_init(*retval);
+
+ for (i=0; i < p->field_count; i++) {
+ MAKE_STD_ZVAL(l);
+ ZVAL_LONG(l, p->lengths[i]);
+ add_index_zval(*retval, i, l);
+ }
+ }
+ return SUCCESS;
+}
+/* }}} */
+
+MYSQLI_MAP_PROPERTY_LONG(result_current_field_read, MYSQL_RES, current_field);
+MYSQLI_MAP_PROPERTY_LONG(result_field_count_read, MYSQL_RES, field_count);
+MYSQLI_MAP_PROPERTY_LONG(result_num_rows_read, MYSQL_RES, row_count);
+
+/* statement properties */
+MYSQLI_MAP_PROPERTY_STRING(stmt_query_read, MYSQL_STMT, query);
+MYSQLI_MAP_PROPERTY_LONG(stmt_param_count_read, MYSQL_STMT, param_count);
+MYSQLI_MAP_PROPERTY_LONG(stmt_field_count_read, MYSQL_STMT, field_count);
+MYSQLI_MAP_PROPERTY_LONG(stmt_id_read, MYSQL_STMT, stmt_id);
+MYSQLI_MAP_PROPERTY_LONG(stmt_errno_read, MYSQL_STMT, last_errno);
+MYSQLI_MAP_PROPERTY_STRING(stmt_error_read, MYSQL_STMT, last_error);
+MYSQLI_MAP_PROPERTY_STRING(stmt_sqlstate_read, MYSQL_STMT, sqlstate);
+
+mysqli_property_entry mysqli_link_property_entries[] = {
+ {"affected_rows", link_affected_rows_read, NULL},
+ {"client_flags", link_client_flags_read, NULL},
+ {"client_version", link_client_version_read, NULL},
+ {"errno", link_errno_read, NULL},
+ {"error", link_error_read, NULL},
+ {"field_count", link_field_count_read, NULL},
+ {"host", link_host_read, NULL},
+ {"host_info", link_host_info_read, NULL},
+ {"info", link_info_read, NULL},
+ {"server_capabilities", link_server_capabilities_read, NULL},
+ {"server_version", link_server_version_read, NULL},
+ {"sqlstate", link_sqlstate_read, NULL},
+ {"port", link_port_read, NULL},
+ {"protocol_version", link_protocol_version_read, NULL},
+ {"server_language", link_protocol_version_read, NULL},
+ {"thread_id", link_thread_id_read, NULL},
+ {"user", link_user_read, NULL},
+ {"warning_count", link_warning_count_read, NULL},
+ {NULL, NULL, NULL}
+};
+
+mysqli_property_entry mysqli_result_property_entries[] = {
+ {"current_field", result_current_field_read, NULL},
+ {"field_count", result_field_count_read, NULL},
+ {"lengths", result_lengths_read, NULL},
+ {"num_rows", result_num_rows_read, NULL},
+ {"type", result_type_read, NULL},
+ {NULL, NULL, NULL}
+};
+
+mysqli_property_entry mysqli_stmt_property_entries[] = {
+ {"query", stmt_query_read, NULL},
+ {"param_count", stmt_param_count_read, NULL},
+ {"field_count", stmt_field_count_read, NULL},
+ {"id", stmt_id_read, NULL},
+ {"errno", stmt_errno_read, NULL},
+ {"error", stmt_error_read, NULL},
+ {"sqlstate", stmt_sqlstate_read, NULL},
+ {NULL, NULL, NULL}
+};