diff --git a/mxq_group.h b/mxq_group.h index 3e2ff59..8ab438d 100644 --- a/mxq_group.h +++ b/mxq_group.h @@ -59,6 +59,9 @@ struct mxq_group { #define MXQ_GROUP_FLAG_CLOSED (1<<0) +#define MXQ_GROUP_FLAG_HAS_DEPENDENCY (1<<1) +#define MXQ_GROUP_FLAG_IS_DEPENDENCY (1<<2) + void mxq_group_free_content(struct mxq_group *g); inline uint64_t mxq_group_jobs_done(struct mxq_group *g); diff --git a/mxqadmin.c b/mxqadmin.c index 5b7d3de..55d64bc 100644 --- a/mxqadmin.c +++ b/mxqadmin.c @@ -118,8 +118,10 @@ static int update_group_flags_reopen(struct mx_mysql *mysql, uint64_t group_id, struct mx_mysql_stmt *stmt = NULL; unsigned long long num_rows = 0; int res; + uint64_t flagsnottobeset; uint64_t newflags = 0; + flagsnottobeset = MXQ_GROUP_FLAG_IS_DEPENDENCY; newflags |= MXQ_GROUP_FLAG_CLOSED; stmt = mx_mysql_statement_prepare(mysql, @@ -127,6 +129,7 @@ static int update_group_flags_reopen(struct mx_mysql *mysql, uint64_t group_id, " group_flags = group_flags & ~(?)" " WHERE group_id = ?" " AND user_uid = ?" + " AND group_flags & ? = 0" ); if (!stmt) { mx_log_err("mx_mysql_statement_prepare(): %m"); @@ -136,6 +139,7 @@ static int update_group_flags_reopen(struct mx_mysql *mysql, uint64_t group_id, res = mx_mysql_statement_param_bind(stmt, 0, uint64, &(newflags)); res += mx_mysql_statement_param_bind(stmt, 1, uint64, &(group_id)); res += mx_mysql_statement_param_bind(stmt, 2, uint32, &(user_uid)); + res += mx_mysql_statement_param_bind(stmt, 3, uint64, &(flagsnottobeset)); assert(res == 0); res = mx_mysql_statement_execute(stmt, &num_rows); diff --git a/mysql/alter_tables_0.13.0.sql b/mysql/alter_tables_0.13.0.sql new file mode 100644 index 0000000..b2046be --- /dev/null +++ b/mysql/alter_tables_0.13.0.sql @@ -0,0 +1,5 @@ +ALTER TABLE mxq_group + ADD COLUMN ( + depends_on_group INT8 UNSIGNED NULL DEFAULT NULL, + dependency_of_group INT8 UNSIGNED NULL DEFAULT NULL + ); diff --git a/mysql/create_tables.sql b/mysql/create_tables.sql index d134ab5..30365ce 100644 --- a/mysql/create_tables.sql +++ b/mysql/create_tables.sql @@ -53,6 +53,9 @@ CREATE TABLE IF NOT EXISTS mxq_group ( stats_total_real_sec_finished INT8 UNSIGNED NOT NULL DEFAULT 0, stats_total_wait_sec_finished INT8 UNSIGNED NOT NULL DEFAULT 0, + depends_on_group INT8 UNSIGNED NULL DEFAULT NULL, + dependency_of_group INT8 UNSIGNED NULL DEFAULT NULL, + INDEX(group_id), INDEX(group_name) );