Skip to content

Commit a1e1a9c

Browse files
ok
1 parent cc38757 commit a1e1a9c

File tree

2 files changed

+49
-8
lines changed

2 files changed

+49
-8
lines changed

crates/pgt_completions/src/providers/roles.rs

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ pub fn complete_roles<'a>(ctx: &CompletionContext<'a>, builder: &mut CompletionB
2727

2828
#[cfg(test)]
2929
mod tests {
30-
use sqlx::PgPool;
30+
use sqlx::{Executor, PgPool};
3131

3232
use crate::test_helper::{CURSOR_POS, CompletionAssertion, assert_complete_results};
3333

@@ -81,9 +81,45 @@ mod tests {
8181
.await;
8282
}
8383

84-
async fn works_in_set_statement() {
85-
// set role ROLE;
86-
// set session authorization ROLE;
84+
#[sqlx::test(migrator = "pgt_test_utils::MIGRATIONS")]
85+
async fn works_in_set_statement(pool: PgPool) {
86+
pool.execute(SETUP).await.unwrap();
87+
88+
assert_complete_results(
89+
format!("set role {}", CURSOR_POS).as_str(),
90+
vec![
91+
CompletionAssertion::LabelAndKind("admin".into(), crate::CompletionItemKind::Role),
92+
CompletionAssertion::LabelAndKind(
93+
"test_login".into(),
94+
crate::CompletionItemKind::Role,
95+
),
96+
CompletionAssertion::LabelAndKind(
97+
"test_nologin".into(),
98+
crate::CompletionItemKind::Role,
99+
),
100+
],
101+
None,
102+
&pool,
103+
)
104+
.await;
105+
106+
assert_complete_results(
107+
format!("set session authorization {}", CURSOR_POS).as_str(),
108+
vec![
109+
CompletionAssertion::LabelAndKind("admin".into(), crate::CompletionItemKind::Role),
110+
CompletionAssertion::LabelAndKind(
111+
"test_login".into(),
112+
crate::CompletionItemKind::Role,
113+
),
114+
CompletionAssertion::LabelAndKind(
115+
"test_nologin".into(),
116+
crate::CompletionItemKind::Role,
117+
),
118+
],
119+
None,
120+
&pool,
121+
)
122+
.await;
87123
}
88124

89125
async fn works_in_policies() {}

crates/pgt_completions/src/relevance/filtering.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ impl CompletionFilter<'_> {
7676
CompletionRelevanceData::Table(_) => match clause {
7777
WrappingClause::Select
7878
| WrappingClause::Where
79-
| WrappingClause::ColumnDefinitions => false,
79+
| WrappingClause::ColumnDefinitions
80+
| WrappingClause::SetStatement => false,
8081

8182
WrappingClause::Insert => {
8283
ctx.wrapping_node_kind
@@ -101,6 +102,7 @@ impl CompletionFilter<'_> {
101102
match clause {
102103
WrappingClause::From
103104
| WrappingClause::ColumnDefinitions
105+
| WrappingClause::SetStatement
104106
| WrappingClause::AlterTable
105107
| WrappingClause::DropTable => false,
106108

@@ -170,9 +172,12 @@ impl CompletionFilter<'_> {
170172
matches!(clause, WrappingClause::PolicyName)
171173
}
172174

173-
CompletionRelevanceData::Role(_) => {
174-
matches!(clause, WrappingClause::DropRole | WrappingClause::AlterRole)
175-
}
175+
CompletionRelevanceData::Role(_) => match clause {
176+
WrappingClause::DropRole | WrappingClause::AlterRole => true,
177+
WrappingClause::SetStatement => ctx
178+
.before_cursor_matches_kind(&["keyword_role", "keyword_authorization"]),
179+
_ => false,
180+
},
176181
}
177182
})
178183
.and_then(|is_ok| if is_ok { Some(()) } else { None })

0 commit comments

Comments
 (0)