mirror of
https://github.com/haiwen/seafile-server.git
synced 2025-09-06 09:50:20 +00:00
Support dm8 database
This commit is contained in:
@@ -380,7 +380,7 @@ seaf_repo_manager_add_repo (SeafRepoManager *manager,
|
||||
static int
|
||||
add_deleted_repo_record (SeafRepoManager *mgr, const char *repo_id)
|
||||
{
|
||||
if (seaf_db_type(seaf->db) == SEAF_DB_TYPE_PGSQL) {
|
||||
if (seaf_db_type(seaf->db) == SEAF_DB_TYPE_PGSQL || seaf_db_type(seaf->db) == SEAF_DB_TYPE_DM) {
|
||||
gboolean exists, err;
|
||||
|
||||
exists = seaf_db_statement_exists (seaf->db,
|
||||
@@ -803,7 +803,7 @@ seaf_repo_manager_repo_exists (SeafRepoManager *manager, const gchar *id)
|
||||
static int
|
||||
save_branch_repo_map (SeafRepoManager *manager, SeafBranch *branch)
|
||||
{
|
||||
if (seaf_db_type(seaf->db) == SEAF_DB_TYPE_PGSQL) {
|
||||
if (seaf_db_type(seaf->db) == SEAF_DB_TYPE_PGSQL || seaf_db_type(seaf->db) == SEAF_DB_TYPE_DM) {
|
||||
gboolean exists, err;
|
||||
int rc;
|
||||
|
||||
@@ -1240,6 +1240,160 @@ create_tables_sqlite (SeafRepoManager *mgr)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
create_tables_dm (SeafRepoManager *mgr)
|
||||
{
|
||||
SeafDB *db = mgr->seaf->db;
|
||||
char *sql;
|
||||
|
||||
sql = "CREATE TABLE IF NOT EXISTS Repo (repo_id VARCHAR(37) PRIMARY KEY)";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
/* Owner */
|
||||
|
||||
sql = "CREATE TABLE IF NOT EXISTS RepoOwner ("
|
||||
"repo_id VARCHAR(37) PRIMARY KEY, "
|
||||
"owner_id VARCHAR(255))";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
/* Group repo */
|
||||
|
||||
sql = "CREATE TABLE IF NOT EXISTS RepoGroup (repo_id VARCHAR(37), "
|
||||
"group_id INTEGER, user_name VARCHAR(255), permission VARCHAR(15))";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
sql = "CREATE UNIQUE INDEX IF NOT EXISTS groupid_repoid_indx on "
|
||||
"RepoGroup (group_id, repo_id)";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
sql = "CREATE INDEX IF NOT EXISTS repogroup_repoid_index on "
|
||||
"RepoGroup (repo_id)";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
sql = "CREATE INDEX IF NOT EXISTS repogroup_username_indx on "
|
||||
"RepoGroup (user_name)";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
/* Public repo */
|
||||
|
||||
sql = "CREATE TABLE IF NOT EXISTS InnerPubRepo ("
|
||||
"repo_id VARCHAR(37) PRIMARY KEY,"
|
||||
"permission VARCHAR(15))";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
sql = "CREATE TABLE IF NOT EXISTS RepoUserToken ("
|
||||
"repo_id VARCHAR(37), "
|
||||
"email VARCHAR(255), "
|
||||
"token VARCHAR(41))";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
sql = "CREATE UNIQUE INDEX IF NOT EXISTS repo_token_indx on "
|
||||
"RepoUserToken (repo_id, token)";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
sql = "CREATE INDEX IF NOT EXISTS repo_token_email_indx on "
|
||||
"RepoUserToken (email)";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
sql = "CREATE TABLE IF NOT EXISTS RepoTokenPeerInfo ("
|
||||
"token VARCHAR(41) PRIMARY KEY, "
|
||||
"peer_id VARCHAR(41), "
|
||||
"peer_ip VARCHAR(50), "
|
||||
"peer_name VARCHAR(255), "
|
||||
"sync_time BIGINT, "
|
||||
"client_ver VARCHAR(20))";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
sql = "CREATE TABLE IF NOT EXISTS RepoHead ("
|
||||
"repo_id VARCHAR(37) PRIMARY KEY, branch_name VARCHAR(10))";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
sql = "CREATE TABLE IF NOT EXISTS RepoSize ("
|
||||
"repo_id VARCHAR(37) PRIMARY KEY,"
|
||||
"size BIGINT,"
|
||||
"head_id VARCHAR(41))";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
sql = "CREATE TABLE IF NOT EXISTS RepoHistoryLimit ("
|
||||
"repo_id VARCHAR(37) PRIMARY KEY, days INTEGER)";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
sql = "CREATE TABLE IF NOT EXISTS RepoValidSince ("
|
||||
"repo_id VARCHAR(37) PRIMARY KEY, timestamp BIGINT)";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
sql = "CREATE TABLE IF NOT EXISTS WebAP (repo_id VARCHAR(37) PRIMARY KEY, "
|
||||
"access_property VARCHAR(10))";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
sql = "CREATE TABLE IF NOT EXISTS VirtualRepo (repo_id VARCHAR(36) PRIMARY KEY,"
|
||||
"origin_repo VARCHAR(36), path TEXT, base_commit VARCHAR(40))";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
sql = "CREATE INDEX IF NOT EXISTS virtualrepo_origin_repo_idx "
|
||||
"ON VirtualRepo (origin_repo)";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
sql = "CREATE TABLE IF NOT EXISTS GarbageRepos (repo_id VARCHAR(36) PRIMARY KEY)";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
sql = "CREATE TABLE IF NOT EXISTS RepoTrash (repo_id VARCHAR(36) PRIMARY KEY,"
|
||||
"repo_name VARCHAR(255), head_id VARCHAR(40), owner_id VARCHAR(255), size BIGINT,"
|
||||
"org_id INTEGER, del_time BIGINT)";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
sql = "CREATE INDEX IF NOT EXISTS repotrash_owner_id_idx ON RepoTrash(owner_id)";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
sql = "CREATE INDEX IF NOT EXISTS repotrash_org_id_idx ON RepoTrash(org_id)";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
sql = "CREATE TABLE IF NOT EXISTS RepoFileCount ("
|
||||
"repo_id VARCHAR(36) PRIMARY KEY,"
|
||||
"file_count BIGINT)";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
sql = "CREATE TABLE IF NOT EXISTS RepoInfo (repo_id VARCHAR(36) PRIMARY KEY, "
|
||||
"name VARCHAR(255) NOT NULL, update_time INTEGER, version INTEGER, "
|
||||
"is_encrypted INTEGER, last_modifier VARCHAR(255), status INTEGER DEFAULT 0)";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
sql = "CREATE TABLE IF NOT EXISTS WebUploadTempFiles (repo_id VARCHAR(40) NOT NULL, "
|
||||
"file_path TEXT NOT NULL, tmp_file_path TEXT NOT NULL)";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
sql = "CREATE INDEX IF NOT EXISTS webuploadtempfiles_repo_id_idx ON WebUploadTempFiles(repo_id)";
|
||||
if (seaf_db_query (db, sql) < 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* static int */
|
||||
/* create_tables_pgsql (SeafRepoManager *mgr) */
|
||||
/* { */
|
||||
@@ -1402,6 +1556,8 @@ create_db_tables_if_not_exist (SeafRepoManager *mgr)
|
||||
return create_tables_mysql (mgr);
|
||||
else if (db_type == SEAF_DB_TYPE_SQLITE)
|
||||
return create_tables_sqlite (mgr);
|
||||
else if (db_type == SEAF_DB_TYPE_DM)
|
||||
return create_tables_dm (mgr);
|
||||
/* else if (db_type == SEAF_DB_TYPE_PGSQL) */
|
||||
/* return create_tables_pgsql (mgr); */
|
||||
|
||||
@@ -1745,7 +1901,7 @@ seaf_repo_manager_delete_repo_tokens_by_peer_id (SeafRepoManager *mgr,
|
||||
g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_INTERNAL, "DB error");
|
||||
goto out;
|
||||
}
|
||||
} else if (db_type == SEAF_DB_TYPE_SQLITE) {
|
||||
} else if (db_type == SEAF_DB_TYPE_SQLITE || db_type == SEAF_DB_TYPE_DM) {
|
||||
GString *sql = g_string_new ("");
|
||||
GList *iter;
|
||||
int i = 0;
|
||||
@@ -1922,7 +2078,7 @@ seaf_repo_manager_set_repo_history_limit (SeafRepoManager *mgr,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (seaf_db_type(db) == SEAF_DB_TYPE_PGSQL) {
|
||||
if (seaf_db_type(db) == SEAF_DB_TYPE_PGSQL || seaf_db_type(db) == SEAF_DB_TYPE_DM) {
|
||||
gboolean exists, err;
|
||||
int rc;
|
||||
|
||||
@@ -2004,7 +2160,7 @@ seaf_repo_manager_set_repo_valid_since (SeafRepoManager *mgr,
|
||||
{
|
||||
SeafDB *db = mgr->seaf->db;
|
||||
|
||||
if (seaf_db_type(db) == SEAF_DB_TYPE_PGSQL) {
|
||||
if (seaf_db_type(db) == SEAF_DB_TYPE_PGSQL || seaf_db_type(db) == SEAF_DB_TYPE_DM) {
|
||||
gboolean exists, err;
|
||||
int rc;
|
||||
|
||||
@@ -2086,7 +2242,7 @@ seaf_repo_manager_set_repo_owner (SeafRepoManager *mgr,
|
||||
if (g_strcmp0 (orig_owner, email) == 0)
|
||||
goto out;
|
||||
|
||||
if (seaf_db_type(db) == SEAF_DB_TYPE_PGSQL) {
|
||||
if (seaf_db_type(db) == SEAF_DB_TYPE_PGSQL || seaf_db_type(db) == SEAF_DB_TYPE_DM) {
|
||||
gboolean err;
|
||||
snprintf(sql, sizeof(sql),
|
||||
"SELECT repo_id FROM RepoOwner WHERE repo_id=?");
|
||||
@@ -2463,6 +2619,21 @@ seaf_repo_manager_search_repos_by_name (SeafRepoManager *mgr, const char *name)
|
||||
char *db_patt = g_strdup_printf ("%%%s%%", name);
|
||||
|
||||
switch (seaf_db_type(seaf->db)) {
|
||||
case SEAF_DB_TYPE_DM:
|
||||
g_free (db_patt);
|
||||
db_patt = g_strdup(name);
|
||||
sql = "SELECT i.repo_id, s.size, b.commit_id, i.name, i.update_time, "
|
||||
"i.version, i.is_encrypted, i.last_modifier, i.status, fc.file_count FROM "
|
||||
"RepoInfo i LEFT JOIN RepoSize s ON i.repo_id = s.repo_id "
|
||||
"LEFT JOIN Branch b ON i.repo_id = b.repo_id "
|
||||
"LEFT JOIN RepoFileCount fc ON i.repo_id = fc.repo_id "
|
||||
"LEFT JOIN Repo r ON i.repo_id = r.repo_id "
|
||||
"LEFT JOIN VirtualRepo v ON i.repo_id = v.repo_id "
|
||||
"WHERE REGEXP_LIKE(i.name, ?, 'i') AND "
|
||||
"r.repo_id IS NOT NULL AND "
|
||||
"v.repo_id IS NULL "
|
||||
"ORDER BY i.update_time DESC, i.repo_id";
|
||||
break;
|
||||
case SEAF_DB_TYPE_MYSQL:
|
||||
sql = "SELECT i.repo_id, s.size, b.commit_id, i.name, i.update_time, "
|
||||
"i.version, i.is_encrypted, i.last_modifier, i.status, fc.file_count FROM "
|
||||
@@ -2540,6 +2711,7 @@ seaf_repo_manager_get_repo_list (SeafRepoManager *mgr, int start, int limit, con
|
||||
|
||||
if (start == -1 && limit == -1) {
|
||||
switch (seaf_db_type(mgr->seaf->db)) {
|
||||
case SEAF_DB_TYPE_DM:
|
||||
case SEAF_DB_TYPE_MYSQL:
|
||||
g_string_append (sql, "SELECT i.repo_id, s.size, b.commit_id, i.name, i.update_time, "
|
||||
"i.version, i.is_encrypted, i.last_modifier, i.status, f.file_count FROM "
|
||||
@@ -2586,6 +2758,7 @@ seaf_repo_manager_get_repo_list (SeafRepoManager *mgr, int start, int limit, con
|
||||
0);
|
||||
} else {
|
||||
switch (seaf_db_type(mgr->seaf->db)) {
|
||||
case SEAF_DB_TYPE_DM:
|
||||
case SEAF_DB_TYPE_MYSQL:
|
||||
g_string_append (sql, "SELECT i.repo_id, s.size, b.commit_id, i.name, i.update_time, "
|
||||
"i.version, i.is_encrypted, i.last_modifier, i.status, f.file_count FROM "
|
||||
@@ -3518,7 +3691,7 @@ seaf_repo_manager_set_inner_pub_repo (SeafRepoManager *mgr,
|
||||
SeafDB *db = mgr->seaf->db;
|
||||
char sql[256];
|
||||
|
||||
if (seaf_db_type(db) == SEAF_DB_TYPE_PGSQL) {
|
||||
if (seaf_db_type(db) == SEAF_DB_TYPE_PGSQL || seaf_db_type(db) == SEAF_DB_TYPE_DM) {
|
||||
gboolean err;
|
||||
snprintf(sql, sizeof(sql),
|
||||
"SELECT repo_id FROM InnerPubRepo WHERE repo_id=?");
|
||||
|
Reference in New Issue
Block a user