@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.
- package/.turbo/turbo-build.log +195 -144
- package/CHANGELOG.md +6 -0
- package/LICENSE.md +16 -0
- package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +1 -1
- package/dist/adapters/drizzle/drizzle-adapter.js +4 -2
- package/dist/adapters/drizzle/drizzle-adapter.js.map +1 -1
- package/dist/adapters/drizzle/drizzle-query.js +2 -2
- package/dist/adapters/drizzle/drizzle-query.js.map +1 -1
- package/dist/adapters/drizzle/drizzle-uow-compiler.js +4 -4
- package/dist/adapters/drizzle/drizzle-uow-decoder.js +14 -4
- package/dist/adapters/drizzle/drizzle-uow-decoder.js.map +1 -1
- package/dist/adapters/drizzle/drizzle-uow-executor.js +78 -60
- package/dist/adapters/drizzle/drizzle-uow-executor.js.map +1 -1
- package/dist/adapters/drizzle/generate.js +4 -3
- package/dist/adapters/drizzle/generate.js.map +1 -1
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/dist/schema/serialize.js +3 -0
- package/dist/schema/serialize.js.map +1 -1
- package/package.json +15 -24
- package/src/adapters/drizzle/drizzle-adapter-sqlite.test.ts +585 -0
- package/src/adapters/drizzle/drizzle-adapter.test.ts +2 -2
- package/src/adapters/drizzle/drizzle-adapter.ts +11 -4
- package/src/adapters/drizzle/drizzle-query.ts +2 -2
- package/src/adapters/drizzle/drizzle-uow-compiler.test.ts +1 -1
- package/src/adapters/drizzle/drizzle-uow-decoder.ts +21 -4
- package/src/adapters/drizzle/drizzle-uow-executor.ts +155 -115
- package/src/adapters/drizzle/generate.test.ts +14 -14
- package/src/adapters/drizzle/generate.ts +9 -5
- package/src/schema/serialize.test.ts +1 -0
- package/src/schema/serialize.ts +7 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/column-builder.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/column.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/entity.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/columns/common.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/columns/enum.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/foreign-keys.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/unique-constraint.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/utils/array.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/conditions.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/select.js +0 -13
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/select.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/functions/aggregate.js +0 -10
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/functions/aggregate.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/sql.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/subquery.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.utils.js +0 -6
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.utils.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing-utils.js +0 -8
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing-utils.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing.js +0 -8
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/view-common.js +0 -6
- 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().
|
|
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().
|
|
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 =
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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);
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
44
|
-
|
|
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
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
//
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
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
|
-
|
|
185
|
-
createdInternalIds.push(null);
|
|
229
|
+
validateAffectedRows(result, expectedAffectedRows);
|
|
186
230
|
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
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,
|
|
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().
|
|
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().
|
|
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:
|
|
232
|
+
userId: integer("userId").notNull(),
|
|
233
233
|
viewCount: integer("viewCount").notNull().default(0),
|
|
234
|
-
_internalId: integer("_internalId").primaryKey().
|
|
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,
|
|
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().
|
|
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().
|
|
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:
|
|
656
|
-
_internalId: integer("_internalId").primaryKey().
|
|
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,
|
|
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().
|
|
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:
|
|
1039
|
-
_internalId: integer("_internalId").primaryKey().
|
|
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
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
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", () => {
|
package/src/schema/serialize.ts
CHANGED
|
@@ -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"}
|