## Tables are the default, but can also be specified with
## GRANT x ON TABLE y. However, the stringer does not output TABLE.

parse
GRANT SELECT ON TABLE foo TO root
----
GRANT SELECT ON TABLE foo TO root
GRANT SELECT ON TABLE (foo) TO root -- fully parenthesized
GRANT SELECT ON TABLE foo TO root -- literals removed
GRANT SELECT ON TABLE _ TO _ -- identifiers removed

parse
GRANT SELECT ON foo TO root
----
GRANT SELECT ON TABLE foo TO root -- normalized!
GRANT SELECT ON TABLE (foo) TO root -- fully parenthesized
GRANT SELECT ON TABLE foo TO root -- literals removed
GRANT SELECT ON TABLE _ TO _ -- identifiers removed

parse
GRANT SELECT, DELETE, UPDATE ON TABLE foo, db.foo TO root, bar
----
GRANT SELECT, DELETE, UPDATE ON TABLE foo, db.foo TO root, bar
GRANT SELECT, DELETE, UPDATE ON TABLE (foo), (db.foo) TO root, bar -- fully parenthesized
GRANT SELECT, DELETE, UPDATE ON TABLE foo, db.foo TO root, bar -- literals removed
GRANT SELECT, DELETE, UPDATE ON TABLE _, _._ TO _, _ -- identifiers removed


parse
GRANT SELECT, DELETE, UPDATE ON foo, db.foo TO root, bar
----
GRANT SELECT, DELETE, UPDATE ON TABLE foo, db.foo TO root, bar -- normalized!
GRANT SELECT, DELETE, UPDATE ON TABLE (foo), (db.foo) TO root, bar -- fully parenthesized
GRANT SELECT, DELETE, UPDATE ON TABLE foo, db.foo TO root, bar -- literals removed
GRANT SELECT, DELETE, UPDATE ON TABLE _, _._ TO _, _ -- identifiers removed

parse
GRANT SELECT ON role TO root
----
GRANT SELECT ON TABLE "role" TO root -- normalized!
GRANT SELECT ON TABLE ("role") TO root -- fully parenthesized
GRANT SELECT ON TABLE "role" TO root -- literals removed
GRANT SELECT ON TABLE _ TO _ -- identifiers removed

parse
REVOKE SELECT ON foo FROM root
----
REVOKE SELECT ON TABLE foo FROM root -- normalized!
REVOKE SELECT ON TABLE (foo) FROM root -- fully parenthesized
REVOKE SELECT ON TABLE foo FROM root -- literals removed
REVOKE SELECT ON TABLE _ FROM _ -- identifiers removed

parse
GRANT DROP ON DATABASE foo TO root
----
GRANT DROP ON DATABASE foo TO root
GRANT DROP ON DATABASE foo TO root -- fully parenthesized
GRANT DROP ON DATABASE foo TO root -- literals removed
GRANT DROP ON DATABASE _ TO _ -- identifiers removed

parse
GRANT ALL ON DATABASE foo TO root, test
----
GRANT ALL ON DATABASE foo TO root, test
GRANT ALL ON DATABASE foo TO root, test -- fully parenthesized
GRANT ALL ON DATABASE foo TO root, test -- literals removed
GRANT ALL ON DATABASE _ TO _, _ -- identifiers removed

parse
GRANT ALL PRIVILEGES ON DATABASE foo TO root
----
GRANT ALL ON DATABASE foo TO root -- normalized!
GRANT ALL ON DATABASE foo TO root -- fully parenthesized
GRANT ALL ON DATABASE foo TO root -- literals removed
GRANT ALL ON DATABASE _ TO _ -- identifiers removed


parse
GRANT SELECT, INSERT ON DATABASE bar TO foo, bar, baz
----
GRANT SELECT, INSERT ON DATABASE bar TO foo, bar, baz
GRANT SELECT, INSERT ON DATABASE bar TO foo, bar, baz -- fully parenthesized
GRANT SELECT, INSERT ON DATABASE bar TO foo, bar, baz -- literals removed
GRANT SELECT, INSERT ON DATABASE _ TO _, _, _ -- identifiers removed

parse
GRANT SELECT, INSERT ON DATABASE db1, db2 TO foo, bar, baz
----
GRANT SELECT, INSERT ON DATABASE db1, db2 TO foo, bar, baz
GRANT SELECT, INSERT ON DATABASE db1, db2 TO foo, bar, baz -- fully parenthesized
GRANT SELECT, INSERT ON DATABASE db1, db2 TO foo, bar, baz -- literals removed
GRANT SELECT, INSERT ON DATABASE _, _ TO _, _, _ -- identifiers removed

