Skip to content

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 BSL033 and alias CreateQueryInCycle are 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.

[tool.onec-hbk-bsl]
select = ["BSL033"]
ignore = ["CreateQueryInCycle"]

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:
Value = "example";  // noqa: BSL033
  • bsl-disable:
Value = "example";  // bsl-disable: BSL033
  • compatible BSLLS form:
Value = "example";  // BSLLS:CreateQueryInCycle-off

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;