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,283 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite Provider
|
|
3
|
+
*
|
|
4
|
+
* SQLite database provider with sqlite-vec support detection.
|
|
5
|
+
*/
|
|
6
|
+
import { BaseProvider } from './base.js';
|
|
7
|
+
// Dynamic import for better-sqlite3
|
|
8
|
+
let BetterSqlite3 = null;
|
|
9
|
+
async function getSQLite() {
|
|
10
|
+
if (!BetterSqlite3) {
|
|
11
|
+
try {
|
|
12
|
+
const module = await import('better-sqlite3');
|
|
13
|
+
BetterSqlite3 = module.default;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
throw new Error('better-sqlite3 package not installed. Install with: npm install better-sqlite3');
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return BetterSqlite3;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* SQLite Provider
|
|
23
|
+
*/
|
|
24
|
+
export class SQLiteProvider extends BaseProvider {
|
|
25
|
+
db = null;
|
|
26
|
+
capabilities = null;
|
|
27
|
+
constructor(options) {
|
|
28
|
+
super({ ...options, type: 'sqlite' });
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Connect to SQLite
|
|
32
|
+
*/
|
|
33
|
+
async connect() {
|
|
34
|
+
if (this.connected)
|
|
35
|
+
return;
|
|
36
|
+
const Database = await getSQLite();
|
|
37
|
+
const config = this.config;
|
|
38
|
+
this.db = Database(config.filename, {
|
|
39
|
+
readonly: config.readonly ?? this.mode === 'readonly',
|
|
40
|
+
});
|
|
41
|
+
// Enable WAL mode for better concurrency (unless readonly)
|
|
42
|
+
if (this.mode === 'readwrite') {
|
|
43
|
+
this.db.pragma('journal_mode = WAL');
|
|
44
|
+
}
|
|
45
|
+
// Enable foreign keys
|
|
46
|
+
this.db.pragma('foreign_keys = ON');
|
|
47
|
+
this.connected = true;
|
|
48
|
+
this.logger.info(`SQLite connected: ${config.filename}`);
|
|
49
|
+
// Detect capabilities
|
|
50
|
+
this.capabilities = await this.detectCapabilities();
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Disconnect from SQLite
|
|
54
|
+
*/
|
|
55
|
+
async disconnect() {
|
|
56
|
+
if (this.db) {
|
|
57
|
+
this.db.close();
|
|
58
|
+
this.db = null;
|
|
59
|
+
}
|
|
60
|
+
this.connected = false;
|
|
61
|
+
this.logger.info('SQLite disconnected');
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Detect database capabilities
|
|
65
|
+
*/
|
|
66
|
+
async detectCapabilities() {
|
|
67
|
+
const caps = {
|
|
68
|
+
json: true, // SQLite 3.38+ has JSON functions
|
|
69
|
+
vectors: false,
|
|
70
|
+
fullText: true,
|
|
71
|
+
fullTextMethod: 'FTS5',
|
|
72
|
+
transactions: true,
|
|
73
|
+
maxConnections: 1, // SQLite is single-connection
|
|
74
|
+
};
|
|
75
|
+
// Check SQLite version
|
|
76
|
+
const versionResult = await this.query('SELECT sqlite_version() as version');
|
|
77
|
+
if (versionResult.rows.length > 0) {
|
|
78
|
+
const version = versionResult.rows[0].version;
|
|
79
|
+
// Check for sqlite-vec extension
|
|
80
|
+
// This requires the extension to be loaded
|
|
81
|
+
try {
|
|
82
|
+
await this.query("SELECT vec_version()");
|
|
83
|
+
caps.vectors = true;
|
|
84
|
+
caps.vectorInfo = `sqlite-vec with SQLite ${version}`;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// sqlite-vec not available
|
|
88
|
+
caps.vectorInfo = `SQLite ${version} (sqlite-vec not loaded)`;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return caps;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get capabilities
|
|
95
|
+
*/
|
|
96
|
+
async getCapabilities() {
|
|
97
|
+
if (!this.capabilities) {
|
|
98
|
+
this.capabilities = await this.detectCapabilities();
|
|
99
|
+
}
|
|
100
|
+
return this.capabilities;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Execute a query
|
|
104
|
+
*/
|
|
105
|
+
async query(sql, params) {
|
|
106
|
+
this.assertConnected();
|
|
107
|
+
this.logQuery(sql, params);
|
|
108
|
+
const stmt = this.db.prepare(sql);
|
|
109
|
+
const rows = (params ? stmt.all(...params) : stmt.all());
|
|
110
|
+
let fields;
|
|
111
|
+
try {
|
|
112
|
+
const columns = stmt.columns();
|
|
113
|
+
fields = columns.map((c) => ({
|
|
114
|
+
name: c.name,
|
|
115
|
+
dataType: c.type ?? 'unknown',
|
|
116
|
+
}));
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
// Some statements don't have columns
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
rows,
|
|
123
|
+
rowCount: rows.length,
|
|
124
|
+
fields,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Execute a non-query statement
|
|
129
|
+
*/
|
|
130
|
+
async execute(sql, params) {
|
|
131
|
+
this.assertConnected();
|
|
132
|
+
this.assertWritable();
|
|
133
|
+
this.logQuery(sql, params);
|
|
134
|
+
const stmt = this.db.prepare(sql);
|
|
135
|
+
const result = params ? stmt.run(...params) : stmt.run();
|
|
136
|
+
return result.changes;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Begin transaction
|
|
140
|
+
*/
|
|
141
|
+
async beginTransaction() {
|
|
142
|
+
this.assertConnected();
|
|
143
|
+
if (this.inTransaction) {
|
|
144
|
+
throw new Error('Transaction already in progress');
|
|
145
|
+
}
|
|
146
|
+
this.db.exec('BEGIN TRANSACTION');
|
|
147
|
+
this.inTransaction = true;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Commit transaction
|
|
151
|
+
*/
|
|
152
|
+
async commit() {
|
|
153
|
+
if (!this.inTransaction) {
|
|
154
|
+
throw new Error('No transaction in progress');
|
|
155
|
+
}
|
|
156
|
+
this.db.exec('COMMIT');
|
|
157
|
+
this.inTransaction = false;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Rollback transaction
|
|
161
|
+
*/
|
|
162
|
+
async rollback() {
|
|
163
|
+
if (!this.inTransaction) {
|
|
164
|
+
throw new Error('No transaction in progress');
|
|
165
|
+
}
|
|
166
|
+
this.db.exec('ROLLBACK');
|
|
167
|
+
this.inTransaction = false;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Get database schema
|
|
171
|
+
*/
|
|
172
|
+
async getSchema() {
|
|
173
|
+
this.assertConnected();
|
|
174
|
+
// Get tables
|
|
175
|
+
const tablesResult = await this.query(`SELECT name FROM sqlite_master
|
|
176
|
+
WHERE type = 'table' AND name NOT LIKE 'sqlite_%'
|
|
177
|
+
ORDER BY name`);
|
|
178
|
+
const tables = [];
|
|
179
|
+
for (const row of tablesResult.rows) {
|
|
180
|
+
const info = await this.getTableInfo(row.name);
|
|
181
|
+
if (info)
|
|
182
|
+
tables.push(info);
|
|
183
|
+
}
|
|
184
|
+
// Get views
|
|
185
|
+
const viewsResult = await this.query(`SELECT name FROM sqlite_master
|
|
186
|
+
WHERE type = 'view'
|
|
187
|
+
ORDER BY name`);
|
|
188
|
+
return {
|
|
189
|
+
tables,
|
|
190
|
+
views: viewsResult.rows.map((r) => r.name),
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Get table info
|
|
195
|
+
*/
|
|
196
|
+
async getTableInfo(tableName) {
|
|
197
|
+
this.assertConnected();
|
|
198
|
+
// Get columns using PRAGMA
|
|
199
|
+
const columnsResult = await this.query(`PRAGMA table_info(${this.escapeIdentifier(tableName)})`);
|
|
200
|
+
if (columnsResult.rows.length === 0) {
|
|
201
|
+
return null;
|
|
202
|
+
}
|
|
203
|
+
// Get row count
|
|
204
|
+
const countResult = await this.query(`SELECT COUNT(*) as count FROM ${this.escapeIdentifier(tableName)}`);
|
|
205
|
+
const columns = columnsResult.rows.map((row) => ({
|
|
206
|
+
name: row.name,
|
|
207
|
+
type: row.type,
|
|
208
|
+
nullable: row.notnull === 0,
|
|
209
|
+
primaryKey: row.pk > 0,
|
|
210
|
+
defaultValue: row.dflt_value,
|
|
211
|
+
}));
|
|
212
|
+
return {
|
|
213
|
+
name: tableName,
|
|
214
|
+
columns,
|
|
215
|
+
rowCount: countResult.rows[0]?.count ?? 0,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Escape identifier
|
|
220
|
+
*/
|
|
221
|
+
escapeIdentifier(name) {
|
|
222
|
+
return `"${name.replace(/"/g, '""')}"`;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Get parameter placeholder
|
|
226
|
+
*/
|
|
227
|
+
getPlaceholder(_index) {
|
|
228
|
+
return '?';
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Map column type
|
|
232
|
+
*/
|
|
233
|
+
mapColumnType(type) {
|
|
234
|
+
const typeMap = {
|
|
235
|
+
string: 'TEXT',
|
|
236
|
+
text: 'TEXT',
|
|
237
|
+
integer: 'INTEGER',
|
|
238
|
+
bigint: 'INTEGER',
|
|
239
|
+
float: 'REAL',
|
|
240
|
+
double: 'REAL',
|
|
241
|
+
boolean: 'INTEGER',
|
|
242
|
+
date: 'TEXT',
|
|
243
|
+
datetime: 'TEXT',
|
|
244
|
+
json: 'TEXT',
|
|
245
|
+
blob: 'BLOB',
|
|
246
|
+
// sqlite-vec uses FLOAT32 arrays stored as BLOB
|
|
247
|
+
vector: 'BLOB',
|
|
248
|
+
};
|
|
249
|
+
return typeMap[type.toLowerCase()] ?? type;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Load sqlite-vec extension
|
|
253
|
+
*/
|
|
254
|
+
async loadVecExtension(path) {
|
|
255
|
+
this.assertConnected();
|
|
256
|
+
try {
|
|
257
|
+
this.db.loadExtension(path);
|
|
258
|
+
this.capabilities = await this.detectCapabilities();
|
|
259
|
+
return this.capabilities.vectors;
|
|
260
|
+
}
|
|
261
|
+
catch (error) {
|
|
262
|
+
this.logger.error(`Failed to load sqlite-vec: ${error}`);
|
|
263
|
+
return false;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Create FTS5 virtual table
|
|
268
|
+
*/
|
|
269
|
+
async createFTS5Table(tableName, columns, contentTable) {
|
|
270
|
+
this.assertConnected();
|
|
271
|
+
this.assertWritable();
|
|
272
|
+
const ftsTableName = `${tableName}_fts`;
|
|
273
|
+
const columnList = columns.join(', ');
|
|
274
|
+
let sql = `CREATE VIRTUAL TABLE IF NOT EXISTS ${this.escapeIdentifier(ftsTableName)} USING fts5(${columnList}`;
|
|
275
|
+
if (contentTable) {
|
|
276
|
+
sql += `, content=${this.escapeIdentifier(contentTable)}`;
|
|
277
|
+
}
|
|
278
|
+
sql += ')';
|
|
279
|
+
await this.execute(sql);
|
|
280
|
+
this.logger.debug(`Created FTS5 table: ${ftsTableName}`);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=sqlite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/providers/sqlite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query Builder
|
|
3
|
+
*
|
|
4
|
+
* Translates LokiJS-style queries to SQL for each provider.
|
|
5
|
+
*/
|
|
6
|
+
import type { SQLProviderType } from '../types.js';
|
|
7
|
+
import type { SQLProvider } from '../providers/base.js';
|
|
8
|
+
/**
|
|
9
|
+
* LokiJS query operators
|
|
10
|
+
*/
|
|
11
|
+
export type LokiOperator = '$eq' | '$ne' | '$gt' | '$gte' | '$lt' | '$lte' | '$in' | '$nin' | '$contains' | '$containsAny' | '$containsNone' | '$regex' | '$exists' | '$and' | '$or';
|
|
12
|
+
/**
|
|
13
|
+
* LokiJS-style query
|
|
14
|
+
*/
|
|
15
|
+
export type LokiQuery = Record<string, unknown>;
|
|
16
|
+
/**
|
|
17
|
+
* Sort direction
|
|
18
|
+
*/
|
|
19
|
+
export type SortDirection = 'asc' | 'desc';
|
|
20
|
+
/**
|
|
21
|
+
* Sort options
|
|
22
|
+
*/
|
|
23
|
+
export interface SortOption {
|
|
24
|
+
field: string;
|
|
25
|
+
direction: SortDirection;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Query options
|
|
29
|
+
*/
|
|
30
|
+
export interface QueryOptions {
|
|
31
|
+
/** Fields to select */
|
|
32
|
+
fields?: string[];
|
|
33
|
+
/** Sort options */
|
|
34
|
+
sort?: SortOption[];
|
|
35
|
+
/** Limit results */
|
|
36
|
+
limit?: number;
|
|
37
|
+
/** Skip results */
|
|
38
|
+
offset?: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Built query result
|
|
42
|
+
*/
|
|
43
|
+
export interface BuiltQuery {
|
|
44
|
+
sql: string;
|
|
45
|
+
params: unknown[];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Query builder interface
|
|
49
|
+
*/
|
|
50
|
+
export interface QueryBuilder {
|
|
51
|
+
/** Build SELECT query */
|
|
52
|
+
select(table: string, query?: LokiQuery, options?: QueryOptions): BuiltQuery;
|
|
53
|
+
/** Build INSERT query */
|
|
54
|
+
insert(table: string, data: Record<string, unknown>): BuiltQuery;
|
|
55
|
+
/** Build UPDATE query */
|
|
56
|
+
update(table: string, data: Record<string, unknown>, query?: LokiQuery): BuiltQuery;
|
|
57
|
+
/** Build DELETE query */
|
|
58
|
+
delete(table: string, query?: LokiQuery): BuiltQuery;
|
|
59
|
+
/** Build COUNT query */
|
|
60
|
+
count(table: string, query?: LokiQuery): BuiltQuery;
|
|
61
|
+
/** Escape identifier */
|
|
62
|
+
escapeIdentifier(name: string): string;
|
|
63
|
+
/** Get placeholder for parameter */
|
|
64
|
+
getPlaceholder(index: number): string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Create query builder for a provider
|
|
68
|
+
*/
|
|
69
|
+
export declare function createQueryBuilder(provider: SQLProvider): QueryBuilder;
|
|
70
|
+
/**
|
|
71
|
+
* Create query builder from provider type
|
|
72
|
+
*/
|
|
73
|
+
export declare function createQueryBuilderForType(_type: SQLProviderType): (provider: SQLProvider) => QueryBuilder;
|
|
74
|
+
//# sourceMappingURL=builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/query/builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,KAAK,GACL,KAAK,GACL,KAAK,GACL,MAAM,GACN,KAAK,GACL,MAAM,GACN,KAAK,GACL,MAAM,GACN,WAAW,GACX,cAAc,GACd,eAAe,GACf,QAAQ,GACR,SAAS,GACT,MAAM,GACN,KAAK,CAAC;AAEV;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEhD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,aAAa,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,mBAAmB;IACnB,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC;IACpB,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IAE7E,yBAAyB;IACzB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC;IAEjE,yBAAyB;IACzB,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,CAAC,EAAE,SAAS,GAChB,UAAU,CAAC;IAEd,yBAAyB;IACzB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IAErD,wBAAwB;IACxB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IAEpD,wBAAwB;IACxB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAEvC,oCAAoC;IACpC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACvC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,WAAW,GAAG,YAAY,CAkUtE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,eAAe,GACrB,CAAC,QAAQ,EAAE,WAAW,KAAK,YAAY,CAEzC"}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query Builder
|
|
3
|
+
*
|
|
4
|
+
* Translates LokiJS-style queries to SQL for each provider.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Create query builder for a provider
|
|
8
|
+
*/
|
|
9
|
+
export function createQueryBuilder(provider) {
|
|
10
|
+
let paramIndex = 0;
|
|
11
|
+
/**
|
|
12
|
+
* Reset parameter index
|
|
13
|
+
*/
|
|
14
|
+
function resetParams() {
|
|
15
|
+
paramIndex = 0;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Get next placeholder
|
|
19
|
+
*/
|
|
20
|
+
function nextPlaceholder() {
|
|
21
|
+
return provider.getPlaceholder(paramIndex++);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Escape identifier
|
|
25
|
+
*/
|
|
26
|
+
function escapeIdentifier(name) {
|
|
27
|
+
return provider.escapeIdentifier(name);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get placeholder
|
|
31
|
+
*/
|
|
32
|
+
function getPlaceholder(index) {
|
|
33
|
+
return provider.getPlaceholder(index);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Build WHERE clause from LokiJS query
|
|
37
|
+
*/
|
|
38
|
+
function buildWhere(query, params) {
|
|
39
|
+
const conditions = [];
|
|
40
|
+
for (const [key, value] of Object.entries(query)) {
|
|
41
|
+
if (key === '$and') {
|
|
42
|
+
const andConditions = value.map((q) => buildWhere(q, params));
|
|
43
|
+
conditions.push(`(${andConditions.join(' AND ')})`);
|
|
44
|
+
}
|
|
45
|
+
else if (key === '$or') {
|
|
46
|
+
const orConditions = value.map((q) => buildWhere(q, params));
|
|
47
|
+
conditions.push(`(${orConditions.join(' OR ')})`);
|
|
48
|
+
}
|
|
49
|
+
else if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
|
|
50
|
+
// Operator expression
|
|
51
|
+
const fieldConditions = buildFieldCondition(key, value, params);
|
|
52
|
+
conditions.push(...fieldConditions);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
// Simple equality
|
|
56
|
+
conditions.push(`${escapeIdentifier(key)} = ${nextPlaceholder()}`);
|
|
57
|
+
params.push(value);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return conditions.length > 0 ? conditions.join(' AND ') : '1=1';
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Build condition for a field with operators
|
|
64
|
+
*/
|
|
65
|
+
function buildFieldCondition(field, operators, params) {
|
|
66
|
+
const conditions = [];
|
|
67
|
+
const escapedField = escapeIdentifier(field);
|
|
68
|
+
for (const [op, value] of Object.entries(operators)) {
|
|
69
|
+
switch (op) {
|
|
70
|
+
case '$eq':
|
|
71
|
+
conditions.push(`${escapedField} = ${nextPlaceholder()}`);
|
|
72
|
+
params.push(value);
|
|
73
|
+
break;
|
|
74
|
+
case '$ne':
|
|
75
|
+
conditions.push(`${escapedField} != ${nextPlaceholder()}`);
|
|
76
|
+
params.push(value);
|
|
77
|
+
break;
|
|
78
|
+
case '$gt':
|
|
79
|
+
conditions.push(`${escapedField} > ${nextPlaceholder()}`);
|
|
80
|
+
params.push(value);
|
|
81
|
+
break;
|
|
82
|
+
case '$gte':
|
|
83
|
+
conditions.push(`${escapedField} >= ${nextPlaceholder()}`);
|
|
84
|
+
params.push(value);
|
|
85
|
+
break;
|
|
86
|
+
case '$lt':
|
|
87
|
+
conditions.push(`${escapedField} < ${nextPlaceholder()}`);
|
|
88
|
+
params.push(value);
|
|
89
|
+
break;
|
|
90
|
+
case '$lte':
|
|
91
|
+
conditions.push(`${escapedField} <= ${nextPlaceholder()}`);
|
|
92
|
+
params.push(value);
|
|
93
|
+
break;
|
|
94
|
+
case '$in':
|
|
95
|
+
if (Array.isArray(value) && value.length > 0) {
|
|
96
|
+
const placeholders = value.map(() => nextPlaceholder()).join(', ');
|
|
97
|
+
conditions.push(`${escapedField} IN (${placeholders})`);
|
|
98
|
+
params.push(...value);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
conditions.push('1=0'); // Empty IN is always false
|
|
102
|
+
}
|
|
103
|
+
break;
|
|
104
|
+
case '$nin':
|
|
105
|
+
if (Array.isArray(value) && value.length > 0) {
|
|
106
|
+
const placeholders = value.map(() => nextPlaceholder()).join(', ');
|
|
107
|
+
conditions.push(`${escapedField} NOT IN (${placeholders})`);
|
|
108
|
+
params.push(...value);
|
|
109
|
+
}
|
|
110
|
+
// Empty NOT IN is always true, so no condition needed
|
|
111
|
+
break;
|
|
112
|
+
case '$contains':
|
|
113
|
+
// For JSON arrays or text LIKE
|
|
114
|
+
if (provider.type === 'postgresql') {
|
|
115
|
+
conditions.push(`${escapedField} @> ${nextPlaceholder()}::jsonb`);
|
|
116
|
+
params.push(JSON.stringify([value]));
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
conditions.push(`${escapedField} LIKE ${nextPlaceholder()}`);
|
|
120
|
+
params.push(`%${value}%`);
|
|
121
|
+
}
|
|
122
|
+
break;
|
|
123
|
+
case '$containsAny':
|
|
124
|
+
if (Array.isArray(value) && value.length > 0) {
|
|
125
|
+
if (provider.type === 'postgresql') {
|
|
126
|
+
conditions.push(`${escapedField} ?| ${nextPlaceholder()}`);
|
|
127
|
+
params.push(value);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
// Fallback: OR of LIKE conditions
|
|
131
|
+
const likeConditions = value.map(() => {
|
|
132
|
+
const ph = nextPlaceholder();
|
|
133
|
+
return `${escapedField} LIKE ${ph}`;
|
|
134
|
+
});
|
|
135
|
+
conditions.push(`(${likeConditions.join(' OR ')})`);
|
|
136
|
+
for (const v of value) {
|
|
137
|
+
params.push(`%${v}%`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
break;
|
|
142
|
+
case '$regex':
|
|
143
|
+
if (provider.type === 'postgresql') {
|
|
144
|
+
conditions.push(`${escapedField} ~ ${nextPlaceholder()}`);
|
|
145
|
+
}
|
|
146
|
+
else if (provider.type === 'mysql' || provider.type === 'mariadb') {
|
|
147
|
+
conditions.push(`${escapedField} REGEXP ${nextPlaceholder()}`);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
// SQLite with LIKE fallback
|
|
151
|
+
conditions.push(`${escapedField} LIKE ${nextPlaceholder()}`);
|
|
152
|
+
}
|
|
153
|
+
params.push(value);
|
|
154
|
+
break;
|
|
155
|
+
case '$exists':
|
|
156
|
+
if (value) {
|
|
157
|
+
conditions.push(`${escapedField} IS NOT NULL`);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
conditions.push(`${escapedField} IS NULL`);
|
|
161
|
+
}
|
|
162
|
+
break;
|
|
163
|
+
default:
|
|
164
|
+
// Unknown operator, treat as nested object for JSON
|
|
165
|
+
if (provider.type === 'postgresql') {
|
|
166
|
+
conditions.push(`${escapedField} @> ${nextPlaceholder()}::jsonb`);
|
|
167
|
+
params.push(JSON.stringify({ [op]: value }));
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return conditions;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Build ORDER BY clause
|
|
175
|
+
*/
|
|
176
|
+
function buildOrderBy(sort) {
|
|
177
|
+
if (sort.length === 0)
|
|
178
|
+
return '';
|
|
179
|
+
const clauses = sort.map((s) => {
|
|
180
|
+
const dir = s.direction === 'desc' ? 'DESC' : 'ASC';
|
|
181
|
+
return `${escapeIdentifier(s.field)} ${dir}`;
|
|
182
|
+
});
|
|
183
|
+
return ` ORDER BY ${clauses.join(', ')}`;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Build SELECT query
|
|
187
|
+
*/
|
|
188
|
+
function select(table, query = {}, options = {}) {
|
|
189
|
+
resetParams();
|
|
190
|
+
const params = [];
|
|
191
|
+
// Fields
|
|
192
|
+
const fields = options.fields && options.fields.length > 0
|
|
193
|
+
? options.fields.map((f) => escapeIdentifier(f)).join(', ')
|
|
194
|
+
: '*';
|
|
195
|
+
// WHERE
|
|
196
|
+
const where = buildWhere(query, params);
|
|
197
|
+
// ORDER BY
|
|
198
|
+
const orderBy = options.sort ? buildOrderBy(options.sort) : '';
|
|
199
|
+
// LIMIT/OFFSET
|
|
200
|
+
let limitOffset = '';
|
|
201
|
+
if (options.limit !== undefined) {
|
|
202
|
+
limitOffset += ` LIMIT ${nextPlaceholder()}`;
|
|
203
|
+
params.push(options.limit);
|
|
204
|
+
}
|
|
205
|
+
if (options.offset !== undefined) {
|
|
206
|
+
limitOffset += ` OFFSET ${nextPlaceholder()}`;
|
|
207
|
+
params.push(options.offset);
|
|
208
|
+
}
|
|
209
|
+
const sql = `SELECT ${fields} FROM ${escapeIdentifier(table)} WHERE ${where}${orderBy}${limitOffset}`;
|
|
210
|
+
return { sql, params };
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Build INSERT query
|
|
214
|
+
*/
|
|
215
|
+
function insert(table, data) {
|
|
216
|
+
resetParams();
|
|
217
|
+
const params = [];
|
|
218
|
+
const columns = [];
|
|
219
|
+
const placeholders = [];
|
|
220
|
+
for (const [key, value] of Object.entries(data)) {
|
|
221
|
+
columns.push(escapeIdentifier(key));
|
|
222
|
+
placeholders.push(nextPlaceholder());
|
|
223
|
+
params.push(value);
|
|
224
|
+
}
|
|
225
|
+
const sql = `INSERT INTO ${escapeIdentifier(table)} (${columns.join(', ')}) VALUES (${placeholders.join(', ')})`;
|
|
226
|
+
return { sql, params };
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Build UPDATE query
|
|
230
|
+
*/
|
|
231
|
+
function update(table, data, query = {}) {
|
|
232
|
+
resetParams();
|
|
233
|
+
const params = [];
|
|
234
|
+
const setClauses = [];
|
|
235
|
+
for (const [key, value] of Object.entries(data)) {
|
|
236
|
+
setClauses.push(`${escapeIdentifier(key)} = ${nextPlaceholder()}`);
|
|
237
|
+
params.push(value);
|
|
238
|
+
}
|
|
239
|
+
const where = buildWhere(query, params);
|
|
240
|
+
const sql = `UPDATE ${escapeIdentifier(table)} SET ${setClauses.join(', ')} WHERE ${where}`;
|
|
241
|
+
return { sql, params };
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Build DELETE query
|
|
245
|
+
*/
|
|
246
|
+
function deleteQuery(table, query = {}) {
|
|
247
|
+
resetParams();
|
|
248
|
+
const params = [];
|
|
249
|
+
const where = buildWhere(query, params);
|
|
250
|
+
const sql = `DELETE FROM ${escapeIdentifier(table)} WHERE ${where}`;
|
|
251
|
+
return { sql, params };
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Build COUNT query
|
|
255
|
+
*/
|
|
256
|
+
function count(table, query = {}) {
|
|
257
|
+
resetParams();
|
|
258
|
+
const params = [];
|
|
259
|
+
const where = buildWhere(query, params);
|
|
260
|
+
const sql = `SELECT COUNT(*) as count FROM ${escapeIdentifier(table)} WHERE ${where}`;
|
|
261
|
+
return { sql, params };
|
|
262
|
+
}
|
|
263
|
+
return {
|
|
264
|
+
select,
|
|
265
|
+
insert,
|
|
266
|
+
update,
|
|
267
|
+
delete: deleteQuery,
|
|
268
|
+
count,
|
|
269
|
+
escapeIdentifier,
|
|
270
|
+
getPlaceholder,
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Create query builder from provider type
|
|
275
|
+
*/
|
|
276
|
+
export function createQueryBuilderForType(_type) {
|
|
277
|
+
return (provider) => createQueryBuilder(provider);
|
|
278
|
+
}
|
|
279
|
+
//# sourceMappingURL=builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/query/builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query Layer Index
|
|
3
|
+
*
|
|
4
|
+
* Query building and transformation utilities.
|
|
5
|
+
*/
|
|
6
|
+
export { createQueryBuilder, createQueryBuilderForType } from './builder.js';
|
|
7
|
+
export type { QueryBuilder, LokiQuery, LokiOperator, SortOption, SortDirection, QueryOptions, BuiltQuery, } from './builder.js';
|
|
8
|
+
export { createRowTransformer, createAutoMapping, createEntryTransformer, createContentTypeTransformer, snakeCase, } from './transformer.js';
|
|
9
|
+
export type { RowTransformer, FieldMapping, SchemaMapping, } from './transformer.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|