Skip to content

Commit dc59c15

Browse files
committed
fix: statement cstring length, add test case for unicode strings
1 parent 7d7ef31 commit dc59c15

File tree

3 files changed

+20
-2
lines changed

3 files changed

+20
-2
lines changed

src/ffi.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,15 @@ const symbols = {
574574
parameters: [],
575575
result: "i32",
576576
},
577+
578+
sqlite3_update_hook: {
579+
parameters: [
580+
"pointer", // sqlite3 *db
581+
"pointer", // void *pArg
582+
"pointer", // void (*xUpdate)(sqlite3_context*,int,sqlite3_value**,sqlite3_value**)
583+
],
584+
result: "pointer",
585+
},
577586
} as const satisfies Deno.ForeignLibraryInterface;
578587

579588
let lib: Deno.DynamicLibrary<typeof symbols>["symbols"];

src/statement.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,11 +231,12 @@ export class Statement<TStatement extends object = Record<string, any>> {
231231

232232
constructor(public db: Database, sql: string) {
233233
const pHandle = new BigUint64Array(1);
234+
const cString = toCString(sql);
234235
unwrap(
235236
sqlite3_prepare_v2(
236237
db.unsafeHandle,
237-
toCString(sql),
238-
sql.length,
238+
cString,
239+
cString.byteLength,
239240
pHandle,
240241
null,
241242
),

test/test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,14 @@ Deno.test("sqlite", async (t) => {
611611
);
612612
});
613613

614+
await t.step("unicode support", () => {
615+
const [value] = db.prepare("select ?").value<[string]>("💩")!;
616+
assertEquals(value, "💩");
617+
618+
const [valueInStmt] = db.prepare("select '💩'").value<[string]>()!;
619+
assertEquals(valueInStmt, "💩");
620+
});
621+
614622
await t.step({
615623
name: "close",
616624
sanitizeResources: false,

0 commit comments

Comments
 (0)