parse
GRANT SELECT, INSERT ON DATABASE db1, db2 TO "test-user"
----
GRANT SELECT, INSERT ON DATABASE db1, db2 TO "test-user"
GRANT SELECT, INSERT ON DATABASE db1, db2 TO "test-user" -- fully parenthesized
GRANT SELECT, INSERT ON DATABASE db1, db2 TO "test-user" -- literals removed
GRANT SELECT, INSERT ON DATABASE _, _ TO _ -- identifiers removed

parse
GRANT rolea, roleb TO usera, userb
----
GRANT rolea, roleb TO usera, userb
GRANT rolea, roleb TO usera, userb -- fully parenthesized
GRANT rolea, roleb TO usera, userb -- literals removed
GRANT _, _ TO _, _ -- identifiers removed

parse
GRANT rolea, roleb TO usera, userb WITH ADMIN OPTION
----
GRANT rolea, roleb TO usera, userb WITH ADMIN OPTION
GRANT rolea, roleb TO usera, userb WITH ADMIN OPTION -- fully parenthesized
GRANT rolea, roleb TO usera, userb WITH ADMIN OPTION -- literals removed
GRANT _, _ TO _, _ WITH ADMIN OPTION -- identifiers removed


parse
GRANT ALL PRIVILEGES ON TABLE foo TO root
----
GRANT ALL ON TABLE foo TO root -- normalized!
GRANT ALL ON TABLE (foo) TO root -- fully parenthesized
GRANT ALL ON TABLE foo TO root -- literals removed
GRANT ALL ON TABLE _ TO _ -- identifiers removed

## GRANT ON TYPE.

parse
GRANT USAGE ON TYPE foo TO root
----
GRANT USAGE ON TYPE foo TO root
GRANT USAGE ON TYPE foo TO root -- fully parenthesized
GRANT USAGE ON TYPE foo TO root -- literals removed
GRANT USAGE ON TYPE _ TO _ -- identifiers removed

parse
GRANT USAGE ON TYPE foo TO root
----
GRANT USAGE ON TYPE foo TO root
GRANT USAGE ON TYPE foo TO root -- fully parenthesized
GRANT USAGE ON TYPE foo TO root -- literals removed
GRANT USAGE ON TYPE _ TO _ -- identifiers removed

parse
GRANT ALL ON TYPE foo TO root
----
GRANT ALL ON TYPE foo TO root
GRANT ALL ON TYPE foo TO root -- fully parenthesized
GRANT ALL ON TYPE foo TO root -- literals removed
GRANT ALL ON TYPE _ TO _ -- identifiers removed

## GRANT ON SCHEMA.

parse
GRANT USAGE ON SCHEMA foo TO root
----
GRANT USAGE ON SCHEMA foo TO root
GRANT USAGE ON SCHEMA foo TO root -- fully parenthesized
GRANT USAGE ON SCHEMA foo TO root -- literals removed
GRANT USAGE ON SCHEMA _ TO _ -- identifiers removed

parse
GRANT USAGE ON SCHEMA foo.bar TO root
----
GRANT USAGE ON SCHEMA foo.bar TO root
GRANT USAGE ON SCHEMA foo.bar TO root -- fully parenthesized
GRANT USAGE ON SCHEMA foo.bar TO root -- literals removed
GRANT USAGE ON SCHEMA _._ TO _ -- identifiers removed

parse
GRANT USAGE, CREATE ON SCHEMA foo TO root
----
GRANT USAGE, CREATE ON SCHEMA foo TO root
GRANT USAGE, CREATE ON SCHEMA foo TO root -- fully parenthesized
GRANT USAGE, CREATE ON SCHEMA foo TO root -- literals removed
GRANT USAGE, CREATE ON SCHEMA _ TO _ -- identifiers removed

parse
GRANT USAGE, CREATE ON SCHEMA foo.bar TO root
----
GRANT USAGE, CREATE ON SCHEMA foo.bar TO root
GRANT USAGE, CREATE ON SCHEMA foo.bar TO root -- fully parenthesized
GRANT USAGE, CREATE ON SCHEMA foo.bar TO root -- literals removed
GRANT USAGE, CREATE ON SCHEMA _._ TO _ -- identifiers removed

