lokicms-plugin-sql 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/federation/cache-layer.d.ts +58 -0
- package/dist/federation/cache-layer.d.ts.map +1 -0
- package/dist/federation/cache-layer.js +210 -0
- package/dist/federation/cache-layer.js.map +1 -0
- package/dist/federation/index.d.ts +12 -0
- package/dist/federation/index.d.ts.map +1 -0
- package/dist/federation/index.js +9 -0
- package/dist/federation/index.js.map +1 -0
- package/dist/federation/source-manager.d.ts +57 -0
- package/dist/federation/source-manager.d.ts.map +1 -0
- package/dist/federation/source-manager.js +238 -0
- package/dist/federation/source-manager.js.map +1 -0
- package/dist/federation/sync-engine.d.ts +68 -0
- package/dist/federation/sync-engine.d.ts.map +1 -0
- package/dist/federation/sync-engine.js +288 -0
- package/dist/federation/sync-engine.js.map +1 -0
- package/dist/index.d.ts +80 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin.d.ts +28 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +798 -0
- package/dist/plugin.js.map +1 -0
- package/dist/providers/base.d.ts +142 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +161 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/index.d.ts +22 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +74 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/mariadb.d.ts +83 -0
- package/dist/providers/mariadb.d.ts.map +1 -0
- package/dist/providers/mariadb.js +293 -0
- package/dist/providers/mariadb.js.map +1 -0
- package/dist/providers/mysql.d.ts +78 -0
- package/dist/providers/mysql.d.ts.map +1 -0
- package/dist/providers/mysql.js +284 -0
- package/dist/providers/mysql.js.map +1 -0
- package/dist/providers/postgresql.d.ts +77 -0
- package/dist/providers/postgresql.d.ts.map +1 -0
- package/dist/providers/postgresql.js +296 -0
- package/dist/providers/postgresql.js.map +1 -0
- package/dist/providers/sqlite.d.ts +80 -0
- package/dist/providers/sqlite.d.ts.map +1 -0
- package/dist/providers/sqlite.js +283 -0
- package/dist/providers/sqlite.js.map +1 -0
- package/dist/query/builder.d.ts +74 -0
- package/dist/query/builder.d.ts.map +1 -0
- package/dist/query/builder.js +279 -0
- package/dist/query/builder.js.map +1 -0
- package/dist/query/index.d.ts +10 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +8 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/transformer.d.ts +74 -0
- package/dist/query/transformer.d.ts.map +1 -0
- package/dist/query/transformer.js +236 -0
- package/dist/query/transformer.js.map +1 -0
- package/dist/types.d.ts +350 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +38 -0
- package/dist/types.js.map +1 -0
- package/dist/vectors/adapter.d.ts +128 -0
- package/dist/vectors/adapter.d.ts.map +1 -0
- package/dist/vectors/adapter.js +79 -0
- package/dist/vectors/adapter.js.map +1 -0
- package/dist/vectors/index.d.ts +41 -0
- package/dist/vectors/index.d.ts.map +1 -0
- package/dist/vectors/index.js +87 -0
- package/dist/vectors/index.js.map +1 -0
- package/dist/vectors/lokijs-vector.d.ts +112 -0
- package/dist/vectors/lokijs-vector.d.ts.map +1 -0
- package/dist/vectors/lokijs-vector.js +217 -0
- package/dist/vectors/lokijs-vector.js.map +1 -0
- package/dist/vectors/mariadb-vector.d.ts +56 -0
- package/dist/vectors/mariadb-vector.d.ts.map +1 -0
- package/dist/vectors/mariadb-vector.js +263 -0
- package/dist/vectors/mariadb-vector.js.map +1 -0
- package/dist/vectors/mysql-vector.d.ts +56 -0
- package/dist/vectors/mysql-vector.d.ts.map +1 -0
- package/dist/vectors/mysql-vector.js +235 -0
- package/dist/vectors/mysql-vector.js.map +1 -0
- package/dist/vectors/pgvector.d.ts +52 -0
- package/dist/vectors/pgvector.d.ts.map +1 -0
- package/dist/vectors/pgvector.js +190 -0
- package/dist/vectors/pgvector.js.map +1 -0
- package/dist/vectors/sqlite-vec.d.ts +80 -0
- package/dist/vectors/sqlite-vec.d.ts.map +1 -0
- package/dist/vectors/sqlite-vec.js +362 -0
- package/dist/vectors/sqlite-vec.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LokiJS Vector Adapter
|
|
3
|
+
*
|
|
4
|
+
* In-memory vector storage using LokiJS for caching and local-first use.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* LokiJS vector adapter (in-memory)
|
|
8
|
+
*/
|
|
9
|
+
export class LokiVectorAdapter {
|
|
10
|
+
type = 'lokijs';
|
|
11
|
+
db;
|
|
12
|
+
logger;
|
|
13
|
+
collectionName;
|
|
14
|
+
collection = null;
|
|
15
|
+
constructor(options) {
|
|
16
|
+
this.db = options.db;
|
|
17
|
+
this.logger = options.logger;
|
|
18
|
+
this.collectionName = options.collectionName ?? 'lokicms_vectors';
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Always supported (in-memory)
|
|
22
|
+
*/
|
|
23
|
+
isSupported() {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Initialize vector storage
|
|
28
|
+
*/
|
|
29
|
+
async initialize(dimensions) {
|
|
30
|
+
// Get or create collection
|
|
31
|
+
this.collection = this.db.getCollection(this.collectionName);
|
|
32
|
+
if (!this.collection) {
|
|
33
|
+
this.collection = this.db.addCollection(this.collectionName, {
|
|
34
|
+
indices: ['entryId', 'collection'],
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
this.logger.info(`LokiJS vector adapter initialized with ${dimensions} dimensions (in-memory)`);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Store a vector
|
|
41
|
+
*/
|
|
42
|
+
async store(entry) {
|
|
43
|
+
if (!this.collection) {
|
|
44
|
+
throw new Error('LokiJS vector adapter not initialized');
|
|
45
|
+
}
|
|
46
|
+
const now = Date.now();
|
|
47
|
+
// Check if exists
|
|
48
|
+
const existing = this.collection.findOne({ id: entry.id });
|
|
49
|
+
if (existing) {
|
|
50
|
+
// Update
|
|
51
|
+
existing.vector = entry.vector;
|
|
52
|
+
existing.textHash = entry.textHash;
|
|
53
|
+
existing.updatedAt = now;
|
|
54
|
+
this.collection.update(existing);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
// Insert
|
|
58
|
+
this.collection.insert({
|
|
59
|
+
id: entry.id,
|
|
60
|
+
entryId: entry.entryId,
|
|
61
|
+
collection: entry.collection,
|
|
62
|
+
vector: entry.vector,
|
|
63
|
+
textHash: entry.textHash,
|
|
64
|
+
createdAt: now,
|
|
65
|
+
updatedAt: now,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Delete vector by ID
|
|
71
|
+
*/
|
|
72
|
+
async delete(id) {
|
|
73
|
+
if (!this.collection)
|
|
74
|
+
return false;
|
|
75
|
+
const doc = this.collection.findOne({ id });
|
|
76
|
+
if (doc) {
|
|
77
|
+
this.collection.remove(doc);
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Delete by entry ID
|
|
84
|
+
*/
|
|
85
|
+
async deleteByEntryId(entryId) {
|
|
86
|
+
if (!this.collection)
|
|
87
|
+
return 0;
|
|
88
|
+
const docs = this.collection.find({ entryId });
|
|
89
|
+
for (const doc of docs) {
|
|
90
|
+
this.collection.remove(doc);
|
|
91
|
+
}
|
|
92
|
+
return docs.length;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Delete by collection
|
|
96
|
+
*/
|
|
97
|
+
async deleteByCollection(collection) {
|
|
98
|
+
if (!this.collection)
|
|
99
|
+
return 0;
|
|
100
|
+
const docs = this.collection.find({ collection });
|
|
101
|
+
for (const doc of docs) {
|
|
102
|
+
this.collection.remove(doc);
|
|
103
|
+
}
|
|
104
|
+
return docs.length;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Search for similar vectors using linear scan
|
|
108
|
+
*/
|
|
109
|
+
async search(vector, options = {}) {
|
|
110
|
+
if (!this.collection)
|
|
111
|
+
return [];
|
|
112
|
+
const { limit = 10, collection, minSimilarity = 0 } = options;
|
|
113
|
+
// Get all documents (optionally filtered by collection)
|
|
114
|
+
const docs = collection
|
|
115
|
+
? this.collection.find({ collection })
|
|
116
|
+
: this.collection.find();
|
|
117
|
+
// Calculate cosine similarity for each
|
|
118
|
+
const results = docs
|
|
119
|
+
.map((doc) => ({
|
|
120
|
+
id: doc.id,
|
|
121
|
+
entryId: doc.entryId,
|
|
122
|
+
collection: doc.collection,
|
|
123
|
+
similarity: this.cosineSimilarity(vector, doc.vector),
|
|
124
|
+
}))
|
|
125
|
+
.filter((r) => r.similarity >= minSimilarity)
|
|
126
|
+
.sort((a, b) => b.similarity - a.similarity)
|
|
127
|
+
.slice(0, limit);
|
|
128
|
+
return results;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Get vector by ID
|
|
132
|
+
*/
|
|
133
|
+
async get(id) {
|
|
134
|
+
if (!this.collection)
|
|
135
|
+
return null;
|
|
136
|
+
const doc = this.collection.findOne({ id });
|
|
137
|
+
return doc ? this.docToEntry(doc) : null;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get vectors by entry ID
|
|
141
|
+
*/
|
|
142
|
+
async getByEntryId(entryId) {
|
|
143
|
+
if (!this.collection)
|
|
144
|
+
return [];
|
|
145
|
+
const docs = this.collection.find({ entryId });
|
|
146
|
+
return docs.map((doc) => this.docToEntry(doc));
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Count vectors
|
|
150
|
+
*/
|
|
151
|
+
async count(collection) {
|
|
152
|
+
if (!this.collection)
|
|
153
|
+
return 0;
|
|
154
|
+
return collection
|
|
155
|
+
? this.collection.count({ collection })
|
|
156
|
+
: this.collection.count();
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Create index (no-op for LokiJS, uses built-in indices)
|
|
160
|
+
*/
|
|
161
|
+
async createIndex(_indexType) {
|
|
162
|
+
this.logger.info('LokiJS uses linear scan for vector search');
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Check if index exists (always true for LokiJS)
|
|
167
|
+
*/
|
|
168
|
+
async hasIndex() {
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Clear all vectors
|
|
173
|
+
*/
|
|
174
|
+
async clear() {
|
|
175
|
+
if (this.collection) {
|
|
176
|
+
this.collection.clear();
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Convert document to VectorEntry
|
|
181
|
+
*/
|
|
182
|
+
docToEntry(doc) {
|
|
183
|
+
return {
|
|
184
|
+
id: doc.id,
|
|
185
|
+
entryId: doc.entryId,
|
|
186
|
+
collection: doc.collection,
|
|
187
|
+
vector: doc.vector,
|
|
188
|
+
textHash: doc.textHash,
|
|
189
|
+
createdAt: doc.createdAt,
|
|
190
|
+
updatedAt: doc.updatedAt,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Compute cosine similarity between two vectors
|
|
195
|
+
*/
|
|
196
|
+
cosineSimilarity(a, b) {
|
|
197
|
+
if (a.length !== b.length)
|
|
198
|
+
return 0;
|
|
199
|
+
let dotProduct = 0;
|
|
200
|
+
let normA = 0;
|
|
201
|
+
let normB = 0;
|
|
202
|
+
for (let i = 0; i < a.length; i++) {
|
|
203
|
+
dotProduct += a[i] * b[i];
|
|
204
|
+
normA += a[i] * a[i];
|
|
205
|
+
normB += b[i] * b[i];
|
|
206
|
+
}
|
|
207
|
+
const magnitude = Math.sqrt(normA) * Math.sqrt(normB);
|
|
208
|
+
return magnitude === 0 ? 0 : dotProduct / magnitude;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Create LokiJS vector adapter
|
|
213
|
+
*/
|
|
214
|
+
export function createLokiVectorAdapter(options) {
|
|
215
|
+
return new LokiVectorAdapter(options);
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=lokijs-vector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lokijs-vector.js","sourceRoot":"","sources":["../../src/vectors/lokijs-vector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MariaDB Vector Adapter
|
|
3
|
+
*
|
|
4
|
+
* MariaDB 11.6+ native VECTOR type adapter with HNSW indexing.
|
|
5
|
+
*/
|
|
6
|
+
import type { VectorEntry, VectorSearchOptions, VectorSearchResult } from '../types.js';
|
|
7
|
+
import { BaseVectorAdapter, VectorAdapterOptions } from './adapter.js';
|
|
8
|
+
/**
|
|
9
|
+
* MariaDB vector adapter (MariaDB 11.6+)
|
|
10
|
+
*/
|
|
11
|
+
export declare class MariaDBVectorAdapter extends BaseVectorAdapter {
|
|
12
|
+
readonly type: "mariadb";
|
|
13
|
+
private hasVectorSupport;
|
|
14
|
+
constructor(options: VectorAdapterOptions);
|
|
15
|
+
/**
|
|
16
|
+
* Check if vectors are supported
|
|
17
|
+
*/
|
|
18
|
+
isSupported(): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Initialize vector storage
|
|
21
|
+
*/
|
|
22
|
+
initialize(dimensions: number): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Store a vector
|
|
25
|
+
*/
|
|
26
|
+
store(entry: Omit<VectorEntry, 'createdAt' | 'updatedAt'>): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Search for similar vectors
|
|
29
|
+
*/
|
|
30
|
+
search(vector: number[], options?: VectorSearchOptions): Promise<VectorSearchResult[]>;
|
|
31
|
+
/**
|
|
32
|
+
* Create HNSW index (MariaDB 11.6+)
|
|
33
|
+
*/
|
|
34
|
+
createIndex(_indexType?: string): Promise<boolean>;
|
|
35
|
+
/**
|
|
36
|
+
* Check if vector index exists
|
|
37
|
+
*/
|
|
38
|
+
hasIndex(): Promise<boolean>;
|
|
39
|
+
/**
|
|
40
|
+
* Convert row to VectorEntry
|
|
41
|
+
*/
|
|
42
|
+
protected rowToEntry(row: Record<string, unknown>): VectorEntry;
|
|
43
|
+
/**
|
|
44
|
+
* Convert vector to MariaDB format
|
|
45
|
+
*/
|
|
46
|
+
protected vectorToStorage(vector: number[]): string;
|
|
47
|
+
/**
|
|
48
|
+
* Convert MariaDB format to vector
|
|
49
|
+
*/
|
|
50
|
+
protected storageToVector(value: unknown): number[];
|
|
51
|
+
/**
|
|
52
|
+
* Compute cosine similarity between two vectors
|
|
53
|
+
*/
|
|
54
|
+
private cosineSimilarity;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=mariadb-vector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mariadb-vector.d.ts","sourceRoot":"","sources":["../../src/vectors/mariadb-vector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEvE;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,iBAAiB;IACzD,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IACnC,OAAO,CAAC,gBAAgB,CAAkB;gBAE9B,OAAO,EAAE,oBAAoB;IAIzC;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkEnD;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B/E;;OAEG;IACG,MAAM,CACV,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA0EhC;;OAEG;IACG,WAAW,CAAC,UAAU,GAAE,MAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBhE;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IASlC;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW;IAY/D;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;IAKnD;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE;IA4BnD;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAgBzB"}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MariaDB Vector Adapter
|
|
3
|
+
*
|
|
4
|
+
* MariaDB 11.6+ native VECTOR type adapter with HNSW indexing.
|
|
5
|
+
*/
|
|
6
|
+
import { BaseVectorAdapter } from './adapter.js';
|
|
7
|
+
/**
|
|
8
|
+
* MariaDB vector adapter (MariaDB 11.6+)
|
|
9
|
+
*/
|
|
10
|
+
export class MariaDBVectorAdapter extends BaseVectorAdapter {
|
|
11
|
+
type = 'mariadb';
|
|
12
|
+
hasVectorSupport = false;
|
|
13
|
+
constructor(options) {
|
|
14
|
+
super(options);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Check if vectors are supported
|
|
18
|
+
*/
|
|
19
|
+
isSupported() {
|
|
20
|
+
return this.hasVectorSupport;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Initialize vector storage
|
|
24
|
+
*/
|
|
25
|
+
async initialize(dimensions) {
|
|
26
|
+
this.dimensions = dimensions;
|
|
27
|
+
// Check MariaDB version for VECTOR support (11.6+)
|
|
28
|
+
const versionResult = await this.provider.query('SELECT VERSION() as version');
|
|
29
|
+
if (versionResult.rows.length > 0) {
|
|
30
|
+
const version = versionResult.rows[0].version;
|
|
31
|
+
const versionMatch = version.match(/^(\d+)\.(\d+)/);
|
|
32
|
+
if (versionMatch) {
|
|
33
|
+
const major = parseInt(versionMatch[1], 10);
|
|
34
|
+
const minor = parseInt(versionMatch[2], 10);
|
|
35
|
+
this.hasVectorSupport = major > 11 || (major === 11 && minor >= 6);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (!this.hasVectorSupport) {
|
|
39
|
+
this.logger.warn('MariaDB 11.6+ required for VECTOR type. Using JSON fallback for vector storage.');
|
|
40
|
+
}
|
|
41
|
+
// Create vectors table
|
|
42
|
+
const tableName = this.provider.escapeIdentifier(this.tableName);
|
|
43
|
+
if (this.hasVectorSupport) {
|
|
44
|
+
await this.provider.execute(`
|
|
45
|
+
CREATE TABLE IF NOT EXISTS ${tableName} (
|
|
46
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
47
|
+
entry_id VARCHAR(255) NOT NULL,
|
|
48
|
+
collection VARCHAR(255) NOT NULL,
|
|
49
|
+
vector VECTOR(${dimensions}) NOT NULL,
|
|
50
|
+
text_hash VARCHAR(64) NOT NULL,
|
|
51
|
+
created_at BIGINT NOT NULL,
|
|
52
|
+
updated_at BIGINT NOT NULL,
|
|
53
|
+
INDEX idx_entry_id (entry_id),
|
|
54
|
+
INDEX idx_collection (collection)
|
|
55
|
+
)
|
|
56
|
+
`);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
// Fallback: store vectors as JSON
|
|
60
|
+
await this.provider.execute(`
|
|
61
|
+
CREATE TABLE IF NOT EXISTS ${tableName} (
|
|
62
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
63
|
+
entry_id VARCHAR(255) NOT NULL,
|
|
64
|
+
collection VARCHAR(255) NOT NULL,
|
|
65
|
+
vector JSON NOT NULL,
|
|
66
|
+
text_hash VARCHAR(64) NOT NULL,
|
|
67
|
+
created_at BIGINT NOT NULL,
|
|
68
|
+
updated_at BIGINT NOT NULL,
|
|
69
|
+
INDEX idx_entry_id (entry_id),
|
|
70
|
+
INDEX idx_collection (collection)
|
|
71
|
+
)
|
|
72
|
+
`);
|
|
73
|
+
}
|
|
74
|
+
this.initialized = true;
|
|
75
|
+
this.logger.info(`MariaDB vector adapter initialized with ${dimensions} dimensions ` +
|
|
76
|
+
`(${this.hasVectorSupport ? 'native VECTOR with HNSW' : 'JSON fallback'})`);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Store a vector
|
|
80
|
+
*/
|
|
81
|
+
async store(entry) {
|
|
82
|
+
const now = Date.now();
|
|
83
|
+
const vectorValue = this.vectorToStorage(entry.vector);
|
|
84
|
+
const tableName = this.provider.escapeIdentifier(this.tableName);
|
|
85
|
+
if (this.hasVectorSupport) {
|
|
86
|
+
// MariaDB uses VEC_FromText for vector insertion
|
|
87
|
+
await this.provider.execute(`INSERT INTO ${tableName} (id, entry_id, collection, vector, text_hash, created_at, updated_at)
|
|
88
|
+
VALUES (?, ?, ?, VEC_FromText(?), ?, ?, ?)
|
|
89
|
+
ON DUPLICATE KEY UPDATE
|
|
90
|
+
vector = VEC_FromText(VALUES(vector)),
|
|
91
|
+
text_hash = VALUES(text_hash),
|
|
92
|
+
updated_at = VALUES(updated_at)`, [entry.id, entry.entryId, entry.collection, vectorValue, entry.textHash, now, now]);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
await this.provider.execute(`INSERT INTO ${tableName} (id, entry_id, collection, vector, text_hash, created_at, updated_at)
|
|
96
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
97
|
+
ON DUPLICATE KEY UPDATE
|
|
98
|
+
vector = VALUES(vector),
|
|
99
|
+
text_hash = VALUES(text_hash),
|
|
100
|
+
updated_at = VALUES(updated_at)`, [entry.id, entry.entryId, entry.collection, vectorValue, entry.textHash, now, now]);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Search for similar vectors
|
|
105
|
+
*/
|
|
106
|
+
async search(vector, options = {}) {
|
|
107
|
+
const { limit = 10, collection, minSimilarity = 0 } = options;
|
|
108
|
+
const vectorValue = this.vectorToStorage(vector);
|
|
109
|
+
const tableName = this.provider.escapeIdentifier(this.tableName);
|
|
110
|
+
if (this.hasVectorSupport) {
|
|
111
|
+
// MariaDB 11.6+ uses VEC_DISTANCE for similarity
|
|
112
|
+
let sql = `
|
|
113
|
+
SELECT id, entry_id, collection,
|
|
114
|
+
1 / (1 + VEC_DISTANCE(vector, VEC_FromText(?))) as similarity
|
|
115
|
+
FROM ${tableName}
|
|
116
|
+
WHERE 1 / (1 + VEC_DISTANCE(vector, VEC_FromText(?))) >= ?
|
|
117
|
+
`;
|
|
118
|
+
const params = [vectorValue, vectorValue, minSimilarity];
|
|
119
|
+
if (collection) {
|
|
120
|
+
sql += ` AND collection = ?`;
|
|
121
|
+
params.push(collection);
|
|
122
|
+
}
|
|
123
|
+
sql += ` ORDER BY VEC_DISTANCE(vector, VEC_FromText(?)) LIMIT ?`;
|
|
124
|
+
params.push(vectorValue, limit);
|
|
125
|
+
const result = await this.provider.query(sql, params);
|
|
126
|
+
return result.rows.map((row) => ({
|
|
127
|
+
id: row.id,
|
|
128
|
+
entryId: row.entry_id,
|
|
129
|
+
collection: row.collection,
|
|
130
|
+
similarity: row.similarity,
|
|
131
|
+
}));
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
// JSON fallback - compute cosine similarity in application
|
|
135
|
+
let sql = `SELECT id, entry_id, collection, vector FROM ${tableName}`;
|
|
136
|
+
const params = [];
|
|
137
|
+
if (collection) {
|
|
138
|
+
sql += ` WHERE collection = ?`;
|
|
139
|
+
params.push(collection);
|
|
140
|
+
}
|
|
141
|
+
const result = await this.provider.query(sql, params);
|
|
142
|
+
// Calculate cosine similarity for each row
|
|
143
|
+
const results = result.rows
|
|
144
|
+
.map((row) => {
|
|
145
|
+
const storedVector = this.storageToVector(row.vector);
|
|
146
|
+
const similarity = this.cosineSimilarity(vector, storedVector);
|
|
147
|
+
return {
|
|
148
|
+
id: row.id,
|
|
149
|
+
entryId: row.entry_id,
|
|
150
|
+
collection: row.collection,
|
|
151
|
+
similarity,
|
|
152
|
+
};
|
|
153
|
+
})
|
|
154
|
+
.filter((r) => r.similarity >= minSimilarity)
|
|
155
|
+
.sort((a, b) => b.similarity - a.similarity)
|
|
156
|
+
.slice(0, limit);
|
|
157
|
+
return results;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Create HNSW index (MariaDB 11.6+)
|
|
162
|
+
*/
|
|
163
|
+
async createIndex(_indexType = 'hnsw') {
|
|
164
|
+
if (!this.hasVectorSupport) {
|
|
165
|
+
this.logger.warn('Vector indexing not available without native VECTOR type');
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
const tableName = this.provider.escapeIdentifier(this.tableName);
|
|
169
|
+
const indexName = `idx_${this.tableName}_vector_hnsw`;
|
|
170
|
+
try {
|
|
171
|
+
// MariaDB 11.6+ supports HNSW index on VECTOR columns
|
|
172
|
+
await this.provider.execute(`
|
|
173
|
+
CREATE INDEX IF NOT EXISTS ${indexName}
|
|
174
|
+
ON ${tableName} (vector)
|
|
175
|
+
USING HNSW
|
|
176
|
+
`);
|
|
177
|
+
this.logger.info('Created HNSW index on vectors table');
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
this.logger.error(`Failed to create HNSW index: ${error}`);
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Check if vector index exists
|
|
187
|
+
*/
|
|
188
|
+
async hasIndex() {
|
|
189
|
+
const result = await this.provider.query(`SHOW INDEX FROM ${this.provider.escapeIdentifier(this.tableName)}
|
|
190
|
+
WHERE Key_name LIKE 'idx_%_vector_%'`);
|
|
191
|
+
return result.rows.length > 0;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Convert row to VectorEntry
|
|
195
|
+
*/
|
|
196
|
+
rowToEntry(row) {
|
|
197
|
+
return {
|
|
198
|
+
id: row.id,
|
|
199
|
+
entryId: row.entry_id,
|
|
200
|
+
collection: row.collection,
|
|
201
|
+
vector: this.storageToVector(row.vector),
|
|
202
|
+
textHash: row.text_hash,
|
|
203
|
+
createdAt: row.created_at,
|
|
204
|
+
updatedAt: row.updated_at,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Convert vector to MariaDB format
|
|
209
|
+
*/
|
|
210
|
+
vectorToStorage(vector) {
|
|
211
|
+
// MariaDB VEC_FromText expects: '[0.1,0.2,0.3]'
|
|
212
|
+
return `[${vector.join(',')}]`;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Convert MariaDB format to vector
|
|
216
|
+
*/
|
|
217
|
+
storageToVector(value) {
|
|
218
|
+
if (typeof value === 'string') {
|
|
219
|
+
try {
|
|
220
|
+
// Try JSON parse first
|
|
221
|
+
return JSON.parse(value);
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
// MariaDB VECTOR format: [0.1,0.2,0.3]
|
|
225
|
+
return value
|
|
226
|
+
.slice(1, -1)
|
|
227
|
+
.split(',')
|
|
228
|
+
.map((n) => parseFloat(n));
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
if (Buffer.isBuffer(value)) {
|
|
232
|
+
// MariaDB may return VECTOR as binary
|
|
233
|
+
// Convert float32 array from buffer
|
|
234
|
+
const floats = [];
|
|
235
|
+
for (let i = 0; i < value.length; i += 4) {
|
|
236
|
+
floats.push(value.readFloatLE(i));
|
|
237
|
+
}
|
|
238
|
+
return floats;
|
|
239
|
+
}
|
|
240
|
+
if (Array.isArray(value)) {
|
|
241
|
+
return value.map((n) => Number(n));
|
|
242
|
+
}
|
|
243
|
+
return [];
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Compute cosine similarity between two vectors
|
|
247
|
+
*/
|
|
248
|
+
cosineSimilarity(a, b) {
|
|
249
|
+
if (a.length !== b.length)
|
|
250
|
+
return 0;
|
|
251
|
+
let dotProduct = 0;
|
|
252
|
+
let normA = 0;
|
|
253
|
+
let normB = 0;
|
|
254
|
+
for (let i = 0; i < a.length; i++) {
|
|
255
|
+
dotProduct += a[i] * b[i];
|
|
256
|
+
normA += a[i] * a[i];
|
|
257
|
+
normB += b[i] * b[i];
|
|
258
|
+
}
|
|
259
|
+
const magnitude = Math.sqrt(normA) * Math.sqrt(normB);
|
|
260
|
+
return magnitude === 0 ? 0 : dotProduct / magnitude;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
//# sourceMappingURL=mariadb-vector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mariadb-vector.js","sourceRoot":"","sources":["../../src/vectors/mariadb-vector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MySQL Vector Adapter
|
|
3
|
+
*
|
|
4
|
+
* MySQL 9+ native VECTOR type adapter.
|
|
5
|
+
*/
|
|
6
|
+
import type { VectorEntry, VectorSearchOptions, VectorSearchResult } from '../types.js';
|
|
7
|
+
import { BaseVectorAdapter, VectorAdapterOptions } from './adapter.js';
|
|
8
|
+
/**
|
|
9
|
+
* MySQL vector adapter (MySQL 9+)
|
|
10
|
+
*/
|
|
11
|
+
export declare class MySQLVectorAdapter extends BaseVectorAdapter {
|
|
12
|
+
readonly type: "mysql";
|
|
13
|
+
private hasVectorSupport;
|
|
14
|
+
constructor(options: VectorAdapterOptions);
|
|
15
|
+
/**
|
|
16
|
+
* Check if vectors are supported
|
|
17
|
+
*/
|
|
18
|
+
isSupported(): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Initialize vector storage
|
|
21
|
+
*/
|
|
22
|
+
initialize(dimensions: number): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Store a vector
|
|
25
|
+
*/
|
|
26
|
+
store(entry: Omit<VectorEntry, 'createdAt' | 'updatedAt'>): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Search for similar vectors
|
|
29
|
+
*/
|
|
30
|
+
search(vector: number[], options?: VectorSearchOptions): Promise<VectorSearchResult[]>;
|
|
31
|
+
/**
|
|
32
|
+
* Create vector index (MySQL 9+ specific)
|
|
33
|
+
*/
|
|
34
|
+
createIndex(_indexType?: string): Promise<boolean>;
|
|
35
|
+
/**
|
|
36
|
+
* Check if vector index exists
|
|
37
|
+
*/
|
|
38
|
+
hasIndex(): Promise<boolean>;
|
|
39
|
+
/**
|
|
40
|
+
* Convert row to VectorEntry
|
|
41
|
+
*/
|
|
42
|
+
protected rowToEntry(row: Record<string, unknown>): VectorEntry;
|
|
43
|
+
/**
|
|
44
|
+
* Convert vector to MySQL format
|
|
45
|
+
*/
|
|
46
|
+
protected vectorToStorage(vector: number[]): string;
|
|
47
|
+
/**
|
|
48
|
+
* Convert MySQL format to vector
|
|
49
|
+
*/
|
|
50
|
+
protected storageToVector(value: unknown): number[];
|
|
51
|
+
/**
|
|
52
|
+
* Compute cosine similarity between two vectors
|
|
53
|
+
*/
|
|
54
|
+
private cosineSimilarity;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=mysql-vector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mysql-vector.d.ts","sourceRoot":"","sources":["../../src/vectors/mysql-vector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEvE;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,iBAAiB;IACvD,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IACjC,OAAO,CAAC,gBAAgB,CAAkB;gBAE9B,OAAO,EAAE,oBAAoB;IAIzC;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiEnD;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB/E;;OAEG;IACG,MAAM,CACV,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA4EhC;;OAEG;IACG,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYxD;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAKlC;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW;IAY/D;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;IASnD;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE;IAmBnD;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAgBzB"}
|