From ce4ab06fab7fa7989caf914329067132b4dbe897 Mon Sep 17 00:00:00 2001 From: Marius Tolzmann Date: Fri, 22 May 2015 17:12:10 +0200 Subject: [PATCH] mx_mysql: Redesign mx_mysql_statement_prepare() --- mx_mysql.c | 52 ++++++++++++++++++++++++++++++---------------------- mx_mysql.h | 2 +- mxqsub.c | 30 +++++++++--------------------- 3 files changed, 40 insertions(+), 44 deletions(-) diff --git a/mx_mysql.c b/mx_mysql.c index ece305c..d61fb8e 100644 --- a/mx_mysql.c +++ b/mx_mysql.c @@ -1110,38 +1110,46 @@ int mx_mysql_bind_init(struct mx_mysql_bind *bind, unsigned long count) return 0; } -int mx_mysql_statement_prepare(struct mx_mysql_stmt *stmt, char *statement) +struct mx_mysql_stmt *mx_mysql_statement_prepare(struct mx_mysql *mysql, char *statement) { int res; + struct mx_mysql_stmt *stmt = NULL; - mx_assert_return_minus_errno(stmt, EINVAL); + mx_assert_return_NULL(mysql, EINVAL); + mx_assert_return_NULL(statement, EINVAL); + mx_assert_return_NULL(*statement, EINVAL); - res = mx__mysql_stmt_prepare(stmt, statement); - mx_mysql_assert_usage_ok(res); + res = mx_mysql_statement_init(mysql, &stmt); if (res < 0) - return res; + return NULL; - res = mx_mysql_stmt_param_count_set(stmt); - mx_mysql_assert_usage_ok(res); - if (res < 0) - return res; + while (1) { + res = mx__mysql_stmt_prepare(stmt, statement); + if (res < 0) + break; - res = mx_mysql_stmt_field_count_set(stmt); - mx_mysql_assert_usage_ok(res); - if (res < 0) - return res; + res = mx_mysql_stmt_param_count_set(stmt); + if (res < 0) + break; - res = mx_mysql_bind_init(&stmt->param, stmt->param_count); - mx_mysql_assert_usage_ok(res); - if (res < 0) - return res; + res = mx_mysql_stmt_field_count_set(stmt); + if (res < 0) + break; - res = mx_mysql_bind_init(&stmt->result, stmt->field_count); - mx_mysql_assert_usage_ok(res); - if (res < 0) - return res; + res = mx_mysql_bind_init(&stmt->param, stmt->param_count); + if (res < 0) + break; - return 0; + res = mx_mysql_bind_init(&stmt->result, stmt->field_count); + if (res < 0) + break; + + return stmt; + }; + + mx_mysql_statement_close(&stmt); + + return NULL; } int mx_mysql_statement_close(struct mx_mysql_stmt **stmt) diff --git a/mx_mysql.h b/mx_mysql.h index 02e8348..04ececb 100644 --- a/mx_mysql.h +++ b/mx_mysql.h @@ -114,7 +114,7 @@ int mx_mysql_end(void); int mx_mysql_finish(struct mx_mysql **mysql); int mx_mysql_statement_init(struct mx_mysql *mysql, struct mx_mysql_stmt **stmt); -int mx_mysql_statement_prepare(struct mx_mysql_stmt *stmt, char *statement); +struct mx_mysql_stmt *mx_mysql_statement_prepare(struct mx_mysql *mysql, char *statement); int mx_mysql_statement_execute(struct mx_mysql_stmt *stmt, unsigned long long *count); int mx_mysql_statement_insert_id(struct mx_mysql_stmt *stmt, unsigned long long int *id); diff --git a/mxqsub.c b/mxqsub.c index 0361a6a..3adfe06 100644 --- a/mxqsub.c +++ b/mxqsub.c @@ -164,11 +164,7 @@ static int load_group_id(struct mx_mysql *mysql, struct mxq_group *g) assert(g->job_command); assert(*g->job_command); assert(g->job_threads); assert(g->job_memory); assert(g->job_time); - res = mx_mysql_statement_init(mysql, &stmt); - if (res < 0) - return res; - - res = mx_mysql_statement_prepare(stmt, + stmt = mx_mysql_statement_prepare(mysql, "SELECT" " group_id" " FROM mxq_group " @@ -185,9 +181,9 @@ static int load_group_id(struct mx_mysql *mysql, struct mxq_group *g) " AND group_status = 0" " ORDER BY group_id " " LIMIT 1"); - if (res < 0) { + if (!stmt) { mx_log_err("mx_mysql_statement_prepare(): %m"); - return res; + return -errno; } res = mx_mysql_statement_param_bind(stmt, 0, string, &(g->group_name)); @@ -238,11 +234,7 @@ static int add_group(struct mx_mysql *mysql, struct mxq_group *g) assert(g->job_command); assert(*g->job_command); assert(g->job_threads); assert(g->job_memory); assert(g->job_time); - res = mx_mysql_statement_init(mysql, &stmt); - if (res < 0) - return res; - - res = mx_mysql_statement_prepare(stmt, + stmt = mx_mysql_statement_prepare(mysql, "INSERT INTO mxq_group SET" " group_name = ?," @@ -257,9 +249,9 @@ static int add_group(struct mx_mysql *mysql, struct mxq_group *g) " job_memory = ?," " job_time = ?," " group_priority = ?"); - if (res < 0) { + if (!stmt) { mx_log_err("mx_mysql_statement_prepare(): %m"); - return res; + return -errno; } res = mx_mysql_statement_param_bind(stmt, 0, string, &(g->group_name)); @@ -308,11 +300,7 @@ static int add_job(struct mx_mysql *mysql, struct mxq_job *j) assert(j->job_umask); assert(j->host_submit); assert(*j->host_submit); - res = mx_mysql_statement_init(mysql, &stmt); - if (res < 0) - return res; - - res = mx_mysql_statement_prepare(stmt, + stmt = mx_mysql_statement_prepare(mysql, "INSERT INTO mxq_job SET" " job_priority = ?," @@ -331,10 +319,10 @@ static int add_job(struct mx_mysql *mysql, struct mxq_job *j) " job_flags = ?" ); - if (res < 0) { + if (!stmt) { mx_log_err("mx_mysql_statement_prepare(): %m"); mx_mysql_statement_close(&stmt); - return res; + return -errno; } res = mx_mysql_statement_param_bind(stmt, 0, uint16, &(j->job_priority));