diff options
| author | Peter Eisentraut <peter_e@gmx.net> | 2012-04-18 16:55:01 +0300 | 
|---|---|---|
| committer | Peter Eisentraut <peter_e@gmx.net> | 2012-04-18 16:55:01 +0300 | 
| commit | 1fd832ddffe83a07f82939bd9e5787a61aeba1ef (patch) | |
| tree | 93c2899f32557115b8cdfb98fbb720dc5f7f627d /src/bin/psql/tab-complete.c | |
| parent | 1b37a8c3cc4f0615f80d6007e2bbd47c6bd7e1e3 (diff) | |
psql: Add tab completion for CREATE/ALTER ROLE name WITH
Previously, the use of the optional key word WITH was not supported.
Josh Kupershmidt
Diffstat (limited to 'src/bin/psql/tab-complete.c')
| -rw-r--r-- | src/bin/psql/tab-complete.c | 41 | 
1 files changed, 38 insertions, 3 deletions
| diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 00df2c6197b..2864693158a 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -1024,11 +1024,28 @@ psql_completion(char *text, int start, int end)  			"ENCRYPTED", "INHERIT", "LOGIN", "NOCREATEDB", "NOCREATEROLE",  			"NOCREATEUSER", "NOINHERIT", "NOLOGIN", "NOREPLICATION",  			"NOSUPERUSER", "RENAME TO", "REPLICATION", "RESET", "SET", -		"SUPERUSER", "UNENCRYPTED", "VALID UNTIL", NULL}; +		"SUPERUSER", "UNENCRYPTED", "VALID UNTIL", "WITH", NULL};  		COMPLETE_WITH_LIST(list_ALTERUSER);  	} +	/* ALTER USER,ROLE <name> WITH */ +	else if ((pg_strcasecmp(prev4_wd, "ALTER") == 0 && +			  (pg_strcasecmp(prev3_wd, "USER") == 0 || +			   pg_strcasecmp(prev3_wd, "ROLE") == 0) && +			  pg_strcasecmp(prev_wd, "WITH") == 0)) +	{ +		/* Similar to the above, but don't complete "WITH" again. */ +		static const char *const list_ALTERUSER_WITH[] = +		{"CONNECTION LIMIT", "CREATEDB", "CREATEROLE", "CREATEUSER", +			"ENCRYPTED", "INHERIT", "LOGIN", "NOCREATEDB", "NOCREATEROLE", +			"NOCREATEUSER", "NOINHERIT", "NOLOGIN", "NOREPLICATION", +			"NOSUPERUSER", "RENAME TO", "REPLICATION", "RESET", "SET", +		 "SUPERUSER", "UNENCRYPTED", "VALID UNTIL", NULL}; + +		COMPLETE_WITH_LIST(list_ALTERUSER_WITH); +	} +  	/* complete ALTER USER,ROLE <name> ENCRYPTED,UNENCRYPTED with PASSWORD */  	else if (pg_strcasecmp(prev4_wd, "ALTER") == 0 &&  			 (pg_strcasecmp(prev3_wd, "ROLE") == 0 || pg_strcasecmp(prev3_wd, "USER") == 0) && @@ -1947,7 +1964,7 @@ psql_completion(char *text, int start, int end)  			 prev2_wd[0] != '\0')  		COMPLETE_WITH_CONST("PROCEDURE"); -/* CREATE ROLE,USER,GROUP */ +/* CREATE ROLE,USER,GROUP <name> */  	else if (pg_strcasecmp(prev3_wd, "CREATE") == 0 &&  			 !(pg_strcasecmp(prev2_wd, "USER") == 0 && pg_strcasecmp(prev_wd, "MAPPING") == 0) &&  			 (pg_strcasecmp(prev2_wd, "ROLE") == 0 || @@ -1958,11 +1975,29 @@ psql_completion(char *text, int start, int end)  			"ENCRYPTED", "IN", "INHERIT", "LOGIN", "NOCREATEDB",  			"NOCREATEROLE", "NOCREATEUSER", "NOINHERIT", "NOLOGIN",  			"NOREPLICATION", "NOSUPERUSER", "REPLICATION", "ROLE", -		"SUPERUSER", "SYSID", "UNENCRYPTED", "VALID UNTIL", NULL}; +		"SUPERUSER", "SYSID", "UNENCRYPTED", "VALID UNTIL", "WITH", NULL};  		COMPLETE_WITH_LIST(list_CREATEROLE);  	} +/* CREATE ROLE,USER,GROUP <name> WITH */ +	else if ((pg_strcasecmp(prev4_wd, "CREATE") == 0 && +			  (pg_strcasecmp(prev3_wd, "ROLE") == 0 || +			   pg_strcasecmp(prev3_wd, "GROUP") == 0 || +			   pg_strcasecmp(prev3_wd, "USER") == 0) && +			  pg_strcasecmp(prev_wd, "WITH") == 0)) +	{ +		/* Similar to the above, but don't complete "WITH" again. */ +		static const char *const list_CREATEROLE_WITH[] = +		{"ADMIN", "CONNECTION LIMIT", "CREATEDB", "CREATEROLE", "CREATEUSER", +			"ENCRYPTED", "IN", "INHERIT", "LOGIN", "NOCREATEDB", +			"NOCREATEROLE", "NOCREATEUSER", "NOINHERIT", "NOLOGIN", +			"NOREPLICATION", "NOSUPERUSER", "REPLICATION", "ROLE", +		 "SUPERUSER", "SYSID", "UNENCRYPTED", "VALID UNTIL", NULL}; + +		COMPLETE_WITH_LIST(list_CREATEROLE_WITH); +	} +  	/*  	 * complete CREATE ROLE,USER,GROUP <name> ENCRYPTED,UNENCRYPTED with  	 * PASSWORD | 
