@@ -916,3 +916,93 @@ async def test_table_as_composite(self):
916
916
await self .con .execute ('''
917
917
DROP TABLE tab;
918
918
''' )
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