@fragno-dev/db 0.1.2 → 0.1.3

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 (137) hide show
  1. package/.turbo/turbo-build.log +195 -144
  2. package/CHANGELOG.md +6 -0
  3. package/LICENSE.md +16 -0
  4. package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +1 -1
  5. package/dist/adapters/drizzle/drizzle-adapter.js +4 -2
  6. package/dist/adapters/drizzle/drizzle-adapter.js.map +1 -1
  7. package/dist/adapters/drizzle/drizzle-query.js +2 -2
  8. package/dist/adapters/drizzle/drizzle-query.js.map +1 -1
  9. package/dist/adapters/drizzle/drizzle-uow-compiler.js +4 -4
  10. package/dist/adapters/drizzle/drizzle-uow-decoder.js +14 -4
  11. package/dist/adapters/drizzle/drizzle-uow-decoder.js.map +1 -1
  12. package/dist/adapters/drizzle/drizzle-uow-executor.js +78 -60
  13. package/dist/adapters/drizzle/drizzle-uow-executor.js.map +1 -1
  14. package/dist/adapters/drizzle/generate.js +4 -3
  15. package/dist/adapters/drizzle/generate.js.map +1 -1
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
  21. 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
  22. 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
  23. 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
  24. 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
  25. 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
  26. 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
  27. 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
  28. 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
  29. 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
  30. 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
  31. 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
  32. 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
  33. 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
  34. 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
  35. 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
  36. 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
  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/pg-core/utils/array.js.map +1 -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/query-builders/query-builder.js +14 -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/query-builders/query-builder.js.map +1 -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/query-promise.js +26 -0
  41. 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
  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/relations.js +127 -0
  43. 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
  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/selection-proxy.js +47 -0
  45. 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
  46. 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
  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/sql/expressions/conditions.js.map +1 -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/sql/expressions/select.js +13 -0
  49. 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
  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/sql/functions/aggregate.js +10 -0
  51. 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
  52. 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
  53. 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
  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/sqlite-core/columns/common.js +60 -0
  55. 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
  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/sqlite-core/db.js +269 -0
  57. 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
  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/sqlite-core/dialect.js +457 -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/sqlite-core/dialect.js.map +1 -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/sqlite-core/foreign-keys.js +68 -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/sqlite-core/foreign-keys.js.map +1 -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/sqlite-core/query-builders/count.js +41 -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/sqlite-core/query-builders/count.js.map +1 -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/sqlite-core/query-builders/delete.js +119 -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/sqlite-core/query-builders/delete.js.map +1 -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/sqlite-core/query-builders/insert.js +170 -0
  67. 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
  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/sqlite-core/query-builders/query-builder.js +75 -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/sqlite-core/query-builders/query-builder.js.map +1 -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/sqlite-core/query-builders/query.js +107 -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/sqlite-core/query-builders/query.js.map +1 -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/sqlite-core/query-builders/raw.js +37 -0
  73. 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
  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/sqlite-core/query-builders/select.js +621 -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/query-builders/select.js.map +1 -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/query-builders/update.js +170 -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/query-builders/update.js.map +1 -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/table.js +20 -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/table.js.map +1 -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/unique-constraint.js +48 -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/unique-constraint.js.map +1 -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/utils.js +17 -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/utils.js.map +1 -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/view-base.js +11 -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/view-base.js.map +1 -0
  86. 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
  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/subquery.js.map +1 -0
  88. 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
  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/table.js.map +1 -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/table.utils.js +6 -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/table.utils.js.map +1 -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/tracing-utils.js +8 -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/tracing-utils.js.map +1 -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/tracing.js +8 -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/tracing.js.map +1 -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/utils.js +53 -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/utils.js.map +1 -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/view-common.js +6 -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/view-common.js.map +1 -0
  100. package/dist/schema/serialize.js +3 -0
  101. package/dist/schema/serialize.js.map +1 -1
  102. package/package.json +15 -24
  103. package/src/adapters/drizzle/drizzle-adapter-sqlite.test.ts +585 -0
  104. package/src/adapters/drizzle/drizzle-adapter.test.ts +2 -2
  105. package/src/adapters/drizzle/drizzle-adapter.ts +11 -4
  106. package/src/adapters/drizzle/drizzle-query.ts +2 -2
  107. package/src/adapters/drizzle/drizzle-uow-compiler.test.ts +1 -1
  108. package/src/adapters/drizzle/drizzle-uow-decoder.ts +21 -4
  109. package/src/adapters/drizzle/drizzle-uow-executor.ts +155 -115
  110. package/src/adapters/drizzle/generate.test.ts +14 -14
  111. package/src/adapters/drizzle/generate.ts +9 -5
  112. package/src/schema/serialize.test.ts +1 -0
  113. package/src/schema/serialize.ts +7 -0
  114. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/column-builder.js.map +0 -1
  115. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/column.js.map +0 -1
  116. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/entity.js.map +0 -1
  117. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/columns/common.js.map +0 -1
  118. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/columns/enum.js.map +0 -1
  119. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/foreign-keys.js.map +0 -1
  120. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/unique-constraint.js.map +0 -1
  121. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/utils/array.js.map +0 -1
  122. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/conditions.js.map +0 -1
  123. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/select.js +0 -13
  124. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/select.js.map +0 -1
  125. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/functions/aggregate.js +0 -10
  126. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/functions/aggregate.js.map +0 -1
  127. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/sql.js.map +0 -1
  128. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/subquery.js.map +0 -1
  129. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.js.map +0 -1
  130. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.utils.js +0 -6
  131. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.utils.js.map +0 -1
  132. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing-utils.js +0 -8
  133. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing-utils.js.map +0 -1
  134. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing.js +0 -8
  135. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing.js.map +0 -1
  136. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/view-common.js +0 -6
  137. 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
  }
