From 2ddf450b9ff342c300a95c79df7ced3f01aaecaa Mon Sep 17 00:00:00 2001 From: Benjamin Toby Date: Tue, 8 Sep 2026 07:24:00 +0100 Subject: [PATCH] Updates --- dist/lib/mariadb/db-generate-type-defs.js | 3 +++ dist/types/index.d.ts | 2 +- dist/utils/sql-insert-generator.js | 14 ++++++++++---- package.json | 2 +- src/lib/mariadb/db-generate-type-defs.ts | 4 ++++ src/types/index.ts | 1 + src/utils/sql-insert-generator.ts | 16 ++++++++++++---- 7 files changed, 32 insertions(+), 10 deletions(-) diff --git a/dist/lib/mariadb/db-generate-type-defs.js b/dist/lib/mariadb/db-generate-type-defs.js index decabea..f103944 100644 --- a/dist/lib/mariadb/db-generate-type-defs.js +++ b/dist/lib/mariadb/db-generate-type-defs.js @@ -28,6 +28,9 @@ export default function generateTypeDefinition({ paradigm, table, query, typeDef if (schemaType.dataType?.match(/boolean/i)) { return "0 | 1"; } + if (schemaType.dataType?.match(/vector/i) || schemaType.isVector) { + return `string | number[] | Buffer | Float32Array`; + } return "string"; } const typesArrayTypeScript = []; diff --git a/dist/types/index.d.ts b/dist/types/index.d.ts index 071deb1..a29f462 100644 --- a/dist/types/index.d.ts +++ b/dist/types/index.d.ts @@ -1302,7 +1302,7 @@ export interface SQLInsertGenReturn { /** * Values accepted by the SQL insert generator, including vector buffers. */ -export type SQLInsertGenValueType = string | number | Float32Array | Buffer | null; +export type SQLInsertGenValueType = string | number | Float32Array | Buffer | number[] | null; /** * Callback variant used when a generated insert value needs a custom * placeholder. diff --git a/dist/utils/sql-insert-generator.js b/dist/utils/sql-insert-generator.js index fbf09d2..bf3bbd5 100644 --- a/dist/utils/sql-insert-generator.js +++ b/dist/utils/sql-insert-generator.js @@ -23,14 +23,18 @@ export default function sqlInsertGenerator({ tableName, data, dbFullName, }) { queryBatches.push(`(${insertKeys .map((ky) => { const value = item[ky]; + const is_embedding = Array.isArray(value) && + typeof value[0] == "number"; const finalValue = typeof value == "string" || typeof value == "number" ? value : typeof value == "function" ? value().value - : value - ? value - : null; + : is_embedding + ? JSON.stringify(value) + : value + ? value + : null; if (!finalValue && typeof value !== "number") { queryValues.push(null); return "?"; @@ -38,7 +42,9 @@ export default function sqlInsertGenerator({ tableName, data, dbFullName, }) { queryValues.push(finalValue); const placeholder = typeof value == "function" ? value().placeholder - : "?"; + : is_embedding + ? "VEC_FromText(?)" + : "?"; return placeholder; }) .filter((k) => Boolean(k)) diff --git a/package.json b/package.json index 6b6ace8..eb0b577 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@moduletrace/bun-mariadb", - "version": "1.0.19", + "version": "1.0.20", "description": "Schema-driven MariaDB manager for Bun", "author": "Benjamin Toby", "license": "MIT", diff --git a/src/lib/mariadb/db-generate-type-defs.ts b/src/lib/mariadb/db-generate-type-defs.ts index e5a126a..7899702 100644 --- a/src/lib/mariadb/db-generate-type-defs.ts +++ b/src/lib/mariadb/db-generate-type-defs.ts @@ -63,6 +63,10 @@ export default function generateTypeDefinition({ return "0 | 1"; } + if (schemaType.dataType?.match(/vector/i) || schemaType.isVector) { + return `string | number[] | Buffer | Float32Array`; + } + return "string"; } diff --git a/src/types/index.ts b/src/types/index.ts index 458f15f..fff2ca8 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1479,6 +1479,7 @@ export type SQLInsertGenValueType = | number | Float32Array | Buffer + | number[] | null; /** diff --git a/src/utils/sql-insert-generator.ts b/src/utils/sql-insert-generator.ts index 592ea6f..6a67da1 100644 --- a/src/utils/sql-insert-generator.ts +++ b/src/utils/sql-insert-generator.ts @@ -40,15 +40,21 @@ export default function sqlInsertGenerator({ .map((ky) => { const value = item[ky]; + const is_embedding = + Array.isArray(value) && + typeof value[0] == "number"; + const finalValue = typeof value == "string" || typeof value == "number" ? value : typeof value == "function" ? value().value - : value - ? value - : null; + : is_embedding + ? JSON.stringify(value) + : value + ? value + : null; if (!finalValue && typeof value !== "number") { queryValues.push(null); @@ -60,7 +66,9 @@ export default function sqlInsertGenerator({ const placeholder = typeof value == "function" ? value().placeholder - : "?"; + : is_embedding + ? "VEC_FromText(?)" + : "?"; return placeholder; })