@@ -916,3 +916,93 @@ async def test_table_as_composite(self):
916916 await self .con .execute ('''
917917 DROP TABLE tab;
918918 ''' )
919+
920+ @unittest .expectedFailure
921+ async def test_relacl_array_type (self ):
922+ await self .con .execute (r'''
923+ CREATE USER """u1'";
924+ CREATE USER "{u2";
925+ CREATE USER ",u3";
926+ CREATE USER "u4}";
927+ CREATE USER "u5""";
928+ CREATE USER "u6\""";
929+ CREATE USER "u7\";
930+ CREATE USER norm1;
931+ CREATE USER norm2;
932+ CREATE TABLE t0 (); GRANT SELECT ON t0 TO norm1;
933+ CREATE TABLE t1 (); GRANT SELECT ON t1 TO """u1'";
934+ CREATE TABLE t2 (); GRANT SELECT ON t2 TO "{u2";
935+ CREATE TABLE t3 (); GRANT SELECT ON t3 TO ",u3";
936+ CREATE TABLE t4 (); GRANT SELECT ON t4 TO "u4}";
937+ CREATE TABLE t5 (); GRANT SELECT ON t5 TO "u5""";
938+ CREATE TABLE t6 (); GRANT SELECT ON t6 TO "u6\""";
939+ CREATE TABLE t7 (); GRANT SELECT ON t7 TO "u7\";
940+
941+ CREATE TABLE a1 ();
942+ GRANT SELECT ON a1 TO """u1'";
943+ GRANT SELECT ON a1 TO "{u2";
944+ GRANT SELECT ON a1 TO ",u3";
945+ GRANT SELECT ON a1 TO "norm1";
946+ GRANT SELECT ON a1 TO "u4}";
947+ GRANT SELECT ON a1 TO "u5""";
948+ GRANT SELECT ON a1 TO "u6\""";
949+ GRANT SELECT ON a1 TO "u7\";
950+ GRANT SELECT ON a1 TO "norm2";
951+
952+ CREATE TABLE a2 ();
953+ GRANT SELECT ON a2 TO """u1'" WITH GRANT OPTION;
954+ GRANT SELECT ON a2 TO "{u2" WITH GRANT OPTION;
955+ GRANT SELECT ON a2 TO ",u3" WITH GRANT OPTION;
956+ GRANT SELECT ON a2 TO "norm1" WITH GRANT OPTION;
957+ GRANT SELECT ON a2 TO "u4}" WITH GRANT OPTION;
958+ GRANT SELECT ON a2 TO "u5""" WITH GRANT OPTION;
959+ GRANT SELECT ON a2 TO "u6\""" WITH GRANT OPTION;
960+ GRANT SELECT ON a2 TO "u7\" WITH GRANT OPTION;
961+
962+ SET SESSION AUTHORIZATION """u1'"; GRANT SELECT ON a2 TO "norm2";
963+ SET SESSION AUTHORIZATION "{u2"; GRANT SELECT ON a2 TO "norm2";
964+ SET SESSION AUTHORIZATION ",u3"; GRANT SELECT ON a2 TO "norm2";
965+ SET SESSION AUTHORIZATION "u4}"; GRANT SELECT ON a2 TO "norm2";
966+ SET SESSION AUTHORIZATION "u5"""; GRANT SELECT ON a2 TO "norm2";
967+ SET SESSION AUTHORIZATION "u6\"""; GRANT SELECT ON a2 TO "norm2";
968+ SET SESSION AUTHORIZATION "u7\"; GRANT SELECT ON a2 TO "norm2";
969+ RESET SESSION AUTHORIZATION;
970+ ''' )
971+
972+ try :
973+ rows = await self .con .fetch ('''
974+ SELECT
975+ relacl,
976+ relacl::text[] AS chk,
977+ relacl::text[]::text AS text_
978+ FROM
979+ pg_catalog.pg_class
980+ WHERE
981+ relacl IS NOT NULL
982+ ''' )
983+
984+ for row in rows :
985+ self .assertEqual (row ['relacl' ], row ['chk' ],)
986+
987+ finally :
988+ await self .con .execute (r'''
989+ DROP TABLE t0;
990+ DROP TABLE t1;
991+ DROP TABLE t2;
992+ DROP TABLE t3;
993+ DROP TABLE t4;
994+ DROP TABLE t5;
995+ DROP TABLE t6;
996+ DROP TABLE t7;
997+ DROP TABLE a1;
998+ DROP TABLE a2;
999+ DROP USER """u1'";
1000+ DROP USER "{u2";
1001+ DROP USER ",u3";
1002+ DROP USER "u4}";
1003+ DROP USER "u5""";
1004+ DROP USER "u6\""";
1005+ DROP USER "u7\";
1006+ DROP USER norm1;
1007+ DROP USER norm2;
1008+ ''' )
0 commit comments