sqlew 3.5.3 → 3.6.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/CHANGELOG.md +247 -1772
- package/README.md +70 -304
- package/assets/config.example.toml +97 -0
- package/dist/adapters/index.d.ts +11 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +21 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/mysql-adapter.d.ts +31 -0
- package/dist/adapters/mysql-adapter.d.ts.map +1 -0
- package/dist/adapters/mysql-adapter.js +63 -0
- package/dist/adapters/mysql-adapter.js.map +1 -0
- package/dist/adapters/postgresql-adapter.d.ts +31 -0
- package/dist/adapters/postgresql-adapter.d.ts.map +1 -0
- package/dist/adapters/postgresql-adapter.js +63 -0
- package/dist/adapters/postgresql-adapter.js.map +1 -0
- package/dist/adapters/sqlite-adapter.d.ts +37 -0
- package/dist/adapters/sqlite-adapter.d.ts.map +1 -0
- package/dist/adapters/sqlite-adapter.js +129 -0
- package/dist/adapters/sqlite-adapter.js.map +1 -0
- package/dist/adapters/types.d.ts +33 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +2 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/cli.js +55 -54
- package/dist/cli.js.map +1 -1
- package/dist/config/example-generator.d.ts +11 -0
- package/dist/config/example-generator.d.ts.map +1 -0
- package/dist/config/example-generator.js +48 -0
- package/dist/config/example-generator.js.map +1 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +4 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/config/types.d.ts +9 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/database.d.ts +44 -122
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +145 -416
- package/dist/database.js.map +1 -1
- package/dist/index.js +215 -185
- package/dist/index.js.map +1 -1
- package/dist/knexfile.d.ts +6 -0
- package/dist/knexfile.d.ts.map +1 -0
- package/dist/knexfile.js +85 -0
- package/dist/knexfile.js.map +1 -0
- package/dist/migrations/add-help-system-tables.d.ts +35 -0
- package/dist/migrations/add-help-system-tables.d.ts.map +1 -0
- package/dist/migrations/add-help-system-tables.js +206 -0
- package/dist/migrations/add-help-system-tables.js.map +1 -0
- package/dist/migrations/add-token-tracking.d.ts +28 -0
- package/dist/migrations/add-token-tracking.d.ts.map +1 -0
- package/dist/migrations/add-token-tracking.js +108 -0
- package/dist/migrations/add-token-tracking.js.map +1 -0
- package/dist/migrations/index.d.ts +25 -12
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +147 -20
- package/dist/migrations/index.js.map +1 -1
- package/dist/migrations/knex/20251025020452_create_master_tables.d.ts +4 -0
- package/dist/migrations/knex/20251025020452_create_master_tables.d.ts.map +1 -0
- package/dist/migrations/knex/20251025020452_create_master_tables.js +65 -0
- package/dist/migrations/knex/20251025020452_create_master_tables.js.map +1 -0
- package/dist/migrations/knex/20251025021152_create_transaction_tables.d.ts +4 -0
- package/dist/migrations/knex/20251025021152_create_transaction_tables.d.ts.map +1 -0
- package/dist/migrations/knex/20251025021152_create_transaction_tables.js +235 -0
- package/dist/migrations/knex/20251025021152_create_transaction_tables.js.map +1 -0
- package/dist/migrations/knex/20251025021351_create_indexes.d.ts +4 -0
- package/dist/migrations/knex/20251025021351_create_indexes.d.ts.map +1 -0
- package/dist/migrations/knex/20251025021351_create_indexes.js +62 -0
- package/dist/migrations/knex/20251025021351_create_indexes.js.map +1 -0
- package/dist/migrations/knex/20251025021416_seed_master_data.d.ts +4 -0
- package/dist/migrations/knex/20251025021416_seed_master_data.d.ts.map +1 -0
- package/dist/migrations/knex/20251025021416_seed_master_data.js +58 -0
- package/dist/migrations/knex/20251025021416_seed_master_data.js.map +1 -0
- package/dist/migrations/knex/20251025070349_create_views.d.ts +4 -0
- package/dist/migrations/knex/20251025070349_create_views.d.ts.map +1 -0
- package/dist/migrations/knex/20251025070349_create_views.js +143 -0
- package/dist/migrations/knex/20251025070349_create_views.js.map +1 -0
- package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.d.ts +4 -0
- package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.d.ts.map +1 -0
- package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.js +15 -0
- package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.js.map +1 -0
- package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.d.ts +8 -0
- package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.d.ts.map +1 -0
- package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.js +12 -0
- package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.js.map +1 -0
- package/dist/migrations/knex/20251025090000_create_help_system_tables.d.ts +19 -0
- package/dist/migrations/knex/20251025090000_create_help_system_tables.d.ts.map +1 -0
- package/dist/migrations/knex/20251025090000_create_help_system_tables.js +115 -0
- package/dist/migrations/knex/20251025090000_create_help_system_tables.js.map +1 -0
- package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.d.ts +13 -0
- package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.d.ts.map +1 -0
- package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.js +377 -0
- package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.js.map +1 -0
- package/dist/migrations/knex/20251025100000_seed_help_metadata.d.ts +15 -0
- package/dist/migrations/knex/20251025100000_seed_help_metadata.d.ts.map +1 -0
- package/dist/migrations/knex/20251025100000_seed_help_metadata.js +253 -0
- package/dist/migrations/knex/20251025100000_seed_help_metadata.js.map +1 -0
- package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.d.ts +16 -0
- package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.d.ts.map +1 -0
- package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.js +276 -0
- package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.js.map +1 -0
- package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.d.ts +8 -0
- package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.d.ts.map +1 -0
- package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.js +64 -0
- package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.js.map +1 -0
- package/dist/migrations/seed-help-data.d.ts +48 -0
- package/dist/migrations/seed-help-data.d.ts.map +1 -0
- package/dist/migrations/seed-help-data.js +1466 -0
- package/dist/migrations/seed-help-data.js.map +1 -0
- package/dist/migrations/seed-tool-metadata.d.ts +24 -0
- package/dist/migrations/seed-tool-metadata.d.ts.map +1 -0
- package/dist/migrations/seed-tool-metadata.js +392 -0
- package/dist/migrations/seed-tool-metadata.js.map +1 -0
- package/dist/migrations/v3.6.0-help-system-refactor.d.ts +46 -0
- package/dist/migrations/v3.6.0-help-system-refactor.d.ts.map +1 -0
- package/dist/migrations/v3.6.0-help-system-refactor.js +223 -0
- package/dist/migrations/v3.6.0-help-system-refactor.js.map +1 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +2 -0
- package/dist/schema.js.map +1 -1
- package/dist/tests/git-aware-completion.test.js +89 -70
- package/dist/tests/git-aware-completion.test.js.map +1 -1
- package/dist/tests/help-system.test.d.ts +23 -0
- package/dist/tests/help-system.test.d.ts.map +1 -0
- package/dist/tests/help-system.test.js +374 -0
- package/dist/tests/help-system.test.js.map +1 -0
- package/dist/tests/tasks.auto-pruning-decision-link.test.js +92 -78
- package/dist/tests/tasks.auto-pruning-decision-link.test.js.map +1 -1
- package/dist/tests/tasks.auto-pruning-partial.test.js +106 -95
- package/dist/tests/tasks.auto-pruning-partial.test.js.map +1 -1
- package/dist/tests/tasks.auto-pruning-persistence.test.js +115 -97
- package/dist/tests/tasks.auto-pruning-persistence.test.js.map +1 -1
- package/dist/tests/tasks.auto-pruning-safety.test.js +124 -103
- package/dist/tests/tasks.auto-pruning-safety.test.js.map +1 -1
- package/dist/tests/tasks.dependencies.test.js +338 -307
- package/dist/tests/tasks.dependencies.test.js.map +1 -1
- package/dist/tests/tasks.link-file-backward-compat.test.js +116 -104
- package/dist/tests/tasks.link-file-backward-compat.test.js.map +1 -1
- package/dist/tests/tasks.watch-files-action.test.js +122 -101
- package/dist/tests/tasks.watch-files-action.test.js.map +1 -1
- package/dist/tests/tasks.watch-files-parameter.test.js +105 -94
- package/dist/tests/tasks.watch-files-parameter.test.js.map +1 -1
- package/dist/tests/two-step-git-completion.test.js +176 -133
- package/dist/tests/two-step-git-completion.test.js.map +1 -1
- package/dist/tests/vcs-staging.test.js +1 -1
- package/dist/tests/vcs-staging.test.js.map +1 -1
- package/dist/tools/config.d.ts +9 -6
- package/dist/tools/config.d.ts.map +1 -1
- package/dist/tools/config.js +16 -14
- package/dist/tools/config.js.map +1 -1
- package/dist/tools/constraints.d.ts +10 -7
- package/dist/tools/constraints.d.ts.map +1 -1
- package/dist/tools/constraints.js +66 -48
- package/dist/tools/constraints.js.map +1 -1
- package/dist/tools/context.d.ts +36 -33
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +374 -330
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/files.d.ts +12 -9
- package/dist/tools/files.d.ts.map +1 -1
- package/dist/tools/files.js +173 -95
- package/dist/tools/files.js.map +1 -1
- package/dist/tools/help-queries.d.ts +130 -0
- package/dist/tools/help-queries.d.ts.map +1 -0
- package/dist/tools/help-queries.js +393 -0
- package/dist/tools/help-queries.js.map +1 -0
- package/dist/tools/messaging.d.ts +14 -11
- package/dist/tools/messaging.d.ts.map +1 -1
- package/dist/tools/messaging.js +217 -133
- package/dist/tools/messaging.js.map +1 -1
- package/dist/tools/tasks.d.ts +18 -16
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +513 -439
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/utils.d.ts +14 -11
- package/dist/tools/utils.d.ts.map +1 -1
- package/dist/tools/utils.js +86 -121
- package/dist/tools/utils.js.map +1 -1
- package/dist/utils/activity-logging.d.ts +114 -0
- package/dist/utils/activity-logging.d.ts.map +1 -0
- package/dist/utils/activity-logging.js +162 -0
- package/dist/utils/activity-logging.js.map +1 -0
- package/dist/utils/batch.d.ts +2 -2
- package/dist/utils/batch.d.ts.map +1 -1
- package/dist/utils/batch.js +8 -8
- package/dist/utils/batch.js.map +1 -1
- package/dist/utils/cleanup.d.ts +21 -13
- package/dist/utils/cleanup.d.ts.map +1 -1
- package/dist/utils/cleanup.js +31 -24
- package/dist/utils/cleanup.js.map +1 -1
- package/dist/utils/debug-logger.d.ts +44 -0
- package/dist/utils/debug-logger.d.ts.map +1 -0
- package/dist/utils/debug-logger.js +116 -0
- package/dist/utils/debug-logger.js.map +1 -0
- package/dist/utils/help-tracking.d.ts +55 -0
- package/dist/utils/help-tracking.d.ts.map +1 -0
- package/dist/utils/help-tracking.js +88 -0
- package/dist/utils/help-tracking.js.map +1 -0
- package/dist/utils/retention.d.ts +7 -7
- package/dist/utils/retention.d.ts.map +1 -1
- package/dist/utils/retention.js +12 -12
- package/dist/utils/retention.js.map +1 -1
- package/dist/utils/task-stale-detection.d.ts +15 -13
- package/dist/utils/task-stale-detection.d.ts.map +1 -1
- package/dist/utils/task-stale-detection.js +100 -302
- package/dist/utils/task-stale-detection.js.map +1 -1
- package/dist/utils/token-estimation.d.ts +72 -0
- package/dist/utils/token-estimation.d.ts.map +1 -0
- package/dist/utils/token-estimation.js +71 -0
- package/dist/utils/token-estimation.js.map +1 -0
- package/dist/utils/token-logging.d.ts +48 -0
- package/dist/utils/token-logging.d.ts.map +1 -0
- package/dist/utils/token-logging.js +112 -0
- package/dist/utils/token-logging.js.map +1 -0
- package/dist/utils/view-queries.d.ts +34 -0
- package/dist/utils/view-queries.d.ts.map +1 -0
- package/dist/utils/view-queries.js +192 -0
- package/dist/utils/view-queries.js.map +1 -0
- package/dist/watcher/file-watcher.d.ts.map +1 -1
- package/dist/watcher/file-watcher.js +25 -11
- package/dist/watcher/file-watcher.js.map +1 -1
- package/docs/BEST_PRACTICES.md +56 -448
- package/docs/MIGRATION_v3.6.0.md +170 -0
- package/docs/SHARED_CONCEPTS.md +63 -208
- package/docs/TASK_OVERVIEW.md +2 -2
- package/docs/TOOL_SELECTION.md +41 -248
- package/package.json +16 -4
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// src/adapters/mysql-adapter.ts
|
|
2
|
+
import knexLib from 'knex';
|
|
3
|
+
const { knex } = knexLib;
|
|
4
|
+
export class MySQLAdapter {
|
|
5
|
+
knexInstance = null;
|
|
6
|
+
// Feature detection
|
|
7
|
+
supportsReturning = false;
|
|
8
|
+
supportsJSON = true;
|
|
9
|
+
supportsUpsert = true;
|
|
10
|
+
supportsCTE = true;
|
|
11
|
+
supportsWindowFunctions = true;
|
|
12
|
+
supportsSavepoints = true;
|
|
13
|
+
databaseName = 'mysql';
|
|
14
|
+
async connect(config) {
|
|
15
|
+
throw new Error('MySQL adapter not implemented yet. Planned for Phase 3.');
|
|
16
|
+
}
|
|
17
|
+
async disconnect() {
|
|
18
|
+
throw new Error('MySQL adapter not implemented yet. Planned for Phase 3.');
|
|
19
|
+
}
|
|
20
|
+
getKnex() {
|
|
21
|
+
throw new Error('MySQL adapter not implemented yet. Planned for Phase 3.');
|
|
22
|
+
}
|
|
23
|
+
async insertReturning(table, data) {
|
|
24
|
+
throw new Error('MySQL adapter not implemented yet. Planned for Phase 3.');
|
|
25
|
+
}
|
|
26
|
+
async upsert(table, data, conflictColumns, updateColumns) {
|
|
27
|
+
throw new Error('MySQL adapter not implemented yet. Planned for Phase 3.');
|
|
28
|
+
}
|
|
29
|
+
jsonExtract(column, path) {
|
|
30
|
+
throw new Error('MySQL adapter not implemented yet. Planned for Phase 3.');
|
|
31
|
+
}
|
|
32
|
+
jsonBuildObject(fields) {
|
|
33
|
+
throw new Error('MySQL adapter not implemented yet. Planned for Phase 3.');
|
|
34
|
+
}
|
|
35
|
+
currentTimestamp() {
|
|
36
|
+
throw new Error('MySQL adapter not implemented yet. Planned for Phase 3.');
|
|
37
|
+
}
|
|
38
|
+
fromUnixEpoch(epochColumn) {
|
|
39
|
+
throw new Error('MySQL adapter not implemented yet. Planned for Phase 3.');
|
|
40
|
+
}
|
|
41
|
+
toUnixEpoch(timestampColumn) {
|
|
42
|
+
throw new Error('MySQL adapter not implemented yet. Planned for Phase 3.');
|
|
43
|
+
}
|
|
44
|
+
concat(...values) {
|
|
45
|
+
throw new Error('MySQL adapter not implemented yet. Planned for Phase 3.');
|
|
46
|
+
}
|
|
47
|
+
stringAgg(column, separator) {
|
|
48
|
+
throw new Error('MySQL adapter not implemented yet. Planned for Phase 3.');
|
|
49
|
+
}
|
|
50
|
+
async transaction(callback, options) {
|
|
51
|
+
throw new Error('MySQL adapter not implemented yet. Planned for Phase 3.');
|
|
52
|
+
}
|
|
53
|
+
async savepoint(trx, callback) {
|
|
54
|
+
throw new Error('MySQL adapter not implemented yet. Planned for Phase 3.');
|
|
55
|
+
}
|
|
56
|
+
async tableExists(tableName) {
|
|
57
|
+
throw new Error('MySQL adapter not implemented yet. Planned for Phase 3.');
|
|
58
|
+
}
|
|
59
|
+
autoIncrementColumn(table, columnName) {
|
|
60
|
+
throw new Error('MySQL adapter not implemented yet. Planned for Phase 3.');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=mysql-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mysql-adapter.js","sourceRoot":"","sources":["../../src/adapters/mysql-adapter.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,OAAO,MAAM,MAAM,CAAC;AAI3B,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;AAEzB,MAAM,OAAO,YAAY;IACf,YAAY,GAAgB,IAAI,CAAC;IAEzC,oBAAoB;IACX,iBAAiB,GAAG,KAAK,CAAC;IAC1B,YAAY,GAAG,IAAI,CAAC;IACpB,cAAc,GAAG,IAAI,CAAC;IACtB,WAAW,GAAG,IAAI,CAAC;IACnB,uBAAuB,GAAG,IAAI,CAAC;IAC/B,kBAAkB,GAAG,IAAI,CAAC;IAC1B,YAAY,GAAG,OAAgB,CAAC;IAEzC,KAAK,CAAC,OAAO,CAAC,MAAmB;QAC/B,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO;QACL,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,KAAa,EACb,IAAgB;QAEhB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,MAAM,CACV,KAAa,EACb,IAAgB,EAChB,eAAyB,EACzB,aAAwB;QAExB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,WAAW,CAAC,MAAc,EAAE,IAAY;QACtC,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,eAAe,CAAC,MAA2B;QACzC,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,gBAAgB;QACd,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,aAAa,CAAC,WAAmB;QAC/B,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,WAAW,CAAC,eAAuB;QACjC,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,CAAC,GAAG,MAAgC;QACxC,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,SAAS,CAAC,MAAc,EAAE,SAAkB;QAC1C,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,WAAW,CACf,QAA+C,EAC/C,OAAoF;QAEpF,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,SAAS,CACb,GAAqB,EACrB,QAA8C;QAE9C,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB;QACjC,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,mBAAmB,CAAC,KAA8B,EAAE,UAAmB;QACrE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;CACF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Knex } from 'knex';
|
|
2
|
+
import type { DatabaseAdapter } from './types.js';
|
|
3
|
+
export declare class PostgreSQLAdapter implements DatabaseAdapter {
|
|
4
|
+
private knexInstance;
|
|
5
|
+
readonly supportsReturning = true;
|
|
6
|
+
readonly supportsJSON = true;
|
|
7
|
+
readonly supportsUpsert = true;
|
|
8
|
+
readonly supportsCTE = true;
|
|
9
|
+
readonly supportsWindowFunctions = true;
|
|
10
|
+
readonly supportsSavepoints = true;
|
|
11
|
+
readonly databaseName: "postgresql";
|
|
12
|
+
connect(config: Knex.Config): Promise<Knex>;
|
|
13
|
+
disconnect(): Promise<void>;
|
|
14
|
+
getKnex(): Knex;
|
|
15
|
+
insertReturning<T extends Record<string, any>>(table: string, data: Partial<T>): Promise<T>;
|
|
16
|
+
upsert<T extends Record<string, any>>(table: string, data: Partial<T>, conflictColumns: string[], updateColumns?: string[]): Promise<number>;
|
|
17
|
+
jsonExtract(column: string, path: string): Knex.Raw;
|
|
18
|
+
jsonBuildObject(fields: Record<string, any>): Knex.Raw;
|
|
19
|
+
currentTimestamp(): Knex.Raw;
|
|
20
|
+
fromUnixEpoch(epochColumn: string): Knex.Raw;
|
|
21
|
+
toUnixEpoch(timestampColumn: string): Knex.Raw;
|
|
22
|
+
concat(...values: Array<string | Knex.Raw>): Knex.Raw;
|
|
23
|
+
stringAgg(column: string, separator?: string): Knex.Raw;
|
|
24
|
+
transaction<T>(callback: (trx: Knex.Transaction) => Promise<T>, options?: {
|
|
25
|
+
isolationLevel?: 'serializable' | 'read committed' | 'repeatable read';
|
|
26
|
+
}): Promise<T>;
|
|
27
|
+
savepoint<T>(trx: Knex.Transaction, callback: (sp: Knex.Transaction) => Promise<T>): Promise<T>;
|
|
28
|
+
tableExists(tableName: string): Promise<boolean>;
|
|
29
|
+
autoIncrementColumn(table: Knex.CreateTableBuilder, columnName?: string): void;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=postgresql-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgresql-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/postgresql-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD,qBAAa,iBAAkB,YAAW,eAAe;IACvD,OAAO,CAAC,YAAY,CAAqB;IAGzC,QAAQ,CAAC,iBAAiB,QAAQ;IAClC,QAAQ,CAAC,YAAY,QAAQ;IAC7B,QAAQ,CAAC,cAAc,QAAQ;IAC/B,QAAQ,CAAC,WAAW,QAAQ;IAC5B,QAAQ,CAAC,uBAAuB,QAAQ;IACxC,QAAQ,CAAC,kBAAkB,QAAQ;IACnC,QAAQ,CAAC,YAAY,EAAG,YAAY,CAAU;IAExC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,OAAO,IAAI,IAAI;IAIT,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjD,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GACf,OAAO,CAAC,CAAC,CAAC;IAIP,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACxC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAChB,eAAe,EAAE,MAAM,EAAE,EACzB,aAAa,CAAC,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,MAAM,CAAC;IAIlB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG;IAInD,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG;IAItD,gBAAgB,IAAI,IAAI,CAAC,GAAG;IAI5B,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG;IAI5C,WAAW,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG;IAI9C,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG;IAIrD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG;IAIjD,WAAW,CAAC,CAAC,EACjB,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EAC/C,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,cAAc,GAAG,gBAAgB,GAAG,iBAAiB,CAAA;KAAE,GACnF,OAAO,CAAC,CAAC,CAAC;IAIP,SAAS,CAAC,CAAC,EACf,GAAG,EAAE,IAAI,CAAC,WAAW,EACrB,QAAQ,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAC7C,OAAO,CAAC,CAAC,CAAC;IAIP,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAItD,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;CAG/E"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// src/adapters/postgresql-adapter.ts
|
|
2
|
+
import knexLib from 'knex';
|
|
3
|
+
const { knex } = knexLib;
|
|
4
|
+
export class PostgreSQLAdapter {
|
|
5
|
+
knexInstance = null;
|
|
6
|
+
// Feature detection
|
|
7
|
+
supportsReturning = true;
|
|
8
|
+
supportsJSON = true;
|
|
9
|
+
supportsUpsert = true;
|
|
10
|
+
supportsCTE = true;
|
|
11
|
+
supportsWindowFunctions = true;
|
|
12
|
+
supportsSavepoints = true;
|
|
13
|
+
databaseName = 'postgresql';
|
|
14
|
+
async connect(config) {
|
|
15
|
+
throw new Error('PostgreSQL adapter not implemented yet. Planned for Phase 3.');
|
|
16
|
+
}
|
|
17
|
+
async disconnect() {
|
|
18
|
+
throw new Error('PostgreSQL adapter not implemented yet. Planned for Phase 3.');
|
|
19
|
+
}
|
|
20
|
+
getKnex() {
|
|
21
|
+
throw new Error('PostgreSQL adapter not implemented yet. Planned for Phase 3.');
|
|
22
|
+
}
|
|
23
|
+
async insertReturning(table, data) {
|
|
24
|
+
throw new Error('PostgreSQL adapter not implemented yet. Planned for Phase 3.');
|
|
25
|
+
}
|
|
26
|
+
async upsert(table, data, conflictColumns, updateColumns) {
|
|
27
|
+
throw new Error('PostgreSQL adapter not implemented yet. Planned for Phase 3.');
|
|
28
|
+
}
|
|
29
|
+
jsonExtract(column, path) {
|
|
30
|
+
throw new Error('PostgreSQL adapter not implemented yet. Planned for Phase 3.');
|
|
31
|
+
}
|
|
32
|
+
jsonBuildObject(fields) {
|
|
33
|
+
throw new Error('PostgreSQL adapter not implemented yet. Planned for Phase 3.');
|
|
34
|
+
}
|
|
35
|
+
currentTimestamp() {
|
|
36
|
+
throw new Error('PostgreSQL adapter not implemented yet. Planned for Phase 3.');
|
|
37
|
+
}
|
|
38
|
+
fromUnixEpoch(epochColumn) {
|
|
39
|
+
throw new Error('PostgreSQL adapter not implemented yet. Planned for Phase 3.');
|
|
40
|
+
}
|
|
41
|
+
toUnixEpoch(timestampColumn) {
|
|
42
|
+
throw new Error('PostgreSQL adapter not implemented yet. Planned for Phase 3.');
|
|
43
|
+
}
|
|
44
|
+
concat(...values) {
|
|
45
|
+
throw new Error('PostgreSQL adapter not implemented yet. Planned for Phase 3.');
|
|
46
|
+
}
|
|
47
|
+
stringAgg(column, separator) {
|
|
48
|
+
throw new Error('PostgreSQL adapter not implemented yet. Planned for Phase 3.');
|
|
49
|
+
}
|
|
50
|
+
async transaction(callback, options) {
|
|
51
|
+
throw new Error('PostgreSQL adapter not implemented yet. Planned for Phase 3.');
|
|
52
|
+
}
|
|
53
|
+
async savepoint(trx, callback) {
|
|
54
|
+
throw new Error('PostgreSQL adapter not implemented yet. Planned for Phase 3.');
|
|
55
|
+
}
|
|
56
|
+
async tableExists(tableName) {
|
|
57
|
+
throw new Error('PostgreSQL adapter not implemented yet. Planned for Phase 3.');
|
|
58
|
+
}
|
|
59
|
+
autoIncrementColumn(table, columnName) {
|
|
60
|
+
throw new Error('PostgreSQL adapter not implemented yet. Planned for Phase 3.');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=postgresql-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgresql-adapter.js","sourceRoot":"","sources":["../../src/adapters/postgresql-adapter.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,OAAO,MAAM,MAAM,CAAC;AAI3B,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;AAEzB,MAAM,OAAO,iBAAiB;IACpB,YAAY,GAAgB,IAAI,CAAC;IAEzC,oBAAoB;IACX,iBAAiB,GAAG,IAAI,CAAC;IACzB,YAAY,GAAG,IAAI,CAAC;IACpB,cAAc,GAAG,IAAI,CAAC;IACtB,WAAW,GAAG,IAAI,CAAC;IACnB,uBAAuB,GAAG,IAAI,CAAC;IAC/B,kBAAkB,GAAG,IAAI,CAAC;IAC1B,YAAY,GAAG,YAAqB,CAAC;IAE9C,KAAK,CAAC,OAAO,CAAC,MAAmB;QAC/B,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,OAAO;QACL,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,KAAa,EACb,IAAgB;QAEhB,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,KAAK,CAAC,MAAM,CACV,KAAa,EACb,IAAgB,EAChB,eAAyB,EACzB,aAAwB;QAExB,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,WAAW,CAAC,MAAc,EAAE,IAAY;QACtC,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,eAAe,CAAC,MAA2B;QACzC,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,gBAAgB;QACd,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,aAAa,CAAC,WAAmB;QAC/B,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,WAAW,CAAC,eAAuB;QACjC,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,CAAC,GAAG,MAAgC;QACxC,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,SAAS,CAAC,MAAc,EAAE,SAAkB;QAC1C,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,KAAK,CAAC,WAAW,CACf,QAA+C,EAC/C,OAAoF;QAEpF,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,KAAK,CAAC,SAAS,CACb,GAAqB,EACrB,QAA8C;QAE9C,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB;QACjC,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,mBAAmB,CAAC,KAA8B,EAAE,UAAmB;QACrE,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;CACF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Knex } from 'knex';
|
|
2
|
+
import type { DatabaseAdapter } from './types.js';
|
|
3
|
+
export declare class SQLiteAdapter implements DatabaseAdapter {
|
|
4
|
+
private knexInstance;
|
|
5
|
+
private rawConnection;
|
|
6
|
+
readonly supportsReturning = false;
|
|
7
|
+
readonly supportsJSON = false;
|
|
8
|
+
readonly supportsUpsert = true;
|
|
9
|
+
readonly supportsCTE = true;
|
|
10
|
+
readonly supportsWindowFunctions = true;
|
|
11
|
+
readonly supportsSavepoints = true;
|
|
12
|
+
readonly databaseName: "sqlite";
|
|
13
|
+
connect(config: Knex.Config): Promise<Knex>;
|
|
14
|
+
disconnect(): Promise<void>;
|
|
15
|
+
getKnex(): Knex;
|
|
16
|
+
/**
|
|
17
|
+
* Get raw better-sqlite3 Database instance
|
|
18
|
+
* For legacy code that uses db.prepare() directly
|
|
19
|
+
*/
|
|
20
|
+
getRawDatabase(): any;
|
|
21
|
+
insertReturning<T extends Record<string, any>>(table: string, data: Partial<T>): Promise<T>;
|
|
22
|
+
upsert<T extends Record<string, any>>(table: string, data: Partial<T>, conflictColumns: string[], updateColumns?: string[]): Promise<number>;
|
|
23
|
+
jsonExtract(column: string, path: string): Knex.Raw;
|
|
24
|
+
jsonBuildObject(fields: Record<string, any>): Knex.Raw;
|
|
25
|
+
currentTimestamp(): Knex.Raw;
|
|
26
|
+
fromUnixEpoch(epochColumn: string): Knex.Raw;
|
|
27
|
+
toUnixEpoch(timestampColumn: string): Knex.Raw;
|
|
28
|
+
concat(...values: Array<string | Knex.Raw>): Knex.Raw;
|
|
29
|
+
stringAgg(column: string, separator?: string): Knex.Raw;
|
|
30
|
+
transaction<T>(callback: (trx: Knex.Transaction) => Promise<T>, options?: {
|
|
31
|
+
isolationLevel?: 'serializable' | 'read committed' | 'repeatable read';
|
|
32
|
+
}): Promise<T>;
|
|
33
|
+
savepoint<T>(trx: Knex.Transaction, callback: (sp: Knex.Transaction) => Promise<T>): Promise<T>;
|
|
34
|
+
tableExists(tableName: string): Promise<boolean>;
|
|
35
|
+
autoIncrementColumn(table: Knex.CreateTableBuilder, columnName?: string): void;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=sqlite-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/sqlite-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD,qBAAa,aAAc,YAAW,eAAe;IACnD,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,aAAa,CAAa;IAGlC,QAAQ,CAAC,iBAAiB,SAAS;IACnC,QAAQ,CAAC,YAAY,SAAS;IAC9B,QAAQ,CAAC,cAAc,QAAQ;IAC/B,QAAQ,CAAC,WAAW,QAAQ;IAC5B,QAAQ,CAAC,uBAAuB,QAAQ;IACxC,QAAQ,CAAC,kBAAkB,QAAQ;IACnC,QAAQ,CAAC,YAAY,EAAG,QAAQ,CAAU;IAGpC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB3C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC,OAAO,IAAI,IAAI;IAOf;;;OAGG;IACH,cAAc,IAAI,GAAG;IAQf,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjD,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GACf,OAAO,CAAC,CAAC,CAAC;IAUP,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACxC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAChB,eAAe,EAAE,MAAM,EAAE,EACzB,aAAa,CAAC,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,MAAM,CAAC;IAmBlB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG;IAMnD,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG;IAatD,gBAAgB,IAAI,IAAI,CAAC,GAAG;IAI5B,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG;IAI5C,WAAW,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG;IAI9C,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG;IAMrD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY,GAAG,IAAI,CAAC,GAAG;IAKtD,WAAW,CAAC,CAAC,EACjB,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EAC/C,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,cAAc,GAAG,gBAAgB,GAAG,iBAAiB,CAAA;KAAE,GACnF,OAAO,CAAC,CAAC,CAAC;IAIP,SAAS,CAAC,CAAC,EACf,GAAG,EAAE,IAAI,CAAC,WAAW,EACrB,QAAQ,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAC7C,OAAO,CAAC,CAAC,CAAC;IAKP,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQtD,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,GAAE,MAAa,GAAG,IAAI;CAGrF"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
// src/adapters/sqlite-adapter.ts
|
|
2
|
+
import knexLib from 'knex';
|
|
3
|
+
const { knex } = knexLib;
|
|
4
|
+
export class SQLiteAdapter {
|
|
5
|
+
knexInstance = null;
|
|
6
|
+
rawConnection = null;
|
|
7
|
+
// Feature detection
|
|
8
|
+
supportsReturning = false;
|
|
9
|
+
supportsJSON = false;
|
|
10
|
+
supportsUpsert = true;
|
|
11
|
+
supportsCTE = true;
|
|
12
|
+
supportsWindowFunctions = true;
|
|
13
|
+
supportsSavepoints = true;
|
|
14
|
+
databaseName = 'sqlite';
|
|
15
|
+
// Connection Management
|
|
16
|
+
async connect(config) {
|
|
17
|
+
const fullConfig = {
|
|
18
|
+
client: 'better-sqlite3',
|
|
19
|
+
connection: config.connection,
|
|
20
|
+
useNullAsDefault: true,
|
|
21
|
+
...config,
|
|
22
|
+
};
|
|
23
|
+
this.knexInstance = knex(fullConfig);
|
|
24
|
+
// Get and store the raw better-sqlite3 connection
|
|
25
|
+
this.rawConnection = await this.knexInstance.client.acquireRawConnection();
|
|
26
|
+
// Configure SQLite pragmas
|
|
27
|
+
await this.knexInstance.raw('PRAGMA journal_mode = WAL');
|
|
28
|
+
await this.knexInstance.raw('PRAGMA foreign_keys = ON');
|
|
29
|
+
await this.knexInstance.raw('PRAGMA synchronous = NORMAL');
|
|
30
|
+
await this.knexInstance.raw('PRAGMA busy_timeout = 5000');
|
|
31
|
+
return this.knexInstance;
|
|
32
|
+
}
|
|
33
|
+
async disconnect() {
|
|
34
|
+
if (this.knexInstance) {
|
|
35
|
+
await this.knexInstance.destroy();
|
|
36
|
+
this.knexInstance = null;
|
|
37
|
+
this.rawConnection = null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
getKnex() {
|
|
41
|
+
if (!this.knexInstance) {
|
|
42
|
+
throw new Error('Database not connected. Call connect() first.');
|
|
43
|
+
}
|
|
44
|
+
return this.knexInstance;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get raw better-sqlite3 Database instance
|
|
48
|
+
* For legacy code that uses db.prepare() directly
|
|
49
|
+
*/
|
|
50
|
+
getRawDatabase() {
|
|
51
|
+
if (!this.rawConnection) {
|
|
52
|
+
throw new Error('Raw database connection not available. Call connect() first.');
|
|
53
|
+
}
|
|
54
|
+
return this.rawConnection;
|
|
55
|
+
}
|
|
56
|
+
// Query Adaptations
|
|
57
|
+
async insertReturning(table, data) {
|
|
58
|
+
const knex = this.getKnex();
|
|
59
|
+
const [id] = await knex(table).insert(data);
|
|
60
|
+
const result = await knex(table).where({ id }).first();
|
|
61
|
+
if (!result) {
|
|
62
|
+
throw new Error(`Failed to retrieve inserted row from ${table}`);
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
async upsert(table, data, conflictColumns, updateColumns) {
|
|
67
|
+
const knex = this.getKnex();
|
|
68
|
+
const columnsToUpdate = updateColumns || Object.keys(data).filter(key => !conflictColumns.includes(key));
|
|
69
|
+
const updateData = columnsToUpdate.reduce((acc, col) => {
|
|
70
|
+
acc[col] = data[col];
|
|
71
|
+
return acc;
|
|
72
|
+
}, {});
|
|
73
|
+
const result = await knex(table)
|
|
74
|
+
.insert(data)
|
|
75
|
+
.onConflict(conflictColumns)
|
|
76
|
+
.merge(updateData);
|
|
77
|
+
return result.length;
|
|
78
|
+
}
|
|
79
|
+
jsonExtract(column, path) {
|
|
80
|
+
const knex = this.getKnex();
|
|
81
|
+
const jsonPath = path.startsWith('$') ? path : `$.${path}`;
|
|
82
|
+
return knex.raw(`json_extract(??, ?)`, [column, jsonPath]);
|
|
83
|
+
}
|
|
84
|
+
jsonBuildObject(fields) {
|
|
85
|
+
const knex = this.getKnex();
|
|
86
|
+
const keys = Object.keys(fields);
|
|
87
|
+
const values = Object.values(fields);
|
|
88
|
+
const args = [];
|
|
89
|
+
keys.forEach((key, i) => {
|
|
90
|
+
args.push(key);
|
|
91
|
+
args.push(values[i]);
|
|
92
|
+
});
|
|
93
|
+
const placeholders = args.map(() => '?').join(', ');
|
|
94
|
+
return knex.raw(`json_object(${placeholders})`, args);
|
|
95
|
+
}
|
|
96
|
+
currentTimestamp() {
|
|
97
|
+
return this.getKnex().raw('unixepoch()');
|
|
98
|
+
}
|
|
99
|
+
fromUnixEpoch(epochColumn) {
|
|
100
|
+
return this.getKnex().raw(`datetime(??, 'unixepoch')`, [epochColumn]);
|
|
101
|
+
}
|
|
102
|
+
toUnixEpoch(timestampColumn) {
|
|
103
|
+
return this.getKnex().raw(`strftime('%s', ??)`, [timestampColumn]);
|
|
104
|
+
}
|
|
105
|
+
concat(...values) {
|
|
106
|
+
const knex = this.getKnex();
|
|
107
|
+
const placeholders = values.map(() => '??').join(' || ');
|
|
108
|
+
return knex.raw(placeholders, values);
|
|
109
|
+
}
|
|
110
|
+
stringAgg(column, separator = ',') {
|
|
111
|
+
return this.getKnex().raw(`GROUP_CONCAT(??, ?)`, [column, separator]);
|
|
112
|
+
}
|
|
113
|
+
// Transactions
|
|
114
|
+
async transaction(callback, options) {
|
|
115
|
+
return this.getKnex().transaction(callback);
|
|
116
|
+
}
|
|
117
|
+
async savepoint(trx, callback) {
|
|
118
|
+
return trx.savepoint(callback);
|
|
119
|
+
}
|
|
120
|
+
// Schema Management
|
|
121
|
+
async tableExists(tableName) {
|
|
122
|
+
const result = await this.getKnex().raw(`SELECT name FROM sqlite_master WHERE type='table' AND name=?`, [tableName]);
|
|
123
|
+
return result.length > 0;
|
|
124
|
+
}
|
|
125
|
+
autoIncrementColumn(table, columnName = 'id') {
|
|
126
|
+
table.increments(columnName);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=sqlite-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-adapter.js","sourceRoot":"","sources":["../../src/adapters/sqlite-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Knex } from 'knex';
|
|
2
|
+
/**
|
|
3
|
+
* Database adapter interface for cross-RDBMS compatibility
|
|
4
|
+
* Abstracts database-specific behavior
|
|
5
|
+
*/
|
|
6
|
+
export interface DatabaseAdapter {
|
|
7
|
+
connect(config: Knex.Config): Promise<Knex>;
|
|
8
|
+
disconnect(): Promise<void>;
|
|
9
|
+
getKnex(): Knex;
|
|
10
|
+
readonly supportsReturning: boolean;
|
|
11
|
+
readonly supportsJSON: boolean;
|
|
12
|
+
readonly supportsUpsert: boolean;
|
|
13
|
+
readonly supportsCTE: boolean;
|
|
14
|
+
readonly supportsWindowFunctions: boolean;
|
|
15
|
+
readonly supportsSavepoints: boolean;
|
|
16
|
+
readonly databaseName: 'sqlite' | 'postgresql' | 'mysql';
|
|
17
|
+
insertReturning<T extends Record<string, any>>(table: string, data: Partial<T>): Promise<T>;
|
|
18
|
+
upsert<T extends Record<string, any>>(table: string, data: Partial<T>, conflictColumns: string[], updateColumns?: string[]): Promise<number>;
|
|
19
|
+
jsonExtract(column: string, path: string): Knex.Raw;
|
|
20
|
+
jsonBuildObject(fields: Record<string, any>): Knex.Raw;
|
|
21
|
+
currentTimestamp(): Knex.Raw;
|
|
22
|
+
fromUnixEpoch(epochColumn: string): Knex.Raw;
|
|
23
|
+
toUnixEpoch(timestampColumn: string): Knex.Raw;
|
|
24
|
+
concat(...values: Array<string | Knex.Raw>): Knex.Raw;
|
|
25
|
+
stringAgg(column: string, separator?: string): Knex.Raw;
|
|
26
|
+
transaction<T>(callback: (trx: Knex.Transaction) => Promise<T>, options?: {
|
|
27
|
+
isolationLevel?: 'serializable' | 'read committed' | 'repeatable read';
|
|
28
|
+
}): Promise<T>;
|
|
29
|
+
savepoint<T>(trx: Knex.Transaction, callback: (sp: Knex.Transaction) => Promise<T>): Promise<T>;
|
|
30
|
+
tableExists(tableName: string): Promise<boolean>;
|
|
31
|
+
autoIncrementColumn(table: Knex.CreateTableBuilder, columnName?: string): void;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B;;;GAGG;AACH,MAAM,WAAW,eAAe;IAI9B,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO,IAAI,IAAI,CAAC;IAKhB,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,uBAAuB,EAAE,OAAO,CAAC;IAC1C,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;IAKzD,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3C,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GACf,OAAO,CAAC,CAAC,CAAC,CAAC;IAEd,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAClC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAChB,eAAe,EAAE,MAAM,EAAE,EACzB,aAAa,CAAC,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;IACpD,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;IACvD,gBAAgB,IAAI,IAAI,CAAC,GAAG,CAAC;IAC7B,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;IAC7C,WAAW,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;IAC/C,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;IACtD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;IAKxD,WAAW,CAAC,CAAC,EACX,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EAC/C,OAAO,CAAC,EAAE;QACR,cAAc,CAAC,EAAE,cAAc,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;KACxE,GACA,OAAO,CAAC,CAAC,CAAC,CAAC;IAEd,SAAS,CAAC,CAAC,EACT,GAAG,EAAE,IAAI,CAAC,WAAW,EACrB,QAAQ,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAC7C,OAAO,CAAC,CAAC,CAAC,CAAC;IAKd,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
CHANGED
|
@@ -93,46 +93,46 @@ function formatTable(data, headers) {
|
|
|
93
93
|
* Show help message
|
|
94
94
|
*/
|
|
95
95
|
function showHelp() {
|
|
96
|
-
console.log(`
|
|
97
|
-
sqlew CLI - Query tool for mcp-sqlew v2.1.1
|
|
98
|
-
|
|
99
|
-
USAGE:
|
|
100
|
-
sqlew query <subcommand> [options]
|
|
101
|
-
|
|
102
|
-
SUBCOMMANDS:
|
|
103
|
-
decisions Query decisions with filtering
|
|
104
|
-
messages Query agent messages
|
|
105
|
-
files Query file changes
|
|
106
|
-
activity Query activity log
|
|
107
|
-
|
|
108
|
-
OPTIONS:
|
|
109
|
-
--layer <layer> Filter by layer (presentation, business, data, infrastructure, cross-cutting)
|
|
110
|
-
--tags <tags> Filter by tags (comma-separated)
|
|
111
|
-
--since <time> Time filter (e.g., "5m", "1h", "2d", or ISO timestamp)
|
|
112
|
-
--unread Show only unread messages (messages only)
|
|
113
|
-
--priority <priority> Filter by priority (low, medium, high, critical)
|
|
114
|
-
--agent <agent> Filter by agent name
|
|
115
|
-
--actions <actions> Filter by action types (comma-separated, activity only)
|
|
116
|
-
--limit <number> Limit number of results
|
|
117
|
-
--output <format> Output format: json or table (default: json)
|
|
118
|
-
--db-path <path> Database file path (default: .sqlew/sqlew.db)
|
|
119
|
-
--help Show this help message
|
|
120
|
-
|
|
121
|
-
EXAMPLES:
|
|
122
|
-
# Query active decisions with breaking changes
|
|
123
|
-
sqlew query decisions --layer=business --tags=breaking --output=table
|
|
124
|
-
|
|
125
|
-
# Query unread high-priority messages
|
|
126
|
-
sqlew query messages --unread --priority=high --output=json
|
|
127
|
-
|
|
128
|
-
# Query recent file changes in last hour
|
|
129
|
-
sqlew query files --since=1h --output=table
|
|
130
|
-
|
|
131
|
-
# Query recent activity from all agents
|
|
132
|
-
sqlew query activity --since=5m --agent=* --output=json
|
|
133
|
-
|
|
134
|
-
# Query activity with specific actions
|
|
135
|
-
sqlew query activity --actions=decision_set,message_send --limit=20
|
|
96
|
+
console.log(`
|
|
97
|
+
sqlew CLI - Query tool for mcp-sqlew v2.1.1
|
|
98
|
+
|
|
99
|
+
USAGE:
|
|
100
|
+
sqlew query <subcommand> [options]
|
|
101
|
+
|
|
102
|
+
SUBCOMMANDS:
|
|
103
|
+
decisions Query decisions with filtering
|
|
104
|
+
messages Query agent messages
|
|
105
|
+
files Query file changes
|
|
106
|
+
activity Query activity log
|
|
107
|
+
|
|
108
|
+
OPTIONS:
|
|
109
|
+
--layer <layer> Filter by layer (presentation, business, data, infrastructure, cross-cutting)
|
|
110
|
+
--tags <tags> Filter by tags (comma-separated)
|
|
111
|
+
--since <time> Time filter (e.g., "5m", "1h", "2d", or ISO timestamp)
|
|
112
|
+
--unread Show only unread messages (messages only)
|
|
113
|
+
--priority <priority> Filter by priority (low, medium, high, critical)
|
|
114
|
+
--agent <agent> Filter by agent name
|
|
115
|
+
--actions <actions> Filter by action types (comma-separated, activity only)
|
|
116
|
+
--limit <number> Limit number of results
|
|
117
|
+
--output <format> Output format: json or table (default: json)
|
|
118
|
+
--db-path <path> Database file path (default: .sqlew/sqlew.db)
|
|
119
|
+
--help Show this help message
|
|
120
|
+
|
|
121
|
+
EXAMPLES:
|
|
122
|
+
# Query active decisions with breaking changes
|
|
123
|
+
sqlew query decisions --layer=business --tags=breaking --output=table
|
|
124
|
+
|
|
125
|
+
# Query unread high-priority messages
|
|
126
|
+
sqlew query messages --unread --priority=high --output=json
|
|
127
|
+
|
|
128
|
+
# Query recent file changes in last hour
|
|
129
|
+
sqlew query files --since=1h --output=table
|
|
130
|
+
|
|
131
|
+
# Query recent activity from all agents
|
|
132
|
+
sqlew query activity --since=5m --agent=* --output=json
|
|
133
|
+
|
|
134
|
+
# Query activity with specific actions
|
|
135
|
+
sqlew query activity --actions=decision_set,message_send --limit=20
|
|
136
136
|
`);
|
|
137
137
|
}
|
|
138
138
|
// ============================================================================
|
|
@@ -141,7 +141,7 @@ EXAMPLES:
|
|
|
141
141
|
/**
|
|
142
142
|
* Query decisions command
|
|
143
143
|
*/
|
|
144
|
-
function queryDecisions(args) {
|
|
144
|
+
async function queryDecisions(args) {
|
|
145
145
|
const outputFormat = args.output || 'json';
|
|
146
146
|
// Build query params
|
|
147
147
|
const params = {};
|
|
@@ -158,7 +158,7 @@ function queryDecisions(args) {
|
|
|
158
158
|
params.limit = args.limit;
|
|
159
159
|
}
|
|
160
160
|
// Execute query
|
|
161
|
-
const result = searchAdvanced(params);
|
|
161
|
+
const result = await searchAdvanced(params);
|
|
162
162
|
// Output results
|
|
163
163
|
if (outputFormat === 'json') {
|
|
164
164
|
formatJSON(result);
|
|
@@ -170,7 +170,7 @@ function queryDecisions(args) {
|
|
|
170
170
|
/**
|
|
171
171
|
* Query messages command
|
|
172
172
|
*/
|
|
173
|
-
function queryMessages(args) {
|
|
173
|
+
async function queryMessages(args) {
|
|
174
174
|
const outputFormat = args.output || 'json';
|
|
175
175
|
// Agent name is required for messages
|
|
176
176
|
const agentName = args.agent || 'cli';
|
|
@@ -188,7 +188,7 @@ function queryMessages(args) {
|
|
|
188
188
|
params.limit = args.limit;
|
|
189
189
|
}
|
|
190
190
|
// Execute query
|
|
191
|
-
const result = getMessages(params);
|
|
191
|
+
const result = await getMessages(params);
|
|
192
192
|
// Output results
|
|
193
193
|
if (outputFormat === 'json') {
|
|
194
194
|
formatJSON(result);
|
|
@@ -200,7 +200,7 @@ function queryMessages(args) {
|
|
|
200
200
|
/**
|
|
201
201
|
* Query files command
|
|
202
202
|
*/
|
|
203
|
-
function queryFiles(args) {
|
|
203
|
+
async function queryFiles(args) {
|
|
204
204
|
const outputFormat = args.output || 'json';
|
|
205
205
|
// Build query params
|
|
206
206
|
const params = {};
|
|
@@ -217,7 +217,7 @@ function queryFiles(args) {
|
|
|
217
217
|
params.limit = args.limit;
|
|
218
218
|
}
|
|
219
219
|
// Execute query
|
|
220
|
-
const result = getFileChanges(params);
|
|
220
|
+
const result = await getFileChanges(params);
|
|
221
221
|
// Output results
|
|
222
222
|
if (outputFormat === 'json') {
|
|
223
223
|
formatJSON(result);
|
|
@@ -229,7 +229,7 @@ function queryFiles(args) {
|
|
|
229
229
|
/**
|
|
230
230
|
* Query activity command
|
|
231
231
|
*/
|
|
232
|
-
function queryActivity(args) {
|
|
232
|
+
async function queryActivity(args) {
|
|
233
233
|
const outputFormat = args.output || 'json';
|
|
234
234
|
// Build query params
|
|
235
235
|
const params = {};
|
|
@@ -252,7 +252,7 @@ function queryActivity(args) {
|
|
|
252
252
|
params.limit = args.limit;
|
|
253
253
|
}
|
|
254
254
|
// Execute query
|
|
255
|
-
const result = getActivityLog(params);
|
|
255
|
+
const result = await getActivityLog(params);
|
|
256
256
|
// Output results
|
|
257
257
|
if (outputFormat === 'json') {
|
|
258
258
|
formatJSON(result);
|
|
@@ -264,7 +264,7 @@ function queryActivity(args) {
|
|
|
264
264
|
// ============================================================================
|
|
265
265
|
// Main Entry Point
|
|
266
266
|
// ============================================================================
|
|
267
|
-
function main() {
|
|
267
|
+
async function main() {
|
|
268
268
|
const args = parseArgs(process.argv.slice(2));
|
|
269
269
|
// Show help if requested or no command
|
|
270
270
|
if (args.help || !args.command) {
|
|
@@ -274,21 +274,22 @@ function main() {
|
|
|
274
274
|
try {
|
|
275
275
|
// Initialize database
|
|
276
276
|
const dbPath = args['db-path'];
|
|
277
|
-
|
|
277
|
+
const config = dbPath ? { configPath: dbPath } : undefined;
|
|
278
|
+
await initializeDatabase(config);
|
|
278
279
|
// Route to appropriate command
|
|
279
280
|
if (args.command === 'query') {
|
|
280
281
|
switch (args.subcommand) {
|
|
281
282
|
case 'decisions':
|
|
282
|
-
queryDecisions(args);
|
|
283
|
+
await queryDecisions(args);
|
|
283
284
|
break;
|
|
284
285
|
case 'messages':
|
|
285
|
-
queryMessages(args);
|
|
286
|
+
await queryMessages(args);
|
|
286
287
|
break;
|
|
287
288
|
case 'files':
|
|
288
|
-
queryFiles(args);
|
|
289
|
+
await queryFiles(args);
|
|
289
290
|
break;
|
|
290
291
|
case 'activity':
|
|
291
|
-
queryActivity(args);
|
|
292
|
+
await queryActivity(args);
|
|
292
293
|
break;
|
|
293
294
|
default:
|
|
294
295
|
console.error(`Unknown subcommand: ${args.subcommand}`);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|