parse
GRANT ALL ON SCHEMA foo, bar, baz TO root
----
GRANT ALL ON SCHEMA foo, bar, baz TO root
GRANT ALL ON SCHEMA foo, bar, baz TO root -- fully parenthesized
GRANT ALL ON SCHEMA foo, bar, baz TO root -- literals removed
GRANT ALL ON SCHEMA _, _, _ TO _ -- identifiers removed

parse
GRANT ALL ON SCHEMA a.b, c.d, e.f TO root
----
GRANT ALL ON SCHEMA a.b, c.d, e.f TO root
GRANT ALL ON SCHEMA a.b, c.d, e.f TO root -- fully parenthesized
GRANT ALL ON SCHEMA a.b, c.d, e.f TO root -- literals removed
GRANT ALL ON SCHEMA _._, _._, _._ TO _ -- identifiers removed

parse
GRANT ALL PRIVILEGES ON SCHEMA foo TO root
----
GRANT ALL ON SCHEMA foo TO root -- normalized!
GRANT ALL ON SCHEMA foo TO root -- fully parenthesized
GRANT ALL ON SCHEMA foo TO root -- literals removed
GRANT ALL ON SCHEMA _ TO _ -- identifiers removed

parse
GRANT ALL PRIVILEGES ON SCHEMA foo.bar TO root
----
GRANT ALL ON SCHEMA foo.bar TO root -- normalized!
GRANT ALL ON SCHEMA foo.bar TO root -- fully parenthesized
GRANT ALL ON SCHEMA foo.bar TO root -- literals removed
GRANT ALL ON SCHEMA _._ TO _ -- identifiers removed

parse
GRANT ALL PRIVILEGES ON SCHEMA a.b, c.d TO root
----
GRANT ALL ON SCHEMA a.b, c.d TO root -- normalized!
GRANT ALL ON SCHEMA a.b, c.d TO root -- fully parenthesized
GRANT ALL ON SCHEMA a.b, c.d TO root -- literals removed
GRANT ALL ON SCHEMA _._, _._ TO _ -- identifiers removed

parse
GRANT ALL ON ALL TABLES IN SCHEMA s1 TO root
----
GRANT ALL ON ALL TABLES IN SCHEMA s1 TO root
GRANT ALL ON ALL TABLES IN SCHEMA s1 TO root -- fully parenthesized
GRANT ALL ON ALL TABLES IN SCHEMA s1 TO root -- literals removed
GRANT ALL ON ALL TABLES IN SCHEMA _ TO _ -- identifiers removed

parse
GRANT ALL ON ALL TABLES IN SCHEMA s1, s2 TO root
----
GRANT ALL ON ALL TABLES IN SCHEMA s1, s2 TO root
GRANT ALL ON ALL TABLES IN SCHEMA s1, s2 TO root -- fully parenthesized
GRANT ALL ON ALL TABLES IN SCHEMA s1, s2 TO root -- literals removed
GRANT ALL ON ALL TABLES IN SCHEMA _, _ TO _ -- identifiers removed

parse
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA s1, s2 TO root
----
GRANT ALL ON ALL TABLES IN SCHEMA s1, s2 TO root -- normalized!
GRANT ALL ON ALL TABLES IN SCHEMA s1, s2 TO root -- fully parenthesized
GRANT ALL ON ALL TABLES IN SCHEMA s1, s2 TO root -- literals removed
GRANT ALL ON ALL TABLES IN SCHEMA _, _ TO _ -- identifiers removed

parse
GRANT SELECT, UPDATE ON ALL TABLES IN SCHEMA s1, s2 TO root, bar
----
GRANT SELECT, UPDATE ON ALL TABLES IN SCHEMA s1, s2 TO root, bar
GRANT SELECT, UPDATE ON ALL TABLES IN SCHEMA s1, s2 TO root, bar -- fully parenthesized
GRANT SELECT, UPDATE ON ALL TABLES IN SCHEMA s1, s2 TO root, bar -- literals removed
GRANT SELECT, UPDATE ON ALL TABLES IN SCHEMA _, _ TO _, _ -- identifiers removed

parse
GRANT SELECT ON SEQUENCE s1 TO root, bar
----
GRANT SELECT ON SEQUENCE s1 TO root, bar
GRANT SELECT ON SEQUENCE (s1) TO root, bar -- fully parenthesized
GRANT SELECT ON SEQUENCE s1 TO root, bar -- literals removed
GRANT SELECT ON SEQUENCE _ TO _, _ -- identifiers removed

