From c64d7dee9f22602aa2c11e6082af848f5b916473 Mon Sep 17 00:00:00 2001 From: Sebastian Lorenz Date: Mon, 3 Aug 2026 06:00:41 +0000 Subject: [PATCH 1/2] Add reproduction for clickhouse/ClickhouseClient issue --- .../sql/clickhouse/test/NumberBindingRepro.test.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 packages/sql/clickhouse/test/NumberBindingRepro.test.ts diff --git a/packages/sql/clickhouse/test/NumberBindingRepro.test.ts b/packages/sql/clickhouse/test/NumberBindingRepro.test.ts new file mode 100644 index 00000000000..727c8782f09 --- /dev/null +++ b/packages/sql/clickhouse/test/NumberBindingRepro.test.ts @@ -0,0 +1,11 @@ +import { ClickhouseClient } from "@effect/sql-clickhouse" +import { assert, it } from "@effect/vitest" +import { Effect } from "effect" +import * as Statement from "effect/unstable/sql/Statement" + +it("preserves fractional JavaScript numbers in inferred ClickHouse parameters", () => { + const sql = Statement.make(Effect.void as any, ClickhouseClient.makeCompiler(), [], undefined) + const [query] = sql`SELECT ${1.5}`.compile() + + assert.strictEqual(query, "SELECT {p1: Float64}") +}) From 41fd1e372f4e53b51ca780523fc45f44e3aebfa9 Mon Sep 17 00:00:00 2001 From: Tim Smart Date: Tue, 4 Aug 2026 09:21:22 +1200 Subject: [PATCH 2/2] Fix ClickHouse inferred number binding --- .changeset/eff-342-clickhouse-number-binding.md | 5 +++++ packages/sql/clickhouse/src/ClickhouseClient.ts | 2 +- packages/sql/clickhouse/test/Client.test.ts | 11 +++++++++-- .../sql/clickhouse/test/NumberBindingRepro.test.ts | 11 ----------- 4 files changed, 15 insertions(+), 14 deletions(-) create mode 100644 .changeset/eff-342-clickhouse-number-binding.md delete mode 100644 packages/sql/clickhouse/test/NumberBindingRepro.test.ts diff --git a/.changeset/eff-342-clickhouse-number-binding.md b/.changeset/eff-342-clickhouse-number-binding.md new file mode 100644 index 00000000000..847d5b566c2 --- /dev/null +++ b/.changeset/eff-342-clickhouse-number-binding.md @@ -0,0 +1,5 @@ +--- +"@effect/sql-clickhouse": patch +--- + +Preserve fractional JavaScript numbers in inferred ClickHouse parameters. diff --git a/packages/sql/clickhouse/src/ClickhouseClient.ts b/packages/sql/clickhouse/src/ClickhouseClient.ts index fb5883eb120..6044d333220 100644 --- a/packages/sql/clickhouse/src/ClickhouseClient.ts +++ b/packages/sql/clickhouse/src/ClickhouseClient.ts @@ -484,7 +484,7 @@ const typeFromUnknown = (value: unknown): string => { } switch (typeof value) { case "number": - return "Decimal" + return "Float64" case "bigint": return "Int64" case "boolean": diff --git a/packages/sql/clickhouse/test/Client.test.ts b/packages/sql/clickhouse/test/Client.test.ts index 097065a2379..5cb6deea5a1 100644 --- a/packages/sql/clickhouse/test/Client.test.ts +++ b/packages/sql/clickhouse/test/Client.test.ts @@ -1,6 +1,13 @@ -import { describe, it } from "@effect/vitest" +import { ClickhouseClient } from "@effect/sql-clickhouse" +import { assert, describe, it } from "@effect/vitest" +import { Effect } from "effect" +import * as Statement from "effect/unstable/sql/Statement" describe("ClickhouseClient", () => { - it("should work", () => { + it("preserves fractional JavaScript numbers in inferred parameters", () => { + const sql = Statement.make(Effect.void as any, ClickhouseClient.makeCompiler(), [], undefined) + const [query] = sql`SELECT ${1.5}`.compile() + + assert.strictEqual(query, "SELECT {p1: Float64}") }) }) diff --git a/packages/sql/clickhouse/test/NumberBindingRepro.test.ts b/packages/sql/clickhouse/test/NumberBindingRepro.test.ts deleted file mode 100644 index 727c8782f09..00000000000 --- a/packages/sql/clickhouse/test/NumberBindingRepro.test.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { ClickhouseClient } from "@effect/sql-clickhouse" -import { assert, it } from "@effect/vitest" -import { Effect } from "effect" -import * as Statement from "effect/unstable/sql/Statement" - -it("preserves fractional JavaScript numbers in inferred ClickHouse parameters", () => { - const sql = Statement.make(Effect.void as any, ClickhouseClient.makeCompiler(), [], undefined) - const [query] = sql`SELECT ${1.5}`.compile() - - assert.strictEqual(query, "SELECT {p1: Float64}") -})