AvoidDmlStatementsInLoops
Deprecated
Since: PMD 5.5.0
Priority: Medium (3)
Avoid DML statements inside loops to avoid hitting the DML governor limit. Instead, try to batch up the data into a list and invoke your DML once on that list of data outside the loop.
This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced
by the more general rule OperationWithLimitsInLoop
.
This rule is defined by the following Java class: net.sourceforge.pmd.lang.apex.rule.performance.AvoidDmlStatementsInLoopsRule
Example(s):
public class Something {
public void foo() {
for (Integer i = 0; i < 151; i++) {
Account account;
// ...
insert account;
}
}
}
This rule has the following properties:
Name | Default Value | Description | Multivalued |
---|---|---|---|
cc_categories | Performance | Deprecated Code Climate Categories | yes. Delimiter is ‘|’. |
cc_remediation_points_multiplier | 150 | Deprecated Code Climate Remediation Points multiplier | no |
cc_block_highlighting | false | Deprecated Code Climate Block Highlighting | no |
Use this rule with the default properties by just referencing it:
<rule ref="category/apex/performance.xml/AvoidDmlStatementsInLoops" />
AvoidSoqlInLoops
Deprecated
Since: PMD 5.5.0
Priority: Medium (3)
New objects created within loops should be checked to see if they can created outside them and reused.
This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced
by the more general rule OperationWithLimitsInLoop
.
This rule is defined by the following Java class: net.sourceforge.pmd.lang.apex.rule.performance.AvoidSoqlInLoopsRule
Example(s):
public class Something {
public static void main( String as[] ) {
for (Integer i = 0; i < 10; i++) {
List<Account> accounts = [SELECT Id FROM Account];
}
}
}
This rule has the following properties:
Name | Default Value | Description | Multivalued |
---|---|---|---|
cc_categories | Performance | Deprecated Code Climate Categories | yes. Delimiter is ‘|’. |
cc_remediation_points_multiplier | 150 | Deprecated Code Climate Remediation Points multiplier | no |
cc_block_highlighting | false | Deprecated Code Climate Block Highlighting | no |
Use this rule with the default properties by just referencing it:
<rule ref="category/apex/performance.xml/AvoidSoqlInLoops" />
AvoidSoslInLoops
Deprecated
Since: PMD 6.0.0
Priority: Medium (3)
Sosl calls within loops can cause governor limit exceptions.
This rule is deprecated and will be removed with PMD 7.0.0. The rule is replaced
by the more general rule OperationWithLimitsInLoop
.
This rule is defined by the following Java class: net.sourceforge.pmd.lang.apex.rule.performance.AvoidSoslInLoopsRule
Example(s):
public class Something {
public static void main( String as[] ) {
for (Integer i = 0; i < 10; i++) {
List<List<SObject>> searchList = [FIND 'map*' IN ALL FIELDS RETURNING Account (Id, Name), Contact, Opportunity, Lead];
}
}
}
This rule has the following properties:
Name | Default Value | Description | Multivalued |
---|---|---|---|
cc_categories | Performance | Deprecated Code Climate Categories | yes. Delimiter is ‘|’. |
cc_remediation_points_multiplier | 150 | Deprecated Code Climate Remediation Points multiplier | no |
cc_block_highlighting | false | Deprecated Code Climate Block Highlighting | no |
Use this rule with the default properties by just referencing it:
<rule ref="category/apex/performance.xml/AvoidSoslInLoops" />
OperationWithLimitsInLoop
Since: PMD 6.29.0
Priority: Medium (3)
Database class methods, DML operations, SOQL queries, or SOSL queries within loops can cause governor limit exceptions. Instead, try to batch up the data into a list and invoke the operation once on that list of data outside the loop.
This rule is defined by the following Java class: net.sourceforge.pmd.lang.apex.rule.performance.OperationWithLimitsInLoopRule
Example(s):
public class Something {
public void databaseMethodInsideOfLoop(List<Account> accounts) {
for (Account a : accounts) {
Database.insert(a);
}
}
public void dmlInsideOfLoop() {
for (Integer i = 0; i < 151; i++) {
Account account;
// ...
insert account;
}
}
public void soqlInsideOfLoop() {
for (Integer i = 0; i < 10; i++) {
List<Account> accounts = [SELECT Id FROM Account];
}
}
public void soslInsideOfLoop() {
for (Integer i = 0; i < 10; i++) {
List<List<SObject>> searchList = [FIND 'map*' IN ALL FIELDS RETURNING Account (Id, Name), Contact, Opportunity, Lead];
}
}
}
This rule has the following properties:
Name | Default Value | Description | Multivalued |
---|---|---|---|
cc_categories | Performance | Deprecated Code Climate Categories | yes. Delimiter is ‘|’. |
cc_remediation_points_multiplier | 150 | Deprecated Code Climate Remediation Points multiplier | no |
cc_block_highlighting | false | Deprecated Code Climate Block Highlighting | no |
Use this rule with the default properties by just referencing it:
<rule ref="category/apex/performance.xml/OperationWithLimitsInLoop" />