parse
GRANT ALL ON SEQUENCE s1 TO root, bar
----
GRANT ALL ON SEQUENCE s1 TO root, bar
GRANT ALL ON SEQUENCE (s1) TO root, bar -- fully parenthesized
GRANT ALL ON SEQUENCE s1 TO root, bar -- literals removed
GRANT ALL ON SEQUENCE _ TO _, _ -- identifiers removed

parse
GRANT SELECT ON ALL SEQUENCES IN SCHEMA s1, s2 TO root, bar
----
GRANT SELECT ON ALL SEQUENCES IN SCHEMA s1, s2 TO root, bar
GRANT SELECT ON ALL SEQUENCES IN SCHEMA s1, s2 TO root, bar -- fully parenthesized
GRANT SELECT ON ALL SEQUENCES IN SCHEMA s1, s2 TO root, bar -- literals removed
GRANT SELECT ON ALL SEQUENCES IN SCHEMA _, _ TO _, _ -- identifiers removed

parse
GRANT EXECUTE ON FUNCTION f1 TO root, bar
----
GRANT EXECUTE ON FUNCTION f1 TO root, bar
GRANT EXECUTE ON FUNCTION f1 TO root, bar -- fully parenthesized
GRANT EXECUTE ON FUNCTION f1 TO root, bar -- literals removed
GRANT EXECUTE ON FUNCTION _ TO _, _ -- identifiers removed

parse
GRANT EXECUTE ON FUNCTION f1, f2(INT) TO root, bar
----
GRANT EXECUTE ON FUNCTION f1, f2(INT8) TO root, bar -- normalized!
GRANT EXECUTE ON FUNCTION f1, f2(INT8) TO root, bar -- fully parenthesized
GRANT EXECUTE ON FUNCTION f1, f2(INT8) TO root, bar -- literals removed
GRANT EXECUTE ON FUNCTION _, _(INT8) TO _, _ -- identifiers removed

parse
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA s1, s2 TO root, bar
----
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA s1, s2 TO root, bar
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA s1, s2 TO root, bar -- fully parenthesized
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA s1, s2 TO root, bar -- literals removed
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA _, _ TO _, _ -- identifiers removed

parse
GRANT EXECUTE ON PROCEDURE f1 TO root, bar
----
GRANT EXECUTE ON PROCEDURE f1 TO root, bar
GRANT EXECUTE ON PROCEDURE f1 TO root, bar -- fully parenthesized
GRANT EXECUTE ON PROCEDURE f1 TO root, bar -- literals removed
GRANT EXECUTE ON PROCEDURE _ TO _, _ -- identifiers removed

parse
GRANT EXECUTE ON PROCEDURE f1, f2(INT) TO root, bar
----
GRANT EXECUTE ON PROCEDURE f1, f2(INT8) TO root, bar -- normalized!
GRANT EXECUTE ON PROCEDURE f1, f2(INT8) TO root, bar -- fully parenthesized
GRANT EXECUTE ON PROCEDURE f1, f2(INT8) TO root, bar -- literals removed
GRANT EXECUTE ON PROCEDURE _, _(INT8) TO _, _ -- identifiers removed

parse
GRANT EXECUTE ON ALL PROCEDURES IN SCHEMA s1, s2 TO root, bar
----
GRANT EXECUTE ON ALL PROCEDURES IN SCHEMA s1, s2 TO root, bar
GRANT EXECUTE ON ALL PROCEDURES IN SCHEMA s1, s2 TO root, bar -- fully parenthesized
GRANT EXECUTE ON ALL PROCEDURES IN SCHEMA s1, s2 TO root, bar -- literals removed
GRANT EXECUTE ON ALL PROCEDURES IN SCHEMA _, _ TO _, _ -- identifiers removed

parse
REVOKE SELECT ON SEQUENCE s1 FROM root, bar
----
REVOKE SELECT ON SEQUENCE s1 FROM root, bar
REVOKE SELECT ON SEQUENCE (s1) FROM root, bar -- fully parenthesized
REVOKE SELECT ON SEQUENCE s1 FROM root, bar -- literals removed
REVOKE SELECT ON SEQUENCE _ FROM _, _ -- identifiers removed

parse
REVOKE ALL ON SEQUENCE s1 FROM root, bar
----
REVOKE ALL ON SEQUENCE s1 FROM root, bar
REVOKE ALL ON SEQUENCE (s1) FROM root, bar -- fully parenthesized
REVOKE ALL ON SEQUENCE s1 FROM root, bar -- literals removed
REVOKE ALL ON SEQUENCE _ FROM _, _ -- identifiers removed

