Re: [HACKERS] Patch: add psql tab completion for event triggers

2014-04-14 Thread Robert Haas
On Wed, Apr 9, 2014 at 8:58 PM, Ian Barwick i...@2ndquadrant.com wrote:
 Apologies again, that was ill-thought out. Revised patch attached with only
 the additions related to event triggers, and the small fix for ALTER TRIGGER
 mentioned above which ensures RENAME TO is applied only when ALTER
 TRIGGER name ON sth was input; currently there is no check for a
 preceding ALTER, resulting in the spurious RENAME TO when completing
 CREATE EVENT TRIGGER.

OK, committed.

(I know this was submitted rather late, but I think we've often
allowed tab-completion fixups at similar times in past releases, since
they are quite mechanical.  If anyone feels that I shouldn't have
committed this, please advise.)

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


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


Re: [HACKERS] Patch: add psql tab completion for event triggers

2014-04-14 Thread Michael Paquier
On Mon, Apr 14, 2014 at 9:46 PM, Robert Haas robertmh...@gmail.com wrote:
 On Wed, Apr 9, 2014 at 8:58 PM, Ian Barwick i...@2ndquadrant.com wrote:
 Apologies again, that was ill-thought out. Revised patch attached with only
 the additions related to event triggers, and the small fix for ALTER TRIGGER
 mentioned above which ensures RENAME TO is applied only when ALTER
 TRIGGER name ON sth was input; currently there is no check for a
 preceding ALTER, resulting in the spurious RENAME TO when completing
 CREATE EVENT TRIGGER.

 OK, committed.

 (I know this was submitted rather late, but I think we've often
 allowed tab-completion fixups at similar times in past releases, since
 they are quite mechanical.  If anyone feels that I shouldn't have
 committed this, please advise.)
+1 for this change even if it came late in-game. Patch is
straight-forward, and this is always useful to have.
-- 
Michael


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


Re: [HACKERS] Patch: add psql tab completion for event triggers

2014-04-09 Thread Robert Haas
On Tue, Apr 8, 2014 at 5:27 AM, Ian Barwick i...@2ndquadrant.com wrote:
 On 08/04/14 18:22, Ian Barwick wrote:

 As it was kind of annoying not to have this when playing around with
 event triggers.

 This also tightens up the existing tab completion for ALTER TRIGGER,
 which contained redundant code for table name completion, and which was
 also causing a spurious RENAME TO to be inserted in this context:

  CREATE EVENT TRIGGER foo ON {event} ^I


 Apologies, previous patch had some unrelated changes in it.

 Correct patch attached.

This *still* has some unrelated things in it, like s/Pgsql/Postgres/,
and numerous hunks consisting entirely of whitespace changes and/or
changes to unrelated comments.

Also, what's the point of this hunk:

*** psql_completion(const char *text, int st
*** 1318,1340 
 pg_strcasecmp(prev2_wd, TRIGGER) == 0)
COMPLETE_WITH_CONST(ON);

-   else if (pg_strcasecmp(prev4_wd, ALTER) == 0 
-pg_strcasecmp(prev3_wd, TRIGGER) == 0)
-   {
-   completion_info_charp = prev2_wd;
-   COMPLETE_WITH_QUERY(Query_for_list_of_tables_for_trigger);
-   }
-
/*
!* If we have ALTER TRIGGER sth ON, then add the correct tablename
 */
else if (pg_strcasecmp(prev4_wd, ALTER) == 0 
 pg_strcasecmp(prev3_wd, TRIGGER) == 0 
 pg_strcasecmp(prev_wd, ON) == 0)
!   COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL);

/* ALTER TRIGGER name ON name */
!   else if (pg_strcasecmp(prev4_wd, TRIGGER) == 0 
 pg_strcasecmp(prev2_wd, ON) == 0)
COMPLETE_WITH_CONST(RENAME TO);

--- 1355,1374 
 pg_strcasecmp(prev2_wd, TRIGGER) == 0)
COMPLETE_WITH_CONST(ON);

