int seaf_share_manager_start (SeafShareManager *mgr) { SeafDB *db = mgr->seaf->db; const char *sql; int db_type = seaf_db_type (db); if (db_type == SEAF_DB_TYPE_MYSQL) { sql = "CREATE TABLE IF NOT EXISTS SharedRepo " "(id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT," "repo_id CHAR(37) , from_email VARCHAR(255), to_email VARCHAR(255), " "permission CHAR(15), INDEX (repo_id), " "INDEX(from_email), INDEX(to_email)) ENGINE=INNODB"; if (seaf_db_query (db, sql) < 0) return -1; } else if (db_type == SEAF_DB_TYPE_SQLITE) { sql = "CREATE TABLE IF NOT EXISTS SharedRepo " "(repo_id CHAR(37) , from_email VARCHAR(255), to_email VARCHAR(255), " "permission CHAR(15))"; if (seaf_db_query (db, sql) < 0) return -1; sql = "CREATE INDEX IF NOT EXISTS RepoIdIndex on SharedRepo (repo_id)"; if (seaf_db_query (db, sql) < 0) return -1; sql = "CREATE INDEX IF NOT EXISTS FromEmailIndex on SharedRepo (from_email)"; if (seaf_db_query (db, sql) < 0) return -1; sql = "CREATE INDEX IF NOT EXISTS ToEmailIndex on SharedRepo (to_email)"; if (seaf_db_query (db, sql) < 0) return -1; } else if (db_type == SEAF_DB_TYPE_PGSQL) { sql = "CREATE TABLE IF NOT EXISTS SharedRepo " "(repo_id CHAR(36) , from_email VARCHAR(255), to_email VARCHAR(255), " "permission VARCHAR(15))"; if (seaf_db_query (db, sql) < 0) return -1; if (!pgsql_index_exists (db, "sharedrepo_repoid_idx")) { sql = "CREATE INDEX sharedrepo_repoid_idx ON SharedRepo (repo_id)"; if (seaf_db_query (db, sql) < 0) return -1; } if (!pgsql_index_exists (db, "sharedrepo_from_email_idx")) { sql = "CREATE INDEX sharedrepo_from_email_idx ON SharedRepo (from_email)"; if (seaf_db_query (db, sql) < 0) return -1; } if (!pgsql_index_exists (db, "sharedrepo_to_email_idx")) { sql = "CREATE INDEX sharedrepo_to_email_idx ON SharedRepo (to_email)"; if (seaf_db_query (db, sql) < 0) return -1; } } return 0; }
static int check_db_table (CcnetDB *db) { char *sql; int db_type = ccnet_db_type (db); if (db_type == CCNET_DB_TYPE_MYSQL) { sql = "CREATE TABLE IF NOT EXISTS `Group` (`group_id` INTEGER" " PRIMARY KEY AUTO_INCREMENT, `group_name` VARCHAR(255)," " `creator_name` VARCHAR(255), `timestamp` BIGINT)" "ENGINE=INNODB"; if (ccnet_db_query (db, sql) < 0) return -1; sql = "CREATE TABLE IF NOT EXISTS `GroupUser` (`group_id` INTEGER," " `user_name` VARCHAR(255), `is_staff` tinyint, UNIQUE INDEX" " (`group_id`, `user_name`), INDEX (`user_name`))" "ENGINE=INNODB"; if (ccnet_db_query (db, sql) < 0) return -1; } else if (db_type == CCNET_DB_TYPE_SQLITE) { sql = "CREATE TABLE IF NOT EXISTS `Group` (`group_id` INTEGER" " PRIMARY KEY AUTOINCREMENT, `group_name` VARCHAR(255)," " `creator_name` VARCHAR(255), `timestamp` BIGINT)"; if (ccnet_db_query (db, sql) < 0) return -1; sql = "CREATE TABLE IF NOT EXISTS `GroupUser` (`group_id` INTEGER, " "`user_name` VARCHAR(255), `is_staff` tinyint)"; if (ccnet_db_query (db, sql) < 0) return -1; sql = "CREATE UNIQUE INDEX IF NOT EXISTS groupid_username_indx on " "`GroupUser` (`group_id`, `user_name`)"; if (ccnet_db_query (db, sql) < 0) return -1; sql = "CREATE INDEX IF NOT EXISTS username_indx on " "`GroupUser` (`user_name`)"; if (ccnet_db_query (db, sql) < 0) return -1; } else if (db_type == CCNET_DB_TYPE_PGSQL) { sql = "CREATE TABLE IF NOT EXISTS \"Group\" (group_id SERIAL" " PRIMARY KEY, group_name VARCHAR(255)," " creator_name VARCHAR(255), timestamp BIGINT)"; if (ccnet_db_query (db, sql) < 0) return -1; sql = "CREATE TABLE IF NOT EXISTS GroupUser (group_id INTEGER," " user_name VARCHAR(255), is_staff smallint, UNIQUE " " (group_id, user_name))"; if (ccnet_db_query (db, sql) < 0) return -1; if (!pgsql_index_exists (db, "groupuser_username_idx")) { sql = "CREATE INDEX groupuser_username_idx ON GroupUser (user_name)"; if (ccnet_db_query (db, sql) < 0) return -1; } } return 0; }
static int check_db_table (CcnetDB *db) { char *sql; int db_type = ccnet_db_type (db); if (db_type == CCNET_DB_TYPE_MYSQL) { sql = "CREATE TABLE IF NOT EXISTS EmailUser (" "id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, " "email VARCHAR(255), passwd VARCHAR(256), " "is_staff BOOL NOT NULL, is_active BOOL NOT NULL, " "ctime BIGINT, UNIQUE INDEX (email))" "ENGINE=INNODB"; if (ccnet_db_query (db, sql) < 0) return -1; sql = "CREATE TABLE IF NOT EXISTS Binding (email VARCHAR(255), peer_id CHAR(41)," "UNIQUE INDEX (peer_id), INDEX (email(20)))" "ENGINE=INNODB"; if (ccnet_db_query (db, sql) < 0) return -1; sql = "CREATE TABLE IF NOT EXISTS UserRole (" "id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, " "email VARCHAR(255), role VARCHAR(255), UNIQUE INDEX (email)) " "ENGINE=INNODB"; if (ccnet_db_query (db, sql) < 0) return -1; } else if (db_type == CCNET_DB_TYPE_SQLITE) { sql = "CREATE TABLE IF NOT EXISTS EmailUser (" "id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT," "email TEXT, passwd TEXT, is_staff bool NOT NULL, " "is_active bool NOT NULL, ctime INTEGER)"; if (ccnet_db_query (db, sql) < 0) return -1; sql = "CREATE UNIQUE INDEX IF NOT EXISTS email_index on EmailUser (email)"; if (ccnet_db_query (db, sql) < 0) return -1; sql = "CREATE TABLE IF NOT EXISTS Binding (email TEXT, peer_id TEXT)"; if (ccnet_db_query (db, sql) < 0) return -1; sql = "CREATE INDEX IF NOT EXISTS email_index on Binding (email)"; if (ccnet_db_query (db, sql) < 0) return -1; sql = "CREATE UNIQUE INDEX IF NOT EXISTS peer_index on Binding (peer_id)"; if (ccnet_db_query (db, sql) < 0) return -1; sql = "CREATE TABLE IF NOT EXISTS UserRole (email TEXT, role TEXT)"; if (ccnet_db_query (db, sql) < 0) return -1; sql = "CREATE INDEX IF NOT EXISTS userrole_email_index on UserRole (email)"; if (ccnet_db_query (db, sql) < 0) return -1; sql = "CREATE UNIQUE INDEX IF NOT EXISTS userrole_userrole_index on UserRole (email, role)"; if (ccnet_db_query (db, sql) < 0) return -1; } else if (db_type == CCNET_DB_TYPE_PGSQL) { sql = "CREATE TABLE IF NOT EXISTS EmailUser (" "id SERIAL PRIMARY KEY, " "email VARCHAR(255), passwd VARCHAR(256), " "is_staff INTEGER NOT NULL, is_active INTEGER NOT NULL, " "ctime BIGINT, UNIQUE (email))"; if (ccnet_db_query (db, sql) < 0) return -1; sql = "CREATE TABLE IF NOT EXISTS Binding (email VARCHAR(255), peer_id CHAR(41)," "UNIQUE (peer_id))"; if (ccnet_db_query (db, sql) < 0) return -1; sql = "CREATE TABLE IF NOT EXISTS UserRole (email VARCHAR(255), " " role VARCHAR(255), UNIQUE (email, role))"; if (ccnet_db_query (db, sql) < 0) return -1; if (!pgsql_index_exists (db, "userrole_email_idx")) { sql = "CREATE INDEX userrole_email_idx ON UserRole (email)"; if (ccnet_db_query (db, sql) < 0) return -1; } } return 0; }