parse
REVOKE SELECT ON ALL SEQUENCES IN SCHEMA s1, s2 FROM root, bar
----
REVOKE SELECT ON ALL SEQUENCES IN SCHEMA s1, s2 FROM root, bar
REVOKE SELECT ON ALL SEQUENCES IN SCHEMA s1, s2 FROM root, bar -- fully parenthesized
REVOKE SELECT ON ALL SEQUENCES IN SCHEMA s1, s2 FROM root, bar -- literals removed
REVOKE SELECT ON ALL SEQUENCES IN SCHEMA _, _ FROM _, _ -- identifiers removed

## Tables are the default, but can also be specified with
## REVOKE x ON TABLE y. However, the stringer does not output TABLE.

parse
REVOKE SELECT ON TABLE foo FROM root
----
REVOKE SELECT ON TABLE foo FROM root
REVOKE SELECT ON TABLE (foo) FROM root -- fully parenthesized
REVOKE SELECT ON TABLE foo FROM root -- literals removed
REVOKE SELECT ON TABLE _ FROM _ -- identifiers removed

parse
REVOKE UPDATE, DELETE ON TABLE foo, db.foo FROM root, bar
----
REVOKE UPDATE, DELETE ON TABLE foo, db.foo FROM root, bar
REVOKE UPDATE, DELETE ON TABLE (foo), (db.foo) FROM root, bar -- fully parenthesized
REVOKE UPDATE, DELETE ON TABLE foo, db.foo FROM root, bar -- literals removed
REVOKE UPDATE, DELETE ON TABLE _, _._ FROM _, _ -- identifiers removed

parse
REVOKE UPDATE, DELETE ON foo, db.foo FROM root, bar
----
REVOKE UPDATE, DELETE ON TABLE foo, db.foo FROM root, bar -- normalized!
REVOKE UPDATE, DELETE ON TABLE (foo), (db.foo) FROM root, bar -- fully parenthesized
REVOKE UPDATE, DELETE ON TABLE foo, db.foo FROM root, bar -- literals removed
REVOKE UPDATE, DELETE ON TABLE _, _._ FROM _, _ -- identifiers removed

parse
REVOKE INSERT ON DATABASE foo FROM root
----
REVOKE INSERT ON DATABASE foo FROM root
REVOKE INSERT ON DATABASE foo FROM root -- fully parenthesized
REVOKE INSERT ON DATABASE foo FROM root -- literals removed
REVOKE INSERT ON DATABASE _ FROM _ -- identifiers removed

parse
REVOKE ALL ON DATABASE foo FROM root, test
----
REVOKE ALL ON DATABASE foo FROM root, test
REVOKE ALL ON DATABASE foo FROM root, test -- fully parenthesized
REVOKE ALL ON DATABASE foo FROM root, test -- literals removed
REVOKE ALL ON DATABASE _ FROM _, _ -- identifiers removed

parse
REVOKE ALL PRIVILEGES ON DATABASE foo FROM root
----
REVOKE ALL ON DATABASE foo FROM root -- normalized!
REVOKE ALL ON DATABASE foo FROM root -- fully parenthesized
REVOKE ALL ON DATABASE foo FROM root -- literals removed
REVOKE ALL ON DATABASE _ FROM _ -- identifiers removed


parse
REVOKE SELECT, INSERT ON DATABASE bar FROM foo, bar, baz
----
REVOKE SELECT, INSERT ON DATABASE bar FROM foo, bar, baz
REVOKE SELECT, INSERT ON DATABASE bar FROM foo, bar, baz -- fully parenthesized
REVOKE SELECT, INSERT ON DATABASE bar FROM foo, bar, baz -- literals removed
REVOKE SELECT, INSERT ON DATABASE _ FROM _, _, _ -- identifiers removed

parse
REVOKE SELECT, INSERT ON DATABASE db1, db2 FROM foo, bar, baz
----
REVOKE SELECT, INSERT ON DATABASE db1, db2 FROM foo, bar, baz
REVOKE SELECT, INSERT ON DATABASE db1, db2 FROM foo, bar, baz -- fully parenthesized
REVOKE SELECT, INSERT ON DATABASE db1, db2 FROM foo, bar, baz -- literals removed
REVOKE SELECT, INSERT ON DATABASE _, _ FROM _, _, _ -- identifiers removed

parse
REVOKE rolea, roleb FROM usera, userb
----
REVOKE rolea, roleb FROM usera, userb
REVOKE rolea, roleb FROM usera, userb -- fully parenthesized
REVOKE rolea, roleb FROM usera, userb -- literals removed
REVOKE _, _ FROM _, _ -- identifiers removed

