mirror of
https://github.com/zed-industries/zed.git
synced 2024-11-08 07:35:01 +03:00
Batch some of the new queries in Db
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
This commit is contained in:
parent
faf265328e
commit
adf43c87dd
@ -1354,7 +1354,7 @@ where
|
||||
.bind(room_id)
|
||||
.fetch(&mut *tx);
|
||||
|
||||
let mut participants = Vec::new();
|
||||
let mut participants = HashMap::default();
|
||||
let mut pending_participants = Vec::new();
|
||||
while let Some(participant) = db_participants.next().await {
|
||||
let (
|
||||
@ -1381,12 +1381,15 @@ where
|
||||
Default::default(),
|
||||
)),
|
||||
};
|
||||
participants.push(proto::Participant {
|
||||
user_id: user_id.to_proto(),
|
||||
peer_id: answering_connection_id as u32,
|
||||
projects: Default::default(),
|
||||
location: Some(proto::ParticipantLocation { variant: location }),
|
||||
});
|
||||
participants.insert(
|
||||
answering_connection_id,
|
||||
proto::Participant {
|
||||
user_id: user_id.to_proto(),
|
||||
peer_id: answering_connection_id as u32,
|
||||
projects: Default::default(),
|
||||
location: Some(proto::ParticipantLocation { variant: location }),
|
||||
},
|
||||
);
|
||||
} else {
|
||||
pending_participants.push(proto::PendingParticipant {
|
||||
user_id: user_id.to_proto(),
|
||||
@ -1397,41 +1400,42 @@ where
|
||||
}
|
||||
drop(db_participants);
|
||||
|
||||
for participant in &mut participants {
|
||||
let mut entries = sqlx::query_as::<_, (ProjectId, String)>(
|
||||
"
|
||||
SELECT projects.id, worktrees.root_name
|
||||
FROM projects
|
||||
LEFT JOIN worktrees ON projects.id = worktrees.project_id
|
||||
WHERE room_id = $1 AND host_connection_id = $2
|
||||
",
|
||||
)
|
||||
.bind(room_id)
|
||||
.bind(participant.peer_id as i32)
|
||||
.fetch(&mut *tx);
|
||||
let mut rows = sqlx::query_as::<_, (i32, ProjectId, Option<String>)>(
|
||||
"
|
||||
SELECT host_connection_id, projects.id, worktrees.root_name
|
||||
FROM projects
|
||||
LEFT JOIN worktrees ON projects.id = worktrees.project_id
|
||||
WHERE room_id = $1
|
||||
",
|
||||
)
|
||||
.bind(room_id)
|
||||
.fetch(&mut *tx);
|
||||
|
||||
let mut projects = HashMap::default();
|
||||
while let Some(entry) = entries.next().await {
|
||||
let (project_id, worktree_root_name) = entry?;
|
||||
let participant_project =
|
||||
projects
|
||||
.entry(project_id)
|
||||
.or_insert(proto::ParticipantProject {
|
||||
id: project_id.to_proto(),
|
||||
worktree_root_names: Default::default(),
|
||||
});
|
||||
participant_project
|
||||
.worktree_root_names
|
||||
.push(worktree_root_name);
|
||||
while let Some(row) = rows.next().await {
|
||||
let (connection_id, project_id, worktree_root_name) = row?;
|
||||
if let Some(participant) = participants.get_mut(&connection_id) {
|
||||
let project = if let Some(project) = participant
|
||||
.projects
|
||||
.iter_mut()
|
||||
.find(|project| project.id == project_id.to_proto())
|
||||
{
|
||||
project
|
||||
} else {
|
||||
participant.projects.push(proto::ParticipantProject {
|
||||
id: project_id.to_proto(),
|
||||
worktree_root_names: Default::default(),
|
||||
});
|
||||
participant.projects.last_mut().unwrap()
|
||||
};
|
||||
project.worktree_root_names.extend(worktree_root_name);
|
||||
}
|
||||
|
||||
participant.projects = projects.into_values().collect();
|
||||
}
|
||||
|
||||
Ok(proto::Room {
|
||||
id: room.id.to_proto(),
|
||||
version: room.version as u64,
|
||||
live_kit_room: room.live_kit_room,
|
||||
participants,
|
||||
participants: participants.into_values().collect(),
|
||||
pending_participants,
|
||||
})
|
||||
}
|
||||
@ -1472,22 +1476,36 @@ where
|
||||
.fetch_one(&mut tx)
|
||||
.await?;
|
||||
|
||||
for worktree in worktrees {
|
||||
sqlx::query(
|
||||
if !worktrees.is_empty() {
|
||||
let mut params = "(?, ?, ?, ?, ?, ?, ?),".repeat(worktrees.len());
|
||||
params.pop();
|
||||
let query = format!(
|
||||
"
|
||||
INSERT INTO worktrees (project_id, id, root_name, abs_path, visible, scan_id, is_complete)
|
||||
VALUES ($1, $2, $3, $4, $5, $6, $7)
|
||||
",
|
||||
)
|
||||
.bind(project_id)
|
||||
.bind(worktree.id as i32)
|
||||
.bind(&worktree.root_name)
|
||||
.bind(&worktree.abs_path)
|
||||
.bind(worktree.visible)
|
||||
.bind(0)
|
||||
.bind(false)
|
||||
.execute(&mut tx)
|
||||
.await?;
|
||||
INSERT INTO worktrees (
|
||||
project_id,
|
||||
id,
|
||||
root_name,
|
||||
abs_path,
|
||||
visible,
|
||||
scan_id,
|
||||
is_complete
|
||||
)
|
||||
VALUES {params}
|
||||
"
|
||||
);
|
||||
|
||||
let mut query = sqlx::query(&query);
|
||||
for worktree in worktrees {
|
||||
query = query
|
||||
.bind(project_id)
|
||||
.bind(worktree.id as i32)
|
||||
.bind(&worktree.root_name)
|
||||
.bind(&worktree.abs_path)
|
||||
.bind(worktree.visible)
|
||||
.bind(0)
|
||||
.bind(false);
|
||||
}
|
||||
query.execute(&mut tx).await?;
|
||||
}
|
||||
|
||||
sqlx::query(
|
||||
@ -1535,23 +1553,37 @@ where
|
||||
.fetch_one(&mut tx)
|
||||
.await?;
|
||||
|
||||
for worktree in worktrees {
|
||||
sqlx::query(
|
||||
if !worktrees.is_empty() {
|
||||
let mut params = "(?, ?, ?, ?, ?, ?, ?),".repeat(worktrees.len());
|
||||
params.pop();
|
||||
let query = format!(
|
||||
"
|
||||
INSERT INTO worktrees (project_id, id, root_name, abs_path, visible, scan_id, is_complete)
|
||||
VALUES ($1, $2, $3, $4, $5, $6, $7)
|
||||
INSERT INTO worktrees (
|
||||
project_id,
|
||||
id,
|
||||
root_name,
|
||||
abs_path,
|
||||
visible,
|
||||
scan_id,
|
||||
is_complete
|
||||
)
|
||||
VALUES ${params}
|
||||
ON CONFLICT (project_id, id) DO UPDATE SET root_name = excluded.root_name
|
||||
",
|
||||
)
|
||||
.bind(project_id)
|
||||
.bind(worktree.id as i32)
|
||||
.bind(&worktree.root_name)
|
||||
.bind(&worktree.abs_path)
|
||||
.bind(worktree.visible)
|
||||
.bind(0)
|
||||
.bind(false)
|
||||
.execute(&mut tx)
|
||||
.await?;
|
||||
"
|
||||
);
|
||||
|
||||
let mut query = sqlx::query(&query);
|
||||
for worktree in worktrees {
|
||||
query = query
|
||||
.bind(project_id)
|
||||
.bind(worktree.id as i32)
|
||||
.bind(&worktree.root_name)
|
||||
.bind(&worktree.abs_path)
|
||||
.bind(worktree.visible)
|
||||
.bind(0)
|
||||
.bind(false)
|
||||
}
|
||||
query.execute(&mut tx).await?;
|
||||
}
|
||||
|
||||
let mut params = "?,".repeat(worktrees.len());
|
||||
|
Loading…
Reference in New Issue
Block a user