BSL033 — Execution query on cycle¶
Summary¶
Execution query on cycle
Identifiers¶
| Field | Value |
|---|---|
| Rule code | BSL033 |
| Compatible alias | CreateQueryInCycle |
| Severity | WARNING |
| Enabled by default | Yes |
| Implemented | Yes |
| Tags | performance, brain-overload |
Behavior¶
- The public identifier
BSL033and aliasCreateQueryInCycleare stable. - The rule reports the cases documented on this page.
- Suppressions and project configuration are applied before publication.
- The rule requires neither an external analyzer nor network access.
Configuration and suppression¶
BSL### is the primary stable identifier. The compatible alias is accepted
in select, ignore, and compatible block suppression comments.
All three suppression families support both a current line and a range. When an opening comment follows code, it affects only that line. Use any one form:
noqa:
bsl-disable:
- compatible
BSLLSform:
When the same opening comment is on a line by itself, it starts a range. Close it with the matching marker from the same family:
// noqa: BSL033
// code without this diagnostic
// noqa-enable: BSL033
// bsl-disable: BSL033
// code without this diagnostic
// bsl-enable: BSL033
// BSLLS:CreateQueryInCycle-off
// code without this diagnostic
// BSLLS:CreateQueryInCycle-on
To disable the rule until the end of the file, omit the closing
noqa-enable, bsl-enable, or BSLLS:…-on marker.
Opening and closing markers must belong to the same family.
Description¶
Execution query in cycle.
Examples¶
Incorrect
// BanksToProcessing - contains an array of banks
InidividualQuery = New Query("
|SELECT
| BankAccounts.Ref AS Account
|FROM
| Catalog.BankAccounts AS BankAccounts
|WHERE
| BankAccounts.Bank = &Bank");
For Each Bank From BanksToProcess Do
InidividualQuery .SetParameter("Bank", Bank);
AccountsSelection = InidividualQuery .Execute().Select();
While AccountsSelection.Next() Do
ProcessBankAccounts(AccountsSelection.Account);
EndDo;
EndDo;
Correct
// BanksToProcess - contains an array of banks
MergedQuery = New Query("
|SELECT
| BankAccounts.Ref AS Account
|FROM
| Catalog.BankAccounts AS BankAccounts
|WHERE
| BankAccounts.Bank In(&BanksToProcess)");
MergedQuery.SetParameter("BanksToProcess", BanksToProcess);
AccountsSelection = MergedQuery.Execute().Select();
While AccountsSelection.Next() Do
ProcessBankAccounts(AccountsSelection.Account);
EndDo;