Improve queries for composite primary keys
This commit is contained in:
parent
f9567ae116
commit
eeb32fa888
1 changed files with 16 additions and 18 deletions
|
@ -1554,20 +1554,20 @@ where
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut params = "(?, ?),".repeat(worktrees.len());
|
let mut params = "?,".repeat(worktrees.len());
|
||||||
if !worktrees.is_empty() {
|
if !worktrees.is_empty() {
|
||||||
params.pop();
|
params.pop();
|
||||||
}
|
}
|
||||||
let query = format!(
|
let query = format!(
|
||||||
"
|
"
|
||||||
DELETE FROM worktrees
|
DELETE FROM worktrees
|
||||||
WHERE (project_id, id) NOT IN ({params})
|
WHERE project_id = ? AND worktree_id NOT IN ({params})
|
||||||
",
|
",
|
||||||
);
|
);
|
||||||
|
|
||||||
let mut query = sqlx::query(&query);
|
let mut query = sqlx::query(&query).bind(project_id);
|
||||||
for worktree in worktrees {
|
for worktree in worktrees {
|
||||||
query = query.bind(project_id).bind(WorktreeId(worktree.id as i32));
|
query = query.bind(WorktreeId(worktree.id as i32));
|
||||||
}
|
}
|
||||||
query.execute(&mut tx).await?;
|
query.execute(&mut tx).await?;
|
||||||
|
|
||||||
|
@ -1685,21 +1685,18 @@ where
|
||||||
}
|
}
|
||||||
|
|
||||||
if !update.removed_entries.is_empty() {
|
if !update.removed_entries.is_empty() {
|
||||||
let mut params = "(?, ?, ?),".repeat(update.removed_entries.len());
|
let mut params = "?,".repeat(update.removed_entries.len());
|
||||||
params.pop();
|
params.pop();
|
||||||
let query = format!(
|
let query = format!(
|
||||||
"
|
"
|
||||||
DELETE FROM worktree_entries
|
DELETE FROM worktree_entries
|
||||||
WHERE (project_id, worktree_id, entry_id) IN ({params})
|
WHERE project_id = ? AND worktree_id = ? AND entry_id IN ({params})
|
||||||
"
|
"
|
||||||
);
|
);
|
||||||
|
|
||||||
let mut query = sqlx::query(&query);
|
let mut query = sqlx::query(&query).bind(project_id).bind(worktree_id);
|
||||||
for entry_id in &update.removed_entries {
|
for entry_id in &update.removed_entries {
|
||||||
query = query
|
query = query.bind(*entry_id as i64);
|
||||||
.bind(project_id)
|
|
||||||
.bind(worktree_id)
|
|
||||||
.bind(*entry_id as i64);
|
|
||||||
}
|
}
|
||||||
query.execute(&mut tx).await?;
|
query.execute(&mut tx).await?;
|
||||||
}
|
}
|
||||||
|
@ -1832,7 +1829,7 @@ where
|
||||||
})
|
})
|
||||||
.collect::<BTreeMap<_, _>>();
|
.collect::<BTreeMap<_, _>>();
|
||||||
|
|
||||||
let mut params = "(?, ?),".repeat(worktrees.len());
|
let mut params = "?,".repeat(worktrees.len());
|
||||||
if !worktrees.is_empty() {
|
if !worktrees.is_empty() {
|
||||||
params.pop();
|
params.pop();
|
||||||
}
|
}
|
||||||
|
@ -1843,12 +1840,12 @@ where
|
||||||
"
|
"
|
||||||
SELECT *
|
SELECT *
|
||||||
FROM worktree_entries
|
FROM worktree_entries
|
||||||
WHERE (project_id, worktree_id) IN ({params})
|
WHERE project_id = ? AND worktree_id IN ({params})
|
||||||
",
|
",
|
||||||
);
|
);
|
||||||
let mut entries = sqlx::query_as::<_, WorktreeEntry>(&query);
|
let mut entries = sqlx::query_as::<_, WorktreeEntry>(&query).bind(project_id);
|
||||||
for worktree_id in worktrees.keys() {
|
for worktree_id in worktrees.keys() {
|
||||||
entries = entries.bind(project_id).bind(*worktree_id);
|
entries = entries.bind(*worktree_id);
|
||||||
}
|
}
|
||||||
let mut entries = entries.fetch(&mut tx);
|
let mut entries = entries.fetch(&mut tx);
|
||||||
while let Some(entry) = entries.next().await {
|
while let Some(entry) = entries.next().await {
|
||||||
|
@ -1876,12 +1873,13 @@ where
|
||||||
"
|
"
|
||||||
SELECT *
|
SELECT *
|
||||||
FROM worktree_diagnostic_summaries
|
FROM worktree_diagnostic_summaries
|
||||||
WHERE (project_id, worktree_id) IN ({params})
|
WHERE project_id = $1 AND worktree_id IN ({params})
|
||||||
",
|
",
|
||||||
);
|
);
|
||||||
let mut summaries = sqlx::query_as::<_, WorktreeDiagnosticSummary>(&query);
|
let mut summaries =
|
||||||
|
sqlx::query_as::<_, WorktreeDiagnosticSummary>(&query).bind(project_id);
|
||||||
for worktree_id in worktrees.keys() {
|
for worktree_id in worktrees.keys() {
|
||||||
summaries = summaries.bind(project_id).bind(*worktree_id);
|
summaries = summaries.bind(*worktree_id);
|
||||||
}
|
}
|
||||||
let mut summaries = summaries.fetch(&mut tx);
|
let mut summaries = summaries.fetch(&mut tx);
|
||||||
while let Some(summary) = summaries.next().await {
|
while let Some(summary) = summaries.next().await {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue