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.
Files changed (93) hide show
  1. package/dist/federation/cache-layer.d.ts +58 -0
  2. package/dist/federation/cache-layer.d.ts.map +1 -0
  3. package/dist/federation/cache-layer.js +210 -0
  4. package/dist/federation/cache-layer.js.map +1 -0
  5. package/dist/federation/index.d.ts +12 -0
  6. package/dist/federation/index.d.ts.map +1 -0
  7. package/dist/federation/index.js +9 -0
  8. package/dist/federation/index.js.map +1 -0
  9. package/dist/federation/source-manager.d.ts +57 -0
  10. package/dist/federation/source-manager.d.ts.map +1 -0
  11. package/dist/federation/source-manager.js +238 -0
  12. package/dist/federation/source-manager.js.map +1 -0
  13. package/dist/federation/sync-engine.d.ts +68 -0
  14. package/dist/federation/sync-engine.d.ts.map +1 -0
  15. package/dist/federation/sync-engine.js +288 -0
  16. package/dist/federation/sync-engine.js.map +1 -0
  17. package/dist/index.d.ts +80 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +79 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/plugin.d.ts +28 -0
  22. package/dist/plugin.d.ts.map +1 -0
  23. package/dist/plugin.js +798 -0
  24. package/dist/plugin.js.map +1 -0
  25. package/dist/providers/base.d.ts +142 -0
  26. package/dist/providers/base.d.ts.map +1 -0
  27. package/dist/providers/base.js +161 -0
  28. package/dist/providers/base.js.map +1 -0
  29. package/dist/providers/index.d.ts +22 -0
  30. package/dist/providers/index.d.ts.map +1 -0
  31. package/dist/providers/index.js +74 -0
  32. package/dist/providers/index.js.map +1 -0
  33. package/dist/providers/mariadb.d.ts +83 -0
  34. package/dist/providers/mariadb.d.ts.map +1 -0
  35. package/dist/providers/mariadb.js +293 -0
  36. package/dist/providers/mariadb.js.map +1 -0
  37. package/dist/providers/mysql.d.ts +78 -0
  38. package/dist/providers/mysql.d.ts.map +1 -0
  39. package/dist/providers/mysql.js +284 -0
  40. package/dist/providers/mysql.js.map +1 -0
  41. package/dist/providers/postgresql.d.ts +77 -0
  42. package/dist/providers/postgresql.d.ts.map +1 -0
  43. package/dist/providers/postgresql.js +296 -0
  44. package/dist/providers/postgresql.js.map +1 -0
  45. package/dist/providers/sqlite.d.ts +80 -0
  46. package/dist/providers/sqlite.d.ts.map +1 -0
  47. package/dist/providers/sqlite.js +283 -0
  48. package/dist/providers/sqlite.js.map +1 -0
  49. package/dist/query/builder.d.ts +74 -0
  50. package/dist/query/builder.d.ts.map +1 -0
  51. package/dist/query/builder.js +279 -0
  52. package/dist/query/builder.js.map +1 -0
  53. package/dist/query/index.d.ts +10 -0
  54. package/dist/query/index.d.ts.map +1 -0
  55. package/dist/query/index.js +8 -0
  56. package/dist/query/index.js.map +1 -0
  57. package/dist/query/transformer.d.ts +74 -0
  58. package/dist/query/transformer.d.ts.map +1 -0
  59. package/dist/query/transformer.js +236 -0
  60. package/dist/query/transformer.js.map +1 -0
  61. package/dist/types.d.ts +350 -0
  62. package/dist/types.d.ts.map +1 -0
  63. package/dist/types.js +38 -0
  64. package/dist/types.js.map +1 -0
  65. package/dist/vectors/adapter.d.ts +128 -0
  66. package/dist/vectors/adapter.d.ts.map +1 -0
  67. package/dist/vectors/adapter.js +79 -0
  68. package/dist/vectors/adapter.js.map +1 -0
  69. package/dist/vectors/index.d.ts +41 -0
  70. package/dist/vectors/index.d.ts.map +1 -0
  71. package/dist/vectors/index.js +87 -0
  72. package/dist/vectors/index.js.map +1 -0
  73. package/dist/vectors/lokijs-vector.d.ts +112 -0
  74. package/dist/vectors/lokijs-vector.d.ts.map +1 -0
  75. package/dist/vectors/lokijs-vector.js +217 -0
  76. package/dist/vectors/lokijs-vector.js.map +1 -0
  77. package/dist/vectors/mariadb-vector.d.ts +56 -0
  78. package/dist/vectors/mariadb-vector.d.ts.map +1 -0
  79. package/dist/vectors/mariadb-vector.js +263 -0
  80. package/dist/vectors/mariadb-vector.js.map +1 -0
  81. package/dist/vectors/mysql-vector.d.ts +56 -0
  82. package/dist/vectors/mysql-vector.d.ts.map +1 -0
  83. package/dist/vectors/mysql-vector.js +235 -0
  84. package/dist/vectors/mysql-vector.js.map +1 -0
  85. package/dist/vectors/pgvector.d.ts +52 -0
  86. package/dist/vectors/pgvector.d.ts.map +1 -0
  87. package/dist/vectors/pgvector.js +190 -0
  88. package/dist/vectors/pgvector.js.map +1 -0
  89. package/dist/vectors/sqlite-vec.d.ts +80 -0
  90. package/dist/vectors/sqlite-vec.d.ts.map +1 -0
  91. package/dist/vectors/sqlite-vec.js +362 -0
  92. package/dist/vectors/sqlite-vec.js.map +1 -0
  93. 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"}