Skip to content

SQL-234: TaskQueryProvider.GetCategory

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

Classification

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

Parameters

Parameter Direction Type Max length Description
code Input string N/A Method argument of TaskQueryProvider.GetCategory bound into the ORM expression; NHibernate generates the bind variable at runtime

Tables

Table Access Columns used
TASK_CATEGORY_CODE SELECT Code, CODE_DESCR, NOTEPAD_REQUIRED_FLAG, DEFAULT_ACTION_CODE, DEFAULT_PRIORITY_CODE, TASK_SOURCE_CODE

LINQ statement

Source: Data/SAIF.Data/Queries/Tasks/TaskQueryProvider.cs:47.

// Data/SAIF.Data/Queries/Tasks/TaskQueryProvider.cs:47-48
return Factory.GetRepository<TaskCategory>().Query()
    .SingleOrDefault(x => x.Code.ToLower() == code.ToLower());

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
  TCC.Code,
  TCC.CODE_DESCR,
  TCC.NOTEPAD_REQUIRED_FLAG,
  TCC.DEFAULT_ACTION_CODE,
  TCC.DEFAULT_PRIORITY_CODE,
  TCC.TASK_SOURCE_CODE
FROM TASK_CATEGORY_CODE TCC
WHERE LOWER(TCC.Code) = :code  -- bound value = code.ToLower(), evaluated client-side
-- SingleOrDefault: NHibernate fetches and throws if more than one row

Translation notes: - The identifier column of TaskCategory is literally Code (FluentNHibernate default: Id(x => x.Code) without .Column(...)). - x.Code.ToLower() on the mapped member → LOWER(col) server-side; code.ToLower() does not depend on the lambda parameter, so NHibernate's partial evaluator (re-linq) computes it in memory and binds the result as a parameter. The function wrapper prevents index use on the code column. - References(DefaultAction/DefaultPriority/TaskSource) contribute their FK columns only; the referenced code tables are not joined.

Operations and processes

Business rules

Sources

  • Data/SAIF.Data/Queries/Tasks/TaskQueryProvider.cs:47