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

Commit4923550

Browse files
Tab completion for MERGE
Author: Pavan Deolasee
1 parentaa3faa3 commit4923550

File tree

1 file changed

+81
-6
lines changed

1 file changed

+81
-6
lines changed

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

Lines changed: 81 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -659,6 +659,28 @@ static const SchemaQuery Query_for_list_of_updatables = {
659659
NULL
660660
};
661661

662+
/* Relations supporting MERGE */
663+
staticconstSchemaQueryQuery_for_list_of_mergetargets= {
664+
/* min_server_version */
665+
110000,
666+
/* catname */
667+
"pg_catalog.pg_class c",
668+
/* selcondition */
669+
"c.relkind IN ("CppAsString2(RELKIND_RELATION)", "
670+
CppAsString2(RELKIND_PARTITIONED_TABLE)") AND "
671+
"c.relhasrules = false AND "
672+
"(c.relhassubclass = false OR "
673+
" c.relkind = "CppAsString2(RELKIND_PARTITIONED_TABLE)")",
674+
/* viscondition */
675+
"pg_catalog.pg_table_is_visible(c.oid)",
676+
/* namespace */
677+
"c.relnamespace",
678+
/* result */
679+
"pg_catalog.quote_ident(c.relname)",
680+
/* qualresult */
681+
NULL
682+
};
683+
662684
staticconstSchemaQueryQuery_for_list_of_relations= {
663685
/* min_server_version */
664686
0,
@@ -1605,7 +1627,7 @@ psql_completion(const char *text, int start, int end)
16051627
"COMMENT","COMMIT","COPY","CREATE","DEALLOCATE","DECLARE",
16061628
"DELETE FROM","DISCARD","DO","DROP","END","EXECUTE","EXPLAIN",
16071629
"FETCH","GRANT","IMPORT","INSERT","LISTEN","LOAD","LOCK",
1608-
"MOVE","NOTIFY","PREPARE",
1630+
"MERGE","MOVE","NOTIFY","PREPARE",
16091631
"REASSIGN","REFRESH MATERIALIZED VIEW","REINDEX","RELEASE",
16101632
"RESET","REVOKE","ROLLBACK",
16111633
"SAVEPOINT","SECURITY LABEL","SELECT","SET","SHOW","START",
@@ -2999,14 +3021,15 @@ psql_completion(const char *text, int start, int end)
29993021
* Complete EXPLAIN [ANALYZE] [VERBOSE] with list of EXPLAIN-able commands
30003022
*/
30013023
elseif (Matches1("EXPLAIN"))
3002-
COMPLETE_WITH_LIST7("SELECT","INSERT","DELETE","UPDATE","DECLARE",
3003-
"ANALYZE","VERBOSE");
3024+
COMPLETE_WITH_LIST8("SELECT","INSERT","DELETE","UPDATE","MERGE",
3025+
"DECLARE","ANALYZE","VERBOSE");
30043026
elseif (Matches2("EXPLAIN","ANALYZE"))
3005-
COMPLETE_WITH_LIST6("SELECT","INSERT","DELETE","UPDATE","DECLARE",
3006-
"VERBOSE");
3027+
COMPLETE_WITH_LIST7("SELECT","INSERT","DELETE","UPDATE","MERGE",
3028+
"DECLARE","VERBOSE");
30073029
elseif (Matches2("EXPLAIN","VERBOSE")||
30083030
Matches3("EXPLAIN","ANALYZE","VERBOSE"))
3009-
COMPLETE_WITH_LIST5("SELECT","INSERT","DELETE","UPDATE","DECLARE");
3031+
COMPLETE_WITH_LIST6("SELECT","INSERT","DELETE","UPDATE","MERGE",
3032+
"DECLARE");
30103033

30113034
/* FETCH && MOVE */
30123035
/* Complete FETCH with one of FORWARD, BACKWARD, RELATIVE */
@@ -3229,6 +3252,9 @@ psql_completion(const char *text, int start, int end)
32293252
COMPLETE_WITH_CONST("SCHEMA");
32303253

32313254
/* INSERT --- can be inside EXPLAIN, RULE, etc */
3255+
/* Complete NOT MATCHED THEN INSERT */
3256+
elseif (TailMatches4("NOT","MATCHED","THEN","INSERT"))
3257+
COMPLETE_WITH_LIST2("VALUES","(");
32323258
/* Complete INSERT with "INTO" */
32333259
elseif (TailMatches1("INSERT"))
32343260
COMPLETE_WITH_CONST("INTO");
@@ -3300,6 +3326,55 @@ psql_completion(const char *text, int start, int end)
33003326
Matches5("LOCK","TABLE",MatchAny,"IN","SHARE"))
33013327
COMPLETE_WITH_LIST3("MODE","ROW EXCLUSIVE MODE",
33023328
"UPDATE EXCLUSIVE MODE");
3329+
/* MERGE --- can be inside EXPLAIN */
3330+
elseif (TailMatches1("MERGE"))
3331+
COMPLETE_WITH_CONST("INTO");
3332+
elseif (TailMatches2("MERGE","INTO"))
3333+
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_mergetargets,NULL);
3334+
elseif (TailMatches3("MERGE","INTO",MatchAny))
3335+
COMPLETE_WITH_LIST2("USING","AS");
3336+
elseif (TailMatches4("MERGE","INTO",MatchAny,"USING"))
3337+
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables,NULL);
3338+
/* with [AS] alias */
3339+
elseif (TailMatches5("MERGE","INTO",MatchAny,"AS",MatchAny))
3340+
COMPLETE_WITH_CONST("USING");
3341+
elseif (TailMatches4("MERGE","INTO",MatchAny,MatchAny))
3342+
COMPLETE_WITH_CONST("USING");
3343+
elseif (TailMatches6("MERGE","INTO",MatchAny,"AS",MatchAny,"USING"))
3344+
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables,NULL);
3345+
elseif (TailMatches5("MERGE","INTO",MatchAny,MatchAny,"USING"))
3346+
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables,NULL);
3347+
/* ON */
3348+
elseif (TailMatches5("MERGE","INTO",MatchAny,"USING",MatchAny))
3349+
COMPLETE_WITH_CONST("ON");
3350+
elseif (TailMatches8("INTO",MatchAny,"AS",MatchAny,"USING",MatchAny,"AS",MatchAny))
3351+
COMPLETE_WITH_CONST("ON");
3352+
elseif (TailMatches6("INTO",MatchAny,MatchAny,"USING",MatchAny,MatchAny))
3353+
COMPLETE_WITH_CONST("ON");
3354+
/* ON condition */
3355+
elseif (TailMatches5("INTO",MatchAny,"USING",MatchAny,"ON"))
3356+
COMPLETE_WITH_ATTR(prev4_wd,"");
3357+
elseif (TailMatches9("INTO",MatchAny,"AS",MatchAny,"USING",MatchAny,"AS",MatchAny,"ON"))
3358+
COMPLETE_WITH_ATTR(prev8_wd,"");
3359+
elseif (TailMatches7("INTO",MatchAny,MatchAny,"USING",MatchAny,MatchAny,"ON"))
3360+
COMPLETE_WITH_ATTR(prev6_wd,"");
3361+
/* WHEN [NOT] MATCHED */
3362+
elseif (TailMatches4("USING",MatchAny,"ON",MatchAny))
3363+
COMPLETE_WITH_LIST2("WHEN MATCHED","WHEN NOT MATCHED");
3364+
elseif (TailMatches6("USING",MatchAny,"AS",MatchAny,"ON",MatchAny))
3365+
COMPLETE_WITH_LIST2("WHEN MATCHED","WHEN NOT MATCHED");
3366+
elseif (TailMatches5("USING",MatchAny,MatchAny,"ON",MatchAny))
3367+
COMPLETE_WITH_LIST2("WHEN MATCHED","WHEN NOT MATCHED");
3368+
elseif (TailMatches2("WHEN","MATCHED"))
3369+
COMPLETE_WITH_LIST2("THEN","AND");
3370+
elseif (TailMatches3("WHEN","NOT","MATCHED"))
3371+
COMPLETE_WITH_LIST2("THEN","AND");
3372+
elseif (TailMatches3("WHEN","MATCHED","THEN"))
3373+
COMPLETE_WITH_LIST2("UPDATE","DELETE");
3374+
elseif (TailMatches4("WHEN","NOT","MATCHED","THEN"))
3375+
COMPLETE_WITH_LIST2("INSERT","DO");
3376+
elseif (TailMatches5("WHEN","NOT","MATCHED","THEN","DO"))
3377+
COMPLETE_WITH_CONST("NOTHING");
33033378

33043379
/* NOTIFY --- can be inside EXPLAIN, RULE, etc */
33053380
elseif (TailMatches1("NOTIFY"))

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp