Tab completion support for ALTER SUBSCRIPTION REFRESH PUBLICATION

Started by Masahiko Sawadaalmost 9 years ago4 messages
#1Masahiko Sawada
sawada.mshk@gmail.com
1 attachment(s)

Hi,

I've attached a patch for $subject. Please check it.

Regards,

--
Masahiko Sawada
NIPPON TELEGRAPH AND TELEPHONE CORPORATION
NTT Open Source Software Center

Attachments:

fix_tab_completion_for_alter_sub.patchapplication/octet-stream; name=fix_tab_completion_for_alter_sub.patchDownload
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index 9dbb4a0..66bccff 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -1513,9 +1513,16 @@ psql_completion(const char *text, int start, int end)
 	/* ALTER SUBSCRIPTION <name> ... */
 	else if (Matches3("ALTER","SUBSCRIPTION",MatchAny))
 	{
-		COMPLETE_WITH_LIST7("WITH", "CONNECTION", "SET PUBLICATION", "ENABLE",
-							"DISABLE", "OWNER TO", "RENAME TO");
+		COMPLETE_WITH_LIST8("WITH", "CONNECTION", "SET PUBLICATION", "ENABLE",
+							"DISABLE", "OWNER TO", "RENAME TO", "REFRESH PUBLICATION WITH");
 	}
