# HG changeset patch # User Nathan Phillip Brink # Date 2010-02-18 22:37:06 # Node ID d7bff2b0cd98b9b4720bfc187fd68d587d43666a # Parent 12d457aff61120c57f84874957f3b96b0499a38d call mysql_use_result() only if needed, add column count validification diff --git a/src/server/mysql.c b/src/server/mysql.c --- a/src/server/mysql.c +++ b/src/server/mysql.c @@ -41,9 +41,9 @@ /** performs mysql query. errors will be logged to the user by this function. - @return pointer to query handle on success, NULL on failure + @return pointer to query handle on success, NULL on failure or if expected_columns=0 (no result set expected) */ -distrend_mysql_result_t mysqlQuery(distrend_mysql_conn_t conn, char *query); +distrend_mysql_result_t mysqlQuery(distrend_mysql_conn_t conn, char *query, MYSQL_FIELD_OFFSET expected_columns); /** frees mysql query result. Accepts a NULL pointer and ignores it to @@ -135,10 +135,11 @@ int mysqlDisconnect(distrend_mysql_conn_ } -distrend_mysql_result_t mysqlQuery(distrend_mysql_conn_t conn, char *query) +distrend_mysql_result_t mysqlQuery(distrend_mysql_conn_t conn, char *query, MYSQL_FIELD_OFFSET expected_columns) { MYSQL_RES *result; distrend_mysql_result_t distrenresult; + MYSQL_FIELD_OFFSET num_columns; /** pointless sanity check @@ -158,10 +159,23 @@ distrend_mysql_result_t mysqlQuery(distr fprintf(stderr, "%s\n", mysql_error(conn->mysqlconn)); fprintf(stderr,"Queried!\n"); + if(!expected_columns) + return NULL; + fprintf(stderr,"Getting results... "); result = mysql_use_result(conn->mysqlconn); + + num_columns = mysql_num_fields(result); + if(num_columns != expected_columns) + { + fprintf(stderr, "Expected %d columns, got %d for ``%s''\n", expected_columns, num_columns, query); + + mysql_free_result(result); + return NULL; + } + fprintf(stderr,"Done!\n"); - + distrenresult = malloc(sizeof(struct distrend_mysql_result)); if(!distrenresult) { @@ -208,38 +222,30 @@ int mysqlResultFree(distrend_mysql_resul void finish_frame(distrend_mysql_conn_t conn, int32_t slavekey, int32_t jobkey, int32_t framenum) { char *query; - distrend_mysql_result_t result; _distren_asprintf(&query, "CALL `distren`.`Frame_Complete`(%d,%d,%d);", slavekey, jobkey, framenum); - result = mysqlQuery(conn, query); + mysqlQuery(conn, query, 0); free(query); - - mysqlResultFree(result); } void start_frame(distrend_mysql_conn_t conn, int32_t slavekey, int32_t jobkey, int32_t framenum) { char *query; - distrend_mysql_result_t result; _distren_asprintf(&query, "CALL `distren`.`Frame_Start`(%d,%d,%d);", slavekey, jobkey, framenum); - result = mysqlQuery(conn, query); + mysqlQuery(conn, query, 0); free(query); - - mysqlResultFree(result); } int change_job_priority(distrend_mysql_conn_t conn, int32_t jobkey, int32_t newpriority) { char *query; - distrend_mysql_result_t result; _distren_asprintf(&query, "UPDATE `distren`.`Job` SET `Priority`=%d WHERE `Job_Key`=%d", newpriority, jobkey); - result = mysqlQuery(conn, query); - mysqlResultFree(result); + mysqlQuery(conn, query, 0); return 0; } @@ -252,7 +258,7 @@ int find_jobframe(distrend_mysql_conn_t _distren_asprintf(&query, "CALL `distren`.`Frame_Get`(%d);", slavekey); - result = mysqlQuery(conn, query); + result = mysqlQuery(conn, query, 2); free(query); if(!result)