@fragno-dev/db 0.1.2 → 0.1.5

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 (176) hide show
  1. package/.turbo/turbo-build.log +210 -146
  2. package/CHANGELOG.md +19 -0
  3. package/LICENSE.md +16 -0
  4. package/dist/adapters/adapters.js +1 -0
  5. package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +1 -1
  6. package/dist/adapters/drizzle/drizzle-adapter.js +4 -2
  7. package/dist/adapters/drizzle/drizzle-adapter.js.map +1 -1
  8. package/dist/adapters/drizzle/drizzle-query.js +2 -2
  9. package/dist/adapters/drizzle/drizzle-query.js.map +1 -1
  10. package/dist/adapters/drizzle/drizzle-uow-compiler.js +4 -4
  11. package/dist/adapters/drizzle/drizzle-uow-decoder.js +14 -4
  12. package/dist/adapters/drizzle/drizzle-uow-decoder.js.map +1 -1
  13. package/dist/adapters/drizzle/drizzle-uow-executor.js +78 -60
  14. package/dist/adapters/drizzle/drizzle-uow-executor.js.map +1 -1
  15. package/dist/adapters/drizzle/generate.js +5 -4
  16. package/dist/adapters/drizzle/generate.js.map +1 -1
  17. package/dist/adapters/kysely/kysely-adapter.d.ts.map +1 -1
  18. package/dist/adapters/kysely/kysely-adapter.js +33 -22
  19. package/dist/adapters/kysely/kysely-adapter.js.map +1 -1
  20. package/dist/adapters/kysely/migration/execute-base.js +128 -0
  21. package/dist/adapters/kysely/migration/execute-base.js.map +1 -0
  22. package/dist/adapters/kysely/migration/execute-factory.js +27 -0
  23. package/dist/adapters/kysely/migration/execute-factory.js.map +1 -0
  24. package/dist/adapters/kysely/migration/execute-mssql.js +112 -0
  25. package/dist/adapters/kysely/migration/execute-mssql.js.map +1 -0
  26. package/dist/adapters/kysely/migration/execute-mysql.js +93 -0
  27. package/dist/adapters/kysely/migration/execute-mysql.js.map +1 -0
  28. package/dist/adapters/kysely/migration/execute-postgres.js +104 -0
  29. package/dist/adapters/kysely/migration/execute-postgres.js.map +1 -0
  30. package/dist/adapters/kysely/migration/execute-sqlite.js +123 -0
  31. package/dist/adapters/kysely/migration/execute-sqlite.js.map +1 -0
  32. package/dist/adapters/kysely/migration/execute.js +23 -168
  33. package/dist/adapters/kysely/migration/execute.js.map +1 -1
  34. package/dist/migration-engine/shared.d.ts +24 -5
  35. package/dist/migration-engine/shared.d.ts.map +1 -1
  36. package/dist/migration-engine/shared.js.map +1 -1
  37. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/alias.js +77 -0
  38. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/alias.js.map +1 -0
  39. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/casing.js +49 -0
  40. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/casing.js.map +1 -0
  41. package/dist/node_modules/{.bun/drizzle-orm@0.44.6_4fae081eecb963e2 → .pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8}/node_modules/drizzle-orm/column-builder.js +1 -1
  42. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/column-builder.js.map +1 -0
  43. package/dist/node_modules/{.bun/drizzle-orm@0.44.6_4fae081eecb963e2 → .pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8}/node_modules/drizzle-orm/column.js +1 -1
  44. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/column.js.map +1 -0
  45. package/dist/node_modules/{.bun/drizzle-orm@0.44.6_4fae081eecb963e2 → .pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8}/node_modules/drizzle-orm/entity.js +1 -1
  46. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/entity.js.map +1 -0
  47. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/errors.js +21 -0
  48. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/errors.js.map +1 -0
  49. package/dist/node_modules/{.bun/drizzle-orm@0.44.6_4fae081eecb963e2 → .pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8}/node_modules/drizzle-orm/pg-core/columns/common.js +1 -1
  50. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/pg-core/columns/common.js.map +1 -0
  51. package/dist/node_modules/{.bun/drizzle-orm@0.44.6_4fae081eecb963e2 → .pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8}/node_modules/drizzle-orm/pg-core/columns/enum.js +1 -1
  52. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/pg-core/columns/enum.js.map +1 -0
  53. package/dist/node_modules/{.bun/drizzle-orm@0.44.6_4fae081eecb963e2 → .pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8}/node_modules/drizzle-orm/pg-core/foreign-keys.js +1 -1
  54. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/pg-core/foreign-keys.js.map +1 -0
  55. package/dist/node_modules/{.bun/drizzle-orm@0.44.6_4fae081eecb963e2 → .pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8}/node_modules/drizzle-orm/pg-core/unique-constraint.js +1 -1
  56. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/pg-core/unique-constraint.js.map +1 -0
  57. package/dist/node_modules/{.bun/drizzle-orm@0.44.6_4fae081eecb963e2 → .pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8}/node_modules/drizzle-orm/pg-core/utils/array.js +1 -1
  58. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/pg-core/utils/array.js.map +1 -0
  59. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/query-builders/query-builder.js +14 -0
  60. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/query-builders/query-builder.js.map +1 -0
  61. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/query-promise.js +26 -0
  62. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/query-promise.js.map +1 -0
  63. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/relations.js +127 -0
  64. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/relations.js.map +1 -0
  65. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/selection-proxy.js +47 -0
  66. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/selection-proxy.js.map +1 -0
  67. package/dist/node_modules/{.bun/drizzle-orm@0.44.6_4fae081eecb963e2 → .pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8}/node_modules/drizzle-orm/sql/expressions/conditions.js +20 -2
  68. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sql/expressions/conditions.js.map +1 -0
  69. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sql/expressions/select.js +13 -0
  70. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sql/expressions/select.js.map +1 -0
  71. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sql/functions/aggregate.js +10 -0
  72. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sql/functions/aggregate.js.map +1 -0
  73. package/dist/node_modules/{.bun/drizzle-orm@0.44.6_4fae081eecb963e2 → .pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8}/node_modules/drizzle-orm/sql/sql.js +1 -1
  74. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sql/sql.js.map +1 -0
  75. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/columns/common.js +60 -0
  76. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/columns/common.js.map +1 -0
  77. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/db.js +269 -0
  78. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/db.js.map +1 -0
  79. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/dialect.js +457 -0
  80. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/dialect.js.map +1 -0
  81. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/foreign-keys.js +68 -0
  82. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/foreign-keys.js.map +1 -0
  83. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/count.js +41 -0
  84. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/count.js.map +1 -0
  85. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/delete.js +119 -0
  86. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/delete.js.map +1 -0
  87. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/insert.js +170 -0
  88. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/insert.js.map +1 -0
  89. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/query-builder.js +75 -0
  90. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/query-builder.js.map +1 -0
  91. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/query.js +107 -0
  92. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/query.js.map +1 -0
  93. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/raw.js +37 -0
  94. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/raw.js.map +1 -0
  95. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/select.js +621 -0
  96. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/select.js.map +1 -0
  97. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/update.js +170 -0
  98. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/update.js.map +1 -0
  99. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/table.js +20 -0
  100. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/table.js.map +1 -0
  101. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/unique-constraint.js +48 -0
  102. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/unique-constraint.js.map +1 -0
  103. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/utils.js +17 -0
  104. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/utils.js.map +1 -0
  105. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/view-base.js +11 -0
  106. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/view-base.js.map +1 -0
  107. package/dist/node_modules/{.bun/drizzle-orm@0.44.6_4fae081eecb963e2 → .pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8}/node_modules/drizzle-orm/subquery.js +2 -2
  108. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/subquery.js.map +1 -0
  109. package/dist/node_modules/{.bun/drizzle-orm@0.44.6_4fae081eecb963e2 → .pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8}/node_modules/drizzle-orm/table.js +8 -2
  110. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/table.js.map +1 -0
  111. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/table.utils.js +6 -0
  112. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/table.utils.js.map +1 -0
  113. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/tracing-utils.js +8 -0
  114. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/tracing-utils.js.map +1 -0
  115. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/tracing.js +8 -0
  116. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/tracing.js.map +1 -0
  117. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/utils.js +53 -0
  118. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/utils.js.map +1 -0
  119. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/view-common.js +6 -0
  120. package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/view-common.js.map +1 -0
  121. package/dist/query/query.d.ts +4 -4
  122. package/dist/query/query.d.ts.map +1 -1
  123. package/dist/query/unit-of-work.d.ts +22 -22
  124. package/dist/query/unit-of-work.d.ts.map +1 -1
  125. package/dist/schema/create.d.ts +41 -41
  126. package/dist/schema/create.d.ts.map +1 -1
  127. package/dist/schema/serialize.js +3 -0
  128. package/dist/schema/serialize.js.map +1 -1
  129. package/package.json +20 -24
  130. package/src/adapters/drizzle/drizzle-adapter-sqlite.test.ts +585 -0
  131. package/src/adapters/drizzle/drizzle-adapter.test.ts +2 -2
  132. package/src/adapters/drizzle/drizzle-adapter.ts +11 -4
  133. package/src/adapters/drizzle/drizzle-query.ts +2 -2
  134. package/src/adapters/drizzle/drizzle-uow-compiler.test.ts +1 -1
  135. package/src/adapters/drizzle/drizzle-uow-decoder.ts +21 -4
  136. package/src/adapters/drizzle/drizzle-uow-executor.ts +155 -115
  137. package/src/adapters/drizzle/generate.test.ts +111 -14
  138. package/src/adapters/drizzle/generate.ts +12 -7
  139. package/src/adapters/kysely/kysely-adapter.ts +46 -27
  140. package/src/adapters/kysely/migration/execute-base.ts +256 -0
  141. package/src/adapters/kysely/migration/execute-factory.ts +30 -0
  142. package/src/adapters/kysely/migration/execute-mssql.ts +250 -0
  143. package/src/adapters/kysely/migration/execute-mysql.ts +211 -0
  144. package/src/adapters/kysely/migration/execute-postgres.ts +234 -0
  145. package/src/adapters/kysely/migration/execute-sqlite.test.ts +1363 -0
  146. package/src/adapters/kysely/migration/execute-sqlite.ts +247 -0
  147. package/src/adapters/kysely/migration/execute.ts +33 -396
  148. package/src/adapters/kysely/migration/kysely-migrator.test.ts +84 -2
  149. package/src/migration-engine/shared.ts +29 -11
  150. package/src/schema/serialize.test.ts +1 -0
  151. package/src/schema/serialize.ts +7 -0
  152. package/tsdown.config.ts +1 -0
  153. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/column-builder.js.map +0 -1
  154. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/column.js.map +0 -1
  155. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/entity.js.map +0 -1
  156. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/columns/common.js.map +0 -1
  157. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/columns/enum.js.map +0 -1
  158. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/foreign-keys.js.map +0 -1
  159. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/unique-constraint.js.map +0 -1
  160. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/utils/array.js.map +0 -1
  161. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/conditions.js.map +0 -1
  162. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/select.js +0 -13
  163. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/select.js.map +0 -1
  164. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/functions/aggregate.js +0 -10
  165. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/functions/aggregate.js.map +0 -1
  166. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/sql.js.map +0 -1
  167. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/subquery.js.map +0 -1
  168. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.js.map +0 -1
  169. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.utils.js +0 -6
  170. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.utils.js.map +0 -1
  171. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing-utils.js +0 -8
  172. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing-utils.js.map +0 -1
  173. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing.js +0 -8
  174. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing.js.map +0 -1
  175. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/view-common.js +0 -6
  176. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/view-common.js.map +0 -1
