@fragno-dev/db 0.1.14 → 0.2.0
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 +242 -139
- package/CHANGELOG.md +47 -0
- package/README.md +123 -8
- package/dist/adapters/adapters.d.ts +19 -5
- package/dist/adapters/adapters.d.ts.map +1 -1
- package/dist/adapters/adapters.js.map +1 -1
- package/dist/adapters/drizzle/drizzle-adapter.d.ts +6 -19
- package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +1 -1
- package/dist/adapters/drizzle/drizzle-adapter.js +7 -47
- package/dist/adapters/drizzle/drizzle-adapter.js.map +1 -1
- package/dist/adapters/drizzle/generate.d.ts +7 -1
- package/dist/adapters/drizzle/generate.d.ts.map +1 -1
- package/dist/adapters/drizzle/generate.js +46 -45
- package/dist/adapters/drizzle/generate.js.map +1 -1
- package/dist/adapters/generic-sql/driver-config.d.ts +74 -0
- package/dist/adapters/generic-sql/driver-config.d.ts.map +1 -0
- package/dist/adapters/generic-sql/driver-config.js +94 -0
- package/dist/adapters/generic-sql/driver-config.js.map +1 -0
- package/dist/adapters/generic-sql/generic-sql-adapter.d.ts +43 -0
- package/dist/adapters/generic-sql/generic-sql-adapter.d.ts.map +1 -0
- package/dist/adapters/generic-sql/generic-sql-adapter.js +87 -0
- package/dist/adapters/generic-sql/generic-sql-adapter.js.map +1 -0
- package/dist/adapters/generic-sql/generic-sql-uow-executor.js +67 -0
- package/dist/adapters/generic-sql/generic-sql-uow-executor.js.map +1 -0
- package/dist/adapters/generic-sql/migration/cold-kysely.js +33 -0
- package/dist/adapters/generic-sql/migration/cold-kysely.js.map +1 -0
- package/dist/adapters/generic-sql/migration/dialect/mysql.js +60 -0
- package/dist/adapters/generic-sql/migration/dialect/mysql.js.map +1 -0
- package/dist/adapters/generic-sql/migration/dialect/postgres.js +59 -0
- package/dist/adapters/generic-sql/migration/dialect/postgres.js.map +1 -0
- package/dist/adapters/generic-sql/migration/dialect/sqlite.js +96 -0
- package/dist/adapters/generic-sql/migration/dialect/sqlite.js.map +1 -0
- package/dist/adapters/generic-sql/migration/executor.d.ts +15 -0
- package/dist/adapters/generic-sql/migration/executor.d.ts.map +1 -0
- package/dist/adapters/generic-sql/migration/executor.js +18 -0
- package/dist/adapters/generic-sql/migration/executor.js.map +1 -0
- package/dist/adapters/generic-sql/migration/prepared-migrations.d.ts +66 -0
- package/dist/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -0
- package/dist/adapters/generic-sql/migration/prepared-migrations.js +68 -0
- package/dist/adapters/generic-sql/migration/prepared-migrations.js.map +1 -0
- package/dist/adapters/generic-sql/migration/sql-generator.js +212 -0
- package/dist/adapters/generic-sql/migration/sql-generator.js.map +1 -0
- package/dist/adapters/generic-sql/query/create-sql-query-compiler.js +32 -0
- package/dist/adapters/generic-sql/query/create-sql-query-compiler.js.map +1 -0
- package/dist/adapters/generic-sql/query/cursor-utils.js +37 -0
- package/dist/adapters/generic-sql/query/cursor-utils.js.map +1 -0
- package/dist/adapters/generic-sql/query/dialect/mysql.js +33 -0
- package/dist/adapters/generic-sql/query/dialect/mysql.js.map +1 -0
- package/dist/adapters/generic-sql/query/dialect/postgres.js +32 -0
- package/dist/adapters/generic-sql/query/dialect/postgres.js.map +1 -0
- package/dist/adapters/generic-sql/query/dialect/sqlite.js +32 -0
- package/dist/adapters/generic-sql/query/dialect/sqlite.js.map +1 -0
- package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js +152 -0
- package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js.map +1 -0
- package/dist/adapters/generic-sql/query/select-builder.js +69 -0
- package/dist/adapters/generic-sql/query/select-builder.js.map +1 -0
- package/dist/adapters/generic-sql/query/sql-query-compiler.js +145 -0
- package/dist/adapters/generic-sql/query/sql-query-compiler.js.map +1 -0
- package/dist/adapters/generic-sql/query/where-builder.js +129 -0
- package/dist/adapters/generic-sql/query/where-builder.js.map +1 -0
- package/dist/adapters/generic-sql/result-interpreter.js +74 -0
- package/dist/adapters/generic-sql/result-interpreter.js.map +1 -0
- package/dist/adapters/generic-sql/uow-decoder.js +105 -0
- package/dist/adapters/generic-sql/uow-decoder.js.map +1 -0
- package/dist/adapters/generic-sql/uow-encoder.js +93 -0
- package/dist/adapters/generic-sql/uow-encoder.js.map +1 -0
- package/dist/adapters/kysely/kysely-adapter.d.ts +5 -16
- package/dist/adapters/kysely/kysely-adapter.d.ts.map +1 -1
- package/dist/adapters/kysely/kysely-adapter.js +6 -159
- package/dist/adapters/kysely/kysely-adapter.js.map +1 -1
- package/dist/adapters/{drizzle/drizzle-query.js → shared/from-unit-of-work-compiler.js} +48 -62
- package/dist/adapters/shared/from-unit-of-work-compiler.js.map +1 -0
- package/dist/adapters/{kysely/kysely-shared.d.ts → shared/table-name-mapper.d.ts} +3 -2
- package/dist/adapters/shared/table-name-mapper.d.ts.map +1 -0
- package/dist/adapters/shared/table-name-mapper.js +43 -0
- package/dist/adapters/shared/table-name-mapper.js.map +1 -0
- package/dist/adapters/shared/uow-operation-compiler.js +105 -0
- package/dist/adapters/shared/uow-operation-compiler.js.map +1 -0
- package/dist/db-fragment-definition-builder.d.ts +186 -0
- package/dist/db-fragment-definition-builder.d.ts.map +1 -0
- package/dist/db-fragment-definition-builder.js +207 -0
- package/dist/db-fragment-definition-builder.js.map +1 -0
- package/dist/fragments/internal-fragment.d.ts +53 -0
- package/dist/fragments/internal-fragment.d.ts.map +1 -0
- package/dist/fragments/internal-fragment.js +111 -0
- package/dist/fragments/internal-fragment.js.map +1 -0
- package/dist/hooks/hooks.d.ts +51 -0
- package/dist/hooks/hooks.d.ts.map +1 -0
- package/dist/hooks/hooks.js +88 -0
- package/dist/hooks/hooks.js.map +1 -0
- package/dist/migration-engine/generation-engine.d.ts +0 -2
- package/dist/migration-engine/generation-engine.d.ts.map +1 -1
- package/dist/migration-engine/generation-engine.js +38 -56
- package/dist/migration-engine/generation-engine.js.map +1 -1
- package/dist/mod.d.ts +35 -23
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +48 -45
- package/dist/mod.js.map +1 -1
- package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js +165 -0
- package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js.map +1 -0
- package/dist/packages/fragno/dist/api/bind-services.js +20 -0
- package/dist/packages/fragno/dist/api/bind-services.js.map +1 -0
- package/dist/packages/fragno/dist/api/error.js +48 -0
- package/dist/packages/fragno/dist/api/error.js.map +1 -0
- package/dist/packages/fragno/dist/api/fragment-definition-builder.js +320 -0
- package/dist/packages/fragno/dist/api/fragment-definition-builder.js.map +1 -0
- package/dist/packages/fragno/dist/api/fragment-instantiator.js +525 -0
- package/dist/packages/fragno/dist/api/fragment-instantiator.js.map +1 -0
- package/dist/packages/fragno/dist/api/fragno-response.js +73 -0
- package/dist/packages/fragno/dist/api/fragno-response.js.map +1 -0
- package/dist/packages/fragno/dist/api/internal/response-stream.js +81 -0
- package/dist/packages/fragno/dist/api/internal/response-stream.js.map +1 -0
- package/dist/packages/fragno/dist/api/internal/route.js +10 -0
- package/dist/packages/fragno/dist/api/internal/route.js.map +1 -0
- package/dist/packages/fragno/dist/api/mutable-request-state.js +97 -0
- package/dist/packages/fragno/dist/api/mutable-request-state.js.map +1 -0
- package/dist/packages/fragno/dist/api/request-context-storage.js +43 -0
- package/dist/packages/fragno/dist/api/request-context-storage.js.map +1 -0
- package/dist/packages/fragno/dist/api/request-input-context.js +118 -0
- package/dist/packages/fragno/dist/api/request-input-context.js.map +1 -0
- package/dist/packages/fragno/dist/api/request-middleware.js +83 -0
- package/dist/packages/fragno/dist/api/request-middleware.js.map +1 -0
- package/dist/packages/fragno/dist/api/request-output-context.js +119 -0
- package/dist/packages/fragno/dist/api/request-output-context.js.map +1 -0
- package/dist/packages/fragno/dist/api/route.js +17 -0
- package/dist/packages/fragno/dist/api/route.js.map +1 -0
- package/dist/packages/fragno/dist/internal/symbols.js +10 -0
- package/dist/packages/fragno/dist/internal/symbols.js.map +1 -0
- package/dist/query/column-defaults.js +27 -0
- package/dist/query/column-defaults.js.map +1 -0
- package/dist/query/cursor.d.ts +14 -6
- package/dist/query/cursor.d.ts.map +1 -1
- package/dist/query/cursor.js +16 -7
- package/dist/query/cursor.js.map +1 -1
- package/dist/query/orm/orm.d.ts +1 -1
- package/dist/query/orm/orm.js.map +1 -1
- package/dist/query/serialize/create-sql-serializer.js +30 -0
- package/dist/query/serialize/create-sql-serializer.js.map +1 -0
- package/dist/query/serialize/dialect/mysql-serializer.js +87 -0
- package/dist/query/serialize/dialect/mysql-serializer.js.map +1 -0
- package/dist/query/serialize/dialect/postgres-serializer.js +80 -0
- package/dist/query/serialize/dialect/postgres-serializer.js.map +1 -0
- package/dist/query/serialize/dialect/sqlite-serializer.js +93 -0
- package/dist/query/serialize/dialect/sqlite-serializer.js.map +1 -0
- package/dist/query/serialize/sql-serializer.js +67 -0
- package/dist/query/serialize/sql-serializer.js.map +1 -0
- package/dist/query/{query.d.ts → simple-query-interface.d.ts} +6 -6
- package/dist/query/simple-query-interface.d.ts.map +1 -0
- package/dist/query/unit-of-work/execute-unit-of-work.d.ts +133 -0
- package/dist/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -0
- package/dist/query/unit-of-work/execute-unit-of-work.js +197 -0
- package/dist/query/unit-of-work/execute-unit-of-work.js.map +1 -0
- package/dist/query/unit-of-work/retry-policy.d.ts +88 -0
- package/dist/query/unit-of-work/retry-policy.d.ts.map +1 -0
- package/dist/query/unit-of-work/retry-policy.js +61 -0
- package/dist/query/unit-of-work/retry-policy.js.map +1 -0
- package/dist/query/{unit-of-work.d.ts → unit-of-work/unit-of-work.d.ts} +145 -58
- package/dist/query/unit-of-work/unit-of-work.d.ts.map +1 -0
- package/dist/query/{unit-of-work.js → unit-of-work/unit-of-work.js} +435 -198
- package/dist/query/unit-of-work/unit-of-work.js.map +1 -0
- package/dist/query/value-decoding.js +71 -0
- package/dist/query/value-decoding.js.map +1 -0
- package/dist/query/value-encoding.js +124 -0
- package/dist/query/value-encoding.js.map +1 -0
- package/dist/schema/create.d.ts +3 -0
- package/dist/schema/create.d.ts.map +1 -1
- package/dist/schema/create.js +4 -0
- package/dist/schema/create.js.map +1 -1
- package/dist/schema/type-conversion/create-sql-type-mapper.js +29 -0
- package/dist/schema/type-conversion/create-sql-type-mapper.js.map +1 -0
- package/dist/schema/type-conversion/dialect/mysql.js +57 -0
- package/dist/schema/type-conversion/dialect/mysql.js.map +1 -0
- package/dist/schema/type-conversion/dialect/postgres.js +56 -0
- package/dist/schema/type-conversion/dialect/postgres.js.map +1 -0
- package/dist/schema/type-conversion/dialect/sqlite.js +52 -0
- package/dist/schema/type-conversion/dialect/sqlite.js.map +1 -0
- package/dist/schema/type-conversion/type-mapping.js +63 -0
- package/dist/schema/type-conversion/type-mapping.js.map +1 -0
- package/dist/sql-driver/connection/connection-provider.d.ts +13 -0
- package/dist/sql-driver/connection/connection-provider.d.ts.map +1 -0
- package/dist/sql-driver/connection/connection-provider.js +19 -0
- package/dist/sql-driver/connection/connection-provider.js.map +1 -0
- package/dist/sql-driver/connection/single-connection-provider.js +23 -0
- package/dist/sql-driver/connection/single-connection-provider.js.map +1 -0
- package/dist/sql-driver/dialect-adapter/dialect-adapter.d.ts +7 -0
- package/dist/sql-driver/dialect-adapter/dialect-adapter.d.ts.map +1 -0
- package/dist/sql-driver/dialects/dialects.d.ts +2 -0
- package/dist/sql-driver/dialects/dialects.js +3 -0
- package/dist/sql-driver/dialects/durable-object-dialect.d.ts +72 -0
- package/dist/sql-driver/dialects/durable-object-dialect.d.ts.map +1 -0
- package/dist/sql-driver/dialects/durable-object-dialect.js +130 -0
- package/dist/sql-driver/dialects/durable-object-dialect.js.map +1 -0
- package/dist/sql-driver/driver/runtime-driver.d.ts +23 -0
- package/dist/sql-driver/driver/runtime-driver.d.ts.map +1 -0
- package/dist/sql-driver/driver/runtime-driver.js +56 -0
- package/dist/sql-driver/driver/runtime-driver.js.map +1 -0
- package/dist/sql-driver/query-executor/default-query-executor.js +26 -0
- package/dist/sql-driver/query-executor/default-query-executor.js.map +1 -0
- package/dist/sql-driver/query-executor/plugin.d.ts +17 -0
- package/dist/sql-driver/query-executor/plugin.d.ts.map +1 -0
- package/dist/sql-driver/query-executor/query-executor-base.js +25 -0
- package/dist/sql-driver/query-executor/query-executor-base.js.map +1 -0
- package/dist/sql-driver/query-executor/query-executor.d.ts +36 -0
- package/dist/sql-driver/query-executor/query-executor.d.ts.map +1 -0
- package/dist/sql-driver/sql-driver-adapter.d.ts +29 -0
- package/dist/sql-driver/sql-driver-adapter.d.ts.map +1 -0
- package/dist/sql-driver/sql-driver-adapter.js +68 -0
- package/dist/sql-driver/sql-driver-adapter.js.map +1 -0
- package/dist/sql-driver/sql-driver.d.ts +38 -0
- package/dist/sql-driver/sql-driver.d.ts.map +1 -0
- package/dist/sql-driver/sql-driver.js +1 -0
- package/dist/sql-driver/sql.js +50 -0
- package/dist/sql-driver/sql.js.map +1 -0
- package/dist/with-database.d.ts +32 -0
- package/dist/with-database.d.ts.map +1 -0
- package/dist/with-database.js +34 -0
- package/dist/with-database.js.map +1 -0
- package/package.json +43 -9
- package/src/adapters/adapters.ts +23 -4
- package/src/adapters/drizzle/drizzle-adapter-pglite.test.ts +140 -185
- package/src/adapters/drizzle/{drizzle-adapter-sqlite.test.ts → drizzle-adapter-sqlite3.test.ts} +187 -55
- package/src/adapters/drizzle/drizzle-adapter.ts +14 -93
- package/src/adapters/drizzle/generate.test.ts +102 -269
- package/src/adapters/drizzle/generate.ts +89 -63
- package/src/adapters/drizzle/migrate-drizzle.test.ts +19 -0
- package/src/adapters/drizzle/shared.ts +0 -34
- package/src/adapters/drizzle/test-utils.ts +36 -5
- package/src/adapters/generic-sql/README.md +14 -0
- package/src/adapters/generic-sql/driver-config.ts +144 -0
- package/src/adapters/generic-sql/generic-sql-adapter.test.ts +50 -0
- package/src/adapters/generic-sql/generic-sql-adapter.ts +146 -0
- package/src/adapters/generic-sql/generic-sql-uow-executor.ts +130 -0
- package/src/adapters/generic-sql/migration/cold-kysely.ts +55 -0
- package/src/adapters/{kysely/migration/execute-mysql.test.ts → generic-sql/migration/dialect/mysql.test.ts} +342 -484
- package/src/adapters/generic-sql/migration/dialect/mysql.ts +104 -0
- package/src/adapters/generic-sql/migration/dialect/postgres.test.ts +1008 -0
- package/src/adapters/generic-sql/migration/dialect/postgres.ts +113 -0
- package/src/adapters/{kysely/migration/execute-sqlite.test.ts → generic-sql/migration/dialect/sqlite.test.ts} +307 -510
- package/src/adapters/generic-sql/migration/dialect/sqlite.ts +189 -0
- package/src/adapters/generic-sql/migration/executor.ts +33 -0
- package/src/adapters/generic-sql/migration/prepared-migrations.test.ts +661 -0
- package/src/adapters/generic-sql/migration/prepared-migrations.ts +214 -0
- package/src/adapters/generic-sql/migration/sql-generator.ts +413 -0
- package/src/adapters/generic-sql/query/create-sql-query-compiler.ts +36 -0
- package/src/adapters/generic-sql/query/cursor-utils.ts +56 -0
- package/src/adapters/generic-sql/query/dialect/mysql.ts +34 -0
- package/src/adapters/generic-sql/query/dialect/postgres.ts +32 -0
- package/src/adapters/generic-sql/query/dialect/sqlite.ts +32 -0
- package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.test.ts +1568 -0
- package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.ts +314 -0
- package/src/adapters/generic-sql/query/select-builder.test.ts +256 -0
- package/src/adapters/generic-sql/query/select-builder.ts +137 -0
- package/src/adapters/generic-sql/query/sql-query-compiler.test.ts +195 -0
- package/src/adapters/generic-sql/query/sql-query-compiler.ts +367 -0
- package/src/adapters/generic-sql/query/where-builder.test.ts +744 -0
- package/src/adapters/generic-sql/query/where-builder.ts +211 -0
- package/src/adapters/generic-sql/result-interpreter.ts +102 -0
- package/src/adapters/generic-sql/test/generic-drizzle-adapter-sqlite3.test.ts +899 -0
- package/src/adapters/generic-sql/uow-decoder.test.ts +399 -0
- package/src/adapters/generic-sql/uow-decoder.ts +152 -0
- package/src/adapters/generic-sql/uow-encoder.test.ts +183 -0
- package/src/adapters/generic-sql/uow-encoder.ts +131 -0
- package/src/adapters/kysely/kysely-adapter-pglite.test.ts +90 -96
- package/src/adapters/kysely/kysely-adapter-sqlocal.test.ts +215 -0
- package/src/adapters/kysely/kysely-adapter.ts +10 -242
- package/src/adapters/{drizzle/drizzle-query.ts → shared/from-unit-of-work-compiler.ts} +111 -106
- package/src/adapters/shared/table-name-mapper.ts +50 -0
- package/src/adapters/shared/uow-operation-compiler.ts +211 -0
- package/src/db-fragment-definition-builder.test.ts +887 -0
- package/src/db-fragment-definition-builder.ts +737 -0
- package/src/db-fragment-instantiator.test.ts +543 -0
- package/src/db-fragment-integration.test.ts +406 -0
- package/src/fragments/internal-fragment.test.ts +549 -0
- package/src/fragments/internal-fragment.ts +249 -0
- package/src/hooks/hooks.test.ts +575 -0
- package/src/hooks/hooks.ts +179 -0
- package/src/migration-engine/generation-engine.test.ts +60 -27
- package/src/migration-engine/generation-engine.ts +99 -92
- package/src/mod.ts +139 -78
- package/src/query/column-defaults.ts +49 -0
- package/src/query/cursor.test.ts +147 -3
- package/src/query/cursor.ts +25 -8
- package/src/query/orm/orm.ts +1 -1
- package/src/query/query-type.test.ts +9 -9
- package/src/query/serialize/create-sql-serializer.ts +34 -0
- package/src/query/serialize/dialect/mysql-serializer.ts +142 -0
- package/src/query/serialize/dialect/postgres-serializer.ts +129 -0
- package/src/query/serialize/dialect/sqlite-serializer.test.ts +251 -0
- package/src/query/serialize/dialect/sqlite-serializer.ts +156 -0
- package/src/query/serialize/sql-serializer.ts +143 -0
- package/src/query/{query.ts → simple-query-interface.ts} +4 -4
- package/src/query/unit-of-work/execute-unit-of-work.test.ts +1310 -0
- package/src/query/unit-of-work/execute-unit-of-work.ts +504 -0
- package/src/query/unit-of-work/retry-policy.test.ts +217 -0
- package/src/query/unit-of-work/retry-policy.ts +141 -0
- package/src/query/unit-of-work/unit-of-work-coordinator.test.ts +831 -0
- package/src/query/{unit-of-work-types.test.ts → unit-of-work/unit-of-work-types.test.ts} +7 -5
- package/src/query/unit-of-work/unit-of-work.test.ts +1716 -0
- package/src/query/{unit-of-work.ts → unit-of-work/unit-of-work.ts} +716 -420
- package/src/query/{result-transform.test.ts → value-decoding.test.ts} +45 -298
- package/src/query/value-decoding.ts +113 -0
- package/src/query/value-encoding.test.ts +390 -0
- package/src/query/value-encoding.ts +168 -0
- package/src/schema/create.test.ts +5 -1
- package/src/schema/create.ts +5 -0
- package/src/schema/serialize.test.ts +165 -407
- package/src/schema/type-conversion/create-sql-type-mapper.ts +28 -0
- package/src/schema/type-conversion/dialect/mysql.ts +64 -0
- package/src/schema/type-conversion/dialect/postgres.ts +62 -0
- package/src/schema/type-conversion/dialect/sqlite.ts +63 -0
- package/src/schema/type-conversion/type-mapping.test.ts +137 -0
- package/src/schema/type-conversion/type-mapping.ts +153 -0
- package/src/shared/connection-pool.ts +5 -5
- package/src/sql-driver/better-sqlite3.test.ts +126 -0
- package/src/sql-driver/connection/connection-provider.ts +27 -0
- package/src/sql-driver/connection/single-connection-provider.ts +42 -0
- package/src/sql-driver/dialect-adapter/dialect-adapter.ts +9 -0
- package/src/sql-driver/dialect-adapter/sqlite-dialect-adapter.ts +7 -0
- package/src/sql-driver/dialects/dialects.ts +1 -0
- package/src/sql-driver/dialects/durable-object-dialect.ts +260 -0
- package/src/sql-driver/driver/runtime-driver.ts +91 -0
- package/src/sql-driver/query-executor/default-query-executor.ts +38 -0
- package/src/sql-driver/query-executor/plugin.ts +22 -0
- package/src/sql-driver/query-executor/query-executor-base.ts +53 -0
- package/src/sql-driver/query-executor/query-executor.ts +44 -0
- package/src/sql-driver/sql-driver-adapter.ts +96 -0
- package/src/sql-driver/sql-driver.ts +53 -0
- package/src/sql-driver/sql.ts +57 -0
- package/src/sql-driver/sqlocal.test.ts +117 -0
- package/src/with-database.ts +152 -0
- package/tsdown.config.ts +8 -2
- package/dist/adapters/drizzle/drizzle-connection-pool.js +0 -40
- package/dist/adapters/drizzle/drizzle-connection-pool.js.map +0 -1
- package/dist/adapters/drizzle/drizzle-query.d.ts +0 -23
- package/dist/adapters/drizzle/drizzle-query.d.ts.map +0 -1
- package/dist/adapters/drizzle/drizzle-query.js.map +0 -1
- package/dist/adapters/drizzle/drizzle-uow-compiler.d.ts +0 -10
- package/dist/adapters/drizzle/drizzle-uow-compiler.d.ts.map +0 -1
- package/dist/adapters/drizzle/drizzle-uow-compiler.js +0 -315
- package/dist/adapters/drizzle/drizzle-uow-compiler.js.map +0 -1
- package/dist/adapters/drizzle/drizzle-uow-decoder.js +0 -116
- package/dist/adapters/drizzle/drizzle-uow-decoder.js.map +0 -1
- package/dist/adapters/drizzle/drizzle-uow-executor.js +0 -149
- package/dist/adapters/drizzle/drizzle-uow-executor.js.map +0 -1
- package/dist/adapters/drizzle/join-column-utils.js +0 -28
- package/dist/adapters/drizzle/join-column-utils.js.map +0 -1
- package/dist/adapters/drizzle/shared.d.ts +0 -14
- package/dist/adapters/drizzle/shared.d.ts.map +0 -1
- package/dist/adapters/drizzle/shared.js +0 -35
- package/dist/adapters/drizzle/shared.js.map +0 -1
- package/dist/adapters/kysely/kysely-connection-pool.js +0 -41
- package/dist/adapters/kysely/kysely-connection-pool.js.map +0 -1
- package/dist/adapters/kysely/kysely-query-builder.js +0 -321
- package/dist/adapters/kysely/kysely-query-builder.js.map +0 -1
- package/dist/adapters/kysely/kysely-query-compiler.js +0 -66
- package/dist/adapters/kysely/kysely-query-compiler.js.map +0 -1
- package/dist/adapters/kysely/kysely-query.d.ts +0 -22
- package/dist/adapters/kysely/kysely-query.d.ts.map +0 -1
- package/dist/adapters/kysely/kysely-query.js +0 -223
- package/dist/adapters/kysely/kysely-query.js.map +0 -1
- package/dist/adapters/kysely/kysely-shared.d.ts.map +0 -1
- package/dist/adapters/kysely/kysely-shared.js +0 -18
- package/dist/adapters/kysely/kysely-shared.js.map +0 -1
- package/dist/adapters/kysely/kysely-uow-compiler.js +0 -170
- package/dist/adapters/kysely/kysely-uow-compiler.js.map +0 -1
- package/dist/adapters/kysely/kysely-uow-executor.js +0 -89
- package/dist/adapters/kysely/kysely-uow-executor.js.map +0 -1
- package/dist/adapters/kysely/migration/execute-base.js +0 -128
- package/dist/adapters/kysely/migration/execute-base.js.map +0 -1
- package/dist/adapters/kysely/migration/execute-factory.js +0 -34
- package/dist/adapters/kysely/migration/execute-factory.js.map +0 -1
- package/dist/adapters/kysely/migration/execute-mssql.js +0 -112
- package/dist/adapters/kysely/migration/execute-mssql.js.map +0 -1
- package/dist/adapters/kysely/migration/execute-mysql.js +0 -93
- package/dist/adapters/kysely/migration/execute-mysql.js.map +0 -1
- package/dist/adapters/kysely/migration/execute-postgres.js +0 -104
- package/dist/adapters/kysely/migration/execute-postgres.js.map +0 -1
- package/dist/adapters/kysely/migration/execute-sqlite.js +0 -123
- package/dist/adapters/kysely/migration/execute-sqlite.js.map +0 -1
- package/dist/adapters/kysely/migration/execute.js +0 -34
- package/dist/adapters/kysely/migration/execute.js.map +0 -1
- package/dist/bind-services.d.ts +0 -7
- package/dist/bind-services.d.ts.map +0 -1
- package/dist/bind-services.js +0 -14
- package/dist/bind-services.js.map +0 -1
- package/dist/fragment.d.ts +0 -173
- package/dist/fragment.d.ts.map +0 -1
- package/dist/fragment.js +0 -191
- package/dist/fragment.js.map +0 -1
- package/dist/migration-engine/create.d.ts +0 -37
- package/dist/migration-engine/create.d.ts.map +0 -1
- package/dist/migration-engine/create.js +0 -58
- package/dist/migration-engine/create.js.map +0 -1
- package/dist/migration-engine/shared.d.ts +0 -112
- package/dist/migration-engine/shared.d.ts.map +0 -1
- package/dist/query/query.d.ts.map +0 -1
- package/dist/query/result-transform.js +0 -168
- package/dist/query/result-transform.js.map +0 -1
- package/dist/query/unit-of-work.d.ts.map +0 -1
- package/dist/query/unit-of-work.js.map +0 -1
- package/dist/schema/serialize.js +0 -106
- package/dist/schema/serialize.js.map +0 -1
- package/dist/shared/settings-schema.js +0 -36
- package/dist/shared/settings-schema.js.map +0 -1
- package/src/adapters/drizzle/drizzle-adapter.test.ts +0 -170
- package/src/adapters/drizzle/drizzle-connection-pool.ts +0 -66
- package/src/adapters/drizzle/drizzle-query.test.ts +0 -499
- package/src/adapters/drizzle/drizzle-uow-compiler.test.ts +0 -1383
- package/src/adapters/drizzle/drizzle-uow-compiler.ts +0 -636
- package/src/adapters/drizzle/drizzle-uow-decoder.ts +0 -218
- package/src/adapters/drizzle/drizzle-uow-executor.ts +0 -276
- package/src/adapters/drizzle/join-column-utils.test.ts +0 -79
- package/src/adapters/drizzle/join-column-utils.ts +0 -39
- package/src/adapters/kysely/kysely-connection-pool.ts +0 -70
- package/src/adapters/kysely/kysely-query-builder.test.ts +0 -1344
- package/src/adapters/kysely/kysely-query-builder.ts +0 -666
- package/src/adapters/kysely/kysely-query-compiler.ts +0 -132
- package/src/adapters/kysely/kysely-query.test.ts +0 -498
- package/src/adapters/kysely/kysely-query.ts +0 -390
- package/src/adapters/kysely/kysely-shared.ts +0 -23
- package/src/adapters/kysely/kysely-uow-compiler.test.ts +0 -998
- package/src/adapters/kysely/kysely-uow-compiler.ts +0 -318
- package/src/adapters/kysely/kysely-uow-executor.ts +0 -145
- package/src/adapters/kysely/kysely-uow-joins.test.ts +0 -811
- package/src/adapters/kysely/migration/execute-base.ts +0 -256
- package/src/adapters/kysely/migration/execute-factory.ts +0 -53
- package/src/adapters/kysely/migration/execute-mssql.ts +0 -250
- package/src/adapters/kysely/migration/execute-mysql.ts +0 -211
- package/src/adapters/kysely/migration/execute-postgres.test.ts +0 -2657
- package/src/adapters/kysely/migration/execute-postgres.ts +0 -234
- package/src/adapters/kysely/migration/execute-sqlite.ts +0 -247
- package/src/adapters/kysely/migration/execute.ts +0 -50
- package/src/adapters/kysely/migration/kysely-migrator.test.ts +0 -261
- package/src/bind-services.test.ts +0 -214
- package/src/bind-services.ts +0 -37
- package/src/db-fragment.test.ts +0 -800
- package/src/fragment.ts +0 -727
- package/src/query/result-transform.ts +0 -271
- package/src/query/unit-of-work-multi-schema.test.ts +0 -64
- package/src/query/unit-of-work.test.ts +0 -943
- package/src/schema/serialize.ts +0 -396
- package/src/shared/settings-schema.ts +0 -61
- package/src/uow-context-integration.test.ts +0 -102
- package/src/uow-context.test.ts +0 -182
- /package/dist/query/{query.js → simple-query-interface.js} +0 -0
package/src/adapters/drizzle/{drizzle-adapter-sqlite.test.ts → drizzle-adapter-sqlite3.test.ts}
RENAMED
|
@@ -1,17 +1,13 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import SQLite from "better-sqlite3";
|
|
2
|
+
import { SqliteDialect } from "kysely";
|
|
3
3
|
import { DrizzleAdapter } from "./drizzle-adapter";
|
|
4
|
-
import { beforeAll, describe, expect, expectTypeOf, it } from "vitest";
|
|
4
|
+
import { beforeAll, describe, expect, expectTypeOf, it, assert } from "vitest";
|
|
5
5
|
import { column, idColumn, referenceColumn, schema, type FragnoId } from "../../schema/create";
|
|
6
|
-
import type { DBType } from "./shared";
|
|
7
|
-
import { createRequire } from "node:module";
|
|
8
|
-
import { writeAndLoadSchema } from "./test-utils";
|
|
9
6
|
import { Cursor } from "../../query/cursor";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
require("drizzle-kit/api") as typeof import("drizzle-kit/api");
|
|
7
|
+
import { executeUnitOfWork } from "../../query/unit-of-work/execute-unit-of-work";
|
|
8
|
+
import { ExponentialBackoffRetryPolicy } from "../../query/unit-of-work/retry-policy";
|
|
9
|
+
import { BetterSQLite3DriverConfig } from "../generic-sql/driver-config";
|
|
10
|
+
import { internalSchema } from "../../fragments/internal-fragment";
|
|
15
11
|
|
|
16
12
|
describe("DrizzleAdapter SQLite", () => {
|
|
17
13
|
const testSchema = schema((s) => {
|
|
@@ -96,56 +92,38 @@ describe("DrizzleAdapter SQLite", () => {
|
|
|
96
92
|
});
|
|
97
93
|
|
|
98
94
|
let adapter: DrizzleAdapter;
|
|
99
|
-
let
|
|
100
|
-
// let sqliteDb: Database.Database;
|
|
95
|
+
let sqliteDatabase: InstanceType<typeof SQLite>;
|
|
101
96
|
|
|
102
97
|
beforeAll(async () => {
|
|
103
|
-
|
|
104
|
-
const { schemaModule, cleanup } = await writeAndLoadSchema(
|
|
105
|
-
"drizzle-adapter-sqlite",
|
|
106
|
-
testSchema,
|
|
107
|
-
"sqlite",
|
|
108
|
-
"namespace",
|
|
109
|
-
);
|
|
98
|
+
sqliteDatabase = new SQLite(":memory:");
|
|
110
99
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
"drizzle-adapter-sqlite-schema2",
|
|
114
|
-
schema2,
|
|
115
|
-
"sqlite",
|
|
116
|
-
"namespace2",
|
|
117
|
-
);
|
|
118
|
-
|
|
119
|
-
const client = createClient({
|
|
120
|
-
url: "file::memory:?cache=shared",
|
|
100
|
+
const dialect = new SqliteDialect({
|
|
101
|
+
database: sqliteDatabase,
|
|
121
102
|
});
|
|
122
103
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
schema: mergedSchema,
|
|
128
|
-
}) as unknown as DBType;
|
|
129
|
-
|
|
130
|
-
// Generate and run migrations for both schemas
|
|
131
|
-
const emptyJson = await generateSQLiteDrizzleJson({});
|
|
132
|
-
const targetJson = await generateSQLiteDrizzleJson(mergedSchema);
|
|
104
|
+
adapter = new DrizzleAdapter({
|
|
105
|
+
dialect,
|
|
106
|
+
driverConfig: new BetterSQLite3DriverConfig(),
|
|
107
|
+
});
|
|
133
108
|
|
|
134
|
-
|
|
109
|
+
// Create settings table first (needed for version tracking)
|
|
110
|
+
{
|
|
111
|
+
const migrations = adapter.prepareMigrations(internalSchema, "");
|
|
112
|
+
await migrations.executeWithDriver(adapter.driver, 0);
|
|
113
|
+
}
|
|
135
114
|
|
|
136
|
-
|
|
137
|
-
|
|
115
|
+
{
|
|
116
|
+
const migrations = adapter.prepareMigrations(testSchema, "namespace");
|
|
117
|
+
await migrations.executeWithDriver(adapter.driver, 0);
|
|
138
118
|
}
|
|
139
119
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
}
|
|
120
|
+
{
|
|
121
|
+
const migrations = adapter.prepareMigrations(schema2, "namespace2");
|
|
122
|
+
await migrations.executeWithDriver(adapter.driver, 0);
|
|
123
|
+
}
|
|
144
124
|
|
|
145
125
|
return async () => {
|
|
146
|
-
|
|
147
|
-
await cleanup();
|
|
148
|
-
await cleanup2();
|
|
126
|
+
await adapter.close();
|
|
149
127
|
};
|
|
150
128
|
}, 12000);
|
|
151
129
|
|
|
@@ -271,7 +249,6 @@ describe("DrizzleAdapter SQLite", () => {
|
|
|
271
249
|
it("should support count operations", async () => {
|
|
272
250
|
const queryEngine = adapter.createQueryEngine(testSchema, "namespace");
|
|
273
251
|
|
|
274
|
-
// Create some users
|
|
275
252
|
const createUow = queryEngine.createUnitOfWork("create-users");
|
|
276
253
|
createUow.create("users", { name: "User1", age: 20 });
|
|
277
254
|
createUow.create("users", { name: "User2", age: 30 });
|
|
@@ -382,17 +359,17 @@ describe("DrizzleAdapter SQLite", () => {
|
|
|
382
359
|
expect(email).toMatchObject({
|
|
383
360
|
id: expect.objectContaining({
|
|
384
361
|
externalId: expect.stringMatching(/^[a-z0-9]{20,}$/),
|
|
385
|
-
internalId: expect.any(
|
|
362
|
+
internalId: expect.any(BigInt),
|
|
386
363
|
}),
|
|
387
364
|
user_id: expect.objectContaining({
|
|
388
|
-
internalId: expect.any(
|
|
365
|
+
internalId: expect.any(BigInt),
|
|
389
366
|
}),
|
|
390
367
|
email: "test@example.com",
|
|
391
368
|
is_primary: true,
|
|
392
369
|
user: {
|
|
393
370
|
id: expect.objectContaining({
|
|
394
371
|
externalId: expect.stringMatching(/^[a-z0-9]{20,}$/),
|
|
395
|
-
internalId: expect.any(
|
|
372
|
+
internalId: expect.any(BigInt),
|
|
396
373
|
}),
|
|
397
374
|
name: "Email User",
|
|
398
375
|
age: 20,
|
|
@@ -475,7 +452,7 @@ describe("DrizzleAdapter SQLite", () => {
|
|
|
475
452
|
expect(comment).toMatchObject({
|
|
476
453
|
id: expect.objectContaining({
|
|
477
454
|
externalId: expect.stringMatching(/^[a-z0-9]{20,}$/),
|
|
478
|
-
internalId: expect.any(
|
|
455
|
+
internalId: expect.any(BigInt),
|
|
479
456
|
}),
|
|
480
457
|
text: "Great post!",
|
|
481
458
|
// Post join (first level)
|
|
@@ -764,4 +741,159 @@ describe("DrizzleAdapter SQLite", () => {
|
|
|
764
741
|
price: 200,
|
|
765
742
|
});
|
|
766
743
|
});
|
|
744
|
+
|
|
745
|
+
it("should verify hasNextPage in cursor pagination", async () => {
|
|
746
|
+
const queryEngine = adapter.createQueryEngine(testSchema, "namespace");
|
|
747
|
+
|
|
748
|
+
// Create exactly 15 users for precise pagination testing
|
|
749
|
+
const prefix = "HasNextPageTest";
|
|
750
|
+
|
|
751
|
+
for (let i = 1; i <= 15; i++) {
|
|
752
|
+
await queryEngine.create("users", {
|
|
753
|
+
name: `${prefix} ${i.toString().padStart(2, "0")}`,
|
|
754
|
+
age: 20 + i,
|
|
755
|
+
});
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
// Test 1: First page with more results available (pageSize=10, total=15)
|
|
759
|
+
const firstPage = await queryEngine.findWithCursor("users", (b) =>
|
|
760
|
+
b
|
|
761
|
+
.whereIndex("name_idx", (eb) => eb("name", "starts with", prefix))
|
|
762
|
+
.orderByIndex("name_idx", "asc")
|
|
763
|
+
.pageSize(10),
|
|
764
|
+
);
|
|
765
|
+
|
|
766
|
+
expect(firstPage.items).toHaveLength(10);
|
|
767
|
+
expect(firstPage.hasNextPage).toBe(true);
|
|
768
|
+
expect(firstPage.cursor).toBeInstanceOf(Cursor);
|
|
769
|
+
|
|
770
|
+
// Test 2: Second page (last page, partial results: 5 items remaining)
|
|
771
|
+
const secondPage = await queryEngine.findWithCursor("users", (b) =>
|
|
772
|
+
b
|
|
773
|
+
.whereIndex("name_idx", (eb) => eb("name", "starts with", prefix))
|
|
774
|
+
.after(firstPage.cursor!)
|
|
775
|
+
.orderByIndex("name_idx", "asc")
|
|
776
|
+
.pageSize(10),
|
|
777
|
+
);
|
|
778
|
+
|
|
779
|
+
expect(secondPage.items).toHaveLength(5);
|
|
780
|
+
expect(secondPage.hasNextPage).toBe(false);
|
|
781
|
+
expect(secondPage.cursor).toBeUndefined();
|
|
782
|
+
|
|
783
|
+
// Test 3: Empty results
|
|
784
|
+
const emptyPage = await queryEngine.findWithCursor("users", (b) =>
|
|
785
|
+
b
|
|
786
|
+
.whereIndex("name_idx", (eb) => eb("name", "starts with", "NonExistentPrefix"))
|
|
787
|
+
.orderByIndex("name_idx", "asc")
|
|
788
|
+
.pageSize(10),
|
|
789
|
+
);
|
|
790
|
+
|
|
791
|
+
expect(emptyPage.items).toHaveLength(0);
|
|
792
|
+
expect(emptyPage.hasNextPage).toBe(false);
|
|
793
|
+
expect(emptyPage.cursor).toBeUndefined();
|
|
794
|
+
});
|
|
795
|
+
|
|
796
|
+
it("should support executeUnitOfWork with retry logic", async () => {
|
|
797
|
+
const queryEngine = adapter.createQueryEngine(testSchema, "namespace");
|
|
798
|
+
|
|
799
|
+
// Create a test user
|
|
800
|
+
const createUow = queryEngine.createUnitOfWork("create-user-for-execute-uow");
|
|
801
|
+
createUow.create("users", { name: "Execute UOW User", age: 42 });
|
|
802
|
+
await createUow.executeMutations();
|
|
803
|
+
|
|
804
|
+
// Fetch the user to get their ID
|
|
805
|
+
const [[user]] = await queryEngine
|
|
806
|
+
.createUnitOfWork("get-user-for-execute-uow")
|
|
807
|
+
.find("users", (b) => b.whereIndex("name_idx", (eb) => eb("name", "=", "Execute UOW User")))
|
|
808
|
+
.executeRetrieve();
|
|
809
|
+
|
|
810
|
+
// Use executeUnitOfWork to increment age with optimistic locking
|
|
811
|
+
const result = await executeUnitOfWork(
|
|
812
|
+
{
|
|
813
|
+
retrieve: (uow) =>
|
|
814
|
+
uow.find("users", (b) => b.whereIndex("primary", (eb) => eb("id", "=", user.id))),
|
|
815
|
+
mutate: (uow, [users]) => {
|
|
816
|
+
const foundUser = users[0];
|
|
817
|
+
const newAge = foundUser.age! + 1;
|
|
818
|
+
uow.update("users", foundUser.id, (b) => b.set({ age: newAge }).check());
|
|
819
|
+
return { previousAge: foundUser.age, newAge };
|
|
820
|
+
},
|
|
821
|
+
onSuccess: ({ mutationResult }) => {
|
|
822
|
+
// Verify the age was incremented correctly
|
|
823
|
+
expect(mutationResult.newAge).toBe(mutationResult.previousAge! + 1);
|
|
824
|
+
},
|
|
825
|
+
},
|
|
826
|
+
{
|
|
827
|
+
createUnitOfWork: () => queryEngine.createUnitOfWork("execute-uow-update"),
|
|
828
|
+
retryPolicy: new ExponentialBackoffRetryPolicy({ maxRetries: 3, initialDelayMs: 1 }),
|
|
829
|
+
},
|
|
830
|
+
);
|
|
831
|
+
|
|
832
|
+
// Verify the operation succeeded
|
|
833
|
+
assert(result.success);
|
|
834
|
+
expect(result.mutationResult).toEqual({
|
|
835
|
+
previousAge: 42,
|
|
836
|
+
newAge: 43,
|
|
837
|
+
});
|
|
838
|
+
|
|
839
|
+
// Verify the user was actually updated in the database
|
|
840
|
+
const updatedUser = await queryEngine.findFirst("users", (b) =>
|
|
841
|
+
b.whereIndex("primary", (eb) => eb("id", "=", user.id)),
|
|
842
|
+
);
|
|
843
|
+
|
|
844
|
+
expect(updatedUser).toMatchObject({
|
|
845
|
+
id: expect.objectContaining({
|
|
846
|
+
externalId: user.id.externalId,
|
|
847
|
+
version: 1, // Version incremented due to check()
|
|
848
|
+
}),
|
|
849
|
+
name: "Execute UOW User",
|
|
850
|
+
age: 43,
|
|
851
|
+
});
|
|
852
|
+
});
|
|
853
|
+
|
|
854
|
+
it("should fail check() when version changes", async () => {
|
|
855
|
+
const queryEngine = adapter.createQueryEngine(testSchema, "namespace");
|
|
856
|
+
|
|
857
|
+
// Create a user
|
|
858
|
+
const createUserUow = queryEngine.createUnitOfWork("create-user-for-version-conflict");
|
|
859
|
+
createUserUow.create("users", {
|
|
860
|
+
name: "Version Conflict User SQLite",
|
|
861
|
+
age: 40,
|
|
862
|
+
});
|
|
863
|
+
await createUserUow.executeMutations();
|
|
864
|
+
|
|
865
|
+
// Get the user
|
|
866
|
+
const [[user]] = await queryEngine
|
|
867
|
+
.createUnitOfWork("get-user-for-version-conflict")
|
|
868
|
+
.find("users", (b) =>
|
|
869
|
+
b.whereIndex("name_idx", (eb) => eb("name", "=", "Version Conflict User SQLite")),
|
|
870
|
+
)
|
|
871
|
+
.executeRetrieve();
|
|
872
|
+
|
|
873
|
+
// Update the user to increment their version
|
|
874
|
+
const updateUow = queryEngine.createUnitOfWork("update-user-version");
|
|
875
|
+
updateUow.update("users", user.id, (b) => b.set({ age: 41 }));
|
|
876
|
+
await updateUow.executeMutations();
|
|
877
|
+
|
|
878
|
+
// Try to check with the old version (should fail)
|
|
879
|
+
const uow = queryEngine.createUnitOfWork("check-stale-version");
|
|
880
|
+
uow.check("users", user.id); // This has version 0, but the user now has version 1
|
|
881
|
+
uow.create("posts", {
|
|
882
|
+
user_id: user.id,
|
|
883
|
+
title: "Should Not Be Created SQLite",
|
|
884
|
+
content: "Content",
|
|
885
|
+
});
|
|
886
|
+
|
|
887
|
+
const { success } = await uow.executeMutations();
|
|
888
|
+
expect(success).toBe(false);
|
|
889
|
+
|
|
890
|
+
// Verify the post was NOT created
|
|
891
|
+
const [posts] = await queryEngine
|
|
892
|
+
.createUnitOfWork("get-posts-for-version-conflict")
|
|
893
|
+
.find("posts", (b) => b.whereIndex("posts_user_idx", (eb) => eb("user_id", "=", user.id)))
|
|
894
|
+
.executeRetrieve();
|
|
895
|
+
|
|
896
|
+
const conflictPosts = posts.filter((p) => p.title === "Should Not Be Created SQLite");
|
|
897
|
+
expect(conflictPosts).toHaveLength(0);
|
|
898
|
+
});
|
|
767
899
|
});
|
|
@@ -1,103 +1,22 @@
|
|
|
1
1
|
import type { DatabaseAdapter } from "../adapters";
|
|
2
2
|
import { type AnySchema } from "../../schema/create";
|
|
3
|
-
import type { AbstractQuery } from "../../query/query";
|
|
4
3
|
import type { SchemaGenerator } from "../../schema-generator/schema-generator";
|
|
5
4
|
import { generateSchema } from "./generate";
|
|
6
|
-
import {
|
|
7
|
-
import { createTableNameMapper, type DBType, type DrizzleResult } from "./shared";
|
|
8
|
-
import { createSettingsManager, settingsSchema } from "../../shared/settings-schema";
|
|
9
|
-
import { sql } from "drizzle-orm";
|
|
10
|
-
import {
|
|
11
|
-
fragnoDatabaseAdapterNameFakeSymbol,
|
|
12
|
-
fragnoDatabaseAdapterVersionFakeSymbol,
|
|
13
|
-
} from "../adapters";
|
|
14
|
-
import type { ConnectionPool } from "../../shared/connection-pool";
|
|
15
|
-
import { createDrizzleConnectionPool } from "./drizzle-connection-pool";
|
|
16
|
-
|
|
17
|
-
export interface DrizzleConfig {
|
|
18
|
-
db: unknown | (() => unknown | Promise<unknown>);
|
|
19
|
-
provider: "sqlite" | "mysql" | "postgresql";
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export class DrizzleAdapter implements DatabaseAdapter<DrizzleUOWConfig> {
|
|
23
|
-
#connectionPool: ConnectionPool<DBType>;
|
|
24
|
-
#provider: "sqlite" | "mysql" | "postgresql";
|
|
25
|
-
#schemaNamespaceMap = new WeakMap<AnySchema, string>();
|
|
26
|
-
|
|
27
|
-
constructor(config: DrizzleConfig) {
|
|
28
|
-
this.#connectionPool = createDrizzleConnectionPool(
|
|
29
|
-
config.db as DBType | (() => DBType | Promise<DBType>),
|
|
30
|
-
);
|
|
31
|
-
this.#provider = config.provider;
|
|
32
|
-
}
|
|
5
|
+
import { createTableNameMapper } from "../shared/table-name-mapper";
|
|
33
6
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
return 0;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
async close(): Promise<void> {
|
|
43
|
-
await this.#connectionPool.close();
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
createTableNameMapper(namespace: string) {
|
|
47
|
-
return createTableNameMapper(namespace);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
get provider(): "sqlite" | "mysql" | "postgresql" {
|
|
51
|
-
return this.#provider;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
async isConnectionHealthy(): Promise<boolean> {
|
|
55
|
-
const conn = await this.#connectionPool.connect();
|
|
56
|
-
try {
|
|
57
|
-
const result = await conn.db.execute(sql`SELECT 1 as healthy`);
|
|
58
|
-
|
|
59
|
-
// Handle different result formats across providers
|
|
60
|
-
// PostgreSQL/MySQL: { rows: [...] }
|
|
61
|
-
// SQLite: array directly or { rows: [...] }
|
|
62
|
-
if (Array.isArray(result)) {
|
|
63
|
-
return result.length > 0 && result[0]["healthy"] === 1;
|
|
64
|
-
} else {
|
|
65
|
-
const drizzleResult = result as DrizzleResult;
|
|
66
|
-
return drizzleResult.rows[0]["healthy"] === 1;
|
|
67
|
-
}
|
|
68
|
-
} catch {
|
|
69
|
-
return false;
|
|
70
|
-
} finally {
|
|
71
|
-
await conn.release();
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
async getSchemaVersion(namespace: string): Promise<string | undefined> {
|
|
76
|
-
const queryEngine = this.createQueryEngine(settingsSchema, namespace);
|
|
77
|
-
const manager = createSettingsManager(queryEngine, namespace);
|
|
7
|
+
import {
|
|
8
|
+
GenericSQLAdapter,
|
|
9
|
+
type GenericSQLOptions,
|
|
10
|
+
type UnitOfWorkConfig,
|
|
11
|
+
} from "../generic-sql/generic-sql-adapter";
|
|
78
12
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
13
|
+
export class DrizzleAdapter extends GenericSQLAdapter implements DatabaseAdapter<UnitOfWorkConfig> {
|
|
14
|
+
constructor(options: GenericSQLOptions) {
|
|
15
|
+
super(options);
|
|
82
16
|
}
|
|
83
17
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
namespace: string,
|
|
87
|
-
): AbstractQuery<TSchema, DrizzleUOWConfig> {
|
|
88
|
-
// Register schema-namespace mapping
|
|
89
|
-
this.#schemaNamespaceMap.set(schema, namespace);
|
|
90
|
-
|
|
91
|
-
// Only create mapper if namespace is non-empty
|
|
92
|
-
const mapper = namespace ? createTableNameMapper(namespace) : undefined;
|
|
93
|
-
return fromDrizzle(
|
|
94
|
-
schema,
|
|
95
|
-
this.#connectionPool,
|
|
96
|
-
this.#provider,
|
|
97
|
-
mapper,
|
|
98
|
-
undefined,
|
|
99
|
-
this.#schemaNamespaceMap,
|
|
100
|
-
);
|
|
18
|
+
override createTableNameMapper(namespace: string) {
|
|
19
|
+
return createTableNameMapper(namespace, false);
|
|
101
20
|
}
|
|
102
21
|
|
|
103
22
|
createSchemaGenerator(
|
|
@@ -109,7 +28,9 @@ export class DrizzleAdapter implements DatabaseAdapter<DrizzleUOWConfig> {
|
|
|
109
28
|
const path = genOptions?.path ?? options?.path ?? "fragno-schema.ts";
|
|
110
29
|
|
|
111
30
|
return {
|
|
112
|
-
schema: generateSchema(fragments, this
|
|
31
|
+
schema: generateSchema(fragments, this.driverConfig.databaseType, {
|
|
32
|
+
mapperFactory: (ns) => (ns ? this.createTableNameMapper(ns) : undefined),
|
|
33
|
+
}),
|
|
113
34
|
path,
|
|
114
35
|
};
|
|
115
36
|
},
|