mirror of
https://github.com/asg017/sqlite-vec.git
synced 2026-04-25 08:46:49 +02:00
start simple examples
This commit is contained in:
parent
2572aa1413
commit
e6067e2711
28 changed files with 1354 additions and 2 deletions
1
examples/simple-c/.gitignore
vendored
Normal file
1
examples/simple-c/.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
demo
|
||||
6
examples/simple-c/Makefile
Normal file
6
examples/simple-c/Makefile
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
demo: demo.c
|
||||
gcc \
|
||||
-DSQLITE_CORE \
|
||||
-I../../ -I../../vendor \
|
||||
demo.c ../../sqlite-vec.c ../../vendor/sqlite3.c \
|
||||
-o $@
|
||||
81
examples/simple-c/demo.c
Normal file
81
examples/simple-c/demo.c
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
#include "sqlite3.h"
|
||||
#include "sqlite-vec.h"
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <assert.h>
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
int rc = SQLITE_OK;
|
||||
sqlite3 *db;
|
||||
sqlite3_stmt *stmt;
|
||||
|
||||
rc = sqlite3_auto_extension((void (*)())sqlite3_vec_init);
|
||||
assert(rc == SQLITE_OK);
|
||||
|
||||
rc = sqlite3_open(":memory:", &db);
|
||||
assert(rc == SQLITE_OK);
|
||||
|
||||
rc = sqlite3_prepare_v2(db, "SELECT sqlite_version(), vec_version()", -1, &stmt, NULL);
|
||||
assert(rc == SQLITE_OK);
|
||||
|
||||
rc = sqlite3_step(stmt);
|
||||
printf("sqlite_version=%s, vec_version=%s\n", sqlite3_column_text(stmt, 0), sqlite3_column_text(stmt, 1));
|
||||
sqlite3_finalize(stmt);
|
||||
|
||||
rc = sqlite3_prepare_v2(db, "CREATE VIRTUAL TABLE vec_items USING vec0(embedding float[8])", -1, &stmt, NULL);
|
||||
assert(rc == SQLITE_OK);
|
||||
rc = sqlite3_step(stmt);
|
||||
assert(rc == SQLITE_DONE);
|
||||
sqlite3_finalize(stmt);
|
||||
|
||||
|
||||
static const struct {
|
||||
sqlite3_int64 id;
|
||||
float vector[8];
|
||||
} items[] = {
|
||||
{1, {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8}},
|
||||
{2, {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8}},
|
||||
};
|
||||
|
||||
rc = sqlite3_exec(db, "BEGIN", NULL, NULL, NULL);
|
||||
assert(rc == SQLITE_OK);
|
||||
rc = sqlite3_prepare_v2(db, "INSERT INTO vec_items(rowid, embedding) VALUES (?, ?)", -1, &stmt, NULL);
|
||||
assert(rc == SQLITE_OK);
|
||||
for (unsigned long i = 0; i < sizeof(items) / sizeof(items[0]); i++) {
|
||||
sqlite3_bind_int64(stmt, 1, items[i].id);
|
||||
sqlite3_bind_blob(stmt, 2, items[i].vector, sizeof(items[i].vector), SQLITE_STATIC);
|
||||
rc = sqlite3_step(stmt);
|
||||
assert(rc == SQLITE_DONE);
|
||||
sqlite3_reset(stmt);
|
||||
}
|
||||
sqlite3_finalize(stmt);
|
||||
rc = sqlite3_exec(db, "COMMIT", NULL, NULL, NULL);
|
||||
assert(rc == SQLITE_OK);
|
||||
|
||||
|
||||
rc = sqlite3_prepare_v2(db,
|
||||
"SELECT "
|
||||
" rowid, "
|
||||
" distance "
|
||||
"FROM vec_items "
|
||||
"WHERE embedding MATCH ?1 "
|
||||
"ORDER BY distance "
|
||||
"LIMIT 5 "
|
||||
, -1, &stmt, NULL);
|
||||
assert(rc == SQLITE_OK);
|
||||
|
||||
float query[8] = {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8};
|
||||
sqlite3_bind_blob(stmt, 1, query, sizeof(query), SQLITE_STATIC);
|
||||
|
||||
while(1) {
|
||||
rc = sqlite3_step(stmt);
|
||||
if(rc == SQLITE_DONE) break;
|
||||
assert(rc==SQLITE_ROW);
|
||||
sqlite3_int64 rowid = sqlite3_column_int64(stmt, 0);
|
||||
double distance = sqlite3_column_double(stmt, 1);
|
||||
printf("rowid=%lld distance=%f\n", rowid, distance);
|
||||
}
|
||||
sqlite3_finalize(stmt);
|
||||
sqlite3_close(db);
|
||||
return 0;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue