Member Junction
    Preparing search index...

    PostgreSQL dialect implementation. Uses "double-quote" identifiers, LIMIT/OFFSET pagination, native BOOLEAN, PL/pgSQL functions.

    Hierarchy (View Summary)

    Index

    Constructors

    Accessors

    • get AllowsOrderByInCTE(): boolean

      Whether the platform allows ORDER BY inside CTE definitions without TOP, OFFSET, or FOR XML. SQL Server: false (ORDER BY in CTEs is illegal without TOP/OFFSET/FOR XML) PostgreSQL: true (ORDER BY in CTEs is always legal)

      Returns boolean

    • get BinaryTypeNames(): readonly string[]

      SQL type names this dialect uses for binary blob columns (image, bytea, varbinary).

      Returns readonly string[]

    • get BooleanTypeNames(): readonly string[]

      SQL type names this dialect uses for boolean columns.

      Returns readonly string[]

    • get CurrencyTypeNames(): readonly string[]

      SQL type names this dialect uses for fixed-precision currency columns.

      Returns readonly string[]

    • get DateTypeNames(): readonly string[]

      SQL type names this dialect uses for date / time / timestamp columns.

      Returns readonly string[]

    • get DefaultPagingOrderBy(): string

      Default ORDER BY expression for paging when no user-specified ORDER BY exists. SQL Server: '(SELECT NULL)', PostgreSQL: '1'

      Returns string

    • get FixedWidthStringTypeNames(): readonly string[]

      Subset of StringTypeNames that represents fixed-width / space-padded character types. SQL Server char/nchar and PostgreSQL char/bpchar/character (without varying) all right-pad stored values with spaces up to the declared length and return that padding in result sets. Variable-width types (varchar, nvarchar, text, etc.) do not.

      Used by BaseEntity to rtrim padding on load so dirty-checks and downstream consumers see the logical value, not the storage form.

      Returns readonly string[]

    • get FloatTypeNames(): readonly string[]

      SQL type names this dialect uses for floating-point / decimal columns.

      Returns readonly string[]

    • get IntegerTypeNames(): readonly string[]

      SQL type names this dialect uses for integer columns (int, bigint, smallint, …).

      Returns readonly string[]

    • get IntervalTypeNames(): readonly string[]

      SQL type names this dialect uses for interval / duration columns.

      Returns readonly string[]

    • get JsonTypeNames(): readonly string[]

      SQL type names this dialect uses for JSON / XML structured columns.

      Returns readonly string[]

    • get MaxColumnCount(): number

      PostgreSQL has no in-row row-size limit (TOAST stores oversized variable-length values out-of-line), so MaxInRowSizeBytes stays null (inherited). It does enforce a hard 1600-column-per-table cap.

      Returns number

    • get MaxInRowSizeBytes(): number | null

      Maximum bytes that can be stored in-row for a single row, or null when the dialect has no in-row size limit. SQL Server enforces a hard ~8060-byte in-row limit; PostgreSQL has none (TOAST stores oversized variable-length values out-of-line). Consumed by schema materialization to avoid emitting a table whose minimum in-row footprint can never satisfy an INSERT. Default: null (no in-row size limit).

      Returns number | null

    • get MaxKeyStringLength(): number

      Maximum string length usable in an INDEX KEY column (PRIMARY KEY / UNIQUE constraint) on this dialect. A PK string column wider than this can't be indexed, so callers (e.g. the integration schema builder) cap PK string columns at this value. Default: no practical declare-time cap — a dialect overrides it where one exists. SQL Server's 900-byte index-key limit = 450 NVARCHAR chars; PostgreSQL enforces its (larger) btree limit on the stored value at write time, not the declared length, so it keeps the no-cap default.

      Returns number

    • get NetworkTypeNames(): readonly string[]

      SQL type names this dialect uses for network address columns (inet, cidr, …).

      Returns readonly string[]

    • get NullLiteral(): string

      Returns the dialect's literal representation of NULL as it would appear in generated SQL (e.g. as the result of a default-value formatter). Both SQL Server and PostgreSQL use the bare keyword NULL, but a future dialect could differ — codegen comparisons should route through this rather than hard-coding the string.

      Returns string

    • get ParserDialect(): string

      Returns the dialect name used by node-sql-parser for AST parsing. SQL Server: 'TransactSQL', PostgreSQL: 'PostgresQL', etc.

      Returns string

    • get StringTypeNames(): readonly string[]

      SQL type names this dialect uses for variable-length character / text columns.

      Returns readonly string[]

    • get UuidTypeNames(): readonly string[]

      SQL type names this dialect uses for UUID / uniqueidentifier columns.

      Returns readonly string[]

    Methods

    • Returns ALTER COLUMN clause(s) for type/nullability changes. SQL Server: ALTER TABLE t ALTER COLUMN [col] newType NULL/NOT NULL; PostgreSQL: ALTER TABLE t ALTER COLUMN "col" TYPE newType, ALTER COLUMN "col" SET/DROP NOT NULL;

      Parameters

      Returns string

    • Wraps a list of statements in ONE all-or-nothing transaction batch for this platform, ready to run as a single ExecuteSQL(script) call. Owns the platform-specific session/transaction setup so callers don't sniff PlatformKey themselves:

      • SQL Server: SET QUOTED_IDENTIFIER ON / SET ANSI_NULLS ON (required for UPDATE/DELETE against tables with filtered / computed-column indexes or indexed views — Msg 1934 otherwise)
        • SET XACT_ABORT ON (any failure rolls the whole batch back) + BEGIN/COMMIT TRANSACTION.
      • PostgreSQL: plain BEGIN … COMMIT — no session pragmas (QUOTED_IDENTIFIER/ANSI_NULLS are SQL-Server concepts) and PostgreSQL already aborts the whole transaction on any error.

      Returns an empty string for an empty statement list (nothing to run).

      Parameters

      • statements: string[]

        individual SQL statements (each WITHOUT a trailing ;)

      Returns string

    • Returns the SQL type token for a boolean parameter in a stored-procedure / function signature. Used by codegen when emitting tolerant-SP _Clear companion parameters and other boolean-typed params.

      SQL Server: bit (BIT type, 0/1) PostgreSQL: boolean (BOOLEAN type, TRUE/FALSE)

      Hardcoding bit everywhere worked on SQL Server but produced sprocs that PG rejected as operator does not exist: boolean = integer when the generated CASE compared a bit-declared parameter with = 1.

      Returns string

    • PostgreSQL folds unquoted identifiers to lowercase, so the physical schema an unquoted CREATE SCHEMA __mj_BizAppsCommon produces is __mj_bizappscommon. Canonicalize to that lowercase form so the engine's quoted operations target the same physical schema as the app's (typically unquoted) migration DDL.

      Parameters

      • name: string

      Returns string

    • Cap a column type if it cannot be used in a UNIQUE/index constraint. SQL Server: NVARCHAR(MAX) → NVARCHAR(450) (MAX columns cannot be indexed). PostgreSQL: no-op (TEXT can be indexed). Override in platform-specific dialects.

      Parameters

      • rawSqlType: string

      Returns string

    • Returns a CAST to a bounded-width string type. Used when the result needs to be comparable against an indexed column (SQL Server cannot compare/index NVARCHAR(MAX)) or against a fixed-width text column such as MJ's RecordID (NVARCHAR(450) on SQL Server).

      Implemented by composing ResolveAbstractType({ type: 'string', maxLength }), which dialects already supply — SQL Server emits NVARCHAR(N) and PostgreSQL emits VARCHAR(N). Defaults to MJ's standard 450-char width to match the cap on indexable string columns in SQL Server.

      Parameters

      • expr: string
      • maxLength: number = 450

      Returns string

    • Returns a CAST-to-text expression. SQL Server: CAST(expr AS NVARCHAR(MAX)), PostgreSQL: CAST(expr AS TEXT)

      Parameters

      • expr: string

      Returns string

    • Returns a CAST-to-UUID expression. SQL Server: CAST(expr AS UNIQUEIDENTIFIER), PostgreSQL: CAST(expr AS UUID)

      Parameters

      • expr: string

      Returns string

    • PostgreSQL's n-ary null-coalescing is also COALESCE. Same form as the two-arg IsNull since PG has no ISNULL to differentiate from.

      Parameters

      • expr: string
      • fallback: string

      Returns string

    • Returns description metadata SQL for a column. SQL Server: EXEC sp_addextendedproperty with

      Parameters

      • schema: string
      • table: string
      • column: string
      • comment: string

      Returns string

      = 'COLUMN' PostgreSQL: COMMENT ON COLUMN schema."table"."column" IS '...';

      This extends CommentOnObject to support the 3-part column reference that CommentOnObject doesn't handle.

    • CommentOnColumn that is safe to re-run. Default returns the standard statement (PostgreSQL COMMENT ON COLUMN already includes its terminator and is idempotent). SQL Server overrides to guard sp_addextendedproperty.

      Parameters

      • schema: string
      • table: string
      • column: string
      • comment: string

      Returns string

    • Returns a COMMENT ON statement (PostgreSQL) or sp_addextendedproperty (SQL Server).

      Parameters

      • objectType: string
      • schema: string
      • name: string
      • comment: string

      Returns string

    • CommentOnObject that is safe to re-run (no error if the description already exists). Default returns the standard statement terminated with ';' — adequate where the comment statement is inherently idempotent (PostgreSQL COMMENT ON replaces in place). SQL Server overrides to guard sp_addextendedproperty with a fn_listextendedproperty check.

      Parameters

      • objectType: string
      • schema: string
      • name: string
      • comment: string

      Returns string

    • Returns a conditional IF/ELSE block in platform-appropriate procedural SQL. SQL Server: IF (condition) BEGIN thenSQL END ELSE BEGIN elseSQL END PostgreSQL: DO $$ BEGIN IF condition THEN thenSQL; ELSE elseSQL; END IF; END $$;

      Parameters

      • condition: string

        SQL boolean condition

      • thenSQL: string

        SQL to execute when condition is true

      • OptionalelseSQL: string

        Optional SQL to execute when condition is false

      Returns string

    • Whether the platform supports CREATE OR REPLACE for a given object type. PostgreSQL supports it for FUNCTION, VIEW. SQL Server does not.

      Parameters

      • objectType: string

      Returns boolean

    • Returns CREATE SCHEMA IF NOT EXISTS SQL. SQL Server: IF NOT EXISTS (...) EXEC('CREATE SCHEMA [name]'); GO PostgreSQL: CREATE SCHEMA IF NOT EXISTS "name";

      Parameters

      • schemaName: string

      Returns string

    • A full CREATE TABLE that runs only if the table is absent, as a SINGLE statement. Default (PostgreSQL et al.): CREATE TABLE IF NOT EXISTS <fullTable> (...); SQL Server overrides with an IF OBJECT_ID(...) IS NULL guard (it has no native CREATE TABLE IF NOT EXISTS).

      Parameters

      • fullTable: string

        Already-quoted schema.table identifier

      • columnsBody: string

        The column/constraint lines that go between the parentheses

      Returns string

    • Returns a full CREATE TABLE wrapped in a "create if not exists" guard. SQL Server: IF NOT EXISTS (sys.tables check) BEGIN CREATE TABLE ... END; PostgreSQL: CREATE TABLE IF NOT EXISTS ...;

      Parameters

      • schema: string

        Schema name

      • tableName: string

        Table name

      • columnsDDL: string

        The column definitions (everything between the parentheses)

      Returns string

    • Returns a date/time arithmetic expression. SQL Server: DATEADD(MINUTE, 30, GETUTCDATE()) PostgreSQL: (NOW() AT TIME ZONE 'UTC') + INTERVAL '30 minutes'

      Parameters

      • unit: "MINUTE" | "HOUR" | "DAY"

        Time unit

      • amount: number

        Number of units to add (can be negative)

      • baseExpr: string

        Base timestamp expression (e.g., from CurrentTimestampUTC())

      Returns string

    • PostgreSQL strict typing requires an explicit ::UUID cast when comparing the empty-GUID sentinel against a UUID-typed column. Without it, PG raises "operator does not exist: uuid = text".

      Returns string

    • PostgreSQL-specific Flyway escape. PostgreSQL string concatenation uses || (not +), and TEXT has no length cap — so a simple split with || suffices and no cast-to-MAX dance is needed (unlike SQL Server, which silently truncates NVARCHAR(N) + NVARCHAR(M) past 4,000 chars). PostgreSQL string literals don't take an N prefix either; everything is already Unicode.

      Parameters

      • sql: string

      Returns string

    • Minimum in-row byte footprint of a column of the given raw SQL type. Off-row-capable variable-length / LOB types contribute only their in-row pointer; fixed-length types contribute their full size. Only meaningful for dialects that report a MaxInRowSizeBytes. Default: 24 (a conservative off-row-pointer floor).

      Parameters

      • _rawSqlType: string

      Returns number

    • Returns SQL to check if a database object exists.

      Parameters

      • objectType: string

        "TABLE", "VIEW", "FUNCTION", "PROCEDURE", "TRIGGER"

      • schema: string

        Schema name

      • name: string

        Object name

      Returns string

    • PostgreSQL FK-graph query for cascade planning — reads pg_catalog.pg_constraint (contype = 'f'). Returns one row per FK column (via unnest(conkey, confkey), which preserves column pairing/order), with childNullable (NOT attnotnull) and colCount (array_length(conkey, 1), for composite exclusion). Column aliases and semantics MATCH the SQL Server variant so a single caller parses both. relname/attname preserve the quoted mixed-case identifiers MJ creates on PG, so they feed straight into QuoteIdentifier. Both parent + child are filtered to schema; the schema is embedded as a literal.

      Parameters

      • schema: string

      Returns string

    • Returns DDL to create a full-text index. SQL Server: FULLTEXT CATALOG + FULLTEXT INDEX PostgreSQL: tsvector column + GIN index

      Parameters

      • table: string
      • columns: string[]
      • Optional_catalog: string

      Returns string

    • Returns a full-text search predicate expression. SQL Server: CONTAINS(column, searchTerm) PostgreSQL: column @@ plainto_tsquery('english', searchTerm)

      Parameters

      • column: string
      • searchTerm: string

      Returns string

    • Returns a GRANT statement for the platform.

      Parameters

      • permission: string
      • _objectType: string
      • schema: string
      • object: string
      • role: string

      Returns string

    • Returns an IIF/CASE equivalent expression. SQL Server: IIF(condition, trueVal, falseVal) PostgreSQL: CASE WHEN condition THEN trueVal ELSE falseVal END

      Parameters

      • condition: string
      • trueVal: string
      • falseVal: string

      Returns string

    • Returns true if the given error represents an infrastructure-level connection failure (timeout, refused, pool closed, etc.) as opposed to a query-level error (bad SQL, constraint violation).

      Each dialect implements this using its driver's structured error types:

      • SQL Server (mssql): error.name === 'ConnectionError'
      • PostgreSQL (pg): Node.js network error codes on plain Error

      Used by GenericDatabaseProvider to re-throw connection errors from RunView/RunQuery instead of swallowing them into { Success: false }.

      Parameters

      • e: unknown

      Returns boolean

    • PostgreSQL has no ISNULL keyword; the standard is COALESCE (which SQL Server also supports). PG generated SPs/functions emit COALESCE everywhere a null-coalescing wrap is needed.

      Parameters

      • expr: string
      • fallback: string

      Returns string

    • Returns true if value is the dialect's representation of a NULL literal in generated SQL. Comparison is case-insensitive after trimming whitespace. Subclasses may override if a dialect uses a non-keyword form (none currently do).

      Parameters

      • value: string

      Returns boolean

    • Returns a JSON value extraction expression. SQL Server: JSON_VALUE(column, path) PostgreSQL: column->>'path' or jsonb_extract_path_text

      Parameters

      • column: string
      • path: string

      Returns string

    • Wraps an expression in the dialect's lowercase function — used for case-insensitive comparison when authoring filters that must work on both SS (default case-insensitive collation) and PG (case-sensitive).

      Both SQL Server and PostgreSQL implement LOWER() per the ANSI SQL standard, so the default returns LOWER(${expr}). A subclass would override only for an exotic dialect (e.g. one that exposes lc() or needs a CAST first).

      Use this instead of hardcoding LOWER(...) in callers — keeps the dialect-aware SQL surface in one place per the SQLDialect contract.

      Parameters

      • expr: string

      Returns string

    • Convenience: maps a SQL Server type to this dialect's equivalent.

      Parameters

      • sqlServerType: string
      • Optionallength: number
      • Optionalprecision: number
      • Optionalscale: number

      Returns MappedType

    • Convenience: maps a SQL Server type to a full type string.

      Parameters

      • sqlServerType: string
      • Optionallength: number
      • Optionalprecision: number
      • Optionalscale: number

      Returns string

    • PostgreSQL function parameters use a p_<flat lowercase> convention (no @-prefix syntax in PG). This matches the baseline-ported SP names (which lowercased SQL Server's PascalCase parameter names without separators — e.g. @CompanyIDp_companyid) and the runtime PostgreSQLDataProvider, which calls procs with p_${field.Name.toLowerCase()}.

      Earlier this used a snake_case transform (p_company_id), which produced functions the runtime could never invoke. Underscores already in the input (e.g. the _Clear companion suffix) are preserved.

      Parameters

      • name: string

      Returns string

    • Returns the SQL syntax for calling a stored procedure or function. SQL Server: EXEC [schema].[name] @p0,

      Parameters

      • schema: string
      • name: string
      • params: string[]

      Returns string

      PostgreSQL: SELECT * FROM schema.name($1, $2)

    • PostgreSQL folds unquoted identifiers to lowercase, which would turn AS EntityName into the result column entityname. Quoting the alias preserves the requested casing for callers that key off the column name (e.g. when consuming results into a TypeScript object with a PascalCase property).

      Parameters

      • aliasName: string

      Returns string

    • Quotes a database identifier (table name, column name, etc.). SQL Server: [name], PostgreSQL: "name"

      Parameters

      • name: string

      Returns string

    • Produces a schema-qualified object reference. SQL Server: [schema].[object], PostgreSQL: schema."object"

      Parameters

      • schema: string
      • object: string

      Returns string

    • Quotes a value as a SQL string literal. Both SQL Server and PostgreSQL use single quotes with '' doubling to escape internal apostrophes — this is concrete in the base class so callers don't reinvent the value.replace(/'/g, "''") pattern. Subclasses may override if a future dialect needs a different escape rule.

      Parameters

      • value: string

      Returns string

    • Returns a non-fatal signal/notice statement detectable in CLI output. Used for signaling conditions (e.g., "lock held") without aborting the script. SQL Server: RAISERROR('message', 16, 1) — appears in sqlcmd stdout PostgreSQL: RAISE NOTICE 'message' — appears in psql stderr

      Note: For PostgreSQL, this must be used inside a ConditionalBlock (DO $$ context).

      Parameters

      • message: string

        Signal message to emit (used for detection in CLI output)

      Returns string

    • Resolves an abstract schema field type to a concrete SQL type string. Used by SchemaEngine for DDL generation from platform-agnostic definitions. SQL Server: 'string' -> 'NVARCHAR(255)', 'boolean' -> 'BIT' PostgreSQL: 'string' -> 'VARCHAR(255)', 'boolean' -> 'BOOLEAN'

      Parameters

      Returns string

    • Returns the clause used to get inserted values back. SQL Server: OUTPUT INSERTED.col1, INSERTED.col2 PostgreSQL: RETURNING col1, col2

      Parameters

      • Optionalcolumns: string[]

      Returns string

    • Splits an oversized SQL batch into individual statements on ;+EOL boundaries — but NEVER inside a PostgreSQL dollar-quoted block ($$ … $$ or $tag$ … $tag$), whose body legitimately contains ;+newline (DO blocks, PL/pgSQL function bodies, the integration view-drop guard $mj_dropviews$). A naive split(/;\s*\n/g) tears those apart. Outside dollar blocks the boundary semantics mirror the base split(/;\s*\n/g) (a ; then optional inline whitespace then a newline). Each returned statement ends with ;.

      Parameters

      • batch: string

      Returns string[]

    • Returns a STRING_SPLIT or equivalent expression. SQL Server: STRING_SPLIT(value, delimiter) PostgreSQL: string_to_array(value, delimiter) or regexp_split_to_table

      Parameters

      • value: string
      • delimiter: string

      Returns string