Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit9a69152

Browse files
committed
psql: Improve tab-completion for MERGE.
Commit7103ebb added the tab-completion for MERGE accidentallyin the middle of that for LOCK TABLE. This commit fixes this issue.This also adds some tab-completion for MERGE.Back-patch to v15 where MERGE was introduced.Author: Kotaro Kawamoto, Fujii MasaoReviewed-by: Shinya Kato, Álvaro HerreraDiscussion:https://postgr.es/m/9f1ad2a87a58cd5e7d64f3993130958d@oss.nttdata.com
1 parent661ee7b commit9a69152

File tree

1 file changed

+67
-35
lines changed

1 file changed

+67
-35
lines changed

‎src/bin/psql/tab-complete.c

Lines changed: 67 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1669,7 +1669,7 @@ psql_completion(const char *text, int start, int end)
16691669
"COMMENT","COMMIT","COPY","CREATE","DEALLOCATE","DECLARE",
16701670
"DELETE FROM","DISCARD","DO","DROP","END","EXECUTE","EXPLAIN",
16711671
"FETCH","GRANT","IMPORT FOREIGN SCHEMA","INSERT INTO","LISTEN","LOAD","LOCK",
1672-
"MERGE","MOVE","NOTIFY","PREPARE",
1672+
"MERGE INTO","MOVE","NOTIFY","PREPARE",
16731673
"REASSIGN","REFRESH MATERIALIZED VIEW","REINDEX","RELEASE",
16741674
"RESET","REVOKE","ROLLBACK",
16751675
"SAVEPOINT","SECURITY LABEL","SELECT","SET","SHOW","START",
@@ -3641,7 +3641,7 @@ psql_completion(const char *text, int start, int end)
36413641
*/
36423642
elseif (Matches("EXPLAIN"))
36433643
COMPLETE_WITH("SELECT","INSERT INTO","DELETE FROM","UPDATE","DECLARE",
3644-
"MERGE","EXECUTE","ANALYZE","VERBOSE");
3644+
"MERGE INTO","EXECUTE","ANALYZE","VERBOSE");
36453645
elseif (HeadMatches("EXPLAIN","(*")&&
36463646
!HeadMatches("EXPLAIN","(*)"))
36473647
{
@@ -3660,12 +3660,12 @@ psql_completion(const char *text, int start, int end)
36603660
}
36613661
elseif (Matches("EXPLAIN","ANALYZE"))
36623662
COMPLETE_WITH("SELECT","INSERT INTO","DELETE FROM","UPDATE","DECLARE",
3663-
"MERGE","EXECUTE","VERBOSE");
3663+
"MERGE INTO","EXECUTE","VERBOSE");
36643664
elseif (Matches("EXPLAIN","(*)")||
36653665
Matches("EXPLAIN","VERBOSE")||
36663666
Matches("EXPLAIN","ANALYZE","VERBOSE"))
36673667
COMPLETE_WITH("SELECT","INSERT INTO","DELETE FROM","UPDATE","DECLARE",
3668-
"MERGE","EXECUTE");
3668+
"MERGE INTO","EXECUTE");
36693669

36703670
/* FETCH && MOVE */
36713671

