sqlew 3.6.10 → 3.7.1

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 (372) hide show
  1. package/CHANGELOG.md +346 -0
  2. package/README.md +54 -39
  3. package/assets/config.example.toml +93 -0
  4. package/assets/kanban-visualizer.png +0 -0
  5. package/assets/sample-agents/sqlew-architect.md +32 -13
  6. package/assets/sample-agents/sqlew-researcher.md +70 -17
  7. package/assets/sample-agents/sqlew-scrum-master.md +60 -25
  8. package/assets/schema.sql +2 -2
  9. package/dist/adapters/auth/auth-factory.d.ts +86 -0
  10. package/dist/adapters/auth/auth-factory.d.ts.map +1 -0
  11. package/dist/adapters/auth/auth-factory.js +103 -0
  12. package/dist/adapters/auth/auth-factory.js.map +1 -0
  13. package/dist/adapters/auth/auth-types.d.ts +30 -0
  14. package/dist/adapters/auth/auth-types.d.ts.map +1 -0
  15. package/dist/adapters/auth/auth-types.js +30 -0
  16. package/dist/adapters/auth/auth-types.js.map +1 -0
  17. package/dist/adapters/auth/base-auth-provider.d.ts +327 -0
  18. package/dist/adapters/auth/base-auth-provider.d.ts.map +1 -0
  19. package/dist/adapters/auth/base-auth-provider.js +111 -0
  20. package/dist/adapters/auth/base-auth-provider.js.map +1 -0
  21. package/dist/adapters/auth/direct-auth-provider.d.ts +356 -0
  22. package/dist/adapters/auth/direct-auth-provider.d.ts.map +1 -0
  23. package/dist/adapters/auth/direct-auth-provider.js +406 -0
  24. package/dist/adapters/auth/direct-auth-provider.js.map +1 -0
  25. package/dist/adapters/base-adapter.d.ts +638 -0
  26. package/dist/adapters/base-adapter.d.ts.map +1 -0
  27. package/dist/adapters/base-adapter.js +557 -0
  28. package/dist/adapters/base-adapter.js.map +1 -0
  29. package/dist/adapters/index.d.ts +13 -2
  30. package/dist/adapters/index.d.ts.map +1 -1
  31. package/dist/adapters/index.js +27 -5
  32. package/dist/adapters/index.js.map +1 -1
  33. package/dist/adapters/mysql-adapter.d.ts +547 -6
  34. package/dist/adapters/mysql-adapter.d.ts.map +1 -1
  35. package/dist/adapters/mysql-adapter.js +651 -32
  36. package/dist/adapters/mysql-adapter.js.map +1 -1
  37. package/dist/adapters/postgresql-adapter.d.ts +15 -4
  38. package/dist/adapters/postgresql-adapter.d.ts.map +1 -1
  39. package/dist/adapters/postgresql-adapter.js +19 -2
  40. package/dist/adapters/postgresql-adapter.js.map +1 -1
  41. package/dist/adapters/sqlite-adapter.d.ts +35 -5
  42. package/dist/adapters/sqlite-adapter.d.ts.map +1 -1
  43. package/dist/adapters/sqlite-adapter.js +57 -18
  44. package/dist/adapters/sqlite-adapter.js.map +1 -1
  45. package/dist/cli/db-dump.d.ts +32 -0
  46. package/dist/cli/db-dump.d.ts.map +1 -0
  47. package/dist/cli/db-dump.js +409 -0
  48. package/dist/cli/db-dump.js.map +1 -0
  49. package/dist/cli.js +24 -14
  50. package/dist/cli.js.map +1 -1
  51. package/dist/config/knex/bootstrap/20251025020452_create_master_tables.d.ts.map +1 -0
  52. package/dist/{migrations → config}/knex/bootstrap/20251025020452_create_master_tables.js +7 -2
  53. package/dist/config/knex/bootstrap/20251025020452_create_master_tables.js.map +1 -0
  54. package/dist/config/knex/bootstrap/20251025021152_create_transaction_tables.d.ts.map +1 -0
  55. package/dist/{migrations → config}/knex/bootstrap/20251025021152_create_transaction_tables.js +49 -50
  56. package/dist/config/knex/bootstrap/20251025021152_create_transaction_tables.js.map +1 -0
  57. package/dist/config/knex/bootstrap/20251025021351_create_indexes.d.ts.map +1 -0
  58. package/dist/config/knex/bootstrap/20251025021351_create_indexes.js.map +1 -0
  59. package/dist/config/knex/bootstrap/20251025021416_seed_master_data.d.ts.map +1 -0
  60. package/dist/{migrations → config}/knex/bootstrap/20251025021416_seed_master_data.js +11 -6
  61. package/dist/config/knex/bootstrap/20251025021416_seed_master_data.js.map +1 -0
  62. package/dist/config/knex/bootstrap/20251025070349_create_views.d.ts.map +1 -0
  63. package/dist/{migrations → config}/knex/bootstrap/20251025070349_create_views.js +66 -14
  64. package/dist/config/knex/bootstrap/20251025070349_create_views.js.map +1 -0
  65. package/dist/config/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts.map +1 -0
  66. package/dist/config/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js +22 -0
  67. package/dist/config/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js.map +1 -0
  68. package/dist/config/knex/enhancements/20251025082220_fix_task_dependencies_columns.d.ts.map +1 -0
  69. package/dist/config/knex/enhancements/20251025082220_fix_task_dependencies_columns.js.map +1 -0
  70. package/dist/config/knex/enhancements/20251025090000_create_help_system_tables.d.ts.map +1 -0
  71. package/dist/{migrations → config}/knex/enhancements/20251025090000_create_help_system_tables.js +6 -0
  72. package/dist/config/knex/enhancements/20251025090000_create_help_system_tables.js.map +1 -0
  73. package/dist/config/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts.map +1 -0
  74. package/dist/{migrations → config}/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.js +6 -0
  75. package/dist/config/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.js.map +1 -0
  76. package/dist/config/knex/enhancements/20251025100000_seed_help_metadata.d.ts.map +1 -0
  77. package/dist/{migrations → config}/knex/enhancements/20251025100000_seed_help_metadata.js +6 -0
  78. package/dist/config/knex/enhancements/20251025100000_seed_help_metadata.js.map +1 -0
  79. package/dist/config/knex/enhancements/20251025100100_seed_remaining_use_cases.d.ts.map +1 -0
  80. package/dist/config/knex/enhancements/20251025100100_seed_remaining_use_cases.js.map +1 -0
  81. package/dist/config/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts.map +1 -0
  82. package/dist/{migrations → config}/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.js +7 -0
  83. package/dist/config/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.js.map +1 -0
  84. package/dist/config/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts.map +1 -0
  85. package/dist/config/knex/enhancements/20251027000000_add_agent_reuse_system.js +62 -0
  86. package/dist/config/knex/enhancements/20251027000000_add_agent_reuse_system.js.map +1 -0
  87. package/dist/config/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts.map +1 -0
  88. package/dist/config/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js.map +1 -0
  89. package/dist/config/knex/enhancements/20251027020000_update_agent_reusability.d.ts.map +1 -0
  90. package/dist/{migrations → config}/knex/enhancements/20251027020000_update_agent_reusability.js +6 -0
  91. package/dist/config/knex/enhancements/20251027020000_update_agent_reusability.js.map +1 -0
  92. package/dist/config/knex/enhancements/20251028000000_simplify_agent_system.d.ts.map +1 -0
  93. package/dist/{migrations → config}/knex/enhancements/20251028000000_simplify_agent_system.js +6 -0
  94. package/dist/config/knex/enhancements/20251028000000_simplify_agent_system.js.map +1 -0
  95. package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.d.ts +13 -0
  96. package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.d.ts.map +1 -0
  97. package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.js +48 -0
  98. package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.js.map +1 -0
  99. package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.d.ts +24 -0
  100. package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.d.ts.map +1 -0
  101. package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.js +189 -0
  102. package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.js.map +1 -0
  103. package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.d.ts +16 -0
  104. package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.d.ts.map +1 -0
  105. package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.js +65 -0
  106. package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.js.map +1 -0
  107. package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.d.ts +23 -0
  108. package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.d.ts.map +1 -0
  109. package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.js +118 -0
  110. package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.js.map +1 -0
  111. package/dist/config/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts.map +1 -0
  112. package/dist/config/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js.map +1 -0
  113. package/dist/config/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts.map +1 -0
  114. package/dist/config/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js.map +1 -0
  115. package/dist/config/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts.map +1 -0
  116. package/dist/config/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js.map +1 -0
  117. package/dist/config/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts.map +1 -0
  118. package/dist/config/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js.map +1 -0
  119. package/dist/config/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts.map +1 -0
  120. package/dist/config/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js.map +1 -0
  121. package/dist/config/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts.map +1 -0
  122. package/dist/config/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js.map +1 -0
  123. package/dist/config/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts.map +1 -0
  124. package/dist/config/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js.map +1 -0
  125. package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.d.ts +49 -0
  126. package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.d.ts.map +1 -0
  127. package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.js +864 -0
  128. package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.js.map +1 -0
  129. package/dist/config/loader.d.ts +19 -1
  130. package/dist/config/loader.d.ts.map +1 -1
  131. package/dist/config/loader.js +149 -4
  132. package/dist/config/loader.js.map +1 -1
  133. package/dist/config/types.d.ts +261 -2
  134. package/dist/config/types.d.ts.map +1 -1
  135. package/dist/config/types.js.map +1 -1
  136. package/dist/config/writer.d.ts +65 -0
  137. package/dist/config/writer.d.ts.map +1 -0
  138. package/dist/config/writer.js +139 -0
  139. package/dist/config/writer.js.map +1 -0
  140. package/dist/database.d.ts +11 -2
  141. package/dist/database.d.ts.map +1 -1
  142. package/dist/database.js +62 -6
  143. package/dist/database.js.map +1 -1
  144. package/dist/index.js +173 -39
  145. package/dist/index.js.map +1 -1
  146. package/dist/knexfile.d.ts.map +1 -1
  147. package/dist/knexfile.js +88 -12
  148. package/dist/knexfile.js.map +1 -1
  149. package/dist/tests/all-features.test.js +15 -3
  150. package/dist/tests/all-features.test.js.map +1 -1
  151. package/dist/tests/config-loader.test.d.ts +6 -0
  152. package/dist/tests/config-loader.test.d.ts.map +1 -0
  153. package/dist/tests/config-loader.test.js +201 -0
  154. package/dist/tests/config-loader.test.js.map +1 -0
  155. package/dist/tests/connection-manager-integration.test.d.ts +2 -0
  156. package/dist/tests/connection-manager-integration.test.d.ts.map +1 -0
  157. package/dist/tests/connection-manager-integration.test.js +431 -0
  158. package/dist/tests/connection-manager-integration.test.js.map +1 -0
  159. package/dist/tests/connection-manager.test.d.ts +2 -0
  160. package/dist/tests/connection-manager.test.d.ts.map +1 -0
  161. package/dist/tests/connection-manager.test.js +361 -0
  162. package/dist/tests/connection-manager.test.js.map +1 -0
  163. package/dist/tests/dump-import.test.d.ts +15 -0
  164. package/dist/tests/dump-import.test.d.ts.map +1 -0
  165. package/dist/tests/dump-import.test.js +430 -0
  166. package/dist/tests/dump-import.test.js.map +1 -0
  167. package/dist/tests/migration-idempotency.test.d.ts +2 -0
  168. package/dist/tests/migration-idempotency.test.d.ts.map +1 -0
  169. package/dist/tests/migration-idempotency.test.js +330 -0
  170. package/dist/tests/migration-idempotency.test.js.map +1 -0
  171. package/dist/tests/migration-upgrade-paths.test.d.ts +2 -0
  172. package/dist/tests/migration-upgrade-paths.test.d.ts.map +1 -0
  173. package/dist/tests/migration-upgrade-paths.test.js +248 -0
  174. package/dist/tests/migration-upgrade-paths.test.js.map +1 -0
  175. package/dist/tests/migrations/test-all-versions-real.js +3 -0
  176. package/dist/tests/migrations/test-all-versions-real.js.map +1 -1
  177. package/dist/tests/multi-project-migration.test.d.ts +17 -0
  178. package/dist/tests/multi-project-migration.test.d.ts.map +1 -0
  179. package/dist/tests/multi-project-migration.test.js +399 -0
  180. package/dist/tests/multi-project-migration.test.js.map +1 -0
  181. package/dist/tests/multi-project.test.d.ts +5 -0
  182. package/dist/tests/multi-project.test.d.ts.map +1 -0
  183. package/dist/tests/multi-project.test.js +238 -0
  184. package/dist/tests/multi-project.test.js.map +1 -0
  185. package/dist/tests/schema-migration.test.d.ts +8 -0
  186. package/dist/tests/schema-migration.test.d.ts.map +1 -0
  187. package/dist/tests/schema-migration.test.js +108 -0
  188. package/dist/tests/schema-migration.test.js.map +1 -0
  189. package/dist/tests/sql-dump-converters.test.d.ts +7 -0
  190. package/dist/tests/sql-dump-converters.test.d.ts.map +1 -0
  191. package/dist/tests/sql-dump-converters.test.js +314 -0
  192. package/dist/tests/sql-dump-converters.test.js.map +1 -0
  193. package/dist/tests/sql-dump-cross-database.test.d.ts +21 -0
  194. package/dist/tests/sql-dump-cross-database.test.d.ts.map +1 -0
  195. package/dist/tests/sql-dump-cross-database.test.js +314 -0
  196. package/dist/tests/sql-dump-cross-database.test.js.map +1 -0
  197. package/dist/tests/sql-dump-default-conversions.test.d.ts +8 -0
  198. package/dist/tests/sql-dump-default-conversions.test.d.ts.map +1 -0
  199. package/dist/tests/sql-dump-default-conversions.test.js +141 -0
  200. package/dist/tests/sql-dump-default-conversions.test.js.map +1 -0
  201. package/dist/tests/sql-dump-fk-constraints.test.d.ts +13 -0
  202. package/dist/tests/sql-dump-fk-constraints.test.d.ts.map +1 -0
  203. package/dist/tests/sql-dump-fk-constraints.test.js +381 -0
  204. package/dist/tests/sql-dump-fk-constraints.test.js.map +1 -0
  205. package/dist/tests/sql-dump-indexes.test.d.ts +12 -0
  206. package/dist/tests/sql-dump-indexes.test.d.ts.map +1 -0
  207. package/dist/tests/sql-dump-indexes.test.js +269 -0
  208. package/dist/tests/sql-dump-indexes.test.js.map +1 -0
  209. package/dist/tests/sql-dump-integration.test.d.ts +16 -0
  210. package/dist/tests/sql-dump-integration.test.d.ts.map +1 -0
  211. package/dist/tests/sql-dump-integration.test.js +342 -0
  212. package/dist/tests/sql-dump-integration.test.js.map +1 -0
  213. package/dist/tests/sql-dump-table-ordering.test.d.ts +8 -0
  214. package/dist/tests/sql-dump-table-ordering.test.d.ts.map +1 -0
  215. package/dist/tests/sql-dump-table-ordering.test.js +253 -0
  216. package/dist/tests/sql-dump-table-ordering.test.js.map +1 -0
  217. package/dist/tests/tasks.link-file-backward-compat.test.js +11 -1
  218. package/dist/tests/tasks.link-file-backward-compat.test.js.map +1 -1
  219. package/dist/tests/tasks.watch-files-action.test.js +11 -1
  220. package/dist/tests/tasks.watch-files-action.test.js.map +1 -1
  221. package/dist/tests/type-conversion.test.d.ts +8 -0
  222. package/dist/tests/type-conversion.test.d.ts.map +1 -0
  223. package/dist/tests/type-conversion.test.js +312 -0
  224. package/dist/tests/type-conversion.test.js.map +1 -0
  225. package/dist/tests/utils/test-helpers.d.ts +93 -0
  226. package/dist/tests/utils/test-helpers.d.ts.map +1 -0
  227. package/dist/tests/utils/test-helpers.js +407 -0
  228. package/dist/tests/utils/test-helpers.js.map +1 -0
  229. package/dist/tools/config.d.ts +58 -0
  230. package/dist/tools/config.d.ts.map +1 -0
  231. package/dist/tools/config.js +281 -0
  232. package/dist/tools/config.js.map +1 -0
  233. package/dist/tools/constraints.d.ts.map +1 -1
  234. package/dist/tools/constraints.js +138 -122
  235. package/dist/tools/constraints.js.map +1 -1
  236. package/dist/tools/context.d.ts.map +1 -1
  237. package/dist/tools/context.js +216 -109
  238. package/dist/tools/context.js.map +1 -1
  239. package/dist/tools/files.d.ts.map +1 -1
  240. package/dist/tools/files.js +123 -102
  241. package/dist/tools/files.js.map +1 -1
  242. package/dist/tools/tasks.d.ts.map +1 -1
  243. package/dist/tools/tasks.js +593 -518
  244. package/dist/tools/tasks.js.map +1 -1
  245. package/dist/tools/utils.d.ts +5 -0
  246. package/dist/tools/utils.d.ts.map +1 -1
  247. package/dist/tools/utils.js +176 -122
  248. package/dist/tools/utils.js.map +1 -1
  249. package/dist/types.d.ts +9 -26
  250. package/dist/types.d.ts.map +1 -1
  251. package/dist/utils/cleanup.d.ts +3 -0
  252. package/dist/utils/cleanup.d.ts.map +1 -1
  253. package/dist/utils/cleanup.js +14 -2
  254. package/dist/utils/cleanup.js.map +1 -1
  255. package/dist/utils/connection-manager.d.ts +59 -0
  256. package/dist/utils/connection-manager.d.ts.map +1 -0
  257. package/dist/utils/connection-manager.js +178 -0
  258. package/dist/utils/connection-manager.js.map +1 -0
  259. package/dist/utils/debug-logger.d.ts +8 -4
  260. package/dist/utils/debug-logger.d.ts.map +1 -1
  261. package/dist/utils/debug-logger.js +27 -7
  262. package/dist/utils/debug-logger.js.map +1 -1
  263. package/dist/utils/error-handler.d.ts +6 -4
  264. package/dist/utils/error-handler.d.ts.map +1 -1
  265. package/dist/utils/error-handler.js +34 -9
  266. package/dist/utils/error-handler.js.map +1 -1
  267. package/dist/utils/parameter-validator.d.ts.map +1 -1
  268. package/dist/utils/parameter-validator.js +50 -16
  269. package/dist/utils/parameter-validator.js.map +1 -1
  270. package/dist/utils/project-context.d.ts +111 -0
  271. package/dist/utils/project-context.d.ts.map +1 -0
  272. package/dist/utils/project-context.js +187 -0
  273. package/dist/utils/project-context.js.map +1 -0
  274. package/dist/utils/sql-dump-converters.d.ts +188 -0
  275. package/dist/utils/sql-dump-converters.d.ts.map +1 -0
  276. package/dist/utils/sql-dump-converters.js +311 -0
  277. package/dist/utils/sql-dump-converters.js.map +1 -0
  278. package/dist/utils/sql-dump.d.ts +102 -0
  279. package/dist/utils/sql-dump.d.ts.map +1 -0
  280. package/dist/utils/sql-dump.js +1550 -0
  281. package/dist/utils/sql-dump.js.map +1 -0
  282. package/dist/utils/vcs-adapter.d.ts +42 -0
  283. package/dist/utils/vcs-adapter.d.ts.map +1 -1
  284. package/dist/utils/vcs-adapter.js +154 -0
  285. package/dist/utils/vcs-adapter.js.map +1 -1
  286. package/docs/BASEADAPTER_IMPLEMENTATION.md +399 -0
  287. package/docs/DATABASE_AUTH.md +445 -0
  288. package/docs/DATABASE_MIGRATION.md +247 -0
  289. package/docs/MULTI_PROJECT_ARCHITECTURE.md +497 -0
  290. package/package.json +12 -4
  291. package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.d.ts.map +0 -1
  292. package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.js.map +0 -1
  293. package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.d.ts.map +0 -1
  294. package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.js.map +0 -1
  295. package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.d.ts.map +0 -1
  296. package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.js.map +0 -1
  297. package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.d.ts.map +0 -1
  298. package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.js.map +0 -1
  299. package/dist/migrations/knex/bootstrap/20251025070349_create_views.d.ts.map +0 -1
  300. package/dist/migrations/knex/bootstrap/20251025070349_create_views.js.map +0 -1
  301. package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts.map +0 -1
  302. package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js +0 -15
  303. package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js.map +0 -1
  304. package/dist/migrations/knex/enhancements/20251025082220_fix_task_dependencies_columns.d.ts.map +0 -1
  305. package/dist/migrations/knex/enhancements/20251025082220_fix_task_dependencies_columns.js.map +0 -1
  306. package/dist/migrations/knex/enhancements/20251025090000_create_help_system_tables.d.ts.map +0 -1
  307. package/dist/migrations/knex/enhancements/20251025090000_create_help_system_tables.js.map +0 -1
  308. package/dist/migrations/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts.map +0 -1
  309. package/dist/migrations/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.js.map +0 -1
  310. package/dist/migrations/knex/enhancements/20251025100000_seed_help_metadata.d.ts.map +0 -1
  311. package/dist/migrations/knex/enhancements/20251025100000_seed_help_metadata.js.map +0 -1
  312. package/dist/migrations/knex/enhancements/20251025100100_seed_remaining_use_cases.d.ts.map +0 -1
  313. package/dist/migrations/knex/enhancements/20251025100100_seed_remaining_use_cases.js.map +0 -1
  314. package/dist/migrations/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts.map +0 -1
  315. package/dist/migrations/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.js.map +0 -1
  316. package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts.map +0 -1
  317. package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.js +0 -34
  318. package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.js.map +0 -1
  319. package/dist/migrations/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts.map +0 -1
  320. package/dist/migrations/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js.map +0 -1
  321. package/dist/migrations/knex/enhancements/20251027020000_update_agent_reusability.d.ts.map +0 -1
  322. package/dist/migrations/knex/enhancements/20251027020000_update_agent_reusability.js.map +0 -1
  323. package/dist/migrations/knex/enhancements/20251028000000_simplify_agent_system.d.ts.map +0 -1
  324. package/dist/migrations/knex/enhancements/20251028000000_simplify_agent_system.js.map +0 -1
  325. package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts.map +0 -1
  326. package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js.map +0 -1
  327. package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts.map +0 -1
  328. package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js.map +0 -1
  329. package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts.map +0 -1
  330. package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js.map +0 -1
  331. package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts.map +0 -1
  332. package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js.map +0 -1
  333. package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts.map +0 -1
  334. package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js.map +0 -1
  335. package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts.map +0 -1
  336. package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js.map +0 -1
  337. package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts.map +0 -1
  338. package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js.map +0 -1
  339. /package/dist/{migrations → config}/knex/bootstrap/20251025020452_create_master_tables.d.ts +0 -0
  340. /package/dist/{migrations → config}/knex/bootstrap/20251025021152_create_transaction_tables.d.ts +0 -0
  341. /package/dist/{migrations → config}/knex/bootstrap/20251025021351_create_indexes.d.ts +0 -0
  342. /package/dist/{migrations → config}/knex/bootstrap/20251025021351_create_indexes.js +0 -0
  343. /package/dist/{migrations → config}/knex/bootstrap/20251025021416_seed_master_data.d.ts +0 -0
  344. /package/dist/{migrations → config}/knex/bootstrap/20251025070349_create_views.d.ts +0 -0
  345. /package/dist/{migrations → config}/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts +0 -0
  346. /package/dist/{migrations → config}/knex/enhancements/20251025082220_fix_task_dependencies_columns.d.ts +0 -0
  347. /package/dist/{migrations → config}/knex/enhancements/20251025082220_fix_task_dependencies_columns.js +0 -0
  348. /package/dist/{migrations → config}/knex/enhancements/20251025090000_create_help_system_tables.d.ts +0 -0
  349. /package/dist/{migrations → config}/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts +0 -0
  350. /package/dist/{migrations → config}/knex/enhancements/20251025100000_seed_help_metadata.d.ts +0 -0
  351. /package/dist/{migrations → config}/knex/enhancements/20251025100100_seed_remaining_use_cases.d.ts +0 -0
  352. /package/dist/{migrations → config}/knex/enhancements/20251025100100_seed_remaining_use_cases.js +0 -0
  353. /package/dist/{migrations → config}/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts +0 -0
  354. /package/dist/{migrations → config}/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts +0 -0
  355. /package/dist/{migrations → config}/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts +0 -0
  356. /package/dist/{migrations → config}/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js +0 -0
  357. /package/dist/{migrations → config}/knex/enhancements/20251027020000_update_agent_reusability.d.ts +0 -0
  358. /package/dist/{migrations → config}/knex/enhancements/20251028000000_simplify_agent_system.d.ts +0 -0
  359. /package/dist/{migrations → config}/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts +0 -0
  360. /package/dist/{migrations → config}/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js +0 -0
  361. /package/dist/{migrations → config}/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts +0 -0
  362. /package/dist/{migrations → config}/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js +0 -0
  363. /package/dist/{migrations → config}/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts +0 -0
  364. /package/dist/{migrations → config}/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js +0 -0
  365. /package/dist/{migrations → config}/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts +0 -0
  366. /package/dist/{migrations → config}/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js +0 -0
  367. /package/dist/{migrations → config}/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts +0 -0
  368. /package/dist/{migrations → config}/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js +0 -0
  369. /package/dist/{migrations → config}/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts +0 -0
  370. /package/dist/{migrations → config}/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js +0 -0
  371. /package/dist/{migrations → config}/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts +0 -0
  372. /package/dist/{migrations → config}/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js +0 -0
