@@ -2,6 +2,7 @@ import { Reactivity } from "@effect/experimental"
22import { BunFileSystem } from "@effect/platform-bun"
33import { FileSystem } from "@effect/platform/FileSystem"
44import { SqliteClient } from "@effect/sql-sqlite-bun"
5+ import * as SqlClient from "@effect/sql/SqlClient"
56import { describe , expect , test } from "bun:test"
67import { Effect , pipe } from "effect"
78
@@ -28,4 +29,40 @@ describe("Client", () => {
2829 { id : 2 , name : "world" }
2930 ] )
3031 } ) . pipe ( Effect . scoped , Effect . runPromise ) )
32+
33+ test ( "SafeIntegers returns bigint for large integers" , ( ) =>
34+ Effect . gen ( function * ( ) {
35+ const sql = yield * makeClient
36+ const big = 9007199254740993n // 2^53 + 1
37+
38+ yield * sql `CREATE TABLE safe_int_test (id BIGINT)`
39+ yield * sql `INSERT INTO safe_int_test (id) VALUES (${ big } )`
40+
41+ const resultSafe = ( yield * sql `SELECT id FROM safe_int_test` . pipe (
42+ Effect . provideService ( SqlClient . SafeIntegers , true )
43+ ) ) [ 0 ] ?. id
44+ expect ( typeof resultSafe ) . toBe ( "bigint" )
45+ expect ( resultSafe ) . toBe ( big )
46+
47+ const resultDefault = ( yield * sql `SELECT id FROM safe_int_test` ) [ 0 ] ?. id
48+ expect ( typeof resultDefault ) . not . toBe ( "bigint" )
49+ } ) . pipe ( Effect . scoped , Effect . runPromise ) )
50+
51+ test ( "SafeIntegers works with values query" , ( ) =>
52+ Effect . gen ( function * ( ) {
53+ const sql = yield * makeClient
54+ const big = 9007199254740993n // 2^53 + 1
55+
56+ yield * sql `CREATE TABLE safe_int_values_test (id BIGINT)`
57+ yield * sql `INSERT INTO safe_int_values_test (id) VALUES (${ big } )`
58+
59+ const resultSafe = ( yield * sql `SELECT id FROM safe_int_values_test` . values . pipe (
60+ Effect . provideService ( SqlClient . SafeIntegers , true )
61+ ) ) [ 0 ] ?. [ 0 ]
62+ expect ( typeof resultSafe ) . toBe ( "bigint" )
63+ expect ( resultSafe ) . toBe ( big )
64+
65+ const resultDefault = ( yield * sql `SELECT id FROM safe_int_values_test` . values ) [ 0 ] ?. [ 0 ]
66+ expect ( typeof resultDefault ) . not . toBe ( "bigint" )
67+ } ) . pipe ( Effect . scoped , Effect . runPromise ) )
3168} )
0 commit comments