drizzle-orm 1.0.0-beta.20-afec359 → 1.0.0-beta.21
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/_relations.cjs.map +1 -1
- package/_relations.d.cts +13 -2
- package/_relations.d.ts +13 -2
- package/_relations.js.map +1 -1
- package/alias.cjs +1 -1
- package/alias.js +1 -1
- package/aws-data-api/common/index.cjs +0 -2
- package/aws-data-api/common/index.cjs.map +1 -1
- package/aws-data-api/common/index.js +0 -2
- package/aws-data-api/common/index.js.map +1 -1
- package/aws-data-api/pg/driver.cjs +20 -93
- package/aws-data-api/pg/driver.cjs.map +1 -1
- package/aws-data-api/pg/driver.d.cts +13 -17
- package/aws-data-api/pg/driver.d.ts +13 -17
- package/aws-data-api/pg/driver.js +20 -93
- package/aws-data-api/pg/driver.js.map +1 -1
- package/aws-data-api/pg/index.cjs +1 -1
- package/aws-data-api/pg/index.d.cts +3 -3
- package/aws-data-api/pg/index.d.ts +3 -3
- package/aws-data-api/pg/index.js +3 -3
- package/aws-data-api/pg/migrator.cjs.map +1 -1
- package/aws-data-api/pg/migrator.d.cts +1 -1
- package/aws-data-api/pg/migrator.d.ts +1 -1
- package/aws-data-api/pg/migrator.js.map +1 -1
- package/aws-data-api/pg/session.cjs +113 -44
- package/aws-data-api/pg/session.cjs.map +1 -1
- package/aws-data-api/pg/session.d.cts +42 -12
- package/aws-data-api/pg/session.d.ts +43 -13
- package/aws-data-api/pg/session.js +114 -46
- package/aws-data-api/pg/session.js.map +1 -1
- package/better-sqlite3/driver.cjs +2 -5
- package/better-sqlite3/driver.cjs.map +1 -1
- package/better-sqlite3/driver.d.ts +1 -1
- package/better-sqlite3/driver.js +2 -5
- package/better-sqlite3/driver.js.map +1 -1
- package/better-sqlite3/session.cjs +15 -16
- package/better-sqlite3/session.cjs.map +1 -1
- package/better-sqlite3/session.d.cts +6 -10
- package/better-sqlite3/session.d.ts +7 -11
- package/better-sqlite3/session.js +16 -17
- package/better-sqlite3/session.js.map +1 -1
- package/bun-sql/driver.cjs.map +1 -1
- package/bun-sql/driver.d.cts +6 -7
- package/bun-sql/driver.d.ts +6 -7
- package/bun-sql/driver.js.map +1 -1
- package/bun-sql/index.cjs +1 -0
- package/bun-sql/index.d.cts +2 -2
- package/bun-sql/index.d.ts +2 -2
- package/bun-sql/index.js +2 -2
- package/bun-sql/migrator.cjs.map +1 -1
- package/bun-sql/migrator.d.cts +2 -2
- package/bun-sql/migrator.d.ts +2 -2
- package/bun-sql/migrator.js.map +1 -1
- package/bun-sql/mysql/driver.cjs +3 -4
- package/bun-sql/mysql/driver.cjs.map +1 -1
- package/bun-sql/mysql/driver.js +2 -3
- package/bun-sql/mysql/driver.js.map +1 -1
- package/bun-sql/mysql/session.cjs +24 -37
- package/bun-sql/mysql/session.cjs.map +1 -1
- package/bun-sql/mysql/session.d.cts +4 -10
- package/bun-sql/mysql/session.d.ts +6 -12
- package/bun-sql/mysql/session.js +25 -38
- package/bun-sql/mysql/session.js.map +1 -1
- package/bun-sql/postgres/driver.cjs +20 -144
- package/bun-sql/postgres/driver.cjs.map +1 -1
- package/bun-sql/postgres/driver.d.cts +6 -10
- package/bun-sql/postgres/driver.d.ts +7 -11
- package/bun-sql/postgres/driver.js +20 -144
- package/bun-sql/postgres/driver.js.map +1 -1
- package/bun-sql/postgres/index.cjs +1 -1
- package/bun-sql/postgres/index.d.cts +3 -3
- package/bun-sql/postgres/index.d.ts +3 -3
- package/bun-sql/postgres/index.js +3 -3
- package/bun-sql/postgres/migrator.cjs.map +1 -1
- package/bun-sql/postgres/migrator.d.cts +1 -1
- package/bun-sql/postgres/migrator.d.ts +1 -1
- package/bun-sql/postgres/migrator.js.map +1 -1
- package/bun-sql/postgres/session.cjs +112 -17
- package/bun-sql/postgres/session.cjs.map +1 -1
- package/bun-sql/postgres/session.d.cts +33 -11
- package/bun-sql/postgres/session.d.ts +34 -12
- package/bun-sql/postgres/session.js +112 -18
- package/bun-sql/postgres/session.js.map +1 -1
- package/bun-sql/session.cjs +1 -0
- package/bun-sql/session.d.cts +2 -2
- package/bun-sql/session.d.ts +2 -2
- package/bun-sql/session.js +2 -2
- package/bun-sql/sqlite/driver.cjs +3 -4
- package/bun-sql/sqlite/driver.cjs.map +1 -1
- package/bun-sql/sqlite/driver.d.ts +1 -1
- package/bun-sql/sqlite/driver.js +2 -3
- package/bun-sql/sqlite/driver.js.map +1 -1
- package/bun-sql/sqlite/session.cjs +17 -18
- package/bun-sql/sqlite/session.cjs.map +1 -1
- package/bun-sql/sqlite/session.d.cts +6 -9
- package/bun-sql/sqlite/session.d.ts +7 -10
- package/bun-sql/sqlite/session.js +18 -19
- package/bun-sql/sqlite/session.js.map +1 -1
- package/bun-sqlite/driver.cjs +2 -5
- package/bun-sqlite/driver.cjs.map +1 -1
- package/bun-sqlite/driver.d.ts +1 -1
- package/bun-sqlite/driver.js +2 -5
- package/bun-sqlite/driver.js.map +1 -1
- package/bun-sqlite/session.cjs +14 -15
- package/bun-sqlite/session.cjs.map +1 -1
- package/bun-sqlite/session.d.cts +6 -10
- package/bun-sqlite/session.d.ts +6 -10
- package/bun-sqlite/session.js +15 -16
- package/bun-sqlite/session.js.map +1 -1
- package/cache/core/cache-effect.cjs +2 -2
- package/cache/core/cache-effect.d.ts +1 -1
- package/cache/core/cache-effect.js +1 -1
- package/cockroach/driver.cjs +4 -10
- package/cockroach/driver.cjs.map +1 -1
- package/cockroach/driver.d.cts +0 -1
- package/cockroach/driver.d.ts +2 -3
- package/cockroach/driver.js +4 -10
- package/cockroach/driver.js.map +1 -1
- package/cockroach/session.cjs +9 -7
- package/cockroach/session.cjs.map +1 -1
- package/cockroach/session.d.cts +3 -5
- package/cockroach/session.d.ts +5 -7
- package/cockroach/session.js +10 -8
- package/cockroach/session.js.map +1 -1
- package/cockroach-core/columns/bigint.cjs +4 -4
- package/cockroach-core/columns/bigint.cjs.map +1 -1
- package/cockroach-core/columns/bigint.d.cts +2 -2
- package/cockroach-core/columns/bigint.d.ts +2 -2
- package/cockroach-core/columns/bigint.js +4 -4
- package/cockroach-core/columns/bigint.js.map +1 -1
- package/cockroach-core/columns/common.cjs +5 -5
- package/cockroach-core/columns/common.cjs.map +1 -1
- package/cockroach-core/columns/common.d.cts +2 -2
- package/cockroach-core/columns/common.d.ts +3 -3
- package/cockroach-core/columns/common.js +5 -5
- package/cockroach-core/columns/common.js.map +1 -1
- package/cockroach-core/columns/custom.cjs +4 -4
- package/cockroach-core/columns/custom.cjs.map +1 -1
- package/cockroach-core/columns/custom.d.cts +2 -2
- package/cockroach-core/columns/custom.d.ts +2 -2
- package/cockroach-core/columns/custom.js +4 -4
- package/cockroach-core/columns/custom.js.map +1 -1
- package/cockroach-core/columns/date.cjs +6 -6
- package/cockroach-core/columns/date.cjs.map +1 -1
- package/cockroach-core/columns/date.d.cts +3 -3
- package/cockroach-core/columns/date.d.ts +3 -3
- package/cockroach-core/columns/date.js +6 -6
- package/cockroach-core/columns/date.js.map +1 -1
- package/cockroach-core/columns/decimal.cjs +4 -4
- package/cockroach-core/columns/decimal.cjs.map +1 -1
- package/cockroach-core/columns/decimal.d.cts +2 -2
- package/cockroach-core/columns/decimal.d.ts +2 -2
- package/cockroach-core/columns/decimal.js +4 -4
- package/cockroach-core/columns/decimal.js.map +1 -1
- package/cockroach-core/columns/float.cjs +2 -2
- package/cockroach-core/columns/float.cjs.map +1 -1
- package/cockroach-core/columns/float.d.cts +1 -1
- package/cockroach-core/columns/float.d.ts +1 -1
- package/cockroach-core/columns/float.js +2 -2
- package/cockroach-core/columns/float.js.map +1 -1
- package/cockroach-core/columns/geometry.cjs +8 -8
- package/cockroach-core/columns/geometry.cjs.map +1 -1
- package/cockroach-core/columns/geometry.d.cts +5 -5
- package/cockroach-core/columns/geometry.d.ts +5 -5
- package/cockroach-core/columns/geometry.js +8 -8
- package/cockroach-core/columns/geometry.js.map +1 -1
- package/cockroach-core/columns/integer.cjs +2 -2
- package/cockroach-core/columns/integer.cjs.map +1 -1
- package/cockroach-core/columns/integer.d.cts +1 -1
- package/cockroach-core/columns/integer.d.ts +1 -1
- package/cockroach-core/columns/integer.js +2 -2
- package/cockroach-core/columns/integer.js.map +1 -1
- package/cockroach-core/columns/jsonb.cjs +4 -4
- package/cockroach-core/columns/jsonb.cjs.map +1 -1
- package/cockroach-core/columns/jsonb.d.cts +2 -2
- package/cockroach-core/columns/jsonb.d.ts +2 -2
- package/cockroach-core/columns/jsonb.js +4 -4
- package/cockroach-core/columns/jsonb.js.map +1 -1
- package/cockroach-core/columns/vector.cjs +4 -4
- package/cockroach-core/columns/vector.cjs.map +1 -1
- package/cockroach-core/columns/vector.d.cts +2 -2
- package/cockroach-core/columns/vector.d.ts +2 -2
- package/cockroach-core/columns/vector.js +4 -4
- package/cockroach-core/columns/vector.js.map +1 -1
- package/cockroach-core/db.cjs +1 -1
- package/cockroach-core/db.cjs.map +1 -1
- package/cockroach-core/db.d.ts +2 -2
- package/cockroach-core/db.js +1 -1
- package/cockroach-core/db.js.map +1 -1
- package/cockroach-core/dialect.cjs +2 -2
- package/cockroach-core/dialect.d.ts +2 -2
- package/cockroach-core/dialect.js +2 -2
- package/cockroach-core/index.cjs +14 -14
- package/cockroach-core/index.js +14 -14
- package/cockroach-core/query-builders/delete.cjs +1 -1
- package/cockroach-core/query-builders/delete.cjs.map +1 -1
- package/cockroach-core/query-builders/delete.d.cts +1 -1
- package/cockroach-core/query-builders/delete.d.ts +2 -2
- package/cockroach-core/query-builders/delete.js +1 -1
- package/cockroach-core/query-builders/delete.js.map +1 -1
- package/cockroach-core/query-builders/index.cjs +2 -2
- package/cockroach-core/query-builders/index.js +2 -2
- package/cockroach-core/query-builders/insert.cjs +1 -1
- package/cockroach-core/query-builders/insert.cjs.map +1 -1
- package/cockroach-core/query-builders/insert.d.ts +1 -1
- package/cockroach-core/query-builders/insert.js +1 -1
- package/cockroach-core/query-builders/insert.js.map +1 -1
- package/cockroach-core/query-builders/query.cjs +1 -1
- package/cockroach-core/query-builders/query.cjs.map +1 -1
- package/cockroach-core/query-builders/query.js +1 -1
- package/cockroach-core/query-builders/query.js.map +1 -1
- package/cockroach-core/query-builders/raw.cjs +4 -0
- package/cockroach-core/query-builders/raw.cjs.map +1 -1
- package/cockroach-core/query-builders/raw.js +4 -0
- package/cockroach-core/query-builders/raw.js.map +1 -1
- package/cockroach-core/query-builders/refresh-materialized-view.cjs +1 -1
- package/cockroach-core/query-builders/refresh-materialized-view.cjs.map +1 -1
- package/cockroach-core/query-builders/refresh-materialized-view.js +1 -1
- package/cockroach-core/query-builders/refresh-materialized-view.js.map +1 -1
- package/cockroach-core/query-builders/select.cjs +2 -2
- package/cockroach-core/query-builders/select.cjs.map +1 -1
- package/cockroach-core/query-builders/select.d.ts +3 -3
- package/cockroach-core/query-builders/select.js +2 -2
- package/cockroach-core/query-builders/select.js.map +1 -1
- package/cockroach-core/query-builders/select.types.d.ts +1 -1
- package/cockroach-core/query-builders/update.cjs +2 -2
- package/cockroach-core/query-builders/update.cjs.map +1 -1
- package/cockroach-core/query-builders/update.d.ts +1 -1
- package/cockroach-core/query-builders/update.js +2 -2
- package/cockroach-core/query-builders/update.js.map +1 -1
- package/cockroach-core/schema.cjs +1 -1
- package/cockroach-core/schema.js +1 -1
- package/cockroach-core/session.cjs +2 -2
- package/cockroach-core/session.cjs.map +1 -1
- package/cockroach-core/session.d.cts +1 -1
- package/cockroach-core/session.d.ts +1 -1
- package/cockroach-core/session.js +2 -2
- package/cockroach-core/session.js.map +1 -1
- package/cockroach-core/table.cjs +1 -1
- package/cockroach-core/table.cjs.map +1 -1
- package/cockroach-core/table.js +1 -1
- package/cockroach-core/table.js.map +1 -1
- package/cockroach-core/utils.cjs +3 -3
- package/cockroach-core/utils.js +3 -3
- package/cockroach-core/view.cjs +1 -1
- package/cockroach-core/view.js +1 -1
- package/column.cjs +5 -10
- package/column.cjs.map +1 -1
- package/column.d.cts +3 -3
- package/column.d.ts +3 -3
- package/column.js +5 -10
- package/column.js.map +1 -1
- package/d1/driver.cjs +2 -3
- package/d1/driver.cjs.map +1 -1
- package/d1/driver.d.ts +1 -1
- package/d1/driver.js +2 -3
- package/d1/driver.js.map +1 -1
- package/d1/session.cjs +15 -17
- package/d1/session.cjs.map +1 -1
- package/d1/session.d.cts +6 -9
- package/d1/session.d.ts +7 -10
- package/d1/session.js +16 -18
- package/d1/session.js.map +1 -1
- package/durable-sqlite/driver.cjs +2 -5
- package/durable-sqlite/driver.cjs.map +1 -1
- package/durable-sqlite/driver.d.ts +1 -1
- package/durable-sqlite/driver.js +2 -5
- package/durable-sqlite/driver.js.map +1 -1
- package/durable-sqlite/migrator.cjs +1 -1
- package/durable-sqlite/migrator.js +1 -1
- package/durable-sqlite/session.cjs +14 -15
- package/durable-sqlite/session.cjs.map +1 -1
- package/durable-sqlite/session.d.cts +6 -10
- package/durable-sqlite/session.d.ts +6 -10
- package/durable-sqlite/session.js +15 -16
- package/durable-sqlite/session.js.map +1 -1
- package/effect-core/index.cjs +1 -1
- package/effect-core/index.js +1 -1
- package/effect-postgres/driver.cjs +14 -100
- package/effect-postgres/driver.cjs.map +1 -1
- package/effect-postgres/driver.d.cts +8 -12
- package/effect-postgres/driver.d.ts +10 -14
- package/effect-postgres/driver.js +14 -100
- package/effect-postgres/driver.js.map +1 -1
- package/effect-postgres/index.cjs +1 -1
- package/effect-postgres/index.d.cts +3 -3
- package/effect-postgres/index.d.ts +3 -3
- package/effect-postgres/index.js +3 -3
- package/effect-postgres/migrator.cjs.map +1 -1
- package/effect-postgres/migrator.d.cts +1 -1
- package/effect-postgres/migrator.d.ts +2 -2
- package/effect-postgres/migrator.js.map +1 -1
- package/effect-postgres/session.cjs +71 -12
- package/effect-postgres/session.cjs.map +1 -1
- package/effect-postgres/session.d.cts +31 -14
- package/effect-postgres/session.d.ts +34 -17
- package/effect-postgres/session.js +71 -13
- package/effect-postgres/session.js.map +1 -1
- package/effect-schema/column.cjs +1 -1
- package/effect-schema/column.d.ts +8 -8
- package/effect-schema/column.js +1 -1
- package/effect-schema/column.types.d.ts +14 -14
- package/effect-schema/schema.types.internal.d.ts +7 -7
- package/expo-sqlite/driver.cjs +2 -5
- package/expo-sqlite/driver.cjs.map +1 -1
- package/expo-sqlite/driver.d.ts +1 -1
- package/expo-sqlite/driver.js +2 -5
- package/expo-sqlite/driver.js.map +1 -1
- package/expo-sqlite/session.cjs +14 -15
- package/expo-sqlite/session.cjs.map +1 -1
- package/expo-sqlite/session.d.cts +6 -10
- package/expo-sqlite/session.d.ts +6 -10
- package/expo-sqlite/session.js +15 -16
- package/expo-sqlite/session.js.map +1 -1
- package/gel/driver.cjs +3 -5
- package/gel/driver.cjs.map +1 -1
- package/gel/driver.d.cts +0 -1
- package/gel/driver.d.ts +4 -5
- package/gel/driver.js +3 -5
- package/gel/driver.js.map +1 -1
- package/gel/session.cjs +13 -13
- package/gel/session.cjs.map +1 -1
- package/gel/session.d.cts +5 -8
- package/gel/session.d.ts +9 -12
- package/gel/session.js +14 -14
- package/gel/session.js.map +1 -1
- package/gel-core/columns/bigintT.cjs +2 -2
- package/gel-core/columns/bigintT.cjs.map +1 -1
- package/gel-core/columns/bigintT.d.cts +1 -1
- package/gel-core/columns/bigintT.d.ts +1 -1
- package/gel-core/columns/bigintT.js +2 -2
- package/gel-core/columns/bigintT.js.map +1 -1
- package/gel-core/columns/common.cjs +3 -3
- package/gel-core/columns/common.cjs.map +1 -1
- package/gel-core/columns/common.d.cts +1 -1
- package/gel-core/columns/common.d.ts +1 -1
- package/gel-core/columns/common.js +3 -3
- package/gel-core/columns/common.js.map +1 -1
- package/gel-core/columns/custom.cjs +4 -4
- package/gel-core/columns/custom.cjs.map +1 -1
- package/gel-core/columns/custom.d.cts +2 -2
- package/gel-core/columns/custom.d.ts +2 -2
- package/gel-core/columns/custom.js +4 -4
- package/gel-core/columns/custom.js.map +1 -1
- package/gel-core/columns/double-precision.cjs +2 -2
- package/gel-core/columns/double-precision.cjs.map +1 -1
- package/gel-core/columns/double-precision.d.cts +1 -1
- package/gel-core/columns/double-precision.d.ts +1 -1
- package/gel-core/columns/double-precision.js +2 -2
- package/gel-core/columns/double-precision.js.map +1 -1
- package/gel-core/columns/timestamp.d.ts +1 -1
- package/gel-core/columns/timestamptz.cjs +2 -2
- package/gel-core/columns/timestamptz.cjs.map +1 -1
- package/gel-core/columns/timestamptz.d.cts +1 -1
- package/gel-core/columns/timestamptz.d.ts +1 -1
- package/gel-core/columns/timestamptz.js +2 -2
- package/gel-core/columns/timestamptz.js.map +1 -1
- package/gel-core/db.cjs +1 -1
- package/gel-core/db.cjs.map +1 -1
- package/gel-core/db.d.ts +3 -3
- package/gel-core/db.js +1 -1
- package/gel-core/db.js.map +1 -1
- package/gel-core/index.cjs +13 -13
- package/gel-core/index.js +13 -13
- package/gel-core/query-builders/_query.cjs +1 -1
- package/gel-core/query-builders/_query.cjs.map +1 -1
- package/gel-core/query-builders/_query.js +1 -1
- package/gel-core/query-builders/_query.js.map +1 -1
- package/gel-core/query-builders/delete.cjs +1 -1
- package/gel-core/query-builders/delete.cjs.map +1 -1
- package/gel-core/query-builders/delete.d.ts +2 -2
- package/gel-core/query-builders/delete.js +1 -1
- package/gel-core/query-builders/delete.js.map +1 -1
- package/gel-core/query-builders/index.cjs +1 -1
- package/gel-core/query-builders/index.js +1 -1
- package/gel-core/query-builders/insert.cjs +1 -1
- package/gel-core/query-builders/insert.cjs.map +1 -1
- package/gel-core/query-builders/insert.d.ts +2 -2
- package/gel-core/query-builders/insert.js +1 -1
- package/gel-core/query-builders/insert.js.map +1 -1
- package/gel-core/query-builders/query.cjs +5 -13
- package/gel-core/query-builders/query.cjs.map +1 -1
- package/gel-core/query-builders/query.d.ts +1 -1
- package/gel-core/query-builders/query.js +5 -13
- package/gel-core/query-builders/query.js.map +1 -1
- package/gel-core/query-builders/raw.cjs +4 -0
- package/gel-core/query-builders/raw.cjs.map +1 -1
- package/gel-core/query-builders/raw.js +4 -0
- package/gel-core/query-builders/raw.js.map +1 -1
- package/gel-core/query-builders/refresh-materialized-view.cjs +1 -1
- package/gel-core/query-builders/refresh-materialized-view.cjs.map +1 -1
- package/gel-core/query-builders/refresh-materialized-view.d.ts +1 -1
- package/gel-core/query-builders/refresh-materialized-view.js +1 -1
- package/gel-core/query-builders/refresh-materialized-view.js.map +1 -1
- package/gel-core/query-builders/select.cjs +1 -1
- package/gel-core/query-builders/select.cjs.map +1 -1
- package/gel-core/query-builders/select.d.ts +3 -3
- package/gel-core/query-builders/select.js +1 -1
- package/gel-core/query-builders/select.js.map +1 -1
- package/gel-core/query-builders/select.types.d.ts +1 -1
- package/gel-core/query-builders/update.cjs +1 -1
- package/gel-core/query-builders/update.cjs.map +1 -1
- package/gel-core/query-builders/update.d.ts +2 -2
- package/gel-core/query-builders/update.js +1 -1
- package/gel-core/query-builders/update.js.map +1 -1
- package/gel-core/session.cjs +2 -2
- package/gel-core/session.cjs.map +1 -1
- package/gel-core/session.d.cts +3 -3
- package/gel-core/session.d.ts +3 -3
- package/gel-core/session.js +2 -2
- package/gel-core/session.js.map +1 -1
- package/gel-core/table.cjs +1 -1
- package/gel-core/table.cjs.map +1 -1
- package/gel-core/table.js +1 -1
- package/gel-core/table.js.map +1 -1
- package/gel-core/utils.cjs +4 -4
- package/gel-core/utils.js +4 -4
- package/gel-core/view.cjs +1 -1
- package/gel-core/view.js +1 -1
- package/index.cjs +6 -12
- package/index.d.cts +6 -6
- package/index.d.ts +6 -6
- package/index.js +9 -9
- package/libsql/driver-core.cjs +2 -3
- package/libsql/driver-core.cjs.map +1 -1
- package/libsql/driver-core.d.ts +1 -1
- package/libsql/driver-core.js +2 -3
- package/libsql/driver-core.js.map +1 -1
- package/libsql/session.cjs +15 -14
- package/libsql/session.cjs.map +1 -1
- package/libsql/session.d.cts +6 -9
- package/libsql/session.d.ts +7 -10
- package/libsql/session.js +16 -15
- package/libsql/session.js.map +1 -1
- package/mssql-core/columns/bigint.cjs +2 -2
- package/mssql-core/columns/bigint.cjs.map +1 -1
- package/mssql-core/columns/bigint.d.cts +1 -1
- package/mssql-core/columns/bigint.d.ts +1 -1
- package/mssql-core/columns/bigint.js +2 -2
- package/mssql-core/columns/bigint.js.map +1 -1
- package/mssql-core/columns/custom.cjs +4 -4
- package/mssql-core/columns/custom.cjs.map +1 -1
- package/mssql-core/columns/custom.d.cts +2 -2
- package/mssql-core/columns/custom.d.ts +2 -2
- package/mssql-core/columns/custom.js +4 -4
- package/mssql-core/columns/custom.js.map +1 -1
- package/mssql-core/columns/date.cjs +4 -4
- package/mssql-core/columns/date.cjs.map +1 -1
- package/mssql-core/columns/date.d.cts +2 -2
- package/mssql-core/columns/date.d.ts +2 -2
- package/mssql-core/columns/date.js +4 -4
- package/mssql-core/columns/date.js.map +1 -1
- package/mssql-core/columns/datetime.cjs +2 -2
- package/mssql-core/columns/datetime.cjs.map +1 -1
- package/mssql-core/columns/datetime.d.cts +1 -1
- package/mssql-core/columns/datetime.d.ts +1 -1
- package/mssql-core/columns/datetime.js +2 -2
- package/mssql-core/columns/datetime.js.map +1 -1
- package/mssql-core/columns/datetime2.cjs +2 -2
- package/mssql-core/columns/datetime2.cjs.map +1 -1
- package/mssql-core/columns/datetime2.d.cts +1 -1
- package/mssql-core/columns/datetime2.d.ts +1 -1
- package/mssql-core/columns/datetime2.js +2 -2
- package/mssql-core/columns/datetime2.js.map +1 -1
- package/mssql-core/columns/datetimeoffset.cjs +2 -2
- package/mssql-core/columns/datetimeoffset.cjs.map +1 -1
- package/mssql-core/columns/datetimeoffset.d.cts +1 -1
- package/mssql-core/columns/datetimeoffset.d.ts +1 -1
- package/mssql-core/columns/datetimeoffset.js +2 -2
- package/mssql-core/columns/datetimeoffset.js.map +1 -1
- package/mssql-core/columns/decimal.cjs +4 -4
- package/mssql-core/columns/decimal.cjs.map +1 -1
- package/mssql-core/columns/decimal.d.cts +2 -2
- package/mssql-core/columns/decimal.d.ts +2 -2
- package/mssql-core/columns/decimal.js +4 -4
- package/mssql-core/columns/decimal.js.map +1 -1
- package/mssql-core/columns/numeric.cjs +4 -4
- package/mssql-core/columns/numeric.cjs.map +1 -1
- package/mssql-core/columns/numeric.d.cts +2 -2
- package/mssql-core/columns/numeric.d.ts +2 -2
- package/mssql-core/columns/numeric.js +4 -4
- package/mssql-core/columns/numeric.js.map +1 -1
- package/mssql-core/columns/smallint.cjs +2 -2
- package/mssql-core/columns/smallint.cjs.map +1 -1
- package/mssql-core/columns/smallint.d.cts +1 -1
- package/mssql-core/columns/smallint.d.ts +1 -1
- package/mssql-core/columns/smallint.js +2 -2
- package/mssql-core/columns/smallint.js.map +1 -1
- package/mssql-core/columns/time.cjs +2 -2
- package/mssql-core/columns/time.cjs.map +1 -1
- package/mssql-core/columns/time.d.cts +1 -1
- package/mssql-core/columns/time.d.ts +1 -1
- package/mssql-core/columns/time.js +2 -2
- package/mssql-core/columns/time.js.map +1 -1
- package/mssql-core/columns/tinyint.cjs +2 -2
- package/mssql-core/columns/tinyint.cjs.map +1 -1
- package/mssql-core/columns/tinyint.d.cts +1 -1
- package/mssql-core/columns/tinyint.d.ts +1 -1
- package/mssql-core/columns/tinyint.js +2 -2
- package/mssql-core/columns/tinyint.js.map +1 -1
- package/mssql-core/columns/varchar.cjs +4 -4
- package/mssql-core/columns/varchar.cjs.map +1 -1
- package/mssql-core/columns/varchar.d.cts +2 -2
- package/mssql-core/columns/varchar.d.ts +2 -2
- package/mssql-core/columns/varchar.js +4 -4
- package/mssql-core/columns/varchar.js.map +1 -1
- package/mssql-core/dialect.cjs +2 -2
- package/mssql-core/dialect.d.ts +1 -1
- package/mssql-core/dialect.js +2 -2
- package/mssql-core/index.cjs +13 -13
- package/mssql-core/index.js +13 -13
- package/mssql-core/query-builders/delete.d.ts +1 -1
- package/mssql-core/query-builders/insert.d.ts +1 -1
- package/mssql-core/query-builders/select.d.ts +1 -1
- package/mssql-core/query-builders/update.d.ts +2 -2
- package/mssql-core/table.cjs +1 -1
- package/mssql-core/table.cjs.map +1 -1
- package/mssql-core/table.js +1 -1
- package/mssql-core/table.js.map +1 -1
- package/mssql-core/utils.cjs +3 -3
- package/mssql-core/utils.js +3 -3
- package/mssql-core/view.cjs +2 -2
- package/mssql-core/view.js +2 -2
- package/mysql-core/columns/bigint.cjs +8 -8
- package/mysql-core/columns/bigint.cjs.map +1 -1
- package/mysql-core/columns/bigint.d.cts +4 -4
- package/mysql-core/columns/bigint.d.ts +4 -4
- package/mysql-core/columns/bigint.js +8 -8
- package/mysql-core/columns/bigint.js.map +1 -1
- package/mysql-core/columns/binary.cjs +2 -2
- package/mysql-core/columns/binary.cjs.map +1 -1
- package/mysql-core/columns/binary.d.cts +1 -1
- package/mysql-core/columns/binary.d.ts +1 -1
- package/mysql-core/columns/binary.js +2 -2
- package/mysql-core/columns/binary.js.map +1 -1
- package/mysql-core/columns/blob.cjs +4 -4
- package/mysql-core/columns/blob.cjs.map +1 -1
- package/mysql-core/columns/blob.d.cts +2 -2
- package/mysql-core/columns/blob.d.ts +2 -2
- package/mysql-core/columns/blob.js +4 -4
- package/mysql-core/columns/blob.js.map +1 -1
- package/mysql-core/columns/boolean.cjs +2 -2
- package/mysql-core/columns/boolean.cjs.map +1 -1
- package/mysql-core/columns/boolean.d.cts +1 -1
- package/mysql-core/columns/boolean.d.ts +1 -1
- package/mysql-core/columns/boolean.js +2 -2
- package/mysql-core/columns/boolean.js.map +1 -1
- package/mysql-core/columns/custom.cjs +4 -4
- package/mysql-core/columns/custom.cjs.map +1 -1
- package/mysql-core/columns/custom.d.cts +2 -2
- package/mysql-core/columns/custom.d.ts +2 -2
- package/mysql-core/columns/custom.js +4 -4
- package/mysql-core/columns/custom.js.map +1 -1
- package/mysql-core/columns/date.cjs +4 -4
- package/mysql-core/columns/date.cjs.map +1 -1
- package/mysql-core/columns/date.d.cts +2 -2
- package/mysql-core/columns/date.d.ts +2 -2
- package/mysql-core/columns/date.js +4 -4
- package/mysql-core/columns/date.js.map +1 -1
- package/mysql-core/columns/datetime.cjs +8 -8
- package/mysql-core/columns/datetime.cjs.map +1 -1
- package/mysql-core/columns/datetime.d.cts +4 -4
- package/mysql-core/columns/datetime.d.ts +4 -4
- package/mysql-core/columns/datetime.js +8 -8
- package/mysql-core/columns/datetime.js.map +1 -1
- package/mysql-core/columns/decimal.cjs +4 -4
- package/mysql-core/columns/decimal.cjs.map +1 -1
- package/mysql-core/columns/decimal.d.cts +2 -2
- package/mysql-core/columns/decimal.d.ts +2 -2
- package/mysql-core/columns/decimal.js +4 -4
- package/mysql-core/columns/decimal.js.map +1 -1
- package/mysql-core/columns/float.cjs +2 -2
- package/mysql-core/columns/float.cjs.map +1 -1
- package/mysql-core/columns/float.d.cts +1 -1
- package/mysql-core/columns/float.d.ts +1 -1
- package/mysql-core/columns/float.js +2 -2
- package/mysql-core/columns/float.js.map +1 -1
- package/mysql-core/columns/int.cjs +2 -2
- package/mysql-core/columns/int.cjs.map +1 -1
- package/mysql-core/columns/int.d.cts +1 -1
- package/mysql-core/columns/int.d.ts +1 -1
- package/mysql-core/columns/int.js +2 -2
- package/mysql-core/columns/int.js.map +1 -1
- package/mysql-core/columns/json.cjs +2 -2
- package/mysql-core/columns/json.cjs.map +1 -1
- package/mysql-core/columns/json.d.cts +1 -1
- package/mysql-core/columns/json.d.ts +1 -1
- package/mysql-core/columns/json.js +2 -2
- package/mysql-core/columns/json.js.map +1 -1
- package/mysql-core/columns/mediumint.cjs +2 -2
- package/mysql-core/columns/mediumint.cjs.map +1 -1
- package/mysql-core/columns/mediumint.d.cts +1 -1
- package/mysql-core/columns/mediumint.d.ts +1 -1
- package/mysql-core/columns/mediumint.js +2 -2
- package/mysql-core/columns/mediumint.js.map +1 -1
- package/mysql-core/columns/serial.cjs +2 -2
- package/mysql-core/columns/serial.cjs.map +1 -1
- package/mysql-core/columns/serial.d.cts +1 -1
- package/mysql-core/columns/serial.d.ts +1 -1
- package/mysql-core/columns/serial.js +2 -2
- package/mysql-core/columns/serial.js.map +1 -1
- package/mysql-core/columns/smallint.cjs +2 -2
- package/mysql-core/columns/smallint.cjs.map +1 -1
- package/mysql-core/columns/smallint.d.cts +1 -1
- package/mysql-core/columns/smallint.d.ts +1 -1
- package/mysql-core/columns/smallint.js +2 -2
- package/mysql-core/columns/smallint.js.map +1 -1
- package/mysql-core/columns/time.cjs +2 -2
- package/mysql-core/columns/time.cjs.map +1 -1
- package/mysql-core/columns/time.d.cts +1 -1
- package/mysql-core/columns/time.d.ts +1 -1
- package/mysql-core/columns/time.js +2 -2
- package/mysql-core/columns/time.js.map +1 -1
- package/mysql-core/columns/timestamp.cjs +8 -8
- package/mysql-core/columns/timestamp.cjs.map +1 -1
- package/mysql-core/columns/timestamp.d.cts +4 -4
- package/mysql-core/columns/timestamp.d.ts +4 -4
- package/mysql-core/columns/timestamp.js +8 -8
- package/mysql-core/columns/timestamp.js.map +1 -1
- package/mysql-core/columns/tinyint.cjs +2 -2
- package/mysql-core/columns/tinyint.cjs.map +1 -1
- package/mysql-core/columns/tinyint.d.cts +1 -1
- package/mysql-core/columns/tinyint.d.ts +1 -1
- package/mysql-core/columns/tinyint.js +2 -2
- package/mysql-core/columns/tinyint.js.map +1 -1
- package/mysql-core/columns/varbinary.cjs +2 -2
- package/mysql-core/columns/varbinary.cjs.map +1 -1
- package/mysql-core/columns/varbinary.d.cts +1 -1
- package/mysql-core/columns/varbinary.d.ts +1 -1
- package/mysql-core/columns/varbinary.js +2 -2
- package/mysql-core/columns/varbinary.js.map +1 -1
- package/mysql-core/columns/year.cjs +2 -2
- package/mysql-core/columns/year.cjs.map +1 -1
- package/mysql-core/columns/year.d.cts +1 -1
- package/mysql-core/columns/year.d.ts +1 -1
- package/mysql-core/columns/year.js +2 -2
- package/mysql-core/columns/year.js.map +1 -1
- package/mysql-core/db.d.ts +2 -2
- package/mysql-core/dialect.cjs +2 -2
- package/mysql-core/dialect.d.ts +1 -1
- package/mysql-core/dialect.js +2 -2
- package/mysql-core/index.cjs +1 -1
- package/mysql-core/index.js +1 -1
- package/mysql-core/query-builders/query.cjs +5 -13
- package/mysql-core/query-builders/query.cjs.map +1 -1
- package/mysql-core/query-builders/query.d.ts +1 -1
- package/mysql-core/query-builders/query.js +5 -13
- package/mysql-core/query-builders/query.js.map +1 -1
- package/mysql-core/session.cjs +2 -1
- package/mysql-core/session.cjs.map +1 -1
- package/mysql-core/session.d.cts +4 -3
- package/mysql-core/session.d.ts +4 -3
- package/mysql-core/session.js +2 -1
- package/mysql-core/session.js.map +1 -1
- package/mysql-core/table.cjs +1 -1
- package/mysql-core/table.cjs.map +1 -1
- package/mysql-core/table.js +1 -1
- package/mysql-core/table.js.map +1 -1
- package/mysql-proxy/driver.cjs +2 -5
- package/mysql-proxy/driver.cjs.map +1 -1
- package/mysql-proxy/driver.js +2 -5
- package/mysql-proxy/driver.js.map +1 -1
- package/mysql-proxy/session.cjs +19 -26
- package/mysql-proxy/session.cjs.map +1 -1
- package/mysql-proxy/session.d.cts +4 -11
- package/mysql-proxy/session.d.ts +6 -13
- package/mysql-proxy/session.js +20 -27
- package/mysql-proxy/session.js.map +1 -1
- package/mysql2/driver.cjs +2 -3
- package/mysql2/driver.cjs.map +1 -1
- package/mysql2/driver.d.cts +0 -1
- package/mysql2/driver.d.ts +3 -4
- package/mysql2/driver.js +2 -3
- package/mysql2/driver.js.map +1 -1
- package/mysql2/session.cjs +39 -49
- package/mysql2/session.cjs.map +1 -1
- package/mysql2/session.d.cts +4 -11
- package/mysql2/session.d.ts +6 -13
- package/mysql2/session.js +40 -50
- package/mysql2/session.js.map +1 -1
- package/neon-http/driver.cjs +65 -34
- package/neon-http/driver.cjs.map +1 -1
- package/neon-http/driver.d.cts +19 -15
- package/neon-http/driver.d.ts +20 -16
- package/neon-http/driver.js +64 -34
- package/neon-http/driver.js.map +1 -1
- package/neon-http/index.cjs +4 -2
- package/neon-http/index.d.cts +3 -3
- package/neon-http/index.d.ts +3 -3
- package/neon-http/index.js +3 -3
- package/neon-http/migrator.cjs +1 -1
- package/neon-http/migrator.cjs.map +1 -1
- package/neon-http/migrator.d.cts +1 -1
- package/neon-http/migrator.d.ts +1 -1
- package/neon-http/migrator.js +1 -1
- package/neon-http/migrator.js.map +1 -1
- package/neon-http/session.cjs +117 -28
- package/neon-http/session.cjs.map +1 -1
- package/neon-http/session.d.cts +38 -10
- package/neon-http/session.d.ts +40 -12
- package/neon-http/session.js +117 -30
- package/neon-http/session.js.map +1 -1
- package/neon-serverless/driver.cjs +32 -14
- package/neon-serverless/driver.cjs.map +1 -1
- package/neon-serverless/driver.d.cts +17 -12
- package/neon-serverless/driver.d.ts +18 -13
- package/neon-serverless/driver.js +31 -14
- package/neon-serverless/driver.js.map +1 -1
- package/neon-serverless/index.cjs +3 -2
- package/neon-serverless/index.d.cts +3 -3
- package/neon-serverless/index.d.ts +3 -3
- package/neon-serverless/index.js +3 -3
- package/neon-serverless/migrator.cjs.map +1 -1
- package/neon-serverless/migrator.d.cts +1 -1
- package/neon-serverless/migrator.d.ts +1 -1
- package/neon-serverless/migrator.js.map +1 -1
- package/neon-serverless/session.cjs +108 -32
- package/neon-serverless/session.cjs.map +1 -1
- package/neon-serverless/session.d.cts +32 -9
- package/neon-serverless/session.d.ts +33 -10
- package/neon-serverless/session.js +109 -34
- package/neon-serverless/session.js.map +1 -1
- package/netlify-db/driver.cjs +123 -0
- package/netlify-db/driver.cjs.map +1 -0
- package/netlify-db/driver.d.cts +90 -0
- package/netlify-db/driver.d.ts +90 -0
- package/netlify-db/driver.js +113 -0
- package/netlify-db/driver.js.map +1 -0
- package/netlify-db/index.cjs +15 -0
- package/netlify-db/index.d.cts +3 -0
- package/netlify-db/index.d.ts +3 -0
- package/netlify-db/index.js +4 -0
- package/netlify-db/migrator.cjs +17 -0
- package/netlify-db/migrator.cjs.map +1 -0
- package/netlify-db/migrator.d.cts +11 -0
- package/netlify-db/migrator.d.ts +11 -0
- package/netlify-db/migrator.js +15 -0
- package/netlify-db/migrator.js.map +1 -0
- package/netlify-db/session.cjs +153 -0
- package/netlify-db/session.cjs.map +1 -0
- package/netlify-db/session.d.cts +68 -0
- package/netlify-db/session.d.ts +68 -0
- package/netlify-db/session.js +149 -0
- package/netlify-db/session.js.map +1 -0
- package/node-mssql/driver.cjs +3 -9
- package/node-mssql/driver.cjs.map +1 -1
- package/node-mssql/driver.d.cts +0 -1
- package/node-mssql/driver.d.ts +2 -3
- package/node-mssql/driver.js +3 -9
- package/node-mssql/driver.js.map +1 -1
- package/node-mssql/session.cjs +4 -6
- package/node-mssql/session.cjs.map +1 -1
- package/node-mssql/session.d.cts +1 -4
- package/node-mssql/session.d.ts +3 -6
- package/node-mssql/session.js +5 -7
- package/node-mssql/session.js.map +1 -1
- package/node-postgres/driver.cjs +18 -15
- package/node-postgres/driver.cjs.map +1 -1
- package/node-postgres/driver.d.cts +6 -11
- package/node-postgres/driver.d.ts +7 -12
- package/node-postgres/driver.js +18 -15
- package/node-postgres/driver.js.map +1 -1
- package/node-postgres/index.cjs +2 -2
- package/node-postgres/index.d.cts +3 -3
- package/node-postgres/index.d.ts +3 -3
- package/node-postgres/index.js +3 -3
- package/node-postgres/migrator.cjs.map +1 -1
- package/node-postgres/migrator.d.cts +1 -1
- package/node-postgres/migrator.d.ts +1 -1
- package/node-postgres/migrator.js.map +1 -1
- package/node-postgres/session.cjs +126 -33
- package/node-postgres/session.cjs.map +1 -1
- package/node-postgres/session.d.cts +30 -10
- package/node-postgres/session.d.ts +31 -11
- package/node-postgres/session.js +127 -35
- package/node-postgres/session.js.map +1 -1
- package/node-sqlite/driver.cjs +1 -1
- package/node-sqlite/driver.d.ts +1 -1
- package/node-sqlite/driver.js +1 -1
- package/node-sqlite/session.cjs +9 -4
- package/node-sqlite/session.cjs.map +1 -1
- package/node-sqlite/session.d.cts +4 -3
- package/node-sqlite/session.d.ts +5 -4
- package/node-sqlite/session.js +9 -4
- package/node-sqlite/session.js.map +1 -1
- package/op-sqlite/driver.cjs +2 -3
- package/op-sqlite/driver.cjs.map +1 -1
- package/op-sqlite/driver.d.ts +1 -1
- package/op-sqlite/driver.js +2 -3
- package/op-sqlite/driver.js.map +1 -1
- package/op-sqlite/session.cjs +16 -18
- package/op-sqlite/session.cjs.map +1 -1
- package/op-sqlite/session.d.cts +6 -10
- package/op-sqlite/session.d.ts +7 -11
- package/op-sqlite/session.js +17 -19
- package/op-sqlite/session.js.map +1 -1
- package/operations.d.cts +0 -3
- package/operations.d.ts +0 -3
- package/package.cjs +1 -1
- package/package.js +1 -1
- package/package.json +4736 -4700
- package/pg-core/async/count.cjs +9 -2
- package/pg-core/async/count.cjs.map +1 -1
- package/pg-core/async/count.js +9 -2
- package/pg-core/async/count.js.map +1 -1
- package/pg-core/async/db.cjs +27 -10
- package/pg-core/async/db.cjs.map +1 -1
- package/pg-core/async/db.d.cts +13 -5
- package/pg-core/async/db.d.ts +16 -8
- package/pg-core/async/db.js +27 -10
- package/pg-core/async/db.js.map +1 -1
- package/pg-core/async/delete.cjs +13 -8
- package/pg-core/async/delete.cjs.map +1 -1
- package/pg-core/async/delete.js +13 -8
- package/pg-core/async/delete.js.map +1 -1
- package/pg-core/async/insert.cjs +12 -7
- package/pg-core/async/insert.cjs.map +1 -1
- package/pg-core/async/insert.js +12 -7
- package/pg-core/async/insert.js.map +1 -1
- package/pg-core/async/query.cjs +14 -8
- package/pg-core/async/query.cjs.map +1 -1
- package/pg-core/async/query.js +14 -8
- package/pg-core/async/query.js.map +1 -1
- package/pg-core/async/refresh-materialized-view.cjs +9 -1
- package/pg-core/async/refresh-materialized-view.cjs.map +1 -1
- package/pg-core/async/refresh-materialized-view.js +9 -1
- package/pg-core/async/refresh-materialized-view.js.map +1 -1
- package/pg-core/async/select.cjs +13 -4
- package/pg-core/async/select.cjs.map +1 -1
- package/pg-core/async/select.js +13 -4
- package/pg-core/async/select.js.map +1 -1
- package/pg-core/async/session.cjs +22 -46
- package/pg-core/async/session.cjs.map +1 -1
- package/pg-core/async/session.d.cts +31 -25
- package/pg-core/async/session.d.ts +32 -26
- package/pg-core/async/session.js +23 -47
- package/pg-core/async/session.js.map +1 -1
- package/pg-core/async/update.cjs +15 -11
- package/pg-core/async/update.cjs.map +1 -1
- package/pg-core/async/update.js +15 -11
- package/pg-core/async/update.js.map +1 -1
- package/pg-core/columns/bigint.cjs +9 -10
- package/pg-core/columns/bigint.cjs.map +1 -1
- package/pg-core/columns/bigint.d.cts +3 -2
- package/pg-core/columns/bigint.d.ts +3 -2
- package/pg-core/columns/bigint.js +9 -10
- package/pg-core/columns/bigint.js.map +1 -1
- package/pg-core/columns/bigserial.cjs +6 -6
- package/pg-core/columns/bigserial.cjs.map +1 -1
- package/pg-core/columns/bigserial.d.cts +2 -1
- package/pg-core/columns/bigserial.d.ts +2 -1
- package/pg-core/columns/bigserial.js +6 -6
- package/pg-core/columns/bigserial.js.map +1 -1
- package/pg-core/columns/boolean.cjs +0 -2
- package/pg-core/columns/boolean.cjs.map +1 -1
- package/pg-core/columns/boolean.js +0 -2
- package/pg-core/columns/boolean.js.map +1 -1
- package/pg-core/columns/bytea.cjs +8 -2
- package/pg-core/columns/bytea.cjs.map +1 -1
- package/pg-core/columns/bytea.d.cts +1 -0
- package/pg-core/columns/bytea.d.ts +1 -0
- package/pg-core/columns/bytea.js +8 -2
- package/pg-core/columns/bytea.js.map +1 -1
- package/pg-core/columns/char.cjs +0 -2
- package/pg-core/columns/char.cjs.map +1 -1
- package/pg-core/columns/char.js +0 -2
- package/pg-core/columns/char.js.map +1 -1
- package/pg-core/columns/cidr.cjs +0 -2
- package/pg-core/columns/cidr.cjs.map +1 -1
- package/pg-core/columns/cidr.js +0 -2
- package/pg-core/columns/cidr.js.map +1 -1
- package/pg-core/columns/common.cjs +9 -11
- package/pg-core/columns/common.cjs.map +1 -1
- package/pg-core/columns/common.d.cts +39 -34
- package/pg-core/columns/common.d.ts +39 -34
- package/pg-core/columns/common.js +9 -11
- package/pg-core/columns/common.js.map +1 -1
- package/pg-core/columns/custom.cjs +46 -16
- package/pg-core/columns/custom.cjs.map +1 -1
- package/pg-core/columns/custom.d.cts +8 -17
- package/pg-core/columns/custom.d.ts +8 -17
- package/pg-core/columns/custom.js +46 -16
- package/pg-core/columns/custom.js.map +1 -1
- package/pg-core/columns/date.cjs +12 -11
- package/pg-core/columns/date.cjs.map +1 -1
- package/pg-core/columns/date.d.cts +4 -3
- package/pg-core/columns/date.d.ts +4 -3
- package/pg-core/columns/date.js +12 -11
- package/pg-core/columns/date.js.map +1 -1
- package/pg-core/columns/double-precision.cjs +4 -2
- package/pg-core/columns/double-precision.cjs.map +1 -1
- package/pg-core/columns/double-precision.d.cts +1 -0
- package/pg-core/columns/double-precision.d.ts +1 -0
- package/pg-core/columns/double-precision.js +4 -2
- package/pg-core/columns/double-precision.js.map +1 -1
- package/pg-core/columns/enum.cjs +0 -4
- package/pg-core/columns/enum.cjs.map +1 -1
- package/pg-core/columns/enum.js +0 -4
- package/pg-core/columns/enum.js.map +1 -1
- package/pg-core/columns/index.d.cts +2 -2
- package/pg-core/columns/index.d.ts +2 -2
- package/pg-core/columns/inet.cjs +0 -2
- package/pg-core/columns/inet.cjs.map +1 -1
- package/pg-core/columns/inet.js +0 -2
- package/pg-core/columns/inet.js.map +1 -1
- package/pg-core/columns/integer.cjs +4 -2
- package/pg-core/columns/integer.cjs.map +1 -1
- package/pg-core/columns/integer.d.cts +1 -0
- package/pg-core/columns/integer.d.ts +1 -0
- package/pg-core/columns/integer.js +4 -2
- package/pg-core/columns/integer.js.map +1 -1
- package/pg-core/columns/interval.cjs +0 -2
- package/pg-core/columns/interval.cjs.map +1 -1
- package/pg-core/columns/interval.js +0 -2
- package/pg-core/columns/interval.js.map +1 -1
- package/pg-core/columns/json.cjs +11 -2
- package/pg-core/columns/json.cjs.map +1 -1
- package/pg-core/columns/json.d.cts +2 -0
- package/pg-core/columns/json.d.ts +2 -0
- package/pg-core/columns/json.js +11 -2
- package/pg-core/columns/json.js.map +1 -1
- package/pg-core/columns/jsonb.cjs +11 -2
- package/pg-core/columns/jsonb.cjs.map +1 -1
- package/pg-core/columns/jsonb.d.cts +2 -0
- package/pg-core/columns/jsonb.d.ts +2 -0
- package/pg-core/columns/jsonb.js +11 -2
- package/pg-core/columns/jsonb.js.map +1 -1
- package/pg-core/columns/line.cjs +8 -12
- package/pg-core/columns/line.cjs.map +1 -1
- package/pg-core/columns/line.d.cts +5 -5
- package/pg-core/columns/line.d.ts +5 -5
- package/pg-core/columns/line.js +8 -12
- package/pg-core/columns/line.js.map +1 -1
- package/pg-core/columns/macaddr.cjs +0 -2
- package/pg-core/columns/macaddr.cjs.map +1 -1
- package/pg-core/columns/macaddr.js +0 -2
- package/pg-core/columns/macaddr.js.map +1 -1
- package/pg-core/columns/macaddr8.cjs +0 -2
- package/pg-core/columns/macaddr8.cjs.map +1 -1
- package/pg-core/columns/macaddr8.js +0 -2
- package/pg-core/columns/macaddr8.js.map +1 -1
- package/pg-core/columns/numeric.cjs +15 -12
- package/pg-core/columns/numeric.cjs.map +1 -1
- package/pg-core/columns/numeric.d.cts +5 -4
- package/pg-core/columns/numeric.d.ts +5 -4
- package/pg-core/columns/numeric.js +15 -12
- package/pg-core/columns/numeric.js.map +1 -1
- package/pg-core/columns/point.cjs +21 -19
- package/pg-core/columns/point.cjs.map +1 -1
- package/pg-core/columns/point.d.cts +11 -5
- package/pg-core/columns/point.d.ts +11 -5
- package/pg-core/columns/point.js +21 -19
- package/pg-core/columns/point.js.map +1 -1
- package/pg-core/columns/postgis_extension/geometry.cjs +9 -12
- package/pg-core/columns/postgis_extension/geometry.cjs.map +1 -1
- package/pg-core/columns/postgis_extension/geometry.d.cts +5 -5
- package/pg-core/columns/postgis_extension/geometry.d.ts +5 -5
- package/pg-core/columns/postgis_extension/geometry.js +9 -12
- package/pg-core/columns/postgis_extension/geometry.js.map +1 -1
- package/pg-core/columns/real.cjs +4 -2
- package/pg-core/columns/real.cjs.map +1 -1
- package/pg-core/columns/real.d.cts +1 -0
- package/pg-core/columns/real.d.ts +1 -0
- package/pg-core/columns/real.js +4 -2
- package/pg-core/columns/real.js.map +1 -1
- package/pg-core/columns/serial.cjs +0 -2
- package/pg-core/columns/serial.cjs.map +1 -1
- package/pg-core/columns/serial.js +0 -2
- package/pg-core/columns/serial.js.map +1 -1
- package/pg-core/columns/smallint.cjs +4 -2
- package/pg-core/columns/smallint.cjs.map +1 -1
- package/pg-core/columns/smallint.d.cts +1 -0
- package/pg-core/columns/smallint.d.ts +1 -0
- package/pg-core/columns/smallint.js +4 -2
- package/pg-core/columns/smallint.js.map +1 -1
- package/pg-core/columns/smallserial.cjs +0 -2
- package/pg-core/columns/smallserial.cjs.map +1 -1
- package/pg-core/columns/smallserial.js +0 -2
- package/pg-core/columns/smallserial.js.map +1 -1
- package/pg-core/columns/text.cjs +0 -2
- package/pg-core/columns/text.cjs.map +1 -1
- package/pg-core/columns/text.js +0 -2
- package/pg-core/columns/text.js.map +1 -1
- package/pg-core/columns/time.cjs +0 -2
- package/pg-core/columns/time.cjs.map +1 -1
- package/pg-core/columns/time.js +0 -2
- package/pg-core/columns/time.js.map +1 -1
- package/pg-core/columns/timestamp.cjs +14 -13
- package/pg-core/columns/timestamp.cjs.map +1 -1
- package/pg-core/columns/timestamp.d.cts +4 -3
- package/pg-core/columns/timestamp.d.ts +4 -3
- package/pg-core/columns/timestamp.js +14 -13
- package/pg-core/columns/timestamp.js.map +1 -1
- package/pg-core/columns/uuid.cjs +0 -2
- package/pg-core/columns/uuid.cjs.map +1 -1
- package/pg-core/columns/uuid.js +0 -2
- package/pg-core/columns/uuid.js.map +1 -1
- package/pg-core/columns/varchar.cjs +0 -2
- package/pg-core/columns/varchar.cjs.map +1 -1
- package/pg-core/columns/varchar.js +0 -2
- package/pg-core/columns/varchar.js.map +1 -1
- package/pg-core/columns/vector_extension/bit.cjs +0 -2
- package/pg-core/columns/vector_extension/bit.cjs.map +1 -1
- package/pg-core/columns/vector_extension/bit.js +0 -2
- package/pg-core/columns/vector_extension/bit.js.map +1 -1
- package/pg-core/columns/vector_extension/halfvec.cjs +4 -6
- package/pg-core/columns/vector_extension/halfvec.cjs.map +1 -1
- package/pg-core/columns/vector_extension/halfvec.d.cts +2 -2
- package/pg-core/columns/vector_extension/halfvec.d.ts +2 -2
- package/pg-core/columns/vector_extension/halfvec.js +4 -6
- package/pg-core/columns/vector_extension/halfvec.js.map +1 -1
- package/pg-core/columns/vector_extension/sparsevec.cjs +0 -2
- package/pg-core/columns/vector_extension/sparsevec.cjs.map +1 -1
- package/pg-core/columns/vector_extension/sparsevec.js +0 -2
- package/pg-core/columns/vector_extension/sparsevec.js.map +1 -1
- package/pg-core/columns/vector_extension/vector.cjs +4 -6
- package/pg-core/columns/vector_extension/vector.cjs.map +1 -1
- package/pg-core/columns/vector_extension/vector.d.cts +2 -2
- package/pg-core/columns/vector_extension/vector.d.ts +2 -2
- package/pg-core/columns/vector_extension/vector.js +4 -6
- package/pg-core/columns/vector_extension/vector.js.map +1 -1
- package/pg-core/dialect.cjs +217 -52
- package/pg-core/dialect.cjs.map +1 -1
- package/pg-core/dialect.d.cts +30 -19
- package/pg-core/dialect.d.ts +31 -20
- package/pg-core/dialect.js +221 -57
- package/pg-core/dialect.js.map +1 -1
- package/pg-core/effect/count.cjs +1 -1
- package/pg-core/effect/count.cjs.map +1 -1
- package/pg-core/effect/count.d.cts +2 -2
- package/pg-core/effect/count.d.ts +2 -2
- package/pg-core/effect/count.js +1 -1
- package/pg-core/effect/count.js.map +1 -1
- package/pg-core/effect/db.cjs +20 -14
- package/pg-core/effect/db.cjs.map +1 -1
- package/pg-core/effect/db.d.cts +11 -7
- package/pg-core/effect/db.d.ts +13 -9
- package/pg-core/effect/db.js +20 -14
- package/pg-core/effect/db.js.map +1 -1
- package/pg-core/effect/delete.cjs +6 -8
- package/pg-core/effect/delete.cjs.map +1 -1
- package/pg-core/effect/delete.d.cts +1 -1
- package/pg-core/effect/delete.d.ts +1 -1
- package/pg-core/effect/delete.js +6 -8
- package/pg-core/effect/delete.js.map +1 -1
- package/pg-core/effect/index.cjs +3 -3
- package/pg-core/effect/index.js +3 -3
- package/pg-core/effect/insert.cjs +5 -7
- package/pg-core/effect/insert.cjs.map +1 -1
- package/pg-core/effect/insert.d.cts +1 -1
- package/pg-core/effect/insert.d.ts +1 -1
- package/pg-core/effect/insert.js +5 -7
- package/pg-core/effect/insert.js.map +1 -1
- package/pg-core/effect/query.cjs +6 -7
- package/pg-core/effect/query.cjs.map +1 -1
- package/pg-core/effect/query.d.cts +1 -1
- package/pg-core/effect/query.d.ts +1 -1
- package/pg-core/effect/query.js +6 -7
- package/pg-core/effect/query.js.map +1 -1
- package/pg-core/effect/refresh-materialized-view.cjs +2 -1
- package/pg-core/effect/refresh-materialized-view.cjs.map +1 -1
- package/pg-core/effect/refresh-materialized-view.d.cts +1 -1
- package/pg-core/effect/refresh-materialized-view.d.ts +1 -1
- package/pg-core/effect/refresh-materialized-view.js +2 -1
- package/pg-core/effect/refresh-materialized-view.js.map +1 -1
- package/pg-core/effect/select.cjs +5 -3
- package/pg-core/effect/select.cjs.map +1 -1
- package/pg-core/effect/select.d.cts +1 -1
- package/pg-core/effect/select.d.ts +1 -1
- package/pg-core/effect/select.js +5 -3
- package/pg-core/effect/select.js.map +1 -1
- package/pg-core/effect/session.cjs +19 -30
- package/pg-core/effect/session.cjs.map +1 -1
- package/pg-core/effect/session.d.cts +28 -24
- package/pg-core/effect/session.d.ts +29 -25
- package/pg-core/effect/session.js +20 -31
- package/pg-core/effect/session.js.map +1 -1
- package/pg-core/effect/update.cjs +8 -8
- package/pg-core/effect/update.cjs.map +1 -1
- package/pg-core/effect/update.d.cts +1 -1
- package/pg-core/effect/update.d.ts +1 -1
- package/pg-core/effect/update.js +8 -8
- package/pg-core/effect/update.js.map +1 -1
- package/pg-core/index.cjs +16 -16
- package/pg-core/index.d.cts +4 -4
- package/pg-core/index.d.ts +4 -4
- package/pg-core/index.js +13 -13
- package/pg-core/query-builders/_query.cjs +101 -0
- package/pg-core/query-builders/_query.cjs.map +1 -0
- package/pg-core/query-builders/_query.d.cts +55 -0
- package/pg-core/query-builders/_query.d.ts +55 -0
- package/pg-core/query-builders/_query.js +97 -0
- package/pg-core/query-builders/_query.js.map +1 -0
- package/pg-core/query-builders/delete.cjs +1 -1
- package/pg-core/query-builders/delete.cjs.map +1 -1
- package/pg-core/query-builders/delete.js +1 -1
- package/pg-core/query-builders/delete.js.map +1 -1
- package/pg-core/query-builders/index.cjs +1 -1
- package/pg-core/query-builders/index.js +1 -1
- package/pg-core/query-builders/insert.cjs +1 -1
- package/pg-core/query-builders/insert.cjs.map +1 -1
- package/pg-core/query-builders/insert.js +1 -1
- package/pg-core/query-builders/insert.js.map +1 -1
- package/pg-core/query-builders/query.cjs +1 -0
- package/pg-core/query-builders/query.cjs.map +1 -1
- package/pg-core/query-builders/query.d.cts +1 -2
- package/pg-core/query-builders/query.d.ts +1 -2
- package/pg-core/query-builders/query.js +1 -0
- package/pg-core/query-builders/query.js.map +1 -1
- package/pg-core/query-builders/raw.cjs +4 -0
- package/pg-core/query-builders/raw.cjs.map +1 -1
- package/pg-core/query-builders/raw.js +4 -0
- package/pg-core/query-builders/raw.js.map +1 -1
- package/pg-core/query-builders/update.cjs +1 -1
- package/pg-core/query-builders/update.cjs.map +1 -1
- package/pg-core/query-builders/update.js +1 -1
- package/pg-core/query-builders/update.js.map +1 -1
- package/pg-core/schema.cjs +1 -1
- package/pg-core/schema.js +1 -1
- package/pg-core/session.cjs +5 -3
- package/pg-core/session.cjs.map +1 -1
- package/pg-core/session.d.cts +7 -4
- package/pg-core/session.d.ts +7 -4
- package/pg-core/session.js +5 -3
- package/pg-core/session.js.map +1 -1
- package/pg-core/table.cjs +1 -1
- package/pg-core/table.cjs.map +1 -1
- package/pg-core/table.js +1 -1
- package/pg-core/table.js.map +1 -1
- package/pg-core/{array.cjs → utils/array.cjs} +1 -1
- package/pg-core/utils/array.cjs.map +1 -0
- package/pg-core/{array.d.cts → utils/array.d.cts} +1 -1
- package/pg-core/{array.d.ts → utils/array.d.ts} +1 -1
- package/pg-core/{array.js → utils/array.js} +1 -1
- package/pg-core/utils/array.js.map +1 -0
- package/pg-core/utils/index.cjs +6 -0
- package/pg-core/utils/index.d.cts +2 -0
- package/pg-core/utils/index.d.ts +2 -0
- package/pg-core/utils/index.js +3 -0
- package/pg-core/utils.cjs +2 -2
- package/pg-core/utils.cjs.map +1 -1
- package/pg-core/utils.d.cts +1 -7
- package/pg-core/utils.d.ts +1 -7
- package/pg-core/utils.js +2 -2
- package/pg-core/utils.js.map +1 -1
- package/pg-core/view.cjs +1 -1
- package/pg-core/view.js +1 -1
- package/pg-proxy/driver.cjs +15 -10
- package/pg-proxy/driver.cjs.map +1 -1
- package/pg-proxy/driver.d.cts +3 -6
- package/pg-proxy/driver.d.ts +4 -7
- package/pg-proxy/driver.js +14 -10
- package/pg-proxy/driver.js.map +1 -1
- package/pg-proxy/index.cjs +2 -0
- package/pg-proxy/index.d.cts +2 -2
- package/pg-proxy/index.d.ts +2 -2
- package/pg-proxy/index.js +2 -2
- package/pg-proxy/migrator.cjs.map +1 -1
- package/pg-proxy/migrator.d.cts +1 -1
- package/pg-proxy/migrator.d.ts +1 -1
- package/pg-proxy/migrator.js.map +1 -1
- package/pg-proxy/session.cjs +84 -8
- package/pg-proxy/session.cjs.map +1 -1
- package/pg-proxy/session.d.cts +32 -9
- package/pg-proxy/session.d.ts +33 -10
- package/pg-proxy/session.js +84 -10
- package/pg-proxy/session.js.map +1 -1
- package/pglite/driver.cjs +33 -71
- package/pglite/driver.cjs.map +1 -1
- package/pglite/driver.d.cts +17 -12
- package/pglite/driver.d.ts +19 -14
- package/pglite/driver.js +32 -71
- package/pglite/driver.js.map +1 -1
- package/pglite/index.cjs +3 -2
- package/pglite/index.d.cts +3 -3
- package/pglite/index.d.ts +3 -3
- package/pglite/index.js +3 -3
- package/pglite/migrator.cjs.map +1 -1
- package/pglite/migrator.d.cts +1 -1
- package/pglite/migrator.d.ts +1 -1
- package/pglite/migrator.js.map +1 -1
- package/pglite/session.cjs +86 -25
- package/pglite/session.cjs.map +1 -1
- package/pglite/session.d.cts +30 -9
- package/pglite/session.d.ts +32 -11
- package/pglite/session.js +87 -27
- package/pglite/session.js.map +1 -1
- package/planetscale-serverless/driver.cjs +2 -3
- package/planetscale-serverless/driver.cjs.map +1 -1
- package/planetscale-serverless/driver.d.cts +0 -1
- package/planetscale-serverless/driver.d.ts +0 -1
- package/planetscale-serverless/driver.js +2 -3
- package/planetscale-serverless/driver.js.map +1 -1
- package/planetscale-serverless/session.cjs +20 -27
- package/planetscale-serverless/session.cjs.map +1 -1
- package/planetscale-serverless/session.d.cts +6 -12
- package/planetscale-serverless/session.d.ts +8 -14
- package/planetscale-serverless/session.js +21 -28
- package/planetscale-serverless/session.js.map +1 -1
- package/postgres-js/driver.cjs +19 -124
- package/postgres-js/driver.cjs.map +1 -1
- package/postgres-js/driver.d.cts +6 -10
- package/postgres-js/driver.d.ts +7 -11
- package/postgres-js/driver.js +19 -124
- package/postgres-js/driver.js.map +1 -1
- package/postgres-js/index.cjs +2 -2
- package/postgres-js/index.d.cts +3 -3
- package/postgres-js/index.d.ts +3 -3
- package/postgres-js/index.js +3 -3
- package/postgres-js/migrator.cjs.map +1 -1
- package/postgres-js/migrator.d.cts +1 -1
- package/postgres-js/migrator.d.ts +1 -1
- package/postgres-js/migrator.js.map +1 -1
- package/postgres-js/session.cjs +112 -17
- package/postgres-js/session.cjs.map +1 -1
- package/postgres-js/session.d.cts +31 -10
- package/postgres-js/session.d.ts +32 -11
- package/postgres-js/session.js +112 -18
- package/postgres-js/session.js.map +1 -1
- package/prisma/mysql/driver.cjs +1 -1
- package/prisma/mysql/driver.js +1 -1
- package/prisma/mysql/session.cjs +1 -2
- package/prisma/mysql/session.cjs.map +1 -1
- package/prisma/mysql/session.d.cts +0 -1
- package/prisma/mysql/session.d.ts +1 -2
- package/prisma/mysql/session.js +1 -2
- package/prisma/mysql/session.js.map +1 -1
- package/prisma/pg/driver.cjs +3 -9
- package/prisma/pg/driver.cjs.map +1 -1
- package/prisma/pg/driver.d.cts +3 -7
- package/prisma/pg/driver.d.ts +3 -7
- package/prisma/pg/driver.js +4 -9
- package/prisma/pg/driver.js.map +1 -1
- package/prisma/pg/index.cjs +2 -2
- package/prisma/pg/index.d.cts +3 -3
- package/prisma/pg/index.d.ts +3 -3
- package/prisma/pg/index.js +3 -3
- package/prisma/pg/session.cjs +25 -1
- package/prisma/pg/session.cjs.map +1 -1
- package/prisma/pg/session.d.cts +15 -3
- package/prisma/pg/session.d.ts +15 -3
- package/prisma/pg/session.js +25 -2
- package/prisma/pg/session.js.map +1 -1
- package/prisma/sqlite/session.cjs +3 -0
- package/prisma/sqlite/session.cjs.map +1 -1
- package/prisma/sqlite/session.d.cts +1 -0
- package/prisma/sqlite/session.d.ts +2 -1
- package/prisma/sqlite/session.js +3 -0
- package/prisma/sqlite/session.js.map +1 -1
- package/relations.cjs +24 -85
- package/relations.cjs.map +1 -1
- package/relations.d.cts +16 -41
- package/relations.d.ts +16 -41
- package/relations.js +25 -84
- package/relations.js.map +1 -1
- package/row-mappers/index.cjs +1 -1
- package/row-mappers/index.cjs.map +1 -1
- package/row-mappers/index.js +1 -1
- package/row-mappers/index.js.map +1 -1
- package/selection-proxy.cjs +1 -1
- package/selection-proxy.js +1 -1
- package/singlestore/driver.cjs +2 -4
- package/singlestore/driver.cjs.map +1 -1
- package/singlestore/driver.d.cts +1 -2
- package/singlestore/driver.d.ts +3 -4
- package/singlestore/driver.js +2 -4
- package/singlestore/driver.js.map +1 -1
- package/singlestore/session.cjs +7 -17
- package/singlestore/session.cjs.map +1 -1
- package/singlestore/session.d.cts +4 -8
- package/singlestore/session.d.ts +6 -10
- package/singlestore/session.js +8 -18
- package/singlestore/session.js.map +1 -1
- package/singlestore-core/columns/bigint.cjs +4 -4
- package/singlestore-core/columns/bigint.cjs.map +1 -1
- package/singlestore-core/columns/bigint.d.cts +2 -2
- package/singlestore-core/columns/bigint.d.ts +2 -2
- package/singlestore-core/columns/bigint.js +4 -4
- package/singlestore-core/columns/bigint.js.map +1 -1
- package/singlestore-core/columns/binary.cjs +2 -2
- package/singlestore-core/columns/binary.cjs.map +1 -1
- package/singlestore-core/columns/binary.d.cts +1 -1
- package/singlestore-core/columns/binary.d.ts +1 -1
- package/singlestore-core/columns/binary.js +2 -2
- package/singlestore-core/columns/binary.js.map +1 -1
- package/singlestore-core/columns/boolean.cjs +2 -2
- package/singlestore-core/columns/boolean.cjs.map +1 -1
- package/singlestore-core/columns/boolean.d.cts +1 -1
- package/singlestore-core/columns/boolean.d.ts +1 -1
- package/singlestore-core/columns/boolean.js +2 -2
- package/singlestore-core/columns/boolean.js.map +1 -1
- package/singlestore-core/columns/custom.cjs +4 -4
- package/singlestore-core/columns/custom.cjs.map +1 -1
- package/singlestore-core/columns/custom.d.cts +2 -2
- package/singlestore-core/columns/custom.d.ts +2 -2
- package/singlestore-core/columns/custom.js +4 -4
- package/singlestore-core/columns/custom.js.map +1 -1
- package/singlestore-core/columns/date.cjs +2 -2
- package/singlestore-core/columns/date.cjs.map +1 -1
- package/singlestore-core/columns/date.d.cts +1 -1
- package/singlestore-core/columns/date.d.ts +1 -1
- package/singlestore-core/columns/date.js +2 -2
- package/singlestore-core/columns/date.js.map +1 -1
- package/singlestore-core/columns/datetime.cjs +6 -6
- package/singlestore-core/columns/datetime.cjs.map +1 -1
- package/singlestore-core/columns/datetime.d.cts +3 -3
- package/singlestore-core/columns/datetime.d.ts +3 -3
- package/singlestore-core/columns/datetime.js +6 -6
- package/singlestore-core/columns/datetime.js.map +1 -1
- package/singlestore-core/columns/decimal.cjs +4 -4
- package/singlestore-core/columns/decimal.cjs.map +1 -1
- package/singlestore-core/columns/decimal.d.cts +2 -2
- package/singlestore-core/columns/decimal.d.ts +2 -2
- package/singlestore-core/columns/decimal.js +4 -4
- package/singlestore-core/columns/decimal.js.map +1 -1
- package/singlestore-core/columns/float.cjs +2 -2
- package/singlestore-core/columns/float.cjs.map +1 -1
- package/singlestore-core/columns/float.d.cts +1 -1
- package/singlestore-core/columns/float.d.ts +1 -1
- package/singlestore-core/columns/float.js +2 -2
- package/singlestore-core/columns/float.js.map +1 -1
- package/singlestore-core/columns/int.cjs +2 -2
- package/singlestore-core/columns/int.cjs.map +1 -1
- package/singlestore-core/columns/int.d.cts +1 -1
- package/singlestore-core/columns/int.d.ts +1 -1
- package/singlestore-core/columns/int.js +2 -2
- package/singlestore-core/columns/int.js.map +1 -1
- package/singlestore-core/columns/json.cjs +2 -2
- package/singlestore-core/columns/json.cjs.map +1 -1
- package/singlestore-core/columns/json.d.cts +1 -1
- package/singlestore-core/columns/json.d.ts +1 -1
- package/singlestore-core/columns/json.js +2 -2
- package/singlestore-core/columns/json.js.map +1 -1
- package/singlestore-core/columns/mediumint.cjs +2 -2
- package/singlestore-core/columns/mediumint.cjs.map +1 -1
- package/singlestore-core/columns/mediumint.d.cts +1 -1
- package/singlestore-core/columns/mediumint.d.ts +1 -1
- package/singlestore-core/columns/mediumint.js +2 -2
- package/singlestore-core/columns/mediumint.js.map +1 -1
- package/singlestore-core/columns/serial.cjs +2 -2
- package/singlestore-core/columns/serial.cjs.map +1 -1
- package/singlestore-core/columns/serial.d.cts +1 -1
- package/singlestore-core/columns/serial.d.ts +1 -1
- package/singlestore-core/columns/serial.js +2 -2
- package/singlestore-core/columns/serial.js.map +1 -1
- package/singlestore-core/columns/smallint.cjs +2 -2
- package/singlestore-core/columns/smallint.cjs.map +1 -1
- package/singlestore-core/columns/smallint.d.cts +1 -1
- package/singlestore-core/columns/smallint.d.ts +1 -1
- package/singlestore-core/columns/smallint.js +2 -2
- package/singlestore-core/columns/smallint.js.map +1 -1
- package/singlestore-core/columns/timestamp.cjs +6 -6
- package/singlestore-core/columns/timestamp.cjs.map +1 -1
- package/singlestore-core/columns/timestamp.d.cts +3 -3
- package/singlestore-core/columns/timestamp.d.ts +3 -3
- package/singlestore-core/columns/timestamp.js +6 -6
- package/singlestore-core/columns/timestamp.js.map +1 -1
- package/singlestore-core/columns/tinyint.cjs +2 -2
- package/singlestore-core/columns/tinyint.cjs.map +1 -1
- package/singlestore-core/columns/tinyint.d.cts +1 -1
- package/singlestore-core/columns/tinyint.d.ts +1 -1
- package/singlestore-core/columns/tinyint.js +2 -2
- package/singlestore-core/columns/tinyint.js.map +1 -1
- package/singlestore-core/columns/varbinary.cjs +2 -2
- package/singlestore-core/columns/varbinary.cjs.map +1 -1
- package/singlestore-core/columns/varbinary.d.cts +1 -1
- package/singlestore-core/columns/varbinary.d.ts +1 -1
- package/singlestore-core/columns/varbinary.js +2 -2
- package/singlestore-core/columns/varbinary.js.map +1 -1
- package/singlestore-core/columns/vector.cjs +8 -8
- package/singlestore-core/columns/vector.cjs.map +1 -1
- package/singlestore-core/columns/vector.d.cts +4 -4
- package/singlestore-core/columns/vector.d.ts +4 -4
- package/singlestore-core/columns/vector.js +8 -8
- package/singlestore-core/columns/vector.js.map +1 -1
- package/singlestore-core/columns/year.cjs +2 -2
- package/singlestore-core/columns/year.cjs.map +1 -1
- package/singlestore-core/columns/year.d.cts +1 -1
- package/singlestore-core/columns/year.d.ts +1 -1
- package/singlestore-core/columns/year.js +2 -2
- package/singlestore-core/columns/year.js.map +1 -1
- package/singlestore-core/db.d.ts +2 -2
- package/singlestore-core/dialect.cjs +2 -2
- package/singlestore-core/dialect.d.ts +1 -1
- package/singlestore-core/dialect.js +2 -2
- package/singlestore-core/query-builders/delete.d.ts +1 -1
- package/singlestore-core/query-builders/insert.d.ts +1 -1
- package/singlestore-core/query-builders/query.cjs +5 -13
- package/singlestore-core/query-builders/query.cjs.map +1 -1
- package/singlestore-core/query-builders/query.d.ts +1 -1
- package/singlestore-core/query-builders/query.js +5 -13
- package/singlestore-core/query-builders/query.js.map +1 -1
- package/singlestore-core/query-builders/select.d.ts +1 -1
- package/singlestore-core/query-builders/update.d.ts +1 -1
- package/singlestore-core/session.cjs.map +1 -1
- package/singlestore-core/session.d.cts +2 -2
- package/singlestore-core/session.d.ts +2 -2
- package/singlestore-core/session.js.map +1 -1
- package/singlestore-core/table.cjs +1 -1
- package/singlestore-core/table.cjs.map +1 -1
- package/singlestore-core/table.js +1 -1
- package/singlestore-core/table.js.map +1 -1
- package/singlestore-proxy/driver.cjs +2 -5
- package/singlestore-proxy/driver.cjs.map +1 -1
- package/singlestore-proxy/driver.js +2 -5
- package/singlestore-proxy/driver.js.map +1 -1
- package/singlestore-proxy/session.cjs +6 -11
- package/singlestore-proxy/session.cjs.map +1 -1
- package/singlestore-proxy/session.d.cts +4 -9
- package/singlestore-proxy/session.d.ts +5 -10
- package/singlestore-proxy/session.js +7 -12
- package/singlestore-proxy/session.js.map +1 -1
- package/sql/index.cjs +0 -1
- package/sql/index.d.cts +2 -2
- package/sql/index.d.ts +2 -2
- package/sql/index.js +2 -2
- package/sql/sql.cjs +11 -32
- package/sql/sql.cjs.map +1 -1
- package/sql/sql.d.cts +5 -15
- package/sql/sql.d.ts +5 -15
- package/sql/sql.js +12 -32
- package/sql/sql.js.map +1 -1
- package/sql-js/driver.cjs +2 -5
- package/sql-js/driver.cjs.map +1 -1
- package/sql-js/driver.d.ts +1 -1
- package/sql-js/driver.js +2 -5
- package/sql-js/driver.js.map +1 -1
- package/sql-js/session.cjs +14 -14
- package/sql-js/session.cjs.map +1 -1
- package/sql-js/session.d.cts +6 -10
- package/sql-js/session.d.ts +6 -10
- package/sql-js/session.js +15 -15
- package/sql-js/session.js.map +1 -1
- package/sqlite-cloud/driver.cjs +2 -3
- package/sqlite-cloud/driver.cjs.map +1 -1
- package/sqlite-cloud/driver.d.ts +1 -1
- package/sqlite-cloud/driver.js +2 -3
- package/sqlite-cloud/driver.js.map +1 -1
- package/sqlite-cloud/session.cjs +20 -21
- package/sqlite-cloud/session.cjs.map +1 -1
- package/sqlite-cloud/session.d.cts +6 -9
- package/sqlite-cloud/session.d.ts +7 -10
- package/sqlite-cloud/session.js +21 -22
- package/sqlite-cloud/session.js.map +1 -1
- package/sqlite-core/columns/blob.cjs +10 -10
- package/sqlite-core/columns/blob.cjs.map +1 -1
- package/sqlite-core/columns/blob.d.cts +5 -5
- package/sqlite-core/columns/blob.d.ts +5 -5
- package/sqlite-core/columns/blob.js +10 -10
- package/sqlite-core/columns/blob.js.map +1 -1
- package/sqlite-core/columns/custom.cjs +4 -4
- package/sqlite-core/columns/custom.cjs.map +1 -1
- package/sqlite-core/columns/custom.d.cts +2 -2
- package/sqlite-core/columns/custom.d.ts +2 -2
- package/sqlite-core/columns/custom.js +4 -4
- package/sqlite-core/columns/custom.js.map +1 -1
- package/sqlite-core/columns/integer.cjs +8 -8
- package/sqlite-core/columns/integer.cjs.map +1 -1
- package/sqlite-core/columns/integer.d.cts +4 -4
- package/sqlite-core/columns/integer.d.ts +4 -4
- package/sqlite-core/columns/integer.js +8 -8
- package/sqlite-core/columns/integer.js.map +1 -1
- package/sqlite-core/columns/numeric.cjs +4 -4
- package/sqlite-core/columns/numeric.cjs.map +1 -1
- package/sqlite-core/columns/numeric.d.cts +2 -2
- package/sqlite-core/columns/numeric.d.ts +2 -2
- package/sqlite-core/columns/numeric.js +4 -4
- package/sqlite-core/columns/numeric.js.map +1 -1
- package/sqlite-core/columns/text.cjs +4 -4
- package/sqlite-core/columns/text.cjs.map +1 -1
- package/sqlite-core/columns/text.d.cts +2 -2
- package/sqlite-core/columns/text.d.ts +2 -2
- package/sqlite-core/columns/text.js +4 -4
- package/sqlite-core/columns/text.js.map +1 -1
- package/sqlite-core/db.d.ts +1 -1
- package/sqlite-core/dialect.cjs +2 -2
- package/sqlite-core/dialect.d.ts +1 -1
- package/sqlite-core/dialect.js +2 -2
- package/sqlite-core/index.cjs +9 -9
- package/sqlite-core/index.js +9 -9
- package/sqlite-core/query-builders/_query.cjs +1 -1
- package/sqlite-core/query-builders/_query.cjs.map +1 -1
- package/sqlite-core/query-builders/_query.js +1 -1
- package/sqlite-core/query-builders/_query.js.map +1 -1
- package/sqlite-core/query-builders/delete.cjs +1 -1
- package/sqlite-core/query-builders/delete.cjs.map +1 -1
- package/sqlite-core/query-builders/delete.js +1 -1
- package/sqlite-core/query-builders/delete.js.map +1 -1
- package/sqlite-core/query-builders/index.cjs +1 -1
- package/sqlite-core/query-builders/index.js +1 -1
- package/sqlite-core/query-builders/insert.cjs +1 -1
- package/sqlite-core/query-builders/insert.cjs.map +1 -1
- package/sqlite-core/query-builders/insert.js +1 -1
- package/sqlite-core/query-builders/insert.js.map +1 -1
- package/sqlite-core/query-builders/query.cjs +5 -13
- package/sqlite-core/query-builders/query.cjs.map +1 -1
- package/sqlite-core/query-builders/query.d.ts +1 -1
- package/sqlite-core/query-builders/query.js +5 -13
- package/sqlite-core/query-builders/query.js.map +1 -1
- package/sqlite-core/query-builders/raw.cjs +4 -0
- package/sqlite-core/query-builders/raw.cjs.map +1 -1
- package/sqlite-core/query-builders/raw.js +4 -0
- package/sqlite-core/query-builders/raw.js.map +1 -1
- package/sqlite-core/query-builders/select.cjs +2 -2
- package/sqlite-core/query-builders/select.cjs.map +1 -1
- package/sqlite-core/query-builders/select.js +2 -2
- package/sqlite-core/query-builders/select.js.map +1 -1
- package/sqlite-core/query-builders/update.cjs +2 -2
- package/sqlite-core/query-builders/update.cjs.map +1 -1
- package/sqlite-core/query-builders/update.js +2 -2
- package/sqlite-core/query-builders/update.js.map +1 -1
- package/sqlite-core/session.cjs +8 -8
- package/sqlite-core/session.cjs.map +1 -1
- package/sqlite-core/session.d.cts +5 -5
- package/sqlite-core/session.d.ts +5 -5
- package/sqlite-core/session.js +8 -8
- package/sqlite-core/session.js.map +1 -1
- package/sqlite-core/table.cjs +1 -1
- package/sqlite-core/table.cjs.map +1 -1
- package/sqlite-core/table.js +1 -1
- package/sqlite-core/table.js.map +1 -1
- package/sqlite-core/utils.cjs +3 -3
- package/sqlite-core/utils.js +3 -3
- package/sqlite-proxy/driver.cjs +2 -3
- package/sqlite-proxy/driver.cjs.map +1 -1
- package/sqlite-proxy/driver.d.ts +1 -1
- package/sqlite-proxy/driver.js +2 -3
- package/sqlite-proxy/driver.js.map +1 -1
- package/sqlite-proxy/session.cjs +17 -20
- package/sqlite-proxy/session.cjs.map +1 -1
- package/sqlite-proxy/session.d.cts +7 -11
- package/sqlite-proxy/session.d.ts +8 -12
- package/sqlite-proxy/session.js +18 -21
- package/sqlite-proxy/session.js.map +1 -1
- package/table.d.cts +1 -1
- package/table.d.ts +1 -1
- package/tidb-serverless/driver.cjs +2 -3
- package/tidb-serverless/driver.cjs.map +1 -1
- package/tidb-serverless/driver.d.cts +0 -1
- package/tidb-serverless/driver.d.ts +0 -1
- package/tidb-serverless/driver.js +2 -3
- package/tidb-serverless/driver.js.map +1 -1
- package/tidb-serverless/session.cjs +37 -25
- package/tidb-serverless/session.cjs.map +1 -1
- package/tidb-serverless/session.d.cts +4 -10
- package/tidb-serverless/session.d.ts +6 -12
- package/tidb-serverless/session.js +38 -26
- package/tidb-serverless/session.js.map +1 -1
- package/tursodatabase/driver-core.cjs +2 -3
- package/tursodatabase/driver-core.cjs.map +1 -1
- package/tursodatabase/driver-core.d.ts +1 -1
- package/tursodatabase/driver-core.js +2 -3
- package/tursodatabase/driver-core.js.map +1 -1
- package/tursodatabase/session.cjs +19 -20
- package/tursodatabase/session.cjs.map +1 -1
- package/tursodatabase/session.d.cts +6 -9
- package/tursodatabase/session.d.ts +7 -10
- package/tursodatabase/session.js +20 -21
- package/tursodatabase/session.js.map +1 -1
- package/up-migrations/effect-pg.cjs +3 -3
- package/up-migrations/effect-pg.cjs.map +1 -1
- package/up-migrations/effect-pg.d.ts +1 -1
- package/up-migrations/effect-pg.js +3 -3
- package/up-migrations/effect-pg.js.map +1 -1
- package/up-migrations/pg.cjs +8 -3
- package/up-migrations/pg.cjs.map +1 -1
- package/up-migrations/pg.d.cts +1 -1
- package/up-migrations/pg.d.ts +2 -2
- package/up-migrations/pg.js +8 -3
- package/up-migrations/pg.js.map +1 -1
- package/up-migrations/sqlite.d.ts +2 -2
- package/utils.cjs +7 -129
- package/utils.cjs.map +1 -1
- package/utils.d.cts +3 -10
- package/utils.d.ts +3 -10
- package/utils.js +8 -127
- package/utils.js.map +1 -1
- package/vercel-postgres/driver.cjs +32 -14
- package/vercel-postgres/driver.cjs.map +1 -1
- package/vercel-postgres/driver.d.cts +17 -12
- package/vercel-postgres/driver.d.ts +18 -13
- package/vercel-postgres/driver.js +31 -14
- package/vercel-postgres/driver.js.map +1 -1
- package/vercel-postgres/index.cjs +3 -2
- package/vercel-postgres/index.d.cts +3 -3
- package/vercel-postgres/index.d.ts +3 -3
- package/vercel-postgres/index.js +3 -3
- package/vercel-postgres/migrator.cjs.map +1 -1
- package/vercel-postgres/migrator.d.cts +1 -1
- package/vercel-postgres/migrator.d.ts +1 -1
- package/vercel-postgres/migrator.js.map +1 -1
- package/vercel-postgres/session.cjs +110 -32
- package/vercel-postgres/session.cjs.map +1 -1
- package/vercel-postgres/session.d.cts +32 -9
- package/vercel-postgres/session.d.ts +33 -10
- package/vercel-postgres/session.js +111 -34
- package/vercel-postgres/session.js.map +1 -1
- package/xata-http/driver.cjs +31 -91
- package/xata-http/driver.cjs.map +1 -1
- package/xata-http/driver.d.cts +16 -10
- package/xata-http/driver.d.ts +17 -11
- package/xata-http/driver.js +30 -91
- package/xata-http/driver.js.map +1 -1
- package/xata-http/index.cjs +4 -2
- package/xata-http/index.d.cts +3 -3
- package/xata-http/index.d.ts +3 -3
- package/xata-http/index.js +3 -3
- package/xata-http/migrator.cjs +1 -1
- package/xata-http/migrator.cjs.map +1 -1
- package/xata-http/migrator.d.cts +1 -1
- package/xata-http/migrator.d.ts +1 -1
- package/xata-http/migrator.js +1 -1
- package/xata-http/migrator.js.map +1 -1
- package/xata-http/session.cjs +110 -24
- package/xata-http/session.cjs.map +1 -1
- package/xata-http/session.d.cts +33 -7
- package/xata-http/session.d.ts +34 -8
- package/xata-http/session.js +110 -26
- package/xata-http/session.js.map +1 -1
- package/codecs.cjs +0 -77
- package/codecs.cjs.map +0 -1
- package/codecs.d.cts +0 -68
- package/codecs.d.ts +0 -68
- package/codecs.js +0 -74
- package/codecs.js.map +0 -1
- package/pg-core/array.cjs.map +0 -1
- package/pg-core/array.js.map +0 -1
- package/pg-core/codecs.cjs +0 -156
- package/pg-core/codecs.cjs.map +0 -1
- package/pg-core/codecs.d.cts +0 -27
- package/pg-core/codecs.d.ts +0 -27
- package/pg-core/codecs.js +0 -148
- package/pg-core/codecs.js.map +0 -1
package/tursodatabase/session.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { entityKind } from "../entity.js";
|
|
2
|
-
import {
|
|
2
|
+
import { mapResultRow } from "../utils.js";
|
|
3
3
|
import { fillPlaceholders } from "../sql/sql.js";
|
|
4
|
-
import { NoopCache } from "../cache/core/index.js";
|
|
5
4
|
import { NoopLogger } from "../logger.js";
|
|
5
|
+
import { NoopCache } from "../cache/core/index.js";
|
|
6
6
|
import { DrizzleError } from "../errors.js";
|
|
7
|
-
import { makeRqbJitMapper } from "../relations.js";
|
|
8
7
|
import { SQLiteTransaction } from "../sqlite-core/index.js";
|
|
9
8
|
import { SQLitePreparedQuery as SQLitePreparedQuery$1, SQLiteSession as SQLiteSession$1 } from "../sqlite-core/session.js";
|
|
10
9
|
|
|
@@ -22,11 +21,11 @@ var TursoDatabaseSession = class TursoDatabaseSession extends SQLiteSession$1 {
|
|
|
22
21
|
this.logger = options.logger ?? new NoopLogger();
|
|
23
22
|
this.cache = options.cache ?? new NoopCache();
|
|
24
23
|
}
|
|
25
|
-
prepareQuery(query, fields, executeMethod, customResultMapper, queryMetadata, cacheConfig) {
|
|
26
|
-
return new TursoDatabasePreparedQuery(this.client.prepare(query.sql), query, this.logger, this.cache, queryMetadata, cacheConfig, fields, executeMethod,
|
|
24
|
+
prepareQuery(query, fields, executeMethod, isResponseInArrayMode, customResultMapper, queryMetadata, cacheConfig) {
|
|
25
|
+
return new TursoDatabasePreparedQuery(this.client.prepare(query.sql), query, this.logger, this.cache, queryMetadata, cacheConfig, fields, executeMethod, isResponseInArrayMode, customResultMapper);
|
|
27
26
|
}
|
|
28
|
-
prepareRelationalQuery(query, fields, executeMethod, customResultMapper
|
|
29
|
-
return new TursoDatabasePreparedQuery(this.client.prepare(query.sql), query, this.logger, this.cache, void 0, void 0, fields, executeMethod,
|
|
27
|
+
prepareRelationalQuery(query, fields, executeMethod, customResultMapper) {
|
|
28
|
+
return new TursoDatabasePreparedQuery(this.client.prepare(query.sql), query, this.logger, this.cache, void 0, void 0, fields, executeMethod, false, customResultMapper, true);
|
|
30
29
|
}
|
|
31
30
|
async transaction(transaction, _config, tx) {
|
|
32
31
|
const session = new TursoDatabaseSession(this.client, this.dialect, this.relations, this.schema, this.options);
|
|
@@ -36,7 +35,7 @@ var TursoDatabaseSession = class TursoDatabaseSession extends SQLiteSession$1 {
|
|
|
36
35
|
async run(query) {
|
|
37
36
|
const staticQuery = this.dialect.sqlToQuery(query);
|
|
38
37
|
try {
|
|
39
|
-
return await this.prepareOneTimeQuery(staticQuery, void 0, "run").run();
|
|
38
|
+
return await this.prepareOneTimeQuery(staticQuery, void 0, "run", false).run();
|
|
40
39
|
} catch (err) {
|
|
41
40
|
throw new DrizzleError({
|
|
42
41
|
cause: err,
|
|
@@ -45,13 +44,13 @@ var TursoDatabaseSession = class TursoDatabaseSession extends SQLiteSession$1 {
|
|
|
45
44
|
}
|
|
46
45
|
}
|
|
47
46
|
async all(query) {
|
|
48
|
-
return await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), void 0, "run").all();
|
|
47
|
+
return await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), void 0, "run", false).all();
|
|
49
48
|
}
|
|
50
49
|
async get(query) {
|
|
51
|
-
return await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), void 0, "run").get();
|
|
50
|
+
return await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), void 0, "run", false).get();
|
|
52
51
|
}
|
|
53
52
|
async values(query) {
|
|
54
|
-
return await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), void 0, "run").values();
|
|
53
|
+
return await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), void 0, "run", false).values();
|
|
55
54
|
}
|
|
56
55
|
};
|
|
57
56
|
var TursoDatabaseTransaction = class extends SQLiteTransaction {
|
|
@@ -62,16 +61,14 @@ var TursoDatabaseTransaction = class extends SQLiteTransaction {
|
|
|
62
61
|
};
|
|
63
62
|
var TursoDatabasePreparedQuery = class extends SQLitePreparedQuery$1 {
|
|
64
63
|
static [entityKind] = "TursoDatabasePreparedQuery";
|
|
65
|
-
|
|
66
|
-
constructor(stmt, query, logger, cache, queryMetadata, cacheConfig, fields, executeMethod, useJitMapper, customResultMapper, isRqbV2Query, rqbConfig) {
|
|
64
|
+
constructor(stmt, query, logger, cache, queryMetadata, cacheConfig, fields, executeMethod, _isResponseInArrayMode, customResultMapper, isRqbV2Query) {
|
|
67
65
|
super("async", executeMethod, query, cache, queryMetadata, cacheConfig);
|
|
68
66
|
this.stmt = stmt;
|
|
69
67
|
this.logger = logger;
|
|
70
68
|
this.fields = fields;
|
|
71
|
-
this.
|
|
69
|
+
this._isResponseInArrayMode = _isResponseInArrayMode;
|
|
72
70
|
this.customResultMapper = customResultMapper;
|
|
73
71
|
this.isRqbV2Query = isRqbV2Query;
|
|
74
|
-
this.rqbConfig = rqbConfig;
|
|
75
72
|
}
|
|
76
73
|
async run(placeholderValues) {
|
|
77
74
|
const { stmt, query, logger } = this;
|
|
@@ -91,15 +88,13 @@ var TursoDatabasePreparedQuery = class extends SQLitePreparedQuery$1 {
|
|
|
91
88
|
return await (params.length ? stmt.raw(false).all(...params) : stmt.raw(false).all());
|
|
92
89
|
});
|
|
93
90
|
}
|
|
94
|
-
|
|
95
|
-
return this.useJitMapper ? (this.jitMapper = this.jitMapper ?? makeJitQueryMapper(fields, joinsNotNullableMap))(rows) : rows.map((row) => mapResultRow(fields, row, joinsNotNullableMap));
|
|
91
|
+
return (await this.values(placeholderValues)).map((row) => mapResultRow(fields, row, joinsNotNullableMap));
|
|
96
92
|
}
|
|
97
93
|
async allRqbV2(placeholderValues) {
|
|
98
94
|
const { logger, query, customResultMapper, stmt } = this;
|
|
99
95
|
const params = fillPlaceholders(query.params, placeholderValues ?? {});
|
|
100
96
|
logger.logQuery(query.sql, params);
|
|
101
|
-
|
|
102
|
-
return this.useJitMapper ? (this.jitMapper = this.jitMapper ?? makeRqbJitMapper(this.rqbConfig))(rows) : customResultMapper(rows);
|
|
97
|
+
return customResultMapper(await (params.length ? stmt.raw(false).all(...params) : stmt.raw(false).all()));
|
|
103
98
|
}
|
|
104
99
|
async get(placeholderValues) {
|
|
105
100
|
if (this.isRqbV2Query) return await this.getRqbV2(placeholderValues);
|
|
@@ -115,7 +110,7 @@ var TursoDatabasePreparedQuery = class extends SQLitePreparedQuery$1 {
|
|
|
115
110
|
return await (params.length ? stmt.raw(true).get(...params) : stmt.raw(true).get());
|
|
116
111
|
});
|
|
117
112
|
if (row === void 0) return row;
|
|
118
|
-
return
|
|
113
|
+
return mapResultRow(fields, row, joinsNotNullableMap);
|
|
119
114
|
}
|
|
120
115
|
async getRqbV2(placeholderValues) {
|
|
121
116
|
const { logger, query, stmt, customResultMapper } = this;
|
|
@@ -123,7 +118,7 @@ var TursoDatabasePreparedQuery = class extends SQLitePreparedQuery$1 {
|
|
|
123
118
|
logger.logQuery(query.sql, params);
|
|
124
119
|
const row = await (params.length ? stmt.raw(false).get(...params) : stmt.raw(false).get());
|
|
125
120
|
if (row === void 0) return row;
|
|
126
|
-
return
|
|
121
|
+
return customResultMapper([row]);
|
|
127
122
|
}
|
|
128
123
|
async values(placeholderValues) {
|
|
129
124
|
const { logger, stmt, query } = this;
|
|
@@ -133,6 +128,10 @@ var TursoDatabasePreparedQuery = class extends SQLitePreparedQuery$1 {
|
|
|
133
128
|
return await (params.length ? stmt.raw(true).all(...params) : stmt.raw(true).all());
|
|
134
129
|
});
|
|
135
130
|
}
|
|
131
|
+
/** @internal */
|
|
132
|
+
isResponseInArrayMode() {
|
|
133
|
+
return this._isResponseInArrayMode;
|
|
134
|
+
}
|
|
136
135
|
};
|
|
137
136
|
|
|
138
137
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","names":["SQLiteSession","SQLitePreparedQuery"],"sources":["../../src/tursodatabase/session.ts"],"sourcesContent":["import type { DatabasePromise } from '@tursodatabase/database-common';\nimport type * as V1 from '~/_relations.ts';\nimport { type Cache, NoopCache } from '~/cache/core/index.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DrizzleError } from '~/errors.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport {\n\ttype AnyRelations,\n\tmakeRqbJitMapper,\n\ttype RelationalQueryMapperConfig,\n\ttype RelationalRowsMapper,\n} from '~/relations.ts';\nimport { fillPlaceholders, type Query, type SQL } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport type {\n\tPreparedQueryConfig as PreparedQueryConfigBase,\n\tResult,\n\tSQLiteExecuteMethod,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { makeJitQueryMapper, mapResultRow, type RowsMapper } from '~/utils.ts';\nimport type { TursoDatabaseRunResult } from './driver-core.ts';\n\nexport interface TursoDatabaseSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n\tuseJitMapper?: boolean;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class TursoDatabaseSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteSession<'async', TursoDatabaseRunResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'TursoDatabaseSession';\n\n\tprivate logger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\tprivate client: DatabasePromise,\n\t\tdialect: SQLiteAsyncDialect,\n\t\tprivate relations: TRelations,\n\t\tprivate schema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: TursoDatabaseSessionOptions,\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.cache = options.cache ?? new NoopCache();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): TursoDatabasePreparedQuery<T> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\n\t\treturn new TursoDatabasePreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tthis.options.useJitMapper,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\tprepareRelationalQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tcustomResultMapper: (rows: Record<string, unknown>[]) => unknown,\n\t\tconfig: RelationalQueryMapperConfig,\n\t): TursoDatabasePreparedQuery<T, true> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\n\t\treturn new TursoDatabasePreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tthis.options.useJitMapper,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t\tconfig,\n\t\t);\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (db: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t\t_config?: SQLiteTransactionConfig,\n\t\ttx?: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>,\n\t): Promise<T> {\n\t\tconst session = new TursoDatabaseSession<TFullSchema, TRelations, TSchema>(\n\t\t\tthis.client,\n\t\t\tthis.dialect,\n\t\t\tthis.relations,\n\t\t\tthis.schema,\n\t\t\tthis.options,\n\t\t);\n\t\tconst localTx = tx ?? new TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>(\n\t\t\t'async',\n\t\t\tthis.dialect,\n\t\t\tsession,\n\t\t\tthis.relations,\n\t\t\tthis.schema,\n\t\t);\n\n\t\tconst clientTx = this.client.transaction(async () => await transaction(localTx));\n\n\t\tconst result = await clientTx();\n\t\treturn result;\n\t}\n\n\toverride async run(query: SQL): Result<'async', TursoDatabaseRunResult> {\n\t\tconst staticQuery = this.dialect.sqlToQuery(query);\n\t\ttry {\n\t\t\treturn await this.prepareOneTimeQuery(staticQuery, undefined, 'run').run() as Result<\n\t\t\t\t'async',\n\t\t\t\tTursoDatabaseRunResult\n\t\t\t>;\n\t\t} catch (err) {\n\t\t\tthrow new DrizzleError({ cause: err, message: `Failed to run the query '${staticQuery.sql}'` });\n\t\t}\n\t}\n\n\toverride async all<T = unknown>(query: SQL): Result<'async', T[]> {\n\t\treturn await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run').all() as Result<\n\t\t\t'async',\n\t\t\tT[]\n\t\t>;\n\t}\n\n\toverride async get<T = unknown>(query: SQL): Result<'async', T> {\n\t\treturn await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run').get() as Result<\n\t\t\t'async',\n\t\t\tT\n\t\t>;\n\t}\n\n\toverride async values<T extends any[] = unknown[]>(\n\t\tquery: SQL,\n\t): Result<'async', T[]> {\n\t\treturn await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run').values() as Result<\n\t\t\t'async',\n\t\t\tT[]\n\t\t>;\n\t}\n}\n\nexport class TursoDatabaseTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteTransaction<'async', TursoDatabaseRunResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'TursoDatabaseTransaction';\n\n\toverride async transaction<T>(\n\t\t_transaction: (tx: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\t// Not supported by driver\n\t\tthrow new Error('Nested transactions are not supported');\n\n\t\t// const savepointName = `sp${this.nestedIndex}`;\n\n\t\t// const tx = new TursoDatabaseTransaction(\n\t\t// \t'async',\n\t\t// \tthis.dialect,\n\t\t// \tthis.session,\n\t\t// \tthis.relations,\n\t\t// \tthis.schema,\n\t\t// \tthis.nestedIndex + 1,\n\t\t// );\n\n\t\t// await this.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\t// try {\n\t\t// \tconst result = await (<TursoDatabaseSession<TFullSchema, TRelations, TSchema>> (this.session)).transaction(\n\t\t// \t\ttransaction,\n\t\t// \t\tundefined,\n\t\t// \t\ttx,\n\t\t// \t);\n\t\t// \tawait this.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t// \treturn result;\n\t\t// } catch (err) {\n\t\t// \tawait this.session.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t// \tthrow err;\n\t\t// }\n\t}\n}\n\nexport class TursoDatabasePreparedQuery<\n\tT extends PreparedQueryConfig = PreparedQueryConfig,\n\tTIsRqbV2 extends boolean = false,\n> extends SQLitePreparedQuery<\n\t{\n\t\ttype: 'async';\n\t\trun: TursoDatabaseRunResult;\n\t\tall: T['all'];\n\t\tget: T['get'];\n\t\tvalues: T['values'];\n\t\texecute: T['execute'];\n\t}\n> {\n\tstatic override readonly [entityKind]: string = 'TursoDatabasePreparedQuery';\n\tprivate jitMapper?: RowsMapper<any> | RelationalRowsMapper<any>;\n\n\tconstructor(\n\t\tprivate stmt: ReturnType<DatabasePromise['prepare']>,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tcache: Cache,\n\t\tqueryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\tcacheConfig: WithCacheConfig | undefined,\n\t\t/** @internal */ public fields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate useJitMapper: boolean | undefined,\n\t\tprivate customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown,\n\t\tprivate isRqbV2Query?: TIsRqbV2,\n\t\tprivate rqbConfig?: RelationalQueryMapperConfig,\n\t) {\n\t\tsuper('async', executeMethod, query, cache, queryMetadata, cacheConfig);\n\t}\n\n\tasync run(placeholderValues?: Record<string, unknown>): Promise<TursoDatabaseRunResult> {\n\t\tconst { stmt, query, logger } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\t\treturn await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await (params.length ? stmt.run(...params) : stmt.run());\n\t\t});\n\t}\n\n\tasync all(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tif (this.isRqbV2Query) return await this.allRqbV2(placeholderValues);\n\n\t\tconst { fields, logger, query, customResultMapper, joinsNotNullableMap, stmt } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn await this.queryWithCache(query.sql, params, async () => {\n\t\t\t\treturn await (params.length ? stmt.raw(false).all(...params) : stmt.raw(false).all());\n\t\t\t});\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues) as unknown[][];\n\n\t\treturn this.useJitMapper\n\t\t\t? (this.jitMapper = this.jitMapper as RowsMapper<T['all']>\n\t\t\t\t?? makeJitQueryMapper<T['all']>(fields!, joinsNotNullableMap))(rows)\n\t\t\t: rows.map((row) => mapResultRow(fields!, row, joinsNotNullableMap));\n\t}\n\n\tprivate async allRqbV2(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tconst { logger, query, customResultMapper, stmt } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst rows = await (params.length ? stmt.raw(false).all(...params) : stmt.raw(false).all());\n\n\t\treturn this.useJitMapper\n\t\t\t? (this.jitMapper = this.jitMapper as RelationalRowsMapper<T['all']>\n\t\t\t\t?? makeRqbJitMapper<T['all']>(this.rqbConfig!))(rows)\n\t\t\t: (customResultMapper as (\n\t\t\t\trows: Record<string, unknown>[],\n\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t) => unknown)(rows as Record<string, unknown>[]) as T['all'];\n\t}\n\n\tasync get(placeholderValues?: Record<string, unknown>): Promise<T['get']> {\n\t\tif (this.isRqbV2Query) return await this.getRqbV2(placeholderValues);\n\n\t\tconst { fields, logger, query, stmt, customResultMapper, joinsNotNullableMap } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\n\t\tif (!fields && !customResultMapper) {\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn await this.queryWithCache(query.sql, params, async () => {\n\t\t\t\treturn await (params.length ? stmt.raw(false).get(...params) : stmt.raw(false).get());\n\t\t\t});\n\t\t}\n\n\t\tconst row = await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await (params.length ? stmt.raw(true).get(...params) : stmt.raw(true).get());\n\t\t});\n\n\t\tif (row === undefined) return row;\n\n\t\treturn this.useJitMapper\n\t\t\t? (this.jitMapper = this.jitMapper as RowsMapper<T['get'][]>\n\t\t\t\t?? makeJitQueryMapper<T['get'][]>(fields!, joinsNotNullableMap))(\n\t\t\t\t\t[row],\n\t\t\t\t)[0]\n\t\t\t: mapResultRow(fields!, row, joinsNotNullableMap);\n\t}\n\n\tprivate async getRqbV2(placeholderValues?: Record<string, unknown>) {\n\t\tconst { logger, query, stmt, customResultMapper } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst row = await (params.length ? stmt.raw(false).get(...params) : stmt.raw(false).get());\n\n\t\tif (row === undefined) return row;\n\n\t\treturn this.useJitMapper\n\t\t\t? (this.jitMapper = this.jitMapper as RelationalRowsMapper<T['get'][]>\n\t\t\t\t?? makeRqbJitMapper<T['get'][]>(this.rqbConfig!))([row])\n\t\t\t: (customResultMapper as (\n\t\t\t\trows: Record<string, unknown>[],\n\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t) => unknown)([row] as Record<string, unknown>[]) as T['get'];\n\t}\n\n\tasync values(placeholderValues?: Record<string, unknown>): Promise<T['values']> {\n\t\tconst { logger, stmt, query } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\t\treturn await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await (params.length ? stmt.raw(true).all(...params) : stmt.raw(true).all());\n\t\t});\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session.js","names":["SQLiteSession","SQLitePreparedQuery"],"sources":["../../src/tursodatabase/session.ts"],"sourcesContent":["import type { DatabasePromise } from '@tursodatabase/database-common';\nimport type * as V1 from '~/_relations.ts';\nimport { type Cache, NoopCache } from '~/cache/core/index.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DrizzleError } from '~/errors.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport { fillPlaceholders, type Query, type SQL } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport type {\n\tPreparedQueryConfig as PreparedQueryConfigBase,\n\tResult,\n\tSQLiteExecuteMethod,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\nimport type { TursoDatabaseRunResult } from './driver-core.ts';\n\nexport interface TursoDatabaseSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class TursoDatabaseSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteSession<'async', TursoDatabaseRunResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'TursoDatabaseSession';\n\n\tprivate logger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\tprivate client: DatabasePromise,\n\t\tdialect: SQLiteAsyncDialect,\n\t\tprivate relations: TRelations,\n\t\tprivate schema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: TursoDatabaseSessionOptions,\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.cache = options.cache ?? new NoopCache();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): TursoDatabasePreparedQuery<T> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\n\t\treturn new TursoDatabasePreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\tprepareRelationalQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tcustomResultMapper: (rows: Record<string, unknown>[]) => unknown,\n\t): TursoDatabasePreparedQuery<T, true> {\n\t\tconst stmt = this.client.prepare(query.sql);\n\n\t\treturn new TursoDatabasePreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tfalse,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (db: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t\t_config?: SQLiteTransactionConfig,\n\t\ttx?: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>,\n\t): Promise<T> {\n\t\tconst session = new TursoDatabaseSession<TFullSchema, TRelations, TSchema>(\n\t\t\tthis.client,\n\t\t\tthis.dialect,\n\t\t\tthis.relations,\n\t\t\tthis.schema,\n\t\t\tthis.options,\n\t\t);\n\t\tconst localTx = tx ?? new TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>(\n\t\t\t'async',\n\t\t\tthis.dialect,\n\t\t\tsession,\n\t\t\tthis.relations,\n\t\t\tthis.schema,\n\t\t);\n\n\t\tconst clientTx = this.client.transaction(async () => await transaction(localTx));\n\n\t\tconst result = await clientTx();\n\t\treturn result;\n\t}\n\n\toverride async run(query: SQL): Result<'async', TursoDatabaseRunResult> {\n\t\tconst staticQuery = this.dialect.sqlToQuery(query);\n\t\ttry {\n\t\t\treturn await this.prepareOneTimeQuery(staticQuery, undefined, 'run', false).run() as Result<\n\t\t\t\t'async',\n\t\t\t\tTursoDatabaseRunResult\n\t\t\t>;\n\t\t} catch (err) {\n\t\t\tthrow new DrizzleError({ cause: err, message: `Failed to run the query '${staticQuery.sql}'` });\n\t\t}\n\t}\n\n\toverride async all<T = unknown>(query: SQL): Result<'async', T[]> {\n\t\treturn await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run', false).all() as Result<\n\t\t\t'async',\n\t\t\tT[]\n\t\t>;\n\t}\n\n\toverride async get<T = unknown>(query: SQL): Result<'async', T> {\n\t\treturn await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run', false).get() as Result<\n\t\t\t'async',\n\t\t\tT\n\t\t>;\n\t}\n\n\toverride async values<T extends any[] = unknown[]>(\n\t\tquery: SQL,\n\t): Result<'async', T[]> {\n\t\treturn await this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run', false).values() as Result<\n\t\t\t'async',\n\t\t\tT[]\n\t\t>;\n\t}\n}\n\nexport class TursoDatabaseTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteTransaction<'async', TursoDatabaseRunResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'TursoDatabaseTransaction';\n\n\toverride async transaction<T>(\n\t\t_transaction: (tx: TursoDatabaseTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\t// Not supported by driver\n\t\tthrow new Error('Nested transactions are not supported');\n\n\t\t// const savepointName = `sp${this.nestedIndex}`;\n\n\t\t// const tx = new TursoDatabaseTransaction(\n\t\t// \t'async',\n\t\t// \tthis.dialect,\n\t\t// \tthis.session,\n\t\t// \tthis.relations,\n\t\t// \tthis.schema,\n\t\t// \tthis.nestedIndex + 1,\n\t\t// );\n\n\t\t// await this.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\t// try {\n\t\t// \tconst result = await (<TursoDatabaseSession<TFullSchema, TRelations, TSchema>> (this.session)).transaction(\n\t\t// \t\ttransaction,\n\t\t// \t\tundefined,\n\t\t// \t\ttx,\n\t\t// \t);\n\t\t// \tawait this.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t// \treturn result;\n\t\t// } catch (err) {\n\t\t// \tawait this.session.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t// \tthrow err;\n\t\t// }\n\t}\n}\n\nexport class TursoDatabasePreparedQuery<\n\tT extends PreparedQueryConfig = PreparedQueryConfig,\n\tTIsRqbV2 extends boolean = false,\n> extends SQLitePreparedQuery<\n\t{\n\t\ttype: 'async';\n\t\trun: TursoDatabaseRunResult;\n\t\tall: T['all'];\n\t\tget: T['get'];\n\t\tvalues: T['values'];\n\t\texecute: T['execute'];\n\t}\n> {\n\tstatic override readonly [entityKind]: string = 'TursoDatabasePreparedQuery';\n\n\tconstructor(\n\t\tprivate stmt: ReturnType<DatabasePromise['prepare']>,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tcache: Cache,\n\t\tqueryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\tcacheConfig: WithCacheConfig | undefined,\n\t\t/** @internal */ public fields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown,\n\t\tprivate isRqbV2Query?: TIsRqbV2,\n\t) {\n\t\tsuper('async', executeMethod, query, cache, queryMetadata, cacheConfig);\n\t}\n\n\tasync run(placeholderValues?: Record<string, unknown>): Promise<TursoDatabaseRunResult> {\n\t\tconst { stmt, query, logger } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\t\treturn await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await (params.length ? stmt.run(...params) : stmt.run());\n\t\t});\n\t}\n\n\tasync all(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tif (this.isRqbV2Query) return await this.allRqbV2(placeholderValues);\n\n\t\tconst { fields, logger, query, customResultMapper, joinsNotNullableMap, stmt } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn await this.queryWithCache(query.sql, params, async () => {\n\t\t\t\treturn await (params.length ? stmt.raw(false).all(...params) : stmt.raw(false).all());\n\t\t\t});\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues) as unknown[][];\n\n\t\treturn rows.map((row) => mapResultRow(fields!, row, joinsNotNullableMap));\n\t}\n\n\tprivate async allRqbV2(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tconst { logger, query, customResultMapper, stmt } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst rows = await (params.length ? stmt.raw(false).all(...params) : stmt.raw(false).all());\n\n\t\treturn (customResultMapper as (\n\t\t\trows: Record<string, unknown>[],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown)(rows as Record<string, unknown>[]) as T['all'];\n\t}\n\n\tasync get(placeholderValues?: Record<string, unknown>): Promise<T['get']> {\n\t\tif (this.isRqbV2Query) return await this.getRqbV2(placeholderValues);\n\n\t\tconst { fields, logger, query, stmt, customResultMapper, joinsNotNullableMap } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\n\t\tif (!fields && !customResultMapper) {\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn await this.queryWithCache(query.sql, params, async () => {\n\t\t\t\treturn await (params.length ? stmt.raw(false).get(...params) : stmt.raw(false).get());\n\t\t\t});\n\t\t}\n\n\t\tconst row = await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await (params.length ? stmt.raw(true).get(...params) : stmt.raw(true).get());\n\t\t});\n\n\t\tif (row === undefined) return row;\n\n\t\treturn mapResultRow(fields!, row, joinsNotNullableMap);\n\t}\n\n\tprivate async getRqbV2(placeholderValues?: Record<string, unknown>) {\n\t\tconst { logger, query, stmt, customResultMapper } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst row = await (params.length ? stmt.raw(false).get(...params) : stmt.raw(false).get());\n\n\t\tif (row === undefined) return row;\n\n\t\treturn (customResultMapper as (\n\t\t\trows: Record<string, unknown>[],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown)([row] as Record<string, unknown>[]) as T['get'];\n\t}\n\n\tasync values(placeholderValues?: Record<string, unknown>): Promise<T['values']> {\n\t\tconst { logger, stmt, query } = this;\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\t\treturn await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await (params.length ? stmt.raw(true).all(...params) : stmt.raw(true).all());\n\t\t});\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ function getVersion(columns) {
|
|
|
16
16
|
const upgradeFunctions = { 0: (migrationsSchema, migrationsTable, session, localMigrations) => {
|
|
17
17
|
return effect.Effect.gen(function* () {
|
|
18
18
|
const table = __sql_sql_ts.sql`${__sql_sql_ts.sql.identifier(migrationsSchema)}.${__sql_sql_ts.sql.identifier(migrationsTable)}`;
|
|
19
|
-
const dbRows = yield* session.
|
|
19
|
+
const dbRows = yield* session.all(__sql_sql_ts.sql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`);
|
|
20
20
|
localMigrations.sort((a, b) => a.folderMillis !== b.folderMillis ? a.folderMillis - b.folderMillis : (a.name ?? "").localeCompare(b.name ?? ""));
|
|
21
21
|
const byMillis = /* @__PURE__ */ new Map();
|
|
22
22
|
const byHash = /* @__PURE__ */ new Map();
|
|
@@ -56,10 +56,10 @@ const upgradeFunctions = { 0: (migrationsSchema, migrationsTable, session, local
|
|
|
56
56
|
* Version 1: Extended schema (id, hash, created_at, name, applied_at)
|
|
57
57
|
*/
|
|
58
58
|
const upgradeIfNeeded = effect.Effect.fn("upgradeIfNeeded")(function* (migrationsSchema, migrationsTable, session, localMigrations) {
|
|
59
|
-
if ((yield* session.
|
|
59
|
+
if ((yield* session.all(__sql_sql_ts.sql`SELECT 1 FROM information_schema.tables
|
|
60
60
|
WHERE table_schema = ${migrationsSchema}
|
|
61
61
|
AND table_name = ${migrationsTable}`)).length === 0) return { newDb: true };
|
|
62
|
-
const version = getVersion((yield* session.
|
|
62
|
+
const version = getVersion((yield* session.all(__sql_sql_ts.sql`SELECT
|
|
63
63
|
n.nspname AS "schema",
|
|
64
64
|
c.relname AS "table_name",
|
|
65
65
|
a.attname AS "column_name",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effect-pg.cjs","names":["Effect","sql"],"sources":["../../src/up-migrations/effect-pg.ts"],"sourcesContent":["import { Effect } from 'effect';\nimport type { QueryEffectHKTBase } from '~/effect-core/query-effect.ts';\nimport type { MigrationMeta } from '~/migrator.ts';\nimport type { PgEffectSession } from '~/pg-core/effect/session.ts';\nimport { sql } from '~/sql/sql.ts';\n\nconst CURRENT_MIGRATION_TABLE_VERSION = 1;\n\ninterface UpgradeResult {\n\tnewDb?: boolean;\n\tprevVersion?: number;\n\tcurrentVersion?: number;\n}\n\nfunction getVersion(columns: string[]) {\n\tif (columns.includes('name')) return 1;\n\treturn 0;\n}\n\n/**\n * Map of upgrade functions. Each key is the version being upgraded FROM,\n * and the function upgrades the table to the next version.\n */\nconst upgradeFunctions: Record<\n\tnumber,\n\t<TEffectHKT extends QueryEffectHKTBase>(\n\t\tmigrationsSchema: string,\n\t\tmigrationsTable: string,\n\t\tsession: PgEffectSession<TEffectHKT>,\n\t\tlocalMigrations: MigrationMeta[],\n\t) => Effect.Effect<void, TEffectHKT['error'], TEffectHKT['context']>\n> = {\n\t/**\n\t * Upgrade from version 0 to version 1:\n\t * 1. Read all existing DB migrations\n\t * 2. Sort localMigrations ASC by millis and if the same - sort by name\n\t * 3. Match each DB row to a local migration\n\t * If multiple migrations share the same second, use hash matching as a tiebreaker\n\t * Not implemented for now -> If hash matching fails, fall back to serial id ordering\n\t * 5. Create extra column and backfill names for matched migrations\n\t */\n\t0: (migrationsSchema, migrationsTable, session, localMigrations) => {\n\t\treturn Effect.gen(function*() {\n\t\t\tconst table = sql`${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)}`;\n\n\t\t\t// 1. Read all existing DB migrations\n\t\t\t// Sort them by ids asc (order how they were applied)\n\t\t\tconst dbRows = yield* session.
|
|
1
|
+
{"version":3,"file":"effect-pg.cjs","names":["Effect","sql"],"sources":["../../src/up-migrations/effect-pg.ts"],"sourcesContent":["import { Effect } from 'effect';\nimport type { QueryEffectHKTBase } from '~/effect-core/query-effect.ts';\nimport type { MigrationMeta } from '~/migrator.ts';\nimport type { PgEffectSession } from '~/pg-core/effect/session.ts';\nimport { sql } from '~/sql/sql.ts';\n\nconst CURRENT_MIGRATION_TABLE_VERSION = 1;\n\ninterface UpgradeResult {\n\tnewDb?: boolean;\n\tprevVersion?: number;\n\tcurrentVersion?: number;\n}\n\nfunction getVersion(columns: string[]) {\n\tif (columns.includes('name')) return 1;\n\treturn 0;\n}\n\n/**\n * Map of upgrade functions. Each key is the version being upgraded FROM,\n * and the function upgrades the table to the next version.\n */\nconst upgradeFunctions: Record<\n\tnumber,\n\t<TEffectHKT extends QueryEffectHKTBase>(\n\t\tmigrationsSchema: string,\n\t\tmigrationsTable: string,\n\t\tsession: PgEffectSession<TEffectHKT>,\n\t\tlocalMigrations: MigrationMeta[],\n\t) => Effect.Effect<void, TEffectHKT['error'], TEffectHKT['context']>\n> = {\n\t/**\n\t * Upgrade from version 0 to version 1:\n\t * 1. Read all existing DB migrations\n\t * 2. Sort localMigrations ASC by millis and if the same - sort by name\n\t * 3. Match each DB row to a local migration\n\t * If multiple migrations share the same second, use hash matching as a tiebreaker\n\t * Not implemented for now -> If hash matching fails, fall back to serial id ordering\n\t * 5. Create extra column and backfill names for matched migrations\n\t */\n\t0: (migrationsSchema, migrationsTable, session, localMigrations) => {\n\t\treturn Effect.gen(function*() {\n\t\t\tconst table = sql`${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)}`;\n\n\t\t\t// 1. Read all existing DB migrations\n\t\t\t// Sort them by ids asc (order how they were applied)\n\t\t\tconst dbRows = yield* session.all<{ id: number; hash: string; created_at: string }>(\n\t\t\t\tsql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`,\n\t\t\t);\n\n\t\t\t// 2. Sort ASC by millis and if the same - sort by name\n\t\t\tlocalMigrations.sort((a, b) =>\n\t\t\t\ta.folderMillis !== b.folderMillis ? a.folderMillis - b.folderMillis : (a.name ?? '').localeCompare(b.name ?? '')\n\t\t\t);\n\n\t\t\tconst byMillis = new Map<number, MigrationMeta[]>();\n\t\t\tconst byHash = new Map<string, MigrationMeta>();\n\t\t\tfor (const lm of localMigrations) {\n\t\t\t\tif (!byMillis.has(lm.folderMillis)) {\n\t\t\t\t\tbyMillis.set(lm.folderMillis, []);\n\t\t\t\t}\n\t\t\t\tbyMillis.get(lm.folderMillis)!.push(lm);\n\t\t\t\tbyHash.set(lm.hash, lm);\n\t\t\t}\n\n\t\t\t// 3. Match each DB row to a local migration\n\t\t\t// Priority: millis -> hash\n\t\t\tconst toApply: { id: number; name: string }[] = [];\n\t\t\tlet unmatchedIds: number[] = [];\n\n\t\t\tfor (const dbRow of dbRows) {\n\t\t\t\tconst stringified = String(dbRow.created_at);\n\t\t\t\tconst millis = Number(stringified.substring(0, stringified.length - 3) + '000');\n\t\t\t\tconst candidates = byMillis.get(millis);\n\n\t\t\t\tlet matched: MigrationMeta | undefined;\n\n\t\t\t\tif (candidates && candidates.length === 1) {\n\t\t\t\t\tmatched = candidates[0];\n\t\t\t\t} else if (candidates && candidates.length > 1) {\n\t\t\t\t\tmatched = candidates.find((c) => c.hash === dbRow.hash);\n\t\t\t\t} else {\n\t\t\t\t\tmatched = byHash.get(dbRow.hash);\n\t\t\t\t}\n\n\t\t\t\tif (matched) toApply.push({ id: dbRow.id, name: matched.name });\n\t\t\t\telse unmatchedIds.push(dbRow.id);\n\t\t\t}\n\n\t\t\t// 4. Check for unmatched\n\t\t\t// Our assumption on this migration flow is that all DB entries should be matched to a local migration\n\t\t\t// (if same seconds - fallback to hash, if hash fails - corner case)\n\t\t\t// If there are unmatched entries, it means that the local environment is missing migrations that have been applied to the DB,\n\t\t\t// which can lead to inconsistencies and potential issues when running future migrations\n\t\t\tif (unmatchedIds.length > 0) {\n\t\t\t\tthrow Error(\n\t\t\t\t\t`While upgrading your database migrations table we found ${unmatchedIds.length} migrations (ids: ${\n\t\t\t\t\t\tunmatchedIds.join(', ')\n\t\t\t\t\t}) in the database that do not match any local migration. This means that some migrations were applied to the database but are missing from the local environment`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// 5. Create extra column and backfill names for matched migrations\n\t\t\tyield* session.transaction((tx) =>\n\t\t\t\tEffect.gen(function*() {\n\t\t\t\t\tyield* tx.execute(sql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${sql.identifier('name')} text`);\n\t\t\t\t\tyield* tx.execute(\n\t\t\t\t\t\tsql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${\n\t\t\t\t\t\t\tsql.identifier('applied_at')\n\t\t\t\t\t\t} timestamp with time zone DEFAULT now()`,\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const backfillEntry of toApply) {\n\t\t\t\t\t\tyield* tx.execute(\n\t\t\t\t\t\t\tsql`UPDATE ${table} SET ${sql.identifier('name')} = ${backfillEntry.name}, ${\n\t\t\t\t\t\t\t\tsql.identifier('applied_at')\n\t\t\t\t\t\t\t} = NULL WHERE ${sql.identifier('id')} = ${backfillEntry.id}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t});\n\t},\n};\n\n/**\n * Detects the current version of the migrations table schema and upgrades it if needed.\n *\n * Version 0: Original schema (id, hash, created_at)\n * Version 1: Extended schema (id, hash, created_at, name, applied_at)\n */\nexport const upgradeIfNeeded: <TEffectHKT extends QueryEffectHKTBase>(\n\tmigrationsSchema: string,\n\tmigrationsTable: string,\n\tsession: PgEffectSession<TEffectHKT>,\n\tlocalMigrations: MigrationMeta[],\n) => Effect.Effect<UpgradeResult, TEffectHKT['error'], TEffectHKT['context']> = Effect.fn('upgradeIfNeeded')(\n\tfunction*<TEffectHKT extends QueryEffectHKTBase>(\n\t\tmigrationsSchema: string,\n\t\tmigrationsTable: string,\n\t\tsession: PgEffectSession<TEffectHKT>,\n\t\tlocalMigrations: MigrationMeta[],\n\t) {\n\t\t// Check if the table exists at all\n\t\tconst result = yield* session.all(\n\t\t\tsql`SELECT 1 FROM information_schema.tables\n\t\t\tWHERE table_schema = ${migrationsSchema}\n\t\t\tAND table_name = ${migrationsTable}`,\n\t\t);\n\n\t\tif (result.length === 0) {\n\t\t\treturn { newDb: true };\n\t\t}\n\n\t\t// Table exists, check table shape\n\t\tconst rows = yield* session.all<{ schema: string; table_name: string; column_name: string; type: string }>(\n\t\t\tsql`SELECT\n\t\t\tn.nspname AS \"schema\",\n\t\t\tc.relname AS \"table_name\",\n\t\t\ta.attname AS \"column_name\",\n\t\t\tpg_catalog.format_type(a.atttypid, a.atttypmod) AS \"type\"\n\t\tFROM\n\t\t\tpg_catalog.pg_attribute a\n\t\t\tJOIN pg_catalog.pg_class c ON c.oid = a.attrelid\n\t\t\tJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n\t\tWHERE\n\t\t\ta.attnum > 0\n\t\t\tAND NOT a.attisdropped\n\t\t\tAND n.nspname = ${migrationsSchema}\n\t\t\tAND c.relname = ${migrationsTable}\n\t\tORDER BY a.attnum;`,\n\t\t);\n\n\t\tconst version = getVersion(rows.map((r) => r.column_name));\n\n\t\tfor (let v = version; v < CURRENT_MIGRATION_TABLE_VERSION; v++) {\n\t\t\tconst upgradeFn = upgradeFunctions[v];\n\t\t\tif (!upgradeFn) {\n\t\t\t\tthrow new Error(`No upgrade path from migration table version ${v} to ${v + 1}`);\n\t\t\t}\n\t\t\tyield* upgradeFn(migrationsSchema, migrationsTable, session, localMigrations);\n\t\t}\n\n\t\treturn { prevVersion: version, currentVersion: CURRENT_MIGRATION_TABLE_VERSION };\n\t},\n);\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MigrationMeta } from "../migrator.js";
|
|
2
|
-
import { PgEffectSession } from "../pg-core/effect/session.js";
|
|
3
2
|
import { Effect } from "effect";
|
|
3
|
+
import { PgEffectSession } from "../pg-core/effect/session.js";
|
|
4
4
|
import { QueryEffectHKTBase } from "../effect-core/query-effect.js";
|
|
5
5
|
|
|
6
6
|
//#region src/up-migrations/effect-pg.d.ts
|
|
@@ -14,7 +14,7 @@ function getVersion(columns) {
|
|
|
14
14
|
const upgradeFunctions = { 0: (migrationsSchema, migrationsTable, session, localMigrations) => {
|
|
15
15
|
return Effect.gen(function* () {
|
|
16
16
|
const table = sql`${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)}`;
|
|
17
|
-
const dbRows = yield* session.
|
|
17
|
+
const dbRows = yield* session.all(sql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`);
|
|
18
18
|
localMigrations.sort((a, b) => a.folderMillis !== b.folderMillis ? a.folderMillis - b.folderMillis : (a.name ?? "").localeCompare(b.name ?? ""));
|
|
19
19
|
const byMillis = /* @__PURE__ */ new Map();
|
|
20
20
|
const byHash = /* @__PURE__ */ new Map();
|
|
@@ -54,10 +54,10 @@ const upgradeFunctions = { 0: (migrationsSchema, migrationsTable, session, local
|
|
|
54
54
|
* Version 1: Extended schema (id, hash, created_at, name, applied_at)
|
|
55
55
|
*/
|
|
56
56
|
const upgradeIfNeeded = Effect.fn("upgradeIfNeeded")(function* (migrationsSchema, migrationsTable, session, localMigrations) {
|
|
57
|
-
if ((yield* session.
|
|
57
|
+
if ((yield* session.all(sql`SELECT 1 FROM information_schema.tables
|
|
58
58
|
WHERE table_schema = ${migrationsSchema}
|
|
59
59
|
AND table_name = ${migrationsTable}`)).length === 0) return { newDb: true };
|
|
60
|
-
const version = getVersion((yield* session.
|
|
60
|
+
const version = getVersion((yield* session.all(sql`SELECT
|
|
61
61
|
n.nspname AS "schema",
|
|
62
62
|
c.relname AS "table_name",
|
|
63
63
|
a.attname AS "column_name",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effect-pg.js","names":[],"sources":["../../src/up-migrations/effect-pg.ts"],"sourcesContent":["import { Effect } from 'effect';\nimport type { QueryEffectHKTBase } from '~/effect-core/query-effect.ts';\nimport type { MigrationMeta } from '~/migrator.ts';\nimport type { PgEffectSession } from '~/pg-core/effect/session.ts';\nimport { sql } from '~/sql/sql.ts';\n\nconst CURRENT_MIGRATION_TABLE_VERSION = 1;\n\ninterface UpgradeResult {\n\tnewDb?: boolean;\n\tprevVersion?: number;\n\tcurrentVersion?: number;\n}\n\nfunction getVersion(columns: string[]) {\n\tif (columns.includes('name')) return 1;\n\treturn 0;\n}\n\n/**\n * Map of upgrade functions. Each key is the version being upgraded FROM,\n * and the function upgrades the table to the next version.\n */\nconst upgradeFunctions: Record<\n\tnumber,\n\t<TEffectHKT extends QueryEffectHKTBase>(\n\t\tmigrationsSchema: string,\n\t\tmigrationsTable: string,\n\t\tsession: PgEffectSession<TEffectHKT>,\n\t\tlocalMigrations: MigrationMeta[],\n\t) => Effect.Effect<void, TEffectHKT['error'], TEffectHKT['context']>\n> = {\n\t/**\n\t * Upgrade from version 0 to version 1:\n\t * 1. Read all existing DB migrations\n\t * 2. Sort localMigrations ASC by millis and if the same - sort by name\n\t * 3. Match each DB row to a local migration\n\t * If multiple migrations share the same second, use hash matching as a tiebreaker\n\t * Not implemented for now -> If hash matching fails, fall back to serial id ordering\n\t * 5. Create extra column and backfill names for matched migrations\n\t */\n\t0: (migrationsSchema, migrationsTable, session, localMigrations) => {\n\t\treturn Effect.gen(function*() {\n\t\t\tconst table = sql`${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)}`;\n\n\t\t\t// 1. Read all existing DB migrations\n\t\t\t// Sort them by ids asc (order how they were applied)\n\t\t\tconst dbRows = yield* session.
|
|
1
|
+
{"version":3,"file":"effect-pg.js","names":[],"sources":["../../src/up-migrations/effect-pg.ts"],"sourcesContent":["import { Effect } from 'effect';\nimport type { QueryEffectHKTBase } from '~/effect-core/query-effect.ts';\nimport type { MigrationMeta } from '~/migrator.ts';\nimport type { PgEffectSession } from '~/pg-core/effect/session.ts';\nimport { sql } from '~/sql/sql.ts';\n\nconst CURRENT_MIGRATION_TABLE_VERSION = 1;\n\ninterface UpgradeResult {\n\tnewDb?: boolean;\n\tprevVersion?: number;\n\tcurrentVersion?: number;\n}\n\nfunction getVersion(columns: string[]) {\n\tif (columns.includes('name')) return 1;\n\treturn 0;\n}\n\n/**\n * Map of upgrade functions. Each key is the version being upgraded FROM,\n * and the function upgrades the table to the next version.\n */\nconst upgradeFunctions: Record<\n\tnumber,\n\t<TEffectHKT extends QueryEffectHKTBase>(\n\t\tmigrationsSchema: string,\n\t\tmigrationsTable: string,\n\t\tsession: PgEffectSession<TEffectHKT>,\n\t\tlocalMigrations: MigrationMeta[],\n\t) => Effect.Effect<void, TEffectHKT['error'], TEffectHKT['context']>\n> = {\n\t/**\n\t * Upgrade from version 0 to version 1:\n\t * 1. Read all existing DB migrations\n\t * 2. Sort localMigrations ASC by millis and if the same - sort by name\n\t * 3. Match each DB row to a local migration\n\t * If multiple migrations share the same second, use hash matching as a tiebreaker\n\t * Not implemented for now -> If hash matching fails, fall back to serial id ordering\n\t * 5. Create extra column and backfill names for matched migrations\n\t */\n\t0: (migrationsSchema, migrationsTable, session, localMigrations) => {\n\t\treturn Effect.gen(function*() {\n\t\t\tconst table = sql`${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)}`;\n\n\t\t\t// 1. Read all existing DB migrations\n\t\t\t// Sort them by ids asc (order how they were applied)\n\t\t\tconst dbRows = yield* session.all<{ id: number; hash: string; created_at: string }>(\n\t\t\t\tsql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`,\n\t\t\t);\n\n\t\t\t// 2. Sort ASC by millis and if the same - sort by name\n\t\t\tlocalMigrations.sort((a, b) =>\n\t\t\t\ta.folderMillis !== b.folderMillis ? a.folderMillis - b.folderMillis : (a.name ?? '').localeCompare(b.name ?? '')\n\t\t\t);\n\n\t\t\tconst byMillis = new Map<number, MigrationMeta[]>();\n\t\t\tconst byHash = new Map<string, MigrationMeta>();\n\t\t\tfor (const lm of localMigrations) {\n\t\t\t\tif (!byMillis.has(lm.folderMillis)) {\n\t\t\t\t\tbyMillis.set(lm.folderMillis, []);\n\t\t\t\t}\n\t\t\t\tbyMillis.get(lm.folderMillis)!.push(lm);\n\t\t\t\tbyHash.set(lm.hash, lm);\n\t\t\t}\n\n\t\t\t// 3. Match each DB row to a local migration\n\t\t\t// Priority: millis -> hash\n\t\t\tconst toApply: { id: number; name: string }[] = [];\n\t\t\tlet unmatchedIds: number[] = [];\n\n\t\t\tfor (const dbRow of dbRows) {\n\t\t\t\tconst stringified = String(dbRow.created_at);\n\t\t\t\tconst millis = Number(stringified.substring(0, stringified.length - 3) + '000');\n\t\t\t\tconst candidates = byMillis.get(millis);\n\n\t\t\t\tlet matched: MigrationMeta | undefined;\n\n\t\t\t\tif (candidates && candidates.length === 1) {\n\t\t\t\t\tmatched = candidates[0];\n\t\t\t\t} else if (candidates && candidates.length > 1) {\n\t\t\t\t\tmatched = candidates.find((c) => c.hash === dbRow.hash);\n\t\t\t\t} else {\n\t\t\t\t\tmatched = byHash.get(dbRow.hash);\n\t\t\t\t}\n\n\t\t\t\tif (matched) toApply.push({ id: dbRow.id, name: matched.name });\n\t\t\t\telse unmatchedIds.push(dbRow.id);\n\t\t\t}\n\n\t\t\t// 4. Check for unmatched\n\t\t\t// Our assumption on this migration flow is that all DB entries should be matched to a local migration\n\t\t\t// (if same seconds - fallback to hash, if hash fails - corner case)\n\t\t\t// If there are unmatched entries, it means that the local environment is missing migrations that have been applied to the DB,\n\t\t\t// which can lead to inconsistencies and potential issues when running future migrations\n\t\t\tif (unmatchedIds.length > 0) {\n\t\t\t\tthrow Error(\n\t\t\t\t\t`While upgrading your database migrations table we found ${unmatchedIds.length} migrations (ids: ${\n\t\t\t\t\t\tunmatchedIds.join(', ')\n\t\t\t\t\t}) in the database that do not match any local migration. This means that some migrations were applied to the database but are missing from the local environment`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// 5. Create extra column and backfill names for matched migrations\n\t\t\tyield* session.transaction((tx) =>\n\t\t\t\tEffect.gen(function*() {\n\t\t\t\t\tyield* tx.execute(sql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${sql.identifier('name')} text`);\n\t\t\t\t\tyield* tx.execute(\n\t\t\t\t\t\tsql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${\n\t\t\t\t\t\t\tsql.identifier('applied_at')\n\t\t\t\t\t\t} timestamp with time zone DEFAULT now()`,\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const backfillEntry of toApply) {\n\t\t\t\t\t\tyield* tx.execute(\n\t\t\t\t\t\t\tsql`UPDATE ${table} SET ${sql.identifier('name')} = ${backfillEntry.name}, ${\n\t\t\t\t\t\t\t\tsql.identifier('applied_at')\n\t\t\t\t\t\t\t} = NULL WHERE ${sql.identifier('id')} = ${backfillEntry.id}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t});\n\t},\n};\n\n/**\n * Detects the current version of the migrations table schema and upgrades it if needed.\n *\n * Version 0: Original schema (id, hash, created_at)\n * Version 1: Extended schema (id, hash, created_at, name, applied_at)\n */\nexport const upgradeIfNeeded: <TEffectHKT extends QueryEffectHKTBase>(\n\tmigrationsSchema: string,\n\tmigrationsTable: string,\n\tsession: PgEffectSession<TEffectHKT>,\n\tlocalMigrations: MigrationMeta[],\n) => Effect.Effect<UpgradeResult, TEffectHKT['error'], TEffectHKT['context']> = Effect.fn('upgradeIfNeeded')(\n\tfunction*<TEffectHKT extends QueryEffectHKTBase>(\n\t\tmigrationsSchema: string,\n\t\tmigrationsTable: string,\n\t\tsession: PgEffectSession<TEffectHKT>,\n\t\tlocalMigrations: MigrationMeta[],\n\t) {\n\t\t// Check if the table exists at all\n\t\tconst result = yield* session.all(\n\t\t\tsql`SELECT 1 FROM information_schema.tables\n\t\t\tWHERE table_schema = ${migrationsSchema}\n\t\t\tAND table_name = ${migrationsTable}`,\n\t\t);\n\n\t\tif (result.length === 0) {\n\t\t\treturn { newDb: true };\n\t\t}\n\n\t\t// Table exists, check table shape\n\t\tconst rows = yield* session.all<{ schema: string; table_name: string; column_name: string; type: string }>(\n\t\t\tsql`SELECT\n\t\t\tn.nspname AS \"schema\",\n\t\t\tc.relname AS \"table_name\",\n\t\t\ta.attname AS \"column_name\",\n\t\t\tpg_catalog.format_type(a.atttypid, a.atttypmod) AS \"type\"\n\t\tFROM\n\t\t\tpg_catalog.pg_attribute a\n\t\t\tJOIN pg_catalog.pg_class c ON c.oid = a.attrelid\n\t\t\tJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n\t\tWHERE\n\t\t\ta.attnum > 0\n\t\t\tAND NOT a.attisdropped\n\t\t\tAND n.nspname = ${migrationsSchema}\n\t\t\tAND c.relname = ${migrationsTable}\n\t\tORDER BY a.attnum;`,\n\t\t);\n\n\t\tconst version = getVersion(rows.map((r) => r.column_name));\n\n\t\tfor (let v = version; v < CURRENT_MIGRATION_TABLE_VERSION; v++) {\n\t\t\tconst upgradeFn = upgradeFunctions[v];\n\t\t\tif (!upgradeFn) {\n\t\t\t\tthrow new Error(`No upgrade path from migration table version ${v} to ${v + 1}`);\n\t\t\t}\n\t\t\tyield* upgradeFn(migrationsSchema, migrationsTable, session, localMigrations);\n\t\t}\n\n\t\treturn { prevVersion: version, currentVersion: CURRENT_MIGRATION_TABLE_VERSION };\n\t},\n);\n"],"mappings":"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"}
|
package/up-migrations/pg.cjs
CHANGED
|
@@ -8,13 +8,18 @@ function getVersion(columns) {
|
|
|
8
8
|
if (columns.includes("name")) return 1;
|
|
9
9
|
return 0;
|
|
10
10
|
}
|
|
11
|
+
async function execute(session, sql) {
|
|
12
|
+
const result = await session.execute(sql);
|
|
13
|
+
if ("rows" in result) return result.rows;
|
|
14
|
+
return result;
|
|
15
|
+
}
|
|
11
16
|
/**
|
|
12
17
|
* Map of upgrade functions. Each key is the version being upgraded FROM,
|
|
13
18
|
* and the function upgrades the table to the next version.
|
|
14
19
|
*/
|
|
15
20
|
const upgradeFunctions = { 0: async (migrationsSchema, migrationsTable, db, localMigrations, mode) => {
|
|
16
21
|
const table = __sql_sql_ts.sql`${__sql_sql_ts.sql.identifier(migrationsSchema)}.${__sql_sql_ts.sql.identifier(migrationsTable)}`;
|
|
17
|
-
const dbRows = await db.session
|
|
22
|
+
const dbRows = await execute(db.session, __sql_sql_ts.sql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`);
|
|
18
23
|
localMigrations.sort((a, b) => a.folderMillis !== b.folderMillis ? a.folderMillis - b.folderMillis : (a.name ?? "").localeCompare(b.name ?? ""));
|
|
19
24
|
const byMillis = /* @__PURE__ */ new Map();
|
|
20
25
|
const byHash = /* @__PURE__ */ new Map();
|
|
@@ -57,10 +62,10 @@ const upgradeFunctions = { 0: async (migrationsSchema, migrationsTable, db, loca
|
|
|
57
62
|
* Version 1: Extended schema (id, hash, created_at, name, applied_at)
|
|
58
63
|
*/
|
|
59
64
|
async function upgradeIfNeeded(migrationsSchema, migrationsTable, db, localMigrations, mode = "transaction") {
|
|
60
|
-
if ((await db.session
|
|
65
|
+
if ((await execute(db.session, __sql_sql_ts.sql`SELECT 1 FROM information_schema.tables
|
|
61
66
|
WHERE table_schema = ${migrationsSchema}
|
|
62
67
|
AND table_name = ${migrationsTable}`)).length === 0) return { newDb: true };
|
|
63
|
-
let version = getVersion((await db.session
|
|
68
|
+
let version = getVersion((await execute(db.session, __sql_sql_ts.sql`SELECT
|
|
64
69
|
n.nspname AS "schema",
|
|
65
70
|
c.relname AS "table_name",
|
|
66
71
|
a.attname AS "column_name",
|
package/up-migrations/pg.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pg.cjs","names":["sql"],"sources":["../../src/up-migrations/pg.ts"],"sourcesContent":["import type { BatchItem } from '~/batch.ts';\nimport type { MigrationMeta } from '~/migrator.ts';\nimport type { NeonHttpDatabase } from '~/neon-http/driver.ts';\nimport type { PgAsyncDatabase } from '~/pg-core/async/db.ts';\nimport type { PgAsyncTransaction } from '~/pg-core/async/session.ts';\nimport type { PgQueryResultHKT } from '~/pg-core/session.ts';\nimport { type SQL, sql } from '~/sql/sql.ts';\n\nconst CURRENT_MIGRATION_TABLE_VERSION = 1;\n\ninterface UpgradeResult {\n\tnewDb?: boolean;\n\tprevVersion?: number;\n\tcurrentVersion?: number;\n}\n\nfunction getVersion(columns: string[]) {\n\tif (columns.includes('name')) return 1;\n\treturn 0;\n}\n\n/**\n * Map of upgrade functions. Each key is the version being upgraded FROM,\n * and the function upgrades the table to the next version.\n */\nconst upgradeFunctions: Record<\n\tnumber,\n\t(\n\t\tmigrationsSchema: string,\n\t\tmigrationsTable: string,\n\t\tdb: PgAsyncDatabase<PgQueryResultHKT, any>,\n\t\tlocalMigrations: MigrationMeta[],\n\t\tmode: 'transaction' | 'execute' | 'batch',\n\t) => Promise<void>\n> = {\n\t/**\n\t * Upgrade from version 0 to version 1:\n\t * 1. Read all existing DB migrations\n\t * 2. Sort localMigrations ASC by millis and if the same - sort by name\n\t * 3. Match each DB row to a local migration\n\t * If multiple migrations share the same second, use hash matching as a tiebreaker\n\t * Not implemented for now -> If hash matching fails, fall back to serial id ordering\n\t * 5. Create extra column and backfill names for matched migrations\n\t */\n\t0: async (migrationsSchema, migrationsTable, db, localMigrations, mode) => {\n\t\tconst table = sql`${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)}`;\n\n\t\t// 1. Read all existing DB migrations\n\t\t// Sort them by ids asc (order how they were applied)\n\t\tconst dbRows = await db.session.objects<{ id: number; hash: string; created_at: string }>(\n\t\t\tsql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`,\n\t\t);\n\n\t\t// 2. Sort ASC by millis and if the same - sort by name\n\t\tlocalMigrations.sort((a, b) =>\n\t\t\ta.folderMillis !== b.folderMillis ? a.folderMillis - b.folderMillis : (a.name ?? '').localeCompare(b.name ?? '')\n\t\t);\n\n\t\tconst byMillis = new Map<number, MigrationMeta[]>();\n\t\tconst byHash = new Map<string, MigrationMeta>();\n\t\tfor (const lm of localMigrations) {\n\t\t\tif (!byMillis.has(lm.folderMillis)) {\n\t\t\t\tbyMillis.set(lm.folderMillis, []);\n\t\t\t}\n\t\t\tbyMillis.get(lm.folderMillis)!.push(lm);\n\t\t\tbyHash.set(lm.hash, lm);\n\t\t}\n\n\t\t// \t3. Match each DB row to a local migration\n\t\t// \tPriority: millis -> hash\n\t\tconst toApply: { id: number; name: string }[] = [];\n\t\tlet unmatchedIds: number[] = [];\n\n\t\tfor (const dbRow of dbRows) {\n\t\t\tconst stringified = String(dbRow.created_at);\n\t\t\tconst millis = Number(stringified.substring(0, stringified.length - 3) + '000');\n\t\t\tconst candidates = byMillis.get(millis);\n\n\t\t\tlet matched: MigrationMeta | undefined;\n\n\t\t\tif (candidates && candidates.length === 1) {\n\t\t\t\tmatched = candidates[0];\n\t\t\t} else if (candidates && candidates.length > 1) {\n\t\t\t\tmatched = candidates.find((c) => c.hash === dbRow.hash);\n\t\t\t} else {\n\t\t\t\tmatched = byHash.get(dbRow.hash);\n\t\t\t}\n\n\t\t\tif (matched) toApply.push({ id: dbRow.id, name: matched.name });\n\t\t\telse unmatchedIds.push(dbRow.id);\n\t\t}\n\n\t\t// 4. Check for unmatched\n\t\t// Our assumption on this migration flow is that all DB entries should be matched to a local migration\n\t\t// (if same seconds - fallback to hash, if hash fails - corner case)\n\t\t// If there are unmatched entries, it means that the local environment is missing migrations that have been applied to the DB,\n\t\t// which can lead to inconsistencies and potential issues when running future migrations\n\t\tif (unmatchedIds.length > 0) {\n\t\t\tthrow Error(\n\t\t\t\t`While upgrading your database migrations table we found ${unmatchedIds.length} migrations (ids: ${\n\t\t\t\t\tunmatchedIds.join(', ')\n\t\t\t\t}) in the database that do not match any local migration. This means that some migrations were applied to the database but are missing from the local environment`,\n\t\t\t);\n\t\t}\n\n\t\t// 5. Create extra column and backfill names for matched migrations\n\t\tconst sqls: SQL[] = [\n\t\t\tsql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${sql.identifier('name')} text`,\n\t\t\tsql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${\n\t\t\t\tsql.identifier('applied_at')\n\t\t\t} timestamp with time zone DEFAULT now()`,\n\t\t];\n\t\tfor (const { id, name } of toApply) {\n\t\t\tsqls.push(\n\t\t\t\tsql`UPDATE ${table} SET ${sql.identifier('name')} = ${name}, ${sql.identifier('applied_at')} = NULL WHERE ${\n\t\t\t\t\tsql.identifier('id')\n\t\t\t\t} = ${id}`,\n\t\t\t);\n\t\t}\n\n\t\t// check if http\n\t\t// execute -> proxy, http drivers\n\t\t// transaction -> other\n\t\tif (mode === 'transaction') {\n\t\t\tawait db.transaction(async (tx: PgAsyncTransaction<any, any>) => {\n\t\t\t\tfor (const sql of sqls) {\n\t\t\t\t\tawait tx.execute(sql);\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (mode === 'batch') {\n\t\t\tconst database = db as NeonHttpDatabase;\n\n\t\t\tawait database.batch(\n\t\t\t\tsqls.map((s) => database.execute(s)) as unknown as [BatchItem<'pg'>, ...BatchItem<'pg'>[]],\n\t\t\t);\n\t\t} else {\n\t\t\tfor (const sql of sqls) {\n\t\t\t\tawait db.execute(sql);\n\t\t\t}\n\t\t}\n\t},\n};\n\n/**\n * Detects the current version of the migrations table schema and upgrades it if needed.\n *\n * Version 0: Original schema (id, hash, created_at)\n * Version 1: Extended schema (id, hash, created_at, name, applied_at)\n */\nexport async function upgradeIfNeeded(\n\tmigrationsSchema: string,\n\tmigrationsTable: string,\n\tdb: PgAsyncDatabase<PgQueryResultHKT, any>,\n\tlocalMigrations: MigrationMeta[],\n\tmode: 'transaction' | 'execute' | 'batch' = 'transaction',\n): Promise<UpgradeResult> {\n\t// Check if the table exists at all\n\tconst result = await db.session.objects<{ '1': 1 }>(\n\t\tsql`SELECT 1 FROM information_schema.tables\n\t\t\tWHERE table_schema = ${migrationsSchema}\n\t\t\tAND table_name = ${migrationsTable}`,\n\t);\n\n\tif (result.length === 0) {\n\t\treturn { newDb: true };\n\t}\n\n\t// Table exists, check table shape\n\tconst rows = await db.session.objects<\n\t\t{ schema: string; table_name: string; column_name: string; type: string }\n\t>(\n\t\tsql`SELECT\n\t\t\tn.nspname AS \"schema\",\n\t\t\tc.relname AS \"table_name\",\n\t\t\ta.attname AS \"column_name\",\n\t\t\tpg_catalog.format_type(a.atttypid, a.atttypmod) AS \"type\"\n\t\tFROM\n\t\t\tpg_catalog.pg_attribute a\n\t\t\tJOIN pg_catalog.pg_class c ON c.oid = a.attrelid\n\t\t\tJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n\t\tWHERE\n\t\t\ta.attnum > 0\n\t\t\tAND NOT a.attisdropped\n\t\t\tAND n.nspname = ${migrationsSchema}\n\t\t\tAND c.relname = ${migrationsTable}\n\t\tORDER BY a.attnum;`,\n\t);\n\n\tlet version = getVersion(rows.map((r) => r.column_name));\n\n\tfor (let v = version; v < CURRENT_MIGRATION_TABLE_VERSION; v++) {\n\t\tconst upgradeFn = upgradeFunctions[v];\n\t\tif (!upgradeFn) {\n\t\t\tthrow new Error(`No upgrade path from migration table version ${v} to ${v + 1}`);\n\t\t}\n\t\tawait upgradeFn(migrationsSchema, migrationsTable, db, localMigrations, mode);\n\t}\n\n\treturn { prevVersion: version, currentVersion: CURRENT_MIGRATION_TABLE_VERSION };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pg.cjs","names":["sql"],"sources":["../../src/up-migrations/pg.ts"],"sourcesContent":["import type { TablesRelationalConfig } from '~/_relations.ts';\nimport type { BatchItem } from '~/batch.ts';\nimport type { MigrationMeta } from '~/migrator.ts';\nimport type { NeonHttpDatabase } from '~/neon-http/driver.ts';\nimport type { NeonHttpSession } from '~/neon-http/session.ts';\nimport type { PgAsyncDatabase } from '~/pg-core/async/db.ts';\nimport type { PgAsyncSession, PgAsyncTransaction } from '~/pg-core/async/session.ts';\nimport type { PgQueryResultHKT } from '~/pg-core/session.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport { type SQL, sql } from '~/sql/sql.ts';\nimport type { XataHttpSession } from '~/xata-http/session.ts';\n\nconst CURRENT_MIGRATION_TABLE_VERSION = 1;\n\ninterface UpgradeResult {\n\tnewDb?: boolean;\n\tprevVersion?: number;\n\tcurrentVersion?: number;\n}\n\nfunction getVersion(columns: string[]) {\n\tif (columns.includes('name')) return 1;\n\treturn 0;\n}\n\n// postgres.js returns array of objects\n// pg-proxy returns arrays of objects\n// node-postgres returns { rows: array of objects }\nasync function execute<T extends any[]>(\n\tsession:\n\t\t| PgAsyncSession\n\t\t| NeonHttpSession<Record<string, unknown>, AnyRelations, TablesRelationalConfig>\n\t\t| XataHttpSession<Record<string, unknown>, AnyRelations, TablesRelationalConfig>,\n\tsql: SQL,\n): Promise<T> {\n\tconst result: { rows: T } | T = await session.execute(sql);\n\tif ('rows' in result) return result.rows;\n\treturn result;\n}\n\n/**\n * Map of upgrade functions. Each key is the version being upgraded FROM,\n * and the function upgrades the table to the next version.\n */\nconst upgradeFunctions: Record<\n\tnumber,\n\t(\n\t\tmigrationsSchema: string,\n\t\tmigrationsTable: string,\n\t\tdb: PgAsyncDatabase<PgQueryResultHKT, any, any, any>,\n\t\tlocalMigrations: MigrationMeta[],\n\t\tmode: 'transaction' | 'execute' | 'batch',\n\t) => Promise<void>\n> = {\n\t/**\n\t * Upgrade from version 0 to version 1:\n\t * 1. Read all existing DB migrations\n\t * 2. Sort localMigrations ASC by millis and if the same - sort by name\n\t * 3. Match each DB row to a local migration\n\t * If multiple migrations share the same second, use hash matching as a tiebreaker\n\t * Not implemented for now -> If hash matching fails, fall back to serial id ordering\n\t * 5. Create extra column and backfill names for matched migrations\n\t */\n\t0: async (migrationsSchema, migrationsTable, db, localMigrations, mode) => {\n\t\tconst table = sql`${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)}`;\n\n\t\t// 1. Read all existing DB migrations\n\t\t// Sort them by ids asc (order how they were applied)\n\t\tconst dbRows = await execute<{ id: number; hash: string; created_at: string }[]>(\n\t\t\tdb.session,\n\t\t\tsql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`,\n\t\t);\n\n\t\t// 2. Sort ASC by millis and if the same - sort by name\n\t\tlocalMigrations.sort((a, b) =>\n\t\t\ta.folderMillis !== b.folderMillis ? a.folderMillis - b.folderMillis : (a.name ?? '').localeCompare(b.name ?? '')\n\t\t);\n\n\t\tconst byMillis = new Map<number, MigrationMeta[]>();\n\t\tconst byHash = new Map<string, MigrationMeta>();\n\t\tfor (const lm of localMigrations) {\n\t\t\tif (!byMillis.has(lm.folderMillis)) {\n\t\t\t\tbyMillis.set(lm.folderMillis, []);\n\t\t\t}\n\t\t\tbyMillis.get(lm.folderMillis)!.push(lm);\n\t\t\tbyHash.set(lm.hash, lm);\n\t\t}\n\n\t\t// \t3. Match each DB row to a local migration\n\t\t// \tPriority: millis -> hash\n\t\tconst toApply: { id: number; name: string }[] = [];\n\t\tlet unmatchedIds: number[] = [];\n\n\t\tfor (const dbRow of dbRows) {\n\t\t\tconst stringified = String(dbRow.created_at);\n\t\t\tconst millis = Number(stringified.substring(0, stringified.length - 3) + '000');\n\t\t\tconst candidates = byMillis.get(millis);\n\n\t\t\tlet matched: MigrationMeta | undefined;\n\n\t\t\tif (candidates && candidates.length === 1) {\n\t\t\t\tmatched = candidates[0];\n\t\t\t} else if (candidates && candidates.length > 1) {\n\t\t\t\tmatched = candidates.find((c) => c.hash === dbRow.hash);\n\t\t\t} else {\n\t\t\t\tmatched = byHash.get(dbRow.hash);\n\t\t\t}\n\n\t\t\tif (matched) toApply.push({ id: dbRow.id, name: matched.name });\n\t\t\telse unmatchedIds.push(dbRow.id);\n\t\t}\n\n\t\t// 4. Check for unmatched\n\t\t// Our assumption on this migration flow is that all DB entries should be matched to a local migration\n\t\t// (if same seconds - fallback to hash, if hash fails - corner case)\n\t\t// If there are unmatched entries, it means that the local environment is missing migrations that have been applied to the DB,\n\t\t// which can lead to inconsistencies and potential issues when running future migrations\n\t\tif (unmatchedIds.length > 0) {\n\t\t\tthrow Error(\n\t\t\t\t`While upgrading your database migrations table we found ${unmatchedIds.length} migrations (ids: ${\n\t\t\t\t\tunmatchedIds.join(', ')\n\t\t\t\t}) in the database that do not match any local migration. This means that some migrations were applied to the database but are missing from the local environment`,\n\t\t\t);\n\t\t}\n\n\t\t// 5. Create extra column and backfill names for matched migrations\n\t\tconst sqls: SQL[] = [\n\t\t\tsql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${sql.identifier('name')} text`,\n\t\t\tsql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${\n\t\t\t\tsql.identifier('applied_at')\n\t\t\t} timestamp with time zone DEFAULT now()`,\n\t\t];\n\t\tfor (const { id, name } of toApply) {\n\t\t\tsqls.push(\n\t\t\t\tsql`UPDATE ${table} SET ${sql.identifier('name')} = ${name}, ${sql.identifier('applied_at')} = NULL WHERE ${\n\t\t\t\t\tsql.identifier('id')\n\t\t\t\t} = ${id}`,\n\t\t\t);\n\t\t}\n\n\t\t// check if http\n\t\t// execute -> proxy, http drivers\n\t\t// transaction -> other\n\t\tif (mode === 'transaction') {\n\t\t\tawait db.transaction(async (tx: PgAsyncTransaction<any, any, any>) => {\n\t\t\t\tfor (const sql of sqls) {\n\t\t\t\t\tawait tx.execute(sql);\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (mode === 'batch') {\n\t\t\tconst database = db as NeonHttpDatabase;\n\n\t\t\tawait database.batch(\n\t\t\t\tsqls.map((s) => database.execute(s)) as unknown as [BatchItem<'pg'>, ...BatchItem<'pg'>[]],\n\t\t\t);\n\t\t} else {\n\t\t\tfor (const sql of sqls) {\n\t\t\t\tawait db.execute(sql);\n\t\t\t}\n\t\t}\n\t},\n};\n\n/**\n * Detects the current version of the migrations table schema and upgrades it if needed.\n *\n * Version 0: Original schema (id, hash, created_at)\n * Version 1: Extended schema (id, hash, created_at, name, applied_at)\n */\nexport async function upgradeIfNeeded(\n\tmigrationsSchema: string,\n\tmigrationsTable: string,\n\tdb: PgAsyncDatabase<PgQueryResultHKT, any, any, any>,\n\tlocalMigrations: MigrationMeta[],\n\tmode: 'transaction' | 'execute' | 'batch' = 'transaction',\n): Promise<UpgradeResult> {\n\t// Check if the table exists at all\n\tconst result = await execute<{ '1': 1 }[]>(\n\t\tdb.session,\n\t\tsql`SELECT 1 FROM information_schema.tables\n\t\t\tWHERE table_schema = ${migrationsSchema}\n\t\t\tAND table_name = ${migrationsTable}`,\n\t);\n\n\tif (result.length === 0) {\n\t\treturn { newDb: true };\n\t}\n\n\t// Table exists, check table shape\n\tconst rows = await execute<\n\t\t{ schema: string; table_name: string; column_name: string; type: string }[]\n\t>(\n\t\tdb.session,\n\t\tsql`SELECT\n\t\t\tn.nspname AS \"schema\",\n\t\t\tc.relname AS \"table_name\",\n\t\t\ta.attname AS \"column_name\",\n\t\t\tpg_catalog.format_type(a.atttypid, a.atttypmod) AS \"type\"\n\t\tFROM\n\t\t\tpg_catalog.pg_attribute a\n\t\t\tJOIN pg_catalog.pg_class c ON c.oid = a.attrelid\n\t\t\tJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n\t\tWHERE\n\t\t\ta.attnum > 0\n\t\t\tAND NOT a.attisdropped\n\t\t\tAND n.nspname = ${migrationsSchema}\n\t\t\tAND c.relname = ${migrationsTable}\n\t\tORDER BY a.attnum;`,\n\t);\n\n\tlet version = getVersion(rows.map((r) => r.column_name));\n\n\tfor (let v = version; v < CURRENT_MIGRATION_TABLE_VERSION; v++) {\n\t\tconst upgradeFn = upgradeFunctions[v];\n\t\tif (!upgradeFn) {\n\t\t\tthrow new Error(`No upgrade path from migration table version ${v} to ${v + 1}`);\n\t\t}\n\t\tawait upgradeFn(migrationsSchema, migrationsTable, db, localMigrations, mode);\n\t}\n\n\treturn { prevVersion: version, currentVersion: CURRENT_MIGRATION_TABLE_VERSION };\n}\n"],"mappings":"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"}
|
package/up-migrations/pg.d.cts
CHANGED
|
@@ -14,7 +14,7 @@ interface UpgradeResult {
|
|
|
14
14
|
* Version 0: Original schema (id, hash, created_at)
|
|
15
15
|
* Version 1: Extended schema (id, hash, created_at, name, applied_at)
|
|
16
16
|
*/
|
|
17
|
-
declare function upgradeIfNeeded(migrationsSchema: string, migrationsTable: string, db: PgAsyncDatabase<PgQueryResultHKT, any>, localMigrations: MigrationMeta[], mode?: 'transaction' | 'execute' | 'batch'): Promise<UpgradeResult>;
|
|
17
|
+
declare function upgradeIfNeeded(migrationsSchema: string, migrationsTable: string, db: PgAsyncDatabase<PgQueryResultHKT, any, any, any>, localMigrations: MigrationMeta[], mode?: 'transaction' | 'execute' | 'batch'): Promise<UpgradeResult>;
|
|
18
18
|
//#endregion
|
|
19
19
|
export { upgradeIfNeeded };
|
|
20
20
|
//# sourceMappingURL=pg.d.cts.map
|
package/up-migrations/pg.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { MigrationMeta } from "../migrator.js";
|
|
2
1
|
import { PgAsyncDatabase } from "../pg-core/async/db.js";
|
|
2
|
+
import { MigrationMeta } from "../migrator.js";
|
|
3
3
|
import { PgQueryResultHKT } from "../pg-core/session.js";
|
|
4
4
|
|
|
5
5
|
//#region src/up-migrations/pg.d.ts
|
|
@@ -14,7 +14,7 @@ interface UpgradeResult {
|
|
|
14
14
|
* Version 0: Original schema (id, hash, created_at)
|
|
15
15
|
* Version 1: Extended schema (id, hash, created_at, name, applied_at)
|
|
16
16
|
*/
|
|
17
|
-
declare function upgradeIfNeeded(migrationsSchema: string, migrationsTable: string, db: PgAsyncDatabase<PgQueryResultHKT, any>, localMigrations: MigrationMeta[], mode?: 'transaction' | 'execute' | 'batch'): Promise<UpgradeResult>;
|
|
17
|
+
declare function upgradeIfNeeded(migrationsSchema: string, migrationsTable: string, db: PgAsyncDatabase<PgQueryResultHKT, any, any, any>, localMigrations: MigrationMeta[], mode?: 'transaction' | 'execute' | 'batch'): Promise<UpgradeResult>;
|
|
18
18
|
//#endregion
|
|
19
19
|
export { upgradeIfNeeded };
|
|
20
20
|
//# sourceMappingURL=pg.d.ts.map
|
package/up-migrations/pg.js
CHANGED
|
@@ -6,13 +6,18 @@ function getVersion(columns) {
|
|
|
6
6
|
if (columns.includes("name")) return 1;
|
|
7
7
|
return 0;
|
|
8
8
|
}
|
|
9
|
+
async function execute(session, sql) {
|
|
10
|
+
const result = await session.execute(sql);
|
|
11
|
+
if ("rows" in result) return result.rows;
|
|
12
|
+
return result;
|
|
13
|
+
}
|
|
9
14
|
/**
|
|
10
15
|
* Map of upgrade functions. Each key is the version being upgraded FROM,
|
|
11
16
|
* and the function upgrades the table to the next version.
|
|
12
17
|
*/
|
|
13
18
|
const upgradeFunctions = { 0: async (migrationsSchema, migrationsTable, db, localMigrations, mode) => {
|
|
14
19
|
const table = sql`${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)}`;
|
|
15
|
-
const dbRows = await db.session
|
|
20
|
+
const dbRows = await execute(db.session, sql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`);
|
|
16
21
|
localMigrations.sort((a, b) => a.folderMillis !== b.folderMillis ? a.folderMillis - b.folderMillis : (a.name ?? "").localeCompare(b.name ?? ""));
|
|
17
22
|
const byMillis = /* @__PURE__ */ new Map();
|
|
18
23
|
const byHash = /* @__PURE__ */ new Map();
|
|
@@ -55,10 +60,10 @@ const upgradeFunctions = { 0: async (migrationsSchema, migrationsTable, db, loca
|
|
|
55
60
|
* Version 1: Extended schema (id, hash, created_at, name, applied_at)
|
|
56
61
|
*/
|
|
57
62
|
async function upgradeIfNeeded(migrationsSchema, migrationsTable, db, localMigrations, mode = "transaction") {
|
|
58
|
-
if ((await db.session
|
|
63
|
+
if ((await execute(db.session, sql`SELECT 1 FROM information_schema.tables
|
|
59
64
|
WHERE table_schema = ${migrationsSchema}
|
|
60
65
|
AND table_name = ${migrationsTable}`)).length === 0) return { newDb: true };
|
|
61
|
-
let version = getVersion((await db.session
|
|
66
|
+
let version = getVersion((await execute(db.session, sql`SELECT
|
|
62
67
|
n.nspname AS "schema",
|
|
63
68
|
c.relname AS "table_name",
|
|
64
69
|
a.attname AS "column_name",
|
package/up-migrations/pg.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pg.js","names":[],"sources":["../../src/up-migrations/pg.ts"],"sourcesContent":["import type { BatchItem } from '~/batch.ts';\nimport type { MigrationMeta } from '~/migrator.ts';\nimport type { NeonHttpDatabase } from '~/neon-http/driver.ts';\nimport type { PgAsyncDatabase } from '~/pg-core/async/db.ts';\nimport type { PgAsyncTransaction } from '~/pg-core/async/session.ts';\nimport type { PgQueryResultHKT } from '~/pg-core/session.ts';\nimport { type SQL, sql } from '~/sql/sql.ts';\n\nconst CURRENT_MIGRATION_TABLE_VERSION = 1;\n\ninterface UpgradeResult {\n\tnewDb?: boolean;\n\tprevVersion?: number;\n\tcurrentVersion?: number;\n}\n\nfunction getVersion(columns: string[]) {\n\tif (columns.includes('name')) return 1;\n\treturn 0;\n}\n\n/**\n * Map of upgrade functions. Each key is the version being upgraded FROM,\n * and the function upgrades the table to the next version.\n */\nconst upgradeFunctions: Record<\n\tnumber,\n\t(\n\t\tmigrationsSchema: string,\n\t\tmigrationsTable: string,\n\t\tdb: PgAsyncDatabase<PgQueryResultHKT, any>,\n\t\tlocalMigrations: MigrationMeta[],\n\t\tmode: 'transaction' | 'execute' | 'batch',\n\t) => Promise<void>\n> = {\n\t/**\n\t * Upgrade from version 0 to version 1:\n\t * 1. Read all existing DB migrations\n\t * 2. Sort localMigrations ASC by millis and if the same - sort by name\n\t * 3. Match each DB row to a local migration\n\t * If multiple migrations share the same second, use hash matching as a tiebreaker\n\t * Not implemented for now -> If hash matching fails, fall back to serial id ordering\n\t * 5. Create extra column and backfill names for matched migrations\n\t */\n\t0: async (migrationsSchema, migrationsTable, db, localMigrations, mode) => {\n\t\tconst table = sql`${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)}`;\n\n\t\t// 1. Read all existing DB migrations\n\t\t// Sort them by ids asc (order how they were applied)\n\t\tconst dbRows = await db.session.objects<{ id: number; hash: string; created_at: string }>(\n\t\t\tsql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`,\n\t\t);\n\n\t\t// 2. Sort ASC by millis and if the same - sort by name\n\t\tlocalMigrations.sort((a, b) =>\n\t\t\ta.folderMillis !== b.folderMillis ? a.folderMillis - b.folderMillis : (a.name ?? '').localeCompare(b.name ?? '')\n\t\t);\n\n\t\tconst byMillis = new Map<number, MigrationMeta[]>();\n\t\tconst byHash = new Map<string, MigrationMeta>();\n\t\tfor (const lm of localMigrations) {\n\t\t\tif (!byMillis.has(lm.folderMillis)) {\n\t\t\t\tbyMillis.set(lm.folderMillis, []);\n\t\t\t}\n\t\t\tbyMillis.get(lm.folderMillis)!.push(lm);\n\t\t\tbyHash.set(lm.hash, lm);\n\t\t}\n\n\t\t// \t3. Match each DB row to a local migration\n\t\t// \tPriority: millis -> hash\n\t\tconst toApply: { id: number; name: string }[] = [];\n\t\tlet unmatchedIds: number[] = [];\n\n\t\tfor (const dbRow of dbRows) {\n\t\t\tconst stringified = String(dbRow.created_at);\n\t\t\tconst millis = Number(stringified.substring(0, stringified.length - 3) + '000');\n\t\t\tconst candidates = byMillis.get(millis);\n\n\t\t\tlet matched: MigrationMeta | undefined;\n\n\t\t\tif (candidates && candidates.length === 1) {\n\t\t\t\tmatched = candidates[0];\n\t\t\t} else if (candidates && candidates.length > 1) {\n\t\t\t\tmatched = candidates.find((c) => c.hash === dbRow.hash);\n\t\t\t} else {\n\t\t\t\tmatched = byHash.get(dbRow.hash);\n\t\t\t}\n\n\t\t\tif (matched) toApply.push({ id: dbRow.id, name: matched.name });\n\t\t\telse unmatchedIds.push(dbRow.id);\n\t\t}\n\n\t\t// 4. Check for unmatched\n\t\t// Our assumption on this migration flow is that all DB entries should be matched to a local migration\n\t\t// (if same seconds - fallback to hash, if hash fails - corner case)\n\t\t// If there are unmatched entries, it means that the local environment is missing migrations that have been applied to the DB,\n\t\t// which can lead to inconsistencies and potential issues when running future migrations\n\t\tif (unmatchedIds.length > 0) {\n\t\t\tthrow Error(\n\t\t\t\t`While upgrading your database migrations table we found ${unmatchedIds.length} migrations (ids: ${\n\t\t\t\t\tunmatchedIds.join(', ')\n\t\t\t\t}) in the database that do not match any local migration. This means that some migrations were applied to the database but are missing from the local environment`,\n\t\t\t);\n\t\t}\n\n\t\t// 5. Create extra column and backfill names for matched migrations\n\t\tconst sqls: SQL[] = [\n\t\t\tsql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${sql.identifier('name')} text`,\n\t\t\tsql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${\n\t\t\t\tsql.identifier('applied_at')\n\t\t\t} timestamp with time zone DEFAULT now()`,\n\t\t];\n\t\tfor (const { id, name } of toApply) {\n\t\t\tsqls.push(\n\t\t\t\tsql`UPDATE ${table} SET ${sql.identifier('name')} = ${name}, ${sql.identifier('applied_at')} = NULL WHERE ${\n\t\t\t\t\tsql.identifier('id')\n\t\t\t\t} = ${id}`,\n\t\t\t);\n\t\t}\n\n\t\t// check if http\n\t\t// execute -> proxy, http drivers\n\t\t// transaction -> other\n\t\tif (mode === 'transaction') {\n\t\t\tawait db.transaction(async (tx: PgAsyncTransaction<any, any>) => {\n\t\t\t\tfor (const sql of sqls) {\n\t\t\t\t\tawait tx.execute(sql);\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (mode === 'batch') {\n\t\t\tconst database = db as NeonHttpDatabase;\n\n\t\t\tawait database.batch(\n\t\t\t\tsqls.map((s) => database.execute(s)) as unknown as [BatchItem<'pg'>, ...BatchItem<'pg'>[]],\n\t\t\t);\n\t\t} else {\n\t\t\tfor (const sql of sqls) {\n\t\t\t\tawait db.execute(sql);\n\t\t\t}\n\t\t}\n\t},\n};\n\n/**\n * Detects the current version of the migrations table schema and upgrades it if needed.\n *\n * Version 0: Original schema (id, hash, created_at)\n * Version 1: Extended schema (id, hash, created_at, name, applied_at)\n */\nexport async function upgradeIfNeeded(\n\tmigrationsSchema: string,\n\tmigrationsTable: string,\n\tdb: PgAsyncDatabase<PgQueryResultHKT, any>,\n\tlocalMigrations: MigrationMeta[],\n\tmode: 'transaction' | 'execute' | 'batch' = 'transaction',\n): Promise<UpgradeResult> {\n\t// Check if the table exists at all\n\tconst result = await db.session.objects<{ '1': 1 }>(\n\t\tsql`SELECT 1 FROM information_schema.tables\n\t\t\tWHERE table_schema = ${migrationsSchema}\n\t\t\tAND table_name = ${migrationsTable}`,\n\t);\n\n\tif (result.length === 0) {\n\t\treturn { newDb: true };\n\t}\n\n\t// Table exists, check table shape\n\tconst rows = await db.session.objects<\n\t\t{ schema: string; table_name: string; column_name: string; type: string }\n\t>(\n\t\tsql`SELECT\n\t\t\tn.nspname AS \"schema\",\n\t\t\tc.relname AS \"table_name\",\n\t\t\ta.attname AS \"column_name\",\n\t\t\tpg_catalog.format_type(a.atttypid, a.atttypmod) AS \"type\"\n\t\tFROM\n\t\t\tpg_catalog.pg_attribute a\n\t\t\tJOIN pg_catalog.pg_class c ON c.oid = a.attrelid\n\t\t\tJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n\t\tWHERE\n\t\t\ta.attnum > 0\n\t\t\tAND NOT a.attisdropped\n\t\t\tAND n.nspname = ${migrationsSchema}\n\t\t\tAND c.relname = ${migrationsTable}\n\t\tORDER BY a.attnum;`,\n\t);\n\n\tlet version = getVersion(rows.map((r) => r.column_name));\n\n\tfor (let v = version; v < CURRENT_MIGRATION_TABLE_VERSION; v++) {\n\t\tconst upgradeFn = upgradeFunctions[v];\n\t\tif (!upgradeFn) {\n\t\t\tthrow new Error(`No upgrade path from migration table version ${v} to ${v + 1}`);\n\t\t}\n\t\tawait upgradeFn(migrationsSchema, migrationsTable, db, localMigrations, mode);\n\t}\n\n\treturn { prevVersion: version, currentVersion: CURRENT_MIGRATION_TABLE_VERSION };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pg.js","names":[],"sources":["../../src/up-migrations/pg.ts"],"sourcesContent":["import type { TablesRelationalConfig } from '~/_relations.ts';\nimport type { BatchItem } from '~/batch.ts';\nimport type { MigrationMeta } from '~/migrator.ts';\nimport type { NeonHttpDatabase } from '~/neon-http/driver.ts';\nimport type { NeonHttpSession } from '~/neon-http/session.ts';\nimport type { PgAsyncDatabase } from '~/pg-core/async/db.ts';\nimport type { PgAsyncSession, PgAsyncTransaction } from '~/pg-core/async/session.ts';\nimport type { PgQueryResultHKT } from '~/pg-core/session.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport { type SQL, sql } from '~/sql/sql.ts';\nimport type { XataHttpSession } from '~/xata-http/session.ts';\n\nconst CURRENT_MIGRATION_TABLE_VERSION = 1;\n\ninterface UpgradeResult {\n\tnewDb?: boolean;\n\tprevVersion?: number;\n\tcurrentVersion?: number;\n}\n\nfunction getVersion(columns: string[]) {\n\tif (columns.includes('name')) return 1;\n\treturn 0;\n}\n\n// postgres.js returns array of objects\n// pg-proxy returns arrays of objects\n// node-postgres returns { rows: array of objects }\nasync function execute<T extends any[]>(\n\tsession:\n\t\t| PgAsyncSession\n\t\t| NeonHttpSession<Record<string, unknown>, AnyRelations, TablesRelationalConfig>\n\t\t| XataHttpSession<Record<string, unknown>, AnyRelations, TablesRelationalConfig>,\n\tsql: SQL,\n): Promise<T> {\n\tconst result: { rows: T } | T = await session.execute(sql);\n\tif ('rows' in result) return result.rows;\n\treturn result;\n}\n\n/**\n * Map of upgrade functions. Each key is the version being upgraded FROM,\n * and the function upgrades the table to the next version.\n */\nconst upgradeFunctions: Record<\n\tnumber,\n\t(\n\t\tmigrationsSchema: string,\n\t\tmigrationsTable: string,\n\t\tdb: PgAsyncDatabase<PgQueryResultHKT, any, any, any>,\n\t\tlocalMigrations: MigrationMeta[],\n\t\tmode: 'transaction' | 'execute' | 'batch',\n\t) => Promise<void>\n> = {\n\t/**\n\t * Upgrade from version 0 to version 1:\n\t * 1. Read all existing DB migrations\n\t * 2. Sort localMigrations ASC by millis and if the same - sort by name\n\t * 3. Match each DB row to a local migration\n\t * If multiple migrations share the same second, use hash matching as a tiebreaker\n\t * Not implemented for now -> If hash matching fails, fall back to serial id ordering\n\t * 5. Create extra column and backfill names for matched migrations\n\t */\n\t0: async (migrationsSchema, migrationsTable, db, localMigrations, mode) => {\n\t\tconst table = sql`${sql.identifier(migrationsSchema)}.${sql.identifier(migrationsTable)}`;\n\n\t\t// 1. Read all existing DB migrations\n\t\t// Sort them by ids asc (order how they were applied)\n\t\tconst dbRows = await execute<{ id: number; hash: string; created_at: string }[]>(\n\t\t\tdb.session,\n\t\t\tsql`SELECT id, hash, created_at FROM ${table} ORDER BY id ASC`,\n\t\t);\n\n\t\t// 2. Sort ASC by millis and if the same - sort by name\n\t\tlocalMigrations.sort((a, b) =>\n\t\t\ta.folderMillis !== b.folderMillis ? a.folderMillis - b.folderMillis : (a.name ?? '').localeCompare(b.name ?? '')\n\t\t);\n\n\t\tconst byMillis = new Map<number, MigrationMeta[]>();\n\t\tconst byHash = new Map<string, MigrationMeta>();\n\t\tfor (const lm of localMigrations) {\n\t\t\tif (!byMillis.has(lm.folderMillis)) {\n\t\t\t\tbyMillis.set(lm.folderMillis, []);\n\t\t\t}\n\t\t\tbyMillis.get(lm.folderMillis)!.push(lm);\n\t\t\tbyHash.set(lm.hash, lm);\n\t\t}\n\n\t\t// \t3. Match each DB row to a local migration\n\t\t// \tPriority: millis -> hash\n\t\tconst toApply: { id: number; name: string }[] = [];\n\t\tlet unmatchedIds: number[] = [];\n\n\t\tfor (const dbRow of dbRows) {\n\t\t\tconst stringified = String(dbRow.created_at);\n\t\t\tconst millis = Number(stringified.substring(0, stringified.length - 3) + '000');\n\t\t\tconst candidates = byMillis.get(millis);\n\n\t\t\tlet matched: MigrationMeta | undefined;\n\n\t\t\tif (candidates && candidates.length === 1) {\n\t\t\t\tmatched = candidates[0];\n\t\t\t} else if (candidates && candidates.length > 1) {\n\t\t\t\tmatched = candidates.find((c) => c.hash === dbRow.hash);\n\t\t\t} else {\n\t\t\t\tmatched = byHash.get(dbRow.hash);\n\t\t\t}\n\n\t\t\tif (matched) toApply.push({ id: dbRow.id, name: matched.name });\n\t\t\telse unmatchedIds.push(dbRow.id);\n\t\t}\n\n\t\t// 4. Check for unmatched\n\t\t// Our assumption on this migration flow is that all DB entries should be matched to a local migration\n\t\t// (if same seconds - fallback to hash, if hash fails - corner case)\n\t\t// If there are unmatched entries, it means that the local environment is missing migrations that have been applied to the DB,\n\t\t// which can lead to inconsistencies and potential issues when running future migrations\n\t\tif (unmatchedIds.length > 0) {\n\t\t\tthrow Error(\n\t\t\t\t`While upgrading your database migrations table we found ${unmatchedIds.length} migrations (ids: ${\n\t\t\t\t\tunmatchedIds.join(', ')\n\t\t\t\t}) in the database that do not match any local migration. This means that some migrations were applied to the database but are missing from the local environment`,\n\t\t\t);\n\t\t}\n\n\t\t// 5. Create extra column and backfill names for matched migrations\n\t\tconst sqls: SQL[] = [\n\t\t\tsql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${sql.identifier('name')} text`,\n\t\t\tsql`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${\n\t\t\t\tsql.identifier('applied_at')\n\t\t\t} timestamp with time zone DEFAULT now()`,\n\t\t];\n\t\tfor (const { id, name } of toApply) {\n\t\t\tsqls.push(\n\t\t\t\tsql`UPDATE ${table} SET ${sql.identifier('name')} = ${name}, ${sql.identifier('applied_at')} = NULL WHERE ${\n\t\t\t\t\tsql.identifier('id')\n\t\t\t\t} = ${id}`,\n\t\t\t);\n\t\t}\n\n\t\t// check if http\n\t\t// execute -> proxy, http drivers\n\t\t// transaction -> other\n\t\tif (mode === 'transaction') {\n\t\t\tawait db.transaction(async (tx: PgAsyncTransaction<any, any, any>) => {\n\t\t\t\tfor (const sql of sqls) {\n\t\t\t\t\tawait tx.execute(sql);\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (mode === 'batch') {\n\t\t\tconst database = db as NeonHttpDatabase;\n\n\t\t\tawait database.batch(\n\t\t\t\tsqls.map((s) => database.execute(s)) as unknown as [BatchItem<'pg'>, ...BatchItem<'pg'>[]],\n\t\t\t);\n\t\t} else {\n\t\t\tfor (const sql of sqls) {\n\t\t\t\tawait db.execute(sql);\n\t\t\t}\n\t\t}\n\t},\n};\n\n/**\n * Detects the current version of the migrations table schema and upgrades it if needed.\n *\n * Version 0: Original schema (id, hash, created_at)\n * Version 1: Extended schema (id, hash, created_at, name, applied_at)\n */\nexport async function upgradeIfNeeded(\n\tmigrationsSchema: string,\n\tmigrationsTable: string,\n\tdb: PgAsyncDatabase<PgQueryResultHKT, any, any, any>,\n\tlocalMigrations: MigrationMeta[],\n\tmode: 'transaction' | 'execute' | 'batch' = 'transaction',\n): Promise<UpgradeResult> {\n\t// Check if the table exists at all\n\tconst result = await execute<{ '1': 1 }[]>(\n\t\tdb.session,\n\t\tsql`SELECT 1 FROM information_schema.tables\n\t\t\tWHERE table_schema = ${migrationsSchema}\n\t\t\tAND table_name = ${migrationsTable}`,\n\t);\n\n\tif (result.length === 0) {\n\t\treturn { newDb: true };\n\t}\n\n\t// Table exists, check table shape\n\tconst rows = await execute<\n\t\t{ schema: string; table_name: string; column_name: string; type: string }[]\n\t>(\n\t\tdb.session,\n\t\tsql`SELECT\n\t\t\tn.nspname AS \"schema\",\n\t\t\tc.relname AS \"table_name\",\n\t\t\ta.attname AS \"column_name\",\n\t\t\tpg_catalog.format_type(a.atttypid, a.atttypmod) AS \"type\"\n\t\tFROM\n\t\t\tpg_catalog.pg_attribute a\n\t\t\tJOIN pg_catalog.pg_class c ON c.oid = a.attrelid\n\t\t\tJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n\t\tWHERE\n\t\t\ta.attnum > 0\n\t\t\tAND NOT a.attisdropped\n\t\t\tAND n.nspname = ${migrationsSchema}\n\t\t\tAND c.relname = ${migrationsTable}\n\t\tORDER BY a.attnum;`,\n\t);\n\n\tlet version = getVersion(rows.map((r) => r.column_name));\n\n\tfor (let v = version; v < CURRENT_MIGRATION_TABLE_VERSION; v++) {\n\t\tconst upgradeFn = upgradeFunctions[v];\n\t\tif (!upgradeFn) {\n\t\t\tthrow new Error(`No upgrade path from migration table version ${v} to ${v + 1}`);\n\t\t}\n\t\tawait upgradeFn(migrationsSchema, migrationsTable, db, localMigrations, mode);\n\t}\n\n\treturn { prevVersion: version, currentVersion: CURRENT_MIGRATION_TABLE_VERSION };\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { MigrationMeta } from "../migrator.js";
|
|
2
1
|
import { TablesRelationalConfig } from "../_relations.js";
|
|
3
|
-
import {
|
|
2
|
+
import { MigrationMeta } from "../migrator.js";
|
|
4
3
|
import { SQLiteSession } from "../sqlite-core/session.js";
|
|
4
|
+
import { AnyRelations } from "../relations.js";
|
|
5
5
|
import { SQLiteD1Session } from "../d1/session.js";
|
|
6
6
|
import { LibSQLSession } from "../libsql/session.js";
|
|
7
7
|
import { SQLiteCloudSession } from "../sqlite-cloud/session.js";
|