Skip to content

SQL-049: ProvidersRepository.GetProviderAddresses

This statement is a read operation invoked through ORM (NHibernate LINQ). Executed by ProvidersRepository.GetProviderAddresses.

Classification

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

Parameters

Parameter Direction Type Max length Description
:providerId Input long N/A Method argument bound into the LINQ expression
:addressType Input string N/A Method argument bound into the LINQ expression; the wrapper methods pass 'PAY' and 'PHY'

Tables

Table Access Columns used
PROVIDER_ADDRESS SELECT PROVIDER_ADDRESS_SEQ_NUM, UPDATE_NUM, CITY_NAME, COUNTRY_CODE, EFF_DATE, EXP_DATE, ADDRESS_LINE1, ADDRESS_LINE2, ADDRESS_LINE3, ADDRESS_LINE4, ZIP_CODE_EXT, STATE_CODE, ZIP_CODE, UPDATE_DATE, UPDATE_USER, FOREIGN_ADDRESS_FLAG, PROVIDER_ADDRESS_CODE, PROVIDER_LOCATION_SEQ_NUM
PROVIDER_LOCATION JOIN (inner, Where navigation) PROVIDER_LOCATION_SEQ_NUM, PROVIDER_SEQ_NUM

LINQ statement

Source: Data/SAIF.Data.NHibernate/Repositories/ProvidersRepository.cs:35, with the PAY/PHY wrapper methods at :45 and :50.

public IEnumerable<ProviderAddress> GetProviderAddresses(long providerId, string addressType)
{
    return
        unitOfWork.GetRepository<ProviderAddress>()
            .Query()
            .Where(pa =>
                pa.ProviderLocation.Provider.Id == providerId && pa.ExpirationDate == null &&
                pa.AddressType.Code == addressType).ToList();
}

public IEnumerable<ProviderAddress> GetProviderPaymentAddresses(long providerId)
{
    return GetProviderAddresses(providerId, "PAY");
}

public IEnumerable<ProviderAddress> GetProviderPhysicalAddresses(long providerId)
{
    return GetProviderAddresses(providerId, "PHY");
}

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
SELECT
  PA.PROVIDER_ADDRESS_SEQ_NUM,
  PA.UPDATE_NUM,
  PA.CITY_NAME,
  PA.COUNTRY_CODE,
  PA.EFF_DATE,
  PA.EXP_DATE,
  PA.ADDRESS_LINE1,
  PA.ADDRESS_LINE2,
  PA.ADDRESS_LINE3,
  PA.ADDRESS_LINE4,
  PA.ZIP_CODE_EXT,
  PA.STATE_CODE,
  PA.ZIP_CODE,
  PA.UPDATE_DATE,
  PA.UPDATE_USER,
  PA.FOREIGN_ADDRESS_FLAG,
  PA.PROVIDER_ADDRESS_CODE,
  PA.PROVIDER_LOCATION_SEQ_NUM
FROM PROVIDER_ADDRESS PA
  INNER JOIN PROVIDER_LOCATION PL
    ON PL.PROVIDER_LOCATION_SEQ_NUM = PA.PROVIDER_LOCATION_SEQ_NUM
WHERE PL.PROVIDER_SEQ_NUM = :providerId
  AND PA.EXP_DATE IS NULL
  AND PA.PROVIDER_ADDRESS_CODE = :addressType

Translation notes: - pa.ProviderLocation.Provider.Id: the first hop, ProviderLocation, is followed by a non-identifier navigation (.Provider), so PROVIDER_LOCATION must be joined (inner, implicit). The final .Id short-circuits to PL.PROVIDER_SEQ_NUM; PROVIDER itself is never joined. - pa.AddressType.Code is the identifier of ProviderAddressCode, so it short-circuits to the FK PA.PROVIDER_ADDRESS_CODE; PROVIDER_ADDRESS_CODE is never joined. - Dialect caveat: ProvidersRepository has no DI registration or new ProvidersRepository(...) usage found anywhere in the repository, so the call-site dialect cannot be proven from wiring. The only NHibernate configuration factory available to this assembly is the Oracle one, so Oracle is assumed rather than confirmed.

Operations and processes

Business rules

Note: Statements marked with ** could not be confirmed; treat as unknown until verified.

Sources

  • Data/SAIF.Data.NHibernate/Repositories/ProvidersRepository.cs:35