# 1.0.0 -- ? ## Features: - Support and CI for GHCs: `8.10.7`, `9.0.2`, `9.2.8`, `9.12.2` - ~20% optimization of time and alloc (perf test 1 benchmark) - Added function `command` for statements with no result - Added DateTime64 type support ## Fixes: - Fixed unexpected behavior when the number of result columns was different from expected. A `UserError` exception `UnmatchedColumnsCount` is now raised in such cases ## Breaking changes: - ### Generic API changes `ReadableFrom` and `WritableInto` was replaced with `ClickHaskell`\ Now you should declare single instance for every API parts ```haskell data MyData = ... deriving (Generic) deriving anyclass (ClickHaskell ExampleColumns) ``` ```haskell data MyData = ... deriving (Generic) deriving anyclass ( ReadableFrom (Columns ExampleColumns) , WritableInto (Table "profiler" ExampleColumns) ) ``` - ### `Columns` type was deleted - ### `Serializable` type class was unexported - ### `DeserializableColumn` type class was renamed to `SerializableColumn` - ### `IsChType` instance changes `ToChType` type family was deleted - ### `FromChType` typeclass merged into `ToChType` - ### `parameter` function now doesn't apply toChType - ### Connection initialization API changes 1. `ChCredential` renamed to `ConnectionArgs` 2. `defaultCredentials` renamed to `defaultConnectionArgs` 3. `openNativeConnection` renamed to `openConnection` 4. `ConnectionArgs` constructor now are not exported You need to use new modifiers:\ `setHost`, `setPort`, `setUser`, `setDatabase`, `setPassword` Connection initialization example: ```haskell initMyConnection :: IO Connection initMyConnection = do connection <- openConnection . setUser "default" . setPassword "" . setDatabase "default" . setPort "9000" . setHost "localhost" $ defaultConnectionArgs pure connection ``` # 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 ```haskell 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 ```haskell result <- sum <$> select @ExampleColumns @ExampleData connection "\ \SELECT * \ \FROM generateRandom('a1 Int64', 1, 10, 2) \ \LIMIT 1_000_00 \ \ " ``` now looks like ```haskell 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 ```haskell type A = ChDateTime -- DateTime type B = ChDateTime -- DateTime('UTC') ``` should be changed with ```haskell type A = ChDateTime "" -- DateTime type B = ChDateTime "UTC" -- DateTime('UTC') ``` - ### Migration to single module distribution You need to move all imports such as ```haskell import ClickHaskell.DbTypes (ChInt8) ``` to ClickHaskell module ```haskell import ClickHaskell (ChInt8) ``` # 0.1.0 -- 04-12-2024 Initial release