@@ -207,6 +207,9 @@ pub struct Safety {
207
207
#[ doc = "Prefer using IDENTITY columns over serial columns." ]
208
208
#[ serde( skip_serializing_if = "Option::is_none" ) ]
209
209
pub prefer_identity : Option < RuleConfiguration < pgt_analyser:: options:: PreferIdentity > > ,
210
+ #[ doc = "Prefer JSONB over JSON types." ]
211
+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
212
+ pub prefer_jsonb : Option < RuleConfiguration < pgt_analyser:: options:: PreferJsonb > > ,
210
213
#[ doc = "Prefer statements with guards for robustness in migrations." ]
211
214
#[ serde( skip_serializing_if = "Option::is_none" ) ]
212
215
pub prefer_robust_stmts : Option < RuleConfiguration < pgt_analyser:: options:: PreferRobustStmts > > ,
@@ -256,6 +259,7 @@ impl Safety {
256
259
"preferBigintOverInt" ,
257
260
"preferBigintOverSmallint" ,
258
261
"preferIdentity" ,
262
+ "preferJsonb" ,
259
263
"preferRobustStmts" ,
260
264
"preferTextField" ,
261
265
"preferTimestamptz" ,
@@ -303,6 +307,7 @@ impl Safety {
303
307
RuleFilter :: Rule ( Self :: GROUP_NAME , Self :: GROUP_RULES [ 24 ] ) ,
304
308
RuleFilter :: Rule ( Self :: GROUP_NAME , Self :: GROUP_RULES [ 25 ] ) ,
305
309
RuleFilter :: Rule ( Self :: GROUP_NAME , Self :: GROUP_RULES [ 26 ] ) ,
310
+ RuleFilter :: Rule ( Self :: GROUP_NAME , Self :: GROUP_RULES [ 27 ] ) ,
306
311
] ;
307
312
#[ doc = r" Retrieves the recommended rules" ]
308
313
pub ( crate ) fn is_recommended_true ( & self ) -> bool {
@@ -414,46 +419,51 @@ impl Safety {
414
419
index_set. insert ( RuleFilter :: Rule ( Self :: GROUP_NAME , Self :: GROUP_RULES [ 18 ] ) ) ;
415
420
}
416
421
}
417
- if let Some ( rule) = self . prefer_robust_stmts . as_ref ( ) {
422
+ if let Some ( rule) = self . prefer_jsonb . as_ref ( ) {
418
423
if rule. is_enabled ( ) {
419
424
index_set. insert ( RuleFilter :: Rule ( Self :: GROUP_NAME , Self :: GROUP_RULES [ 19 ] ) ) ;
420
425
}
421
426
}
422
- if let Some ( rule) = self . prefer_text_field . as_ref ( ) {
427
+ if let Some ( rule) = self . prefer_robust_stmts . as_ref ( ) {
423
428
if rule. is_enabled ( ) {
424
429
index_set. insert ( RuleFilter :: Rule ( Self :: GROUP_NAME , Self :: GROUP_RULES [ 20 ] ) ) ;
425
430
}
426
431
}
427
- if let Some ( rule) = self . prefer_timestamptz . as_ref ( ) {
432
+ if let Some ( rule) = self . prefer_text_field . as_ref ( ) {
428
433
if rule. is_enabled ( ) {
429
434
index_set. insert ( RuleFilter :: Rule ( Self :: GROUP_NAME , Self :: GROUP_RULES [ 21 ] ) ) ;
430
435
}
431
436
}
432
- if let Some ( rule) = self . renaming_column . as_ref ( ) {
437
+ if let Some ( rule) = self . prefer_timestamptz . as_ref ( ) {
433
438
if rule. is_enabled ( ) {
434
439
index_set. insert ( RuleFilter :: Rule ( Self :: GROUP_NAME , Self :: GROUP_RULES [ 22 ] ) ) ;
435
440
}
436
441
}
437
- if let Some ( rule) = self . renaming_table . as_ref ( ) {
442
+ if let Some ( rule) = self . renaming_column . as_ref ( ) {
438
443
if rule. is_enabled ( ) {
439
444
index_set. insert ( RuleFilter :: Rule ( Self :: GROUP_NAME , Self :: GROUP_RULES [ 23 ] ) ) ;
440
445
}
441
446
}
442
- if let Some ( rule) = self . require_concurrent_index_creation . as_ref ( ) {
447
+ if let Some ( rule) = self . renaming_table . as_ref ( ) {
443
448
if rule. is_enabled ( ) {
444
449
index_set. insert ( RuleFilter :: Rule ( Self :: GROUP_NAME , Self :: GROUP_RULES [ 24 ] ) ) ;
445
450
}
446
451
}
447
- if let Some ( rule) = self . require_concurrent_index_deletion . as_ref ( ) {
452
+ if let Some ( rule) = self . require_concurrent_index_creation . as_ref ( ) {
448
453
if rule. is_enabled ( ) {
449
454
index_set. insert ( RuleFilter :: Rule ( Self :: GROUP_NAME , Self :: GROUP_RULES [ 25 ] ) ) ;
450
455
}
451
456
}
452
- if let Some ( rule) = self . transaction_nesting . as_ref ( ) {
457
+ if let Some ( rule) = self . require_concurrent_index_deletion . as_ref ( ) {
453
458
if rule. is_enabled ( ) {
454
459
index_set. insert ( RuleFilter :: Rule ( Self :: GROUP_NAME , Self :: GROUP_RULES [ 26 ] ) ) ;
455
460
}
456
461
}
462
+ if let Some ( rule) = self . transaction_nesting . as_ref ( ) {
463
+ if rule. is_enabled ( ) {
464
+ index_set. insert ( RuleFilter :: Rule ( Self :: GROUP_NAME , Self :: GROUP_RULES [ 27 ] ) ) ;
465
+ }
466
+ }
457
467
index_set
458
468
}
459
469
pub ( crate ) fn get_disabled_rules ( & self ) -> FxHashSet < RuleFilter < ' static > > {
@@ -553,46 +563,51 @@ impl Safety {
553
563
index_set. insert ( RuleFilter :: Rule ( Self :: GROUP_NAME , Self :: GROUP_RULES [ 18 ] ) ) ;
554
564
}
555
565
}
556
- if let Some ( rule) = self . prefer_robust_stmts . as_ref ( ) {
566
+ if let Some ( rule) = self . prefer_jsonb . as_ref ( ) {
557
567
if rule. is_disabled ( ) {
558
568
index_set. insert ( RuleFilter :: Rule ( Self :: GROUP_NAME , Self :: GROUP_RULES [ 19 ] ) ) ;
559
569
}
560
570
}
561
- if let Some ( rule) = self . prefer_text_field . as_ref ( ) {
571
+ if let Some ( rule) = self . prefer_robust_stmts . as_ref ( ) {
562
572
if rule. is_disabled ( ) {
563
573
index_set. insert ( RuleFilter :: Rule ( Self :: GROUP_NAME , Self :: GROUP_RULES [ 20 ] ) ) ;
564
574
}
565
575
}
566
- if let Some ( rule) = self . prefer_timestamptz . as_ref ( ) {
576
+ if let Some ( rule) = self . prefer_text_field . as_ref ( ) {
567
577
if rule. is_disabled ( ) {
568
578
index_set. insert ( RuleFilter :: Rule ( Self :: GROUP_NAME , Self :: GROUP_RULES [ 21 ] ) ) ;
569
579
}
570
580
}
571
- if let Some ( rule) = self . renaming_column . as_ref ( ) {
581
+ if let Some ( rule) = self . prefer_timestamptz . as_ref ( ) {
572
582
if rule. is_disabled ( ) {
573
583
index_set. insert ( RuleFilter :: Rule ( Self :: GROUP_NAME , Self :: GROUP_RULES [ 22 ] ) ) ;
574
584
}
575
585
}
576
- if let Some ( rule) = self . renaming_table . as_ref ( ) {
586
+ if let Some ( rule) = self . renaming_column . as_ref ( ) {
577
587
if rule. is_disabled ( ) {
578
588
index_set. insert ( RuleFilter :: Rule ( Self :: GROUP_NAME , Self :: GROUP_RULES [ 23 ] ) ) ;
579
589
}
580
590
}
581
- if let Some ( rule) = self . require_concurrent_index_creation . as_ref ( ) {
591
+ if let Some ( rule) = self . renaming_table . as_ref ( ) {
582
592
if rule. is_disabled ( ) {
583
593
index_set. insert ( RuleFilter :: Rule ( Self :: GROUP_NAME , Self :: GROUP_RULES [ 24 ] ) ) ;
584
594
}
585
595
}
586
- if let Some ( rule) = self . require_concurrent_index_deletion . as_ref ( ) {
596
+ if let Some ( rule) = self . require_concurrent_index_creation . as_ref ( ) {
587
597
if rule. is_disabled ( ) {
588
598
index_set. insert ( RuleFilter :: Rule ( Self :: GROUP_NAME , Self :: GROUP_RULES [ 25 ] ) ) ;
589
599
}
590
600
}
591
- if let Some ( rule) = self . transaction_nesting . as_ref ( ) {
601
+ if let Some ( rule) = self . require_concurrent_index_deletion . as_ref ( ) {
592
602
if rule. is_disabled ( ) {
593
603
index_set. insert ( RuleFilter :: Rule ( Self :: GROUP_NAME , Self :: GROUP_RULES [ 26 ] ) ) ;
594
604
}
595
605
}
606
+ if let Some ( rule) = self . transaction_nesting . as_ref ( ) {
607
+ if rule. is_disabled ( ) {
608
+ index_set. insert ( RuleFilter :: Rule ( Self :: GROUP_NAME , Self :: GROUP_RULES [ 27 ] ) ) ;
609
+ }
610
+ }
596
611
index_set
597
612
}
598
613
#[ doc = r" Checks if, given a rule name, matches one of the rules contained in this category" ]
@@ -641,6 +656,7 @@ impl Safety {
641
656
"preferBigintOverInt" => Severity :: Warning ,
642
657
"preferBigintOverSmallint" => Severity :: Warning ,
643
658
"preferIdentity" => Severity :: Warning ,
659
+ "preferJsonb" => Severity :: Warning ,
644
660
"preferRobustStmts" => Severity :: Warning ,
645
661
"preferTextField" => Severity :: Warning ,
646
662
"preferTimestamptz" => Severity :: Warning ,
@@ -733,6 +749,10 @@ impl Safety {
733
749
. prefer_identity
734
750
. as_ref ( )
735
751
. map ( |conf| ( conf. level ( ) , conf. get_options ( ) ) ) ,
752
+ "preferJsonb" => self
753
+ . prefer_jsonb
754
+ . as_ref ( )
755
+ . map ( |conf| ( conf. level ( ) , conf. get_options ( ) ) ) ,
736
756
"preferRobustStmts" => self
737
757
. prefer_robust_stmts
738
758
. as_ref ( )
0 commit comments