@fragno-dev/db 0.1.15 → 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 -179
- package/CHANGELOG.md +23 -0
- package/README.md +123 -8
- package/dist/adapters/adapters.d.ts +5 -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 -21
- package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +1 -1
- package/dist/adapters/drizzle/drizzle-adapter.js +7 -54
- package/dist/adapters/drizzle/drizzle-adapter.js.map +1 -1
- package/dist/adapters/drizzle/generate.d.ts +3 -0
- package/dist/adapters/drizzle/generate.d.ts.map +1 -1
- package/dist/adapters/drizzle/generate.js +36 -28
- 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 -18
- package/dist/adapters/kysely/kysely-adapter.d.ts.map +1 -1
- package/dist/adapters/kysely/kysely-adapter.js +6 -165
- package/dist/adapters/kysely/kysely-adapter.js.map +1 -1
- package/dist/adapters/{drizzle/drizzle-query.js → shared/from-unit-of-work-compiler.js} +47 -61
- package/dist/adapters/shared/from-unit-of-work-compiler.js.map +1 -0
- package/dist/adapters/{drizzle/shared.d.ts → shared/table-name-mapper.d.ts} +2 -4
- 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 +53 -19
- package/dist/db-fragment-definition-builder.d.ts.map +1 -1
- package/dist/db-fragment-definition-builder.js +89 -19
- package/dist/db-fragment-definition-builder.js.map +1 -1
- package/dist/fragments/internal-fragment.d.ts +39 -5
- package/dist/fragments/internal-fragment.d.ts.map +1 -1
- package/dist/fragments/internal-fragment.js +82 -10
- package/dist/fragments/internal-fragment.js.map +1 -1
- 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 +23 -61
- package/dist/migration-engine/generation-engine.js.map +1 -1
- package/dist/mod.d.ts +34 -10
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +47 -16
- package/dist/mod.js.map +1 -1
- package/dist/node_modules/.pnpm/{rou3@0.7.8 → rou3@0.7.10}/node_modules/rou3/dist/index.js +1 -1
- package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js.map +1 -0
- package/dist/packages/fragno/dist/api/fragment-instantiator.js +69 -31
- package/dist/packages/fragno/dist/api/fragment-instantiator.js.map +1 -1
- package/dist/query/column-defaults.js +27 -0
- package/dist/query/column-defaults.js.map +1 -0
- package/dist/query/cursor.d.ts +4 -4
- package/dist/query/cursor.d.ts.map +1 -1
- package/dist/query/cursor.js +8 -6
- 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} +5 -5
- package/dist/query/simple-query-interface.d.ts.map +1 -0
- package/dist/query/{execute-unit-of-work.d.ts → unit-of-work/execute-unit-of-work.d.ts} +13 -3
- package/dist/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -0
- package/dist/query/{execute-unit-of-work.js → unit-of-work/execute-unit-of-work.js} +17 -4
- package/dist/query/unit-of-work/execute-unit-of-work.js.map +1 -0
- package/dist/query/{retry-policy.d.ts → unit-of-work/retry-policy.d.ts} +1 -1
- package/dist/query/unit-of-work/retry-policy.d.ts.map +1 -0
- package/dist/query/{retry-policy.js → unit-of-work/retry-policy.js} +1 -1
- 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} +51 -18
- 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} +58 -11
- 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 +6 -2
- package/dist/with-database.d.ts.map +1 -1
- package/dist/with-database.js +1 -1
- package/dist/with-database.js.map +1 -1
- package/package.json +37 -10
- package/src/adapters/adapters.ts +8 -5
- package/src/adapters/drizzle/drizzle-adapter-pglite.test.ts +60 -169
- package/src/adapters/drizzle/{drizzle-adapter-sqlite.test.ts → drizzle-adapter-sqlite3.test.ts} +31 -55
- package/src/adapters/drizzle/drizzle-adapter.ts +15 -107
- package/src/adapters/drizzle/generate.test.ts +2 -2
- package/src/adapters/drizzle/generate.ts +78 -34
- 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 +3 -3
- 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 +26 -76
- package/src/adapters/kysely/{kysely-adapter-sqlite.test.ts → kysely-adapter-sqlocal.test.ts} +76 -17
- package/src/adapters/kysely/kysely-adapter.ts +10 -250
- package/src/adapters/{drizzle/drizzle-query.ts → shared/from-unit-of-work-compiler.ts} +110 -104
- 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 +2 -2
- package/src/db-fragment-definition-builder.ts +281 -50
- package/src/db-fragment-instantiator.test.ts +78 -2
- package/src/db-fragment-integration.test.ts +14 -16
- package/src/fragments/internal-fragment.test.ts +434 -45
- package/src/fragments/internal-fragment.ts +184 -20
- package/src/hooks/hooks.test.ts +575 -0
- package/src/hooks/hooks.ts +179 -0
- package/src/migration-engine/generation-engine.test.ts +44 -54
- package/src/migration-engine/generation-engine.ts +48 -94
- package/src/mod.ts +117 -29
- package/src/query/column-defaults.ts +49 -0
- package/src/query/cursor.test.ts +31 -6
- package/src/query/cursor.ts +11 -7
- 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} +2 -2
- package/src/query/{execute-unit-of-work.test.ts → unit-of-work/execute-unit-of-work.test.ts} +16 -16
- package/src/query/{execute-unit-of-work.ts → unit-of-work/execute-unit-of-work.ts} +49 -8
- package/src/query/{unit-of-work-coordinator.test.ts → unit-of-work/unit-of-work-coordinator.test.ts} +41 -43
- package/src/query/{unit-of-work-types.test.ts → unit-of-work/unit-of-work-types.test.ts} +5 -3
- package/src/query/{unit-of-work.test.ts → unit-of-work/unit-of-work.test.ts} +100 -9
- package/src/query/{unit-of-work.ts → unit-of-work/unit-of-work.ts} +135 -32
- package/src/query/{result-transform.test.ts → value-decoding.test.ts} +45 -427
- 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 +35 -23
- package/tsdown.config.ts +7 -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 -334
- package/dist/adapters/drizzle/drizzle-uow-compiler.js.map +0 -1
- package/dist/adapters/drizzle/drizzle-uow-decoder.js +0 -123
- package/dist/adapters/drizzle/drizzle-uow-decoder.js.map +0 -1
- package/dist/adapters/drizzle/drizzle-uow-executor.js +0 -160
- 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.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 -67
- package/dist/adapters/kysely/kysely-query-compiler.js.map +0 -1
- package/dist/adapters/kysely/kysely-query.d.ts +0 -23
- package/dist/adapters/kysely/kysely-query.d.ts.map +0 -1
- package/dist/adapters/kysely/kysely-query.js +0 -230
- package/dist/adapters/kysely/kysely-query.js.map +0 -1
- package/dist/adapters/kysely/kysely-shared.d.ts +0 -14
- package/dist/adapters/kysely/kysely-shared.d.ts.map +0 -1
- package/dist/adapters/kysely/kysely-shared.js +0 -33
- package/dist/adapters/kysely/kysely-shared.js.map +0 -1
- package/dist/adapters/kysely/kysely-uow-compiler.js +0 -193
- package/dist/adapters/kysely/kysely-uow-compiler.js.map +0 -1
- package/dist/adapters/kysely/kysely-uow-executor.js +0 -93
- 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/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/node_modules/.pnpm/rou3@0.7.8/node_modules/rou3/dist/index.js.map +0 -1
- package/dist/query/execute-unit-of-work.d.ts.map +0 -1
- package/dist/query/execute-unit-of-work.js.map +0 -1
- package/dist/query/query.d.ts.map +0 -1
- package/dist/query/result-transform.js +0 -170
- package/dist/query/result-transform.js.map +0 -1
- package/dist/query/retry-policy.d.ts.map +0 -1
- package/dist/query/retry-policy.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 -111
- package/dist/schema/serialize.js.map +0 -1
- package/src/adapters/drizzle/drizzle-adapter.test.ts +0 -122
- 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-mysql.test.ts +0 -1442
- package/src/adapters/drizzle/drizzle-uow-compiler-sqlite.test.ts +0 -1414
- package/src/adapters/drizzle/drizzle-uow-compiler.test.ts +0 -1400
- package/src/adapters/drizzle/drizzle-uow-compiler.ts +0 -677
- package/src/adapters/drizzle/drizzle-uow-decoder.ts +0 -228
- package/src/adapters/drizzle/drizzle-uow-executor.ts +0 -309
- 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 -127
- package/src/adapters/kysely/kysely-query.test.ts +0 -498
- package/src/adapters/kysely/kysely-query.ts +0 -399
- package/src/adapters/kysely/kysely-shared.ts +0 -57
- package/src/adapters/kysely/kysely-uow-compiler.test.ts +0 -986
- package/src/adapters/kysely/kysely-uow-compiler.ts +0 -350
- package/src/adapters/kysely/kysely-uow-executor.ts +0 -164
- package/src/adapters/kysely/kysely-uow-joins.test.ts +0 -794
- 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/query/result-transform.ts +0 -274
- package/src/schema/serialize.ts +0 -407
- /package/dist/query/{query.js → simple-query-interface.js} +0 -0
- /package/src/query/{retry-policy.test.ts → unit-of-work/retry-policy.test.ts} +0 -0
- /package/src/query/{retry-policy.ts → unit-of-work/retry-policy.ts} +0 -0
|
@@ -1,397 +1,11 @@
|
|
|
1
1
|
import { assert, describe, expect, it } from "vitest";
|
|
2
2
|
import { column, idColumn, referenceColumn, schema, FragnoId } from "../schema/create";
|
|
3
|
-
import { decodeResult
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
return t
|
|
10
|
-
.addColumn("id", idColumn())
|
|
11
|
-
.addColumn("name", column("string"))
|
|
12
|
-
.addColumn("email", column("string"))
|
|
13
|
-
.addColumn("age", column("integer").nullable())
|
|
14
|
-
.addColumn("isActive", column("bool"))
|
|
15
|
-
.addColumn("createdAt", column("timestamp"));
|
|
16
|
-
})
|
|
17
|
-
.addTable("posts", (t) => {
|
|
18
|
-
return t
|
|
19
|
-
.addColumn("id", idColumn())
|
|
20
|
-
.addColumn("title", column("string"))
|
|
21
|
-
.addColumn("userId", referenceColumn())
|
|
22
|
-
.addColumn("viewCount", column("integer").defaultTo(0))
|
|
23
|
-
.addColumn("publishedAt", column("timestamp").nullable());
|
|
24
|
-
})
|
|
25
|
-
.addReference("author", {
|
|
26
|
-
type: "one",
|
|
27
|
-
from: { table: "posts", column: "userId" },
|
|
28
|
-
to: { table: "users", column: "id" },
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
const usersTable = testSchema.tables.users;
|
|
33
|
-
const postsTable = testSchema.tables.posts;
|
|
34
|
-
|
|
35
|
-
describe("basic encoding", () => {
|
|
36
|
-
it("should encode string values", () => {
|
|
37
|
-
const result = encodeValues(
|
|
38
|
-
{ id: "user1", name: "John", email: "john@example.com" },
|
|
39
|
-
usersTable,
|
|
40
|
-
false,
|
|
41
|
-
"sqlite",
|
|
42
|
-
);
|
|
43
|
-
|
|
44
|
-
expect(result).toEqual({
|
|
45
|
-
id: "user1",
|
|
46
|
-
name: "John",
|
|
47
|
-
email: "john@example.com",
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
it("should encode integer values", () => {
|
|
52
|
-
const result = encodeValues({ age: 25 }, usersTable, false, "sqlite");
|
|
53
|
-
|
|
54
|
-
expect(result).toEqual({ age: 25 });
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
it("should encode boolean values for sqlite", () => {
|
|
58
|
-
const result = encodeValues({ isActive: true }, usersTable, false, "sqlite");
|
|
59
|
-
|
|
60
|
-
expect(result).toEqual({ isActive: 1 });
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
it("should encode boolean values for postgresql", () => {
|
|
64
|
-
const result = encodeValues({ isActive: true }, usersTable, false, "postgresql");
|
|
65
|
-
|
|
66
|
-
expect(result).toEqual({ isActive: true });
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
describe("date encoding", () => {
|
|
71
|
-
it("should encode Date to number for sqlite", () => {
|
|
72
|
-
const date = new Date("2024-01-15T10:30:00Z");
|
|
73
|
-
const result = encodeValues({ createdAt: date }, usersTable, false, "sqlite");
|
|
74
|
-
|
|
75
|
-
expect(result).toEqual({ createdAt: date.getTime() });
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
it("should keep Date as Date for postgresql", () => {
|
|
79
|
-
const date = new Date("2024-01-15T10:30:00Z");
|
|
80
|
-
const result = encodeValues({ createdAt: date }, usersTable, false, "postgresql");
|
|
81
|
-
|
|
82
|
-
expect(result).toEqual({ createdAt: date });
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
it("should keep Date as Date for mysql", () => {
|
|
86
|
-
const date = new Date("2024-01-15T10:30:00Z");
|
|
87
|
-
const result = encodeValues({ createdAt: date }, usersTable, false, "mysql");
|
|
88
|
-
|
|
89
|
-
expect(result).toEqual({ createdAt: date });
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
describe("nullable columns", () => {
|
|
94
|
-
it("should handle null values", () => {
|
|
95
|
-
const result = encodeValues({ age: null }, usersTable, false, "sqlite");
|
|
96
|
-
|
|
97
|
-
expect(result).toEqual({ age: null });
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
it("should omit undefined values", () => {
|
|
101
|
-
const result = encodeValues({ age: undefined }, usersTable, false, "sqlite");
|
|
102
|
-
|
|
103
|
-
expect(result).toEqual({});
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
it("should handle nullable timestamp", () => {
|
|
107
|
-
const result = encodeValues({ publishedAt: null }, postsTable, false, "sqlite");
|
|
108
|
-
|
|
109
|
-
expect(result).toEqual({ publishedAt: null });
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
describe("default value generation", () => {
|
|
114
|
-
it("should generate runtime defaults when generateDefault is true", () => {
|
|
115
|
-
const result = encodeValues(
|
|
116
|
-
{ title: "Test Post", userId: "user1" },
|
|
117
|
-
postsTable,
|
|
118
|
-
true,
|
|
119
|
-
"sqlite",
|
|
120
|
-
);
|
|
121
|
-
|
|
122
|
-
expect(result["title"]).toBe("Test Post");
|
|
123
|
-
expect(result["userId"]).instanceOf(ReferenceSubquery);
|
|
124
|
-
// viewCount has static default (defaultTo), so it's omitted to let DB handle it
|
|
125
|
-
expect(result["viewCount"]).toBeUndefined();
|
|
126
|
-
expect(result["id"]).toBeDefined();
|
|
127
|
-
expect(typeof result["id"]).toBe("string");
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
it("should not generate default values when generateDefault is false", () => {
|
|
131
|
-
const result = encodeValues(
|
|
132
|
-
{ title: "Test Post", userId: "user1" },
|
|
133
|
-
postsTable,
|
|
134
|
-
false,
|
|
135
|
-
"sqlite",
|
|
136
|
-
);
|
|
137
|
-
|
|
138
|
-
expect(result).toEqual({
|
|
139
|
-
title: "Test Post",
|
|
140
|
-
userId: expect.any(ReferenceSubquery),
|
|
141
|
-
});
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
it("should not override explicitly provided values", () => {
|
|
145
|
-
const result = encodeValues(
|
|
146
|
-
{ title: "Test Post", userId: "user1", viewCount: 100 },
|
|
147
|
-
postsTable,
|
|
148
|
-
true,
|
|
149
|
-
"sqlite",
|
|
150
|
-
);
|
|
151
|
-
|
|
152
|
-
expect(result["viewCount"]).toBe(100);
|
|
153
|
-
});
|
|
154
|
-
});
|
|
155
|
-
|
|
156
|
-
describe("complete record encoding", () => {
|
|
157
|
-
it("should encode all fields correctly", () => {
|
|
158
|
-
const date = new Date("2024-01-15T10:30:00Z");
|
|
159
|
-
const result = encodeValues(
|
|
160
|
-
{
|
|
161
|
-
id: "user1",
|
|
162
|
-
name: "Alice",
|
|
163
|
-
email: "alice@example.com",
|
|
164
|
-
age: 30,
|
|
165
|
-
isActive: false,
|
|
166
|
-
createdAt: date,
|
|
167
|
-
},
|
|
168
|
-
usersTable,
|
|
169
|
-
false,
|
|
170
|
-
"sqlite",
|
|
171
|
-
);
|
|
172
|
-
|
|
173
|
-
expect(result).toEqual({
|
|
174
|
-
id: "user1",
|
|
175
|
-
name: "Alice",
|
|
176
|
-
email: "alice@example.com",
|
|
177
|
-
age: 30,
|
|
178
|
-
isActive: 0,
|
|
179
|
-
createdAt: date.getTime(),
|
|
180
|
-
});
|
|
181
|
-
});
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
describe("FragnoId encoding", () => {
|
|
185
|
-
it("should encode FragnoId with external ID only", () => {
|
|
186
|
-
const fragnoId = FragnoId.fromExternal("user123", 1);
|
|
187
|
-
const result = encodeValues({ id: fragnoId, name: "John" }, usersTable, false, "postgresql");
|
|
188
|
-
|
|
189
|
-
expect(result).toEqual({
|
|
190
|
-
id: "user123",
|
|
191
|
-
name: "John",
|
|
192
|
-
});
|
|
193
|
-
});
|
|
194
|
-
|
|
195
|
-
it("should encode FragnoId with both IDs", () => {
|
|
196
|
-
const fragnoId = new FragnoId({
|
|
197
|
-
externalId: "user123",
|
|
198
|
-
internalId: BigInt(456),
|
|
199
|
-
version: 1,
|
|
200
|
-
});
|
|
201
|
-
const result = encodeValues({ id: fragnoId, name: "John" }, usersTable, false, "postgresql");
|
|
202
|
-
|
|
203
|
-
expect(result).toEqual({
|
|
204
|
-
id: "user123",
|
|
205
|
-
name: "John",
|
|
206
|
-
});
|
|
207
|
-
});
|
|
208
|
-
|
|
209
|
-
it("should encode FragnoId in reference columns", () => {
|
|
210
|
-
const fragnoId = new FragnoId({
|
|
211
|
-
externalId: "user123",
|
|
212
|
-
internalId: BigInt(456),
|
|
213
|
-
version: 1,
|
|
214
|
-
});
|
|
215
|
-
const result = encodeValues(
|
|
216
|
-
{ title: "Test Post", userId: fragnoId },
|
|
217
|
-
postsTable,
|
|
218
|
-
false,
|
|
219
|
-
"postgresql",
|
|
220
|
-
);
|
|
221
|
-
|
|
222
|
-
// Reference columns should use the internal ID (bigint)
|
|
223
|
-
expect(result).toEqual({
|
|
224
|
-
title: "Test Post",
|
|
225
|
-
userId: BigInt(456),
|
|
226
|
-
});
|
|
227
|
-
});
|
|
228
|
-
|
|
229
|
-
it("should convert FragnoId without internalId to ReferenceSubquery for reference columns", () => {
|
|
230
|
-
const fragnoId = new FragnoId({
|
|
231
|
-
externalId: "user123",
|
|
232
|
-
version: 1,
|
|
233
|
-
});
|
|
234
|
-
const result = encodeValues(
|
|
235
|
-
{ title: "Test Post", userId: fragnoId },
|
|
236
|
-
postsTable,
|
|
237
|
-
false,
|
|
238
|
-
"postgresql",
|
|
239
|
-
);
|
|
240
|
-
|
|
241
|
-
// FragnoId without internalId should be converted to ReferenceSubquery for database lookup
|
|
242
|
-
expect(result["title"]).toBe("Test Post");
|
|
243
|
-
expect(result["userId"]).toBeInstanceOf(ReferenceSubquery);
|
|
244
|
-
expect((result["userId"] as ReferenceSubquery).externalIdValue).toBe("user123");
|
|
245
|
-
});
|
|
246
|
-
|
|
247
|
-
it("should handle FragnoId across different providers", () => {
|
|
248
|
-
const fragnoId = new FragnoId({
|
|
249
|
-
externalId: "user123",
|
|
250
|
-
internalId: BigInt(456),
|
|
251
|
-
version: 1,
|
|
252
|
-
});
|
|
253
|
-
const testData = { id: fragnoId, name: "John" };
|
|
254
|
-
|
|
255
|
-
// Test across providers
|
|
256
|
-
const sqliteResult = encodeValues(testData, usersTable, false, "sqlite");
|
|
257
|
-
const postgresqlResult = encodeValues(testData, usersTable, false, "postgresql");
|
|
258
|
-
const mysqlResult = encodeValues(testData, usersTable, false, "mysql");
|
|
259
|
-
|
|
260
|
-
expect(sqliteResult).toEqual({ id: "user123", name: "John" });
|
|
261
|
-
expect(postgresqlResult).toEqual({ id: "user123", name: "John" });
|
|
262
|
-
expect(mysqlResult).toEqual({ id: "user123", name: "John" });
|
|
263
|
-
});
|
|
264
|
-
});
|
|
265
|
-
|
|
266
|
-
describe("skipDriverConversions parameter", () => {
|
|
267
|
-
it("should skip Date to number conversion for sqlite when skipDriverConversions is true", () => {
|
|
268
|
-
const date = new Date("2024-01-15T10:30:00Z");
|
|
269
|
-
const result = encodeValues({ createdAt: date }, usersTable, false, "sqlite", true);
|
|
270
|
-
|
|
271
|
-
// Date should remain as Date object, not converted to timestamp
|
|
272
|
-
expect(result).toEqual({ createdAt: date });
|
|
273
|
-
});
|
|
274
|
-
|
|
275
|
-
it("should skip boolean to number conversion for sqlite when skipDriverConversions is true", () => {
|
|
276
|
-
const result = encodeValues({ isActive: true }, usersTable, false, "sqlite", true);
|
|
277
|
-
|
|
278
|
-
// Boolean should remain as boolean, not converted to 1
|
|
279
|
-
expect(result).toEqual({ isActive: true });
|
|
280
|
-
});
|
|
281
|
-
|
|
282
|
-
it("should skip bigint to Buffer conversion for sqlite when skipDriverConversions is true", () => {
|
|
283
|
-
const schemaWithBigInt = schema((s) => {
|
|
284
|
-
return s.addTable("items", (t) => {
|
|
285
|
-
return t.addColumn("id", idColumn()).addColumn("count", column("bigint"));
|
|
286
|
-
});
|
|
287
|
-
});
|
|
288
|
-
|
|
289
|
-
const result = encodeValues(
|
|
290
|
-
{ count: BigInt(12345) },
|
|
291
|
-
schemaWithBigInt.tables.items,
|
|
292
|
-
false,
|
|
293
|
-
"sqlite",
|
|
294
|
-
true,
|
|
295
|
-
);
|
|
296
|
-
|
|
297
|
-
// BigInt should remain as bigint, not converted to Buffer
|
|
298
|
-
expect(result).toEqual({ count: BigInt(12345) });
|
|
299
|
-
});
|
|
300
|
-
|
|
301
|
-
it("should still perform conversions for sqlite when skipDriverConversions is false", () => {
|
|
302
|
-
const date = new Date("2024-01-15T10:30:00Z");
|
|
303
|
-
const result = encodeValues(
|
|
304
|
-
{ createdAt: date, isActive: true },
|
|
305
|
-
usersTable,
|
|
306
|
-
false,
|
|
307
|
-
"sqlite",
|
|
308
|
-
false,
|
|
309
|
-
);
|
|
310
|
-
|
|
311
|
-
// Conversions should happen as normal
|
|
312
|
-
expect(result).toEqual({ createdAt: date.getTime(), isActive: 1 });
|
|
313
|
-
});
|
|
314
|
-
|
|
315
|
-
it("should not affect PostgreSQL encoding (no conversions to skip)", () => {
|
|
316
|
-
const date = new Date("2024-01-15T10:30:00Z");
|
|
317
|
-
const resultWithSkip = encodeValues(
|
|
318
|
-
{ createdAt: date },
|
|
319
|
-
usersTable,
|
|
320
|
-
false,
|
|
321
|
-
"postgresql",
|
|
322
|
-
true,
|
|
323
|
-
);
|
|
324
|
-
const resultWithoutSkip = encodeValues(
|
|
325
|
-
{ createdAt: date },
|
|
326
|
-
usersTable,
|
|
327
|
-
false,
|
|
328
|
-
"postgresql",
|
|
329
|
-
false,
|
|
330
|
-
);
|
|
331
|
-
|
|
332
|
-
// Both should be the same since PostgreSQL doesn't do these conversions
|
|
333
|
-
expect(resultWithSkip).toEqual({ createdAt: date });
|
|
334
|
-
expect(resultWithoutSkip).toEqual({ createdAt: date });
|
|
335
|
-
});
|
|
336
|
-
|
|
337
|
-
it("should work with complete record encoding when skipDriverConversions is true", () => {
|
|
338
|
-
const date = new Date("2024-01-15T10:30:00Z");
|
|
339
|
-
const result = encodeValues(
|
|
340
|
-
{
|
|
341
|
-
id: "user1",
|
|
342
|
-
name: "Alice",
|
|
343
|
-
email: "alice@example.com",
|
|
344
|
-
age: 30,
|
|
345
|
-
isActive: false,
|
|
346
|
-
createdAt: date,
|
|
347
|
-
},
|
|
348
|
-
usersTable,
|
|
349
|
-
false,
|
|
350
|
-
"sqlite",
|
|
351
|
-
true,
|
|
352
|
-
);
|
|
353
|
-
|
|
354
|
-
// All values should remain in their original types
|
|
355
|
-
expect(result).toEqual({
|
|
356
|
-
id: "user1",
|
|
357
|
-
name: "Alice",
|
|
358
|
-
email: "alice@example.com",
|
|
359
|
-
age: 30,
|
|
360
|
-
isActive: false, // Not converted to 0
|
|
361
|
-
createdAt: date, // Not converted to timestamp
|
|
362
|
-
});
|
|
363
|
-
});
|
|
364
|
-
|
|
365
|
-
it("should still handle FragnoId and ReferenceSubquery correctly with skipDriverConversions", () => {
|
|
366
|
-
const fragnoId = FragnoId.fromExternal("user123", 1);
|
|
367
|
-
const result = encodeValues(
|
|
368
|
-
{ id: fragnoId, name: "John" },
|
|
369
|
-
usersTable,
|
|
370
|
-
false,
|
|
371
|
-
"sqlite",
|
|
372
|
-
true,
|
|
373
|
-
);
|
|
374
|
-
|
|
375
|
-
// FragnoId handling should still work
|
|
376
|
-
expect(result).toEqual({
|
|
377
|
-
id: "user123",
|
|
378
|
-
name: "John",
|
|
379
|
-
});
|
|
380
|
-
|
|
381
|
-
// Test ReferenceSubquery
|
|
382
|
-
const refResult = encodeValues(
|
|
383
|
-
{ title: "Test Post", userId: "user_external_id" },
|
|
384
|
-
postsTable,
|
|
385
|
-
false,
|
|
386
|
-
"sqlite",
|
|
387
|
-
true,
|
|
388
|
-
);
|
|
389
|
-
|
|
390
|
-
expect(refResult["title"]).toBe("Test Post");
|
|
391
|
-
expect(refResult["userId"]).toBeInstanceOf(ReferenceSubquery);
|
|
392
|
-
});
|
|
393
|
-
});
|
|
394
|
-
});
|
|
3
|
+
import { decodeResult } from "./value-decoding";
|
|
4
|
+
import {
|
|
5
|
+
SQLocalDriverConfig,
|
|
6
|
+
NodePostgresDriverConfig,
|
|
7
|
+
MySQL2DriverConfig,
|
|
8
|
+
} from "../adapters/generic-sql/driver-config";
|
|
395
9
|
|
|
396
10
|
describe("decodeResult", () => {
|
|
397
11
|
const testSchema = schema((s) => {
|
|
@@ -424,12 +38,16 @@ describe("decodeResult", () => {
|
|
|
424
38
|
const usersTable = testSchema.tables.users;
|
|
425
39
|
const postsTable = testSchema.tables.posts;
|
|
426
40
|
|
|
41
|
+
const sqliteConfig = new SQLocalDriverConfig();
|
|
42
|
+
const postgresqlConfig = new NodePostgresDriverConfig();
|
|
43
|
+
const mysqlConfig = new MySQL2DriverConfig();
|
|
44
|
+
|
|
427
45
|
describe("basic decoding", () => {
|
|
428
46
|
it("should decode string values", () => {
|
|
429
47
|
const result = decodeResult(
|
|
430
48
|
{ id: "user1", name: "John", email: "john@example.com" },
|
|
431
49
|
usersTable,
|
|
432
|
-
|
|
50
|
+
sqliteConfig,
|
|
433
51
|
);
|
|
434
52
|
|
|
435
53
|
expect(result).toEqual({
|
|
@@ -440,25 +58,25 @@ describe("decodeResult", () => {
|
|
|
440
58
|
});
|
|
441
59
|
|
|
442
60
|
it("should decode integer values", () => {
|
|
443
|
-
const result = decodeResult({ age: 25 }, usersTable,
|
|
61
|
+
const result = decodeResult({ age: 25 }, usersTable, sqliteConfig);
|
|
444
62
|
|
|
445
63
|
expect(result).toEqual({ age: 25 });
|
|
446
64
|
});
|
|
447
65
|
|
|
448
66
|
it("should decode boolean values from sqlite", () => {
|
|
449
|
-
const result = decodeResult({ isActive: 1 }, usersTable,
|
|
67
|
+
const result = decodeResult({ isActive: 1 }, usersTable, sqliteConfig);
|
|
450
68
|
|
|
451
69
|
expect(result).toEqual({ isActive: true });
|
|
452
70
|
});
|
|
453
71
|
|
|
454
72
|
it("should decode boolean false from sqlite", () => {
|
|
455
|
-
const result = decodeResult({ isActive: 0 }, usersTable,
|
|
73
|
+
const result = decodeResult({ isActive: 0 }, usersTable, sqliteConfig);
|
|
456
74
|
|
|
457
75
|
expect(result).toEqual({ isActive: false });
|
|
458
76
|
});
|
|
459
77
|
|
|
460
78
|
it("should decode boolean values from postgresql", () => {
|
|
461
|
-
const result = decodeResult({ isActive: true }, usersTable,
|
|
79
|
+
const result = decodeResult({ isActive: true }, usersTable, postgresqlConfig);
|
|
462
80
|
|
|
463
81
|
expect(result).toEqual({ isActive: true });
|
|
464
82
|
});
|
|
@@ -467,7 +85,7 @@ describe("decodeResult", () => {
|
|
|
467
85
|
describe("date decoding", () => {
|
|
468
86
|
it("should decode number to Date for sqlite timestamp", () => {
|
|
469
87
|
const timestamp = 1705317000000;
|
|
470
|
-
const result = decodeResult({ createdAt: timestamp }, usersTable,
|
|
88
|
+
const result = decodeResult({ createdAt: timestamp }, usersTable, sqliteConfig);
|
|
471
89
|
|
|
472
90
|
expect(result["createdAt"]).toBeInstanceOf(Date);
|
|
473
91
|
expect((result["createdAt"] as Date).getTime()).toBe(timestamp);
|
|
@@ -475,7 +93,7 @@ describe("decodeResult", () => {
|
|
|
475
93
|
|
|
476
94
|
it("should decode ISO string to Date for sqlite timestamp", () => {
|
|
477
95
|
const isoString = "2024-01-15T10:30:00.000Z";
|
|
478
|
-
const result = decodeResult({ createdAt: isoString }, usersTable,
|
|
96
|
+
const result = decodeResult({ createdAt: isoString }, usersTable, sqliteConfig);
|
|
479
97
|
|
|
480
98
|
expect(result["createdAt"]).toBeInstanceOf(Date);
|
|
481
99
|
expect((result["createdAt"] as Date).toISOString()).toBe(isoString);
|
|
@@ -483,7 +101,7 @@ describe("decodeResult", () => {
|
|
|
483
101
|
|
|
484
102
|
it("should keep Date as Date for postgresql", () => {
|
|
485
103
|
const date = new Date("2024-01-15T10:30:00Z");
|
|
486
|
-
const result = decodeResult({ createdAt: date }, usersTable,
|
|
104
|
+
const result = decodeResult({ createdAt: date }, usersTable, postgresqlConfig);
|
|
487
105
|
|
|
488
106
|
expect(result["createdAt"]).toBe(date);
|
|
489
107
|
});
|
|
@@ -491,13 +109,13 @@ describe("decodeResult", () => {
|
|
|
491
109
|
|
|
492
110
|
describe("nullable columns", () => {
|
|
493
111
|
it("should handle null values", () => {
|
|
494
|
-
const result = decodeResult({ age: null }, usersTable,
|
|
112
|
+
const result = decodeResult({ age: null }, usersTable, sqliteConfig);
|
|
495
113
|
|
|
496
114
|
expect(result).toEqual({ age: null });
|
|
497
115
|
});
|
|
498
116
|
|
|
499
117
|
it("should handle nullable timestamp", () => {
|
|
500
|
-
const result = decodeResult({ publishedAt: null }, postsTable,
|
|
118
|
+
const result = decodeResult({ publishedAt: null }, postsTable, sqliteConfig);
|
|
501
119
|
|
|
502
120
|
expect(result).toEqual({ publishedAt: null });
|
|
503
121
|
});
|
|
@@ -514,7 +132,7 @@ describe("decodeResult", () => {
|
|
|
514
132
|
"author:email": "alice@example.com",
|
|
515
133
|
},
|
|
516
134
|
postsTable,
|
|
517
|
-
|
|
135
|
+
sqliteConfig,
|
|
518
136
|
);
|
|
519
137
|
|
|
520
138
|
expect(result).toEqual({
|
|
@@ -539,7 +157,7 @@ describe("decodeResult", () => {
|
|
|
539
157
|
"author:createdAt": timestamp,
|
|
540
158
|
},
|
|
541
159
|
postsTable,
|
|
542
|
-
|
|
160
|
+
sqliteConfig,
|
|
543
161
|
);
|
|
544
162
|
|
|
545
163
|
expect(result["author"]).toEqual({
|
|
@@ -557,7 +175,7 @@ describe("decodeResult", () => {
|
|
|
557
175
|
"unknownRelation:field": "value",
|
|
558
176
|
},
|
|
559
177
|
postsTable,
|
|
560
|
-
|
|
178
|
+
sqliteConfig,
|
|
561
179
|
);
|
|
562
180
|
|
|
563
181
|
expect(result).toEqual({
|
|
@@ -575,7 +193,7 @@ describe("decodeResult", () => {
|
|
|
575
193
|
"author:unknownField": "value",
|
|
576
194
|
},
|
|
577
195
|
postsTable,
|
|
578
|
-
|
|
196
|
+
sqliteConfig,
|
|
579
197
|
);
|
|
580
198
|
|
|
581
199
|
expect(result).toEqual({
|
|
@@ -625,7 +243,7 @@ describe("decodeResult", () => {
|
|
|
625
243
|
"category:name": "Technology",
|
|
626
244
|
},
|
|
627
245
|
schemaWithMultipleRelations.tables.posts,
|
|
628
|
-
|
|
246
|
+
sqliteConfig,
|
|
629
247
|
);
|
|
630
248
|
|
|
631
249
|
expect(result).toEqual({
|
|
@@ -655,7 +273,7 @@ describe("decodeResult", () => {
|
|
|
655
273
|
"author:name": "Alice",
|
|
656
274
|
},
|
|
657
275
|
postsTable,
|
|
658
|
-
|
|
276
|
+
sqliteConfig,
|
|
659
277
|
);
|
|
660
278
|
|
|
661
279
|
// Main table id should be FragnoId
|
|
@@ -686,7 +304,7 @@ describe("decodeResult", () => {
|
|
|
686
304
|
createdAt: timestamp,
|
|
687
305
|
},
|
|
688
306
|
usersTable,
|
|
689
|
-
|
|
307
|
+
sqliteConfig,
|
|
690
308
|
);
|
|
691
309
|
|
|
692
310
|
expect(result).toEqual({
|
|
@@ -702,7 +320,7 @@ describe("decodeResult", () => {
|
|
|
702
320
|
|
|
703
321
|
describe("edge cases", () => {
|
|
704
322
|
it("should handle empty result", () => {
|
|
705
|
-
const result = decodeResult({}, usersTable,
|
|
323
|
+
const result = decodeResult({}, usersTable, sqliteConfig);
|
|
706
324
|
|
|
707
325
|
expect(result).toEqual({});
|
|
708
326
|
});
|
|
@@ -714,7 +332,7 @@ describe("decodeResult", () => {
|
|
|
714
332
|
"author:name": "Alice",
|
|
715
333
|
},
|
|
716
334
|
postsTable,
|
|
717
|
-
|
|
335
|
+
sqliteConfig,
|
|
718
336
|
);
|
|
719
337
|
|
|
720
338
|
expect(result).toEqual({
|
|
@@ -737,7 +355,7 @@ describe("decodeResult", () => {
|
|
|
737
355
|
"author:name": "Alice",
|
|
738
356
|
},
|
|
739
357
|
postsTable,
|
|
740
|
-
|
|
358
|
+
sqliteConfig,
|
|
741
359
|
);
|
|
742
360
|
|
|
743
361
|
expect(result).toEqual({
|
|
@@ -762,14 +380,14 @@ describe("decodeResult", () => {
|
|
|
762
380
|
name: "John",
|
|
763
381
|
},
|
|
764
382
|
usersTable,
|
|
765
|
-
|
|
383
|
+
postgresqlConfig,
|
|
766
384
|
);
|
|
767
385
|
|
|
768
386
|
const fragnoId = result["id"];
|
|
769
387
|
assert(fragnoId instanceof FragnoId);
|
|
770
388
|
|
|
771
389
|
expect(fragnoId.externalId).toBe("user123");
|
|
772
|
-
expect(fragnoId.internalId).toBe(
|
|
390
|
+
expect(fragnoId.internalId).toBe(456n);
|
|
773
391
|
expect(result["name"]).toBe("John");
|
|
774
392
|
});
|
|
775
393
|
|
|
@@ -781,7 +399,7 @@ describe("decodeResult", () => {
|
|
|
781
399
|
name: "John",
|
|
782
400
|
},
|
|
783
401
|
usersTable,
|
|
784
|
-
|
|
402
|
+
postgresqlConfig,
|
|
785
403
|
);
|
|
786
404
|
|
|
787
405
|
const fragnoId = result["id"];
|
|
@@ -799,7 +417,7 @@ describe("decodeResult", () => {
|
|
|
799
417
|
name: "John",
|
|
800
418
|
},
|
|
801
419
|
usersTable,
|
|
802
|
-
|
|
420
|
+
postgresqlConfig,
|
|
803
421
|
);
|
|
804
422
|
|
|
805
423
|
expect(result).toEqual({
|
|
@@ -817,9 +435,9 @@ describe("decodeResult", () => {
|
|
|
817
435
|
};
|
|
818
436
|
|
|
819
437
|
// Test across providers
|
|
820
|
-
const sqliteResult = decodeResult(testData, usersTable,
|
|
821
|
-
const postgresqlResult = decodeResult(testData, usersTable,
|
|
822
|
-
const mysqlResult = decodeResult(testData, usersTable,
|
|
438
|
+
const sqliteResult = decodeResult(testData, usersTable, sqliteConfig);
|
|
439
|
+
const postgresqlResult = decodeResult(testData, usersTable, postgresqlConfig);
|
|
440
|
+
const mysqlResult = decodeResult(testData, usersTable, mysqlConfig);
|
|
823
441
|
|
|
824
442
|
// All should create FragnoId objects
|
|
825
443
|
expect(sqliteResult["id"]).toBeInstanceOf(FragnoId);
|
|
@@ -827,7 +445,7 @@ describe("decodeResult", () => {
|
|
|
827
445
|
expect(mysqlResult["id"]).toBeInstanceOf(FragnoId);
|
|
828
446
|
|
|
829
447
|
expect((sqliteResult["id"] as FragnoId).externalId).toBe("user123");
|
|
830
|
-
expect((sqliteResult["id"] as FragnoId).internalId).toBe(
|
|
448
|
+
expect((sqliteResult["id"] as FragnoId).internalId).toBe(456n);
|
|
831
449
|
});
|
|
832
450
|
|
|
833
451
|
it("should create FragnoId in relation data when both IDs present", () => {
|
|
@@ -841,7 +459,7 @@ describe("decodeResult", () => {
|
|
|
841
459
|
"author:name": "Alice",
|
|
842
460
|
},
|
|
843
461
|
postsTable,
|
|
844
|
-
|
|
462
|
+
postgresqlConfig,
|
|
845
463
|
);
|
|
846
464
|
|
|
847
465
|
expect(result["id"]).toBe("post1");
|
|
@@ -850,7 +468,7 @@ describe("decodeResult", () => {
|
|
|
850
468
|
const author: Record<string, unknown> = result["author"] as Record<string, unknown>;
|
|
851
469
|
assert(author["id"] instanceof FragnoId);
|
|
852
470
|
expect(author["id"].externalId).toBe("user123");
|
|
853
|
-
expect(author["id"].internalId).toBe(
|
|
471
|
+
expect(author["id"].internalId).toBe(456n);
|
|
854
472
|
expect(author["name"]).toBe("Alice");
|
|
855
473
|
});
|
|
856
474
|
|
|
@@ -863,7 +481,7 @@ describe("decodeResult", () => {
|
|
|
863
481
|
"author:name": "Alice",
|
|
864
482
|
},
|
|
865
483
|
postsTable,
|
|
866
|
-
|
|
484
|
+
postgresqlConfig,
|
|
867
485
|
);
|
|
868
486
|
|
|
869
487
|
expect(result).toEqual({
|
|
@@ -891,12 +509,12 @@ describe("decodeResult", () => {
|
|
|
891
509
|
createdAt: timestamp,
|
|
892
510
|
},
|
|
893
511
|
usersTable,
|
|
894
|
-
|
|
512
|
+
sqliteConfig,
|
|
895
513
|
);
|
|
896
514
|
|
|
897
515
|
expect(result["id"]).toBeInstanceOf(FragnoId);
|
|
898
516
|
expect((result["id"] as FragnoId).externalId).toBe("user123");
|
|
899
|
-
expect((result["id"] as FragnoId).internalId).toBe(
|
|
517
|
+
expect((result["id"] as FragnoId).internalId).toBe(456n);
|
|
900
518
|
expect(result["name"]).toBe("Alice");
|
|
901
519
|
expect(result["email"]).toBe("alice@example.com");
|
|
902
520
|
expect(result["age"]).toBe(30);
|
|
@@ -912,12 +530,12 @@ describe("decodeResult", () => {
|
|
|
912
530
|
name: "John",
|
|
913
531
|
},
|
|
914
532
|
usersTable,
|
|
915
|
-
|
|
533
|
+
postgresqlConfig,
|
|
916
534
|
);
|
|
917
535
|
|
|
918
536
|
expect(result["id"]).toBeInstanceOf(FragnoId);
|
|
919
537
|
expect((result["id"] as FragnoId).externalId).toBe("user123");
|
|
920
|
-
expect((result["id"] as FragnoId).internalId).toBe(
|
|
538
|
+
expect((result["id"] as FragnoId).internalId).toBe(789n);
|
|
921
539
|
expect(result["name"]).toBe("John");
|
|
922
540
|
});
|
|
923
541
|
});
|