/*
!* If we have ALTER TRIGGER name ON, then add the correct tablename
 */
else if (pg_strcasecmp(prev4_wd, ALTER) == 0 
 pg_strcasecmp(prev3_wd, TRIGGER) == 0 
 pg_strcasecmp(prev_wd, ON) == 0)
!   {
!   completion_info_charp = prev2_wd;
!   COMPLETE_WITH_QUERY(Query_for_list_of_tables_for_trigger);
!   }

/* ALTER TRIGGER name ON name */
!   else if (pg_strcasecmp(prev5_wd, ALTER) == 0 
!pg_strcasecmp(prev4_wd, TRIGGER) == 0 
 pg_strcasecmp(prev2_wd, ON) == 0)
COMPLETE_WITH_CONST(RENAME TO);



-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


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


Re: [HACKERS] Patch: add psql tab completion for event triggers

2014-04-09 Thread Ian Barwick

On 10/04/14 00:23, Robert Haas wrote:

On Tue, Apr 8, 2014 at 5:27 AM, Ian Barwick i...@2ndquadrant.com wrote:

On 08/04/14 18:22, Ian Barwick wrote:


As it was kind of annoying not to have this when playing around with
event triggers.

This also tightens up the existing tab completion for ALTER TRIGGER,
which contained redundant code for table name completion, and which was
also causing a spurious RENAME TO to be inserted in this context:

  CREATE EVENT TRIGGER foo ON {event} ^I



Apologies, previous patch had some unrelated changes in it.

Correct patch attached.


This *still* has some unrelated things in it, like s/Pgsql/Postgres/,
and numerous hunks consisting entirely of whitespace changes and/or
changes to unrelated comments.


Apologies again, that was ill-thought out. Revised patch attached with 
only the additions related to event triggers, and the small fix for 
ALTER TRIGGER mentioned above which ensures RENAME TO is applied only 
when ALTER TRIGGER name ON sth was input; currently there is no 
check for a preceding ALTER, resulting in the spurious RENAME TO 
when completing CREATE EVENT TRIGGER.



Also, what's the point of this hunk:

*** psql_completion(const char *text, int st
*** 1318,1340 
  pg_strcasecmp(prev2_wd, TRIGGER) == 0)
 COMPLETE_WITH_CONST(ON);

-   else if (pg_strcasecmp(prev4_wd, ALTER) == 0 
-pg_strcasecmp(prev3_wd, TRIGGER) == 0)
-   {
-   completion_info_charp = prev2_wd;
-   COMPLETE_WITH_QUERY(Query_for_list_of_tables_for_trigger);
-   }
-
 /*
!* If we have ALTER TRIGGER sth ON, then add the correct tablename
  */
 else if (pg_strcasecmp(prev4_wd, ALTER) == 0 
  pg_strcasecmp(prev3_wd, TRIGGER) == 0 
  pg_strcasecmp(prev_wd, ON) == 0)
!   COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL);

 /* ALTER TRIGGER name ON name */
!   else if (pg_strcasecmp(prev4_wd, TRIGGER) == 0 
  pg_strcasecmp(prev2_wd, ON) == 0)
 COMPLETE_WITH_CONST(RENAME TO);

--- 1355,1374 
  pg_strcasecmp(prev2_wd, TRIGGER) == 0)
 COMPLETE_WITH_CONST(ON);

 /*
!* If we have ALTER TRIGGER name ON, then add the correct tablename
  */
 else if (pg_strcasecmp(prev4_wd, ALTER) == 0 
  pg_strcasecmp(prev3_wd, TRIGGER) == 0 
  pg_strcasecmp(prev_wd, ON) == 0)
!   {
!   completion_info_charp = prev2_wd;
!   COMPLETE_WITH_QUERY(Query_for_list_of_tables_for_trigger);
!   }

 /* ALTER TRIGGER name ON name */
