Skip to content

Commit 3adc5d8

Browse files
seems about right…
1 parent 37a7370 commit 3adc5d8

File tree

4 files changed

+58
-39
lines changed

4 files changed

+58
-39
lines changed

crates/pgt_completions/src/providers/columns.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ mod tests {
403403

404404
pool.execute(setup).await.unwrap();
405405

406-
// test in SELECT clause
406+
// // test in SELECT clause
407407
assert_complete_results(
408408
format!(
409409
"select u.id, p.{} from auth.users u join auth.posts p on u.id = p.user_id;",

crates/pgt_completions/src/relevance/filtering.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,10 @@ impl CompletionFilter<'_> {
9696
let kind = ctx.node_under_cursor.as_ref().map(|n| n.kind())?;
9797

9898
let is_allowed = match kind {
99-
"column_identifier" => matches!(self.data, CompletionRelevanceData::Column(_)),
99+
"column_identifier" => {
100+
matches!(self.data, CompletionRelevanceData::Column(_))
101+
&& !ctx.matches_ancestor_history(&["insert_values", "field"])
102+
}
100103
_ => false,
101104
};
102105

crates/pgt_treesitter/src/context/mod.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@ impl<'a> TreesitterContext<'a> {
153153
ctx.gather_tree_context();
154154
ctx.gather_info_from_ts_queries();
155155

156+
println!("{:#?}", ctx);
157+
156158
ctx
157159
}
158160

@@ -590,8 +592,7 @@ impl<'a> TreesitterContext<'a> {
590592
// `node.child_by_field_id(..)` does not work as expected
591593
let mut on_node = None;
592594
for child in node.children(cursor) {
593-
// 28 is the id for "keyword_on"
594-
if child.kind_id() == 28 {
595+
if child.kind() == "keyword_on" {
595596
on_node = Some(child);
596597
}
597598
}

crates/pgt_treesitter_grammar/grammar.js

Lines changed: 50 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,8 @@ module.exports = grammar({
264264
keyword_storage: (_) => make_keyword("storage"),
265265
keyword_compression: (_) => make_keyword("compression"),
266266

267+
keyword_overriding: () => make_keyword("overriding"),
268+
keyword_system: () => make_keyword("system"),
267269
keyword_policy: (_) => make_keyword("policy"),
268270
keyword_permissive: (_) => make_keyword("permissive"),
269271
keyword_restrictive: (_) => make_keyword("restrictive"),
@@ -2269,33 +2271,40 @@ module.exports = grammar({
22692271

22702272
insert: ($) =>
22712273
seq(
2272-
choice($.keyword_insert, $.keyword_replace),
2274+
$.keyword_insert,
2275+
$.keyword_into,
2276+
$.object_reference,
2277+
optional($._alias),
2278+
optional(paren_list($.column_identifier, true)),
22732279
optional(
2274-
choice(
2275-
$.keyword_low_priority,
2276-
$.keyword_delayed,
2277-
$.keyword_high_priority
2280+
seq(
2281+
$.keyword_overriding,
2282+
choice($.keyword_user, $.keyword_system),
2283+
$.keyword_value
22782284
)
22792285
),
2280-
optional($.keyword_ignore),
2281-
optional(
2282-
choice(
2283-
$.keyword_into,
2284-
$.keyword_overwrite // Spark SQL
2285-
)
2286+
choice(
2287+
seq($.keyword_default, $.keyword_values),
2288+
$.insert_values,
2289+
$._select_statement
22862290
),
2287-
$.object_reference,
2288-
optional($.table_partition), // Spark SQL
2289-
optional(seq($.keyword_as, field("alias", $.any_identifier))),
2290-
// TODO we need a test for `insert...set`
2291-
choice($._insert_values, $._set_values),
2292-
optional(choice($._on_conflict, $._on_duplicate_key_update))
2291+
optional($._on_conflict)
2292+
),
2293+
2294+
insert_values: ($) =>
2295+
comma_list(
2296+
seq(
2297+
$.keyword_values,
2298+
paren_list(choice($._expression, $.keyword_default), true)
2299+
),
2300+
true
22932301
),
22942302

22952303
_on_conflict: ($) =>
22962304
seq(
22972305
$.keyword_on,
22982306
$.keyword_conflict,
2307+
// todo: conflict target
22992308
seq(
23002309
$.keyword_do,
23012310
choice(
@@ -2305,23 +2314,8 @@ module.exports = grammar({
23052314
)
23062315
),
23072316

2308-
_on_duplicate_key_update: ($) =>
2309-
seq(
2310-
$.keyword_on,
2311-
$.keyword_duplicate,
2312-
$.keyword_key,
2313-
$.keyword_update,
2314-
$.assignment_list
2315-
),
2316-
23172317
assignment_list: ($) => seq($.assignment, repeat(seq(",", $.assignment))),
23182318

2319-
_insert_values: ($) =>
2320-
seq(
2321-
optional(alias($._column_list, $.list)),
2322-
choice(seq($.keyword_values, comma_list($.list, true)), $._dml_read)
2323-
),
2324-
23252319
_set_values: ($) => seq($.keyword_set, comma_list($.assignment, true)),
23262320

23272321
_column_list: ($) => paren_list(alias($._column, $.column), true),
@@ -2357,10 +2351,31 @@ module.exports = grammar({
23572351
),
23582352
$.keyword_then,
23592353
choice(
2360-
$.keyword_delete,
2354+
// merge_insert
2355+
seq(
2356+
$.keyword_insert,
2357+
optional(paren_list($.column_identifier, true)),
2358+
optional(
2359+
seq(
2360+
$.keyword_overriding,
2361+
choice($.keyword_system, $.keyword_user),
2362+
$.keyword_value
2363+
)
2364+
),
2365+
choice(
2366+
seq($.keyword_default, $.keyword_values),
2367+
seq(
2368+
$.keyword_values,
2369+
paren_list(choice($._expression, $.keyword_default), true)
2370+
)
2371+
)
2372+
),
2373+
// merge_update
23612374
seq($.keyword_update, $._set_values),
2362-
seq($.keyword_insert, $._insert_values),
2363-
optional($.where)
2375+
// merge_delete
2376+
$.keyword_delete,
2377+
2378+
seq($.keyword_do, $.keyword_nothing)
23642379
)
23652380
),
23662381

0 commit comments

Comments
 (0)