ihp-1.4.0: Haskell Web Framework
Copyright(c) digitally induced GmbH 2025
Safe HaskellNone
LanguageGHC2021

IHP.Hasql.Encoders

Description

This module provides orphan DefaultParamEncoder instances for types that hasql-implicits doesn't support out of the box, most importantly Int.

These instances are needed because hasql-implicits only provides instances for fixed-width integer types (Int16, Int32, Int64), not Haskell's platform-dependent Int. Since most IHP applications use Int for integer columns, we provide these instances to make the transition seamless.

Synopsis

Documentation

class ToSnippetParams a where Source #

Converts parameter tuples into a list of hasql Snippet values.

This mirrors postgresql-simple's ToRow typeclass, allowing sqlQuery and sqlExec to use hasql's native parameterized queries instead of formatQuery.

Methods

toSnippetParams :: a -> [Snippet] Source #

Instances

Instances details
ToSnippetParams () Source # 
Instance details

Defined in IHP.Hasql.Encoders

Methods

toSnippetParams :: () -> [Snippet] Source #

DefaultParamEncoder a => ToSnippetParams (Only a) Source # 
Instance details

Defined in IHP.Hasql.Encoders

(ToSnippetParams a, ToSnippetParams b) => ToSnippetParams (a :. b) Source #

