gint64 seaf_db_get_int64 (SeafDB *db, const char *sql) { gint64 ret = -1; Connection_T conn; ResultSet_T result; SeafDBRow seaf_row; conn = get_db_connection (db); if (!conn) return -1; TRY result = Connection_executeQuery (conn, "%s", sql); CATCH (SQLException) g_warning ("Error exec query %s: %s.\n", sql, Exception_frame.message); Connection_close (conn); return -1; END_TRY; seaf_row.res = result; TRY if (ResultSet_next (result)) ret = seaf_db_row_get_column_int64 (&seaf_row, 0); CATCH (SQLException) g_warning ("Error exec query %s: %s.\n", sql, Exception_frame.message); Connection_close (conn); return -1; END_TRY; Connection_close (conn); return ret; }
static gboolean get_total_size (SeafDBRow *row, void *vpsize) { gint64 *psize = vpsize; *psize += seaf_db_row_get_column_int64 (row, 0); return TRUE; }
static gboolean collect_repos (SeafDBRow *row, void *data) { GList **p_repos = data; const char *repo_id; const char *vrepo_id; const char *email; const char *permission; const char *commit_id; gint64 size; SeafileRepo *repo; repo_id = seaf_db_row_get_column_text (row, 0); vrepo_id = seaf_db_row_get_column_text (row, 1); email = seaf_db_row_get_column_text (row, 2); permission = seaf_db_row_get_column_text (row, 3); commit_id = seaf_db_row_get_column_text (row, 4); size = seaf_db_row_get_column_int64 (row, 5); char *email_l = g_ascii_strdown (email, -1); repo = g_object_new (SEAFILE_TYPE_REPO, "share_type", "personal", "repo_id", repo_id, "id", repo_id, "head_cmmt_id", commit_id, "user", email_l, "permission", permission, "is_virtual", (vrepo_id != NULL), "size", size, NULL); g_free (email_l); if (repo) { if (vrepo_id) { const char *origin_repo_id = seaf_db_row_get_column_text (row, 6); const char *origin_path = seaf_db_row_get_column_text (row, 7); g_object_set (repo, "store_id", origin_repo_id, "origin_repo_id", origin_repo_id, "origin_path", origin_path, NULL); } else { g_object_set (repo, "store_id", repo_id, NULL); } *p_repos = g_list_prepend (*p_repos, repo); } return TRUE; }