- Notifications
You must be signed in to change notification settings - Fork 41
Closed
Description
I believe this is related to PR #164.
Given this...
import { DATABASE_URL } from '$env/static/private'; import { connect } from '@planetscale/database'; export const load = async () => { const conn = connect({ url: DATABASE_URL }); const result = await conn.execute('SHOW TABLES;'); console.dir(result, { depth: null }); return { result: 'broken' }; };... I get this....
{ headers: [ 'Tables_in_mydbname' ], types: { Tables_in_mydbname: 'VARBINARY' }, fields: [ { name: 'Tables_in_mydbname', type: 'VARBINARY', table: 'TABLES', orgTable: 'tables', orgName: 'Tables_in_mydbname', columnLength: 256, charset: 255, flags: 4225 } ], rows: [ { Tables_in_mydbname: Uint8Array(7) [ 65, 114, 116, 105, 99, 108, 101 ] }, // etc. ] }Doing this...
import { DATABASE_URL } from '$env/static/private'; import { connect, cast } from '@planetscale/database'; export const load = async () => { const conn = connect({ url: DATABASE_URL, cast: (field, value) => { if (field.type === 'VARBINARY' && (value as unknown) instanceof Uint8Array) { return new TextDecoder().decode(value as unknown as Uint8Array); } return cast(field, value); }}); const result = await conn.execute('SHOW TABLES;'); console.dir(result, { depth: null }); return { result: 'not broken' }; };...works, but (a) it's mighty inconvenient typescript (as unknown etc,) (b) it seems like it'd likely produce similar unwanted behavior in other off-the-cuff queries, and (c) it at least requires the shape of cast to be changed to string|null|Uint8Array.
Not sure if this is possible, but it'd be simpler to go back to string|null, and leave it up to userland or ORMs (Prisma filed the original issue) to deal with. I'm aware that it might be more complicated than this, but one can turn a string into a UintArray ...
const arr = new TextEncoder().encode('Hello, I am a string from planetscale');Thanks!
Metadata
Metadata
Assignees
Labels
No labels