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,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