From 92c3cebb24ce1473980975bb3666c92c2e0fac55 Mon Sep 17 00:00:00 2001 From: Marcos Magueta Date: Wed, 21 Jan 2026 17:11:39 -0300 Subject: [PATCH 3/5] Add psql tab completion for XMLSCHEMA commands --- src/bin/psql/tab-complete.in.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/bin/psql/tab-complete.in.c b/src/bin/psql/tab-complete.in.c index 8b91bc00062..3e3d7888294 100644 --- a/src/bin/psql/tab-complete.in.c +++ b/src/bin/psql/tab-complete.in.c @@ -797,6 +797,13 @@ static const SchemaQuery Query_for_list_of_matviews = { .result = "c.relname", }; +static const SchemaQuery Query_for_list_of_xmlschemas = { + .catname = "pg_catalog.pg_xmlschema s", + .viscondition = "pg_catalog.has_schema_privilege(s.oid, 'USAGE')", + .namespace = "s.schemanamespace", + .result = "s.schemaname", +}; + static const SchemaQuery Query_for_list_of_indexes = { .catname = "pg_catalog.pg_class c", .selcondition = @@ -1364,6 +1371,7 @@ static const pgsql_thing_t words_after_create[] = { {"USER", Query_for_list_of_roles, NULL, NULL, Keywords_for_user_thing}, {"USER MAPPING FOR", NULL, NULL, NULL}, {"VIEW", NULL, NULL, &Query_for_list_of_views}, + {"XMLSCHEMA", NULL, NULL, &Query_for_list_of_xmlschemas}, {NULL} /* end of list */ }; @@ -2701,6 +2709,10 @@ match_previous_words(int pattern_id, else if (Matches("ALTER", "MATERIALIZED", "VIEW", MatchAny, "SET", "ACCESS", "METHOD")) COMPLETE_WITH_QUERY(Query_for_list_of_table_access_methods); + /* ALTER XMLSCHEMA */ + else if (Matches("ALTER", "XMLSCHEMA", MatchAny)) + COMPLETE_WITH("OWNER TO", "RENAME TO", "SET SCHEMA"); + /* ALTER POLICY */ else if (Matches("ALTER", "POLICY")) COMPLETE_WITH_QUERY(Query_for_list_of_policies); @@ -4178,6 +4190,16 @@ match_previous_words(int pattern_id, Matches("CREATE", "MATERIALIZED", "VIEW", MatchAny, "USING", MatchAny, "AS")) COMPLETE_WITH("SELECT"); +/* CREATE XMLSCHEMA */ + else if (Matches("CREATE", "XMLSCHEMA", MatchAny)) + COMPLETE_WITH("AS", "IF"); + else if (Matches("CREATE", "XMLSCHEMA", "IF")) + COMPLETE_WITH("NOT"); + else if (Matches("CREATE", "XMLSCHEMA", "IF", "NOT")) + COMPLETE_WITH("EXISTS"); + else if (Matches("CREATE", "XMLSCHEMA", "IF", "NOT", "EXISTS", MatchAny)) + COMPLETE_WITH("AS"); + /* CREATE EVENT TRIGGER */ else if (Matches("CREATE", "EVENT")) COMPLETE_WITH("TRIGGER"); -- 2.51.2