parse
REVOKE ADMIN OPTION FOR rolea, roleb FROM usera, userb
----
REVOKE ADMIN OPTION FOR rolea, roleb FROM usera, userb
REVOKE ADMIN OPTION FOR rolea, roleb FROM usera, userb -- fully parenthesized
REVOKE ADMIN OPTION FOR rolea, roleb FROM usera, userb -- literals removed
REVOKE ADMIN OPTION FOR _, _ FROM _, _ -- identifiers removed

parse
REVOKE ALL PRIVILEGES ON TABLE foo FROM root
----
REVOKE ALL ON TABLE foo FROM root -- normalized!
REVOKE ALL ON TABLE (foo) FROM root -- fully parenthesized
REVOKE ALL ON TABLE foo FROM root -- literals removed
REVOKE ALL ON TABLE _ FROM _ -- identifiers removed


## REVOKE ON TYPE.

parse
REVOKE USAGE ON TYPE foo FROM root
----
REVOKE USAGE ON TYPE foo FROM root
REVOKE USAGE ON TYPE foo FROM root -- fully parenthesized
REVOKE USAGE ON TYPE foo FROM root -- literals removed
REVOKE USAGE ON TYPE _ FROM _ -- identifiers removed

parse
REVOKE USAGE ON TYPE foo FROM root
----
REVOKE USAGE ON TYPE foo FROM root
REVOKE USAGE ON TYPE foo FROM root -- fully parenthesized
REVOKE USAGE ON TYPE foo FROM root -- literals removed
REVOKE USAGE ON TYPE _ FROM _ -- identifiers removed

parse
REVOKE ALL ON TYPE foo FROM root
----
REVOKE ALL ON TYPE foo FROM root
REVOKE ALL ON TYPE foo FROM root -- fully parenthesized
REVOKE ALL ON TYPE foo FROM root -- literals removed
REVOKE ALL ON TYPE _ FROM _ -- identifiers removed

## REVOKE ON SCHEMA.

parse
REVOKE USAGE ON SCHEMA foo FROM root
----
REVOKE USAGE ON SCHEMA foo FROM root
REVOKE USAGE ON SCHEMA foo FROM root -- fully parenthesized
REVOKE USAGE ON SCHEMA foo FROM root -- literals removed
REVOKE USAGE ON SCHEMA _ FROM _ -- identifiers removed

parse
REVOKE USAGE ON SCHEMA foo.bar FROM root
----
REVOKE USAGE ON SCHEMA foo.bar FROM root
REVOKE USAGE ON SCHEMA foo.bar FROM root -- fully parenthesized
REVOKE USAGE ON SCHEMA foo.bar FROM root -- literals removed
REVOKE USAGE ON SCHEMA _._ FROM _ -- identifiers removed

parse
REVOKE USAGE, CREATE ON SCHEMA foo FROM root
----
REVOKE USAGE, CREATE ON SCHEMA foo FROM root
REVOKE USAGE, CREATE ON SCHEMA foo FROM root -- fully parenthesized
REVOKE USAGE, CREATE ON SCHEMA foo FROM root -- literals removed
REVOKE USAGE, CREATE ON SCHEMA _ FROM _ -- identifiers removed

parse
REVOKE USAGE, CREATE ON SCHEMA foo.bar FROM root
----
REVOKE USAGE, CREATE ON SCHEMA foo.bar FROM root
REVOKE USAGE, CREATE ON SCHEMA foo.bar FROM root -- fully parenthesized
REVOKE USAGE, CREATE ON SCHEMA foo.bar FROM root -- literals removed
REVOKE USAGE, CREATE ON SCHEMA _._ FROM _ -- identifiers removed

parse
REVOKE ALL ON SCHEMA foo, bar, baz FROM root
----
REVOKE ALL ON SCHEMA foo, bar, baz FROM root
REVOKE ALL ON SCHEMA foo, bar, baz FROM root -- fully parenthesized
REVOKE ALL ON SCHEMA foo, bar, baz FROM root -- literals removed
REVOKE ALL ON SCHEMA _, _, _ FROM _ -- identifiers removed

parse
REVOKE ALL ON SCHEMA a.b, c.d, e.f FROM root
----
REVOKE ALL ON SCHEMA a.b, c.d, e.f FROM root
REVOKE ALL ON SCHEMA a.b, c.d, e.f FROM root -- fully parenthesized
REVOKE ALL ON SCHEMA a.b, c.d, e.f FROM root -- literals removed
REVOKE ALL ON SCHEMA _._, _._, _._ FROM _ -- identifiers removed

