Changelog of @hackage/ClickHaskell 0.2.0

0.2.0 -- 23-03-2023

ClickHaskell documentation got it's own domain name: https://clickhaskell.dev/

Fixes:

  • Improved multithreading connection usage (+ added test)
  • Unexpected behavior on expected and result column type mismatches (+ added test)

Features:

  • Additional GHC versions tests: 9.4.8, 9.8.4, 9.10.1
  • Query serialization support for UUID (+ added test)
  • Export of client errors for exception handling
  • Dropped vector dependency
  • Introduced memory consumption test (64M limit) on parallel reading and writing of 1 million rows
  • Added new reading wrapper for generateRandom function
  • Depricating Ch* prefixes on types:
    • ChUInt* -> UInt* (type synonyms to Word*)
    • ChInt* -> Int* (reexport of Data.Int)
    • ChDate -> Date (ClickHaskell type)
    • ChDateTime -> DateTime (ClickHaskell type)
    • ChArray -> Array (ClickHaskell type)
    • ChUUID -> UUID (ClickHaskell type)
  • openNativeConnection now passes $HOME and $USERNAME variables to query info

Breaking changes:

  • New UserErrors on types and columns names missmatches

    This change helps protect a user from unexpected behavior UnmatchedType error occurs when the expected type doesn't match the resulting one UnmatchedColumn error occurs when the expected column name doesn't match the resulting one

    data ExpectedName = MkExpectedName
      { expectedName :: ChInt64
      }
      deriving (Generic)
      deriving anyclass (ReadableFrom (Columns ExpectedColumns))
    
    type ExpectedColumns = '[ Column "expectedName" ChInt64]
    
    -- Will throw UnmatchedColumn
    void $
      select
          @ExpectedColumns @ExpectedName connection
          (toChType "SELECT * FROM generateRandom('unexpectedName Int64', 1, 10, 2) LIMIT 1")
          pure
    
    -- Will throw UnmatchedType
    void $
      select
        @ExpectedColumns @ExpectedName connection
        "SELECT * FROM generateRandom('expectedName String', 1, 10, 2) LIMIT 1"
        pure
    
  • Migration to streaming API

    The result of selects now exposes the block by block handling result. So you need to pass the handler and to process the list of results

    result <-
      sum <$>
        select
          @ExampleColumns
          @ExampleData
          connection "\
          \SELECT * \
          \FROM generateRandom('a1 Int64', 1, 10, 2) \
          \LIMIT 1_000_00 \
          \ "
    

    now looks like

    result <-
      sum <$>
        select
          @ExampleColumns
          @ExampleData
          connection "\
          \SELECT * \
          \FROM generateRandom('a1 Int64', 1, 10, 2) \
          \LIMIT 1_000_00 \
          \ "
          (pure . sum)
    
  • DateTime type now parametrized with timezone

    Every DateTime type annotations

    type A = ChDateTime -- DateTime
    type B = ChDateTime -- DateTime('UTC')
    

    should be changed with

    type A = ChDateTime ""    -- DateTime
    type B = ChDateTime "UTC" -- DateTime('UTC')
    
  • Migration to single module distribution

    You need to move all imports such as

    import ClickHaskell.DbTypes (ChInt8)
    

    to ClickHaskell module

    import ClickHaskell (ChInt8)
    

0.1.0 -- 04-12-2024

Initial release