@fragno-dev/db 0.1.2 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +210 -146
- package/CHANGELOG.md +19 -0
- package/LICENSE.md +16 -0
- package/dist/adapters/adapters.js +1 -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 +5 -4
- package/dist/adapters/drizzle/generate.js.map +1 -1
- package/dist/adapters/kysely/kysely-adapter.d.ts.map +1 -1
- package/dist/adapters/kysely/kysely-adapter.js +33 -22
- package/dist/adapters/kysely/kysely-adapter.js.map +1 -1
- package/dist/adapters/kysely/migration/execute-base.js +128 -0
- package/dist/adapters/kysely/migration/execute-base.js.map +1 -0
- package/dist/adapters/kysely/migration/execute-factory.js +27 -0
- package/dist/adapters/kysely/migration/execute-factory.js.map +1 -0
- package/dist/adapters/kysely/migration/execute-mssql.js +112 -0
- package/dist/adapters/kysely/migration/execute-mssql.js.map +1 -0
- package/dist/adapters/kysely/migration/execute-mysql.js +93 -0
- package/dist/adapters/kysely/migration/execute-mysql.js.map +1 -0
- package/dist/adapters/kysely/migration/execute-postgres.js +104 -0
- package/dist/adapters/kysely/migration/execute-postgres.js.map +1 -0
- package/dist/adapters/kysely/migration/execute-sqlite.js +123 -0
- package/dist/adapters/kysely/migration/execute-sqlite.js.map +1 -0
- package/dist/adapters/kysely/migration/execute.js +23 -168
- package/dist/adapters/kysely/migration/execute.js.map +1 -1
- package/dist/migration-engine/shared.d.ts +24 -5
- package/dist/migration-engine/shared.d.ts.map +1 -1
- package/dist/migration-engine/shared.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/query/query.d.ts +4 -4
- package/dist/query/query.d.ts.map +1 -1
- package/dist/query/unit-of-work.d.ts +22 -22
- package/dist/query/unit-of-work.d.ts.map +1 -1
- package/dist/schema/create.d.ts +41 -41
- package/dist/schema/create.d.ts.map +1 -1
- package/dist/schema/serialize.js +3 -0
- package/dist/schema/serialize.js.map +1 -1
- package/package.json +20 -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 +111 -14
- package/src/adapters/drizzle/generate.ts +12 -7
- package/src/adapters/kysely/kysely-adapter.ts +46 -27
- package/src/adapters/kysely/migration/execute-base.ts +256 -0
- package/src/adapters/kysely/migration/execute-factory.ts +30 -0
- package/src/adapters/kysely/migration/execute-mssql.ts +250 -0
- package/src/adapters/kysely/migration/execute-mysql.ts +211 -0
- package/src/adapters/kysely/migration/execute-postgres.ts +234 -0
- package/src/adapters/kysely/migration/execute-sqlite.test.ts +1363 -0
- package/src/adapters/kysely/migration/execute-sqlite.ts +247 -0
- package/src/adapters/kysely/migration/execute.ts +33 -396
- package/src/adapters/kysely/migration/kysely-migrator.test.ts +84 -2
- package/src/migration-engine/shared.ts +29 -11
- package/src/schema/serialize.test.ts +1 -0
- package/src/schema/serialize.ts +7 -0
- package/tsdown.config.ts +1 -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
|
}
|