parse
REVOKE ALL PRIVILEGES ON SCHEMA foo FROM root
----
REVOKE ALL ON SCHEMA foo FROM root -- normalized!
REVOKE ALL ON SCHEMA foo FROM root -- fully parenthesized
REVOKE ALL ON SCHEMA foo FROM root -- literals removed
REVOKE ALL ON SCHEMA _ FROM _ -- identifiers removed

parse
REVOKE ALL PRIVILEGES ON SCHEMA foo.bar FROM root
----
REVOKE ALL ON SCHEMA foo.bar FROM root -- normalized!
REVOKE ALL ON SCHEMA foo.bar FROM root -- fully parenthesized
REVOKE ALL ON SCHEMA foo.bar FROM root -- literals removed
REVOKE ALL ON SCHEMA _._ FROM _ -- identifiers removed

parse
REVOKE ALL PRIVILEGES ON SCHEMA a.b, c.d FROM root
----
REVOKE ALL ON SCHEMA a.b, c.d FROM root -- normalized!
REVOKE ALL ON SCHEMA a.b, c.d FROM root -- fully parenthesized
REVOKE ALL ON SCHEMA a.b, c.d FROM root -- literals removed
REVOKE ALL ON SCHEMA _._, _._ FROM _ -- identifiers removed

parse
REVOKE ALL ON ALL TABLES IN SCHEMA s1 FROM root
----
REVOKE ALL ON ALL TABLES IN SCHEMA s1 FROM root
REVOKE ALL ON ALL TABLES IN SCHEMA s1 FROM root -- fully parenthesized
REVOKE ALL ON ALL TABLES IN SCHEMA s1 FROM root -- literals removed
REVOKE ALL ON ALL TABLES IN SCHEMA _ FROM _ -- identifiers removed

parse
REVOKE ALL ON ALL TABLES IN SCHEMA s1, s2 FROM root
----
REVOKE ALL ON ALL TABLES IN SCHEMA s1, s2 FROM root
REVOKE ALL ON ALL TABLES IN SCHEMA s1, s2 FROM root -- fully parenthesized
REVOKE ALL ON ALL TABLES IN SCHEMA s1, s2 FROM root -- literals removed
REVOKE ALL ON ALL TABLES IN SCHEMA _, _ FROM _ -- identifiers removed

parse
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA s1, s2 FROM root
----
REVOKE ALL ON ALL TABLES IN SCHEMA s1, s2 FROM root -- normalized!
REVOKE ALL ON ALL TABLES IN SCHEMA s1, s2 FROM root -- fully parenthesized
REVOKE ALL ON ALL TABLES IN SCHEMA s1, s2 FROM root -- literals removed
REVOKE ALL ON ALL TABLES IN SCHEMA _, _ FROM _ -- identifiers removed

parse
REVOKE SELECT, UPDATE ON ALL TABLES IN SCHEMA s1, s2 FROM root, bar
----
REVOKE SELECT, UPDATE ON ALL TABLES IN SCHEMA s1, s2 FROM root, bar
REVOKE SELECT, UPDATE ON ALL TABLES IN SCHEMA s1, s2 FROM root, bar -- fully parenthesized
REVOKE SELECT, UPDATE ON ALL TABLES IN SCHEMA s1, s2 FROM root, bar -- literals removed
REVOKE SELECT, UPDATE ON ALL TABLES IN SCHEMA _, _ FROM _, _ -- identifiers removed

parse
REVOKE EXECUTE ON FUNCTION f1 FROM root, bar
----
REVOKE EXECUTE ON FUNCTION f1 FROM root, bar
REVOKE EXECUTE ON FUNCTION f1 FROM root, bar -- fully parenthesized
REVOKE EXECUTE ON FUNCTION f1 FROM root, bar -- literals removed
REVOKE EXECUTE ON FUNCTION _ FROM _, _ -- identifiers removed

parse
REVOKE EXECUTE ON FUNCTION f1, f2(INT) FROM root, bar
----
REVOKE EXECUTE ON FUNCTION f1, f2(INT8) FROM root, bar -- normalized!
REVOKE EXECUTE ON FUNCTION f1, f2(INT8) FROM root, bar -- fully parenthesized
REVOKE EXECUTE ON FUNCTION f1, f2(INT8) FROM root, bar -- literals removed
REVOKE EXECUTE ON FUNCTION _, _(INT8) FROM _, _ -- identifiers removed

