Skip to content

Commit 9add59b

Browse files
committed
Fix indentation levels in CREATE POLICY statements with USING and WITH CHECK. Thanks to mdelorme-archiD for the report.
1 parent de9867d commit 9add59b

File tree

5 files changed

+132
-112
lines changed

5 files changed

+132
-112
lines changed

lib/pgFormatter/Beautify.pm

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -917,6 +917,7 @@ sub beautify {
917917
$self->{'_is_in_partition'} = 0;
918918
$self->{'_is_in_over'} = 0;
919919
$self->{'_is_in_policy'} = 0;
920+
$self->{'_policy_as_using'} = 0;
920921
$self->{'_is_in_truncate'} = 0;
921922
$self->{'_is_in_using'} = 0;
922923
$self->{'_and_level'} = 0;
@@ -1319,7 +1320,7 @@ sub beautify {
13191320
####
13201321
# Set the current kind of statement parsed
13211322
####
1322-
if ( $token =~
1323+
if ( !$self->{'_is_in_policy'} and $token =~
13231324
/^(FUNCTION|PROCEDURE|SEQUENCE|INSERT|DELETE|UPDATE|SELECT|RAISE|ALTER|GRANT|REVOKE|COMMENT|DROP|RULE|COMMENT|LOCK)$/i
13241325
)
13251326
{
@@ -1329,7 +1330,7 @@ sub beautify {
13291330
$self->{'_current_full_sql_stmt'} = '';
13301331

13311332
# Set current statement with taking care to exclude of SELECT ... FOR UPDATE
1332-
# statement and ON CONFLICT DO UPDATE.
1333+
# statement and ON CONFLICT DO UPDATE and FOR UPDATE TO.
13331334
if (
13341335
$k_stmt ne 'UPDATE'
13351336
or ( defined $self->_next_token
@@ -2311,6 +2312,7 @@ sub beautify {
23112312
$self->{'_has_order_by'} = 0;
23122313
$self->{'_is_in_policy'} = 0;
23132314
$self->{'_is_in_aggregate'} = 0;
2315+
$self->{'_policy_as_using'} = 0;
23142316
}
23152317
$self->_add_token($token);
23162318

@@ -2561,6 +2563,7 @@ sub beautify {
25612563
$self->{'_is_in_partition'} = 0;
25622564
$self->{'_is_in_over'} = 0;
25632565
$self->{'_is_in_policy'} = 0;
2566+
$self->{'_policy_as_using'} = 0;
25642567
$self->{'_is_in_truncate'} = 0;
25652568
$self->{'_is_in_trigger'} = 0;
25662569
$self->{'_is_in_using'} = 0;
@@ -3470,16 +3473,33 @@ sub beautify {
34703473
$self->{'_is_in_operator'}
34713474
|| ( $self->{'_is_in_policy'}
34723475
&& !$self->{'format_type'}
3476+
&& !$self->{'_is_in_policy'}
34733477
&& !$self->{'_is_in_using'} )
34743478
);
3479+
if ( $self->{'_is_in_policy'} and $token =~ /^USING$/i )
3480+
{
3481+
$self->{'_policy_as_using'} = 1;
3482+
$self->_over( $token, $last ) if ($self->{'_level'} == 0);
3483+
3484+
}
34753485
$self->_push_level( $self->{'_level'}, $token, $last )
34763486
if ( $token =~ /^USING$/i );
3487+
$self->_set_level( $self->_pop_level( $token, $last ),
3488+
$token, $last )
3489+
if ( uc($token) eq 'WITH' and uc($self->_next_token) eq 'CHECK'
3490+
and $self->{'_is_in_policy'} and $self->{'_policy_as_using'});
3491+
34773492
$self->_set_level( $self->_pop_level( $token, $last ),
34783493
$token, $last )
34793494
if ( uc($token) eq 'WITH'
3480-
and $self->{'_is_in_policy'} > 1
3495+
and ($self->{'_is_in_policy'} > 1 or uc($self->_next_token) eq 'CHECK')
34813496
&& !$self->{'format_type'}
34823497
&& $self->{'_is_in_using'} );
3498+
3499+
$self->_over( $token, $last )
3500+
if ( uc($token) eq 'WITH' and uc($self->_next_token) eq 'CHECK'
3501+
and $self->{'_is_in_policy'} and $self->{'_level'} == 0);
3502+
34833503
$self->_new_line( $token, $last )
34843504
if ( uc($last) ne 'EXCLUDE'
34853505
and !$self->{'_is_in_index'}

t/pg-test-files/expected/rowsecurity.sql

Lines changed: 71 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -577,12 +577,12 @@ GRANT ALL ON t3 TO public;
577577

578578
CREATE POLICY p1 ON t1
579579
FOR ALL TO PUBLIC
580-
USING (a % 2 = 0);
580+
USING (a % 2 = 0);
581581

582582
-- be even number
583583
CREATE POLICY p2 ON t2
584584
FOR ALL TO PUBLIC
585-
USING (a % 2 = 1);
585+
USING (a % 2 = 1);
586586

587587
-- be odd number
588588
ALTER TABLE t1 ENABLE ROW LEVEL SECURITY;
@@ -1172,13 +1172,13 @@ CREATE TABLE dependent (
11721172

11731173
CREATE POLICY d1 ON dependent
11741174
FOR ALL TO PUBLIC
1175-
USING (x = (
1176-
SELECT
1177-
d.x
1178-
FROM
1179-
dependee d
1180-
WHERE
1181-
d.y = y));
1175+
USING (x = (
1176+
SELECT
1177+
d.x
1178+
FROM
1179+
dependee d
1180+
WHERE
1181+
d.y = y));
11821182

11831183
DROP TABLE dependee;
11841184

@@ -1401,11 +1401,11 @@ CREATE POLICY p2 ON s2
14011401

14021402
CREATE POLICY p3 ON s1
14031403
FOR INSERT
1404-
WITH CHECK (a = (
1405-
SELECT
1406-
a
1407-
FROM
1408-
s1));
1404+
WITH CHECK (a = (
1405+
SELECT
1406+
a
1407+
FROM
1408+
s1));
14091409

14101410
ALTER TABLE s1 ENABLE ROW LEVEL SECURITY;
14111411

@@ -1980,22 +1980,22 @@ DROP POLICY p1r ON document;
19801980

19811981
CREATE POLICY p1 ON document
19821982
FOR SELECT
1983-
USING (TRUE);
1983+
USING (TRUE);
19841984

19851985
CREATE POLICY p2 ON document
19861986
FOR INSERT
1987-
WITH CHECK (dauthor = CURRENT_USER);
1987+
WITH CHECK (dauthor = CURRENT_USER);
19881988

19891989
CREATE POLICY p3 ON document
19901990
FOR UPDATE
1991-
USING (cid = (
1992-
SELECT
1993-
cid
1994-
FROM
1995-
category
1996-
WHERE
1997-
cname = 'novel'))
1998-
WITH CHECK (dauthor = CURRENT_USER);
1991+
USING (cid = (
1992+
SELECT
1993+
cid
1994+
FROM
1995+
category
1996+
WHERE
1997+
cname = 'novel'))
1998+
WITH CHECK (dauthor = CURRENT_USER);
19991999

20002000
SET SESSION AUTHORIZATION regress_rls_bob;
20012001

@@ -2148,13 +2148,13 @@ DROP POLICY p3 ON document;
21482148

21492149
CREATE POLICY p3_with_default ON document
21502150
FOR UPDATE
2151-
USING (cid = (
2152-
SELECT
2153-
cid
2154-
FROM
2155-
category
2156-
WHERE
2157-
cname = 'novel'));
2151+
USING (cid = (
2152+
SELECT
2153+
cid
2154+
FROM
2155+
category
2156+
WHERE
2157+
cname = 'novel'));
21582158

21592159
SET SESSION AUTHORIZATION regress_rls_bob;
21602160

@@ -2210,14 +2210,14 @@ DROP POLICY p3_with_default ON document;
22102210
--
22112211
CREATE POLICY p3_with_all ON document
22122212
FOR ALL
2213-
USING (cid = (
2214-
SELECT
2215-
cid
2216-
FROM
2217-
category
2218-
WHERE
2219-
cname = 'novel'))
2220-
WITH CHECK (dauthor = CURRENT_USER);
2213+
USING (cid = (
2214+
SELECT
2215+
cid
2216+
FROM
2217+
category
2218+
WHERE
2219+
cname = 'novel'))
2220+
WITH CHECK (dauthor = CURRENT_USER);
22212221

22222222
SET SESSION AUTHORIZATION regress_rls_bob;
22232223

@@ -2617,23 +2617,23 @@ VALUES
26172617

26182618
CREATE POLICY p0 ON x1
26192619
FOR ALL
2620-
USING (c = CURRENT_USER);
2620+
USING (c = CURRENT_USER);
26212621

26222622
CREATE POLICY p1 ON x1
26232623
FOR SELECT
2624-
USING (a % 2 = 0);
2624+
USING (a % 2 = 0);
26252625

26262626
CREATE POLICY p2 ON x1
26272627
FOR INSERT
2628-
WITH CHECK (a % 2 = 1);
2628+
WITH CHECK (a % 2 = 1);
26292629

26302630
CREATE POLICY p3 ON x1
26312631
FOR UPDATE
2632-
USING (a % 2 = 0);
2632+
USING (a % 2 = 0);
26332633

26342634
CREATE POLICY p4 ON x1
26352635
FOR DELETE
2636-
USING (a < 8);
2636+
USING (a < 8);
26372637

26382638
ALTER TABLE x1 ENABLE ROW LEVEL SECURITY;
26392639

@@ -2701,20 +2701,20 @@ GRANT ALL ON y1, y2 TO regress_rls_bob;
27012701

27022702
CREATE POLICY p1 ON y1
27032703
FOR ALL
2704-
USING (a % 2 = 0);
2704+
USING (a % 2 = 0);
27052705

27062706
CREATE POLICY p2 ON y1
27072707
FOR SELECT
2708-
USING (a > 2);
2708+
USING (a > 2);
27092709

27102710
CREATE POLICY p1 ON y1
27112711
FOR SELECT
2712-
USING (a % 2 = 1);
2712+
USING (a % 2 = 1);
27132713

27142714
--fail
27152715
CREATE POLICY p1 ON y2
27162716
FOR ALL
2717-
USING (a % 2 = 0);
2717+
USING (a % 2 = 0);
27182718

27192719
--OK
27202720
ALTER TABLE y1 ENABLE ROW LEVEL SECURITY;
@@ -3560,17 +3560,17 @@ VALUES
35603560

35613561
CREATE POLICY p1 ON current_check
35623562
FOR SELECT
3563-
USING (currentid % 2 = 0);
3563+
USING (currentid % 2 = 0);
35643564

35653565
CREATE POLICY p2 ON current_check
35663566
FOR DELETE
3567-
USING (currentid = 4
3568-
AND rlsuser = CURRENT_USER);
3567+
USING (currentid = 4
3568+
AND rlsuser = CURRENT_USER);
35693569

35703570
CREATE POLICY p3 ON current_check
35713571
FOR UPDATE
3572-
USING (currentid = 4)
3573-
WITH CHECK (rlsuser = CURRENT_USER);
3572+
USING (currentid = 4)
3573+
WITH CHECK (rlsuser = CURRENT_USER);
35743574

35753575
ALTER TABLE current_check ENABLE ROW LEVEL SECURITY;
35763576

@@ -3894,19 +3894,19 @@ ALTER TABLE r1 ENABLE ROW LEVEL SECURITY;
38943894

38953895
CREATE POLICY p1 ON r2
38963896
FOR SELECT
3897-
USING (TRUE);
3897+
USING (TRUE);
38983898

38993899
CREATE POLICY p2 ON r2
39003900
FOR INSERT
3901-
WITH CHECK (FALSE);
3901+
WITH CHECK (FALSE);
39023902

39033903
CREATE POLICY p3 ON r2
39043904
FOR UPDATE
3905-
USING (FALSE);
3905+
USING (FALSE);
39063906

39073907
CREATE POLICY p4 ON r2
39083908
FOR DELETE
3909-
USING (FALSE);
3909+
USING (FALSE);
39103910

39113911
ALTER TABLE r2 ENABLE ROW LEVEL SECURITY;
39123912

@@ -4211,11 +4211,11 @@ CREATE TABLE r1 (
42114211

42124212
CREATE POLICY p1 ON r1
42134213
FOR SELECT
4214-
USING (FALSE);
4214+
USING (FALSE);
42154215

42164216
CREATE POLICY p2 ON r1
42174217
FOR INSERT
4218-
WITH CHECK (TRUE);
4218+
WITH CHECK (TRUE);
42194219

42204220
ALTER TABLE r1 ENABLE ROW LEVEL SECURITY;
42214221

@@ -4261,16 +4261,16 @@ CREATE TABLE r1 (
42614261

42624262
CREATE POLICY p1 ON r1
42634263
FOR SELECT
4264-
USING (a < 20);
4264+
USING (a < 20);
42654265

42664266
CREATE POLICY p2 ON r1
42674267
FOR UPDATE
4268-
USING (a < 20)
4269-
WITH CHECK (TRUE);
4268+
USING (a < 20)
4269+
WITH CHECK (TRUE);
42704270

42714271
CREATE POLICY p3 ON r1
42724272
FOR INSERT
4273-
WITH CHECK (TRUE);
4273+
WITH CHECK (TRUE);
42744274

42754275
INSERT INTO r1
42764276
VALUES (10);
@@ -4587,16 +4587,16 @@ CREATE POLICY p1 ON rls_tbl
45874587

45884588
CREATE POLICY p2 ON rls_tbl
45894589
FOR SELECT
4590-
USING (c1 <= 3);
4590+
USING (c1 <= 3);
45914591

45924592
CREATE POLICY p3 ON rls_tbl
45934593
FOR UPDATE
4594-
USING (c1 <= 3)
4595-
WITH CHECK (c1 > 5);
4594+
USING (c1 <= 3)
4595+
WITH CHECK (c1 > 5);
45964596

45974597
CREATE POLICY p4 ON rls_tbl
45984598
FOR DELETE
4599-
USING (c1 <= 3);
4599+
USING (c1 <= 3);
46004600

46014601
CREATE TABLE rls_tbl_force (
46024602
c1 int
@@ -4612,14 +4612,14 @@ CREATE POLICY p1 ON rls_tbl_force
46124612

46134613
CREATE POLICY p2 ON rls_tbl_force
46144614
FOR SELECT
4615-
USING (c1 = 8);
4615+
USING (c1 = 8);
46164616

46174617
CREATE POLICY p3 ON rls_tbl_force
46184618
FOR UPDATE
4619-
USING (c1 = 8)
4620-
WITH CHECK (c1 >= 5);
4619+
USING (c1 = 8)
4620+
WITH CHECK (c1 >= 5);
46214621

46224622
CREATE POLICY p4 ON rls_tbl_force
46234623
FOR DELETE
4624-
USING (c1 = 8);
4624+
USING (c1 = 8);
46254625

0 commit comments

Comments
 (0)