@@ -1,7 +1,87 @@
1
1
  import type { Knex } from 'knex';
2
- import type { DatabaseAdapter } from './types.js';
3
- export declare class MySQLAdapter implements DatabaseAdapter {
4
- private knexInstance;
2
+ import { BaseAdapter } from './base-adapter.js';
3
+ import type { DatabaseConfig } from '../config/types.js';
4
+ /**
5
+ * MySQL adapter implementation with authentication support.
6
+ *
7
+ * This adapter provides MySQL-specific implementations for database operations,
8
+ * integrating with the authentication layer for secure connections via SSH tunnels,
9
+ * direct connections, or cloud IAM (AWS RDS, GCP Cloud SQL).
10
+ *
11
+ * **MySQL-Specific Features:**
12
+ * - ON DUPLICATE KEY UPDATE for upserts
13
+ * - JSON_EXTRACT() and JSON_OBJECT() for JSON operations
14
+ * - GROUP_CONCAT() for string aggregation
15
+ * - LAST_INSERT_ID() for retrieving inserted IDs
16
+ * - UNIX_TIMESTAMP() and FROM_UNIXTIME() for epoch conversions
17
+ * - AUTO_INCREMENT with UNSIGNED for ID columns
18
+ * - UTF8MB4 character set support for full Unicode
19
+ *
20
+ * **Supported MySQL Versions:**
21
+ * - MySQL 8.0+ (full feature support)
22
+ * - MySQL 5.7+ (basic feature support)
23
+ *
24
+ * **Authentication Methods:**
25
+ * - Direct: Standard username/password authentication
26
+ * - SSH Tunnel: Connect via SSH bastion host
27
+ * - AWS RDS IAM: Token-based authentication for AWS RDS
28
+ * - GCP Cloud SQL IAM: Token-based authentication for Cloud SQL
29
+ *
30
+ * @extends BaseAdapter
31
+ *
32
+ * @example
33
+ * // Direct connection
34
+ * const adapter = new MySQLAdapter({
35
+ * type: 'mysql',
36
+ * connection: {
37
+ * host: 'localhost',
38
+ * port: 3306,
39
+ * database: 'mydb'
40
+ * },
41
+ * auth: {
42
+ * type: 'direct',
43
+ * user: 'root',
44
+ * password: 'password'
45
+ * }
46
+ * });
47
+ *
48
+ * @example
49
+ * // SSH tunnel connection
50
+ * const adapter = new MySQLAdapter({
51
+ * type: 'mysql',
52
+ * connection: {
53
+ * host: 'db.internal',
54
+ * port: 3306,
55
+ * database: 'production'
56
+ * },
57
+ * auth: {
58
+ * type: 'ssh',
59
+ * user: 'dbuser',
60
+ * password: 'dbpass',
61
+ * ssh: {
62
+ * host: 'bastion.example.com',
63
+ * username: 'deploy',
64
+ * privateKeyPath: '/path/to/key.pem'
65
+ * }
66
+ * }
67
+ * });
68
+ *
69
+ * @example
70
+ * // AWS RDS IAM authentication
71
+ * const adapter = new MySQLAdapter({
72
+ * type: 'mysql',
73
+ * connection: {
74
+ * host: 'mydb.cluster-xxx.us-east-1.rds.amazonaws.com',
75
+ * port: 3306,
76
+ * database: 'production'
77
+ * },
78
+ * auth: {
79
+ * type: 'aws-iam',
80
+ * region: 'us-east-1'
81
+ * }
82
+ * });
83
+ */
84
+ export declare class MySQLAdapter extends BaseAdapter {
5
85
  readonly supportsReturning = false;
6
86
  readonly supportsJSON = true;
7
87
  readonly supportsUpsert = true;
@@ -9,23 +89,484 @@ export declare class MySQLAdapter implements DatabaseAdapter {
9
89
  readonly supportsWindowFunctions = true;
10
90
  readonly supportsSavepoints = true;
11
91
  readonly databaseName: "mysql";
12
- connect(config: Knex.Config): Promise<Knex>;
13
- disconnect(): Promise<void>;
14
- getKnex(): Knex;
92
+ /**
93
+ * Creates a new MySQL adapter instance.
94
+ *
95
+ * @param {DatabaseConfig} config - Database configuration with auth settings
96
+ */
97
+ constructor(config: DatabaseConfig);
98
+ /**
99
+ * Returns the Knex dialect for MySQL.
100
+ *
101
+ * Uses 'mysql2' driver which supports:
102
+ * - Prepared statements
103
+ * - Binary protocol
104
+ * - Promise-based API
105
+ * - Full Unicode (UTF8MB4)
106
+ *
107
+ * @returns {string} 'mysql2' dialect identifier
108
+ */
109
+ getDialect(): string;
110
+ /**
111
+ * Initializes MySQL-specific session settings.
112
+ *
113
+ * **Configuration Applied:**
114
+ * - Character set: UTF8MB4 for full Unicode support (including emojis)
115
+ * - Collation: utf8mb4_unicode_ci for proper sorting
116
+ * - SQL mode: TRADITIONAL for strict SQL compliance
117
+ * - Timezone: UTC for consistent timestamp handling
118
+ * - Transaction isolation: READ COMMITTED (default)
119
+ *
120
+ * **Important Notes:**
121
+ * - UTF8MB4 requires MySQL 5.5.3+
122
+ * - These settings apply to the current session only
123
+ * - Connection pool creates new sessions with these settings
124
+ *
125
+ * @returns {Promise<void>}
126
+ *
127
+ * @throws {Error} If MySQL server version is incompatible
128
+ *
129
+ * @example
130
+ * // Called automatically after connect()
131
+ * await adapter.connect();
132
+ * // Session is now configured with UTF8MB4 and UTC timezone
133
+ */
134
+ initialize(): Promise<void>;
135
+ /**
136
+ * Inserts a row and returns the inserted record.
137
+ *
138
+ * MySQL doesn't support RETURNING clause, so this method:
139
+ * 1. Inserts the row
140
+ * 2. Retrieves LAST_INSERT_ID()
141
+ * 3. Queries the inserted row by ID
142
+ *
143
+ * **Important Notes:**
144
+ * - Assumes table has an auto-increment `id` column
145
+ * - LAST_INSERT_ID() is connection-specific (thread-safe)
146
+ * - For tables without auto-increment ID, use composite unique keys
147
+ *
148
+ * @template T - Record type
149
+ * @param {string} table - Table name
150
+ * @param {Partial<T>} data - Data to insert
151
+ * @returns {Promise<T>} Inserted record
152
+ *
153
+ * @throws {Error} If insert fails or record cannot be retrieved
154
+ *
155
+ * @example
156
+ * // Insert user and return full record
157
+ * const user = await adapter.insertReturning<User>('users', {
158
+ * name: 'Alice',
159
+ * email: 'alice@example.com'
160
+ * });
161
+ * console.log(user.id); // Auto-generated ID
162
+ *
163
+ * @example
164
+ * // With transaction
165
+ * await adapter.transaction(async (trx) => {
166
+ * const user = await adapter.insertReturning<User>('users', {
167
+ * name: 'Bob'
168
+ * });
169
+ * await trx('profiles').insert({ user_id: user.id });
170
+ * });
171
+ */
15
172
  insertReturning<T extends Record<string, any>>(table: string, data: Partial<T>): Promise<T>;
173
+ /**
174
+ * Upserts a row using MySQL's ON DUPLICATE KEY UPDATE syntax.
175
+ *
176
+ * **Behavior:**
177
+ * - If row with conflicting key exists: UPDATE specified columns
178
+ * - If no conflict: INSERT new row
179
+ * - Returns number of affected rows (1 = insert, 2 = update)
180
+ *
181
+ * **Important Notes:**
182
+ * - Requires UNIQUE index or PRIMARY KEY on conflictColumns
183
+ * - MySQL counts updates as 2 affected rows (1 delete + 1 insert internally)
184
+ * - If updateColumns not specified, updates all columns except conflict columns
185
+ *
186
+ * @template T - Record type
187
+ * @param {string} table - Table name
188
+ * @param {Partial<T>} data - Data to insert/update
189
+ * @param {string[]} conflictColumns - Columns that define uniqueness (must have UNIQUE index)
190
+ * @param {string[]} [updateColumns] - Columns to update on conflict (default: all except conflict columns)
191
+ * @returns {Promise<number>} Affected rows (1 = insert, 2 = update)
192
+ *
193
+ * @throws {Error} If conflictColumns don't have UNIQUE index
194
+ *
195
+ * @example
196
+ * // Upsert user by email (UNIQUE index on email)
197
+ * await adapter.upsert('users',
198
+ * { email: 'alice@example.com', name: 'Alice Updated', age: 30 },
199
+ * ['email'], // Conflict column
200
+ * ['name', 'age'] // Update these on conflict
201
+ * );
202
+ *
203
+ * @example
204
+ * // Upsert with composite key
205
+ * await adapter.upsert('user_settings',
206
+ * { user_id: 1, setting_key: 'theme', value: 'dark' },
207
+ * ['user_id', 'setting_key'] // Composite UNIQUE key
208
+ * );
209
+ */
16
210
  upsert<T extends Record<string, any>>(table: string, data: Partial<T>, conflictColumns: string[], updateColumns?: string[]): Promise<number>;
211
+ /**
212
+ * Extracts a value from a JSON column using JSON_EXTRACT().
213
+ *
214
+ * **MySQL JSON Path Syntax:**
215
+ * - `$` - Root element
216
+ * - `$.key` - Object member
217
+ * - `$[n]` - Array element
218
+ * - `$.key[n]` - Nested access
219
+ * - `$.*.key` - Wildcard member
220
+ *
221
+ * **Important Notes:**
222
+ * - Returns JSON value (may need JSON_UNQUOTE() for strings)
223
+ * - Path must start with `$` (auto-prepended if missing)
224
+ * - Returns NULL if path doesn't exist
225
+ *
226
+ * @param {string} column - JSON column name
227
+ * @param {string} path - JSON path (e.g., '$.address.city' or 'address.city')
228
+ * @returns {Knex.Raw} Raw SQL expression for JSON extraction
229
+ *
230
+ * @example
231
+ * // Extract nested value
232
+ * const query = knex('users').select(
233
+ * adapter.jsonExtract('metadata', '$.address.city').as('city')
234
+ * );
235
+ * // SELECT JSON_EXTRACT(`metadata`, '$.address.city') AS `city` FROM `users`
236
+ *
237
+ * @example
238
+ * // Array element access
239
+ * const query = knex('orders').select(
240
+ * adapter.jsonExtract('items', '$[0].name').as('first_item')
241
+ * );
242
+ */
17
243
  jsonExtract(column: string, path: string): Knex.Raw;
244
+ /**
245
+ * Builds a JSON object from field values using JSON_OBJECT().
246
+ *
247
+ * **Behavior:**
248
+ * - Takes key-value pairs and returns JSON object
249
+ * - Automatically handles NULL values
250
+ * - Returns NULL if all values are NULL
251
+ *
252
+ * @param {Record<string, any>} fields - Object with key-value pairs
253
+ * @returns {Knex.Raw} Raw SQL expression for JSON object construction
254
+ *
255
+ * @example
256
+ * // Build JSON object from columns
257
+ * const query = knex('users').select(
258
+ * adapter.jsonBuildObject({
259
+ * name: knex.ref('name'),
260
+ * email: knex.ref('email'),
261
+ * age: knex.ref('age')
262
+ * }).as('user_json')
263
+ * );
264
+ * // SELECT JSON_OBJECT('name', `name`, 'email', `email`, 'age', `age`) AS `user_json`
265
+ *
266
+ * @example
267
+ * // With literal values
268
+ * const query = knex('orders').insert({
269
+ * metadata: adapter.jsonBuildObject({
270
+ * source: 'web',
271
+ * campaign: 'summer-sale',
272
+ * discount: 10
273
+ * })
274
+ * });
275
+ */
18
276
  jsonBuildObject(fields: Record<string, any>): Knex.Raw;
277
+ /**
278
+ * Returns current Unix timestamp using UNIX_TIMESTAMP().
279
+ *
280
+ * **Behavior:**
281
+ * - Returns seconds since Unix epoch (1970-01-01 00:00:00 UTC)
282
+ * - Always returns UTC timestamp regardless of session timezone
283
+ * - Integer value (no fractional seconds)
284
+ *
285
+ * @returns {Knex.Raw} Raw SQL expression for current timestamp
286
+ *
287
+ * @example
288
+ * // Insert with current timestamp
289
+ * await knex('events').insert({
290
+ * name: 'user_login',
291
+ * created_at: adapter.currentTimestamp()
292
+ * });
293
+ * // INSERT INTO `events` (`name`, `created_at`) VALUES ('user_login', UNIX_TIMESTAMP())
294
+ *
295
+ * @example
296
+ * // Update with current timestamp
297
+ * await knex('users')
298
+ * .where({ id: userId })
299
+ * .update({ last_seen: adapter.currentTimestamp() });
300
+ */
19
301
  currentTimestamp(): Knex.Raw;
302
+ /**
303
+ * Converts Unix epoch timestamp to MySQL datetime using FROM_UNIXTIME().
304
+ *
305
+ * **Behavior:**
306
+ * - Converts integer epoch to DATETIME
307
+ * - Returns UTC datetime (session timezone affects display)
308
+ * - Handles NULL values
309
+ *
310
+ * @param {string} epochColumn - Column containing Unix epoch timestamp
311
+ * @returns {Knex.Raw} Raw SQL expression for epoch conversion
312
+ *
313
+ * @example
314
+ * // Convert epoch to datetime for display
315
+ * const query = knex('events').select(
316
+ * 'name',
317
+ * adapter.fromUnixEpoch('created_at').as('created_datetime')
318
+ * );
319
+ * // SELECT `name`, FROM_UNIXTIME(`created_at`) AS `created_datetime` FROM `events`
320
+ *
321
+ * @example
322
+ * // Filter by datetime range using epoch column
323
+ * const query = knex('logs')
324
+ * .where(adapter.fromUnixEpoch('timestamp'), '>=', '2024-01-01')
325
+ * .andWhere(adapter.fromUnixEpoch('timestamp'), '<', '2024-02-01');
326
+ */
20
327
  fromUnixEpoch(epochColumn: string): Knex.Raw;
328
+ /**
329
+ * Converts MySQL datetime to Unix epoch using UNIX_TIMESTAMP().
330
+ *
331
+ * **Behavior:**
332
+ * - Converts DATETIME/TIMESTAMP to integer epoch
333
+ * - Assumes input is UTC
334
+ * - Handles NULL values
335
+ *
336
+ * @param {string} timestampColumn - Column containing datetime value
337
+ * @returns {Knex.Raw} Raw SQL expression for datetime conversion
338
+ *
339
+ * @example
340
+ * // Convert datetime to epoch for storage
341
+ * const query = knex('events').insert({
342
+ * name: 'signup',
343
+ * timestamp: adapter.toUnixEpoch('NOW()')
344
+ * });
345
+ *
346
+ * @example
347
+ * // Calculate time difference in seconds
348
+ * const query = knex('sessions').select(
349
+ * knex.raw('?? - ??', [
350
+ * adapter.toUnixEpoch('logout_time'),
351
+ * adapter.toUnixEpoch('login_time')
352
+ * ]).as('duration_seconds')
353
+ * );
354
+ */
21
355
  toUnixEpoch(timestampColumn: string): Knex.Raw;
356
+ /**
357
+ * Concatenates string values using CONCAT().
358
+ *
359
+ * **Behavior:**
360
+ * - Returns NULL if any argument is NULL
361
+ * - Automatically converts non-string types to strings
362
+ * - Empty strings are preserved
363
+ *
364
+ * **Alternative:** Use CONCAT_WS() for separator-based concatenation
365
+ *
366
+ * @param {...(string | Knex.Raw)[]} values - Values to concatenate
367
+ * @returns {Knex.Raw} Raw SQL expression for concatenation
368
+ *
369
+ * @example
370
+ * // Concatenate columns
371
+ * const query = knex('users').select(
372
+ * adapter.concat(
373
+ * knex.ref('first_name'),
374
+ * ' ',
375
+ * knex.ref('last_name')
376
+ * ).as('full_name')
377
+ * );
378
+ * // SELECT CONCAT(`first_name`, ' ', `last_name`) AS `full_name` FROM `users`
379
+ *
380
+ * @example
381
+ * // Build URL from parts
382
+ * const query = knex('products').select(
383
+ * adapter.concat(
384
+ * 'https://example.com/products/',
385
+ * knex.ref('slug')
386
+ * ).as('url')
387
+ * );
388
+ */
22
389
  concat(...values: Array<string | Knex.Raw>): Knex.Raw;
390
+ /**
391
+ * Aggregates strings with separator using GROUP_CONCAT().
392
+ *
393
+ * **Behavior:**
394
+ * - Concatenates values from multiple rows into single string
395
+ * - Default separator: comma (,)
396
+ * - NULL values are skipped
397
+ * - Result may be truncated by group_concat_max_len setting
398
+ *
399
+ * **Important Notes:**
400
+ * - Default max length: 1024 bytes (can be increased with SET group_concat_max_len)
401
+ * - Use with GROUP BY for grouped aggregation
402
+ * - For large results, increase group_concat_max_len session variable
403
+ *
404
+ * @param {string} column - Column to aggregate
405
+ * @param {string} [separator=','] - Separator between values
406
+ * @returns {Knex.Raw} Raw SQL expression for string aggregation
407
+ *
408
+ * @example
409
+ * // Get comma-separated list of tags
410
+ * const query = knex('posts')
411
+ * .select('posts.id', 'posts.title')
412
+ * .select(adapter.stringAgg('tags.name').as('tags'))
413
+ * .leftJoin('post_tags', 'posts.id', 'post_tags.post_id')
414
+ * .leftJoin('tags', 'post_tags.tag_id', 'tags.id')
415
+ * .groupBy('posts.id');
416
+ * // Result: { id: 1, title: 'Post', tags: 'javascript,typescript,node' }
417
+ *
418
+ * @example
419
+ * // Custom separator
420
+ * const query = knex('users')
421
+ * .select('department')
422
+ * .select(adapter.stringAgg('name', '; ').as('members'))
423
+ * .groupBy('department');
424
+ */
23
425
  stringAgg(column: string, separator?: string): Knex.Raw;
426
+ /**
427
+ * Executes a callback within a database transaction.
428
+ *
429
+ * Delegates to BaseAdapter's transaction() method, which uses Knex's
430
+ * transaction management with automatic commit/rollback.
431
+ *
432
+ * **MySQL Transaction Characteristics:**
433
+ * - Default isolation level: REPEATABLE READ
434
+ * - Supports nested transactions via savepoints
435
+ * - Automatic rollback on error
436
+ * - Deadlock detection and retry recommended for production
437
+ *
438
+ * @template T - Return type
439
+ * @param {Function} callback - Transaction callback
440
+ * @param {Object} [options] - Transaction options
441
+ * @param {string} [options.isolationLevel] - Isolation level
442
+ * @returns {Promise<T>} Transaction result
443
+ *
444
+ * @example
445
+ * // Bank transfer with transaction
446
+ * await adapter.transaction(async (trx) => {
447
+ * await trx('accounts')
448
+ * .where({ id: fromAccount })
449
+ * .decrement('balance', amount);
450
+ *
451
+ * await trx('accounts')
452
+ * .where({ id: toAccount })
453
+ * .increment('balance', amount);
454
+ * });
455
+ *
456
+ * @example
457
+ * // With isolation level
458
+ * await adapter.transaction(async (trx) => {
459
+ * // ... transaction operations ...
460
+ * }, { isolationLevel: 'serializable' });
461
+ */
24
462
  transaction<T>(callback: (trx: Knex.Transaction) => Promise<T>, options?: {
25
463
  isolationLevel?: 'serializable' | 'read committed' | 'repeatable read';
26
464
  }): Promise<T>;
465
+ /**
466
+ * Creates a savepoint within a transaction.
467
+ *
468
+ * **MySQL Savepoint Behavior:**
469
+ * - Allows partial rollback within transaction
470
+ * - Savepoint names are case-insensitive
471
+ * - Automatically released on transaction commit
472
+ * - Rolled back on transaction rollback
473
+ *
474
+ * @template T - Return type
475
+ * @param {Knex.Transaction} trx - Parent transaction
476
+ * @param {Function} callback - Savepoint callback
477
+ * @returns {Promise<T>} Savepoint result
478
+ *
479
+ * @throws {Error} If savepoint operation fails
480
+ *
481
+ * @example
482
+ * // Use savepoint for partial rollback
483
+ * await adapter.transaction(async (trx) => {
484
+ * await trx('users').insert({ name: 'Alice' });
485
+ *
486
+ * try {
487
+ * await adapter.savepoint(trx, async (sp) => {
488
+ * await sp('users').insert({ name: 'Bob' });
489
+ * throw new Error('Bob insert failed');
490
+ * });
491
+ * } catch (error) {
492
+ * // Bob insert rolled back, Alice insert preserved
493
+ * }
494
+ *
495
+ * await trx('users').insert({ name: 'Charlie' });
496
+ * });
497
+ */
27
498
  savepoint<T>(trx: Knex.Transaction, callback: (sp: Knex.Transaction) => Promise<T>): Promise<T>;
499
+ /**
500
+ * Checks if a table exists in the database.
501
+ *
502
+ * Queries INFORMATION_SCHEMA.TABLES which is the standard MySQL approach
503
+ * for table existence checking.
504
+ *
505
+ * **Important Notes:**
506
+ * - Case sensitivity depends on operating system (Linux: case-sensitive, Windows: case-insensitive)
507
+ * - Uses current database (from connection config)
508
+ * - Checks both base tables and views
509
+ *
510
+ * @param {string} tableName - Table name to check
511
+ * @returns {Promise<boolean>} True if table exists, false otherwise
512
+ *
513
+ * @example
514
+ * // Check before creating table
515
+ * if (!(await adapter.tableExists('users'))) {
516
+ * await knex.schema.createTable('users', (table) => {
517
+ * adapter.autoIncrementColumn(table);
518
+ * table.string('name');
519
+ * });
520
+ * }
521
+ *
522
+ * @example
523
+ * // Conditional migration
524
+ * if (await adapter.tableExists('old_table')) {
525
+ * await knex.raw('RENAME TABLE old_table TO new_table');
526
+ * }
527
+ */
28
528
  tableExists(tableName: string): Promise<boolean>;
529
+ /**
530
+ * Adds an auto-increment primary key column to a table.
531
+ *
532
+ * **MySQL AUTO_INCREMENT Behavior:**
533
+ * - Generates sequential integer IDs starting from 1
534
+ * - Must be indexed (PRIMARY KEY or UNIQUE)
535
+ * - Only one AUTO_INCREMENT column per table
536
+ * - Uses UNSIGNED INT for larger range (0 to 4,294,967,295)
537
+ *
538
+ * **Column Characteristics:**
539
+ * - Type: INTEGER UNSIGNED
540
+ * - Primary Key: Yes
541
+ * - Auto Increment: Yes
542
+ * - Not Nullable: Yes
543
+ *
544
+ * @param {Knex.CreateTableBuilder} table - Knex table builder
545
+ * @param {string} [columnName='id'] - Column name (default: 'id')
546
+ *
547
+ * @example
548
+ * // Create table with auto-increment ID
549
+ * await knex.schema.createTable('users', (table) => {
550
+ * adapter.autoIncrementColumn(table);
551
+ * table.string('name').notNullable();
552
+ * table.string('email').unique();
553
+ * table.timestamps(true, true);
554
+ * });
555
+ * // CREATE TABLE `users` (
556
+ * // `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
557
+ * // `name` VARCHAR(255) NOT NULL,
558
+ * // `email` VARCHAR(255) UNIQUE,
559
+ * // `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
560
+ * // `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
561
+ * // )
562
+ *
563
+ * @example
564
+ * // Custom column name
565
+ * await knex.schema.createTable('orders', (table) => {
566
+ * adapter.autoIncrementColumn(table, 'order_id');
567
+ * table.integer('user_id').unsigned().notNullable();
568
+ * });
569
+ */
29
570
  autoIncrementColumn(table: Knex.CreateTableBuilder, columnName?: string): void;
30
571
  }
31
572
  //# sourceMappingURL=mysql-adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mysql-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/mysql-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD,qBAAa,YAAa,YAAW,eAAe;IAClD,OAAO,CAAC,YAAY,CAAqB;IAGzC,QAAQ,CAAC,iBAAiB,SAAS;IACnC,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,OAAO,CAAU;IAEnC,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"}
1
+ {"version":3,"file":"mysql-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/mysql-adapter.ts"],"names":[],"mappings":"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"}