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

Commitf80919d

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 parent0c40044 commitf80919d

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",
@@ -3626,7 +3626,7 @@ psql_completion(const char *text, int start, int end)
36263626
*/
36273627
elseif (Matches("EXPLAIN"))
36283628
COMPLETE_WITH("SELECT","INSERT INTO","DELETE FROM","UPDATE","DECLARE",
3629-
"MERGE","EXECUTE","ANALYZE","VERBOSE");
3629+
"MERGE INTO","EXECUTE","ANALYZE","VERBOSE");
36303630
elseif (HeadMatches("EXPLAIN","(*")&&
36313631
!HeadMatches("EXPLAIN","(*)"))
36323632
{
@@ -3645,12 +3645,12 @@ psql_completion(const char *text, int start, int end)
36453645
}
36463646
elseif (Matches("EXPLAIN","ANALYZE"))
36473647
COMPLETE_WITH("SELECT","INSERT INTO","DELETE FROM","UPDATE","DECLARE",
3648-
"MERGE","EXECUTE","VERBOSE");
3648+
"MERGE INTO","EXECUTE","VERBOSE");
36493649
elseif (Matches("EXPLAIN","(*)")||
36503650
Matches("EXPLAIN","VERBOSE")||
36513651
Matches("EXPLAIN","ANALYZE","VERBOSE"))
36523652
COMPLETE_WITH("SELECT","INSERT INTO","DELETE FROM","UPDATE","DECLARE",
3653-
"MERGE","EXECUTE");
3653+
"MERGE INTO","EXECUTE");
36543654

36553655
/* FETCH && MOVE */
36563656

