@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
@@ -80,7 +80,7 @@ describe("DrizzleAdapter", () => {
80
80
  id: text("id").notNull().$defaultFn(() => createId()),
81
81
  key: text("key").notNull(),
82
82
  value: text("value").notNull(),
83
- _internalId: integer("_internalId").primaryKey().autoincrement().notNull(),
83
+ _internalId: integer("_internalId").primaryKey({ autoIncrement: true }).notNull(),
84
84
  _version: integer("_version").notNull().default(0)
85
85
  }, (table) => [
86
86
  uniqueIndex("unique_key").on(table.key)
@@ -95,7 +95,7 @@ describe("DrizzleAdapter", () => {
95
95
  export const users_test = sqliteTable("users_test", {
96
96
  id: text("id").notNull().$defaultFn(() => createId()),
97
97
  name: text("name").notNull(),
98
- _internalId: integer("_internalId").primaryKey().autoincrement().notNull(),
98
+ _internalId: integer("_internalId").primaryKey({ autoIncrement: true }).notNull(),
99
99
  _version: integer("_version").notNull().default(0)
100
100
  })
101
101
 
@@ -26,10 +26,17 @@ export class DrizzleAdapter implements DatabaseAdapter<DrizzleUOWConfig> {
26
26
 
27
27
  async isConnectionHealthy(): Promise<boolean> {
28
28
  try {
29
- const result = (await (this.#drizzleConfig.db as DBType).execute(
30
- sql`SELECT 1 as healthy`,
31
- )) as DrizzleResult;
32
- return result.rows[0]["healthy"] === 1;
29
+ const result = await (this.#drizzleConfig.db as DBType).execute(sql`SELECT 1 as healthy`);
30
+
31
+ // Handle different result formats across providers
32
+ // PostgreSQL/MySQL: { rows: [...] }
33
+ // SQLite: array directly or { rows: [...] }
34
+ if (Array.isArray(result)) {
35
+ return result.length > 0 && result[0]["healthy"] === 1;
36
+ } else {
37
+ const drizzleResult = result as DrizzleResult;
38
+ return drizzleResult.rows[0]["healthy"] === 1;
39
+ }
33
40
  } catch {
34
41
  return false;
35
42
  }
@@ -54,9 +54,9 @@ export function fromDrizzle<T extends AnySchema>(
54
54
 
55
55
  const executor: UOWExecutor<DrizzleCompiledQuery, DrizzleResult> = {
56
56
  executeRetrievalPhase: (retrievalBatch: DrizzleCompiledQuery[]) =>
57
- executeDrizzleRetrievalPhase(db, retrievalBatch),
57
+ executeDrizzleRetrievalPhase(db, retrievalBatch, provider),
58
58
  executeMutationPhase: (mutationBatch: CompiledMutation<DrizzleCompiledQuery>[]) =>
59
- executeDrizzleMutationPhase(db, mutationBatch),
59
+ executeDrizzleMutationPhase(db, mutationBatch, provider),
60
60
  };
61
61
 
62
62
  const decoder = createDrizzleUOWDecoder(schema, provider);
@@ -953,7 +953,7 @@ describe("drizzle-uow-compiler", () => {
953
953
  return async () => {
954
954
  await cleanup();
955
955
  };
956
- }, 15000);
956
+ }, 20000);
957
957
 
958
958
  function createNestedUOW(name?: string) {
959
959
  const compiler = createDrizzleUOWCompiler(nestedSchema, nestedConfig);
@@ -92,6 +92,7 @@ function transformJoinArraysToObjects(
92
92
  joins?: JoinInfo[];
93
93
  };
94
94
  },
95
+ provider: SQLProvider,
95
96
  ): Record<string, unknown> {
96
97
  // Only process find operations with joins
97
98
  if (op.type !== "find" || !op.options?.joins) {
@@ -102,7 +103,17 @@ function transformJoinArraysToObjects(
102
103
 
103
104
  for (const join of op.options.joins) {
104
105
  const relationName = join.relation.name;
105
- const value = row[relationName];
106
+ let value = row[relationName];
107
+
108
+ // For SQLite, json_array returns a JSON string that needs to be parsed
109
+ if (provider === "sqlite" && typeof value === "string") {
110
+ try {
111
+ value = JSON.parse(value) as unknown;
112
+ } catch {
113
+ // If parsing fails, skip this join
114
+ continue;
115
+ }
116
+ }
106
117
 
107
118
  // Skip if not an array (join didn't return data)
108
119
  if (!Array.isArray(value)) {
@@ -149,15 +160,21 @@ export function createDrizzleUOWDecoder<TSchema extends AnySchema>(
149
160
  // Handle count operations - return the count value directly
150
161
  if (op.type === "count") {
151
162
  if (result.rows.length > 0 && result.rows[0]) {
152
- const row = result.rows[0];
153
- return (row as Record<string, unknown>)["count"] as number;
163
+ const row = result.rows[0] as Record<string, unknown>;
164
+ const countValue = row["count"] ?? row["count(*)"];
165
+
166
+ if (typeof countValue !== "number") {
167
+ throw new Error(`Unexpected result for count, received: ${countValue}`);
168
+ }
169
+
170
+ return countValue;
154
171
  }
155
172
  return 0;
156
173
  }
157
174
 
158
175
  // Handle find operations - decode each row
159
176
  return result.rows.map((row) => {
160
- const transformedRow = transformJoinArraysToObjects(row, op);
177
+ const transformedRow = transformJoinArraysToObjects(row, op, provider);
161
178
  return decodeResult(transformedRow, op.table, provider);
162
179
  });
163
180
  });
@@ -3,88 +3,105 @@ import type { CompiledMutation, MutationResult } from "../../query/unit-of-work"
3
3
  import type { DBType } from "./shared";
4
4
  import type { DrizzleCompiledQuery } from "./drizzle-uow-compiler";
5
5
  import type { DrizzleResult } from "./shared";
6
+ import { BaseSQLiteDatabase } from "drizzle-orm/sqlite-core";
7
+ import { SQLiteSyncDialect } from "drizzle-orm/sqlite-core";
8
+
9
+ type SyncSQLiteDB = BaseSQLiteDatabase<
10
+ "sync",
11
+ unknown,
12
+ Record<string, never>,
13
+ Record<string, never>
14
+ >;
15
+
16
+ function isSyncSQLite(db: unknown): boolean {
17
+ return (
18
+ db instanceof BaseSQLiteDatabase &&
19
+ "dialect" in db &&
20
+ (db as { dialect?: unknown }).dialect instanceof SQLiteSyncDialect
21
+ );
22
+ }
6
23
 
7
- /**
8
- * Convert a DrizzleCompiledQuery (SQL string + params) to a Drizzle SQL object
9
- *
10
- * This reconstructs the SQL object with proper parameter chunks by parsing
11
- * the SQL string and replacing placeholders ($1, $2, etc.) with Param objects.
12
- * Uses Drizzle's exported classes (StringChunk, Param, SQL) to build the queryChunks.
13
- */
14
- function toSQL(query: DrizzleCompiledQuery): SQL {
15
- const { sql: sqlString, params } = query;
24
+ function assertSyncSQLite(db: unknown): asserts db is SyncSQLiteDB {
25
+ if (!isSyncSQLite(db)) {
26
+ throw new Error("Expected synchronous SQLite database (better-sqlite3)");
27
+ }
28
+ }
16
29
 
17
- // Match parameter placeholders like $1, $2, etc.
30
+ function postgresToSQL(sqlString: string, params: unknown[]): SQLChunk[] {
18
31
  const placeholderRegex = /\$(\d+)/g;
19
32
  const queryChunks: SQLChunk[] = [];
20
33
  let lastIndex = 0;
21
34
  let match: RegExpExecArray | null;
22
35
 
23
36
  while ((match = placeholderRegex.exec(sqlString)) !== null) {
24
- // Add the string chunk before the placeholder
25
37
  const textBefore = sqlString.substring(lastIndex, match.index);
26
38
  if (textBefore) {
27
39
  queryChunks.push(new StringChunk(textBefore));
28
40
  }
29
41
 
30
- // Add the parameter value as a Param
31
- const paramIndex = parseInt(match[1]!, 10) - 1; // $1 is index 0
42
+ const paramIndex = parseInt(match[1]!, 10) - 1;
32
43
  queryChunks.push(sql.param(params[paramIndex]));
33
44
 
34
45
  lastIndex = match.index + match[0].length;
35
46
  }
36
47
 
37
- // Add any remaining string after the last placeholder
38
48
  const textAfter = sqlString.substring(lastIndex);
39
49
  if (textAfter) {
40
50
  queryChunks.push(new StringChunk(textAfter));
41
51
  }
42
52
 
43
- // Construct SQL object directly with queryChunks (same pattern as sql`` tagged template)
44
- // Safe: We're reusing Drizzle's SQL constructor the same way the sql`` function does
53
+ return queryChunks;
54
+ }
55
+
56
+ function sqliteToSQL(sqlString: string, params: unknown[]): SQLChunk[] {
57
+ const chunks: SQLChunk[] = [];
58
+ let currentIndex = 0;
59
+
60
+ const parts = sqlString.split("?");
61
+ for (let i = 0; i < parts.length; i++) {
62
+ if (parts[i]) {
63
+ chunks.push(new StringChunk(parts[i]));
64
+ }
65
+ if (i < parts.length - 1 && currentIndex < params.length) {
66
+ chunks.push(sql.param(params[currentIndex++]));
67
+ }
68
+ }
69
+
70
+ return chunks;
71
+ }
72
+
73
+ function toSQL(query: DrizzleCompiledQuery, provider: "sqlite" | "mysql" | "postgresql"): SQL {
74
+ const { sql: sqlString, params } = query;
75
+
76
+ const queryChunks =
77
+ provider === "sqlite" ? sqliteToSQL(sqlString, params) : postgresToSQL(sqlString, params);
78
+
45
79
  return new SQL(queryChunks);
46
80
  }
47
81
 
48
- /**
49
- * Get the number of affected rows from a Drizzle query result
50
- */
51
82
  function getAffectedRows(result: unknown): number {
52
- // Drizzle returns different formats depending on the database
53
- // For MySQL: array with affectedRows property
54
- // For PostgreSQL/SQLite: array with rowCount or similar
55
83
  if (Array.isArray(result)) {
56
- // This is likely a select/returning result
57
84
  return result.length;
58
85
  }
59
86
 
60
- // Check for MySQL-style result
61
- if (
62
- result &&
63
- typeof result === "object" &&
64
- "affectedRows" in result &&
65
- typeof result["affectedRows"] === "number"
66
- ) {
67
- return result["affectedRows"];
68
- }
87
+ if (result && typeof result === "object") {
88
+ if ("affectedRows" in result && typeof result["affectedRows"] === "number") {
89
+ return result["affectedRows"];
90
+ }
69
91
 
70
- // Check for PostgreSQL-style result with rowCount
71
- if (
72
- result &&
73
- typeof result === "object" &&
74
- "rowCount" in result &&
75
- (typeof result["rowCount"] === "number" || typeof result["rowCount"] === "bigint")
76
- ) {
77
- const rowCount = result["rowCount"];
78
- if (rowCount > Number.MAX_SAFE_INTEGER) {
79
- throw new Error(`rowCount BigInt value ${rowCount.toString()} exceeds JS safe integer range`);
92
+ if (
93
+ "rowCount" in result &&
94
+ (typeof result["rowCount"] === "number" || typeof result["rowCount"] === "bigint")
95
+ ) {
96
+ const rowCount = result["rowCount"];
97
+ if (rowCount > Number.MAX_SAFE_INTEGER) {
98
+ throw new Error(
99
+ `rowCount BigInt value ${rowCount.toString()} exceeds JS safe integer range`,
100
+ );
101
+ }
102
+ return Number(rowCount);
80
103
  }
81
- return Number(rowCount);
82
- }
83
104
 
84
- // For update/delete operations, Drizzle might return an object with affected rows info
85
- // Try to extract it from common patterns
86
- if (result && typeof result === "object") {
87
- // Check for changes/changes count
88
105
  if ("changes" in result && typeof result["changes"] === "number") {
89
106
  return result["changes"];
90
107
  }
@@ -93,40 +110,87 @@ function getAffectedRows(result: unknown): number {
93
110
  throw new Error(`Unable to determine affected rows from result: ${JSON.stringify(result)}`);
94
111
  }
95
112
 
113
+ async function executeInTransaction(
114
+ db: DBType,
115
+ provider: "sqlite" | "mysql" | "postgresql",
116
+ syncExecutor: (db: SyncSQLiteDB) => void,
117
+ asyncExecutor: (tx: { execute: (sql: SQL) => Promise<unknown> }) => Promise<void>,
118
+ ): Promise<void> {
119
+ if (provider === "sqlite" && isSyncSQLite(db)) {
120
+ assertSyncSQLite(db);
121
+ db.transaction(() => syncExecutor(db));
122
+ } else {
123
+ await db.transaction(
124
+ async (tx) => await asyncExecutor(tx as { execute: (sql: SQL) => Promise<unknown> }),
125
+ );
126
+ }
127
+ }
128
+
129
+ function extractCreatedInternalId(result: unknown): bigint | null {
130
+ if (result && typeof result === "object" && "lastInsertRowid" in result) {
131
+ if (typeof result.lastInsertRowid === "bigint") {
132
+ return result.lastInsertRowid;
133
+ }
134
+
135
+ if (typeof result.lastInsertRowid === "number") {
136
+ return BigInt(result.lastInsertRowid);
137
+ }
138
+
139
+ throw new Error(`Unexpected lastInsertRowid type: ${typeof result.lastInsertRowid}`);
140
+ }
141
+
142
+ if (Array.isArray(result) && result.length > 0) {
143
+ const row = result[0] as Record<string, unknown>;
144
+ if ("_internalId" in row || "_internal_id" in row) {
145
+ return (row["_internalId"] ?? row["_internal_id"]) as bigint;
146
+ }
147
+ }
148
+
149
+ return null;
150
+ }
151
+
152
+ function validateAffectedRows(result: unknown, expected: number): void {
153
+ const actual = getAffectedRows(result);
154
+ if (actual !== expected) {
155
+ throw new Error(`Version conflict: expected ${expected} rows affected, but got ${actual}`);
156
+ }
157
+ }
158
+
96
159
  /**
97
160
  * Execute the retrieval phase of a Unit of Work using Drizzle
98
161
  *
99
162
  * All retrieval queries are executed inside a single transaction to ensure
100
163
  * snapshot isolation - all reads see a consistent view of the database.
101
- *
102
- * @param db - The Drizzle database instance
103
- * @param retrievalBatch - Array of Drizzle SQL queries
104
- * @returns Array of query results matching the retrieval operations order
105
- *
106
- * @example
107
- * ```ts
108
- * const retrievalResults = await executeDrizzleRetrievalPhase(db, compiled.retrievalBatch);
109
- * const [users, posts] = retrievalResults;
110
- * ```
111
164
  */
112
165
  export async function executeDrizzleRetrievalPhase(
113
166
  db: DBType,
114
167
  retrievalBatch: DrizzleCompiledQuery[],
168
+ provider: "sqlite" | "mysql" | "postgresql",
115
169
  ): Promise<DrizzleResult[]> {
116
- // If no retrieval operations, return empty array immediately
117
170
  if (retrievalBatch.length === 0) {
118
171
  return [];
119
172
  }
120
173
 
121
174
  const retrievalResults: DrizzleResult[] = [];
122
175
 
123
- // Execute all retrieval queries inside a transaction for snapshot isolation
124
- await db.transaction(async (tx) => {
125
- for (const query of retrievalBatch) {
126
- const result = (await tx.execute(toSQL(query))) as DrizzleResult;
127
- retrievalResults.push(result);
128
- }
129
- });
176
+ await executeInTransaction(
177
+ db,
178
+ provider,
179
+ (syncDb) => {
180
+ for (const query of retrievalBatch) {
181
+ const sqlObj = toSQL(query, provider);
182
+ const rows = syncDb.all(sqlObj as never) as Record<string, unknown>[];
183
+ const result: DrizzleResult = { rows, affectedRows: 0 };
184
+ retrievalResults.push(result);
185
+ }
186
+ },
187
+ async (tx) => {
188
+ for (const query of retrievalBatch) {
189
+ const result = (await tx.execute(toSQL(query, provider))) as DrizzleResult;
190
+ retrievalResults.push(result);
191
+ }
192
+ },
193
+ );
130
194
 
131
195
  return retrievalResults;
132
196
  }
@@ -137,77 +201,53 @@ export async function executeDrizzleRetrievalPhase(
137
201
  * All mutation queries are executed in a transaction with optimistic locking.
138
202
  * If any version check fails, the entire transaction is rolled back and
139
203
  * success=false is returned.
140
- *
141
- * @param db - The Drizzle database instance
142
- * @param mutationBatch - Array of compiled mutation SQL queries with expected affected rows
143
- * @returns Object with success flag and internal IDs from create operations
144
- *
145
- * @example
146
- * ```ts
147
- * const { success } = await executeDrizzleMutationPhase(db, compiled.mutationBatch);
148
- * if (!success) {
149
- * console.log("Version conflict detected, retrying...");
150
- * }
151
- * ```
152
204
  */
153
205
  export async function executeDrizzleMutationPhase(
154
206
  db: DBType,
155
207
  mutationBatch: CompiledMutation<DrizzleCompiledQuery>[],
208
+ provider: "sqlite" | "mysql" | "postgresql",
156
209
  ): Promise<MutationResult> {
157
- // If there are no mutations, return success immediately
158
210
  if (mutationBatch.length === 0) {
159
211
  return { success: true, createdInternalIds: [] };
160
212
  }
161
213
 
162
214
  const createdInternalIds: (bigint | null)[] = [];
163
215
 
164
- // Execute mutation batch in a transaction
165
216
  try {
166
- await db.transaction(async (tx) => {
167
- for (const compiledMutation of mutationBatch) {
168
- const result = await tx.execute(toSQL(compiledMutation.query));
169
-
170
- // For creates (expectedAffectedRows === null), try to extract internal ID
171
- if (compiledMutation.expectedAffectedRows === null) {
172
- // Check if result is an array with rows (RETURNING clause supported)
173
- if (Array.isArray(result) && result.length > 0) {
174
- const row = result[0] as Record<string, unknown>;
175
- // Look for _internalId column in the returned row
176
- if ("_internalId" in row || "_internal_id" in row) {
177
- const internalId = (row["_internalId"] ?? row["_internal_id"]) as bigint;
178
- createdInternalIds.push(internalId);
179
- } else {
180
- // RETURNING supported but _internalId not found
181
- createdInternalIds.push(null);
182
- }
217
+ await executeInTransaction(
218
+ db,
219
+ provider,
220
+ (syncDb) => {
221
+ for (const { query, expectedAffectedRows } of mutationBatch) {
222
+ const sqlObj = toSQL(query, provider);
223
+ // Type assertion needed due to drizzle-orm version mismatch in dependencies
224
+ const result = syncDb.run(sqlObj as never);
225
+
226
+ if (expectedAffectedRows === null) {
227
+ createdInternalIds.push(extractCreatedInternalId(result));
183
228
  } else {
184
- // No RETURNING support (e.g., MySQL)
185
- createdInternalIds.push(null);
229
+ validateAffectedRows(result, expectedAffectedRows);
186
230
  }
187
- } else {
188
- // Check affected rows for updates/deletes
189
- const affectedRows = getAffectedRows(result);
190
-
191
- if (affectedRows !== compiledMutation.expectedAffectedRows) {
192
- // Version conflict detected - the UPDATE/DELETE didn't affect the expected number of rows
193
- // This means either the row doesn't exist or the version has changed
194
- throw new Error(
195
- `Version conflict: expected ${compiledMutation.expectedAffectedRows} rows affected, but got ${affectedRows}`,
196
- );
231
+ }
232
+ },
233
+ async (tx) => {
234
+ for (const { query, expectedAffectedRows } of mutationBatch) {
235
+ const result = await tx.execute(toSQL(query, provider));
236
+
237
+ if (expectedAffectedRows === null) {
238
+ createdInternalIds.push(extractCreatedInternalId(result));
239
+ } else {
240
+ validateAffectedRows(result, expectedAffectedRows);
197
241
  }
198
242
  }
199
- }
200
- });
243
+ },
244
+ );
201
245
 
202
246
  return { success: true, createdInternalIds };
203
247
  } catch (error) {
204
- // Transaction failed - could be version conflict or other constraint violation
205
- // Return success=false to indicate the UOW should be retried
206
248
  if (error instanceof Error && error.message.includes("Version conflict")) {
207
249
  return { success: false };
208
250
  }
209
-
210
- // Other database errors should be thrown
211
251
  throw error;
212
252
  }
213
253
  }