Append two parameter lists (mirrors postgresql-simple's :. operator)

Instance details

Defined in IHP.Hasql.Encoders

Methods

toSnippetParams :: (a :. b) -> [Snippet] Source #

(DefaultParamEncoder a, DefaultParamEncoder b) => ToSnippetParams (a, b) Source # 
Instance details

Defined in IHP.Hasql.Encoders

Methods

toSnippetParams :: (a, b) -> [Snippet] Source #

(DefaultParamEncoder a, DefaultParamEncoder b, DefaultParamEncoder c) => ToSnippetParams (a, b, c) Source # 
Instance details

Defined in IHP.Hasql.Encoders

Methods

toSnippetParams :: (a, b, c) -> [Snippet] Source #

(DefaultParamEncoder a, DefaultParamEncoder b, DefaultParamEncoder c, DefaultParamEncoder d) => ToSnippetParams (a, b, c, d) Source # 
Instance details

Defined in IHP.Hasql.Encoders

Methods

toSnippetParams :: (a, b, c, d) -> [Snippet] Source #

(DefaultParamEncoder a, DefaultParamEncoder b, DefaultParamEncoder c, DefaultParamEncoder d, DefaultParamEncoder e) => ToSnippetParams (a, b, c, d, e) Source # 
Instance details

Defined in IHP.Hasql.Encoders

Methods

toSnippetParams :: (a, b, c, d, e) -> [Snippet] Source #

(DefaultParamEncoder a, DefaultParamEncoder b, DefaultParamEncoder c, DefaultParamEncoder d, DefaultParamEncoder e, DefaultParamEncoder f) => ToSnippetParams (a, b, c, d, e, f) Source # 
Instance details

Defined in IHP.Hasql.Encoders

Methods

toSnippetParams :: (a, b, c, d, e, f) -> [Snippet] Source #

(DefaultParamEncoder a, DefaultParamEncoder b, DefaultParamEncoder c, DefaultParamEncoder d, DefaultParamEncoder e, DefaultParamEncoder f, DefaultParamEncoder g) => ToSnippetParams (a, b, c, d, e, f, g) Source # 
Instance details

Defined in IHP.Hasql.Encoders

Methods

toSnippetParams :: (a, b, c, d, e, f, g) -> [Snippet] Source #

(DefaultParamEncoder a, DefaultParamEncoder b, DefaultParamEncoder c, DefaultParamEncoder d, DefaultParamEncoder e, DefaultParamEncoder f, DefaultParamEncoder g, DefaultParamEncoder h) => ToSnippetParams (a, b, c, d, e, f, g, h) Source # 
Instance details

Defined in IHP.Hasql.Encoders

Methods

toSnippetParams :: (a, b, c, d, e, f, g, h) -> [Snippet] Source #

(DefaultParamEncoder a, DefaultParamEncoder b, DefaultParamEncoder c, DefaultParamEncoder d, DefaultParamEncoder e, DefaultParamEncoder f, DefaultParamEncoder g, DefaultParamEncoder h, DefaultParamEncoder i) => ToSnippetParams (a, b, c, d, e, f, g, h, i) Source # 
Instance details

Defined in IHP.Hasql.Encoders

Methods

toSnippetParams :: (a, b, c, d, e, f, g, h, i) -> [Snippet] Source #

(DefaultParamEncoder a, DefaultParamEncoder b, DefaultParamEncoder c, DefaultParamEncoder d, DefaultParamEncoder e, DefaultParamEncoder f, DefaultParamEncoder g, DefaultParamEncoder h, DefaultParamEncoder i, DefaultParamEncoder j) => ToSnippetParams (a, b, c, d, e, f, g, h, i, j) Source # 
Instance details

Defined in IHP.Hasql.Encoders

Methods

toSnippetParams :: (a, b, c, d, e, f, g, h, i, j) -> [Snippet] Source #

sqlToSnippet :: ByteString -> [Snippet] -> Snippet Source #

Converts a SQL query with ? placeholders and a list of Snippet parameters into a single Snippet with native hasql $1, $2, ... parameterization.

This mirrors postgresql-simple's ? placeholder convention.

Example:

sqlToSnippet "SELECT * FROM users WHERE id = ? AND name = ?" [Snippet.param id, Snippet.param name]
-- becomes: Snippet.sql "SELECT * FROM users WHERE id = " <> Snippet.param id <> Snippet.sql " AND name = " <> Snippet.param name

Orphan instances

DefaultParamEncoder Inet Source #

Encode Inet as PostgreSQL inet via postgresql-types binary encoder

Instance details

DefaultParamEncoder Interval Source #

Encode Interval as PostgreSQL interval via postgresql-types binary encoder

Instance details

DefaultParamEncoder Point Source #

Encode Point as PostgreSQL point via postgresql-types binary encoder

Instance details

DefaultParamEncoder Polygon Source #

Encode Polygon as PostgreSQL polygon via postgresql-types binary encoder

Instance details

DefaultParamEncoder Tsvector Source #

Encode Tsvector as PostgreSQL tsvector via postgresql-types binary encoder

Instance details

DefaultParamEncoder Integer Source #

Encode Integer as PostgreSQL int8 (bigint) Used for BigInt and BigSerial columns

Instance details

DefaultParamEncoder Int Source #

Encode Int as PostgreSQL int8 (bigint)

This treats Haskell's Int as Int64, which is safe on 64-bit platforms (where Int is 64 bits) and may truncate on 32-bit platforms (where Int is 32 bits but int8 can hold the full range).

Instance details

PrimaryKey table ~ UUID => DefaultParamEncoder (Id' table) Source #

Encode Id table' for tables with UUID primary keys This covers the common case in IHP where most tables use UUID as the primary key.

Instance details

DefaultParamEncoder (Binary ByteString) Source #

Encode 'Binary ByteString' as PostgreSQL bytea IHP wraps bytea columns in Binary, so we need to unwrap before encoding

Instance details

DefaultParamEncoder (Vector Int) Source #

Encode 'Vector Int' as PostgreSQL int8[] (bigint array)

Instance details

PrimaryKey table ~ UUID => DefaultParamEncoder (Maybe (Id' table)) Source #

Encode 'Maybe (Id' table)' for nullable foreign keys

Instance details

DefaultParamEncoder (Maybe (Binary ByteString)) Source #

Encode 'Maybe (Binary ByteString)' as nullable PostgreSQL bytea

Instance details

DefaultParamEncoder (Maybe Inet) Source #

Encode 'Maybe Inet' as nullable PostgreSQL inet

Instance details

DefaultParamEncoder (Maybe Interval) Source #

Encode 'Maybe Interval' as nullable PostgreSQL interval

Instance details

DefaultParamEncoder (Maybe Point) Source #

Encode 'Maybe Point' as nullable PostgreSQL point

Instance details

DefaultParamEncoder (Maybe Polygon) Source #

Encode 'Maybe Polygon' as nullable PostgreSQL polygon

Instance details

DefaultParamEncoder (Maybe Tsvector) Source #

Encode 'Maybe Tsvector' as nullable PostgreSQL tsvector

Instance details

DefaultParamEncoder (Maybe Integer) Source #

Encode 'Maybe Integer' as nullable PostgreSQL int8

Instance details

DefaultParamEncoder (Maybe Int) Source #

Encode 'Maybe Int' as nullable PostgreSQL int8

Instance details

PrimaryKey table ~ UUID => DefaultParamEncoder [Id' table] Source #

Encode list of Id table' for tables with UUID primary keys Used by filterWhereIdIn for simple primary keys

Instance details

PrimaryKey table ~ UUID => DefaultParamEncoder [Maybe (Id' table)] Source #

Encode '[Maybe (Id' table)]' for filterWhereIn with nullable foreign keys

Instance details

DefaultParamEncoder [Maybe Int] Source #

Encode '[Maybe Int]' as PostgreSQL int8[] with nullable elements

Instance details

(PrimaryKey a ~ UUID, PrimaryKey b ~ UUID) => DefaultParamEncoder [(Id' a, Id' b)] Source #

Encode '[(Id' a, Id' b)]' as PostgreSQL array of composite types Used by filterWhereIdIn for tables with composite primary keys of two Id columns

Instance details

DefaultParamEncoder [(UUID, UUID)] Source #

Encode '[(UUID, UUID)]' as PostgreSQL array of composite types Used by filterWhereIdIn for tables with composite primary keys of two UUIDs

Instance details

DefaultParamEncoder [Int] Source #

Encode '[Int]' as PostgreSQL int8[] (bigint array)

Instance details

(PrimaryKey a ~ UUID, PrimaryKey b ~ UUID) => DefaultParamEncoder (Id' a, Id' b) Source #

Encode '(Id' a, Id' b)' as PostgreSQL composite/record type Used for composite primary keys with two Id columns (where both resolve to UUID)

Instance details

DefaultParamEncoder (UUID, UUID) Source #

Encode '(UUID, UUID)' as PostgreSQL composite/record type Used for composite primary keys with two UUID columns

Instance details