@@ -189,7 +189,7 @@ describe("generateSchema", () => {
189
189
  it("should generate SQLite schema", () => {
190
190
  const generated = generateSchema([{ namespace: "test", schema: testSchema }], "sqlite");
191
191
  expect(generated).toMatchInlineSnapshot(`
192
- "import { sqliteTable, text, integer, uniqueIndex, index, blob, foreignKey } from "drizzle-orm/sqlite-core"
192
+ "import { sqliteTable, text, integer, uniqueIndex, index, foreignKey } from "drizzle-orm/sqlite-core"
193
193
  import { createId } from "@fragno-dev/db/id"
194
194
  import { relations } from "drizzle-orm"
195
195
 
@@ -201,7 +201,7 @@ describe("generateSchema", () => {
201
201
  id: text("id").notNull().$defaultFn(() => createId()),
202
202
  key: text("key").notNull(),
203
203
  value: text("value").notNull(),
204
- _internalId: integer("_internalId").primaryKey().autoincrement().notNull(),
204
+ _internalId: integer("_internalId").primaryKey({ autoIncrement: true }).notNull(),
205
205
  _version: integer("_version").notNull().default(0)
206
206
  }, (table) => [
207
207
  uniqueIndex("unique_key").on(table.key)
@@ -218,7 +218,7 @@ describe("generateSchema", () => {
218
218
  name: text("name").notNull(),
219
219
  email: text("email").notNull(),
220
220
  age: integer("age"),
221
- _internalId: integer("_internalId").primaryKey().autoincrement().notNull(),
221
+ _internalId: integer("_internalId").primaryKey({ autoIncrement: true }).notNull(),
222
222
  _version: integer("_version").notNull().default(0)
223
223
  }, (table) => [
224
224
  uniqueIndex("idx_email_test").on(table.email),
@@ -229,9 +229,9 @@ describe("generateSchema", () => {
229
229
  id: text("id").notNull().$defaultFn(() => createId()),
230
230
  title: text("title").notNull(),
231
231
  content: text("content").notNull(),
232
- userId: blob("userId", { mode: "bigint" }).notNull(),
232
+ userId: integer("userId").notNull(),
233
233
  viewCount: integer("viewCount").notNull().default(0),
234
- _internalId: integer("_internalId").primaryKey().autoincrement().notNull(),
234
+ _internalId: integer("_internalId").primaryKey({ autoIncrement: true }).notNull(),
235
235
  _version: integer("_version").notNull().default(0)
236
236
  }, (table) => [
237
237
  foreignKey({
@@ -612,7 +612,7 @@ describe("generateSchema", () => {
612
612
  it("should generate SQLite schema with many relations", () => {
613
613
  const generated = generateSchema([{ namespace: "test", schema: oneToManySchema }], "sqlite");
614
614
  expect(generated).toMatchInlineSnapshot(`
615
- "import { sqliteTable, text, integer, uniqueIndex, blob, foreignKey, index } from "drizzle-orm/sqlite-core"
615
+ "import { sqliteTable, text, integer, uniqueIndex, foreignKey, index } from "drizzle-orm/sqlite-core"
616
616
  import { createId } from "@fragno-dev/db/id"
617
617
  import { relations } from "drizzle-orm"
618
618
 
@@ -624,7 +624,7 @@ describe("generateSchema", () => {
624
624
  id: text("id").notNull().$defaultFn(() => createId()),
625
625
  key: text("key").notNull(),
626
626
  value: text("value").notNull(),
627
- _internalId: integer("_internalId").primaryKey().autoincrement().notNull(),
627
+ _internalId: integer("_internalId").primaryKey({ autoIncrement: true }).notNull(),
628
628
  _version: integer("_version").notNull().default(0)
629
629
  }, (table) => [
630
630
  uniqueIndex("unique_key").on(table.key)
@@ -639,7 +639,7 @@ describe("generateSchema", () => {
639
639
  export const users_test = sqliteTable("users_test", {
640
640
  id: text("id").notNull().$defaultFn(() => createId()),
641
641
  name: text("name").notNull(),
642
- _internalId: integer("_internalId").primaryKey().autoincrement().notNull(),
642
+ _internalId: integer("_internalId").primaryKey({ autoIncrement: true }).notNull(),
643
643
  _version: integer("_version").notNull().default(0)
644
644
  })
645
645
 
@@ -652,8 +652,8 @@ describe("generateSchema", () => {
652
652
  export const posts_test = sqliteTable("posts_test", {
653
653
  id: text("id").notNull().$defaultFn(() => createId()),
654
654
  title: text("title").notNull(),
655
- userId: blob("userId", { mode: "bigint" }).notNull(),
656
- _internalId: integer("_internalId").primaryKey().autoincrement().notNull(),
655
+ userId: integer("userId").notNull(),
656
+ _internalId: integer("_internalId").primaryKey({ autoIncrement: true }).notNull(),
657
657
  _version: integer("_version").notNull().default(0)
658
658
  }, (table) => [
659
659
  foreignKey({
@@ -1008,7 +1008,7 @@ describe("generateSchema", () => {
1008
1008
  it("should generate SQLite self-referencing foreign key using table parameter", () => {
1009
1009
  const generated = generateSchema([{ namespace: "test", schema: selfRefSchema }], "sqlite");
1010
1010
  expect(generated).toMatchInlineSnapshot(`
1011
- "import { sqliteTable, text, integer, uniqueIndex, blob, foreignKey, index } from "drizzle-orm/sqlite-core"
1011
+ "import { sqliteTable, text, integer, uniqueIndex, foreignKey, index } from "drizzle-orm/sqlite-core"
1012
1012
  import { createId } from "@fragno-dev/db/id"
1013
1013
  import { relations } from "drizzle-orm"
1014
1014
 
@@ -1020,7 +1020,7 @@ describe("generateSchema", () => {
1020
1020
  id: text("id").notNull().$defaultFn(() => createId()),
1021
1021
  key: text("key").notNull(),
1022
1022
  value: text("value").notNull(),
1023
- _internalId: integer("_internalId").primaryKey().autoincrement().notNull(),
1023
+ _internalId: integer("_internalId").primaryKey({ autoIncrement: true }).notNull(),
1024
1024
  _version: integer("_version").notNull().default(0)
1025
1025
  }, (table) => [
1026
1026
  uniqueIndex("unique_key").on(table.key)
@@ -1035,8 +1035,8 @@ describe("generateSchema", () => {
1035
1035
  export const comment_test = sqliteTable("comment_test", {
1036
1036
  id: text("id").notNull().$defaultFn(() => createId()),
1037
1037
  content: text("content").notNull(),
1038
- parentId: blob("parentId", { mode: "bigint" }),
1039
- _internalId: integer("_internalId").primaryKey().autoincrement().notNull(),
1038
+ parentId: integer("parentId"),
1039
+ _internalId: integer("_internalId").primaryKey({ autoIncrement: true }).notNull(),
1040
1040
  _version: integer("_version").notNull().default(0)
1041
1041
  }, (table) => [
1042
1042
  foreignKey({
@@ -248,12 +248,16 @@ function generateColumnDefinition(
248
248
 
249
249
  // Primary key for internal ID
250
250
  if (column instanceof InternalIdColumn || column.role === "internal-id") {
251
- parts.push("primaryKey()");
252
-
253
- // Auto-increment based on provider
254
- // Note: PostgreSQL uses bigserial/serial which handle auto-increment automatically
255
- if (ctx.provider === "mysql" || ctx.provider === "sqlite") {
251
+ if (ctx.provider === "sqlite") {
252
+ // SQLite uses primaryKey({ autoIncrement: true })
253
+ parts.push("primaryKey({ autoIncrement: true })");
254
+ } else if (ctx.provider === "mysql") {
255
+ // MySQL uses primaryKey().autoincrement()
256
+ parts.push("primaryKey()");
256
257
  parts.push("autoincrement()");
258
+ } else {
259
+ // PostgreSQL just uses primaryKey()
260
+ parts.push("primaryKey()");
257
261
  }
258
262
  }
259
263
 
@@ -514,6 +514,7 @@ describe("serialize", () => {
514
514
 
515
515
  expect(serialize(fragnoId, referenceCol, "postgresql")).toBe(BigInt(456));
516
516
  expect(serialize(fragnoId, referenceCol, "sqlite")).toBe(BigInt(456));
517
+ expect(serialize(fragnoId, referenceCol, "mysql")).toBe(BigInt(456));
517
518
  });
518
519
 
519
520
  it("should fallback to external ID for reference column when internal ID unavailable", () => {
@@ -188,6 +188,13 @@ export function schemaToDBType(
188
188
  }
189
189
  }
190
190
 
191
+ if ("role" in column && column.role === "reference") {
192
+ if (provider === "sqlite") {
193
+ return "integer";
194
+ }
195
+ // Other providers use bigint for references
196
+ }
197
+
191
198
  if (provider === "sqlite") {
192
199
  switch (type) {
193
200
  case "integer":
@@ -1 +0,0 @@
1
- {"version":3,"file":"column-builder.js","names":[],"sources":["../../../../../../../../node_modules/.bun/drizzle-orm@0.44.6+4fae081eecb963e2/node_modules/drizzle-orm/column-builder.js"],"sourcesContent":["import { entityKind } from \"./entity.js\";\nclass ColumnBuilder {\n static [entityKind] = \"ColumnBuilder\";\n config;\n constructor(name, dataType, columnType) {\n this.config = {\n name,\n keyAsName: name === \"\",\n notNull: false,\n default: void 0,\n hasDefault: false,\n primaryKey: false,\n isUnique: false,\n uniqueName: void 0,\n uniqueType: void 0,\n dataType,\n columnType,\n generated: void 0\n };\n }\n /**\n * Changes the data type of the column. Commonly used with `json` columns. Also, useful for branded types.\n *\n * @example\n * ```ts\n * const users = pgTable('users', {\n * \tid: integer('id').$type<UserId>().primaryKey(),\n * \tdetails: json('details').$type<UserDetails>().notNull(),\n * });\n * ```\n */\n $type() {\n return this;\n }\n /**\n * Adds a `not null` clause to the column definition.\n *\n * Affects the `select` model of the table - columns *without* `not null` will be nullable on select.\n */\n notNull() {\n this.config.notNull = true;\n return this;\n }\n /**\n * Adds a `default <value>` clause to the column definition.\n *\n * Affects the `insert` model of the table - columns *with* `default` are optional on insert.\n *\n * If you need to set a dynamic default value, use {@link $defaultFn} instead.\n */\n default(value) {\n this.config.default = value;\n this.config.hasDefault = true;\n return this;\n }\n /**\n * Adds a dynamic default value to the column.\n * The function will be called when the row is inserted, and the returned value will be used as the column value.\n *\n * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n */\n $defaultFn(fn) {\n this.config.defaultFn = fn;\n this.config.hasDefault = true;\n return this;\n }\n /**\n * Alias for {@link $defaultFn}.\n */\n $default = this.$defaultFn;\n /**\n * Adds a dynamic update value to the column.\n * The function will be called when the row is updated, and the returned value will be used as the column value if none is provided.\n * If no `default` (or `$defaultFn`) value is provided, the function will be called when the row is inserted as well, and the returned value will be used as the column value.\n *\n * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n */\n $onUpdateFn(fn) {\n this.config.onUpdateFn = fn;\n this.config.hasDefault = true;\n return this;\n }\n /**\n * Alias for {@link $onUpdateFn}.\n */\n $onUpdate = this.$onUpdateFn;\n /**\n * Adds a `primary key` clause to the column definition. This implicitly makes the column `not null`.\n *\n * In SQLite, `integer primary key` implicitly makes the column auto-incrementing.\n */\n primaryKey() {\n this.config.primaryKey = true;\n this.config.notNull = true;\n return this;\n }\n /** @internal Sets the name of the column to the key within the table definition if a name was not given. */\n setName(name) {\n if (this.config.name !== \"\") return;\n this.config.name = name;\n }\n}\nexport {\n ColumnBuilder\n};\n//# sourceMappingURL=column-builder.js.map"],"x_google_ignoreList":[0],"mappings":";;;AACA,IAAM,gBAAN,MAAoB;CAClB,QAAQ,cAAc;CACtB;CACA,YAAY,MAAM,UAAU,YAAY;AACtC,OAAK,SAAS;GACZ;GACA,WAAW,SAAS;GACpB,SAAS;GACT,SAAS,KAAK;GACd,YAAY;GACZ,YAAY;GACZ,UAAU;GACV,YAAY,KAAK;GACjB,YAAY,KAAK;GACjB;GACA;GACA,WAAW,KAAK;GACjB;;;;;;;;;;;;;CAaH,QAAQ;AACN,SAAO;;;;;;;CAOT,UAAU;AACR,OAAK,OAAO,UAAU;AACtB,SAAO;;;;;;;;;CAST,QAAQ,OAAO;AACb,OAAK,OAAO,UAAU;AACtB,OAAK,OAAO,aAAa;AACzB,SAAO;;;;;;;;CAQT,WAAW,IAAI;AACb,OAAK,OAAO,YAAY;AACxB,OAAK,OAAO,aAAa;AACzB,SAAO;;;;;CAKT,WAAW,KAAK;;;;;;;;CAQhB,YAAY,IAAI;AACd,OAAK,OAAO,aAAa;AACzB,OAAK,OAAO,aAAa;AACzB,SAAO;;;;;CAKT,YAAY,KAAK;;;;;;CAMjB,aAAa;AACX,OAAK,OAAO,aAAa;AACzB,OAAK,OAAO,UAAU;AACtB,SAAO;;;CAGT,QAAQ,MAAM;AACZ,MAAI,KAAK,OAAO,SAAS,GAAI;AAC7B,OAAK,OAAO,OAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"column.js","names":[],"sources":["../../../../../../../../node_modules/.bun/drizzle-orm@0.44.6+4fae081eecb963e2/node_modules/drizzle-orm/column.js"],"sourcesContent":["import { entityKind } from \"./entity.js\";\nclass Column {\n constructor(table, config) {\n this.table = table;\n this.config = config;\n this.name = config.name;\n this.keyAsName = config.keyAsName;\n this.notNull = config.notNull;\n this.default = config.default;\n this.defaultFn = config.defaultFn;\n this.onUpdateFn = config.onUpdateFn;\n this.hasDefault = config.hasDefault;\n this.primary = config.primaryKey;\n this.isUnique = config.isUnique;\n this.uniqueName = config.uniqueName;\n this.uniqueType = config.uniqueType;\n this.dataType = config.dataType;\n this.columnType = config.columnType;\n this.generated = config.generated;\n this.generatedIdentity = config.generatedIdentity;\n }\n static [entityKind] = \"Column\";\n name;\n keyAsName;\n primary;\n notNull;\n default;\n defaultFn;\n onUpdateFn;\n hasDefault;\n isUnique;\n uniqueName;\n uniqueType;\n dataType;\n columnType;\n enumValues = void 0;\n generated = void 0;\n generatedIdentity = void 0;\n config;\n mapFromDriverValue(value) {\n return value;\n }\n mapToDriverValue(value) {\n return value;\n }\n // ** @internal */\n shouldDisableInsert() {\n return this.config.generated !== void 0 && this.config.generated.type !== \"byDefault\";\n }\n}\nexport {\n Column\n};\n//# sourceMappingURL=column.js.map"],"x_google_ignoreList":[0],"mappings":";;;AACA,IAAM,SAAN,MAAa;CACX,YAAY,OAAO,QAAQ;AACzB,OAAK,QAAQ;AACb,OAAK,SAAS;AACd,OAAK,OAAO,OAAO;AACnB,OAAK,YAAY,OAAO;AACxB,OAAK,UAAU,OAAO;AACtB,OAAK,UAAU,OAAO;AACtB,OAAK,YAAY,OAAO;AACxB,OAAK,aAAa,OAAO;AACzB,OAAK,aAAa,OAAO;AACzB,OAAK,UAAU,OAAO;AACtB,OAAK,WAAW,OAAO;AACvB,OAAK,aAAa,OAAO;AACzB,OAAK,aAAa,OAAO;AACzB,OAAK,WAAW,OAAO;AACvB,OAAK,aAAa,OAAO;AACzB,OAAK,YAAY,OAAO;AACxB,OAAK,oBAAoB,OAAO;;CAElC,QAAQ,cAAc;CACtB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,aAAa,KAAK;CAClB,YAAY,KAAK;CACjB,oBAAoB,KAAK;CACzB;CACA,mBAAmB,OAAO;AACxB,SAAO;;CAET,iBAAiB,OAAO;AACtB,SAAO;;CAGT,sBAAsB;AACpB,SAAO,KAAK,OAAO,cAAc,KAAK,KAAK,KAAK,OAAO,UAAU,SAAS"}