Class PvtSqlGenerator
PVT SQL generator for T-SQL syntax.
Uses MAX(CASE WHEN) for scalar fields - single pass optimization.
Uses STRING_AGG for array fields (SQL Server 2017+).
Two-level CTE: raw_values (aggregation) → pvt_cte (filters).
SECURITY: Parameterized SQL queries.
public class PvtSqlGenerator
Inheritance
Properties
AliasMappings
Gets the field alias mappings generated during SQL generation.
public IReadOnlyList<FieldAliasMapping> AliasMappings { get; }
Methods
EscapeIdentifier(string)
Escapes field path for use as T-SQL identifier.
public static string EscapeIdentifier(string path)
GenerateExistsClause(IReadOnlyList<FieldInfo>, string, string)
Generates EXISTS with PVT subquery for WHERE condition (T-SQL syntax).
public CompiledPvtQuery GenerateExistsClause(IReadOnlyList<FieldInfo> fields, string whereCondition, string tableAlias = "o")
GeneratePvtCte(IReadOnlyList<FieldInfo>, string, string, string?)
Generates two-level CTE with MAX(CASE WHEN) optimization.
public PvtSqlGenerator.PvtCteResult GeneratePvtCte(IReadOnlyList<FieldInfo> fields, string whereCondition, string schemeIdParam, string? additionalObjectFilter = null)
GeneratePvtSelect(IReadOnlyList<FieldInfo>, string)
Generates PVT subquery for SELECT (data retrieval) - T-SQL syntax.
public string GeneratePvtSelect(IReadOnlyList<FieldInfo> fields, string tableAlias = "o")
GetNestedDictFields(IReadOnlyList<FieldInfo>)
Gets nested Dictionary fields that require special handling.
public IReadOnlyList<FieldInfo> GetNestedDictFields(IReadOnlyList<FieldInfo> fields)
GetSimpleFields(IReadOnlyList<FieldInfo>)
Gets simple fields (including simple Dictionary fields) for pvt.
public IReadOnlyList<FieldInfo> GetSimpleFields(IReadOnlyList<FieldInfo> fields)
UnescapeIdentifier(string)
Restores original field path from escaped identifier.
public static string UnescapeIdentifier(string escaped)
WrapForMax(string, string)
Wraps column for MAX() aggregation with table alias.
public static string WrapForMax(string tableAlias, string dbColumn)
WrapForMax(string)
Wraps column for MAX() aggregation. T-SQL doesn't support MAX on BIT type.
public static string WrapForMax(string dbColumn)