diff --git a/query-engine/driver-adapters/js/adapter-pg/src/pg.ts b/query-engine/driver-adapters/js/adapter-pg/src/pg.ts index 6bf6301ef330..d4bb10715445 100644 --- a/query-engine/driver-adapters/js/adapter-pg/src/pg.ts +++ b/query-engine/driver-adapters/js/adapter-pg/src/pg.ts @@ -9,125 +9,100 @@ type StdClient = pg.Pool type TransactionClient = pg.PoolClient class PgQueryable - implements Queryable { - readonly flavour = 'postgres' - - constructor(protected readonly client: ClientT) { - } - - /** - * Execute a query given as SQL, interpolating the given parameters. - */ - async queryRaw(query: Query): Promise> { - const tag = '[js::query_raw]' - debug(`${tag} %O`, query) - - const { fields, rows: results } = await this.performIO(query) - - const columns = fields.map((field) => field.name) - const resultSet: ResultSet = { - columnNames: columns, - columnTypes: fields.map((field) => fieldToColumnType(field.dataTypeID)), - rows: results.map((result) => columns.map((column) => result[column])), + implements Queryable { + readonly flavour = 'postgres' + + constructor(protected readonly client: ClientT) { + } + + /** + * Execute a query given as SQL, interpolating the given parameters. + */ + async queryRaw(query: Query): Promise> { + const tag = '[js::query_raw]' + debug(`${tag} %O`, query) + + const { fields, rows: results } = await this.performIO(query) + + const columns = fields.map((field) => field.name) + const resultSet: ResultSet = { + columnNames: columns, + columnTypes: fields.map((field) => fieldToColumnType(field.dataTypeID)), + rows: results.map((result) => columns.map((column) => result[column])), + } + + return { ok: true, value: resultSet } + } + + /** + * Execute a query given as SQL, interpolating the given parameters and + * returning the number of affected rows. + * Note: Queryable expects a u64, but napi.rs only supports u32. + */ + async executeRaw(query: Query): Promise> { + const tag = '[js::execute_raw]' + debug(`${tag} %O`, query) + + const { rowCount: rowsAffected } = await this.performIO(query) + + // Note: `rowsAffected` can sometimes be null (e.g., when executing `"BEGIN"`) + return { ok: true, value: rowsAffected ?? 0 } } - return { ok: true, value: resultSet } - } - - /** - * Execute a query given as SQL, interpolating the given parameters and - * returning the number of affected rows. - * Note: Queryable expects a u64, but napi.rs only supports u32. - */ - async executeRaw(query: Query): Promise> { - const tag = '[js::execute_raw]' - debug(`${tag} %O`, query) - - const { rowCount: rowsAffected } = await this.performIO(query) - - // Note: `rowsAffected` can sometimes be null (e.g., when executing `"BEGIN"`) - return { ok: true, value: rowsAffected ?? 0 } - } - - /** - * Run a query against the database, returning the result set. - * Should the query fail due to a connection error, the connection is - * marked as unhealthy. - */ - private async performIO(query: Query) { - const { sql, args: values } = query - - try { - const result = await this.client.query(sql, values) - return result - } catch (e) { - const error = e as Error - debug('Error in performIO: %O', error) - throw error + /** + * Run a query against the database, returning the result set. + * Should the query fail due to a connection error, the connection is + * marked as unhealthy. + */ + private async performIO(query: Query) { + const { sql, args: values } = query + + try { + const result = await this.client.query(sql, values) + return result + } catch (e) { + const error = e as Error + debug('Error in performIO: %O', error) + throw error + } } - } } class PgTransaction extends PgQueryable - implements Transaction { - constructor(client: pg.PoolClient, readonly options: TransactionOptions) { - super(client) - } + implements Transaction { + constructor(client: pg.PoolClient, readonly options: TransactionOptions) { + super(client) + } - async commit(): Promise> { - debug(`[js::commit]`) + async commit(): Promise> { + debug(`[js::commit]`) - this.client.release() - return Promise.resolve({ ok: true, value: undefined }) - } + this.client.release() + return Promise.resolve({ ok: true, value: undefined }) + } - async rollback(): Promise> { - debug(`[js::rollback]`) + async rollback(): Promise> { + debug(`[js::rollback]`) - this.client.release() - return Promise.resolve({ ok: true, value: undefined }) - } + this.client.release() + return Promise.resolve({ ok: true, value: undefined }) + } } -<<<<<<< HEAD:query-engine/driver-adapters/js/adapter-pg/src/pg.ts -export class PrismaPg extends PgQueryable implements DriverAdapter { - constructor(client: pg.Pool) { -||||||| parent of 792f6fa29f (end-to-end baseline correctness on query()):query-engine/js-connectors/js/pg-js-connector/src/pg.ts -class PrismaPg extends PgQueryable implements Connector { - constructor(config: PrismaPgConfig) { - const { url: connectionString } = config - - const client = new pg.Pool({ - connectionString, - }) - -======= -class PrismaPg extends PgQueryable implements Connector { - constructor(config: PrismaPgConfig) { - const { url: connectionString } = config - - console.error("Starting a postgres pool") - const client = new pg.Pool({ - connectionString, - }) - ->>>>>>> 792f6fa29f (end-to-end baseline correctness on query()):query-engine/js-connectors/js/pg-js-connector/src/pg.ts - super(client) - } - - async startTransaction(): Promise> { - const options: TransactionOptions = { - usePhantomQuery: false, - } +export class PrismaPg extends PgQueryable implements Connector { + async startTransaction(): Promise> { + const options: TransactionOptions = { + usePhantomQuery: false, + } - const tag = '[js::startTransaction]' - debug(`${tag} options: %O`, options) + const tag = '[js::startTransaction]' + debug(`${tag} options: %O`, options) - const connection = await this.client.connect() - return { ok: true, value: new PgTransaction(connection, options) } - } + const connection = await this.client.connect() + return { ok: true, value: new PgTransaction(connection, options) } + } - async close() { - return { ok: true as const, value: undefined } - } + async close() { + return { ok: true as const, value: undefined } + } } diff --git a/query-engine/driver-adapters/js/connector-test-kit-executor/package.json b/query-engine/driver-adapters/js/connector-test-kit-executor/package.json index 463e68e7b97f..81b8226f7e5d 100644 --- a/query-engine/driver-adapters/js/connector-test-kit-executor/package.json +++ b/query-engine/driver-adapters/js/connector-test-kit-executor/package.json @@ -11,8 +11,5 @@ "author": "", "sideEffects": false, "license": "Apache-2.0", - "dependencies": { - "@jkomyno/prisma-pg-js-connector": "workspace:*", - "tempy": "^3" - } + "dependencies": { "@jkomyno/prisma-adapter-pg": "workspace:*" } } diff --git a/query-engine/driver-adapters/js/package.json b/query-engine/driver-adapters/js/package.json index 6864220623d4..1fc20228fe6f 100644 --- a/query-engine/driver-adapters/js/package.json +++ b/query-engine/driver-adapters/js/package.json @@ -5,7 +5,7 @@ "description": "", "engines": { "node": ">=16.13", - "pnpm": ">=8.6.7 <9" + "pnpm": ">=8.6.6 <9" }, "license": "Apache-2.0", "scripts": { diff --git a/query-engine/driver-adapters/js/pnpm-lock.yaml b/query-engine/driver-adapters/js/pnpm-lock.yaml index 557d23ded244..66d2c4455f90 100644 --- a/query-engine/driver-adapters/js/pnpm-lock.yaml +++ b/query-engine/driver-adapters/js/pnpm-lock.yaml @@ -22,20 +22,11 @@ importers: dependencies: '@jkomyno/prisma-driver-adapter-utils': specifier: workspace:* -<<<<<<< HEAD:query-engine/driver-adapters/js/pnpm-lock.yaml version: link:../driver-adapter-utils devDependencies: '@neondatabase/serverless': specifier: ^0.6.0 version: 0.6.0 -||||||| parent of 792f6fa29f (end-to-end baseline correctness on query()):query-engine/js-connectors/js/pnpm-lock.yaml - version: link:../pg-js-connector - tempy: - specifier: ^3 - version: 3.0.0 -======= - version: link:../pg-js-connector ->>>>>>> 792f6fa29f (end-to-end baseline correctness on query()):query-engine/js-connectors/js/pnpm-lock.yaml adapter-pg: dependencies: @@ -60,6 +51,12 @@ importers: specifier: ^1.11.0 version: 1.11.0 + connector-test-kit-executor: + dependencies: + '@jkomyno/prisma-adapter-pg': + specifier: workspace:* + version: link:../adapter-pg + driver-adapter-utils: dependencies: debug: @@ -762,20 +759,11 @@ packages: engines: {node: '>=8'} dev: true -<<<<<<< HEAD:query-engine/driver-adapters/js/pnpm-lock.yaml /is-what@4.1.15: resolution: {integrity: sha512-uKua1wfy3Yt+YqsD6mTUEa2zSi3G1oPlqTflgaPJ7z63vUGN5pxFpnQfeSLMFnJDEsdvOtkp1rUWkYjB4YfhgA==} engines: {node: '>=12.13'} dev: false -||||||| parent of 792f6fa29f (end-to-end baseline correctness on query()):query-engine/js-connectors/js/pnpm-lock.yaml - /is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: false - -======= ->>>>>>> 792f6fa29f (end-to-end baseline correctness on query()):query-engine/js-connectors/js/pnpm-lock.yaml /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true @@ -1158,7 +1146,6 @@ packages: ts-interface-checker: 0.1.13 dev: true -<<<<<<< HEAD:query-engine/driver-adapters/js/pnpm-lock.yaml /superjson@1.13.1: resolution: {integrity: sha512-AVH2eknm9DEd3qvxM4Sq+LTCkSXE2ssfh1t11MHMXyYXFQyQ1HLgVvV+guLTsaQnJU3gnaVo34TohHPulY/wLg==} engines: {node: '>=10'} @@ -1166,24 +1153,6 @@ packages: copy-anything: 3.0.5 dev: false -||||||| parent of 792f6fa29f (end-to-end baseline correctness on query()):query-engine/js-connectors/js/pnpm-lock.yaml - /temp-dir@2.0.0: - resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} - engines: {node: '>=8'} - dev: false - - /tempy@3.0.0: - resolution: {integrity: sha512-B2I9X7+o2wOaW4r/CWMkpOO9mdiTRCxXNgob6iGvPmfPWgH/KyUD6Uy5crtWBxIBe3YrNZKR2lSzv1JJKWD4vA==} - engines: {node: '>=14.16'} - dependencies: - is-stream: 3.0.0 - temp-dir: 2.0.0 - type-fest: 2.19.0 - unique-string: 3.0.0 - dev: false - -======= ->>>>>>> 792f6fa29f (end-to-end baseline correctness on query()):query-engine/js-connectors/js/pnpm-lock.yaml /thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -1272,7 +1241,6 @@ packages: hasBin: true dev: true -<<<<<<< HEAD:query-engine/driver-adapters/js/pnpm-lock.yaml /undici@5.23.0: resolution: {integrity: sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==} engines: {node: '>=14.0'} @@ -1280,16 +1248,6 @@ packages: busboy: 1.6.0 dev: false -||||||| parent of 792f6fa29f (end-to-end baseline correctness on query()):query-engine/js-connectors/js/pnpm-lock.yaml - /unique-string@3.0.0: - resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} - engines: {node: '>=12'} - dependencies: - crypto-random-string: 4.0.0 - dev: false - -======= ->>>>>>> 792f6fa29f (end-to-end baseline correctness on query()):query-engine/js-connectors/js/pnpm-lock.yaml /webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} dev: true