Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(Automated Integration PR): update engines to 5.10.0-13.feat-qe-specific-psl-performance2-b9f77ddd4b02a49b324c20b050de9087e29da4ed #23199

Draft
wants to merge 8 commits into
base: main
Choose a base branch
from
3 changes: 2 additions & 1 deletion packages/cli/src/Generate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,8 @@ ${bold('Examples')}
const config = await getConfig({ datamodel, ignoreEnvVarErrors: true })

// TODO Extract logic from here
let hasJsClient
let hasJsClient: boolean = false

let generators: Generator[] | undefined
let clientGeneratorVersion: string | null = null
try {
Expand Down
10 changes: 10 additions & 0 deletions packages/client/helpers/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,12 @@ import { fillPlugin } from '../../../helpers/compile/plugins/fill-plugin/fillPlu
import { noSideEffectsPlugin } from '../../../helpers/compile/plugins/noSideEffectsPlugin'

const wasmEngineDir = path.dirname(require.resolve('@prisma/query-engine-wasm/package.json'))
const wasmSchemaDir = path.dirname(require.resolve('@prisma/prisma-schema-wasm/package.json'))
const fillPluginDir = path.join('..', '..', 'helpers', 'compile', 'plugins', 'fill-plugin')
const functionPolyfillPath = path.join(fillPluginDir, 'fillers', 'function.ts')
const weakrefPolyfillPath = path.join(fillPluginDir, 'fillers', 'weakref.ts')
const runtimeDir = path.resolve(__dirname, '..', 'runtime')
const generatorBuildDir = path.resolve(__dirname, '..', 'generator-build')

const DRIVER_ADAPTER_SUPPORTED_PROVIDERS = ['postgresql', 'sqlite', 'mysql'] as const

Expand Down Expand Up @@ -153,6 +155,14 @@ const generatorBuildConfig: BuildOptions = {
outfile: 'generator-build/index',
bundle: true,
emitTypes: false,
plugins: [
copyFilePlugin([
{
from: path.join(wasmSchemaDir, 'src', 'prisma_schema_build_bg.wasm'),
to: path.join(generatorBuildDir, 'prisma_schema_build_bg.wasm'),
},
]),
],
}

// default-index.js file in scripts
Expand Down
2 changes: 1 addition & 1 deletion packages/client/helpers/functional-test/run-tests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ import { arg, BinaryType, getBinaryTargetForCurrentPlatform } from '@prisma/inte
import * as miniProxy from '@prisma/mini-proxy'
import execa, { ExecaChildProcess } from 'execa'
import fs from 'fs'
import path from 'path'

import { setupQueryEngine } from '../../tests/_utils/setupQueryEngine'
import { AdapterProviders, isDriverAdapterProviderLabel, Providers } from '../../tests/functional/_utils/providers'
import { JestCli } from './JestCli'
import path from 'path'

const allProviders = new Set(Object.values(Providers))
const allAdapterProviders = new Set(Object.values(AdapterProviders))
Expand Down
5 changes: 3 additions & 2 deletions packages/client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -173,15 +173,16 @@
"@prisma/debug": "workspace:*",
"@prisma/driver-adapter-utils": "workspace:*",
"@prisma/engines": "workspace:*",
"@prisma/engines-version": "5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9",
"@prisma/engines-version": "5.10.0-13.feat-qe-specific-psl-performance-b9f77ddd4b02a49b324c20b050de9087e29da4ed",
"@prisma/fetch-engine": "workspace:*",
"@prisma/generator-helper": "workspace:*",
"@prisma/get-platform": "workspace:*",
"@prisma/instrumentation": "workspace:*",
"@prisma/internals": "workspace:*",
"@prisma/migrate": "workspace:*",
"@prisma/mini-proxy": "0.9.5",
"@prisma/query-engine-wasm": "5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9",
"@prisma/prisma-schema-wasm": "5.10.0-13.feat-qe-specific-psl-performance-b9f77ddd4b02a49b324c20b050de9087e29da4ed",
"@prisma/query-engine-wasm": "5.10.0-13.feat-qe-specific-psl-performance-b9f77ddd4b02a49b324c20b050de9087e29da4ed",
"@snaplet/copycat": "0.17.3",
"@swc-node/register": "1.8.0",
"@swc/core": "1.4.1",
Expand Down
2 changes: 2 additions & 0 deletions packages/client/src/generation/TSClient/TSClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import { buildQueryEngineWasmModule } from '../utils/buildGetQueryEngineWasmModu
import { buildInjectableEdgeEnv } from '../utils/buildInjectableEdgeEnv'
import { buildNFTAnnotations } from '../utils/buildNFTAnnotations'
import { buildRequirePath } from '../utils/buildRequirePath'
import { buildSerializedSchema } from '../utils/buildSerializedSchema'
import { buildWarnEnvConflicts } from '../utils/buildWarnEnvConflicts'
import { commonCodeJS, commonCodeTS } from './common'
import { Count } from './Count'
Expand Down Expand Up @@ -152,6 +153,7 @@ ${new Enum(
* Create the Client
*/
const config = ${JSON.stringify(config, null, 2)}
${buildSerializedSchema(wasm || (runtimeNameJs && Boolean(process.env.PRISMA_CLIENT_FORCE_WASM)))}
${buildDirname(edge, relativeOutdir)}
${buildRuntimeDataModel(this.dmmf.datamodel, runtimeNameJs)}
${buildQueryEngineWasmModule(wasm, copyEngine, runtimeNameJs)}
Expand Down
1 change: 1 addition & 0 deletions packages/client/src/generation/TSClient/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@ export { ArgsType, MinimalArgsType } from './Args'
export { Enum } from './Enum'
export { BrowserJS, JS, TS } from './Generatable'
export { InputField, InputType } from './Input'
export { jsifyUint8Array } from './jsifyUint8Array'
export { Model, ModelDelegate } from './Model'
export { TSClient } from './TSClient'
6 changes: 6 additions & 0 deletions packages/client/src/generation/TSClient/jsifyUint8Array.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export function jsifyUint8Array(uint8Array: Uint8Array, name: string): string {
// Convert the Uint8Array to a string representation
const uint8ArrayString = JSON.stringify(Array.from(uint8Array))

return `export const ${name} = new Uint8Array(${uint8ArrayString});`
}
19 changes: 17 additions & 2 deletions packages/client/src/generation/generateClient.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
import Debug from '@prisma/debug'
import { overwriteFile } from '@prisma/fetch-engine'
import type { BinaryPaths, ConnectorType, DataSource, DMMF, GeneratorConfig } from '@prisma/generator-helper'
import { assertNever, ClientEngineType, getClientEngineType, pathToPosix, setClassName } from '@prisma/internals'
import {
assertNever,
ClientEngineType,
getClientEngineType,
pathToPosix,
serializeSchemaToBytes,
setClassName,
} from '@prisma/internals'
import { createHash } from 'crypto'
import paths from 'env-paths'
import { existsSync } from 'fs'
Expand All @@ -15,7 +22,7 @@ import type { O } from 'ts-toolbelt'
import { exports as clientPackageExports, name as clientPackageName } from '../../package.json'
import type { DMMF as PrismaClientDMMF } from './dmmf-types'
import { getPrismaClientDMMF } from './getDMMF'
import { BrowserJS, JS, TS, TSClient } from './TSClient'
import { BrowserJS, JS, jsifyUint8Array, TS, TSClient } from './TSClient'
import { TSClientOptions } from './TSClient/TSClient'
import type { Dictionary } from './utils/common'

Expand Down Expand Up @@ -163,6 +170,14 @@ export async function buildClient({
fileMap['index.d.ts'] = await TS(nodeWarnTsClient)
}

const serializedSchema = serializeSchemaToBytes({
datamodel,
datamodelPath: schemaPath,
})

// we store the serialized binary schema as `export const serializedSchema = new Uint8Array([...])`
fileMap['schema.bin.js'] = jsifyUint8Array(serializedSchema, 'serializedSchema')

const wasmClient = new TSClient({
...baseClientOptions,
runtimeNameJs: 'wasm',
Expand Down
10 changes: 10 additions & 0 deletions packages/client/src/generation/utils/buildSerializedSchema.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
export function buildSerializedSchema(wasm: boolean) {
if (wasm) {
return `
const { serializedSchema } = require('./schema.bin.js');
config.serializedSchema = serializedSchema;
`
}

return ''
}
6 changes: 6 additions & 0 deletions packages/client/src/runtime/core/engines/common/Engine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,12 @@ export interface EngineConfig {
logEmitter: LogEmitter
transactionOptions: Transaction.Options

/**
* The metadata of the schema binary encoded into bytes
* @remarks only used for Wasm Query Engine
*/
serializedSchema?: Uint8Array

/**
* Instance of a Driver Adapter, e.g., like one provided by `@prisma/adapter-planetscale`.
* If set, this is only used in the library engine, and all queries would be performed through it,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,7 @@ You may have to run ${green('prisma generate')} for your changes to take effect.
weakThis.deref()?.logger(log)
},
adapter,
this.config.serializedSchema,
)
engineInstanceCount++
} catch (_e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ export interface QueryEngineConstructor {
config: QueryEngineConfig,
logger: (log: string) => void,
adapter?: ErrorCapturingDriverAdapter,
serializedSchema?: Uint8Array,
): QueryEngineInstance
}

Expand Down
7 changes: 7 additions & 0 deletions packages/client/src/runtime/getPrismaClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,12 @@ export type GetPrismaClientConfig = {
datasourceNames: string[]
activeProvider: string

/**
* The metadata of the schema binary encoded into bytes
* @remarks only used for Wasm Query Engine
*/
serializedSchema?: Uint8Array

/**
* The contents of the schema encoded into a string
* @remarks only used for the purpose of data proxy
Expand Down Expand Up @@ -438,6 +444,7 @@ export function getPrismaClient(config: GetPrismaClientConfig) {
},
logEmitter,
isBundled: config.isBundled,
serializedSchema: config.serializedSchema,
adapter,
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { D1Database } from '@cloudflare/workers-types'
import { getConfig, getDMMF, parseEnvValue } from '@prisma/internals'
import { getConfig, getDMMF, parseEnvValue, serializeSchemaToBytes } from '@prisma/internals'
import { readFile } from 'fs/promises'
import path from 'path'
import { fetch, WebSocket } from 'undici'
Expand Down Expand Up @@ -97,12 +97,14 @@ export async function setupTestSuiteClient({
/**
* Automatically loads the driver adapter for the test suite client.
*/
export function setupTestSuiteClientDriverAdapter({
export async function setupTestSuiteClientDriverAdapter({
suiteMeta,
suiteConfig,
datasourceInfo,
clientMeta,
cfWorkerBindings,
}: {
suiteMeta: TestSuiteMeta
suiteConfig: NamedTestSuiteConfig
datasourceInfo: DatasourceInfo
clientMeta: ClientMeta
Expand All @@ -118,8 +120,13 @@ export function setupTestSuiteClientDriverAdapter({
throw new Error(`Missing Driver Adapter`)
}

const datamodelPath = getTestSuiteSchemaPath(suiteMeta, suiteConfig)
const datamodel = await readFile(datamodelPath, 'utf-8')
const serializedSchema = serializeSchemaToBytes({ datamodel, datamodelPath })

if (clientMeta.runtime === 'wasm') {
__internal.configOverride = (config) => {
config.serializedSchema = serializedSchema
config.engineWasm = {
getRuntime: () => require(path.join(runtimeBase, `query_engine_bg.${provider}.js`)),
getQueryEngineWasmModule: async () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,17 +120,12 @@ function setupTestSuiteMatrix(
})

const newDriverAdapter = () =>
setupTestSuiteClientDriverAdapter({
suiteConfig,
clientMeta,
datasourceInfo,
cfWorkerBindings,
})
setupTestSuiteClientDriverAdapter({ suiteMeta, suiteConfig, clientMeta, datasourceInfo, cfWorkerBindings })

globalThis['newPrismaClient'] = (args: any) => {
globalThis['newPrismaClient'] = async (args: any) => {
const { PrismaClient, Prisma } = globalThis['loaded']

const options = { ...newDriverAdapter(), ...args }
const options = { ...(await newDriverAdapter()), ...args }
const client = new PrismaClient(options)

globalThis['Prisma'] = Prisma
Expand All @@ -140,7 +135,7 @@ function setupTestSuiteMatrix(
}

if (!options?.skipDefaultClientInstance) {
globalThis['prisma'] = globalThis['newPrismaClient']() as Client
globalThis['prisma'] = (await globalThis['newPrismaClient']()) as Client
}

globalThis['Prisma'] = (await global['loaded'])['Prisma']
Expand Down
2 changes: 1 addition & 1 deletion packages/engines/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
},
"dependencies": {
"@prisma/debug": "workspace:*",
"@prisma/engines-version": "5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9",
"@prisma/engines-version": "5.10.0-13.feat-qe-specific-psl-performance-b9f77ddd4b02a49b324c20b050de9087e29da4ed",
"@prisma/fetch-engine": "workspace:*",
"@prisma/get-platform": "workspace:*"
},
Expand Down
2 changes: 1 addition & 1 deletion packages/fetch-engine/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
},
"dependencies": {
"@prisma/debug": "workspace:*",
"@prisma/engines-version": "5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9",
"@prisma/engines-version": "5.10.0-13.feat-qe-specific-psl-performance-b9f77ddd4b02a49b324c20b050de9087e29da4ed",
"@prisma/get-platform": "workspace:*"
},
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion packages/internals/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@
"@prisma/fetch-engine": "workspace:*",
"@prisma/generator-helper": "workspace:*",
"@prisma/get-platform": "workspace:*",
"@prisma/prisma-schema-wasm": "5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9",
"@prisma/prisma-schema-wasm": "5.10.0-13.feat-qe-specific-psl-performance-b9f77ddd4b02a49b324c20b050de9087e29da4ed",
"arg": "5.0.2",
"prompts": "2.4.2"
},
Expand Down
1 change: 1 addition & 0 deletions packages/internals/src/engine-commands/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ export { getDMMF } from './getDmmf'
export { getEnginesMetaInfo } from './getEnginesMetaInfo'
export { getEngineVersion } from './getEngineVersion'
export { getLintWarningsAsText, handleLintPanic, lintSchema } from './lintSchema'
export { serializeSchemaToBytes } from './serializeSchemaToBytes'
export { validate } from './validate'