diff --git a/net/server/group-mgr.c b/net/server/group-mgr.c index 81fbd13..43bdb7e 100644 --- a/net/server/group-mgr.c +++ b/net/server/group-mgr.c @@ -130,7 +130,7 @@ static int check_db_table (CcnetGroupManager *manager, CcnetDB *db) sql = "CREATE TABLE IF NOT EXISTS GroupStructure ( " "id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT, group_id INTEGER, " - "path VARCHAR(1024), UNIQUE INDEX(group_id))ENGINE=INNODB"; + "path VARCHAR(1024), UNIQUE INDEX(group_id), UNIQUE INDEX(path))ENGINE=INNODB"; if (ccnet_db_query (db, sql) < 0) return -1; } else if (db_type == CCNET_DB_TYPE_SQLITE) { @@ -168,6 +168,12 @@ static int check_db_table (CcnetGroupManager *manager, CcnetDB *db) "path VARCHAR(1024))"; if (ccnet_db_query (db, sql) < 0) return -1; + + sql = "CREATE UNIQUE INDEX IF NOT EXISTS path_indx on " + "`GroupStructure` (`path`)"; + if (ccnet_db_query (db, sql) < 0) + return -1; + } else if (db_type == CCNET_DB_TYPE_PGSQL) { g_string_printf (group_sql, "CREATE TABLE IF NOT EXISTS \"%s\" (group_id SERIAL" @@ -200,6 +206,13 @@ static int check_db_table (CcnetGroupManager *manager, CcnetDB *db) "path VARCHAR(1024))"; if (ccnet_db_query (db, sql) < 0) return -1; + + if (!pgsql_index_exists (db, "structure_path_idx")) { + sql = "CREATE UNIQUE structure_path_idx ON GroupStructure (path)"; + if (ccnet_db_query (db, sql) < 0) + return -1; + } + } g_string_free (group_sql, TRUE);