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,293 @@
1
+ /**
2
+ * MariaDB Provider
3
+ *
4
+ * MariaDB database provider with vector support detection (MariaDB 11.6+).
5
+ * Uses mysql2 driver for compatibility.
6
+ */
7
+ import { BaseProvider } from './base.js';
8
+ // Dynamic import for mysql2 (compatible with MariaDB)
9
+ let mysql2 = null;
10
+ async function getMySQL() {
11
+ if (!mysql2) {
12
+ try {
13
+ mysql2 = await import('mysql2/promise');
14
+ }
15
+ catch {
16
+ throw new Error('mysql2 package not installed. Install with: npm install mysql2');
17
+ }
18
+ }
19
+ return mysql2;
20
+ }
21
+ /**
22
+ * MariaDB Provider
23
+ */
24
+ export class MariaDBProvider extends BaseProvider {
25
+ pool = null;
26
+ connection = null;
27
+ capabilities = null;
28
+ version = '';
29
+ constructor(options) {
30
+ super({ ...options, type: 'mariadb' });
31
+ }
32
+ /**
33
+ * Connect to MariaDB
34
+ */
35
+ async connect() {
36
+ if (this.connected)
37
+ return;
38
+ const mysql = await getMySQL();
39
+ const config = this.config;
40
+ this.pool = mysql.createPool({
41
+ host: config.host,
42
+ port: config.port ?? 3306,
43
+ database: config.database,
44
+ user: config.user,
45
+ password: config.password,
46
+ ssl: config.ssl,
47
+ waitForConnections: true,
48
+ connectionLimit: 10,
49
+ queueLimit: 0,
50
+ enableKeepAlive: true,
51
+ });
52
+ // Test connection
53
+ const testConn = await this.pool.getConnection();
54
+ testConn.release();
55
+ this.connected = true;
56
+ this.logger.info('MariaDB connected');
57
+ // Detect capabilities
58
+ this.capabilities = await this.detectCapabilities();
59
+ }
60
+ /**
61
+ * Disconnect from MariaDB
62
+ */
63
+ async disconnect() {
64
+ if (this.connection) {
65
+ this.connection.release();
66
+ this.connection = null;
67
+ }
68
+ if (this.pool) {
69
+ await this.pool.end();
70
+ this.pool = null;
71
+ }
72
+ this.connected = false;
73
+ this.logger.info('MariaDB disconnected');
74
+ }
75
+ /**
76
+ * Detect database capabilities
77
+ */
78
+ async detectCapabilities() {
79
+ const caps = {
80
+ json: true, // MariaDB 10.2+ has JSON
81
+ vectors: false,
82
+ fullText: true,
83
+ fullTextMethod: 'FULLTEXT',
84
+ transactions: true,
85
+ };
86
+ // Get version
87
+ try {
88
+ const result = await this.query('SELECT VERSION() as version');
89
+ if (result.rows.length > 0) {
90
+ this.version = result.rows[0].version;
91
+ // MariaDB 11.6+ supports VECTOR type with HNSW indexing
92
+ // Version format: 11.6.0-MariaDB
93
+ const versionMatch = this.version.match(/^(\d+)\.(\d+)/);
94
+ if (versionMatch) {
95
+ const major = parseInt(versionMatch[1], 10);
96
+ const minor = parseInt(versionMatch[2], 10);
97
+ if (major > 11 || (major === 11 && minor >= 6)) {
98
+ caps.vectors = true;
99
+ caps.vectorInfo = `MariaDB ${this.version} native VECTOR with HNSW`;
100
+ }
101
+ }
102
+ }
103
+ }
104
+ catch {
105
+ // Ignore
106
+ }
107
+ // Get max connections
108
+ try {
109
+ const result = await this.query("SHOW VARIABLES LIKE 'max_connections'");
110
+ if (result.rows.length > 0) {
111
+ caps.maxConnections = parseInt(result.rows[0].Value, 10);
112
+ }
113
+ }
114
+ catch {
115
+ // Ignore
116
+ }
117
+ return caps;
118
+ }
119
+ /**
120
+ * Get capabilities
121
+ */
122
+ async getCapabilities() {
123
+ if (!this.capabilities) {
124
+ this.capabilities = await this.detectCapabilities();
125
+ }
126
+ return this.capabilities;
127
+ }
128
+ /**
129
+ * Execute a query
130
+ */
131
+ async query(sql, params) {
132
+ this.assertConnected();
133
+ this.logQuery(sql, params);
134
+ const conn = this.connection ?? this.pool;
135
+ const [rows, fields] = await conn.query(sql, params);
136
+ const resultRows = Array.isArray(rows) ? rows : [];
137
+ return {
138
+ rows: resultRows,
139
+ rowCount: resultRows.length,
140
+ fields: fields?.map((f) => ({
141
+ name: f.name,
142
+ dataType: String(f.type ?? 0),
143
+ })),
144
+ };
145
+ }
146
+ /**
147
+ * Execute a non-query statement
148
+ */
149
+ async execute(sql, params) {
150
+ this.assertConnected();
151
+ this.assertWritable();
152
+ this.logQuery(sql, params);
153
+ const conn = this.connection ?? this.pool;
154
+ const [result] = await conn.execute(sql, params);
155
+ return result.affectedRows ?? 0;
156
+ }
157
+ /**
158
+ * Begin transaction
159
+ */
160
+ async beginTransaction() {
161
+ this.assertConnected();
162
+ if (this.inTransaction) {
163
+ throw new Error('Transaction already in progress');
164
+ }
165
+ this.connection = await this.pool.getConnection();
166
+ await this.connection.beginTransaction();
167
+ this.inTransaction = true;
168
+ }
169
+ /**
170
+ * Commit transaction
171
+ */
172
+ async commit() {
173
+ if (!this.inTransaction || !this.connection) {
174
+ throw new Error('No transaction in progress');
175
+ }
176
+ await this.connection.commit();
177
+ this.connection.release();
178
+ this.connection = null;
179
+ this.inTransaction = false;
180
+ }
181
+ /**
182
+ * Rollback transaction
183
+ */
184
+ async rollback() {
185
+ if (!this.inTransaction || !this.connection) {
186
+ throw new Error('No transaction in progress');
187
+ }
188
+ await this.connection.rollback();
189
+ this.connection.release();
190
+ this.connection = null;
191
+ this.inTransaction = false;
192
+ }
193
+ /**
194
+ * Get database schema
195
+ */
196
+ async getSchema() {
197
+ this.assertConnected();
198
+ // Get tables
199
+ const tablesResult = await this.query(`SELECT TABLE_NAME
200
+ FROM information_schema.TABLES
201
+ WHERE TABLE_SCHEMA = DATABASE()
202
+ AND TABLE_TYPE = 'BASE TABLE'
203
+ ORDER BY TABLE_NAME`);
204
+ const tables = [];
205
+ for (const row of tablesResult.rows) {
206
+ const info = await this.getTableInfo(row.TABLE_NAME);
207
+ if (info)
208
+ tables.push(info);
209
+ }
210
+ // Get views
211
+ const viewsResult = await this.query(`SELECT TABLE_NAME
212
+ FROM information_schema.VIEWS
213
+ WHERE TABLE_SCHEMA = DATABASE()
214
+ ORDER BY TABLE_NAME`);
215
+ return {
216
+ tables,
217
+ views: viewsResult.rows.map((r) => r.TABLE_NAME),
218
+ };
219
+ }
220
+ /**
221
+ * Get table info
222
+ */
223
+ async getTableInfo(tableName) {
224
+ this.assertConnected();
225
+ // Get columns
226
+ const columnsResult = await this.query(`SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT, COLUMN_KEY
227
+ FROM information_schema.COLUMNS
228
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?
229
+ ORDER BY ORDINAL_POSITION`, [tableName]);
230
+ if (columnsResult.rows.length === 0) {
231
+ return null;
232
+ }
233
+ // Get row count
234
+ const countResult = await this.query(`SELECT COUNT(*) as count FROM ${this.escapeIdentifier(tableName)}`);
235
+ const columns = columnsResult.rows.map((row) => ({
236
+ name: row.COLUMN_NAME,
237
+ type: row.DATA_TYPE,
238
+ nullable: row.IS_NULLABLE === 'YES',
239
+ primaryKey: row.COLUMN_KEY === 'PRI',
240
+ defaultValue: row.COLUMN_DEFAULT,
241
+ }));
242
+ return {
243
+ name: tableName,
244
+ columns,
245
+ rowCount: countResult.rows[0]?.count ?? 0,
246
+ };
247
+ }
248
+ /**
249
+ * Escape identifier
250
+ */
251
+ escapeIdentifier(name) {
252
+ return `\`${name.replace(/`/g, '``')}\``;
253
+ }
254
+ /**
255
+ * Get parameter placeholder
256
+ */
257
+ getPlaceholder(_index) {
258
+ return '?';
259
+ }
260
+ /**
261
+ * Map column type
262
+ */
263
+ mapColumnType(type) {
264
+ const typeMap = {
265
+ string: 'VARCHAR(255)',
266
+ text: 'TEXT',
267
+ integer: 'INT',
268
+ bigint: 'BIGINT',
269
+ float: 'FLOAT',
270
+ double: 'DOUBLE',
271
+ boolean: 'TINYINT(1)',
272
+ date: 'DATE',
273
+ datetime: 'DATETIME',
274
+ json: 'JSON',
275
+ blob: 'BLOB',
276
+ vector: 'VECTOR', // MariaDB 11.6+ native VECTOR type
277
+ };
278
+ return typeMap[type.toLowerCase()] ?? type;
279
+ }
280
+ /**
281
+ * Get MariaDB version
282
+ */
283
+ getVersion() {
284
+ return this.version;
285
+ }
286
+ /**
287
+ * Check if this is actually MariaDB (not MySQL)
288
+ */
289
+ isMariaDB() {
290
+ return this.version.toLowerCase().includes('mariadb');
291
+ }
292
+ }
293
+ //# sourceMappingURL=mariadb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mariadb.js","sourceRoot":"","sources":["../../src/providers/mariadb.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * MySQL Provider
3
+ *
4
+ * MySQL database provider with vector support detection (MySQL 9+).
5
+ */
6
+ import type { ProviderCapabilities, QueryResult, DatabaseSchema, TableInfo } from '../types.js';
7
+ import { BaseProvider, BaseProviderOptions } from './base.js';
8
+ /**
9
+ * MySQL Provider
10
+ */
11
+ export declare class MySQLProvider extends BaseProvider {
12
+ private pool;
13
+ private connection;
14
+ private capabilities;
15
+ private version;
16
+ constructor(options: BaseProviderOptions);
17
+ /**
18
+ * Connect to MySQL
19
+ */
20
+ connect(): Promise<void>;
21
+ /**
22
+ * Disconnect from MySQL
23
+ */
24
+ disconnect(): Promise<void>;
25
+ /**
26
+ * Detect database capabilities
27
+ */
28
+ private detectCapabilities;
29
+ /**
30
+ * Get capabilities
31
+ */
32
+ getCapabilities(): Promise<ProviderCapabilities>;
33
+ /**
34
+ * Execute a query
35
+ */
36
+ query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<QueryResult<T>>;
37
+ /**
38
+ * Execute a non-query statement
39
+ */
40
+ execute(sql: string, params?: unknown[]): Promise<number>;
41
+ /**
42
+ * Begin transaction
43
+ */
44
+ beginTransaction(): Promise<void>;
45
+ /**
46
+ * Commit transaction
47
+ */
48
+ commit(): Promise<void>;
49
+ /**
50
+ * Rollback transaction
51
+ */
52
+ rollback(): Promise<void>;
53
+ /**
54
+ * Get database schema
55
+ */
56
+ getSchema(): Promise<DatabaseSchema>;
57
+ /**
58
+ * Get table info
59
+ */
60
+ getTableInfo(tableName: string): Promise<TableInfo | null>;
61
+ /**
62
+ * Escape identifier
63
+ */
64
+ escapeIdentifier(name: string): string;
65
+ /**
66
+ * Get parameter placeholder
67
+ */
68
+ getPlaceholder(_index: number): string;
69
+ /**
70
+ * Map column type
71
+ */
72
+ protected mapColumnType(type: string): string;
73
+ /**
74
+ * Get MySQL version
75
+ */
76
+ getVersion(): string;
77
+ }
78
+ //# sourceMappingURL=mysql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../../src/providers/mysql.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAEV,oBAAoB,EACpB,WAAW,EACX,cAAc,EACd,SAAS,EAEV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAkB9D;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,IAAI,CAA8C;IAC1D,OAAO,CAAC,UAAU,CAAwD;IAC1E,OAAO,CAAC,YAAY,CAAqC;IACzD,OAAO,CAAC,OAAO,CAAc;gBAEjB,OAAO,EAAE,mBAAmB;IAIxC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAejC;;OAEG;YACW,kBAAkB;IA8ChC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAOtD;;OAEG;IACG,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAmB1B;;OAEG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAW/D;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAYvC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAW7B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAW/B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC;IAgC1C;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IA0ChE;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAItC;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAItC;;OAEG;cACgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAmBtD;;OAEG;IACH,UAAU,IAAI,MAAM;CAGrB"}
@@ -0,0 +1,284 @@
1
+ /**
2
+ * MySQL Provider
3
+ *
4
+ * MySQL database provider with vector support detection (MySQL 9+).
5
+ */
6
+ import { BaseProvider } from './base.js';
7
+ // Dynamic import for mysql2
8
+ let mysql2 = null;
9
+ async function getMySQL() {
10
+ if (!mysql2) {
11
+ try {
12
+ mysql2 = await import('mysql2/promise');
13
+ }
14
+ catch {
15
+ throw new Error('mysql2 package not installed. Install with: npm install mysql2');
16
+ }
17
+ }
18
+ return mysql2;
19
+ }
20
+ /**
21
+ * MySQL Provider
22
+ */
23
+ export class MySQLProvider extends BaseProvider {
24
+ pool = null;
25
+ connection = null;
26
+ capabilities = null;
27
+ version = '';
28
+ constructor(options) {
29
+ super({ ...options, type: 'mysql' });
30
+ }
31
+ /**
32
+ * Connect to MySQL
33
+ */
34
+ async connect() {
35
+ if (this.connected)
36
+ return;
37
+ const mysql = await getMySQL();
38
+ const config = this.config;
39
+ this.pool = mysql.createPool({
40
+ host: config.host,
41
+ port: config.port ?? 3306,
42
+ database: config.database,
43
+ user: config.user,
44
+ password: config.password,
45
+ ssl: config.ssl,
46
+ waitForConnections: true,
47
+ connectionLimit: 10,
48
+ queueLimit: 0,
49
+ enableKeepAlive: true,
50
+ });
51
+ // Test connection
52
+ const testConn = await this.pool.getConnection();
53
+ testConn.release();
54
+ this.connected = true;
55
+ this.logger.info('MySQL connected');
56
+ // Detect capabilities
57
+ this.capabilities = await this.detectCapabilities();
58
+ }
59
+ /**
60
+ * Disconnect from MySQL
61
+ */
62
+ async disconnect() {
63
+ if (this.connection) {
64
+ this.connection.release();
65
+ this.connection = null;
66
+ }
67
+ if (this.pool) {
68
+ await this.pool.end();
69
+ this.pool = null;
70
+ }
71
+ this.connected = false;
72
+ this.logger.info('MySQL disconnected');
73
+ }
74
+ /**
75
+ * Detect database capabilities
76
+ */
77
+ async detectCapabilities() {
78
+ const caps = {
79
+ json: true, // MySQL 5.7+ has JSON type
80
+ vectors: false,
81
+ fullText: true,
82
+ fullTextMethod: 'FULLTEXT',
83
+ transactions: true,
84
+ };
85
+ // Get version
86
+ try {
87
+ const result = await this.query('SELECT VERSION() as version');
88
+ if (result.rows.length > 0) {
89
+ this.version = result.rows[0].version;
90
+ // MySQL 9.0+ supports VECTOR type
91
+ const versionMatch = this.version.match(/^(\d+)\.(\d+)/);
92
+ if (versionMatch) {
93
+ const major = parseInt(versionMatch[1], 10);
94
+ if (major >= 9) {
95
+ caps.vectors = true;
96
+ caps.vectorInfo = `MySQL ${this.version} native VECTOR`;
97
+ }
98
+ }
99
+ }
100
+ }
101
+ catch {
102
+ // Ignore
103
+ }
104
+ // Get max connections
105
+ try {
106
+ const result = await this.query("SHOW VARIABLES LIKE 'max_connections'");
107
+ if (result.rows.length > 0) {
108
+ caps.maxConnections = parseInt(result.rows[0].Value, 10);
109
+ }
110
+ }
111
+ catch {
112
+ // Ignore
113
+ }
114
+ return caps;
115
+ }
116
+ /**
117
+ * Get capabilities
118
+ */
119
+ async getCapabilities() {
120
+ if (!this.capabilities) {
121
+ this.capabilities = await this.detectCapabilities();
122
+ }
123
+ return this.capabilities;
124
+ }
125
+ /**
126
+ * Execute a query
127
+ */
128
+ async query(sql, params) {
129
+ this.assertConnected();
130
+ this.logQuery(sql, params);
131
+ const conn = this.connection ?? this.pool;
132
+ const [rows, fields] = await conn.query(sql, params);
133
+ const resultRows = Array.isArray(rows) ? rows : [];
134
+ return {
135
+ rows: resultRows,
136
+ rowCount: resultRows.length,
137
+ fields: fields?.map((f) => ({
138
+ name: f.name,
139
+ dataType: String(f.type ?? 0),
140
+ })),
141
+ };
142
+ }
143
+ /**
144
+ * Execute a non-query statement
145
+ */
146
+ async execute(sql, params) {
147
+ this.assertConnected();
148
+ this.assertWritable();
149
+ this.logQuery(sql, params);
150
+ const conn = this.connection ?? this.pool;
151
+ const [result] = await conn.execute(sql, params);
152
+ return result.affectedRows ?? 0;
153
+ }
154
+ /**
155
+ * Begin transaction
156
+ */
157
+ async beginTransaction() {
158
+ this.assertConnected();
159
+ if (this.inTransaction) {
160
+ throw new Error('Transaction already in progress');
161
+ }
162
+ this.connection = await this.pool.getConnection();
163
+ await this.connection.beginTransaction();
164
+ this.inTransaction = true;
165
+ }
166
+ /**
167
+ * Commit transaction
168
+ */
169
+ async commit() {
170
+ if (!this.inTransaction || !this.connection) {
171
+ throw new Error('No transaction in progress');
172
+ }
173
+ await this.connection.commit();
174
+ this.connection.release();
175
+ this.connection = null;
176
+ this.inTransaction = false;
177
+ }
178
+ /**
179
+ * Rollback transaction
180
+ */
181
+ async rollback() {
182
+ if (!this.inTransaction || !this.connection) {
183
+ throw new Error('No transaction in progress');
184
+ }
185
+ await this.connection.rollback();
186
+ this.connection.release();
187
+ this.connection = null;
188
+ this.inTransaction = false;
189
+ }
190
+ /**
191
+ * Get database schema
192
+ */
193
+ async getSchema() {
194
+ this.assertConnected();
195
+ // Get tables
196
+ const tablesResult = await this.query(`SELECT TABLE_NAME
197
+ FROM information_schema.TABLES
198
+ WHERE TABLE_SCHEMA = DATABASE()
199
+ AND TABLE_TYPE = 'BASE TABLE'
200
+ ORDER BY TABLE_NAME`);
201
+ const tables = [];
202
+ for (const row of tablesResult.rows) {
203
+ const info = await this.getTableInfo(row.TABLE_NAME);
204
+ if (info)
205
+ tables.push(info);
206
+ }
207
+ // Get views
208
+ const viewsResult = await this.query(`SELECT TABLE_NAME
209
+ FROM information_schema.VIEWS
210
+ WHERE TABLE_SCHEMA = DATABASE()
211
+ ORDER BY TABLE_NAME`);
212
+ return {
213
+ tables,
214
+ views: viewsResult.rows.map((r) => r.TABLE_NAME),
215
+ };
216
+ }
217
+ /**
218
+ * Get table info
219
+ */
220
+ async getTableInfo(tableName) {
221
+ this.assertConnected();
222
+ // Get columns
223
+ const columnsResult = await this.query(`SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT, COLUMN_KEY
224
+ FROM information_schema.COLUMNS
225
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?
226
+ ORDER BY ORDINAL_POSITION`, [tableName]);
227
+ if (columnsResult.rows.length === 0) {
228
+ return null;
229
+ }
230
+ // Get row count
231
+ const countResult = await this.query(`SELECT COUNT(*) as count FROM ${this.escapeIdentifier(tableName)}`);
232
+ const columns = columnsResult.rows.map((row) => ({
233
+ name: row.COLUMN_NAME,
234
+ type: row.DATA_TYPE,
235
+ nullable: row.IS_NULLABLE === 'YES',
236
+ primaryKey: row.COLUMN_KEY === 'PRI',
237
+ defaultValue: row.COLUMN_DEFAULT,
238
+ }));
239
+ return {
240
+ name: tableName,
241
+ columns,
242
+ rowCount: countResult.rows[0]?.count ?? 0,
243
+ };
244
+ }
245
+ /**
246
+ * Escape identifier
247
+ */
248
+ escapeIdentifier(name) {
249
+ return `\`${name.replace(/`/g, '``')}\``;
250
+ }
251
+ /**
252
+ * Get parameter placeholder
253
+ */
254
+ getPlaceholder(_index) {
255
+ return '?';
256
+ }
257
+ /**
258
+ * Map column type
259
+ */
260
+ mapColumnType(type) {
261
+ const typeMap = {
262
+ string: 'VARCHAR(255)',
263
+ text: 'TEXT',
264
+ integer: 'INT',
265
+ bigint: 'BIGINT',
266
+ float: 'FLOAT',
267
+ double: 'DOUBLE',
268
+ boolean: 'TINYINT(1)',
269
+ date: 'DATE',
270
+ datetime: 'DATETIME',
271
+ json: 'JSON',
272
+ blob: 'BLOB',
273
+ vector: 'VECTOR', // MySQL 9+ native VECTOR type
274
+ };
275
+ return typeMap[type.toLowerCase()] ?? type;
276
+ }
277
+ /**
278
+ * Get MySQL version
279
+ */
280
+ getVersion() {
281
+ return this.version;
282
+ }
283
+ }
284
+ //# sourceMappingURL=mysql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql.js","sourceRoot":"","sources":["../../src/providers/mysql.ts"],"names":[],"mappings":"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"}