@@ -4050,58 +4050,90 @@ psql_completion(const char *text, int start, int end)
40504050
elseif (HeadMatches("LOCK")&&TailMatches("IN","SHARE"))
40514051
COMPLETE_WITH("MODE","ROW EXCLUSIVE MODE",
40524052
"UPDATE EXCLUSIVE MODE");
4053+
4054+
/* Complete LOCK [TABLE] [ONLY] <table> [IN lockmode MODE] with "NOWAIT" */
4055+
elseif (HeadMatches("LOCK")&&TailMatches("MODE"))
4056+
COMPLETE_WITH("NOWAIT");
4057+
40534058
/* MERGE --- can be inside EXPLAIN */
40544059
elseif (TailMatches("MERGE"))
40554060
COMPLETE_WITH("INTO");
40564061
elseif (TailMatches("MERGE","INTO"))
40574062
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_mergetargets);
4063+
4064+
/* Complete MERGE INTO <table> [[AS] <alias>] with USING */
40584065
elseif (TailMatches("MERGE","INTO",MatchAny))
40594066
COMPLETE_WITH("USING","AS");
4060-
elseif (TailMatches("MERGE","INTO",MatchAny,"USING"))
4061-
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
4062-
/* with [AS] alias */
4063-
elseif (TailMatches("MERGE","INTO",MatchAny,"AS",MatchAny))
4064-
COMPLETE_WITH("USING");
4065-
elseif (TailMatches("MERGE","INTO",MatchAny,MatchAny))
4067+
elseif (TailMatches("MERGE","INTO",MatchAny,"AS",MatchAny)||
4068+
TailMatches("MERGE","INTO",MatchAny,MatchAnyExcept("USING|AS")))
40664069
COMPLETE_WITH("USING");
4067-
elseif (TailMatches("MERGE","INTO",MatchAny,"AS",MatchAny,"USING"))
4068-
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
4069-
elseif (TailMatches("MERGE","INTO",MatchAny,MatchAny,"USING"))
4070-
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
4071-
/* ON */
4072-
elseif (TailMatches("MERGE","INTO",MatchAny,"USING",MatchAny))
4073-
COMPLETE_WITH("ON");
4074-
elseif (TailMatches("INTO",MatchAny,"AS",MatchAny,"USING",MatchAny,"AS",MatchAny))
4075-
COMPLETE_WITH("ON");
4076-
elseif (TailMatches("INTO",MatchAny,MatchAny,"USING",MatchAny,MatchAny))
4070+
4071+
/*
4072+
* Complete MERGE INTO ... USING with a list of relations supporting
4073+
* SELECT
4074+
*/
4075+
elseif (TailMatches("MERGE","INTO",MatchAny,"USING")||
4076+
TailMatches("MERGE","INTO",MatchAny,"AS",MatchAny,"USING")||
4077+
TailMatches("MERGE","INTO",MatchAny,MatchAny,"USING"))
4078+
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_selectables);
4079+
4080+
/*
4081+
* Complete MERGE INTO <table> [[AS] <alias>] USING <relations> [[AS]
4082+
* alias] with ON
4083+
*/
4084+
elseif (TailMatches("MERGE","INTO",MatchAny,"USING",MatchAny)||
4085+
TailMatches("MERGE","INTO",MatchAny,"AS",MatchAny,"USING",MatchAny)||
4086+
TailMatches("MERGE","INTO",MatchAny,MatchAny,"USING",MatchAny))
4087+
COMPLETE_WITH("AS","ON");
4088+
elseif (TailMatches("MERGE","INTO",MatchAny,"USING",MatchAny,"AS",MatchAny)||
4089+
TailMatches("MERGE","INTO",MatchAny,"AS",MatchAny,"USING",MatchAny,"AS",MatchAny)||
4090+
TailMatches("MERGE","INTO",MatchAny,MatchAny,"USING",MatchAny,"AS",MatchAny)||
4091+
TailMatches("MERGE","INTO",MatchAny,"USING",MatchAny,MatchAnyExcept("ON|AS"))||
4092+
TailMatches("MERGE","INTO",MatchAny,"AS",MatchAny,"USING",MatchAny,MatchAnyExcept("ON|AS"))||
4093+
TailMatches("MERGE","INTO",MatchAny,MatchAny,"USING",MatchAny,MatchAnyExcept("ON|AS")))
40774094
COMPLETE_WITH("ON");
4078-
/* ON condition */
4095+
4096+
/* Complete MERGE INTO ... ON with target table attributes */
40794097
elseif (TailMatches("INTO",MatchAny,"USING",MatchAny,"ON"))
40804098
COMPLETE_WITH_ATTR(prev4_wd);
40814099
elseif (TailMatches("INTO",MatchAny,"AS",MatchAny,"USING",MatchAny,"AS",MatchAny,"ON"))
40824100
COMPLETE_WITH_ATTR(prev8_wd);
40834101
elseif (TailMatches("INTO",MatchAny,MatchAny,"USING",MatchAny,MatchAny,"ON"))
40844102
COMPLETE_WITH_ATTR(prev6_wd);
4085-
/* WHEN [NOT] MATCHED */
4086-
elseif (TailMatches("USING",MatchAny,"ON",MatchAny))
4087-
COMPLETE_WITH("WHEN MATCHED","WHEN NOT MATCHED");
4088-
elseif (TailMatches("USING",MatchAny,"AS",MatchAny,"ON",MatchAny))
4089-
COMPLETE_WITH("WHEN MATCHED","WHEN NOT MATCHED");
4090-
elseif (TailMatches("USING",MatchAny,MatchAny,"ON",MatchAny))
4103+
4104+
/*
4105+
* Complete ... USING <relation> [[AS] alias] ON join condition
4106+
* (consisting of one or three words typically used) with WHEN [NOT]
4107+
* MATCHED
4108+
*/
4109+
elseif (TailMatches("USING",MatchAny,"ON",MatchAny)||
4110+
TailMatches("USING",MatchAny,"AS",MatchAny,"ON",MatchAny)||
4111+
TailMatches("USING",MatchAny,MatchAny,"ON",MatchAny)||
4112+
TailMatches("USING",MatchAny,"ON",MatchAny,MatchAnyExcept("WHEN"),MatchAnyExcept("WHEN"))||
4113+
TailMatches("USING",MatchAny,"AS",MatchAny,"ON",MatchAny,MatchAnyExcept("WHEN"),MatchAnyExcept("WHEN"))||
4114+
TailMatches("USING",MatchAny,MatchAny,"ON",MatchAny,MatchAnyExcept("WHEN"),MatchAnyExcept("WHEN")))
40914115
COMPLETE_WITH("WHEN MATCHED","WHEN NOT MATCHED");
4092-
elseif (TailMatches("WHEN","MATCHED"))
4093-
COMPLETE_WITH("THEN","AND");
4094-
elseif (TailMatches("WHEN","NOT","MATCHED"))
4116+
elseif (TailMatches("USING",MatchAny,"ON",MatchAny,"WHEN")||
4117+
TailMatches("USING",MatchAny,"AS",MatchAny,"ON",MatchAny,"WHEN")||
4118+
TailMatches("USING",MatchAny,MatchAny,"ON",MatchAny,"WHEN")||
4119+
TailMatches("USING",MatchAny,"ON",MatchAny,MatchAny,MatchAny,"WHEN")||
4120+
TailMatches("USING",MatchAny,"AS",MatchAny,"ON",MatchAny,MatchAny,MatchAny,"WHEN")||
4121+
TailMatches("USING",MatchAny,MatchAny,"ON",MatchAny,MatchAny,MatchAny,"WHEN"))
4122+
COMPLETE_WITH("MATCHED","NOT MATCHED");
4123+
4124+
/* Complete ... WHEN [NOT] MATCHED with THEN/AND */
4125+
elseif (TailMatches("WHEN","MATCHED")||
4126+
TailMatches("WHEN","NOT","MATCHED"))
40954127
COMPLETE_WITH("THEN","AND");
4128+
4129+
/* Complete ... WHEN MATCHED THEN with UPDATE SET/DELETE/DO NOTHING */
40964130
elseif (TailMatches("WHEN","MATCHED","THEN"))
4097-
COMPLETE_WITH("UPDATE","DELETE");
4131+
COMPLETE_WITH("UPDATE SET","DELETE","DO NOTHING");
4132+
4133+
/* Complete ... WHEN NOT MATCHED THEN with INSERT/DO NOTHING */
40984134
elseif (TailMatches("WHEN","NOT","MATCHED","THEN"))
40994135
COMPLETE_WITH("INSERT","DO NOTHING");
41004136

4101-
/* Complete LOCK [TABLE] [ONLY] <table> [IN lockmode MODE] with "NOWAIT" */
4102-
elseif (HeadMatches("LOCK")&&TailMatches("MODE"))
4103-
COMPLETE_WITH("NOWAIT");
4104-
41054137
/* NOTIFY --- can be inside EXPLAIN, RULE, etc */
41064138
elseif (TailMatches("NOTIFY"))
41074139
COMPLETE_WITH_QUERY(Query_for_list_of_channels);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp