Skip to content

Commit 0994bd5

Browse files
alexbiehlclaude
andcommitted
Add FixedString Value encoder and run ormolu on src/test
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent ae51124 commit 0994bd5

3 files changed

Lines changed: 17 additions & 3 deletions

File tree

src/Database/ClickHouse/Stream.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ where
1414

1515
import Data.List.NonEmpty (NonEmpty, toList)
1616
import Data.Vector (Vector)
17-
import qualified Data.Vector as Vector
17+
import Data.Vector qualified as Vector
1818

1919
-- | A CPS (Scott-encoded) stream type. Each step either yields an element
2020
-- and a tail, or signals the end of the stream.

src/Database/ClickHouse/Value.hs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
{-# LANGUAGE DataKinds #-}
2+
13
module Database.ClickHouse.Value
24
( Value,
35
runValue,
@@ -22,6 +24,7 @@ module Database.ClickHouse.Value
2224
date,
2325
date32,
2426
nullable,
27+
fixedString,
2528
tuple,
2629
tuple3,
2730
tuple4,
@@ -46,7 +49,9 @@ import Data.Time.Clock.System qualified
4649
import Data.UUID qualified
4750
import Data.Void (absurd)
4851
import Data.Word (Word16, Word32, Word64, Word8)
52+
import Database.ClickHouse.Result (FixedString (..))
4953
import GHC.Exts qualified
54+
import GHC.TypeLits qualified
5055

5156
-- | An encoder that serializes a value of type @a@ for insertion into
5257
-- ClickHouse.
@@ -144,6 +149,15 @@ string = Value $ \text ->
144149
<> Data.Text.Encoding.encodeUtf8Builder text
145150
{-# INLINE string #-}
146151

152+
-- | Encode a 'FixedString'. Corresponds to ClickHouse @FixedString(n)@.
153+
--
154+
-- The inner 'Data.ByteString.ByteString' is written as-is (no length prefix),
155+
-- which matches the RowBinary wire format for @FixedString@.
156+
fixedString :: forall (n :: GHC.TypeLits.Nat). Value (FixedString n)
157+
fixedString = Value $ \(FixedString bs) ->
158+
Data.ByteString.Builder.byteString bs
159+
{-# INLINE fixedString #-}
160+
147161
-- | Encode a 'Data.UUID.UUID'. Corresponds to ClickHouse @UUID@.
148162
uuid :: Value Data.UUID.UUID
149163
uuid = Value $ \uuid ->

test/Main.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ import Data.Vector qualified
1919
import Data.Word (Word16, Word32, Word64, Word8)
2020
import Database.ClickHouse qualified
2121
import Database.ClickHouse.Params qualified
22-
import Database.ClickHouse.Result qualified
2322
import Database.ClickHouse.Result (FixedString (..))
23+
import Database.ClickHouse.Result qualified
2424
import Database.ClickHouse.Value qualified
2525
import Test.Tasty qualified
2626
import Test.Tasty.HUnit (testCase, (@=?))
@@ -1945,4 +1945,4 @@ data WideRow = WideRow
19451945
col_tuple2b :: (Bool, Int64),
19461946
col_array_tuple :: Data.Vector.Vector (Text, Int32)
19471947
}
1948-
deriving (Eq, Show)
1948+
deriving (Eq, Show)

0 commit comments

Comments
 (0)