parse
REVOKE EXECUTE ON ALL FUNCTIONS IN SCHEMA s1, s2 FROM root, bar
----
REVOKE EXECUTE ON ALL FUNCTIONS IN SCHEMA s1, s2 FROM root, bar
REVOKE EXECUTE ON ALL FUNCTIONS IN SCHEMA s1, s2 FROM root, bar -- fully parenthesized
REVOKE EXECUTE ON ALL FUNCTIONS IN SCHEMA s1, s2 FROM root, bar -- literals removed
REVOKE EXECUTE ON ALL FUNCTIONS IN SCHEMA _, _ FROM _, _ -- identifiers removed

parse
REVOKE GRANT OPTION FOR EXECUTE ON ALL FUNCTIONS IN SCHEMA s1, s2 FROM root, bar
----
REVOKE EXECUTE ON ALL FUNCTIONS IN SCHEMA s1, s2 FROM root, bar -- normalized!
REVOKE EXECUTE ON ALL FUNCTIONS IN SCHEMA s1, s2 FROM root, bar -- fully parenthesized
REVOKE EXECUTE ON ALL FUNCTIONS IN SCHEMA s1, s2 FROM root, bar -- literals removed
REVOKE EXECUTE ON ALL FUNCTIONS IN SCHEMA _, _ FROM _, _ -- identifiers removed

parse
REVOKE EXECUTE ON PROCEDURE f1 FROM root, bar
----
REVOKE EXECUTE ON PROCEDURE f1 FROM root, bar
REVOKE EXECUTE ON PROCEDURE f1 FROM root, bar -- fully parenthesized
REVOKE EXECUTE ON PROCEDURE f1 FROM root, bar -- literals removed
REVOKE EXECUTE ON PROCEDURE _ FROM _, _ -- identifiers removed

parse
REVOKE EXECUTE ON PROCEDURE f1, f2(INT) FROM root, bar
----
REVOKE EXECUTE ON PROCEDURE f1, f2(INT8) FROM root, bar -- normalized!
REVOKE EXECUTE ON PROCEDURE f1, f2(INT8) FROM root, bar -- fully parenthesized
REVOKE EXECUTE ON PROCEDURE f1, f2(INT8) FROM root, bar -- literals removed
REVOKE EXECUTE ON PROCEDURE _, _(INT8) FROM _, _ -- identifiers removed

parse
REVOKE EXECUTE ON ALL PROCEDURES IN SCHEMA s1, s2 FROM root, bar
----
REVOKE EXECUTE ON ALL PROCEDURES IN SCHEMA s1, s2 FROM root, bar
REVOKE EXECUTE ON ALL PROCEDURES IN SCHEMA s1, s2 FROM root, bar -- fully parenthesized
REVOKE EXECUTE ON ALL PROCEDURES IN SCHEMA s1, s2 FROM root, bar -- literals removed
REVOKE EXECUTE ON ALL PROCEDURES IN SCHEMA _, _ FROM _, _ -- identifiers removed

parse
REVOKE GRANT OPTION FOR EXECUTE ON ALL PROCEDURES IN SCHEMA s1, s2 FROM root, bar
----
REVOKE EXECUTE ON ALL PROCEDURES IN SCHEMA s1, s2 FROM root, bar -- normalized!
REVOKE EXECUTE ON ALL PROCEDURES IN SCHEMA s1, s2 FROM root, bar -- fully parenthesized
REVOKE EXECUTE ON ALL PROCEDURES IN SCHEMA s1, s2 FROM root, bar -- literals removed
REVOKE EXECUTE ON ALL PROCEDURES IN SCHEMA _, _ FROM _, _ -- identifiers removed

# Ensure that the support for ON ROLE <namelist> doesn't leak
# where it should not be recognized.
error
GRANT SELECT ON ROLE foo, bar TO blix
----
at or near "foo": syntax error
DETAIL: source SQL:
GRANT SELECT ON ROLE foo, bar TO blix
                     ^
HINT: try \h GRANT

error
REVOKE SELECT ON ROLE foo, bar FROM blix
----
at or near "foo": syntax error
DETAIL: source SQL:
REVOKE SELECT ON ROLE foo, bar FROM blix
                      ^
HINT: try \h REVOKE

error
GRANT CREATE, UNKNOWN_PRIV ON TABLE foo TO testuser
----
at or near "on": syntax error: not a valid privilege: "unknown_priv"
DETAIL: source SQL:
GRANT CREATE, UNKNOWN_PRIV ON TABLE foo TO testuser
                           ^
