Skip to content

SQL-280: Retrieve PurchaseOrder via RetrievePurchaseOrders

This statement retrieves PurchaseOrder rows via NHibernate LINQ in PurchaseOrderService.RetrievePurchaseOrders: when no purchase order number is supplied, it returns purchase orders that are pending issue, not closed, and not cancelled; when a purchase order number fragment is supplied, it returns purchase orders whose number contains that fragment. Executed from Services/SAIF.Services/Corporate/PurchaseOrderService.cs (L67-69).

Classification

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

Parameters

Parameter Direction Type Max length Description
:PurchaseOrderNumber Input string N/A _batchParameters.PurchaseOrderNumber — matched with LIKE '%' \|\| :PurchaseOrderNumber \|\| '%' against PO_NUMBER (used only when supplied)

Tables

Table Access Columns used
PURCHASEORDERSVIEW SELECT PO_NUMBER, L_INDEX, VENDOR, VENDOR_VNAME, ADDR1, ADDR2, ADDR3, ADDR4, CITY_ADDR5, STATE_PROV, POSTAL_CODE, COUNTRY, PO_DATE, DELIVERY_DATE, BUYER, TOT_ORDER_AMT, PHONE, CURRENCY_CODE, RELEASED_FL, ISSUED_FLAG, CANCELLED_FL, REVISED, ISSUE_PENDING, CLOSED_FL, LOCATION_ADDR1, LOCATION_CITY, LOCATION_STATE, LOCATION_ZIP, R_DESC_01, PO_NAME, R_NAME

LINQ statement

Source: Services/SAIF.Services/Corporate/PurchaseOrderService.cs:67

// Services/SAIF.Services/Corporate/PurchaseOrderService.cs:67-69
return (_batchParameters.PurchaseOrderNumber.IsNullOrEmpty())
    ? _unitOfWork.GetRepository<PurchaseOrderModel>().Query().Where(x => x.IsIssuePending == true && x.IsClosed == false && x.Canceled == false).ToList()
    : _unitOfWork.GetRepository<PurchaseOrderModel>().Query().Where(x => x.Id.Contains(_batchParameters.PurchaseOrderNumber)).ToList();

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
-- PurchaseOrderNumber is null or empty (L68)
SELECT
  POV.PO_NUMBER,
  POV.L_INDEX,
  POV.VENDOR,
  POV.VENDOR_VNAME,
  POV.ADDR1,
  POV.ADDR2,
  POV.ADDR3,
  POV.ADDR4,
  POV.CITY_ADDR5,
  POV.STATE_PROV,
  POV.POSTAL_CODE,
  POV.COUNTRY,
  POV.PO_DATE,
  POV.DELIVERY_DATE,
  POV.BUYER,
  POV.TOT_ORDER_AMT,
  POV.PHONE,
  POV.CURRENCY_CODE,
  POV.RELEASED_FL,
  POV.ISSUED_FLAG,
  POV.CANCELLED_FL,
  POV.REVISED,
  POV.ISSUE_PENDING,
  POV.CLOSED_FL,
  POV.LOCATION_ADDR1,
  POV.LOCATION_CITY,
  POV.LOCATION_STATE,
  POV.LOCATION_ZIP,
  POV.R_DESC_01,
  POV.PO_NAME,
  POV.R_NAME
FROM PurchaseOrdersView POV
WHERE POV.ISSUE_PENDING = 'Y'
  AND POV.CLOSED_FL = 'N'
  AND POV.CANCELLED_FL = 'N'

-- PurchaseOrderNumber supplied (L69)
SELECT
  POV.PO_NUMBER,
  POV.L_INDEX,
  POV.VENDOR,
  POV.VENDOR_VNAME,
  POV.ADDR1,
  POV.ADDR2,
  POV.ADDR3,
  POV.ADDR4,
  POV.CITY_ADDR5,
  POV.STATE_PROV,
  POV.POSTAL_CODE,
  POV.COUNTRY,
  POV.PO_DATE,
  POV.DELIVERY_DATE,
  POV.BUYER,
  POV.TOT_ORDER_AMT,
  POV.PHONE,
  POV.CURRENCY_CODE,
  POV.RELEASED_FL,
  POV.ISSUED_FLAG,
  POV.CANCELLED_FL,
  POV.REVISED,
  POV.ISSUE_PENDING,
  POV.CLOSED_FL,
  POV.LOCATION_ADDR1,
  POV.LOCATION_CITY,
  POV.LOCATION_STATE,
  POV.LOCATION_ZIP,
  POV.R_DESC_01,
  POV.PO_NAME,
  POV.R_NAME
FROM PurchaseOrdersView POV
WHERE POV.PO_NUMBER LIKE '%' || :PurchaseOrderNumber || '%'

Translation notes: - C# ternary chooses one of two statements; the choice is not a SQL predicate. - YesNoType booleans (PurchaseOrderMap.cs:32, :34, :35): == true → 'Y', == false → 'N'. - string.Contains(arg) → LIKE '%' || :arg || '%'.

Operations and processes

Sources

  • Services/SAIF.Services/Corporate/PurchaseOrderService.cs (L68, L69)