Skip to content

SQL-091: Retrieve BatchControl

This ORM statement performs a read operation on BatchControl via IUnitOfWork.GetRepository<T>(), executed from Services/SAIF.Services/Collections/CashReceiptsService.cs (L55, L148).

Classification

Field Value
SQL ID SQL-091
Operation type Read
Execution method ORM (NHibernate LINQ)
Database Oracle
Schema [unqualified]**
Command type N/A (ORM-generated)
Business object BatchControl
Criteria property N/A — ORM
Lifecycle method ApplyCashReceipts, ProcessBatch

Parameters

Parameter Direction Type Max length Description
runDate Input ** N/A x.BatchDate == runDate → column BATCH_DATE
"N" Input ** N/A x.BatchBalancedFlag == "N" → column BATCH_BALANCED_FLAG
batchId Input ** N/A x.Id == batchId → column LC_BATCH_CONTROL_SEQ_NUM

Tables

Table Access Columns used
LEGAL_COLLECTION_BATCH_CONTROL SELECT BATCH_DATE, BATCH_BALANCED_FLAG, LC_BATCH_CONTROL_SEQ_NUM, BATCH_ID, BATCH_COUNT, BATCH_AMOUNT, CREATE_DATE

LINQ statement

Source: Services/SAIF.Services/Collections/CashReceiptsService.cs:55

// Services/SAIF.Services/Collections/CashReceiptsService.cs:55-56
            var batch = UnitOfWork.GetRepository<DataModel.BatchControl>()
                .Query().Where(x => x.BatchDate == runDate && x.BatchBalancedFlag == "N");

// Services/SAIF.Services/Collections/CashReceiptsService.cs:57
            if (!batch.Any())

// Services/SAIF.Services/Collections/CashReceiptsService.cs:62
            if (Enumerable.Any(batch, batchControl => !ProcessBatch(batchControl.Id, controlLog, controlReport)))

// Services/SAIF.Services/Collections/CashReceiptsService.cs:148-149
            var batch = UnitOfWork.GetRepository<DataModel.BatchControl>()
                .Query().Single(x => x.Id == batchId);

Sample SQL

Inferred SQL: This SQL was inferred from the LINQ statement above and the NHibernate mappings. It is not concrete SQL from source code; NHibernate generates the executed statement at runtime, so aliases, column order, join syntax, and bind-parameter names may differ.

-- Inferred from LINQ (NHibernate mapping translation); not concrete SQL
-- Services/SAIF.Services/Collections/CashReceiptsService.cs:55 (Any, L57)
SELECT *
FROM (
  SELECT 1
  FROM LEGAL_COLLECTION_BATCH_CONTROL LCBC
  WHERE LCBC.BATCH_DATE = :runDate
    AND LCBC.BATCH_BALANCED_FLAG = 'N'
)
WHERE ROWNUM <= 1

-- Services/SAIF.Services/Collections/CashReceiptsService.cs:55 (enumeration, L62)
SELECT
  LCBC.LC_BATCH_CONTROL_SEQ_NUM,
  LCBC.BATCH_DATE,
  LCBC.BATCH_ID,
  LCBC.BATCH_COUNT,
  LCBC.BATCH_AMOUNT,
  LCBC.CREATE_DATE,
  LCBC.BATCH_BALANCED_FLAG
FROM LEGAL_COLLECTION_BATCH_CONTROL LCBC
WHERE LCBC.BATCH_DATE = :runDate
  AND LCBC.BATCH_BALANCED_FLAG = 'N'

-- Services/SAIF.Services/Collections/CashReceiptsService.cs:148
SELECT
  LCBC.LC_BATCH_CONTROL_SEQ_NUM,
  LCBC.BATCH_DATE,
  LCBC.BATCH_ID,
  LCBC.BATCH_COUNT,
  LCBC.BATCH_AMOUNT,
  LCBC.CREATE_DATE,
  LCBC.BATCH_BALANCED_FLAG
FROM LEGAL_COLLECTION_BATCH_CONTROL LCBC
WHERE LCBC.LC_BATCH_CONTROL_SEQ_NUM = :batchId
-- NHibernate expects at most one row

Translation notes: - The IQueryable built at L55-56 is executed twice: batch.Any() (L57) -> SELECT 1 ... ROWNUM <= 1; Enumerable.Any(batch, ...) (L62) is LINQ-to-Objects over the IQueryable, so it enumerates the full entity query (the predicate !ProcessBatch(...) runs in memory). - BatchBalancedFlag is a plain string Map (CollectionsCashReceipts.cs:37) -> literal 'N'.

Operations and processes

Sources

  • Services/SAIF.Services/Collections/CashReceiptsService.cs (L55, L148)