statement ok
CREATE USER user1

query TTT colnames,rowsort
SHOW USERS
----
username  options  member_of
admin     ·        {}
root      ·        {admin}
testuser  ·        {}
user1     ·        {}

statement ok
DROP USER user1

query TTT colnames,rowsort
SHOW USERS
----
username  options  member_of
admin     ·        {}
root      ·        {admin}
testuser  ·        {}

statement ok
CREATE USER user1

query TTT colnames,rowsort
SHOW USERS
----
username  options  member_of
admin     ·        {}
root      ·        {admin}
testuser  ·        {}
user1     ·        {}

statement ok
DROP USER USEr1

query TTT colnames,rowsort
SHOW USERS
----
username  options  member_of
admin     ·        {}
root      ·        {admin}
testuser  ·        {}

statement error user "user1" does not exist
DROP USER user1

statement error user "user1" does not exist
DROP USER usER1

statement ok
DROP USER IF EXISTS user1

statement error pgcode 42939 role name "node" is reserved
DROP USER node

statement error pgcode 42939 role name "public" is reserved
DROP USER public

statement error pgcode 42939 role name "none" is reserved
DROP USER "none"

statement error pgcode 22023 cannot use special role specifier in DROP ROLE
DROP ROLE CURRENT_USER

statement error pgcode 22023 cannot use special role specifier in DROP ROLE
DROP ROLE user4, SESSION_USER

statement error pq: "foo☂": username is invalid
DROP USER foo☂

statement ok
CREATE USER user1

statement ok
CREATE USER user2

statement ok
CREATE USER user3

statement ok
CREATE USER user4

query TTT colnames,rowsort
SHOW USERS
----
username  options  member_of
admin     ·        {}
root      ·        {admin}
testuser  ·        {}
user1     ·        {}
user2     ·        {}
user3     ·        {}
user4     ·        {}

statement ok
DROP USER user1,user2

query TTT colnames,rowsort
SHOW USERS
----
username  options  member_of
admin     ·        {}
root      ·        {admin}
testuser  ·        {}
user3     ·        {}
user4     ·        {}

statement error user "user1" does not exist
DROP USER user1,user3

query TTT colnames,rowsort
SHOW USERS
----
username  options  member_of
admin     ·        {}
root      ·        {admin}
testuser  ·        {}
user3     ·        {}
user4     ·        {}

statement ok
CREATE USER user1

statement ok
CREATE TABLE foo(x INT);
GRANT SELECT ON foo TO user3;
GRANT CONNECT ON DATABASE test TO user1

statement error cannot drop roles/users user1, user3: grants still exist on test, test.public.foo
DROP USER IF EXISTS user1,user3

statement ok
REVOKE SELECT ON foo FROM user3;

statement error cannot drop roles/users user1, user3: grants still exist on test
DROP USER IF EXISTS user1,user3

statement ok
REVOKE CONNECT ON DATABASE test FROM user1;

statement ok
DROP USER IF EXISTS user1,user3

statement ok
PREPARE du AS DROP USER user4;
EXECUTE du

query TTT colnames,rowsort
SHOW USERS
----
username  options  member_of
admin     ·        {}
root      ·        {admin}
testuser  ·        {}

user testuser

statement error pq: user testuser does not have CREATEROLE privilege
DROP USER user2

user root

statement error pq: cannot drop role/user root: grants still exist on .*
DROP USER root

statement error pq: cannot drop role/user admin: grants still exist on .*
DROP USER admin

statement ok
CREATE USER user1

statement ok
INSERT INTO system.scheduled_jobs (schedule_name, owner, executor_type,execution_args) values('schedule', 'user1', 'invalid', '');

statement error pq: cannot drop role/user user1; it owns 1 scheduled jobs.
DROP USER user1

# Verify that schemas are fully qualified in the error message.
subtest same_schema_name

statement ok
CREATE ROLE schema_owner

statement ok
GRANT admin TO schema_owner

statement ok
SET ROLE schema_owner

statement ok
CREATE SCHEMA the_schema

statement ok
USE defaultdb

statement ok
CREATE SCHEMA the_schema

statement ok
RESET ROLE;
RESET DATABASE

statement error role schema_owner cannot be dropped because some objects depend on it\nowner of schema defaultdb.the_schema\nowner of schema test.the_schema
DROP ROLE schema_owner

subtest end
