drizzle-orm 1.0.0-beta.22-eaa25cd → 1.0.0-beta.22-46020ee
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/aws-data-api/common/index.d.cts +1 -1
- package/aws-data-api/common/index.d.ts +1 -1
- package/aws-data-api/pg/codecs.cjs +162 -0
- package/aws-data-api/pg/codecs.cjs.map +1 -0
- package/aws-data-api/pg/codecs.d.cts +9 -0
- package/aws-data-api/pg/codecs.d.ts +9 -0
- package/aws-data-api/pg/codecs.js +160 -0
- package/aws-data-api/pg/codecs.js.map +1 -0
- package/aws-data-api/pg/driver.cjs +4 -157
- package/aws-data-api/pg/driver.cjs.map +1 -1
- package/aws-data-api/pg/driver.d.cts +1 -5
- package/aws-data-api/pg/driver.d.ts +1 -5
- package/aws-data-api/pg/driver.js +4 -156
- package/aws-data-api/pg/driver.js.map +1 -1
- package/aws-data-api/pg/index.cjs +2 -1
- package/aws-data-api/pg/index.d.cts +2 -1
- package/aws-data-api/pg/index.d.ts +2 -1
- package/aws-data-api/pg/index.js +2 -1
- package/better-sqlite3/driver.cjs +2 -1
- package/better-sqlite3/driver.cjs.map +1 -1
- package/better-sqlite3/driver.js +2 -1
- package/better-sqlite3/driver.js.map +1 -1
- package/better-sqlite3/session.cjs +8 -8
- package/better-sqlite3/session.cjs.map +1 -1
- package/better-sqlite3/session.d.cts +3 -3
- package/better-sqlite3/session.d.ts +3 -3
- package/better-sqlite3/session.js +8 -8
- package/better-sqlite3/session.js.map +1 -1
- package/bun-sql/mysql/driver.cjs +2 -1
- package/bun-sql/mysql/driver.cjs.map +1 -1
- package/bun-sql/mysql/driver.js +2 -1
- package/bun-sql/mysql/driver.js.map +1 -1
- package/bun-sql/mysql/session.cjs +8 -8
- package/bun-sql/mysql/session.cjs.map +1 -1
- package/bun-sql/mysql/session.d.cts +3 -3
- package/bun-sql/mysql/session.d.ts +3 -3
- package/bun-sql/mysql/session.js +8 -8
- package/bun-sql/mysql/session.js.map +1 -1
- package/bun-sql/postgres/codecs.cjs +176 -0
- package/bun-sql/postgres/codecs.cjs.map +1 -0
- package/bun-sql/postgres/codecs.d.cts +9 -0
- package/bun-sql/postgres/codecs.d.ts +9 -0
- package/bun-sql/postgres/codecs.js +174 -0
- package/bun-sql/postgres/codecs.js.map +1 -0
- package/bun-sql/postgres/driver.cjs +4 -171
- package/bun-sql/postgres/driver.cjs.map +1 -1
- package/bun-sql/postgres/driver.d.cts +1 -5
- package/bun-sql/postgres/driver.d.ts +1 -5
- package/bun-sql/postgres/driver.js +4 -170
- package/bun-sql/postgres/driver.js.map +1 -1
- package/bun-sql/postgres/index.cjs +2 -1
- package/bun-sql/postgres/index.d.cts +2 -1
- package/bun-sql/postgres/index.d.ts +2 -1
- package/bun-sql/postgres/index.js +2 -1
- package/bun-sql/sqlite/driver.cjs +2 -1
- package/bun-sql/sqlite/driver.cjs.map +1 -1
- package/bun-sql/sqlite/driver.js +2 -1
- package/bun-sql/sqlite/driver.js.map +1 -1
- package/bun-sql/sqlite/session.cjs +8 -8
- package/bun-sql/sqlite/session.cjs.map +1 -1
- package/bun-sql/sqlite/session.d.cts +3 -3
- package/bun-sql/sqlite/session.d.ts +3 -3
- package/bun-sql/sqlite/session.js +8 -8
- package/bun-sql/sqlite/session.js.map +1 -1
- package/bun-sqlite/driver.cjs +2 -1
- package/bun-sqlite/driver.cjs.map +1 -1
- package/bun-sqlite/driver.js +2 -1
- package/bun-sqlite/driver.js.map +1 -1
- package/bun-sqlite/session.cjs +8 -8
- package/bun-sqlite/session.cjs.map +1 -1
- package/bun-sqlite/session.d.cts +3 -3
- package/bun-sqlite/session.d.ts +3 -3
- package/bun-sqlite/session.js +8 -8
- package/bun-sqlite/session.js.map +1 -1
- package/cockroach/driver.cjs +3 -2
- package/cockroach/driver.cjs.map +1 -1
- package/cockroach/driver.d.cts +1 -1
- package/cockroach/driver.d.ts +1 -1
- package/cockroach/driver.js +3 -2
- package/cockroach/driver.js.map +1 -1
- package/cockroach/session.cjs +4 -4
- package/cockroach/session.cjs.map +1 -1
- package/cockroach/session.d.cts +3 -3
- package/cockroach/session.d.ts +3 -3
- package/cockroach/session.js +4 -4
- package/cockroach/session.js.map +1 -1
- package/durable-sqlite/driver.cjs +2 -1
- package/durable-sqlite/driver.cjs.map +1 -1
- package/durable-sqlite/driver.js +2 -1
- package/durable-sqlite/driver.js.map +1 -1
- package/durable-sqlite/session.cjs +8 -8
- package/durable-sqlite/session.cjs.map +1 -1
- package/durable-sqlite/session.d.cts +3 -3
- package/durable-sqlite/session.d.ts +3 -3
- package/durable-sqlite/session.js +8 -8
- package/durable-sqlite/session.js.map +1 -1
- package/effect-postgres/codecs.cjs +175 -0
- package/effect-postgres/codecs.cjs.map +1 -0
- package/effect-postgres/codecs.d.cts +9 -0
- package/effect-postgres/codecs.d.ts +9 -0
- package/effect-postgres/codecs.js +173 -0
- package/effect-postgres/codecs.js.map +1 -0
- package/effect-postgres/driver.cjs +5 -171
- package/effect-postgres/driver.cjs.map +1 -1
- package/effect-postgres/driver.d.cts +3 -7
- package/effect-postgres/driver.d.ts +3 -7
- package/effect-postgres/driver.js +5 -170
- package/effect-postgres/driver.js.map +1 -1
- package/effect-postgres/index.cjs +2 -1
- package/effect-postgres/index.d.cts +2 -1
- package/effect-postgres/index.d.ts +2 -1
- package/effect-postgres/index.js +2 -1
- package/effect-postgres/migrator.d.cts +1 -1
- package/effect-postgres/migrator.d.ts +1 -1
- package/effect-postgres/session.cjs.map +1 -1
- package/effect-postgres/session.d.cts +1 -1
- package/effect-postgres/session.d.ts +1 -1
- package/effect-postgres/session.js.map +1 -1
- package/expo-sqlite/driver.cjs +2 -1
- package/expo-sqlite/driver.cjs.map +1 -1
- package/expo-sqlite/driver.js +2 -1
- package/expo-sqlite/driver.js.map +1 -1
- package/expo-sqlite/session.cjs +8 -8
- package/expo-sqlite/session.cjs.map +1 -1
- package/expo-sqlite/session.d.cts +3 -3
- package/expo-sqlite/session.d.ts +3 -3
- package/expo-sqlite/session.js +8 -8
- package/expo-sqlite/session.js.map +1 -1
- package/index.cjs +1 -0
- package/index.js +2 -2
- package/libsql/driver-core.cjs +2 -1
- package/libsql/driver-core.cjs.map +1 -1
- package/libsql/driver-core.js +2 -1
- package/libsql/driver-core.js.map +1 -1
- package/libsql/session.cjs +8 -8
- package/libsql/session.cjs.map +1 -1
- package/libsql/session.d.cts +3 -3
- package/libsql/session.d.ts +3 -3
- package/libsql/session.js +8 -8
- package/libsql/session.js.map +1 -1
- package/mysql-proxy/driver.cjs +2 -1
- package/mysql-proxy/driver.cjs.map +1 -1
- package/mysql-proxy/driver.js +2 -1
- package/mysql-proxy/driver.js.map +1 -1
- package/mysql-proxy/session.cjs +6 -6
- package/mysql-proxy/session.cjs.map +1 -1
- package/mysql-proxy/session.d.cts +3 -3
- package/mysql-proxy/session.d.ts +3 -3
- package/mysql-proxy/session.js +6 -6
- package/mysql-proxy/session.js.map +1 -1
- package/mysql2/driver.cjs +2 -1
- package/mysql2/driver.cjs.map +1 -1
- package/mysql2/driver.d.cts +1 -1
- package/mysql2/driver.d.ts +1 -1
- package/mysql2/driver.js +2 -1
- package/mysql2/driver.js.map +1 -1
- package/mysql2/session.cjs +7 -7
- package/mysql2/session.cjs.map +1 -1
- package/mysql2/session.d.cts +3 -3
- package/mysql2/session.d.ts +3 -3
- package/mysql2/session.js +7 -7
- package/mysql2/session.js.map +1 -1
- package/neon-http/codecs.cjs +66 -0
- package/neon-http/codecs.cjs.map +1 -0
- package/neon-http/codecs.d.cts +9 -0
- package/neon-http/codecs.d.ts +9 -0
- package/neon-http/codecs.js +64 -0
- package/neon-http/codecs.js.map +1 -0
- package/neon-http/driver.cjs +4 -61
- package/neon-http/driver.cjs.map +1 -1
- package/neon-http/driver.d.cts +1 -5
- package/neon-http/driver.d.ts +1 -5
- package/neon-http/driver.js +4 -60
- package/neon-http/driver.js.map +1 -1
- package/neon-http/index.cjs +2 -1
- package/neon-http/index.d.cts +2 -1
- package/neon-http/index.d.ts +2 -1
- package/neon-http/index.js +2 -1
- package/neon-serverless/codecs.cjs +65 -0
- package/neon-serverless/codecs.cjs.map +1 -0
- package/neon-serverless/codecs.d.cts +9 -0
- package/neon-serverless/codecs.d.ts +9 -0
- package/neon-serverless/codecs.js +63 -0
- package/neon-serverless/codecs.js.map +1 -0
- package/neon-serverless/driver.cjs +4 -60
- package/neon-serverless/driver.cjs.map +1 -1
- package/neon-serverless/driver.d.cts +2 -6
- package/neon-serverless/driver.d.ts +2 -6
- package/neon-serverless/driver.js +4 -59
- package/neon-serverless/driver.js.map +1 -1
- package/neon-serverless/index.cjs +2 -1
- package/neon-serverless/index.d.cts +2 -1
- package/neon-serverless/index.d.ts +2 -1
- package/neon-serverless/index.js +2 -1
- package/netlify-db/codecs.cjs +122 -0
- package/netlify-db/codecs.cjs.map +1 -0
- package/netlify-db/codecs.d.cts +10 -0
- package/netlify-db/codecs.d.ts +10 -0
- package/netlify-db/codecs.js +119 -0
- package/netlify-db/codecs.js.map +1 -0
- package/netlify-db/driver.cjs +4 -118
- package/netlify-db/driver.cjs.map +1 -1
- package/netlify-db/driver.d.cts +1 -6
- package/netlify-db/driver.d.ts +1 -6
- package/netlify-db/driver.js +4 -116
- package/netlify-db/driver.js.map +1 -1
- package/netlify-db/index.cjs +3 -2
- package/netlify-db/index.d.cts +2 -1
- package/netlify-db/index.d.ts +2 -1
- package/netlify-db/index.js +2 -1
- package/netlify-db/session.d.ts +1 -1
- package/node-mssql/driver.cjs +3 -2
- package/node-mssql/driver.cjs.map +1 -1
- package/node-mssql/driver.d.cts +1 -1
- package/node-mssql/driver.d.ts +1 -1
- package/node-mssql/driver.js +3 -2
- package/node-mssql/driver.js.map +1 -1
- package/node-mssql/session.cjs +5 -5
- package/node-mssql/session.cjs.map +1 -1
- package/node-mssql/session.d.cts +3 -3
- package/node-mssql/session.d.ts +3 -3
- package/node-mssql/session.js +5 -5
- package/node-mssql/session.js.map +1 -1
- package/node-postgres/codecs.cjs +65 -0
- package/node-postgres/codecs.cjs.map +1 -0
- package/node-postgres/codecs.d.cts +9 -0
- package/node-postgres/codecs.d.ts +9 -0
- package/node-postgres/codecs.js +63 -0
- package/node-postgres/codecs.js.map +1 -0
- package/node-postgres/driver.cjs +4 -60
- package/node-postgres/driver.cjs.map +1 -1
- package/node-postgres/driver.d.cts +1 -5
- package/node-postgres/driver.d.ts +1 -5
- package/node-postgres/driver.js +4 -59
- package/node-postgres/driver.js.map +1 -1
- package/node-postgres/index.cjs +2 -1
- package/node-postgres/index.d.cts +2 -1
- package/node-postgres/index.d.ts +2 -1
- package/node-postgres/index.js +2 -1
- package/node-sqlite/driver.cjs +5 -1
- package/node-sqlite/driver.cjs.map +1 -1
- package/node-sqlite/driver.js +5 -1
- package/node-sqlite/driver.js.map +1 -1
- package/node-sqlite/session.cjs +14 -8
- package/node-sqlite/session.cjs.map +1 -1
- package/node-sqlite/session.d.cts +8 -3
- package/node-sqlite/session.d.ts +8 -3
- package/node-sqlite/session.js +15 -9
- package/node-sqlite/session.js.map +1 -1
- package/op-sqlite/driver.cjs +2 -1
- package/op-sqlite/driver.cjs.map +1 -1
- package/op-sqlite/driver.js +2 -1
- package/op-sqlite/driver.js.map +1 -1
- package/op-sqlite/session.cjs +8 -8
- package/op-sqlite/session.cjs.map +1 -1
- package/op-sqlite/session.d.cts +3 -3
- package/op-sqlite/session.d.ts +3 -3
- package/op-sqlite/session.js +8 -8
- package/op-sqlite/session.js.map +1 -1
- package/package.json +133 -1
- package/pg-core/effect/session.d.cts +1 -1
- package/pg-core/effect/session.d.ts +1 -1
- package/pg-proxy/driver.cjs +4 -4
- package/pg-proxy/driver.cjs.map +1 -1
- package/pg-proxy/driver.d.ts +1 -1
- package/pg-proxy/driver.js +4 -4
- package/pg-proxy/driver.js.map +1 -1
- package/pg-proxy/session.cjs.map +1 -1
- package/pg-proxy/session.d.cts +0 -1
- package/pg-proxy/session.d.ts +0 -1
- package/pg-proxy/session.js.map +1 -1
- package/pglite/codecs.cjs +92 -0
- package/pglite/codecs.cjs.map +1 -0
- package/pglite/codecs.d.cts +9 -0
- package/pglite/codecs.d.ts +9 -0
- package/pglite/codecs.js +90 -0
- package/pglite/codecs.js.map +1 -0
- package/pglite/driver.cjs +3 -86
- package/pglite/driver.cjs.map +1 -1
- package/pglite/driver.d.cts +1 -5
- package/pglite/driver.d.ts +1 -5
- package/pglite/driver.js +4 -86
- package/pglite/driver.js.map +1 -1
- package/pglite/index.cjs +2 -1
- package/pglite/index.d.cts +2 -1
- package/pglite/index.d.ts +2 -1
- package/pglite/index.js +2 -1
- package/planetscale-serverless/driver.cjs +2 -1
- package/planetscale-serverless/driver.cjs.map +1 -1
- package/planetscale-serverless/driver.d.cts +1 -1
- package/planetscale-serverless/driver.d.ts +1 -1
- package/planetscale-serverless/driver.js +2 -1
- package/planetscale-serverless/driver.js.map +1 -1
- package/planetscale-serverless/session.cjs +6 -6
- package/planetscale-serverless/session.cjs.map +1 -1
- package/planetscale-serverless/session.d.cts +3 -3
- package/planetscale-serverless/session.d.ts +3 -3
- package/planetscale-serverless/session.js +6 -6
- package/planetscale-serverless/session.js.map +1 -1
- package/postgres-js/codecs.cjs +147 -0
- package/postgres-js/codecs.cjs.map +1 -0
- package/postgres-js/codecs.d.cts +9 -0
- package/postgres-js/codecs.d.ts +9 -0
- package/postgres-js/codecs.js +145 -0
- package/postgres-js/codecs.js.map +1 -0
- package/postgres-js/driver.cjs +4 -142
- package/postgres-js/driver.cjs.map +1 -1
- package/postgres-js/driver.d.cts +1 -5
- package/postgres-js/driver.d.ts +1 -5
- package/postgres-js/driver.js +4 -141
- package/postgres-js/driver.js.map +1 -1
- package/postgres-js/index.cjs +2 -1
- package/postgres-js/index.d.cts +2 -1
- package/postgres-js/index.d.ts +2 -1
- package/postgres-js/index.js +2 -1
- package/singlestore/driver.cjs +3 -2
- package/singlestore/driver.cjs.map +1 -1
- package/singlestore/driver.d.cts +1 -1
- package/singlestore/driver.d.ts +1 -1
- package/singlestore/driver.js +3 -2
- package/singlestore/driver.js.map +1 -1
- package/singlestore/session.cjs +7 -7
- package/singlestore/session.cjs.map +1 -1
- package/singlestore/session.d.cts +3 -3
- package/singlestore/session.d.ts +3 -3
- package/singlestore/session.js +7 -7
- package/singlestore/session.js.map +1 -1
- package/singlestore-proxy/driver.cjs +2 -1
- package/singlestore-proxy/driver.cjs.map +1 -1
- package/singlestore-proxy/driver.js +2 -1
- package/singlestore-proxy/driver.js.map +1 -1
- package/singlestore-proxy/session.cjs +6 -6
- package/singlestore-proxy/session.cjs.map +1 -1
- package/singlestore-proxy/session.d.cts +3 -3
- package/singlestore-proxy/session.d.ts +3 -3
- package/singlestore-proxy/session.js +6 -6
- package/singlestore-proxy/session.js.map +1 -1
- package/sql-js/driver.cjs +2 -1
- package/sql-js/driver.cjs.map +1 -1
- package/sql-js/driver.js +2 -1
- package/sql-js/driver.js.map +1 -1
- package/sql-js/session.cjs +8 -8
- package/sql-js/session.cjs.map +1 -1
- package/sql-js/session.d.cts +3 -3
- package/sql-js/session.d.ts +3 -3
- package/sql-js/session.js +8 -8
- package/sql-js/session.js.map +1 -1
- package/sqlite-cloud/driver.cjs +2 -1
- package/sqlite-cloud/driver.cjs.map +1 -1
- package/sqlite-cloud/driver.js +2 -1
- package/sqlite-cloud/driver.js.map +1 -1
- package/sqlite-cloud/session.cjs +8 -8
- package/sqlite-cloud/session.cjs.map +1 -1
- package/sqlite-cloud/session.d.cts +3 -3
- package/sqlite-cloud/session.d.ts +3 -3
- package/sqlite-cloud/session.js +8 -8
- package/sqlite-cloud/session.js.map +1 -1
- package/sqlite-proxy/driver.cjs +2 -1
- package/sqlite-proxy/driver.cjs.map +1 -1
- package/sqlite-proxy/driver.js +2 -1
- package/sqlite-proxy/driver.js.map +1 -1
- package/sqlite-proxy/session.cjs +8 -8
- package/sqlite-proxy/session.cjs.map +1 -1
- package/sqlite-proxy/session.d.cts +3 -3
- package/sqlite-proxy/session.d.ts +3 -3
- package/sqlite-proxy/session.js +8 -8
- package/sqlite-proxy/session.js.map +1 -1
- package/tidb-serverless/driver.cjs +2 -1
- package/tidb-serverless/driver.cjs.map +1 -1
- package/tidb-serverless/driver.d.cts +1 -1
- package/tidb-serverless/driver.d.ts +1 -1
- package/tidb-serverless/driver.js +2 -1
- package/tidb-serverless/driver.js.map +1 -1
- package/tidb-serverless/session.cjs +6 -6
- package/tidb-serverless/session.cjs.map +1 -1
- package/tidb-serverless/session.d.cts +3 -3
- package/tidb-serverless/session.d.ts +3 -3
- package/tidb-serverless/session.js +6 -6
- package/tidb-serverless/session.js.map +1 -1
- package/tursodatabase/driver-core.cjs +2 -1
- package/tursodatabase/driver-core.cjs.map +1 -1
- package/tursodatabase/driver-core.js +2 -1
- package/tursodatabase/driver-core.js.map +1 -1
- package/tursodatabase/session.cjs +8 -8
- package/tursodatabase/session.cjs.map +1 -1
- package/tursodatabase/session.d.cts +3 -3
- package/tursodatabase/session.d.ts +3 -3
- package/tursodatabase/session.js +8 -8
- package/tursodatabase/session.js.map +1 -1
- package/utils.cjs +17 -0
- package/utils.cjs.map +1 -1
- package/utils.js +17 -1
- package/utils.js.map +1 -1
- package/vercel-postgres/codecs.cjs +65 -0
- package/vercel-postgres/codecs.cjs.map +1 -0
- package/vercel-postgres/codecs.d.cts +9 -0
- package/vercel-postgres/codecs.d.ts +9 -0
- package/vercel-postgres/codecs.js +63 -0
- package/vercel-postgres/codecs.js.map +1 -0
- package/vercel-postgres/driver.cjs +3 -60
- package/vercel-postgres/driver.cjs.map +1 -1
- package/vercel-postgres/driver.d.cts +1 -5
- package/vercel-postgres/driver.d.ts +1 -5
- package/vercel-postgres/driver.js +4 -60
- package/vercel-postgres/driver.js.map +1 -1
- package/vercel-postgres/index.cjs +2 -1
- package/vercel-postgres/index.d.cts +2 -1
- package/vercel-postgres/index.d.ts +2 -1
- package/vercel-postgres/index.js +2 -1
- package/version.cjs +1 -1
- package/version.cjs.map +1 -1
- package/version.d.cts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.js.map +1 -1
- package/xata-http/codecs.cjs +168 -0
- package/xata-http/codecs.cjs.map +1 -0
- package/xata-http/codecs.d.cts +9 -0
- package/xata-http/codecs.d.ts +9 -0
- package/xata-http/codecs.js +166 -0
- package/xata-http/codecs.js.map +1 -0
- package/xata-http/driver.cjs +4 -163
- package/xata-http/driver.cjs.map +1 -1
- package/xata-http/driver.d.cts +1 -5
- package/xata-http/driver.d.ts +1 -5
- package/xata-http/driver.js +4 -162
- package/xata-http/driver.js.map +1 -1
- package/xata-http/index.cjs +2 -1
- package/xata-http/index.d.cts +2 -1
- package/xata-http/index.d.ts +2 -1
- package/xata-http/index.js +2 -1
package/sqlite-proxy/driver.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { SQLiteRemoteSession } from "./session.js";
|
|
2
2
|
import { entityKind } from "../entity.js";
|
|
3
|
+
import { jitCompatCheck } from "../utils.js";
|
|
3
4
|
import { DefaultLogger } from "../logger.js";
|
|
4
5
|
import * as V1 from "../_relations.js";
|
|
5
6
|
import { BaseSQLiteDatabase } from "../sqlite-core/db.js";
|
|
@@ -45,7 +46,7 @@ function drizzle(callback, batchCallback, config) {
|
|
|
45
46
|
const db = new SqliteRemoteDatabase("async", dialect, new SQLiteRemoteSession(callback, dialect, relations, schema, _batchCallback, {
|
|
46
47
|
logger,
|
|
47
48
|
cache,
|
|
48
|
-
|
|
49
|
+
useJitMappers: jitCompatCheck(_config.useJitMappers)
|
|
49
50
|
}), relations, schema, true);
|
|
50
51
|
db.$cache = cache;
|
|
51
52
|
if (db.$cache) db.$cache["invalidate"] = cache?.onMutate;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.js","names":[],"sources":["../../src/sqlite-proxy/driver.ts"],"sourcesContent":["import * as V1 from '~/_relations.ts';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport { BaseSQLiteDatabase } from '~/sqlite-core/db.ts';\nimport { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport type
|
|
1
|
+
{"version":3,"file":"driver.js","names":[],"sources":["../../src/sqlite-proxy/driver.ts"],"sourcesContent":["import * as V1 from '~/_relations.ts';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport { BaseSQLiteDatabase } from '~/sqlite-core/db.ts';\nimport { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport { type DrizzleConfig, jitCompatCheck } from '~/utils.ts';\nimport { SQLiteRemoteSession } from './session.ts';\n\nexport interface SqliteRemoteResult<T = unknown> {\n\trows?: T[];\n}\n\nexport class SqliteRemoteDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends BaseSQLiteDatabase<'async', SqliteRemoteResult, TSchema, TRelations> {\n\tstatic override readonly [entityKind]: string = 'SqliteRemoteDatabase';\n\n\t/** @internal */\n\tdeclare readonly session: SQLiteRemoteSession<\n\t\tTSchema,\n\t\tTRelations,\n\t\tV1.ExtractTablesWithRelations<TSchema>\n\t>;\n\n\tasync batch<U extends BatchItem<'sqlite'>, T extends Readonly<[U, ...U[]]>>(\n\t\tbatch: T,\n\t): Promise<BatchResponse<T>> {\n\t\treturn this.session.batch(batch) as Promise<BatchResponse<T>>;\n\t}\n}\n\nexport type AsyncRemoteCallback = (\n\tsql: string,\n\tparams: any[],\n\tmethod: 'run' | 'all' | 'values' | 'get',\n) => Promise<{ rows: any[] }>;\n\nexport type AsyncBatchRemoteCallback = (batch: {\n\tsql: string;\n\tparams: any[];\n\tmethod: 'run' | 'all' | 'values' | 'get';\n}[]) => Promise<{ rows: any[] }[]>;\n\nexport type RemoteCallback = AsyncRemoteCallback;\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n>(\n\tcallback: RemoteCallback,\n\tconfig?: DrizzleConfig<TSchema, TRelations>,\n): SqliteRemoteDatabase<TSchema, TRelations>;\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n>(\n\tcallback: RemoteCallback,\n\tbatchCallback?: AsyncBatchRemoteCallback,\n\tconfig?: DrizzleConfig<TSchema, TRelations>,\n): SqliteRemoteDatabase<TSchema, TRelations>;\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n>(\n\tcallback: RemoteCallback,\n\tbatchCallback?: AsyncBatchRemoteCallback | DrizzleConfig<TSchema, TRelations>,\n\tconfig?: DrizzleConfig<TSchema, TRelations>,\n): SqliteRemoteDatabase<TSchema, TRelations> {\n\tconst dialect = new SQLiteAsyncDialect();\n\tlet logger;\n\tlet cache;\n\tlet _batchCallback: AsyncBatchRemoteCallback | undefined;\n\tlet _config: DrizzleConfig<TSchema, TRelations> = {};\n\n\tif (batchCallback) {\n\t\tif (typeof batchCallback === 'function') {\n\t\t\t_batchCallback = batchCallback as AsyncBatchRemoteCallback;\n\t\t\t_config = config ?? {};\n\t\t} else {\n\t\t\t_batchCallback = undefined;\n\t\t\t_config = batchCallback as DrizzleConfig<TSchema, TRelations>;\n\t\t}\n\n\t\tif (_config.logger === true) {\n\t\t\tlogger = new DefaultLogger();\n\t\t} else if (_config.logger !== false) {\n\t\t\tlogger = _config.logger;\n\t\t\tcache = _config.cache;\n\t\t}\n\t}\n\n\tlet schema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined;\n\tif (_config.schema) {\n\t\tconst tablesConfig = V1.extractTablesRelationalConfig(\n\t\t\t_config.schema,\n\t\t\tV1.createTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: _config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst relations = _config.relations ?? {} as TRelations;\n\tconst session = new SQLiteRemoteSession(callback, dialect, relations, schema, _batchCallback, {\n\t\tlogger,\n\t\tcache,\n\t\tuseJitMappers: jitCompatCheck(_config.useJitMappers),\n\t});\n\tconst db = new SqliteRemoteDatabase(\n\t\t'async',\n\t\tdialect,\n\t\tsession as SqliteRemoteDatabase<TSchema, TRelations>['session'],\n\t\trelations,\n\t\tschema as V1.RelationalSchemaConfig<any>,\n\t\ttrue,\n\t) as SqliteRemoteDatabase<\n\t\tTSchema,\n\t\tTRelations\n\t>;\n\t(<any> db).$cache = cache;\n\tif ((<any> db).$cache) {\n\t\t(<any> db).$cache['invalidate'] = cache?.onMutate;\n\t}\n\treturn db;\n}\n"],"mappings":";;;;;;;;;AAcA,IAAa,uBAAb,cAGU,mBAAqE;CAC9E,QAA0B,cAAsB;CAShD,MAAM,MACL,OAC4B;AAC5B,SAAO,KAAK,QAAQ,MAAM,MAAM;;;AAiClC,SAAgB,QAIf,UACA,eACA,QAC4C;CAC5C,MAAM,UAAU,IAAI,oBAAoB;CACxC,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI,UAA8C,EAAE;AAEpD,KAAI,eAAe;AAClB,MAAI,OAAO,kBAAkB,YAAY;AACxC,oBAAiB;AACjB,aAAU,UAAU,EAAE;SAChB;AACN,oBAAiB;AACjB,aAAU;;AAGX,MAAI,QAAQ,WAAW,KACtB,UAAS,IAAI,eAAe;WAClB,QAAQ,WAAW,OAAO;AACpC,YAAS,QAAQ;AACjB,WAAQ,QAAQ;;;CAIlB,IAAI;AACJ,KAAI,QAAQ,QAAQ;EACnB,MAAM,eAAe,GAAG,8BACvB,QAAQ,QACR,GAAG,4BACH;AACD,WAAS;GACR,YAAY,QAAQ;GACpB,QAAQ,aAAa;GACrB,eAAe,aAAa;GAC5B;;CAGF,MAAM,YAAY,QAAQ,aAAa,EAAE;CAMzC,MAAM,KAAK,IAAI,qBACd,SACA,SAPe,IAAI,oBAAoB,UAAU,SAAS,WAAW,QAAQ,gBAAgB;EAC7F;EACA;EACA,eAAe,eAAe,QAAQ,cAAc;EACpD,CAAC,EAKD,WACA,QACA,KACA;AAID,CAAO,GAAI,SAAS;AACpB,KAAW,GAAI,OACd,CAAO,GAAI,OAAO,gBAAgB,OAAO;AAE1C,QAAO"}
|
package/sqlite-proxy/session.cjs
CHANGED
|
@@ -25,10 +25,10 @@ var SQLiteRemoteSession = class extends __sqlite_core_session_ts.SQLiteSession {
|
|
|
25
25
|
this.cache = options.cache ?? new __cache_core_index_ts.NoopCache();
|
|
26
26
|
}
|
|
27
27
|
prepareQuery(query, fields, executeMethod, customResultMapper, queryMetadata, cacheConfig) {
|
|
28
|
-
return new RemotePreparedQuery(this.client, query, this.logger, this.cache, queryMetadata, cacheConfig, fields, executeMethod, this.options.
|
|
28
|
+
return new RemotePreparedQuery(this.client, query, this.logger, this.cache, queryMetadata, cacheConfig, fields, executeMethod, this.options.useJitMappers, customResultMapper);
|
|
29
29
|
}
|
|
30
30
|
prepareRelationalQuery(query, fields, executeMethod, customResultMapper, config) {
|
|
31
|
-
return new RemotePreparedQuery(this.client, query, this.logger, this.cache, void 0, void 0, fields, executeMethod, this.options.
|
|
31
|
+
return new RemotePreparedQuery(this.client, query, this.logger, this.cache, void 0, void 0, fields, executeMethod, this.options.useJitMappers, customResultMapper, true, config);
|
|
32
32
|
}
|
|
33
33
|
async batch(queries) {
|
|
34
34
|
const preparedQueries = [];
|
|
@@ -87,12 +87,12 @@ var RemotePreparedQuery = class extends __sqlite_core_session_ts.SQLitePreparedQ
|
|
|
87
87
|
static [__entity_ts.entityKind] = "SQLiteProxyPreparedQuery";
|
|
88
88
|
method;
|
|
89
89
|
jitMapper;
|
|
90
|
-
constructor(client, query, logger, cache, queryMetadata, cacheConfig, fields, executeMethod,
|
|
90
|
+
constructor(client, query, logger, cache, queryMetadata, cacheConfig, fields, executeMethod, useJitMappers, customResultMapper, isRqbV2Query, rqbConfig) {
|
|
91
91
|
super("async", executeMethod, query, cache, queryMetadata, cacheConfig);
|
|
92
92
|
this.client = client;
|
|
93
93
|
this.logger = logger;
|
|
94
94
|
this.fields = fields;
|
|
95
|
-
this.
|
|
95
|
+
this.useJitMappers = useJitMappers;
|
|
96
96
|
this.customResultMapper = customResultMapper;
|
|
97
97
|
this.isRqbV2Query = isRqbV2Query;
|
|
98
98
|
this.rqbConfig = rqbConfig;
|
|
@@ -116,10 +116,10 @@ var RemotePreparedQuery = class extends __sqlite_core_session_ts.SQLitePreparedQ
|
|
|
116
116
|
if (!this.fields && !this.customResultMapper) return rows;
|
|
117
117
|
if (this.isRqbV2Query) {
|
|
118
118
|
for (let i = 0; i < rows.length; ++i) rows[i] = JSON.parse(rows[i]);
|
|
119
|
-
return this.
|
|
119
|
+
return this.useJitMappers ? (this.jitMapper = this.jitMapper ?? (0, __relations_ts.makeJitRqbMapper)(this.rqbConfig))(rows) : this.customResultMapper(rows);
|
|
120
120
|
}
|
|
121
121
|
if (this.customResultMapper) return this.customResultMapper(rows);
|
|
122
|
-
return this.
|
|
122
|
+
return this.useJitMappers ? (this.jitMapper = this.jitMapper ?? (0, __utils_ts.makeJitQueryMapper)(this.fields, this.joinsNotNullableMap))(rows) : rows.map((row) => (0, __utils_ts.mapResultRow)(this.fields, row, this.joinsNotNullableMap));
|
|
123
123
|
}
|
|
124
124
|
async all(placeholderValues) {
|
|
125
125
|
if (this.isRqbV2Query) return this.allRqbV2(placeholderValues);
|
|
@@ -160,9 +160,9 @@ var RemotePreparedQuery = class extends __sqlite_core_session_ts.SQLitePreparedQ
|
|
|
160
160
|
const row = rows;
|
|
161
161
|
if (!this.fields && !this.customResultMapper) return row;
|
|
162
162
|
if (!row) return;
|
|
163
|
-
if (this.isRqbV2Query) return this.
|
|
163
|
+
if (this.isRqbV2Query) return this.useJitMappers ? (this.jitMapper = this.jitMapper ?? (0, __relations_ts.makeJitRqbMapper)(this.rqbConfig))([JSON.parse(row)]) : this.customResultMapper([JSON.parse(row)]);
|
|
164
164
|
if (this.customResultMapper) return this.customResultMapper([rows]);
|
|
165
|
-
return this.
|
|
165
|
+
return this.useJitMappers ? (this.jitMapper = this.jitMapper ?? (0, __utils_ts.makeJitQueryMapper)(this.fields, this.joinsNotNullableMap))([row])[0] : (0, __utils_ts.mapResultRow)(this.fields, row, this.joinsNotNullableMap);
|
|
166
166
|
}
|
|
167
167
|
async values(placeholderValues) {
|
|
168
168
|
const params = (0, __sql_sql_ts.fillPlaceholders)(this.query.params, placeholderValues ?? {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.cjs","names":["SQLiteSession","entityKind","NoopLogger","NoopCache","sql","SQLiteTransaction","SQLitePreparedQuery"],"sources":["../../src/sqlite-proxy/session.ts"],"sourcesContent":["import type * as V1 from '~/_relations.ts';\nimport type { BatchItem } from '~/batch.ts';\nimport { type Cache, NoopCache } from '~/cache/core/index.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport {\n\ttype AnyRelations,\n\tmakeJitRqbMapper,\n\ttype RelationalQueryMapperConfig,\n\ttype RelationalRowsMapper,\n} from '~/relations.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport { fillPlaceholders, type Query, 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\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 { AsyncBatchRemoteCallback, AsyncRemoteCallback, RemoteCallback, SqliteRemoteResult } from './driver.ts';\n\nexport interface SQLiteRemoteSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n\tuseJitMapper?: boolean;\n}\n\nexport type PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class SQLiteRemoteSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteSession<'async', SqliteRemoteResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SQLiteRemoteSession';\n\n\tprivate logger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\tprivate client: RemoteCallback,\n\t\tdialect: SQLiteAsyncDialect,\n\t\tprivate relations: TRelations,\n\t\tprivate schema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate batchCLient?: AsyncBatchRemoteCallback,\n\t\tprivate options: SQLiteRemoteSessionOptions = {},\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): RemotePreparedQuery<T> {\n\t\treturn new RemotePreparedQuery(\n\t\t\tthis.client,\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): RemotePreparedQuery<T, true> {\n\t\treturn new RemotePreparedQuery(\n\t\t\tthis.client,\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\tasync batch<T extends BatchItem<'sqlite'>[] | readonly BatchItem<'sqlite'>[]>(queries: T) {\n\t\tconst preparedQueries: PreparedQuery[] = [];\n\t\tconst builtQueries: { sql: string; params: any[]; method: 'run' | 'all' | 'values' | 'get' }[] = [];\n\n\t\tfor (const query of queries) {\n\t\t\tconst preparedQuery = query._prepare();\n\t\t\tconst builtQuery = (preparedQuery as RemotePreparedQuery).getQuery();\n\t\t\tpreparedQueries.push(preparedQuery);\n\t\t\tbuiltQueries.push({ sql: builtQuery.sql, params: builtQuery.params, method: builtQuery.method });\n\t\t}\n\n\t\tconst batchResults = await (this.batchCLient as AsyncBatchRemoteCallback)(builtQueries);\n\t\treturn batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true));\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: SQLiteProxyTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t\tconfig?: SQLiteTransactionConfig,\n\t): Promise<T> {\n\t\tconst tx = new SQLiteProxyTransaction('async', this.dialect, this, this.relations, this.schema, undefined, true);\n\t\tawait this.run(sql.raw(`begin${config?.behavior ? ' ' + config.behavior : ''}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.run(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait this.run(sql`rollback`);\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\toverride extractRawAllValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as SqliteRemoteResult).rows;\n\t}\n\n\toverride extractRawGetValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as SqliteRemoteResult).rows![0];\n\t}\n\n\toverride extractRawValuesValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as SqliteRemoteResult).rows;\n\t}\n}\n\nexport class SQLiteProxyTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteTransaction<'async', SqliteRemoteResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SQLiteProxyTransaction';\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: SQLiteProxyTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\t\tconst tx = new SQLiteProxyTransaction(\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\ttrue,\n\t\t);\n\t\tawait this.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\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 RemotePreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig, TIsRqbV2 extends boolean = false>\n\textends SQLitePreparedQuery<\n\t\t{ type: 'async'; run: SqliteRemoteResult; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n\t>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteProxyPreparedQuery';\n\n\tprivate method: SQLiteExecuteMethod;\n\tprivate jitMapper?: RowsMapper<any> | RelationalRowsMapper<any>;\n\n\tconstructor(\n\t\tprivate client: RemoteCallback,\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\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate useJitMapper: boolean | undefined,\n\t\t/** @internal */ public customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, 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\tthis.method = executeMethod;\n\t}\n\n\toverride getQuery(): Query & { method: SQLiteExecuteMethod } {\n\t\treturn { ...this.query, method: this.method };\n\t}\n\n\tasync run(placeholderValues?: Record<string, unknown>): Promise<SqliteRemoteResult> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn await this.queryWithCache(this.query.sql, params, async () => {\n\t\t\treturn await (this.client as AsyncRemoteCallback)(this.query.sql, params, 'run');\n\t\t});\n\t}\n\n\toverride mapAllResult(rows: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\trows = (rows as SqliteRemoteResult).rows;\n\t\t}\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn rows;\n\t\t}\n\n\t\tif (this.isRqbV2Query) {\n\t\t\tfor (let i = 0; i < (rows as unknown[]).length; ++i) {\n\t\t\t\t(rows as unknown[])[i] = JSON.parse((rows as unknown[])[i] as string);\n\t\t\t}\n\n\t\t\treturn this.useJitMapper\n\t\t\t\t? (this.jitMapper = this.jitMapper as RelationalRowsMapper<T['get'][]>\n\t\t\t\t\t?? makeJitRqbMapper<T['get'][]>(this.rqbConfig!))(rows as Record<string, unknown>[])\n\t\t\t\t: (this.customResultMapper as (\n\t\t\t\t\trows: Record<string, unknown>[],\n\t\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t\t) => unknown)(rows as Record<string, unknown>[]);\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn (this.customResultMapper as (rows: unknown[][]) => unknown)(rows as unknown[][]) as T['all'];\n\t\t}\n\n\t\treturn this.useJitMapper\n\t\t\t? (this.jitMapper = this.jitMapper as RowsMapper<T['execute']>\n\t\t\t\t?? makeJitQueryMapper(this.fields!, this.joinsNotNullableMap))(rows as unknown[][])\n\t\t\t: (rows as unknown[][]).map((row) => mapResultRow(this.fields!, row, this.joinsNotNullableMap));\n\t}\n\n\tasync all(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tif (this.isRqbV2Query) return this.allRqbV2(placeholderValues);\n\n\t\tconst { query, logger, client } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst { rows } = await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await (client as AsyncRemoteCallback)(query.sql, params, 'all');\n\t\t});\n\t\treturn this.mapAllResult(rows);\n\t}\n\n\tasync get(placeholderValues?: Record<string, unknown>): Promise<T['get']> {\n\t\tif (this.isRqbV2Query) return this.getRqbV2(placeholderValues);\n\n\t\tconst { query, logger, client } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst clientResult = await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await (client as AsyncRemoteCallback)(query.sql, params, 'get');\n\t\t});\n\n\t\treturn this.mapGetResult(clientResult.rows);\n\t}\n\n\tprivate async allRqbV2(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tconst { query, logger, client } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst { rows } = await (client as AsyncRemoteCallback)(query.sql, params, 'all');\n\t\treturn this.mapAllResult(rows);\n\t}\n\n\tprivate async getRqbV2(placeholderValues?: Record<string, unknown>): Promise<T['get']> {\n\t\tconst { query, logger, client } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst { rows } = await (client as AsyncRemoteCallback)(query.sql, params, 'get');\n\n\t\treturn this.mapGetResult(rows);\n\t}\n\n\toverride mapGetResult(rows: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\trows = (rows as SqliteRemoteResult).rows;\n\t\t}\n\n\t\tconst row = rows as unknown[] | string;\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn row;\n\t\t}\n\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (this.isRqbV2Query) {\n\t\t\treturn this.useJitMapper\n\t\t\t\t? (this.jitMapper = this.jitMapper as RelationalRowsMapper<T['get'][]>\n\t\t\t\t\t?? makeJitRqbMapper<T['get'][]>(this.rqbConfig!))([JSON.parse(row as string) as Record<string, unknown>])\n\t\t\t\t: (this.customResultMapper as (\n\t\t\t\t\trows: Record<string, unknown>[],\n\t\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t\t) => unknown)([JSON.parse(row as string) as Record<string, unknown>]);\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn (this.customResultMapper as (rows: unknown[][]) => unknown)(\n\t\t\t\t[rows] as unknown[][],\n\t\t\t) as T['get'];\n\t\t}\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'][]>(this.fields!, this.joinsNotNullableMap))(\n\t\t\t\t\t[row as unknown[]],\n\t\t\t\t)[0]\n\t\t\t: mapResultRow(this.fields!, row as unknown[], this.joinsNotNullableMap);\n\t}\n\n\tasync values<T extends any[] = unknown[]>(placeholderValues?: Record<string, unknown>): Promise<T[]> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tconst clientResult = await this.queryWithCache(this.query.sql, params, async () => {\n\t\t\treturn await (this.client as AsyncRemoteCallback)(this.query.sql, params, 'values');\n\t\t});\n\t\treturn clientResult.rows as T[];\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session.cjs","names":["SQLiteSession","entityKind","NoopLogger","NoopCache","sql","SQLiteTransaction","SQLitePreparedQuery"],"sources":["../../src/sqlite-proxy/session.ts"],"sourcesContent":["import type * as V1 from '~/_relations.ts';\nimport type { BatchItem } from '~/batch.ts';\nimport { type Cache, NoopCache } from '~/cache/core/index.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport {\n\ttype AnyRelations,\n\tmakeJitRqbMapper,\n\ttype RelationalQueryMapperConfig,\n\ttype RelationalRowsMapper,\n} from '~/relations.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport { fillPlaceholders, type Query, 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\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 { AsyncBatchRemoteCallback, AsyncRemoteCallback, RemoteCallback, SqliteRemoteResult } from './driver.ts';\n\nexport interface SQLiteRemoteSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n\tuseJitMappers?: boolean;\n}\n\nexport type PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class SQLiteRemoteSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteSession<'async', SqliteRemoteResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SQLiteRemoteSession';\n\n\tprivate logger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\tprivate client: RemoteCallback,\n\t\tdialect: SQLiteAsyncDialect,\n\t\tprivate relations: TRelations,\n\t\tprivate schema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate batchCLient?: AsyncBatchRemoteCallback,\n\t\tprivate options: SQLiteRemoteSessionOptions = {},\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): RemotePreparedQuery<T> {\n\t\treturn new RemotePreparedQuery(\n\t\t\tthis.client,\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.useJitMappers,\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): RemotePreparedQuery<T, true> {\n\t\treturn new RemotePreparedQuery(\n\t\t\tthis.client,\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.useJitMappers,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t\tconfig,\n\t\t);\n\t}\n\n\tasync batch<T extends BatchItem<'sqlite'>[] | readonly BatchItem<'sqlite'>[]>(queries: T) {\n\t\tconst preparedQueries: PreparedQuery[] = [];\n\t\tconst builtQueries: { sql: string; params: any[]; method: 'run' | 'all' | 'values' | 'get' }[] = [];\n\n\t\tfor (const query of queries) {\n\t\t\tconst preparedQuery = query._prepare();\n\t\t\tconst builtQuery = (preparedQuery as RemotePreparedQuery).getQuery();\n\t\t\tpreparedQueries.push(preparedQuery);\n\t\t\tbuiltQueries.push({ sql: builtQuery.sql, params: builtQuery.params, method: builtQuery.method });\n\t\t}\n\n\t\tconst batchResults = await (this.batchCLient as AsyncBatchRemoteCallback)(builtQueries);\n\t\treturn batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true));\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: SQLiteProxyTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t\tconfig?: SQLiteTransactionConfig,\n\t): Promise<T> {\n\t\tconst tx = new SQLiteProxyTransaction('async', this.dialect, this, this.relations, this.schema, undefined, true);\n\t\tawait this.run(sql.raw(`begin${config?.behavior ? ' ' + config.behavior : ''}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.run(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait this.run(sql`rollback`);\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\toverride extractRawAllValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as SqliteRemoteResult).rows;\n\t}\n\n\toverride extractRawGetValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as SqliteRemoteResult).rows![0];\n\t}\n\n\toverride extractRawValuesValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as SqliteRemoteResult).rows;\n\t}\n}\n\nexport class SQLiteProxyTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteTransaction<'async', SqliteRemoteResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SQLiteProxyTransaction';\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: SQLiteProxyTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\t\tconst tx = new SQLiteProxyTransaction(\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\ttrue,\n\t\t);\n\t\tawait this.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\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 RemotePreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig, TIsRqbV2 extends boolean = false>\n\textends SQLitePreparedQuery<\n\t\t{ type: 'async'; run: SqliteRemoteResult; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n\t>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteProxyPreparedQuery';\n\n\tprivate method: SQLiteExecuteMethod;\n\tprivate jitMapper?: RowsMapper<any> | RelationalRowsMapper<any>;\n\n\tconstructor(\n\t\tprivate client: RemoteCallback,\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\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate useJitMappers: boolean | undefined,\n\t\t/** @internal */ public customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, 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\tthis.method = executeMethod;\n\t}\n\n\toverride getQuery(): Query & { method: SQLiteExecuteMethod } {\n\t\treturn { ...this.query, method: this.method };\n\t}\n\n\tasync run(placeholderValues?: Record<string, unknown>): Promise<SqliteRemoteResult> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn await this.queryWithCache(this.query.sql, params, async () => {\n\t\t\treturn await (this.client as AsyncRemoteCallback)(this.query.sql, params, 'run');\n\t\t});\n\t}\n\n\toverride mapAllResult(rows: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\trows = (rows as SqliteRemoteResult).rows;\n\t\t}\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn rows;\n\t\t}\n\n\t\tif (this.isRqbV2Query) {\n\t\t\tfor (let i = 0; i < (rows as unknown[]).length; ++i) {\n\t\t\t\t(rows as unknown[])[i] = JSON.parse((rows as unknown[])[i] as string);\n\t\t\t}\n\n\t\t\treturn this.useJitMappers\n\t\t\t\t? (this.jitMapper = this.jitMapper as RelationalRowsMapper<T['get'][]>\n\t\t\t\t\t?? makeJitRqbMapper<T['get'][]>(this.rqbConfig!))(rows as Record<string, unknown>[])\n\t\t\t\t: (this.customResultMapper as (\n\t\t\t\t\trows: Record<string, unknown>[],\n\t\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t\t) => unknown)(rows as Record<string, unknown>[]);\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn (this.customResultMapper as (rows: unknown[][]) => unknown)(rows as unknown[][]) as T['all'];\n\t\t}\n\n\t\treturn this.useJitMappers\n\t\t\t? (this.jitMapper = this.jitMapper as RowsMapper<T['execute']>\n\t\t\t\t?? makeJitQueryMapper(this.fields!, this.joinsNotNullableMap))(rows as unknown[][])\n\t\t\t: (rows as unknown[][]).map((row) => mapResultRow(this.fields!, row, this.joinsNotNullableMap));\n\t}\n\n\tasync all(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tif (this.isRqbV2Query) return this.allRqbV2(placeholderValues);\n\n\t\tconst { query, logger, client } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst { rows } = await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await (client as AsyncRemoteCallback)(query.sql, params, 'all');\n\t\t});\n\t\treturn this.mapAllResult(rows);\n\t}\n\n\tasync get(placeholderValues?: Record<string, unknown>): Promise<T['get']> {\n\t\tif (this.isRqbV2Query) return this.getRqbV2(placeholderValues);\n\n\t\tconst { query, logger, client } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst clientResult = await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await (client as AsyncRemoteCallback)(query.sql, params, 'get');\n\t\t});\n\n\t\treturn this.mapGetResult(clientResult.rows);\n\t}\n\n\tprivate async allRqbV2(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tconst { query, logger, client } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst { rows } = await (client as AsyncRemoteCallback)(query.sql, params, 'all');\n\t\treturn this.mapAllResult(rows);\n\t}\n\n\tprivate async getRqbV2(placeholderValues?: Record<string, unknown>): Promise<T['get']> {\n\t\tconst { query, logger, client } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst { rows } = await (client as AsyncRemoteCallback)(query.sql, params, 'get');\n\n\t\treturn this.mapGetResult(rows);\n\t}\n\n\toverride mapGetResult(rows: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\trows = (rows as SqliteRemoteResult).rows;\n\t\t}\n\n\t\tconst row = rows as unknown[] | string;\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn row;\n\t\t}\n\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (this.isRqbV2Query) {\n\t\t\treturn this.useJitMappers\n\t\t\t\t? (this.jitMapper = this.jitMapper as RelationalRowsMapper<T['get'][]>\n\t\t\t\t\t?? makeJitRqbMapper<T['get'][]>(this.rqbConfig!))([JSON.parse(row as string) as Record<string, unknown>])\n\t\t\t\t: (this.customResultMapper as (\n\t\t\t\t\trows: Record<string, unknown>[],\n\t\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t\t) => unknown)([JSON.parse(row as string) as Record<string, unknown>]);\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn (this.customResultMapper as (rows: unknown[][]) => unknown)(\n\t\t\t\t[rows] as unknown[][],\n\t\t\t) as T['get'];\n\t\t}\n\n\t\treturn this.useJitMappers\n\t\t\t? (this.jitMapper = this.jitMapper as RowsMapper<T['get'][]>\n\t\t\t\t?? makeJitQueryMapper<T['get'][]>(this.fields!, this.joinsNotNullableMap))(\n\t\t\t\t\t[row as unknown[]],\n\t\t\t\t)[0]\n\t\t\t: mapResultRow(this.fields!, row as unknown[], this.joinsNotNullableMap);\n\t}\n\n\tasync values<T extends any[] = unknown[]>(placeholderValues?: Record<string, unknown>): Promise<T[]> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tconst clientResult = await this.queryWithCache(this.query.sql, params, async () => {\n\t\t\treturn await (this.client as AsyncRemoteCallback)(this.query.sql, params, 'values');\n\t\t});\n\t\treturn clientResult.rows as T[];\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ import { BatchItem } from "../batch.cjs";
|
|
|
16
16
|
interface SQLiteRemoteSessionOptions {
|
|
17
17
|
logger?: Logger;
|
|
18
18
|
cache?: Cache;
|
|
19
|
-
|
|
19
|
+
useJitMappers?: boolean;
|
|
20
20
|
}
|
|
21
21
|
type PreparedQueryConfig = Omit<PreparedQueryConfig$1, 'statement' | 'run'>;
|
|
22
22
|
declare class SQLiteRemoteSession<TFullSchema extends Record<string, unknown>, TRelations extends AnyRelations, TSchema extends V1.TablesRelationalConfig> extends SQLiteSession<'async', SqliteRemoteResult, TFullSchema, TRelations, TSchema> {
|
|
@@ -55,7 +55,7 @@ declare class RemotePreparedQuery<T extends PreparedQueryConfig = PreparedQueryC
|
|
|
55
55
|
private client;
|
|
56
56
|
private logger;
|
|
57
57
|
private fields;
|
|
58
|
-
private
|
|
58
|
+
private useJitMappers;
|
|
59
59
|
private isRqbV2Query?;
|
|
60
60
|
private rqbConfig?;
|
|
61
61
|
static readonly [entityKind]: string;
|
|
@@ -64,7 +64,7 @@ declare class RemotePreparedQuery<T extends PreparedQueryConfig = PreparedQueryC
|
|
|
64
64
|
constructor(client: RemoteCallback, query: Query, logger: Logger, cache: Cache, queryMetadata: {
|
|
65
65
|
type: 'select' | 'update' | 'delete' | 'insert';
|
|
66
66
|
tables: string[];
|
|
67
|
-
} | undefined, cacheConfig: WithCacheConfig | undefined, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod,
|
|
67
|
+
} | undefined, cacheConfig: WithCacheConfig | undefined, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, useJitMappers: boolean | undefined, /** @internal */
|
|
68
68
|
|
|
69
69
|
customResultMapper?: ((rows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][]) => unknown) | undefined, isRqbV2Query?: TIsRqbV2 | undefined, rqbConfig?: RelationalQueryMapperConfig | undefined);
|
|
70
70
|
getQuery(): Query & {
|
|
@@ -16,7 +16,7 @@ import { BatchItem } from "../batch.js";
|
|
|
16
16
|
interface SQLiteRemoteSessionOptions {
|
|
17
17
|
logger?: Logger;
|
|
18
18
|
cache?: Cache;
|
|
19
|
-
|
|
19
|
+
useJitMappers?: boolean;
|
|
20
20
|
}
|
|
21
21
|
type PreparedQueryConfig = Omit<PreparedQueryConfig$1, 'statement' | 'run'>;
|
|
22
22
|
declare class SQLiteRemoteSession<TFullSchema extends Record<string, unknown>, TRelations extends AnyRelations, TSchema extends V1.TablesRelationalConfig> extends SQLiteSession<'async', SqliteRemoteResult, TFullSchema, TRelations, TSchema> {
|
|
@@ -55,7 +55,7 @@ declare class RemotePreparedQuery<T extends PreparedQueryConfig = PreparedQueryC
|
|
|
55
55
|
private client;
|
|
56
56
|
private logger;
|
|
57
57
|
private fields;
|
|
58
|
-
private
|
|
58
|
+
private useJitMappers;
|
|
59
59
|
private isRqbV2Query?;
|
|
60
60
|
private rqbConfig?;
|
|
61
61
|
static readonly [entityKind]: string;
|
|
@@ -64,7 +64,7 @@ declare class RemotePreparedQuery<T extends PreparedQueryConfig = PreparedQueryC
|
|
|
64
64
|
constructor(client: RemoteCallback, query: Query, logger: Logger, cache: Cache, queryMetadata: {
|
|
65
65
|
type: 'select' | 'update' | 'delete' | 'insert';
|
|
66
66
|
tables: string[];
|
|
67
|
-
} | undefined, cacheConfig: WithCacheConfig | undefined, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod,
|
|
67
|
+
} | undefined, cacheConfig: WithCacheConfig | undefined, fields: SelectedFieldsOrdered | undefined, executeMethod: SQLiteExecuteMethod, useJitMappers: boolean | undefined, /** @internal */
|
|
68
68
|
|
|
69
69
|
customResultMapper?: ((rows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][]) => unknown) | undefined, isRqbV2Query?: TIsRqbV2 | undefined, rqbConfig?: RelationalQueryMapperConfig | undefined);
|
|
70
70
|
getQuery(): Query & {
|
package/sqlite-proxy/session.js
CHANGED
|
@@ -23,10 +23,10 @@ var SQLiteRemoteSession = class extends SQLiteSession {
|
|
|
23
23
|
this.cache = options.cache ?? new NoopCache();
|
|
24
24
|
}
|
|
25
25
|
prepareQuery(query, fields, executeMethod, customResultMapper, queryMetadata, cacheConfig) {
|
|
26
|
-
return new RemotePreparedQuery(this.client, query, this.logger, this.cache, queryMetadata, cacheConfig, fields, executeMethod, this.options.
|
|
26
|
+
return new RemotePreparedQuery(this.client, query, this.logger, this.cache, queryMetadata, cacheConfig, fields, executeMethod, this.options.useJitMappers, customResultMapper);
|
|
27
27
|
}
|
|
28
28
|
prepareRelationalQuery(query, fields, executeMethod, customResultMapper, config) {
|
|
29
|
-
return new RemotePreparedQuery(this.client, query, this.logger, this.cache, void 0, void 0, fields, executeMethod, this.options.
|
|
29
|
+
return new RemotePreparedQuery(this.client, query, this.logger, this.cache, void 0, void 0, fields, executeMethod, this.options.useJitMappers, customResultMapper, true, config);
|
|
30
30
|
}
|
|
31
31
|
async batch(queries) {
|
|
32
32
|
const preparedQueries = [];
|
|
@@ -85,12 +85,12 @@ var RemotePreparedQuery = class extends SQLitePreparedQuery {
|
|
|
85
85
|
static [entityKind] = "SQLiteProxyPreparedQuery";
|
|
86
86
|
method;
|
|
87
87
|
jitMapper;
|
|
88
|
-
constructor(client, query, logger, cache, queryMetadata, cacheConfig, fields, executeMethod,
|
|
88
|
+
constructor(client, query, logger, cache, queryMetadata, cacheConfig, fields, executeMethod, useJitMappers, customResultMapper, isRqbV2Query, rqbConfig) {
|
|
89
89
|
super("async", executeMethod, query, cache, queryMetadata, cacheConfig);
|
|
90
90
|
this.client = client;
|
|
91
91
|
this.logger = logger;
|
|
92
92
|
this.fields = fields;
|
|
93
|
-
this.
|
|
93
|
+
this.useJitMappers = useJitMappers;
|
|
94
94
|
this.customResultMapper = customResultMapper;
|
|
95
95
|
this.isRqbV2Query = isRqbV2Query;
|
|
96
96
|
this.rqbConfig = rqbConfig;
|
|
@@ -114,10 +114,10 @@ var RemotePreparedQuery = class extends SQLitePreparedQuery {
|
|
|
114
114
|
if (!this.fields && !this.customResultMapper) return rows;
|
|
115
115
|
if (this.isRqbV2Query) {
|
|
116
116
|
for (let i = 0; i < rows.length; ++i) rows[i] = JSON.parse(rows[i]);
|
|
117
|
-
return this.
|
|
117
|
+
return this.useJitMappers ? (this.jitMapper = this.jitMapper ?? makeJitRqbMapper(this.rqbConfig))(rows) : this.customResultMapper(rows);
|
|
118
118
|
}
|
|
119
119
|
if (this.customResultMapper) return this.customResultMapper(rows);
|
|
120
|
-
return this.
|
|
120
|
+
return this.useJitMappers ? (this.jitMapper = this.jitMapper ?? makeJitQueryMapper(this.fields, this.joinsNotNullableMap))(rows) : rows.map((row) => mapResultRow(this.fields, row, this.joinsNotNullableMap));
|
|
121
121
|
}
|
|
122
122
|
async all(placeholderValues) {
|
|
123
123
|
if (this.isRqbV2Query) return this.allRqbV2(placeholderValues);
|
|
@@ -158,9 +158,9 @@ var RemotePreparedQuery = class extends SQLitePreparedQuery {
|
|
|
158
158
|
const row = rows;
|
|
159
159
|
if (!this.fields && !this.customResultMapper) return row;
|
|
160
160
|
if (!row) return;
|
|
161
|
-
if (this.isRqbV2Query) return this.
|
|
161
|
+
if (this.isRqbV2Query) return this.useJitMappers ? (this.jitMapper = this.jitMapper ?? makeJitRqbMapper(this.rqbConfig))([JSON.parse(row)]) : this.customResultMapper([JSON.parse(row)]);
|
|
162
162
|
if (this.customResultMapper) return this.customResultMapper([rows]);
|
|
163
|
-
return this.
|
|
163
|
+
return this.useJitMappers ? (this.jitMapper = this.jitMapper ?? makeJitQueryMapper(this.fields, this.joinsNotNullableMap))([row])[0] : mapResultRow(this.fields, row, this.joinsNotNullableMap);
|
|
164
164
|
}
|
|
165
165
|
async values(placeholderValues) {
|
|
166
166
|
const params = fillPlaceholders(this.query.params, placeholderValues ?? {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","names":[],"sources":["../../src/sqlite-proxy/session.ts"],"sourcesContent":["import type * as V1 from '~/_relations.ts';\nimport type { BatchItem } from '~/batch.ts';\nimport { type Cache, NoopCache } from '~/cache/core/index.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport {\n\ttype AnyRelations,\n\tmakeJitRqbMapper,\n\ttype RelationalQueryMapperConfig,\n\ttype RelationalRowsMapper,\n} from '~/relations.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport { fillPlaceholders, type Query, 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\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 { AsyncBatchRemoteCallback, AsyncRemoteCallback, RemoteCallback, SqliteRemoteResult } from './driver.ts';\n\nexport interface SQLiteRemoteSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n\tuseJitMapper?: boolean;\n}\n\nexport type PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class SQLiteRemoteSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteSession<'async', SqliteRemoteResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SQLiteRemoteSession';\n\n\tprivate logger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\tprivate client: RemoteCallback,\n\t\tdialect: SQLiteAsyncDialect,\n\t\tprivate relations: TRelations,\n\t\tprivate schema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate batchCLient?: AsyncBatchRemoteCallback,\n\t\tprivate options: SQLiteRemoteSessionOptions = {},\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): RemotePreparedQuery<T> {\n\t\treturn new RemotePreparedQuery(\n\t\t\tthis.client,\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): RemotePreparedQuery<T, true> {\n\t\treturn new RemotePreparedQuery(\n\t\t\tthis.client,\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\tasync batch<T extends BatchItem<'sqlite'>[] | readonly BatchItem<'sqlite'>[]>(queries: T) {\n\t\tconst preparedQueries: PreparedQuery[] = [];\n\t\tconst builtQueries: { sql: string; params: any[]; method: 'run' | 'all' | 'values' | 'get' }[] = [];\n\n\t\tfor (const query of queries) {\n\t\t\tconst preparedQuery = query._prepare();\n\t\t\tconst builtQuery = (preparedQuery as RemotePreparedQuery).getQuery();\n\t\t\tpreparedQueries.push(preparedQuery);\n\t\t\tbuiltQueries.push({ sql: builtQuery.sql, params: builtQuery.params, method: builtQuery.method });\n\t\t}\n\n\t\tconst batchResults = await (this.batchCLient as AsyncBatchRemoteCallback)(builtQueries);\n\t\treturn batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true));\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: SQLiteProxyTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t\tconfig?: SQLiteTransactionConfig,\n\t): Promise<T> {\n\t\tconst tx = new SQLiteProxyTransaction('async', this.dialect, this, this.relations, this.schema, undefined, true);\n\t\tawait this.run(sql.raw(`begin${config?.behavior ? ' ' + config.behavior : ''}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.run(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait this.run(sql`rollback`);\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\toverride extractRawAllValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as SqliteRemoteResult).rows;\n\t}\n\n\toverride extractRawGetValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as SqliteRemoteResult).rows![0];\n\t}\n\n\toverride extractRawValuesValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as SqliteRemoteResult).rows;\n\t}\n}\n\nexport class SQLiteProxyTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteTransaction<'async', SqliteRemoteResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SQLiteProxyTransaction';\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: SQLiteProxyTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\t\tconst tx = new SQLiteProxyTransaction(\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\ttrue,\n\t\t);\n\t\tawait this.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\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 RemotePreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig, TIsRqbV2 extends boolean = false>\n\textends SQLitePreparedQuery<\n\t\t{ type: 'async'; run: SqliteRemoteResult; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n\t>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteProxyPreparedQuery';\n\n\tprivate method: SQLiteExecuteMethod;\n\tprivate jitMapper?: RowsMapper<any> | RelationalRowsMapper<any>;\n\n\tconstructor(\n\t\tprivate client: RemoteCallback,\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\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate useJitMapper: boolean | undefined,\n\t\t/** @internal */ public customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, 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\tthis.method = executeMethod;\n\t}\n\n\toverride getQuery(): Query & { method: SQLiteExecuteMethod } {\n\t\treturn { ...this.query, method: this.method };\n\t}\n\n\tasync run(placeholderValues?: Record<string, unknown>): Promise<SqliteRemoteResult> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn await this.queryWithCache(this.query.sql, params, async () => {\n\t\t\treturn await (this.client as AsyncRemoteCallback)(this.query.sql, params, 'run');\n\t\t});\n\t}\n\n\toverride mapAllResult(rows: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\trows = (rows as SqliteRemoteResult).rows;\n\t\t}\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn rows;\n\t\t}\n\n\t\tif (this.isRqbV2Query) {\n\t\t\tfor (let i = 0; i < (rows as unknown[]).length; ++i) {\n\t\t\t\t(rows as unknown[])[i] = JSON.parse((rows as unknown[])[i] as string);\n\t\t\t}\n\n\t\t\treturn this.useJitMapper\n\t\t\t\t? (this.jitMapper = this.jitMapper as RelationalRowsMapper<T['get'][]>\n\t\t\t\t\t?? makeJitRqbMapper<T['get'][]>(this.rqbConfig!))(rows as Record<string, unknown>[])\n\t\t\t\t: (this.customResultMapper as (\n\t\t\t\t\trows: Record<string, unknown>[],\n\t\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t\t) => unknown)(rows as Record<string, unknown>[]);\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn (this.customResultMapper as (rows: unknown[][]) => unknown)(rows as unknown[][]) as T['all'];\n\t\t}\n\n\t\treturn this.useJitMapper\n\t\t\t? (this.jitMapper = this.jitMapper as RowsMapper<T['execute']>\n\t\t\t\t?? makeJitQueryMapper(this.fields!, this.joinsNotNullableMap))(rows as unknown[][])\n\t\t\t: (rows as unknown[][]).map((row) => mapResultRow(this.fields!, row, this.joinsNotNullableMap));\n\t}\n\n\tasync all(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tif (this.isRqbV2Query) return this.allRqbV2(placeholderValues);\n\n\t\tconst { query, logger, client } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst { rows } = await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await (client as AsyncRemoteCallback)(query.sql, params, 'all');\n\t\t});\n\t\treturn this.mapAllResult(rows);\n\t}\n\n\tasync get(placeholderValues?: Record<string, unknown>): Promise<T['get']> {\n\t\tif (this.isRqbV2Query) return this.getRqbV2(placeholderValues);\n\n\t\tconst { query, logger, client } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst clientResult = await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await (client as AsyncRemoteCallback)(query.sql, params, 'get');\n\t\t});\n\n\t\treturn this.mapGetResult(clientResult.rows);\n\t}\n\n\tprivate async allRqbV2(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tconst { query, logger, client } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst { rows } = await (client as AsyncRemoteCallback)(query.sql, params, 'all');\n\t\treturn this.mapAllResult(rows);\n\t}\n\n\tprivate async getRqbV2(placeholderValues?: Record<string, unknown>): Promise<T['get']> {\n\t\tconst { query, logger, client } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst { rows } = await (client as AsyncRemoteCallback)(query.sql, params, 'get');\n\n\t\treturn this.mapGetResult(rows);\n\t}\n\n\toverride mapGetResult(rows: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\trows = (rows as SqliteRemoteResult).rows;\n\t\t}\n\n\t\tconst row = rows as unknown[] | string;\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn row;\n\t\t}\n\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (this.isRqbV2Query) {\n\t\t\treturn this.useJitMapper\n\t\t\t\t? (this.jitMapper = this.jitMapper as RelationalRowsMapper<T['get'][]>\n\t\t\t\t\t?? makeJitRqbMapper<T['get'][]>(this.rqbConfig!))([JSON.parse(row as string) as Record<string, unknown>])\n\t\t\t\t: (this.customResultMapper as (\n\t\t\t\t\trows: Record<string, unknown>[],\n\t\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t\t) => unknown)([JSON.parse(row as string) as Record<string, unknown>]);\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn (this.customResultMapper as (rows: unknown[][]) => unknown)(\n\t\t\t\t[rows] as unknown[][],\n\t\t\t) as T['get'];\n\t\t}\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'][]>(this.fields!, this.joinsNotNullableMap))(\n\t\t\t\t\t[row as unknown[]],\n\t\t\t\t)[0]\n\t\t\t: mapResultRow(this.fields!, row as unknown[], this.joinsNotNullableMap);\n\t}\n\n\tasync values<T extends any[] = unknown[]>(placeholderValues?: Record<string, unknown>): Promise<T[]> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tconst clientResult = await this.queryWithCache(this.query.sql, params, async () => {\n\t\t\treturn await (this.client as AsyncRemoteCallback)(this.query.sql, params, 'values');\n\t\t});\n\t\treturn clientResult.rows as T[];\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session.js","names":[],"sources":["../../src/sqlite-proxy/session.ts"],"sourcesContent":["import type * as V1 from '~/_relations.ts';\nimport type { BatchItem } from '~/batch.ts';\nimport { type Cache, NoopCache } from '~/cache/core/index.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport {\n\ttype AnyRelations,\n\tmakeJitRqbMapper,\n\ttype RelationalQueryMapperConfig,\n\ttype RelationalRowsMapper,\n} from '~/relations.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport { fillPlaceholders, type Query, 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\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 { AsyncBatchRemoteCallback, AsyncRemoteCallback, RemoteCallback, SqliteRemoteResult } from './driver.ts';\n\nexport interface SQLiteRemoteSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n\tuseJitMappers?: boolean;\n}\n\nexport type PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class SQLiteRemoteSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteSession<'async', SqliteRemoteResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SQLiteRemoteSession';\n\n\tprivate logger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\tprivate client: RemoteCallback,\n\t\tdialect: SQLiteAsyncDialect,\n\t\tprivate relations: TRelations,\n\t\tprivate schema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate batchCLient?: AsyncBatchRemoteCallback,\n\t\tprivate options: SQLiteRemoteSessionOptions = {},\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): RemotePreparedQuery<T> {\n\t\treturn new RemotePreparedQuery(\n\t\t\tthis.client,\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.useJitMappers,\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): RemotePreparedQuery<T, true> {\n\t\treturn new RemotePreparedQuery(\n\t\t\tthis.client,\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.useJitMappers,\n\t\t\tcustomResultMapper,\n\t\t\ttrue,\n\t\t\tconfig,\n\t\t);\n\t}\n\n\tasync batch<T extends BatchItem<'sqlite'>[] | readonly BatchItem<'sqlite'>[]>(queries: T) {\n\t\tconst preparedQueries: PreparedQuery[] = [];\n\t\tconst builtQueries: { sql: string; params: any[]; method: 'run' | 'all' | 'values' | 'get' }[] = [];\n\n\t\tfor (const query of queries) {\n\t\t\tconst preparedQuery = query._prepare();\n\t\t\tconst builtQuery = (preparedQuery as RemotePreparedQuery).getQuery();\n\t\t\tpreparedQueries.push(preparedQuery);\n\t\t\tbuiltQueries.push({ sql: builtQuery.sql, params: builtQuery.params, method: builtQuery.method });\n\t\t}\n\n\t\tconst batchResults = await (this.batchCLient as AsyncBatchRemoteCallback)(builtQueries);\n\t\treturn batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true));\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: SQLiteProxyTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t\tconfig?: SQLiteTransactionConfig,\n\t): Promise<T> {\n\t\tconst tx = new SQLiteProxyTransaction('async', this.dialect, this, this.relations, this.schema, undefined, true);\n\t\tawait this.run(sql.raw(`begin${config?.behavior ? ' ' + config.behavior : ''}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.run(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait this.run(sql`rollback`);\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\toverride extractRawAllValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as SqliteRemoteResult).rows;\n\t}\n\n\toverride extractRawGetValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as SqliteRemoteResult).rows![0];\n\t}\n\n\toverride extractRawValuesValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as SqliteRemoteResult).rows;\n\t}\n}\n\nexport class SQLiteProxyTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SQLiteTransaction<'async', SqliteRemoteResult, TFullSchema, TRelations, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SQLiteProxyTransaction';\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: SQLiteProxyTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\t\tconst tx = new SQLiteProxyTransaction(\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\ttrue,\n\t\t);\n\t\tawait this.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\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 RemotePreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig, TIsRqbV2 extends boolean = false>\n\textends SQLitePreparedQuery<\n\t\t{ type: 'async'; run: SqliteRemoteResult; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n\t>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteProxyPreparedQuery';\n\n\tprivate method: SQLiteExecuteMethod;\n\tprivate jitMapper?: RowsMapper<any> | RelationalRowsMapper<any>;\n\n\tconstructor(\n\t\tprivate client: RemoteCallback,\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\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate useJitMappers: boolean | undefined,\n\t\t/** @internal */ public customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, 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\tthis.method = executeMethod;\n\t}\n\n\toverride getQuery(): Query & { method: SQLiteExecuteMethod } {\n\t\treturn { ...this.query, method: this.method };\n\t}\n\n\tasync run(placeholderValues?: Record<string, unknown>): Promise<SqliteRemoteResult> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn await this.queryWithCache(this.query.sql, params, async () => {\n\t\t\treturn await (this.client as AsyncRemoteCallback)(this.query.sql, params, 'run');\n\t\t});\n\t}\n\n\toverride mapAllResult(rows: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\trows = (rows as SqliteRemoteResult).rows;\n\t\t}\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn rows;\n\t\t}\n\n\t\tif (this.isRqbV2Query) {\n\t\t\tfor (let i = 0; i < (rows as unknown[]).length; ++i) {\n\t\t\t\t(rows as unknown[])[i] = JSON.parse((rows as unknown[])[i] as string);\n\t\t\t}\n\n\t\t\treturn this.useJitMappers\n\t\t\t\t? (this.jitMapper = this.jitMapper as RelationalRowsMapper<T['get'][]>\n\t\t\t\t\t?? makeJitRqbMapper<T['get'][]>(this.rqbConfig!))(rows as Record<string, unknown>[])\n\t\t\t\t: (this.customResultMapper as (\n\t\t\t\t\trows: Record<string, unknown>[],\n\t\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t\t) => unknown)(rows as Record<string, unknown>[]);\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn (this.customResultMapper as (rows: unknown[][]) => unknown)(rows as unknown[][]) as T['all'];\n\t\t}\n\n\t\treturn this.useJitMappers\n\t\t\t? (this.jitMapper = this.jitMapper as RowsMapper<T['execute']>\n\t\t\t\t?? makeJitQueryMapper(this.fields!, this.joinsNotNullableMap))(rows as unknown[][])\n\t\t\t: (rows as unknown[][]).map((row) => mapResultRow(this.fields!, row, this.joinsNotNullableMap));\n\t}\n\n\tasync all(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tif (this.isRqbV2Query) return this.allRqbV2(placeholderValues);\n\n\t\tconst { query, logger, client } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst { rows } = await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await (client as AsyncRemoteCallback)(query.sql, params, 'all');\n\t\t});\n\t\treturn this.mapAllResult(rows);\n\t}\n\n\tasync get(placeholderValues?: Record<string, unknown>): Promise<T['get']> {\n\t\tif (this.isRqbV2Query) return this.getRqbV2(placeholderValues);\n\n\t\tconst { query, logger, client } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst clientResult = await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await (client as AsyncRemoteCallback)(query.sql, params, 'get');\n\t\t});\n\n\t\treturn this.mapGetResult(clientResult.rows);\n\t}\n\n\tprivate async allRqbV2(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tconst { query, logger, client } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst { rows } = await (client as AsyncRemoteCallback)(query.sql, params, 'all');\n\t\treturn this.mapAllResult(rows);\n\t}\n\n\tprivate async getRqbV2(placeholderValues?: Record<string, unknown>): Promise<T['get']> {\n\t\tconst { query, logger, client } = this;\n\n\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\tlogger.logQuery(query.sql, params);\n\n\t\tconst { rows } = await (client as AsyncRemoteCallback)(query.sql, params, 'get');\n\n\t\treturn this.mapGetResult(rows);\n\t}\n\n\toverride mapGetResult(rows: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\trows = (rows as SqliteRemoteResult).rows;\n\t\t}\n\n\t\tconst row = rows as unknown[] | string;\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn row;\n\t\t}\n\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (this.isRqbV2Query) {\n\t\t\treturn this.useJitMappers\n\t\t\t\t? (this.jitMapper = this.jitMapper as RelationalRowsMapper<T['get'][]>\n\t\t\t\t\t?? makeJitRqbMapper<T['get'][]>(this.rqbConfig!))([JSON.parse(row as string) as Record<string, unknown>])\n\t\t\t\t: (this.customResultMapper as (\n\t\t\t\t\trows: Record<string, unknown>[],\n\t\t\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t\t\t) => unknown)([JSON.parse(row as string) as Record<string, unknown>]);\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn (this.customResultMapper as (rows: unknown[][]) => unknown)(\n\t\t\t\t[rows] as unknown[][],\n\t\t\t) as T['get'];\n\t\t}\n\n\t\treturn this.useJitMappers\n\t\t\t? (this.jitMapper = this.jitMapper as RowsMapper<T['get'][]>\n\t\t\t\t?? makeJitQueryMapper<T['get'][]>(this.fields!, this.joinsNotNullableMap))(\n\t\t\t\t\t[row as unknown[]],\n\t\t\t\t)[0]\n\t\t\t: mapResultRow(this.fields!, row as unknown[], this.joinsNotNullableMap);\n\t}\n\n\tasync values<T extends any[] = unknown[]>(placeholderValues?: Record<string, unknown>): Promise<T[]> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\tconst clientResult = await this.queryWithCache(this.query.sql, params, async () => {\n\t\t\treturn await (this.client as AsyncRemoteCallback)(this.query.sql, params, 'values');\n\t\t});\n\t\treturn clientResult.rows as T[];\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
2
2
|
const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
|
|
3
3
|
const require_tidb_serverless_session = require('./session.cjs');
|
|
4
4
|
let __entity_ts = require("../entity.cjs");
|
|
5
|
+
let __utils_ts = require("../utils.cjs");
|
|
5
6
|
let __logger_ts = require("../logger.cjs");
|
|
6
7
|
let ___relations_ts = require("../_relations.cjs");
|
|
7
8
|
___relations_ts = require_runtime.__toESM(___relations_ts);
|
|
@@ -31,7 +32,7 @@ function construct(client, config = {}) {
|
|
|
31
32
|
const db = new TiDBServerlessDatabase(dialect, new require_tidb_serverless_session.TiDBServerlessSession(client, dialect, void 0, relations, schema, {
|
|
32
33
|
logger,
|
|
33
34
|
cache: config.cache,
|
|
34
|
-
|
|
35
|
+
useJitMappers: (0, __utils_ts.jitCompatCheck)(config.useJitMappers)
|
|
35
36
|
}), relations, schema, "default");
|
|
36
37
|
db.$client = client;
|
|
37
38
|
db.$cache = config.cache;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.cjs","names":["MySqlDatabase","entityKind","MySqlDialect","DefaultLogger","V1","TiDBServerlessSession"],"sources":["../../src/tidb-serverless/driver.ts"],"sourcesContent":["import { type Config, connect, type Connection } from '@tidbcloud/serverless';\nimport * as V1 from '~/_relations.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { MySqlDatabase } from '~/mysql-core/db.ts';\nimport { MySqlDialect } from '~/mysql-core/dialect.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport type
|
|
1
|
+
{"version":3,"file":"driver.cjs","names":["MySqlDatabase","entityKind","MySqlDialect","DefaultLogger","V1","TiDBServerlessSession"],"sources":["../../src/tidb-serverless/driver.ts"],"sourcesContent":["import { type Config, connect, type Connection } from '@tidbcloud/serverless';\nimport * as V1 from '~/_relations.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { MySqlDatabase } from '~/mysql-core/db.ts';\nimport { MySqlDialect } from '~/mysql-core/dialect.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport { type DrizzleConfig, jitCompatCheck } from '~/utils.ts';\nimport type { TiDBServerlessPreparedQueryHKT, TiDBServerlessQueryResultHKT } from './session.ts';\nimport { TiDBServerlessSession } from './session.ts';\n\nexport interface TiDBServerlessSDriverOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n\tuseJitMappers?: boolean;\n}\n\nexport class TiDBServerlessDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends MySqlDatabase<TiDBServerlessQueryResultHKT, TiDBServerlessPreparedQueryHKT, TSchema, TRelations> {\n\tstatic override readonly [entityKind]: string = 'TiDBServerlessDatabase';\n}\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n>(\n\tclient: Connection,\n\tconfig: DrizzleConfig<TSchema, TRelations> = {},\n): TiDBServerlessDatabase<TSchema, TRelations> & {\n\t$client: Connection;\n} {\n\tconst dialect = new MySqlDialect();\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = V1.extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tV1.createTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst relations = config.relations ?? {} as TRelations;\n\tconst session = new TiDBServerlessSession(client, dialect, undefined, relations, schema, {\n\t\tlogger,\n\t\tcache: config.cache,\n\t\tuseJitMappers: jitCompatCheck(config.useJitMappers),\n\t});\n\tconst db = new TiDBServerlessDatabase(\n\t\tdialect,\n\t\tsession,\n\t\trelations,\n\t\tschema as V1.RelationalSchemaConfig<any>,\n\t\t'default',\n\t) as TiDBServerlessDatabase<TSchema, TRelations>;\n\t(<any> db).$client = client;\n\t(<any> db).$cache = config.cache;\n\tif ((<any> db).$cache) {\n\t\t(<any> db).$cache['invalidate'] = config.cache?.onMutate;\n\t}\n\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends Connection = Connection,\n>(\n\t...params: [\n\t\tstring,\n\t] | [\n\t\tstring,\n\t\tDrizzleConfig<TSchema, TRelations>,\n\t] | [\n\t\t& ({\n\t\t\tconnection: string | Config;\n\t\t} | {\n\t\t\tclient: TClient;\n\t\t})\n\t\t& DrizzleConfig<TSchema, TRelations>,\n\t]\n): TiDBServerlessDatabase<TSchema, TRelations> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = connect({\n\t\t\turl: params[0],\n\t\t});\n\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t& { connection?: Config | string; client?: TClient }\n\t\t& DrizzleConfig<TSchema, TRelations>;\n\n\tif (client) return construct(client, drizzleConfig) as any;\n\n\tconst instance = typeof connection === 'string'\n\t\t? connect({\n\t\t\turl: connection,\n\t\t})\n\t\t: connect(connection!);\n\n\treturn construct(instance, drizzleConfig) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<\n\t\tTSchema extends Record<string, unknown> = Record<string, never>,\n\t\tTRelations extends AnyRelations = EmptyRelations,\n\t>(\n\t\tconfig?: DrizzleConfig<TSchema, TRelations>,\n\t): TiDBServerlessDatabase<TSchema, TRelations> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;AAkBA,IAAa,yBAAb,cAGUA,iCAAiG;CAC1G,QAA0BC,0BAAsB;;AAGjD,SAAS,UAIR,QACA,SAA6C,EAAE,EAG9C;CACD,MAAM,UAAU,IAAIC,sCAAc;CAClC,IAAI;AACJ,KAAI,OAAO,WAAW,KACrB,UAAS,IAAIC,2BAAe;UAClB,OAAO,WAAW,MAC5B,UAAS,OAAO;CAGjB,IAAI;AACJ,KAAI,OAAO,QAAQ;EAClB,MAAM,eAAeC,gBAAG,8BACvB,OAAO,QACPA,gBAAG,4BACH;AACD,WAAS;GACR,YAAY,OAAO;GACnB,QAAQ,aAAa;GACrB,eAAe,aAAa;GAC5B;;CAGF,MAAM,YAAY,OAAO,aAAa,EAAE;CAMxC,MAAM,KAAK,IAAI,uBACd,SANe,IAAIC,sDAAsB,QAAQ,SAAS,QAAW,WAAW,QAAQ;EACxF;EACA,OAAO,OAAO;EACd,8CAA8B,OAAO,cAAc;EACnD,CAAC,EAID,WACA,QACA,UACA;AACD,CAAO,GAAI,UAAU;AACrB,CAAO,GAAI,SAAS,OAAO;AAC3B,KAAW,GAAI,OACd,CAAO,GAAI,OAAO,gBAAgB,OAAO,OAAO;AAGjD,QAAO;;AAGR,SAAgB,QAKf,GAAG,QAeF;AACD,KAAI,OAAO,OAAO,OAAO,SAKxB,QAAO,6CAJkB,EACxB,KAAK,OAAO,IACZ,CAAC,EAEyB,OAAO,GAAG;CAGtC,MAAM,EAAE,YAAY,QAAQ,GAAG,kBAAkB,OAAO;AAIxD,KAAI,OAAQ,QAAO,UAAU,QAAQ,cAAc;AAQnD,QAAO,UANU,OAAO,eAAe,8CAC5B,EACT,KAAK,YACL,CAAC,sCACQ,WAAY,EAEI,cAAc;;;CAIlC,SAAS,KAIf,QAGC;AACD,SAAO,UAAU,EAAE,EAAS,OAAO"}
|
|
@@ -10,7 +10,7 @@ import { Config, Connection } from "@tidbcloud/serverless";
|
|
|
10
10
|
interface TiDBServerlessSDriverOptions {
|
|
11
11
|
logger?: Logger;
|
|
12
12
|
cache?: Cache;
|
|
13
|
-
|
|
13
|
+
useJitMappers?: boolean;
|
|
14
14
|
}
|
|
15
15
|
declare class TiDBServerlessDatabase<TSchema extends Record<string, unknown> = Record<string, never>, TRelations extends AnyRelations = EmptyRelations> extends MySqlDatabase<TiDBServerlessQueryResultHKT, TiDBServerlessPreparedQueryHKT, TSchema, TRelations> {
|
|
16
16
|
static readonly [entityKind]: string;
|
|
@@ -10,7 +10,7 @@ import { Config, Connection } from "@tidbcloud/serverless";
|
|
|
10
10
|
interface TiDBServerlessSDriverOptions {
|
|
11
11
|
logger?: Logger;
|
|
12
12
|
cache?: Cache;
|
|
13
|
-
|
|
13
|
+
useJitMappers?: boolean;
|
|
14
14
|
}
|
|
15
15
|
declare class TiDBServerlessDatabase<TSchema extends Record<string, unknown> = Record<string, never>, TRelations extends AnyRelations = EmptyRelations> extends MySqlDatabase<TiDBServerlessQueryResultHKT, TiDBServerlessPreparedQueryHKT, TSchema, TRelations> {
|
|
16
16
|
static readonly [entityKind]: string;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { TiDBServerlessSession } from "./session.js";
|
|
2
2
|
import { entityKind } from "../entity.js";
|
|
3
|
+
import { jitCompatCheck } from "../utils.js";
|
|
3
4
|
import { DefaultLogger } from "../logger.js";
|
|
4
5
|
import * as V1 from "../_relations.js";
|
|
5
6
|
import { MySqlDatabase } from "../mysql-core/db.js";
|
|
@@ -28,7 +29,7 @@ function construct(client, config = {}) {
|
|
|
28
29
|
const db = new TiDBServerlessDatabase(dialect, new TiDBServerlessSession(client, dialect, void 0, relations, schema, {
|
|
29
30
|
logger,
|
|
30
31
|
cache: config.cache,
|
|
31
|
-
|
|
32
|
+
useJitMappers: jitCompatCheck(config.useJitMappers)
|
|
32
33
|
}), relations, schema, "default");
|
|
33
34
|
db.$client = client;
|
|
34
35
|
db.$cache = config.cache;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.js","names":[],"sources":["../../src/tidb-serverless/driver.ts"],"sourcesContent":["import { type Config, connect, type Connection } from '@tidbcloud/serverless';\nimport * as V1 from '~/_relations.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { MySqlDatabase } from '~/mysql-core/db.ts';\nimport { MySqlDialect } from '~/mysql-core/dialect.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport type
|
|
1
|
+
{"version":3,"file":"driver.js","names":[],"sources":["../../src/tidb-serverless/driver.ts"],"sourcesContent":["import { type Config, connect, type Connection } from '@tidbcloud/serverless';\nimport * as V1 from '~/_relations.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { MySqlDatabase } from '~/mysql-core/db.ts';\nimport { MySqlDialect } from '~/mysql-core/dialect.ts';\nimport type { AnyRelations, EmptyRelations } from '~/relations.ts';\nimport { type DrizzleConfig, jitCompatCheck } from '~/utils.ts';\nimport type { TiDBServerlessPreparedQueryHKT, TiDBServerlessQueryResultHKT } from './session.ts';\nimport { TiDBServerlessSession } from './session.ts';\n\nexport interface TiDBServerlessSDriverOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n\tuseJitMappers?: boolean;\n}\n\nexport class TiDBServerlessDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n> extends MySqlDatabase<TiDBServerlessQueryResultHKT, TiDBServerlessPreparedQueryHKT, TSchema, TRelations> {\n\tstatic override readonly [entityKind]: string = 'TiDBServerlessDatabase';\n}\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n>(\n\tclient: Connection,\n\tconfig: DrizzleConfig<TSchema, TRelations> = {},\n): TiDBServerlessDatabase<TSchema, TRelations> & {\n\t$client: Connection;\n} {\n\tconst dialect = new MySqlDialect();\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: V1.RelationalSchemaConfig<V1.TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = V1.extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tV1.createTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst relations = config.relations ?? {} as TRelations;\n\tconst session = new TiDBServerlessSession(client, dialect, undefined, relations, schema, {\n\t\tlogger,\n\t\tcache: config.cache,\n\t\tuseJitMappers: jitCompatCheck(config.useJitMappers),\n\t});\n\tconst db = new TiDBServerlessDatabase(\n\t\tdialect,\n\t\tsession,\n\t\trelations,\n\t\tschema as V1.RelationalSchemaConfig<any>,\n\t\t'default',\n\t) as TiDBServerlessDatabase<TSchema, TRelations>;\n\t(<any> db).$client = client;\n\t(<any> db).$cache = config.cache;\n\tif ((<any> db).$cache) {\n\t\t(<any> db).$cache['invalidate'] = config.cache?.onMutate;\n\t}\n\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelations extends AnyRelations = EmptyRelations,\n\tTClient extends Connection = Connection,\n>(\n\t...params: [\n\t\tstring,\n\t] | [\n\t\tstring,\n\t\tDrizzleConfig<TSchema, TRelations>,\n\t] | [\n\t\t& ({\n\t\t\tconnection: string | Config;\n\t\t} | {\n\t\t\tclient: TClient;\n\t\t})\n\t\t& DrizzleConfig<TSchema, TRelations>,\n\t]\n): TiDBServerlessDatabase<TSchema, TRelations> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = connect({\n\t\t\turl: params[0],\n\t\t});\n\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t& { connection?: Config | string; client?: TClient }\n\t\t& DrizzleConfig<TSchema, TRelations>;\n\n\tif (client) return construct(client, drizzleConfig) as any;\n\n\tconst instance = typeof connection === 'string'\n\t\t? connect({\n\t\t\turl: connection,\n\t\t})\n\t\t: connect(connection!);\n\n\treturn construct(instance, drizzleConfig) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<\n\t\tTSchema extends Record<string, unknown> = Record<string, never>,\n\t\tTRelations extends AnyRelations = EmptyRelations,\n\t>(\n\t\tconfig?: DrizzleConfig<TSchema, TRelations>,\n\t): TiDBServerlessDatabase<TSchema, TRelations> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":";;;;;;;;;;AAkBA,IAAa,yBAAb,cAGU,cAAiG;CAC1G,QAA0B,cAAsB;;AAGjD,SAAS,UAIR,QACA,SAA6C,EAAE,EAG9C;CACD,MAAM,UAAU,IAAI,cAAc;CAClC,IAAI;AACJ,KAAI,OAAO,WAAW,KACrB,UAAS,IAAI,eAAe;UAClB,OAAO,WAAW,MAC5B,UAAS,OAAO;CAGjB,IAAI;AACJ,KAAI,OAAO,QAAQ;EAClB,MAAM,eAAe,GAAG,8BACvB,OAAO,QACP,GAAG,4BACH;AACD,WAAS;GACR,YAAY,OAAO;GACnB,QAAQ,aAAa;GACrB,eAAe,aAAa;GAC5B;;CAGF,MAAM,YAAY,OAAO,aAAa,EAAE;CAMxC,MAAM,KAAK,IAAI,uBACd,SANe,IAAI,sBAAsB,QAAQ,SAAS,QAAW,WAAW,QAAQ;EACxF;EACA,OAAO,OAAO;EACd,eAAe,eAAe,OAAO,cAAc;EACnD,CAAC,EAID,WACA,QACA,UACA;AACD,CAAO,GAAI,UAAU;AACrB,CAAO,GAAI,SAAS,OAAO;AAC3B,KAAW,GAAI,OACd,CAAO,GAAI,OAAO,gBAAgB,OAAO,OAAO;AAGjD,QAAO;;AAGR,SAAgB,QAKf,GAAG,QAeF;AACD,KAAI,OAAO,OAAO,OAAO,SAKxB,QAAO,UAJU,QAAQ,EACxB,KAAK,OAAO,IACZ,CAAC,EAEyB,OAAO,GAAG;CAGtC,MAAM,EAAE,YAAY,QAAQ,GAAG,kBAAkB,OAAO;AAIxD,KAAI,OAAQ,QAAO,UAAU,QAAQ,cAAc;AAQnD,QAAO,UANU,OAAO,eAAe,WACpC,QAAQ,EACT,KAAK,YACL,CAAC,GACA,QAAQ,WAAY,EAEI,cAAc;;;CAIlC,SAAS,KAIf,QAGC;AACD,SAAO,UAAU,EAAE,EAAS,OAAO"}
|
|
@@ -15,14 +15,14 @@ const queryConfig = { arrayMode: true };
|
|
|
15
15
|
var TiDBServerlessPreparedQuery = class extends __mysql_core_session_ts.MySqlPreparedQuery {
|
|
16
16
|
static [__entity_ts.entityKind] = "TiDBPreparedQuery";
|
|
17
17
|
jitMapper;
|
|
18
|
-
constructor(client, queryString, params, logger, cache, queryMetadata, cacheConfig, fields,
|
|
18
|
+
constructor(client, queryString, params, logger, cache, queryMetadata, cacheConfig, fields, useJitMappers, customResultMapper, generatedIds, returningIds, isRqbV2Query, rqbConfig) {
|
|
19
19
|
super(cache, queryMetadata, cacheConfig);
|
|
20
20
|
this.client = client;
|
|
21
21
|
this.queryString = queryString;
|
|
22
22
|
this.params = params;
|
|
23
23
|
this.logger = logger;
|
|
24
24
|
this.fields = fields;
|
|
25
|
-
this.
|
|
25
|
+
this.useJitMappers = useJitMappers;
|
|
26
26
|
this.customResultMapper = customResultMapper;
|
|
27
27
|
this.generatedIds = generatedIds;
|
|
28
28
|
this.returningIds = returningIds;
|
|
@@ -61,14 +61,14 @@ var TiDBServerlessPreparedQuery = class extends __mysql_core_session_ts.MySqlPre
|
|
|
61
61
|
return await client.execute(queryString, params, queryConfig);
|
|
62
62
|
});
|
|
63
63
|
if (customResultMapper) return customResultMapper(rows);
|
|
64
|
-
return this.
|
|
64
|
+
return this.useJitMappers ? (this.jitMapper = this.jitMapper ?? (0, __utils_ts.makeJitQueryMapper)(fields, joinsNotNullableMap))(rows) : rows.map((row) => (0, __utils_ts.mapResultRow)(fields, row, joinsNotNullableMap));
|
|
65
65
|
}
|
|
66
66
|
async executeRqbV2(placeholderValues = {}) {
|
|
67
67
|
const params = (0, __sql_sql_ts.fillPlaceholders)(this.params, placeholderValues);
|
|
68
68
|
this.logger.logQuery(this.queryString, params);
|
|
69
69
|
const { client, queryString, customResultMapper } = this;
|
|
70
70
|
const { rows } = await client.execute(queryString, params, executeRawConfig);
|
|
71
|
-
return this.
|
|
71
|
+
return this.useJitMappers ? (this.jitMapper = this.jitMapper ?? (0, __relations_ts.makeJitRqbMapper)(this.rqbConfig))(rows ?? []) : customResultMapper(rows ?? []);
|
|
72
72
|
}
|
|
73
73
|
iterator(_placeholderValues) {
|
|
74
74
|
throw new Error("Streaming is not supported by the TiDB Cloud Serverless driver");
|
|
@@ -90,10 +90,10 @@ var TiDBServerlessSession = class TiDBServerlessSession extends __mysql_core_ses
|
|
|
90
90
|
this.cache = options.cache ?? new __cache_core_index_ts.NoopCache();
|
|
91
91
|
}
|
|
92
92
|
prepareQuery(query, fields, customResultMapper, generatedIds, returningIds, queryMetadata, cacheConfig) {
|
|
93
|
-
return new TiDBServerlessPreparedQuery(this.client, query.sql, query.params, this.logger, this.cache, queryMetadata, cacheConfig, fields, this.options.
|
|
93
|
+
return new TiDBServerlessPreparedQuery(this.client, query.sql, query.params, this.logger, this.cache, queryMetadata, cacheConfig, fields, this.options.useJitMappers, customResultMapper, generatedIds, returningIds);
|
|
94
94
|
}
|
|
95
95
|
prepareRelationalQuery(query, fields, customResultMapper, config, generatedIds, returningIds) {
|
|
96
|
-
return new TiDBServerlessPreparedQuery(this.client, query.sql, query.params, this.logger, this.cache, void 0, void 0, fields, this.options.
|
|
96
|
+
return new TiDBServerlessPreparedQuery(this.client, query.sql, query.params, this.logger, this.cache, void 0, void 0, fields, this.options.useJitMappers, customResultMapper, generatedIds, returningIds, true, config);
|
|
97
97
|
}
|
|
98
98
|
all(query) {
|
|
99
99
|
const querySql = this.dialect.sqlToQuery(query);
|