@@ -4065,58 +4065,90 @@ psql_completion(const char *text, int start, int end)
40654065
elseif (HeadMatches("LOCK")&&TailMatches("IN","SHARE"))
40664066
COMPLETE_WITH("MODE","ROW EXCLUSIVE MODE",
40674067
"UPDATE EXCLUSIVE MODE");
4068+
4069+
/* Complete LOCK [TABLE] [ONLY] <table> [IN lockmode MODE] with "NOWAIT" */
4070+
elseif (HeadMatches("LOCK")&&TailMatches("MODE"))
4071+
COMPLETE_WITH("NOWAIT");
4072+
40684073
/* MERGE --- can be inside EXPLAIN */
40694074
elseif (TailMatches("MERGE"))
40704075
COMPLETE_WITH("INTO");
40714076
elseif (TailMatches("MERGE","INTO"))
40724077
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_mergetargets);
4078+
4079+
/* Complete MERGE INTO <table> [[AS] <alias>] with USING */
40734080
elseif (TailMatches("MERGE","INTO",MatchAny))
40744081
COMPLETE_WITH("USING","AS");
4075-
elseif (TailMatches("MERGE","INTO",MatchAny,"USING"))
4076-
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
4077-
/* with [AS] alias */
4078-
elseif (TailMatches("MERGE","INTO",MatchAny,"AS",MatchAny))
4079-
COMPLETE_WITH("USING");
4080-
elseif (TailMatches("MERGE","INTO",MatchAny,MatchAny))
4082+
elseif (TailMatches("MERGE","INTO",MatchAny,"AS",MatchAny)||
4083+
TailMatches("MERGE","INTO",MatchAny,MatchAnyExcept("USING|AS")))
40814084
COMPLETE_WITH("USING");
4082-
elseif (TailMatches("MERGE","INTO",MatchAny,"AS",MatchAny,"USING"))
4083-
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
4084-
elseif (TailMatches("MERGE","INTO",MatchAny,MatchAny,"USING"))
4085-
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
4086-
/* ON */
4087-
elseif (TailMatches("MERGE","INTO",MatchAny,"USING",MatchAny))
4088-
COMPLETE_WITH("ON");
4089-
elseif (TailMatches("INTO",MatchAny,"AS",MatchAny,"USING",MatchAny,"AS",MatchAny))
4090-
COMPLETE_WITH("ON");
4091-
elseif (TailMatches("INTO",MatchAny,MatchAny,"USING",MatchAny,MatchAny))
4085+
4086+
/*
4087+
* Complete MERGE INTO ... USING with a list of relations supporting
4088+
* SELECT
4089+
*/
4090+
elseif (TailMatches("MERGE","INTO",MatchAny,"USING")||
4091+
TailMatches("MERGE","INTO",MatchAny,"AS",MatchAny,"USING")||
4092+
TailMatches("MERGE","INTO",MatchAny,MatchAny,"USING"))
4093+
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
4094+
4095+
/*
4096+
* Complete MERGE INTO <table> [[AS] <alias>] USING <relations> [[AS]
4097+
* alias] with ON
4098+
*/
4099+
elseif (TailMatches("MERGE","INTO",MatchAny,"USING",MatchAny)||
4100+
TailMatches("MERGE","INTO",MatchAny,"AS",MatchAny,"USING",MatchAny)||
4101+
TailMatches("MERGE","INTO",MatchAny,MatchAny,"USING",MatchAny))
4102+
COMPLETE_WITH("AS","ON");
4103+
elseif (TailMatches("MERGE","INTO",MatchAny,"USING",MatchAny,"AS",MatchAny)||
4104+
TailMatches("MERGE","INTO",MatchAny,"AS",MatchAny,"USING",MatchAny,"AS",MatchAny)||
4105+
TailMatches("MERGE","INTO",MatchAny,MatchAny,"USING",MatchAny,"AS",MatchAny)||
4106+
TailMatches("MERGE","INTO",MatchAny,"USING",MatchAny,MatchAnyExcept("ON|AS"))||
4107+
TailMatches("MERGE","INTO",MatchAny,"AS",MatchAny,"USING",MatchAny,MatchAnyExcept("ON|AS"))||
4108+
TailMatches("MERGE","INTO",MatchAny,MatchAny,"USING",MatchAny,MatchAnyExcept("ON|AS")))
40924109
COMPLETE_WITH("ON");
4093-
/* ON condition */
4110+
4111+
/* Complete MERGE INTO ... ON with target table attributes */
40944112
elseif (TailMatches("INTO",MatchAny,"USING",MatchAny,"ON"))
40954113
COMPLETE_WITH_ATTR(prev4_wd);
40964114
elseif (TailMatches("INTO",MatchAny,"AS",MatchAny,"USING",MatchAny,"AS",MatchAny,"ON"))
40974115
COMPLETE_WITH_ATTR(prev8_wd);
40984116
elseif (TailMatches("INTO",MatchAny,MatchAny,"USING",MatchAny,MatchAny,"ON"))
40994117
COMPLETE_WITH_ATTR(prev6_wd);
4100-
/* WHEN [NOT] MATCHED */
4101-
elseif (TailMatches("USING",MatchAny,"ON",MatchAny))
4102-
COMPLETE_WITH("WHEN MATCHED","WHEN NOT MATCHED");
4103-
elseif (TailMatches("USING",MatchAny,"AS",MatchAny,"ON",MatchAny))
4104-
COMPLETE_WITH("WHEN MATCHED","WHEN NOT MATCHED");
4105-
elseif (TailMatches("USING",MatchAny,MatchAny,"ON",MatchAny))
4118+
4119+
/*
4120+
* Complete ... USING <relation> [[AS] alias] ON join condition
4121+
* (consisting of one or three words typically used) with WHEN [NOT]
4122+
* MATCHED
4123+
*/
4124+
elseif (TailMatches("USING",MatchAny,"ON",MatchAny)||
4125+
TailMatches("USING",MatchAny,"AS",MatchAny,"ON",MatchAny)||
4126+
TailMatches("USING",MatchAny,MatchAny,"ON",MatchAny)||
4127+
TailMatches("USING",MatchAny,"ON",MatchAny,MatchAnyExcept("WHEN"),MatchAnyExcept("WHEN"))||
4128+
TailMatches("USING",MatchAny,"AS",MatchAny,"ON",MatchAny,MatchAnyExcept("WHEN"),MatchAnyExcept("WHEN"))||
4129+
TailMatches("USING",MatchAny,MatchAny,"ON",MatchAny,MatchAnyExcept("WHEN"),MatchAnyExcept("WHEN")))
41064130
COMPLETE_WITH("WHEN MATCHED","WHEN NOT MATCHED");
4107-
elseif (TailMatches("WHEN","MATCHED"))
4108-
COMPLETE_WITH("THEN","AND");
4109-
elseif (TailMatches("WHEN","NOT","MATCHED"))
4131+
elseif (TailMatches("USING",MatchAny,"ON",MatchAny,"WHEN")||
4132+
TailMatches("USING",MatchAny,"AS",MatchAny,"ON",MatchAny,"WHEN")||
4133+
TailMatches("USING",MatchAny,MatchAny,"ON",MatchAny,"WHEN")||
4134+
TailMatches("USING",MatchAny,"ON",MatchAny,MatchAny,MatchAny,"WHEN")||
4135+
TailMatches("USING",MatchAny,"AS",MatchAny,"ON",MatchAny,MatchAny,MatchAny,"WHEN")||
4136+
TailMatches("USING",MatchAny,MatchAny,"ON",MatchAny,MatchAny,MatchAny,"WHEN"))
4137+
COMPLETE_WITH("MATCHED","NOT MATCHED");
4138+
4139+
/* Complete ... WHEN [NOT] MATCHED with THEN/AND */
4140+
elseif (TailMatches("WHEN","MATCHED")||
4141+
TailMatches("WHEN","NOT","MATCHED"))
41104142
COMPLETE_WITH("THEN","AND");
4143+
4144+
/* Complete ... WHEN MATCHED THEN with UPDATE SET/DELETE/DO NOTHING */
41114145
elseif (TailMatches("WHEN","MATCHED","THEN"))
4112-
COMPLETE_WITH("UPDATE","DELETE");
4146+
COMPLETE_WITH("UPDATE SET","DELETE","DO NOTHING");
4147+
4148+
/* Complete ... WHEN NOT MATCHED THEN with INSERT/DO NOTHING */
41134149
elseif (TailMatches("WHEN","NOT","MATCHED","THEN"))
41144150
COMPLETE_WITH("INSERT","DO NOTHING");
41154151

4116-
/* Complete LOCK [TABLE] [ONLY] <table> [IN lockmode MODE] with "NOWAIT" */
4117-
elseif (HeadMatches("LOCK")&&TailMatches("MODE"))
4118-
COMPLETE_WITH("NOWAIT");
4119-
41204152
/* NOTIFY --- can be inside EXPLAIN, RULE, etc */
41214153
elseif (TailMatches("NOTIFY"))
41224154
COMPLETE_WITH_QUERY(Query_for_list_of_channels);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp