1
0
mirror of https://github.com/haiwen/seafile-server.git synced 2025-09-03 08:24:27 +00:00

Optimize search sql in getting file number and storage APIs

This commit is contained in:
cuihaikuo
2017-07-25 15:20:20 +08:00
parent b16ba2ec7c
commit 5689c56531
2 changed files with 12 additions and 8 deletions

View File

@@ -3662,9 +3662,9 @@ get_total_file_number_cb (SeafDBRow *row, void *vdata)
{ {
gint64 *data = (gint64 *)vdata; gint64 *data = (gint64 *)vdata;
gint64 count = seaf_db_row_get_column_int64 (row, 0); gint64 count = seaf_db_row_get_column_int64 (row, 0);
*data += count; *data = count;
return TRUE; return FALSE;
} }
gint64 gint64
@@ -3672,7 +3672,10 @@ seaf_get_total_file_number (GError **error)
{ {
gint64 count = 0; gint64 count = 0;
int ret = seaf_db_statement_foreach_row (seaf->db, int ret = seaf_db_statement_foreach_row (seaf->db,
"SELECT file_count FROM RepoFileCount", "SELECT SUM(file_count) FROM RepoFileCount f "
"LEFT JOIN VirtualRepo v "
"ON f.repo_id=v.repo_id "
"WHERE v.repo_id IS NULL",
get_total_file_number_cb, get_total_file_number_cb,
&count, 0); &count, 0);
if (ret < 0) { if (ret < 0) {
@@ -3690,8 +3693,9 @@ get_total_storage_cb(SeafDBRow *row, void *vdata)
{ {
gint64 *data = (gint64 *)vdata; gint64 *data = (gint64 *)vdata;
gint64 size = seaf_db_row_get_column_int64 (row, 0); gint64 size = seaf_db_row_get_column_int64 (row, 0);
*data += size; *data = size;
return TRUE;
return FALSE;
} }
gint64 gint64
@@ -3701,7 +3705,7 @@ seaf_get_total_storage (GError **error)
int ret; int ret;
if (seaf_db_type(seaf->db) == SEAF_DB_TYPE_PGSQL) { if (seaf_db_type(seaf->db) == SEAF_DB_TYPE_PGSQL) {
ret = seaf_db_statement_foreach_row (seaf->db, ret = seaf_db_statement_foreach_row (seaf->db,
"SELECT \"size\" FROM RepoSize s " "SELECT SUM(\"size\") FROM RepoSize s "
"LEFT JOIN VirtualRepo v " "LEFT JOIN VirtualRepo v "
"ON s.repo_id=v.repo_id " "ON s.repo_id=v.repo_id "
"WHERE v.repo_id IS NULL", "WHERE v.repo_id IS NULL",
@@ -3709,7 +3713,7 @@ seaf_get_total_storage (GError **error)
&size, 0); &size, 0);
} else { } else {
ret = seaf_db_statement_foreach_row (seaf->db, ret = seaf_db_statement_foreach_row (seaf->db,
"SELECT size FROM RepoSize s " "SELECT SUM(size) FROM RepoSize s "
"LEFT JOIN VirtualRepo v " "LEFT JOIN VirtualRepo v "
"ON s.repo_id=v.repo_id " "ON s.repo_id=v.repo_id "
"WHERE v.repo_id IS NULL", "WHERE v.repo_id IS NULL",

View File

@@ -925,7 +925,7 @@ create_relative_path (RecvFSM *fsm, char *parent_dir, char **abs_path)
&error); &error);
if (rc < 0) { if (rc < 0) {
if (error) { if (error) {
seaf_warning ("[upload folder] %s.", error->message); seaf_warning ("[upload folder] %s.\n", error->message);
g_clear_error (&error); g_clear_error (&error);
} }
goto out; goto out;