From 3a4c6ec00224f99e8edd389e5ec54a0809aa4507 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?= <grubba@grubba.org> Date: Sat, 11 Jan 1997 21:56:53 +0100 Subject: [PATCH] error() now returns 0 if there was no error. list_fields() now returns data similar to that of mysql_result->fetch_fields(). Rev: src/modules/mysql/mysql.c:1.10 --- src/modules/mysql/mysql.c | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/src/modules/mysql/mysql.c b/src/modules/mysql/mysql.c index 601b50353b..915d1bad0a 100644 --- a/src/modules/mysql/mysql.c +++ b/src/modules/mysql/mysql.c @@ -1,5 +1,5 @@ /* - * $Id: mysql.c,v 1.9 1997/01/10 10:52:10 grubba Exp $ + * $Id: mysql.c,v 1.10 1997/01/11 20:56:53 grubba Exp $ * * SQL database functionality for Pike * @@ -59,7 +59,7 @@ typedef struct dynamic_buffer_s dynamic_buffer; * Globals */ -RCSID("$Id: mysql.c,v 1.9 1997/01/10 10:52:10 grubba Exp $"); +RCSID("$Id: mysql.c,v 1.10 1997/01/11 20:56:53 grubba Exp $"); struct program *mysql_program = NULL; @@ -188,11 +188,17 @@ static void f_insert_id(INT32 args) push_int(mysql_insert_id(PIKE_MYSQL->socket)); } -/* string error() */ +/* int|string error() */ static void f_error(INT32 args) { + char *error_msg = mysql_error(PIKE_MYSQL->socket); + pop_n_elems(args); - push_text(mysql_error(PIKE_MYSQL->socket)); + if (error_msg && *error_msg) { + push_text(error_msg); + } else { + push_int(0); + } } /* void select_db(string database) */ @@ -515,11 +521,13 @@ static void f_list_tables(INT32 args) push_object(clone(mysql_result_program, 1)); } -/* object(mysql_res) list_fields(string table, void|string wild) */ +/* array(int|mapping(string:mixed)) list_fields(string table, void|string wild) */ static void f_list_fields(INT32 args) { MYSQL *socket = PIKE_MYSQL->socket; MYSQL_RES *result; + MYSQL_FIELD *field; + int i = 0; char *table; char *wild = NULL; @@ -553,17 +561,18 @@ static void f_list_fields(INT32 args) THREADS_DISALLOW(); - if (!(PIKE_MYSQL->last_result = result)) { + if (!result) { error("mysql->list_fields(): Cannot list databases: %s\n", mysql_error(PIKE_MYSQL->socket)); } pop_n_elems(args); - push_object(fp->current_object); - fp->current_object->refs++; - - push_object(clone(mysql_result_program, 1)); + while ((field = mysql_fetch_field(result))) { + mysqlmod_parse_field(field, 1); + i++; + } + f_aggregate(i); } /* object(mysql_res) list_processes() */ @@ -627,7 +636,7 @@ void init_mysql_programs(void) start_new_program(); add_storage(sizeof(struct precompiled_mysql)); - add_function("error", f_error, "function(void:string)", OPT_EXTERNAL_DEPEND); + add_function("error", f_error, "function(void:int|string)", OPT_EXTERNAL_DEPEND); add_function("create", f_create, "function(string|void, string|void, string|void, string|void:void)", OPT_SIDE_EFFECT); add_function("affected_rows", f_affected_rows, "function(void:int)", OPT_EXTERNAL_DEPEND); add_function("insert_id", f_insert_id, "function(void:int)", OPT_EXTERNAL_DEPEND); @@ -643,7 +652,7 @@ void init_mysql_programs(void) add_function("protocol_info", f_protocol_info, "function(void:int)", OPT_EXTERNAL_DEPEND); add_function("list_dbs", f_list_dbs, "function(void|string:object)", OPT_EXTERNAL_DEPEND); add_function("list_tables", f_list_tables, "function(void|string:object)", OPT_EXTERNAL_DEPEND); - add_function("list_fields", f_list_fields, "function(string, void|string:object)", OPT_EXTERNAL_DEPEND); + add_function("list_fields", f_list_fields, "function(string, void|string:array(int|mapping(string:mixed)))", OPT_EXTERNAL_DEPEND); add_function("list_processes", f_list_processes, "function(void|string:object)", OPT_EXTERNAL_DEPEND); set_init_callback(init_mysql_struct); -- GitLab