+	/* ALTER SUBSCRIPTION <name> REFRESH PUBLICATION WITH ( ... */
+	else if (HeadMatches3("ALTER", "SUBSCRIPTION", MatchAny) &&
+			 TailMatches4("REFRESH", "PUBLICATION", "WITH", "("))
+	{
+		COMPLETE_WITH_LIST2("COPY DATA", "NOCOPY DATA");
+	}
+	/* ALTER SUBSCRIPTION <name> .. WITH ( ... */
 	else if (HeadMatches3("ALTER", "SUBSCRIPTION", MatchAny) && TailMatches2("WITH", "("))
 	{
 		COMPLETE_WITH_CONST("SLOT NAME");
#2Fujii Masao
masao.fujii@gmail.com
In reply to: Masahiko Sawada (#1)
1 attachment(s)
Re: Tab completion support for ALTER SUBSCRIPTION REFRESH PUBLICATION

On Wed, Apr 12, 2017 at 5:12 PM, Masahiko Sawada <sawada.mshk@gmail.com> wrote:

Hi,

I've attached a patch for $subject. Please check it.

+ COMPLETE_WITH_LIST8("WITH", "CONNECTION", "SET PUBLICATION", "ENABLE",
+ "DISABLE", "OWNER TO", "RENAME TO", "REFRESH PUBLICATION WITH");

"WITH" should be "WITH ("?
Also "REFRESH PUBLICATION WITH" should be "REFRESH PUBLICATION WITH ("?

BTW, I found that ALTER SUBSCRIPTION ... RENAME TO exists in tab-complete.c,
but not in the documentation. ALTER PUBLICATION has the same issue, too.
So I think that we need to apply the attached patch which improves the
documentation
for ALTER PUBLICATION and SUBSCRIPTION.

Regards,

--
Fujii Masao

Attachments:

bugfix.patchapplication/octet-stream; name=bugfix.patchDownload
*** a/doc/src/sgml/ref/alter_publication.sgml
--- b/doc/src/sgml/ref/alter_publication.sgml
***************
*** 30,35 **** ALTER PUBLICATION <replaceable class="PARAMETER">name</replaceable> WITH ( <repl
--- 30,36 ----
      | PUBLISH DELETE | NOPUBLISH DELETE
  
  ALTER PUBLICATION <replaceable class="PARAMETER">name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_USER | SESSION_USER }
+ ALTER PUBLICATION <replaceable class="PARAMETER">name</replaceable> RENAME TO <replaceable>new_name</replaceable>
  ALTER PUBLICATION <replaceable class="PARAMETER">name</replaceable> ADD TABLE <replaceable class="PARAMETER">table_name</replaceable> [, ...]
  ALTER PUBLICATION <replaceable class="PARAMETER">name</replaceable> SET TABLE <replaceable class="PARAMETER">table_name</replaceable> [, ...]
  ALTER PUBLICATION <replaceable class="PARAMETER">name</replaceable> DROP TABLE <replaceable class="PARAMETER">table_name</replaceable> [, ...]
***************
*** 79,84 **** ALTER PUBLICATION <replaceable class="PARAMETER">name</replaceable> DROP TABLE <
--- 80,103 ----
     </varlistentry>
  
     <varlistentry>
+     <term><replaceable class="parameter">new_owner</replaceable></term>
+     <listitem>
+      <para>
+       The user name of the new owner of the publication.
+      </para>
+     </listitem>
+    </varlistentry>
+ 
+    <varlistentry>
+     <term><replaceable class="parameter">new_name</replaceable></term>
+     <listitem>
+      <para>
+       The new name for the publication.
+      </para>
+     </listitem>
+    </varlistentry>
+ 
+    <varlistentry>
      <term><literal>PUBLISH INSERT</literal></term>
      <term><literal>NOPUBLISH INSERT</literal></term>
      <term><literal>PUBLISH UPDATE</literal></term>
*** a/doc/src/sgml/ref/alter_subscription.sgml
--- b/doc/src/sgml/ref/alter_subscription.sgml
***************
*** 35,40 **** ALTER SUBSCRIPTION <replaceable class="PARAMETER">name</replaceable> REFRESH PUB
--- 35,41 ----
      COPY DATA | NOCOPY DATA
  
  ALTER SUBSCRIPTION <replaceable class="PARAMETER">name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_USER | SESSION_USER }
+ ALTER SUBSCRIPTION <replaceable class="PARAMETER">name</replaceable> RENAME TO <replaceable>new_name</replaceable>
  ALTER SUBSCRIPTION <replaceable class="PARAMETER">name</replaceable> CONNECTION '<replaceable>conninfo</replaceable>'
  ALTER SUBSCRIPTION <replaceable class="PARAMETER">name</replaceable> ENABLE
  ALTER SUBSCRIPTION <replaceable class="PARAMETER">name</replaceable> DISABLE
***************
*** 70,75 **** ALTER SUBSCRIPTION <replaceable class="PARAMETER">name</replaceable> DISABLE
--- 71,94 ----
     </varlistentry>
  
     <varlistentry>
+     <term><replaceable class="parameter">new_owner</replaceable></term>
+     <listitem>
+      <para>
+       The user name of the new owner of the subscription.
+      </para>
+     </listitem>
+    </varlistentry>
+ 
+    <varlistentry>
+     <term><replaceable class="parameter">new_name</replaceable></term>
+     <listitem>
+      <para>
+       The new name for the subscription.
+      </para>
+     </listitem>
+    </varlistentry>
+ 
+    <varlistentry>
      <term><literal>CONNECTION '<replaceable class="parameter">conninfo</replaceable>'</literal></term>
      <term><literal>SLOT NAME = <replaceable class="parameter">slot_name</replaceable></literal></term>
      <listitem>
#3Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Fujii Masao (#2)
1 attachment(s)
Re: Tab completion support for ALTER SUBSCRIPTION REFRESH PUBLICATION

On Wed, Apr 12, 2017 at 11:48 PM, Fujii Masao <masao.fujii@gmail.com> wrote:

On Wed, Apr 12, 2017 at 5:12 PM, Masahiko Sawada <sawada.mshk@gmail.com> wrote:

Hi,

I've attached a patch for $subject. Please check it.

+ COMPLETE_WITH_LIST8("WITH", "CONNECTION", "SET PUBLICATION", "ENABLE",
+ "DISABLE", "OWNER TO", "RENAME TO", "REFRESH PUBLICATION WITH");

"WITH" should be "WITH ("?
Also "REFRESH PUBLICATION WITH" should be "REFRESH PUBLICATION WITH ("?

Agreed. I found other bugs of tab completion of PUB/SUB DDLs. Attached
latest patch incorporated these fixes.

BTW, I found that ALTER SUBSCRIPTION ... RENAME TO exists in tab-complete.c,
but not in the documentation. ALTER PUBLICATION has the same issue, too.
So I think that we need to apply the attached patch which improves the
documentation
for ALTER PUBLICATION and SUBSCRIPTION.

+1

Regards,

--
Masahiko Sawada
NIPPON TELEGRAPH AND TELEPHONE CORPORATION
NTT Open Source Software Center

Attachments:

tab_completion_for_pub_sub_ddls_v2.patchapplication/octet-stream; name=tab_completion_for_pub_sub_ddls_v2.patchDownload
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index 9dbb4a0..e2a3351 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -1501,7 +1501,7 @@ psql_completion(const char *text, int start, int end)
 	/* ALTER PUBLICATION <name> ...*/
 	else if (Matches3("ALTER","PUBLICATION",MatchAny))
 	{
-		COMPLETE_WITH_LIST6("WITH", "ADD TABLE", "SET TABLE", "DROP TABLE",
+		COMPLETE_WITH_LIST6("WITH (", "ADD TABLE", "SET TABLE", "DROP TABLE",
 							"OWNER TO", "RENAME TO");
 	}
 	/* ALTER PUBLICATION <name> .. WITH ( ... */
@@ -1513,9 +1513,16 @@ psql_completion(const char *text, int start, int end)
 	/* ALTER SUBSCRIPTION <name> ... */
 	else if (Matches3("ALTER","SUBSCRIPTION",MatchAny))
 	{
-		COMPLETE_WITH_LIST7("WITH", "CONNECTION", "SET PUBLICATION", "ENABLE",
-							"DISABLE", "OWNER TO", "RENAME TO");
+		COMPLETE_WITH_LIST8("WITH (", "CONNECTION", "SET PUBLICATION", "ENABLE",
+							"DISABLE", "OWNER TO", "RENAME TO", "REFRESH PUBLICATION WITH (");
 	}
+	/* ALTER SUBSCRIPTION <name> REFRESH PUBLICATION WITH ( ... */
+	else if (HeadMatches3("ALTER", "SUBSCRIPTION", MatchAny) &&
+			 TailMatches4("REFRESH", "PUBLICATION", "WITH", "("))
+	{
+		COMPLETE_WITH_LIST2("COPY DATA", "NOCOPY DATA");
+	}
+	/* ALTER SUBSCRIPTION <name> .. WITH ( ... */
 	else if (HeadMatches3("ALTER", "SUBSCRIPTION", MatchAny) && TailMatches2("WITH", "("))
 	{
 		COMPLETE_WITH_CONST("SLOT NAME");
@@ -2419,10 +2426,13 @@ psql_completion(const char *text, int start, int end)
 	{
 		/* complete with nothing here as this refers to remote publications */
 	}
+	else if (HeadMatches2("CREATE", "SUBSCRIPTION") && TailMatches2("PUBLICATION", MatchAny))
+		COMPLETE_WITH_CONST("WITH (");
 	/* Complete "CREATE SUBSCRIPTION <name> ...  WITH ( <opt>" */
 	else if (HeadMatches2("CREATE", "SUBSCRIPTION") && TailMatches2("WITH", "("))
-		COMPLETE_WITH_LIST5("ENABLED", "DISABLED", "CREATE SLOT",
-							"NOCREATE SLOT", "SLOT NAME");
+		COMPLETE_WITH_LIST8("ENABLED", "DISABLED", "CREATE SLOT",
+							"NOCREATE SLOT", "SLOT NAME", "COPY DATA", "NOCOPY DATA",
+							"NOCONNECT");
 
 /* CREATE TRIGGER --- is allowed inside CREATE SCHEMA, so use TailMatches */
 	/* complete CREATE TRIGGER <name> with BEFORE,AFTER,INSTEAD OF */
@@ -2681,6 +2691,10 @@ psql_completion(const char *text, int start, int end)
 	else if (Matches5("DROP", "RULE", MatchAny, "ON", MatchAny))
 		COMPLETE_WITH_LIST2("CASCADE", "RESTRICT");
 
+	/* DROP SUBSCRIPTION */
+	else if (Matches3("DROP", "SUBSCRIPTION", MatchAny))
+		COMPLETE_WITH_LIST2("DROP SLOT", "NODROP SLOT");
+
 /* EXECUTE */
 	else if (Matches1("EXECUTE"))
 		COMPLETE_WITH_QUERY(Query_for_list_of_prepared_statements);
#4Fujii Masao
masao.fujii@gmail.com
In reply to: Masahiko Sawada (#3)
Re: Tab completion support for ALTER SUBSCRIPTION REFRESH PUBLICATION

On Thu, Apr 13, 2017 at 11:05 AM, Masahiko Sawada <sawada.mshk@gmail.com> wrote:

On Wed, Apr 12, 2017 at 11:48 PM, Fujii Masao <masao.fujii@gmail.com> wrote:

On Wed, Apr 12, 2017 at 5:12 PM, Masahiko Sawada <sawada.mshk@gmail.com> wrote:

Hi,

I've attached a patch for $subject. Please check it.

+ COMPLETE_WITH_LIST8("WITH", "CONNECTION", "SET PUBLICATION", "ENABLE",
+ "DISABLE", "OWNER TO", "RENAME TO", "REFRESH PUBLICATION WITH");

"WITH" should be "WITH ("?
Also "REFRESH PUBLICATION WITH" should be "REFRESH PUBLICATION WITH ("?

Agreed. I found other bugs of tab completion of PUB/SUB DDLs. Attached
latest patch incorporated these fixes.

Thanks for the patch! Pushed.

BTW, I found that ALTER SUBSCRIPTION ... RENAME TO exists in tab-complete.c,
but not in the documentation. ALTER PUBLICATION has the same issue, too.
So I think that we need to apply the attached patch which improves the
documentation
for ALTER PUBLICATION and SUBSCRIPTION.

+1

Also pushed.

Regards,

--
Fujii Masao

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers