Fix privilege_to_bits function to set 'all' correctly & work with recent postgres

This commit is contained in:
Andrew McMillan 2010-10-09 08:54:51 -04:00
parent 0200ad8269
commit 32a747da8e
2 changed files with 8 additions and 8 deletions

View File

@ -774,18 +774,18 @@ DECLARE
in_priv TEXT;
out_bits BIT(24);
i INT;
allprivs BIT(24);
all_privs BIT(24);
start INT;
finish INT;
BEGIN
out_bits := 0::BIT(24);
allprivs := ~ out_bits;
all_privs := ~ out_bits;
SELECT array_lower(raw_privs,1) INTO start;
SELECT array_upper(raw_privs,1) INTO finish;
FOR i IN start .. finish LOOP
SELECT out_bits | privilege_to_bits(raw_privs[i]) INTO out_bits;
IF out_bits = allprivs THEN
RETURN allprivs;
IF out_bits = 65535::BIT(24) THEN
RETURN all_privs;
END IF;
END LOOP;
RETURN out_bits;

View File

@ -257,18 +257,18 @@ DECLARE
in_priv TEXT;
out_bits BIT(24);
i INT;
all BIT(24);
all_privs BIT(24);
start INT;
finish INT;
BEGIN
out_bits := 0::BIT(24);
all := ~ out_bits;
all_privs := ~ out_bits;
SELECT array_lower(raw_privs,1) INTO start;
SELECT array_upper(raw_privs,1) INTO finish;
FOR i IN start .. finish LOOP
SELECT out_bits | privilege_to_bits(raw_privs[i]) INTO out_bits;
IF out_bits = all THEN
RETURN all;
IF out_bits = 65535::BIT(24) THEN
RETURN all_privs;
END IF;
END LOOP;
RETURN out_bits;