]> granicus.if.org Git - postgresql/commitdiff
psql: Add tab completion for CREATE/ALTER ROLE name WITH
authorPeter Eisentraut <peter_e@gmx.net>
Wed, 18 Apr 2012 13:55:01 +0000 (16:55 +0300)
committerPeter Eisentraut <peter_e@gmx.net>
Wed, 18 Apr 2012 13:55:01 +0000 (16:55 +0300)
Previously, the use of the optional key word WITH was not supported.

Josh Kupershmidt

src/bin/psql/tab-complete.c

index 00df2c6197b1805d9089dbc53dabb088afcad998..2864693158a46a00cebec1c8f77f39e9b1c0343d 100644 (file)
@@ -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