int seaf_share_manager_is_repo_shared (SeafShareManager *mgr, const char *repo_id) { gboolean ret; gboolean db_err = FALSE; ret = seaf_db_statement_exists (mgr->seaf->db, "SELECT repo_id FROM SharedRepo WHERE " "repo_id = ?", &db_err, 1, "string", repo_id); if (db_err) { seaf_warning ("DB error when check repo exist in SharedRepo.\n"); return -1; } if (!ret) { ret = seaf_db_statement_exists (mgr->seaf->db, "SELECT repo_id FROM RepoGroup WHERE " "repo_id = ?", &db_err, 1, "string", repo_id); if (db_err) { seaf_warning ("DB error when check repo exist in RepoGroup.\n"); return -1; } } return ret; }
gboolean seaf_branch_manager_branch_exists (SeafBranchManager *mgr, const char *repo_id, const char *name) { #ifndef SEAFILE_SERVER char *sql; gboolean ret; pthread_mutex_lock (&mgr->priv->db_lock); sql = sqlite3_mprintf ("SELECT name FROM Branch WHERE name = %Q " "AND repo_id='%s'", name, repo_id); ret = sqlite_check_for_existence (mgr->priv->db, sql); sqlite3_free (sql); pthread_mutex_unlock (&mgr->priv->db_lock); return ret; #else gboolean db_err = FALSE; return seaf_db_statement_exists (mgr->seaf->db, "SELECT name FROM Branch WHERE name=? " "AND repo_id=?", &db_err, 2, "string", name, "string", repo_id); #endif }
int seaf_share_manager_add_share (SeafShareManager *mgr, const char *repo_id, const char *from_email, const char *to_email, const char *permission) { gboolean db_err = FALSE; int ret = 0; char *from_email_l = g_ascii_strdown (from_email, -1); char *to_email_l = g_ascii_strdown (to_email, -1); if (seaf_db_statement_exists (mgr->seaf->db, "SELECT repo_id from SharedRepo " "WHERE repo_id=? AND " "from_email=? AND to_email=?", &db_err, 3, "string", repo_id, "string", from_email_l, "string", to_email_l)) goto out; if (seaf_db_statement_query (mgr->seaf->db, "INSERT INTO SharedRepo (repo_id, from_email, " "to_email, permission) VALUES (?, ?, ?, ?)", 4, "string", repo_id, "string", from_email_l, "string", to_email_l, "string", permission) < 0) { ret = -1; goto out; } out: g_free (from_email_l); g_free (to_email_l); return ret; }
int seaf_quota_manager_set_org_quota (SeafQuotaManager *mgr, int org_id, gint64 quota) { SeafDB *db = mgr->session->db; if (seaf_db_type(db) == SEAF_DB_TYPE_PGSQL) { gboolean exists, err; int rc; exists = seaf_db_statement_exists (db, "SELECT 1 FROM OrgQuota WHERE org_id=?", &err, 1, "int", org_id); if (err) return -1; if (exists) rc = seaf_db_statement_query (db, "UPDATE OrgQuota SET quota=? WHERE org_id=?", 2, "int64", quota, "int", org_id); else rc = seaf_db_statement_query (db, "INSERT INTO OrgQuota VALUES (?, ?)", 2, "int", org_id, "int64", quota); return rc; } else { int rc = seaf_db_statement_query (db, "REPLACE INTO OrgQuota VALUES (?, ?)", 2, "int", org_id, "int64", quota); return rc; } }
int seaf_quota_manager_set_user_quota (SeafQuotaManager *mgr, const char *user, gint64 quota) { SeafDB *db = mgr->session->db; if (seaf_db_type(db) == SEAF_DB_TYPE_PGSQL) { gboolean exists, err; int rc; exists = seaf_db_statement_exists (db, "SELECT 1 FROM UserQuota WHERE \"user\"=?", &err, 1, "string", user); if (err) return -1; if (exists) rc = seaf_db_statement_query (db, "UPDATE UserQuota SET quota=? " "WHERE \"user\"=?", 2, "int64", quota, "string", user); else rc = seaf_db_statement_query (db, "INSERT INTO UserQuota VALUES " "(?, ?)", 2, "string", user, "int64", quota); return rc; } else { int rc; rc = seaf_db_statement_query (db, "REPLACE INTO UserQuota VALUES (?, ?)", 2, "string", user, "int64", quota); return rc; } }
gboolean seaf_repo_manager_is_virtual_repo (SeafRepoManager *mgr, const char *repo_id) { gboolean db_err; char *sql = "SELECT 1 FROM VirtualRepo WHERE repo_id = ?"; return seaf_db_statement_exists (seaf->db, sql, &db_err, 1, "string", repo_id); }
int seaf_branch_manager_add_branch (SeafBranchManager *mgr, SeafBranch *branch) { #ifndef SEAFILE_SERVER char sql[256]; pthread_mutex_lock (&mgr->priv->db_lock); sqlite3_snprintf (sizeof(sql), sql, "SELECT 1 FROM Branch WHERE name=%Q and repo_id=%Q", branch->name, branch->repo_id); if (sqlite_check_for_existence (mgr->priv->db, sql)) sqlite3_snprintf (sizeof(sql), sql, "UPDATE Branch SET commit_id=%Q WHERE " "name=%Q and repo_id=%Q", branch->commit_id, branch->name, branch->repo_id); else sqlite3_snprintf (sizeof(sql), sql, "INSERT INTO Branch VALUES (%Q, %Q, %Q)", branch->name, branch->repo_id, branch->commit_id); sqlite_query_exec (mgr->priv->db, sql); pthread_mutex_unlock (&mgr->priv->db_lock); return 0; #else char *sql; SeafDB *db = mgr->seaf->db; if (seaf_db_type(db) == SEAF_DB_TYPE_PGSQL) { gboolean exists, err; int rc; sql = "SELECT repo_id FROM Branch WHERE name=? AND repo_id=?"; exists = seaf_db_statement_exists(db, sql, &err, 2, "string", branch->name, "string", branch->repo_id); if (err) return -1; if (exists) rc = seaf_db_statement_query (db, "UPDATE Branch SET commit_id=? " "WHERE name=? AND repo_id=?", 3, "string", branch->commit_id, "string", branch->name, "string", branch->repo_id); else rc = seaf_db_statement_query (db, "INSERT INTO Branch VALUES (?, ?, ?)", 3, "string", branch->name, "string", branch->repo_id, "string", branch->commit_id); if (rc < 0) return -1; } else { int rc = seaf_db_statement_query (db, "REPLACE INTO Branch VALUES (?, ?, ?)", 3, "string", branch->name, "string", branch->repo_id, "string", branch->commit_id); if (rc < 0) return -1; } return 0; #endif }