diff --git a/CHANGELOG.md b/CHANGELOG.md index da5f90d1..f7680ce7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ ### Fixed +- Compiling `sqlite-vec.c` with MSVC and `-DSQLITE_VEC_STATIC` succeeds; in that build `sqlite-vec.h` declared `sqlite3_vec_init()` with `__attribute__((visibility("default")))` on every compiler, and MSVC, which has no `__attribute__`, stopped with `error C2143`. GCC and Clang builds are unchanged. - A KNN query that takes its query vector, `k`, or `mmr_lambda` from another table of a join now uses it. `select v.rowid from p join v on v.embedding match ? and v.k = p.k` failed with `A LIMIT or 'k = ?' constraint is required`; the same join with `v.k = 3 and v.mmr_lambda = p.lambda` returned no rows; and `select v.rowid from v join p on p.id = v.tag where v.embedding match p.vector and v.k = 2`, with `p.id` an integer primary key, could return no rows. These joins now run one KNN per row of the other table, so a filter on the `vec0` table whose value comes from that table applies before the k nearest rows are chosen. Ported in part from the unmerged [vlasky#14](https://github.com/vlasky/sqlite-vec/pull/14) ([asg017#331](https://github.com/asg017/sqlite-vec/pull/331)), which also applies filters whose value comes from a joined table before the k nearest rows are chosen; that part is not ported, and ARCHITECTURE.md's idxStr section says why. ## [2.1.1] - 2026-10-09 diff --git a/sqlite-vec.h.tmpl b/sqlite-vec.h.tmpl index 33d977e4..e150c0d1 100644 --- a/sqlite-vec.h.tmpl +++ b/sqlite-vec.h.tmpl @@ -8,8 +8,12 @@ #endif #ifdef SQLITE_VEC_STATIC +#if defined(__GNUC__) && !defined(_WIN32) #define SQLITE_VEC_API __attribute__((visibility("default"))) #else +#define SQLITE_VEC_API +#endif +#else #ifdef _WIN32 #define SQLITE_VEC_API __declspec(dllexport) #else