!   else if (pg_strcasecmp(prev5_wd, ALTER) == 0 
!pg_strcasecmp(prev4_wd, TRIGGER) == 0 
  pg_strcasecmp(prev2_wd, ON) == 0)
 COMPLETE_WITH_CONST(RENAME TO);



I'll submit that as a separate patch. This was intended to fix this:


else if (pg_strcasecmp(prev4_wd, ALTER) == 0 
 pg_strcasecmp(prev3_wd, TRIGGER) == 0)
{
completion_info_charp = prev2_wd;
COMPLETE_WITH_QUERY(Query_for_list_of_tables_for_trigger);
}

/*
 * If we have ALTER TRIGGER sth ON, then add the correct tablename
 */
else if (pg_strcasecmp(prev4_wd, ALTER) == 0 
 pg_strcasecmp(prev3_wd, TRIGGER) == 0 
 pg_strcasecmp(prev_wd, ON) == 0)
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL);


as the second else if clause is redundant.


Regards

Ian Barwick


--
 Ian Barwick   http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training  Services
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
new file mode 100644
index 202ffce..6d26ffc
*** a/src/bin/psql/tab-complete.c
--- b/src/bin/psql/tab-complete.c
*** static const SchemaQuery Query_for_list_
*** 714,719 
--- 714,724 
 FROM pg_catalog.pg_prepared_statements \
WHERE substring(pg_catalog.quote_ident(name),1,%d)='%s'
  
+ #define Query_for_list_of_event_triggers \
+  SELECT pg_catalog.quote_ident(evtname) \
+FROM pg_catalog.pg_event_trigger \
+   WHERE substring(pg_catalog.quote_ident(evtname),1,%d)='%s'
+ 
  /*
   * This is a list of all things in Pgsql, which can show up after CREATE or
   * DROP; and there is also a query to get a list of them.
*** static const pgsql_thing_t words_after_c
*** 746,751 
--- 751,757 
  	{DATABASE, Query_for_list_of_databases},
  	{DICTIONARY, Query_for_list_of_ts_dictionaries, NULL, THING_NO_SHOW},
  	{DOMAIN, NULL, Query_for_list_of_domains},
+ 	{EVENT TRIGGER, NULL, NULL},
  	{EXTENSION, Query_for_list_of_extensions},
  	{FOREIGN DATA WRAPPER, NULL, NULL},
  	{FOREIGN TABLE, 

[HACKERS] Patch: add psql tab completion for event triggers

2014-04-08 Thread Ian Barwick
As it was kind of annoying not to have this when playing around with 
event triggers.


This also tightens up the existing tab completion for ALTER TRIGGER, 
which contained redundant code for table name completion, and which was 
also causing a spurious RENAME TO to be inserted in this context:


CREATE EVENT TRIGGER foo ON {event} ^I


Regards

Ian Barwick

--
 Ian Barwick   http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training  Services
diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml
new file mode 100644
index 6e2fbda..b5807f3
*** a/doc/src/sgml/func.sgml
--- b/doc/src/sgml/func.sgml
*** FOR EACH ROW EXECUTE PROCEDURE suppress_
*** 17446,17452 
 /para
  
 para
! functionpg_event_trigger_dropped_objects/ returns a list of all object
  dropped by the command in whose literalsql_drop/ event it is called.
  If called in any other context,
  functionpg_event_trigger_dropped_objects/ raises an error.
--- 17446,17452 
 /para
  
 para
! functionpg_event_trigger_dropped_objects/ returns a list of all objects
  dropped by the command in whose literalsql_drop/ event it is called.
  If called in any other context,
  functionpg_event_trigger_dropped_objects/ raises an error.
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
new file mode 100644
index 202ffce..7179642
*** a/src/bin/psql/tab-complete.c
--- b/src/bin/psql/tab-complete.c
*** static const SchemaQuery Query_for_list_
*** 714,721 
 FROM pg_catalog.pg_prepared_statements \
WHERE substring(pg_catalog.quote_ident(name),1,%d)='%s'
  
  /*
!  * This is a list of all things in Pgsql, which can show up after CREATE or
   * DROP; and there is also a query to get a list of them.
   */
  
