Class PostgreSqlDialect
- Namespace
- eQuantic.Core.Data.PostgreSql
- Assembly
- eQuantic.Core.Data.PostgreSql.dll
PostgreSQL's SQL flavour: snake_case naming, "quoted" identifiers, LIMIT/OFFSET, identity
keys read back with RETURNING, native array columns (membership as = ANY(col), atomic
append/remove), row-wise tuple comparisons, and scalar-keyed dictionaries as jsonb document
columns (ContainsKey as the ? operator, indexer reads as ->>).
public sealed class PostgreSqlDialect : SqlDialect
- Inheritance
-
PostgreSqlDialect
- Inherited Members
Constructors
PostgreSqlDialect()
Adds the PostgreSQL-specific function translations on top of the standard set.
public PostgreSqlDialect()
Properties
GeneratedKeyDdl
The DDL column suffix declaring a database-generated key (e.g. GENERATED BY DEFAULT AS IDENTITY).
public override string GeneratedKeyDdl { get; }
Property Value
System
The OpenTelemetry db.system value (e.g. postgresql, mysql, mssql).
public override string System { get; }
Property Value
Methods
AddColumnSql(string, string, string)
The DDL adding a column to an existing table (added nullable, matching create-table semantics).
public override string AddColumnSql(string quotedTable, string quotedColumn, string sqlType)
Parameters
quotedTablestringThe quoted table.
quotedColumnstringThe quoted column.
sqlTypestringThe column's SQL type.
Returns
AlterColumnType(string, string, string)
The DDL altering a column's type (a dialect may need a cast clause).
public override string AlterColumnType(string quotedTable, string quotedColumn, string sqlType)
Parameters
Returns
BindValue(object?)
Converts a value before binding (a dialect may need CLR-side coercion, e.g. arrays); identity by default.
public override object? BindValue(object? value)
Parameters
valueobject
Returns
CollectionContains(string, string, bool)
Renders a collection-membership test (member CONTAINS value / CONTAINS KEY) for stores
with native collection columns; the base dialect cannot express it (the clause degrades to residual).
public override string CollectionContains(string column, string parameter, bool key)
Parameters
columnstringThe quoted column.
parameterstringThe bound value's parameter marker.
keyboolWhether the test targets a map key.
Returns
CollectionMutation(string, string, bool, bool)
Renders a collection-mutating SET fragment (col = col + items), for stores with collection columns.
public override string CollectionMutation(string column, string parameter, bool remove, bool prepend)
Parameters
columnstringThe quoted column.
parameterstringThe bound items' parameter marker.
removeboolWhether the items are removed instead of added.
prependboolWhether added items go at the front.
Returns
ConfigureParameter(DbParameter, object?)
Configures a just-created parameter for a bound value — the hook a dialect uses to type values its
driver cannot infer (e.g. a dictionary into a jsonb parameter). The base dialect does nothing.
public override void ConfigureParameter(DbParameter parameter, object? value)
Parameters
parameterDbParameterThe parameter (its name and value are already set).
valueobjectThe bound value.
Remarks
Npgsql cannot infer jsonb for a dictionary value; the parameter is typed explicitly.
CreateIndexSql(string, string, string, bool, IndexMethod, string?)
The DDL creating an index with a structure and an optional filtered predicate (already rendered as a SQL fragment with inlined literals). The base dialect builds default-structure indexes, filtered or not; a method it has no structure for is rejected with guidance.
public override string CreateIndexSql(string quotedName, string quotedTable, string columns, bool unique, IndexMethod method, string? filter)
Parameters
quotedNamestringThe quoted index name.
quotedTablestringThe quoted table.
columnsstringThe rendered key column list.
uniqueboolWhether the index enforces uniqueness.
methodIndexMethodThe index structure.
filterstringThe rendered partial-index predicate, or
null.
Returns
DropColumnSql(string, string)
The DDL dropping a column from an existing table.
public override string DropColumnSql(string quotedTable, string quotedColumn)
Parameters
Returns
InsertSql(string, string, string, string?)
Builds an INSERT, reading the generated key back when returningKey is supplied
(RETURNING / OUTPUT INSERTED). The base dialect cannot read keys back — declare a
client-generated key, or use a dialect that can.
public override string InsertSql(string quotedTable, string columns, string values, string? returningKey)
Parameters
quotedTablestringThe quoted table.
columnsstringThe quoted column list.
valuesstringThe bound value list.
returningKeystringThe quoted generated-key column to read back, or
null.
Returns
IsDocumentColumn(Type)
Whether a member of this CLR type maps as a document column (e.g. a scalar-keyed dictionary
into PostgreSQL jsonb). The base dialect maps none — such members stay unmapped navigations.
public override bool IsDocumentColumn(Type type)
Parameters
typeTypeThe member's CLR type.
Returns
Remarks
A scalar-keyed dictionary maps as a jsonb document column.
Quote(string)
Quotes an identifier (table or column name).
public override string Quote(string identifier)
Parameters
identifierstring
Returns
SearchIndexSql(string, string, string)
The DDL materializing a model-declared search index (SearchIndex(...) / [SearchIndex])
on a text column, in execution order — empty when the dialect has no equivalent structure. The
declaration never changes semantics (LIKE pushes down regardless); it only changes the plan,
which is why a dialect without the structure ignores it instead of refusing.
public override IReadOnlyList<string> SearchIndexSql(string indexName, string quotedTable, string quotedColumn)
Parameters
indexNamestringThe unquoted index name (the dialect quotes it).
quotedTablestringThe quoted table.
quotedColumnstringThe quoted column.
Returns
Remarks
A GIN trigram index (pg_trgm): it serves LIKE/ILIKE with leading wildcards —
Contains/EndsWith stop scanning. The extension creation is idempotent and ships with
stock PostgreSQL; it does require the privilege to create extensions in the database.
SqlType(Type)
The DDL type for a CLR type (used by CREATE TABLE migrations).
public override string SqlType(Type type)
Parameters
typeType
Returns
TupleComparison(IReadOnlyList<string>, ComparisonOperator, IReadOnlyList<string>)
Renders a row-wise tuple comparison; the base dialect cannot express it.
public override string TupleComparison(IReadOnlyList<string> columns, ComparisonOperator op, IReadOnlyList<string> parameters)
Parameters
columnsIReadOnlyList<string>The quoted columns.
opComparisonOperatorThe comparison operator.
parametersIReadOnlyList<string>The bound values' parameter markers.