@@ -0,0 +1,250 @@
1
+ import { sql } from "kysely";
2
+ import {
3
+ type ColumnOperation,
4
+ isUpdated,
5
+ type MigrationOperation,
6
+ } from "../../../migration-engine/shared";
7
+ import type { TableNameMapper } from "../kysely-shared";
8
+ import {
9
+ BaseMigrationExecutor,
10
+ createUniqueIndex,
11
+ dropUniqueIndex,
12
+ type ExecuteNode,
13
+ getForeignKeyAction,
14
+ getMssqlDefaultConstraintName,
15
+ mssqlDropDefaultConstraint,
16
+ } from "./execute-base";
17
+
18
+ const errors = {
19
+ IdColumnUpdate:
20
+ "ID columns cannot be updated. Not every database supports updating primary keys and often requires workarounds.",
21
+ } as const;
22
+
23
+ /**
24
+ * MSSQL-specific migration executor.
25
+ * Handles complex default constraint management and uses sp_rename for table renames.
26
+ */
27
+ export class MssqlMigrationExecutor extends BaseMigrationExecutor {
28
+ executeOperation(
29
+ operation: MigrationOperation,
30
+ mapper?: TableNameMapper,
31
+ ): ExecuteNode | ExecuteNode[] {
32
+ switch (operation.type) {
33
+ case "create-table":
34
+ return this.createTable(operation, mapper);
35
+ case "rename-table":
36
+ return this.renameTable(operation, mapper);
37
+ case "alter-table":
38
+ return this.alterTable(operation, mapper);
39
+ case "drop-table":
40
+ return this.dropTable(operation, mapper);
41
+ case "add-foreign-key":
42
+ return this.addForeignKey(operation, mapper);
43
+ case "drop-foreign-key":
44
+ return this.dropForeignKey(operation, mapper);
45
+ case "add-index":
46
+ return this.addIndex(operation, mapper);
47
+ case "drop-index":
48
+ return this.dropIndex(operation, mapper);
49
+ case "custom":
50
+ return this.handleCustomOperation(operation);
51
+ }
52
+ }
53
+
54
+ private createTable(
55
+ operation: Extract<MigrationOperation, { type: "create-table" }>,
56
+ mapper?: TableNameMapper,
57
+ ): ExecuteNode {
58
+ const tableName = this.getTableName(operation.name, mapper);
59
+ let builder = this.db.schema.createTable(tableName);
60
+
61
+ // Add columns
62
+ for (const columnInfo of operation.columns) {
63
+ builder = builder.addColumn(
64
+ columnInfo.name,
65
+ sql.raw(this.getDBType(columnInfo)),
66
+ this.getColumnBuilderCallback(columnInfo),
67
+ );
68
+ }
69
+
70
+ return builder;
71
+ }
72
+
73
+ private renameTable(
74
+ operation: Extract<MigrationOperation, { type: "rename-table" }>,
75
+ mapper?: TableNameMapper,
76
+ ): ExecuteNode {
77
+ // MSSQL uses sp_rename procedure
78
+ return this.rawToNode(
79
+ sql`EXEC sp_rename ${sql.lit(this.getTableName(operation.from, mapper))}, ${sql.lit(this.getTableName(operation.to, mapper))}`,
80
+ );
81
+ }
82
+
83
+ private alterTable(
84
+ operation: Extract<MigrationOperation, { type: "alter-table" }>,
85
+ mapper?: TableNameMapper,
86
+ ): ExecuteNode[] {
87
+ const results: ExecuteNode[] = [];
88
+ const tableName = this.getTableName(operation.name, mapper);
89
+
90
+ for (const columnOp of operation.value) {
91
+ results.push(...this.executeColumnOperation(tableName, columnOp));
92
+ }
93
+
94
+ return results;
95
+ }
96
+
97
+ private executeColumnOperation(tableName: string, operation: ColumnOperation): ExecuteNode[] {
98
+ const next = () => this.db.schema.alterTable(tableName);
99
+ const results: ExecuteNode[] = [];
100
+
101
+ switch (operation.type) {
102
+ case "rename-column":
103
+ results.push(next().renameColumn(operation.from, operation.to));
104
+ return results;
105
+
106
+ case "drop-column":
107
+ results.push(next().dropColumn(operation.name));
108
+ return results;
109
+
110
+ case "create-column": {
111
+ const col = operation.value;
112
+ results.push(
113
+ next().addColumn(
114
+ col.name,
115
+ sql.raw(this.getDBType(col)),
116
+ this.getColumnBuilderCallback(col),
117
+ ),
118
+ );
119
+ return results;
120
+ }
121
+
122
+ case "update-column": {
123
+ const col = operation.value;
124
+
125
+ if (col.role === "external-id" || col.role === "internal-id") {
126
+ throw new Error(errors.IdColumnUpdate);
127
+ }
128
+
129
+ if (!isUpdated(operation)) {
130
+ return results;
131
+ }
132
+
133
+ // MSSQL requires dropping and recreating default constraints when changing data type or default value
134
+ const mssqlRecreateDefaultConstraint = operation.updateDataType || operation.updateDefault;
135
+
136
+ if (mssqlRecreateDefaultConstraint) {
137
+ results.push(this.rawToNode(mssqlDropDefaultConstraint(tableName, col.name)));
138
+ }
139
+
140
+ if (operation.updateDataType) {
141
+ const dbType = sql.raw(this.getDBType(col));
142
+ results.push(next().alterColumn(operation.name, (b) => b.setDataType(dbType)));
143
+ }
144
+
145
+ if (operation.updateNullable) {
146
+ results.push(
147
+ next().alterColumn(operation.name, (build) =>
148
+ col.isNullable ? build.dropNotNull() : build.setNotNull(),
149
+ ),
150
+ );
151
+ }
152
+
153
+ if (mssqlRecreateDefaultConstraint) {
154
+ const defaultValue = this.defaultValueToDB(col);
155
+
156
+ if (defaultValue) {
157
+ const constraintName = getMssqlDefaultConstraintName(tableName, col.name);
158
+ results.push(
159
+ this.rawToNode(
160
+ sql`ALTER TABLE ${sql.ref(tableName)} ADD CONSTRAINT ${sql.ref(constraintName)} DEFAULT ${defaultValue} FOR ${sql.ref(col.name)}`,
161
+ ),
162
+ );
163
+ }
164
+ } else if (operation.updateDefault) {
165
+ const defaultValue = this.defaultValueToDB(col);
166
+ results.push(
167
+ next().alterColumn(operation.name, (build) => {
168
+ if (!defaultValue) {
169
+ return build.dropDefault();
170
+ }
171
+ return build.setDefault(defaultValue);
172
+ }),
173
+ );
174
+ }
175
+
176
+ return results;
177
+ }
178
+ }
179
+ }
180
+
181
+ private dropTable(
182
+ operation: Extract<MigrationOperation, { type: "drop-table" }>,
183
+ mapper?: TableNameMapper,
184
+ ): ExecuteNode {
185
+ return this.db.schema.dropTable(this.getTableName(operation.name, mapper));
186
+ }
187
+
188
+ private addForeignKey(
189
+ operation: Extract<MigrationOperation, { type: "add-foreign-key" }>,
190
+ mapper?: TableNameMapper,
191
+ ): ExecuteNode {
192
+ const { table, value } = operation;
193
+ const action = getForeignKeyAction(this.provider);
194
+
195
+ return this.db.schema
196
+ .alterTable(this.getTableName(table, mapper))
197
+ .addForeignKeyConstraint(
198
+ value.name,
199
+ value.columns,
200
+ this.getTableName(value.referencedTable, mapper),
201
+ value.referencedColumns,
202
+ (b) => b.onUpdate(action).onDelete(action),
203
+ );
204
+ }
205
+
206
+ private dropForeignKey(
207
+ operation: Extract<MigrationOperation, { type: "drop-foreign-key" }>,
208
+ mapper?: TableNameMapper,
209
+ ): ExecuteNode {
210
+ const { table, name } = operation;
211
+ return this.db.schema
212
+ .alterTable(this.getTableName(table, mapper))
213
+ .dropConstraint(name)
214
+ .ifExists();
215
+ }
216
+
217
+ private addIndex(
218
+ operation: Extract<MigrationOperation, { type: "add-index" }>,
219
+ mapper?: TableNameMapper,
220
+ ): ExecuteNode {
221
+ const tableName = this.getTableName(operation.table, mapper);
222
+
223
+ if (operation.unique) {
224
+ return createUniqueIndex(
225
+ this.db,
226
+ operation.name,
227
+ tableName,
228
+ operation.columns,
229
+ this.provider,
230
+ );
231
+ }
232
+
233
+ return this.db.schema.createIndex(operation.name).on(tableName).columns(operation.columns);
234
+ }
235
+
236
+ private dropIndex(
237
+ operation: Extract<MigrationOperation, { type: "drop-index" }>,
238
+ mapper?: TableNameMapper,
239
+ ): ExecuteNode {
240
+ const tableName = this.getTableName(operation.table, mapper);
241
+ return dropUniqueIndex(this.db, operation.name, tableName, this.provider);
242
+ }
243
+
244
+ private handleCustomOperation(
245
+ operation: Extract<MigrationOperation, { type: "custom" }>,
246
+ ): ExecuteNode {
247
+ const statement = sql.raw(operation["sql"] as string);
248
+ return this.rawToNode(statement);
249
+ }
250
+ }
@@ -0,0 +1,211 @@
1
+ import { sql } from "kysely";
2
+ import {
3
+ type ColumnOperation,
4
+ isUpdated,
5
+ type MigrationOperation,
6
+ } from "../../../migration-engine/shared";
7
+ import type { TableNameMapper } from "../kysely-shared";
8
+ import {
9
+ BaseMigrationExecutor,
10
+ createUniqueIndex,
11
+ dropUniqueIndex,
12
+ type ExecuteNode,
13
+ getForeignKeyAction,
14
+ } from "./execute-base";
15
+
16
+ const errors = {
17
+ IdColumnUpdate:
18
+ "ID columns cannot be updated. Not every database supports updating primary keys and often requires workarounds.",
19
+ } as const;
20
+
21
+ /**
22
+ * MySQL-specific migration executor.
23
+ * Uses modifyColumn for updates and "no action" for FK actions (RESTRICT not supported).
24
+ */
25
+ export class MysqlMigrationExecutor extends BaseMigrationExecutor {
26
+ executeOperation(
27
+ operation: MigrationOperation,
28
+ mapper?: TableNameMapper,
29
+ ): ExecuteNode | ExecuteNode[] {
30
+ switch (operation.type) {
31
+ case "create-table":
32
+ return this.createTable(operation, mapper);
33
+ case "rename-table":
34
+ return this.renameTable(operation, mapper);
35
+ case "alter-table":
36
+ return this.alterTable(operation, mapper);
37
+ case "drop-table":
38
+ return this.dropTable(operation, mapper);
39
+ case "add-foreign-key":
40
+ return this.addForeignKey(operation, mapper);
41
+ case "drop-foreign-key":
42
+ return this.dropForeignKey(operation, mapper);
43
+ case "add-index":
44
+ return this.addIndex(operation, mapper);
45
+ case "drop-index":
46
+ return this.dropIndex(operation, mapper);
47
+ case "custom":
48
+ return this.handleCustomOperation(operation);
49
+ }
50
+ }
51
+
52
+ private createTable(
53
+ operation: Extract<MigrationOperation, { type: "create-table" }>,
54
+ mapper?: TableNameMapper,
55
+ ): ExecuteNode {
56
+ const tableName = this.getTableName(operation.name, mapper);
57
+ let builder = this.db.schema.createTable(tableName);
58
+
59
+ // Add columns
60
+ for (const columnInfo of operation.columns) {
61
+ builder = builder.addColumn(
62
+ columnInfo.name,
63
+ sql.raw(this.getDBType(columnInfo)),
64
+ this.getColumnBuilderCallback(columnInfo),
65
+ );
66
+ }
67
+
68
+ return builder;
69
+ }
70
+
71
+ private renameTable(
72
+ operation: Extract<MigrationOperation, { type: "rename-table" }>,
73
+ mapper?: TableNameMapper,
74
+ ): ExecuteNode {
75
+ return this.db.schema
76
+ .alterTable(this.getTableName(operation.from, mapper))
77
+ .renameTo(this.getTableName(operation.to, mapper));
78
+ }
79
+
80
+ private alterTable(
81
+ operation: Extract<MigrationOperation, { type: "alter-table" }>,
82
+ mapper?: TableNameMapper,
83
+ ): ExecuteNode[] {
84
+ const results: ExecuteNode[] = [];
85
+ const tableName = this.getTableName(operation.name, mapper);
86
+
87
+ for (const columnOp of operation.value) {
88
+ results.push(...this.executeColumnOperation(tableName, columnOp));
89
+ }
90
+
91
+ return results;
92
+ }
93
+
94
+ private executeColumnOperation(tableName: string, operation: ColumnOperation): ExecuteNode[] {
95
+ const next = () => this.db.schema.alterTable(tableName);
96
+ const results: ExecuteNode[] = [];
97
+
98
+ switch (operation.type) {
99
+ case "rename-column":
100
+ results.push(next().renameColumn(operation.from, operation.to));
101
+ return results;
102
+
103
+ case "drop-column":
104
+ results.push(next().dropColumn(operation.name));
105
+ return results;
106
+
107
+ case "create-column": {
108
+ const col = operation.value;
109
+ results.push(
110
+ next().addColumn(
111
+ col.name,
112
+ sql.raw(this.getDBType(col)),
113
+ this.getColumnBuilderCallback(col),
114
+ ),
115
+ );
116
+ return results;
117
+ }
118
+
119
+ case "update-column": {
120
+ const col = operation.value;
121
+
122
+ if (col.role === "external-id" || col.role === "internal-id") {
123
+ throw new Error(errors.IdColumnUpdate);
124
+ }
125
+
126
+ if (!isUpdated(operation)) {
127
+ return results;
128
+ }
129
+
130
+ // MySQL: Use modifyColumn which requires the full column definition
131
+ results.push(
132
+ next().modifyColumn(
133
+ operation.name,
134
+ sql.raw(this.getDBType(col)),
135
+ this.getColumnBuilderCallback(col),
136
+ ),
137
+ );
138
+
139
+ return results;
140
+ }
141
+ }
142
+ }
143
+
144
+ private dropTable(
145
+ operation: Extract<MigrationOperation, { type: "drop-table" }>,
146
+ mapper?: TableNameMapper,
147
+ ): ExecuteNode {
148
+ return this.db.schema.dropTable(this.getTableName(operation.name, mapper));
149
+ }
150
+
151
+ private addForeignKey(
152
+ operation: Extract<MigrationOperation, { type: "add-foreign-key" }>,
153
+ mapper?: TableNameMapper,
154
+ ): ExecuteNode {
155
+ const { table, value } = operation;
156
+ const action = getForeignKeyAction(this.provider);
157
+
158
+ return this.db.schema
159
+ .alterTable(this.getTableName(table, mapper))
160
+ .addForeignKeyConstraint(
161
+ value.name,
162
+ value.columns,
163
+ this.getTableName(value.referencedTable, mapper),
164
+ value.referencedColumns,
165
+ (b) => b.onUpdate(action).onDelete(action),
166
+ );
167
+ }
168
+
169
+ private dropForeignKey(
170
+ operation: Extract<MigrationOperation, { type: "drop-foreign-key" }>,
171
+ mapper?: TableNameMapper,
172
+ ): ExecuteNode {
173
+ const { table, name } = operation;
174
+ // MySQL doesn't support IF EXISTS for dropping constraints
175
+ return this.db.schema.alterTable(this.getTableName(table, mapper)).dropConstraint(name);
176
+ }
177
+
178
+ private addIndex(
179
+ operation: Extract<MigrationOperation, { type: "add-index" }>,
180
+ mapper?: TableNameMapper,
181
+ ): ExecuteNode {
182
+ const tableName = this.getTableName(operation.table, mapper);
183
+
184
+ if (operation.unique) {
185
+ return createUniqueIndex(
186
+ this.db,
187
+ operation.name,
188
+ tableName,
189
+ operation.columns,
190
+ this.provider,
191
+ );
192
+ }
193
+
194
+ return this.db.schema.createIndex(operation.name).on(tableName).columns(operation.columns);
195
+ }
196
+
197
+ private dropIndex(
198
+ operation: Extract<MigrationOperation, { type: "drop-index" }>,
199
+ mapper?: TableNameMapper,
200
+ ): ExecuteNode {
201
+ const tableName = this.getTableName(operation.table, mapper);
202
+ return dropUniqueIndex(this.db, operation.name, tableName, this.provider);
203
+ }
204
+
205
+ private handleCustomOperation(
206
+ operation: Extract<MigrationOperation, { type: "custom" }>,
207
+ ): ExecuteNode {
208
+ const statement = sql.raw(operation["sql"] as string);
209
+ return this.rawToNode(statement);
210
+ }
211
+ }
@@ -0,0 +1,234 @@
1
+ import { sql } from "kysely";
2
+ import {
3
+ type ColumnOperation,
4
+ isUpdated,
5
+ type MigrationOperation,
6
+ } from "../../../migration-engine/shared";
7
+ import type { TableNameMapper } from "../kysely-shared";
8
+ import {
9
+ BaseMigrationExecutor,
10
+ createUniqueIndex,
11
+ dropUniqueIndex,
12
+ type ExecuteNode,
13
+ getForeignKeyAction,
14
+ } from "./execute-base";
15
+
16
+ const errors = {
17
+ IdColumnUpdate:
18
+ "ID columns cannot be updated. Not every database supports updating primary keys and often requires workarounds.",
19
+ } as const;
20
+
21
+ /**
22
+ * PostgreSQL/CockroachDB-specific migration executor.
23
+ * Uses explicit USING clauses for type conversion.
24
+ */
25
+ export class PostgresMigrationExecutor extends BaseMigrationExecutor {
26
+ executeOperation(
27
+ operation: MigrationOperation,
28
+ mapper?: TableNameMapper,
29
+ ): ExecuteNode | ExecuteNode[] {
30
+ switch (operation.type) {
31
+ case "create-table":
32
+ return this.createTable(operation, mapper);
33
+ case "rename-table":
34
+ return this.renameTable(operation, mapper);
35
+ case "alter-table":
36
+ return this.alterTable(operation, mapper);
37
+ case "drop-table":
38
+ return this.dropTable(operation, mapper);
39
+ case "add-foreign-key":
40
+ return this.addForeignKey(operation, mapper);
41
+ case "drop-foreign-key":
42
+ return this.dropForeignKey(operation, mapper);
43
+ case "add-index":
44
+ return this.addIndex(operation, mapper);
45
+ case "drop-index":
46
+ return this.dropIndex(operation, mapper);
47
+ case "custom":
48
+ return this.handleCustomOperation(operation);
49
+ }
50
+ }
51
+
52
+ private createTable(
53
+ operation: Extract<MigrationOperation, { type: "create-table" }>,
54
+ mapper?: TableNameMapper,
55
+ ): ExecuteNode {
56
+ const tableName = this.getTableName(operation.name, mapper);
57
+ let builder = this.db.schema.createTable(tableName);
58
+
59
+ // Add columns
60
+ for (const columnInfo of operation.columns) {
61
+ builder = builder.addColumn(
62
+ columnInfo.name,
63
+ sql.raw(this.getDBType(columnInfo)),
64
+ this.getColumnBuilderCallback(columnInfo),
65
+ );
66
+ }
67
+
68
+ return builder;
69
+ }
70
+
71
+ private renameTable(
72
+ operation: Extract<MigrationOperation, { type: "rename-table" }>,
73
+ mapper?: TableNameMapper,
74
+ ): ExecuteNode {
75
+ return this.db.schema
76
+ .alterTable(this.getTableName(operation.from, mapper))
77
+ .renameTo(this.getTableName(operation.to, mapper));
78
+ }
79
+
80
+ private alterTable(
81
+ operation: Extract<MigrationOperation, { type: "alter-table" }>,
82
+ mapper?: TableNameMapper,
83
+ ): ExecuteNode[] {
84
+ const results: ExecuteNode[] = [];
85
+ const tableName = this.getTableName(operation.name, mapper);
86
+
87
+ for (const columnOp of operation.value) {
88
+ results.push(...this.executeColumnOperation(tableName, columnOp));
89
+ }
90
+
91
+ return results;
92
+ }
93
+
94
+ private executeColumnOperation(tableName: string, operation: ColumnOperation): ExecuteNode[] {
95
+ const next = () => this.db.schema.alterTable(tableName);
96
+ const results: ExecuteNode[] = [];
97
+
98
+ switch (operation.type) {
99
+ case "rename-column":
100
+ results.push(next().renameColumn(operation.from, operation.to));
101
+ return results;
102
+
103
+ case "drop-column":
104
+ results.push(next().dropColumn(operation.name));
105
+ return results;
106
+
107
+ case "create-column": {
108
+ const col = operation.value;
109
+ results.push(
110
+ next().addColumn(
111
+ col.name,
112
+ sql.raw(this.getDBType(col)),
113
+ this.getColumnBuilderCallback(col),
114
+ ),
115
+ );
116
+ return results;
117
+ }
118
+
119
+ case "update-column": {
120
+ const col = operation.value;
121
+
122
+ if (col.role === "external-id" || col.role === "internal-id") {
123
+ throw new Error(errors.IdColumnUpdate);
124
+ }
125
+
126
+ if (!isUpdated(operation)) {
127
+ return results;
128
+ }
129
+
130
+ // PostgreSQL/CockroachDB: Use explicit USING clause for type conversion
131
+ if (operation.updateDataType) {
132
+ const dbType = sql.raw(this.getDBType(col));
133
+ results.push(
134
+ this.rawToNode(
135
+ sql`ALTER TABLE ${sql.ref(tableName)} ALTER COLUMN ${sql.ref(operation.name)} TYPE ${dbType} USING (${sql.ref(operation.name)}::${dbType})`,
136
+ ),
137
+ );
138
+ }
139
+
140
+ if (operation.updateNullable) {
141
+ results.push(
142
+ next().alterColumn(operation.name, (build) =>
143
+ col.isNullable ? build.dropNotNull() : build.setNotNull(),
144
+ ),
145
+ );
146
+ }
147
+
148
+ if (operation.updateDefault) {
149
+ const defaultValue = this.defaultValueToDB(col);
150
+ results.push(
151
+ next().alterColumn(operation.name, (build) => {
152
+ if (!defaultValue) {
153
+ return build.dropDefault();
154
+ }
155
+ return build.setDefault(defaultValue);
156
+ }),
157
+ );
158
+ }
159
+
160
+ return results;
161
+ }
162
+ }
163
+ }
164
+
165
+ private dropTable(
166
+ operation: Extract<MigrationOperation, { type: "drop-table" }>,
167
+ mapper?: TableNameMapper,
168
+ ): ExecuteNode {
169
+ return this.db.schema.dropTable(this.getTableName(operation.name, mapper));
170
+ }
171
+
172
+ private addForeignKey(
173
+ operation: Extract<MigrationOperation, { type: "add-foreign-key" }>,
174
+ mapper?: TableNameMapper,
175
+ ): ExecuteNode {
176
+ const { table, value } = operation;
177
+ const action = getForeignKeyAction(this.provider);
178
+
179
+ return this.db.schema
180
+ .alterTable(this.getTableName(table, mapper))
181
+ .addForeignKeyConstraint(
182
+ value.name,
183
+ value.columns,
184
+ this.getTableName(value.referencedTable, mapper),
185
+ value.referencedColumns,
186
+ (b) => b.onUpdate(action).onDelete(action),
187
+ );
188
+ }
189
+
190
+ private dropForeignKey(
191
+ operation: Extract<MigrationOperation, { type: "drop-foreign-key" }>,
192
+ mapper?: TableNameMapper,
193
+ ): ExecuteNode {
194
+ const { table, name } = operation;
195
+ return this.db.schema
196
+ .alterTable(this.getTableName(table, mapper))
197
+ .dropConstraint(name)
198
+ .ifExists();
199
+ }
200
+
201
+ private addIndex(
202
+ operation: Extract<MigrationOperation, { type: "add-index" }>,
203
+ mapper?: TableNameMapper,
204
+ ): ExecuteNode {
205
+ const tableName = this.getTableName(operation.table, mapper);
206
+
207
+ if (operation.unique) {
208
+ return createUniqueIndex(
209
+ this.db,
210
+ operation.name,
211
+ tableName,
212
+ operation.columns,
213
+ this.provider,
214
+ );
215
+ }
216
+
217
+ return this.db.schema.createIndex(operation.name).on(tableName).columns(operation.columns);
218
+ }
219
+
220
+ private dropIndex(
221
+ operation: Extract<MigrationOperation, { type: "drop-index" }>,
222
+ mapper?: TableNameMapper,
223
+ ): ExecuteNode {
224
+ const tableName = this.getTableName(operation.table, mapper);
225
+ return dropUniqueIndex(this.db, operation.name, tableName, this.provider);
226
+ }
227
+
228
+ private handleCustomOperation(
229
+ operation: Extract<MigrationOperation, { type: "custom" }>,
230
+ ): ExecuteNode {
231
+ const statement = sql.raw(operation["sql"] as string);
232
+ return this.rawToNode(statement);
233
+ }
234
+ }