--- 714,726 
 FROM pg_catalog.pg_prepared_statements \
WHERE substring(pg_catalog.quote_ident(name),1,%d)='%s'
  
+ #define Query_for_list_of_event_triggers \
+  SELECT pg_catalog.quote_ident(evtname) \
+FROM pg_catalog.pg_event_trigger \
+   WHERE substring(pg_catalog.quote_ident(evtname),1,%d)='%s'
+ 
  /*
!  * This is a list of all things in Postgres, which can show up after CREATE or
   * DROP; and there is also a query to get a list of them.
   */
  
*** static const pgsql_thing_t words_after_c
*** 746,751 
--- 751,757 
  	{DATABASE, Query_for_list_of_databases},
  	{DICTIONARY, Query_for_list_of_ts_dictionaries, NULL, THING_NO_SHOW},
  	{DOMAIN, NULL, Query_for_list_of_domains},
+ 	{EVENT TRIGGER, NULL, NULL},
  	{EXTENSION, Query_for_list_of_extensions},
  	{FOREIGN DATA WRAPPER, NULL, NULL},
  	{FOREIGN TABLE, NULL, NULL},
*** psql_completion(const char *text, int st
*** 934,942 
  	{
  		static const char *const list_ALTER[] =
  		{AGGREGATE, COLLATION, CONVERSION, DATABASE, DEFAULT PRIVILEGES, DOMAIN,
! 			EXTENSION, FOREIGN DATA WRAPPER, FOREIGN TABLE, FUNCTION,
  			GROUP, INDEX, LANGUAGE, LARGE OBJECT, MATERIALIZED VIEW, OPERATOR,
! 			 ROLE, RULE, SCHEMA, SERVER, SEQUENCE, SYSTEM SET, TABLE,
  			TABLESPACE, TEXT SEARCH, TRIGGER, TYPE,
  		USER, USER MAPPING FOR, VIEW, NULL};
  
--- 940,948 
  	{
  		static const char *const list_ALTER[] =
  		{AGGREGATE, COLLATION, CONVERSION, DATABASE, DEFAULT PRIVILEGES, DOMAIN,
! 			EXTENSION, EVENT TRIGGER, FOREIGN DATA WRAPPER, FOREIGN TABLE, FUNCTION,
  			GROUP, INDEX, LANGUAGE, LARGE OBJECT, MATERIALIZED VIEW, OPERATOR,
! 			ROLE, RULE, SCHEMA, SERVER, SEQUENCE, SYSTEM SET, TABLE,
  			TABLESPACE, TEXT SEARCH, TRIGGER, TYPE,
  		USER, USER MAPPING FOR, VIEW, NULL};
  
*** psql_completion(const char *text, int st
*** 1013,1018 
--- 1019,1055 
  		COMPLETE_WITH_LIST(list_ALTEREXTENSION);
  	}
  
+ 	/* ALTER EVENT TRIGGER */
+ 	else if (pg_strcasecmp(prev3_wd, ALTER) == 0 
+ 			 pg_strcasecmp(prev2_wd, EVENT) == 0 
+ 			 pg_strcasecmp(prev_wd, TRIGGER) == 0)
+ 	{
+ 		COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
+ 	}
+ 
+ 	/* ALTER EVENT TRIGGER name */
+ 	else if (pg_strcasecmp(prev4_wd, ALTER) == 0 
+ 			 pg_strcasecmp(prev3_wd, EVENT) == 0 
+ 			 pg_strcasecmp(prev2_wd, TRIGGER) == 0)
+ 	{
+ 		static const char *const list_ALTER_EVENT_TRIGGER[] =
+ 			{DISABLE, ENABLE, OWNER TO, RENAME TO, NULL};
+ 
+ 		COMPLETE_WITH_LIST(list_ALTER_EVENT_TRIGGER);
+ 	}
+ 
+ 	/* ALTER EVENT TRIGGER name ENABLE */
+ 	else if (pg_strcasecmp(prev5_wd, ALTER) == 0 
+ 			 pg_strcasecmp(prev4_wd, EVENT) == 0 
+ 			 pg_strcasecmp(prev3_wd, TRIGGER) == 0 
+ 			 pg_strcasecmp(prev_wd, ENABLE) == 0)
+ 	{
+ 		static const char *const list_ALTER_EVENT_TRIGGER_ENABLE[] =
+ 			{REPLICA, ALWAYS, NULL};
+ 
+ 		COMPLETE_WITH_LIST(list_ALTER_EVENT_TRIGGER_ENABLE);
+ 	}
+ 
  	/* ALTER FOREIGN */
  	else if (pg_strcasecmp(prev2_wd, ALTER) == 0 
  			 pg_strcasecmp(prev_wd, FOREIGN) == 0)
*** psql_completion(const char *text, int st
*** 1318,1340 
  			 pg_strcasecmp(prev2_wd, TRIGGER) == 0)
  		

Re: [HACKERS] Patch: add psql tab completion for event triggers

2014-04-08 Thread Ian Barwick

On 08/04/14 18:22, Ian Barwick wrote:

As it was kind of annoying not to have this when playing around with
event triggers.

This also tightens up the existing tab completion for ALTER TRIGGER,
which contained redundant code for table name completion, and which was
also causing a spurious RENAME TO to be inserted in this context:

 CREATE EVENT TRIGGER foo ON {event} ^I


Apologies, previous patch had some unrelated changes in it.

Correct patch attached.


--
 Ian Barwick   http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training  Services
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
new file mode 100644
index 202ffce..7179642
*** a/src/bin/psql/tab-complete.c
--- b/src/bin/psql/tab-complete.c
*** static const SchemaQuery Query_for_list_
*** 714,721 
 FROM pg_catalog.pg_prepared_statements \
WHERE substring(pg_catalog.quote_ident(name),1,%d)='%s'
  
  /*
!  * This is a list of all things in Pgsql, which can show up after CREATE or
   * DROP; and there is also a query to get a list of them.
   */
  
--- 714,726 
 FROM pg_catalog.pg_prepared_statements \
WHERE substring(pg_catalog.quote_ident(name),1,%d)='%s'
  
+ #define Query_for_list_of_event_triggers \
+  SELECT pg_catalog.quote_ident(evtname) \
+FROM pg_catalog.pg_event_trigger \
+   WHERE substring(pg_catalog.quote_ident(evtname),1,%d)='%s'
+ 
  /*
!  * This is a list of all things in Postgres, which can show up after CREATE or
   * DROP; and there is also a query to get a list of them.
   */
  
*** static const pgsql_thing_t words_after_c
*** 746,751 
--- 751,757 
  	{DATABASE, Query_for_list_of_databases},
  	{DICTIONARY, Query_for_list_of_ts_dictionaries, NULL, THING_NO_SHOW},
  	{DOMAIN, NULL, Query_for_list_of_domains},
+ 	{EVENT TRIGGER, NULL, NULL},
  	{EXTENSION, Query_for_list_of_extensions},
  	{FOREIGN DATA WRAPPER, NULL, NULL},
  	{FOREIGN TABLE, NULL, NULL},
*** psql_completion(const char *text, int st
*** 934,942 
  	{
  		static const char *const list_ALTER[] =
  		{AGGREGATE, COLLATION, CONVERSION, DATABASE, DEFAULT PRIVILEGES, DOMAIN,
! 			EXTENSION, FOREIGN DATA WRAPPER, FOREIGN TABLE, FUNCTION,
  			GROUP, INDEX, LANGUAGE, LARGE OBJECT, MATERIALIZED VIEW, OPERATOR,
! 			 ROLE, RULE, SCHEMA, SERVER, SEQUENCE, SYSTEM SET, TABLE,
  			TABLESPACE, TEXT SEARCH, TRIGGER, TYPE,
  		USER, USER MAPPING FOR, VIEW, NULL};
  
--- 940,948 
  	{
  		static const char *const list_ALTER[] =
  		{AGGREGATE, COLLATION, CONVERSION, DATABASE, DEFAULT PRIVILEGES, DOMAIN,
! 			EXTENSION, EVENT TRIGGER, FOREIGN DATA WRAPPER, FOREIGN TABLE, FUNCTION,
  			GROUP, INDEX, LANGUAGE, LARGE OBJECT, MATERIALIZED VIEW, OPERATOR,
! 			ROLE, RULE, SCHEMA, SERVER, SEQUENCE, SYSTEM SET, TABLE,
  			TABLESPACE, TEXT SEARCH, TRIGGER, TYPE,
  		USER, USER MAPPING FOR, VIEW, NULL};
  
*** psql_completion(const char *text, int st
*** 1013,1018 
--- 1019,1055 
  		COMPLETE_WITH_LIST(list_ALTEREXTENSION);
  	}
  
+ 	/* ALTER EVENT TRIGGER */
+ 	else if (pg_strcasecmp(prev3_wd, ALTER) == 0 
+ 			 pg_strcasecmp(prev2_wd, EVENT) == 0 
+ 			 pg_strcasecmp(prev_wd, TRIGGER) == 0)
+ 	{
+ 		COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
+ 	}
+ 
+ 	/* ALTER EVENT TRIGGER name */
+ 	else if (pg_strcasecmp(prev4_wd, ALTER) == 0 
+ 			 pg_strcasecmp(prev3_wd, EVENT) == 0 
+ 			 pg_strcasecmp(prev2_wd, TRIGGER) == 0)
+ 	{
+ 		static const char *const list_ALTER_EVENT_TRIGGER[] =
+ 			{DISABLE, ENABLE, OWNER TO, RENAME TO, NULL};
+ 
+ 		COMPLETE_WITH_LIST(list_ALTER_EVENT_TRIGGER);
+ 	}
+ 
+ 	/* ALTER EVENT TRIGGER name ENABLE */
+ 	else if (pg_strcasecmp(prev5_wd, ALTER) == 0 
+ 			 pg_strcasecmp(prev4_wd, EVENT) == 0 
+ 			 pg_strcasecmp(prev3_wd, TRIGGER) == 0 
+ 			 pg_strcasecmp(prev_wd, ENABLE) == 0)
+ 	{
+ 		static const char *const list_ALTER_EVENT_TRIGGER_ENABLE[] =
+ 			{REPLICA, ALWAYS, NULL};
+ 
+ 		COMPLETE_WITH_LIST(list_ALTER_EVENT_TRIGGER_ENABLE);
+ 	}
+ 
  	/* ALTER FOREIGN */
  	else if (pg_strcasecmp(prev2_wd, ALTER) == 0 
  			 pg_strcasecmp(prev_wd, FOREIGN) == 0)
*** psql_completion(const char *text, int st
*** 1318,1340 
  			 pg_strcasecmp(prev2_wd, TRIGGER) == 0)
  		COMPLETE_WITH_CONST(ON);
  
- 	else if (pg_strcasecmp(prev4_wd, ALTER) == 0 
- 			 pg_strcasecmp(prev3_wd, TRIGGER) == 0)
- 	{
- 		completion_info_charp = prev2_wd;
- 		COMPLETE_WITH_QUERY(Query_for_list_of_tables_for_trigger);
- 	}
- 
  	/*
! 	 * If we have ALTER TRIGGER sth ON, then add the correct tablename
  	 */
  	else if (pg_strcasecmp(prev4_wd, ALTER) == 0 
  			 pg_strcasecmp(prev3_wd, TRIGGER) == 0 
  			 pg_strcasecmp(prev_wd, ON) == 0)
! 		COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL);
  
  	/* ALTER TRIGGER name ON name */
! 	else if (pg_strcasecmp(prev4_wd, TRIGGER) == 0 
  			 pg_strcasecmp(prev2_wd, ON) == 0)
  		COMPLETE_WITH_CONST(RENAME TO);
  
--- 1355,1374