Skip to content

Commit 1c57fdc

Browse files
authored
feat(qc): stabilize driver adapters and the query compiler (#5609)
[ORM-1420](https://linear.app/prisma-company/issue/ORM-1420/remove-querycompiler-and-driveradapter-feature-flags)
1 parent 4274706 commit 1c57fdc

File tree

10 files changed

+34
-38
lines changed

10 files changed

+34
-38
lines changed

psl/psl-core/src/common/preview_features.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ features!(
8080
ReferentialActions,
8181
ReferentialIntegrity,
8282
RelationJoins,
83+
SchemaEngineDriverAdapters,
8384
SelectRelationCount,
8485
ShardKeys,
8586
StrictUndefinedChecks,
@@ -156,12 +157,11 @@ impl<'a> FeatureMapWithProvider<'a> {
156157
// Generator preview features (alphabetically sorted)
157158
let feature_map: FeatureMap = FeatureMap {
158159
active: enumflags2::make_bitflags!(PreviewFeature::{
159-
DriverAdapters
160-
| Metrics
160+
Metrics
161161
| NativeDistinct
162162
| PostgresqlExtensions
163-
| QueryCompiler
164163
| RelationJoins
164+
| SchemaEngineDriverAdapters
165165
| ShardKeys
166166
| StrictUndefinedChecks
167167
| Views
@@ -201,6 +201,7 @@ impl<'a> FeatureMapWithProvider<'a> {
201201
| DataProxy
202202
| Deno
203203
| Distinct
204+
| DriverAdapters
204205
| ExtendedIndexes
205206
| ExtendedWhereUnique
206207
| FieldReference
@@ -224,6 +225,7 @@ impl<'a> FeatureMapWithProvider<'a> {
224225
| OrderByNulls
225226
| OrderByRelation
226227
| PrismaSchemaFolder
228+
| QueryCompiler
227229
| ReferentialActions
228230
| ReferentialIntegrity
229231
| SelectRelationCount

psl/psl-core/src/lib.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -173,10 +173,14 @@ fn validate_configuration(
173173
connectors: ConnectorRegistry<'_>,
174174
) -> Configuration {
175175
// TODO: set `is_using_driver_adapters` to the `true` constant for Prisma 7.0.0.
176-
let is_using_driver_adapters = has_preview_feature_driver_adapters(schema_ast);
176+
let is_using_schema_engine_driver_adapters = has_preview_feature_schema_engine_driver_adapters(schema_ast);
177177

178-
let datasources =
179-
datasource_loader::load_datasources_from_ast(schema_ast, diagnostics, connectors, is_using_driver_adapters);
178+
let datasources = datasource_loader::load_datasources_from_ast(
179+
schema_ast,
180+
diagnostics,
181+
connectors,
182+
is_using_schema_engine_driver_adapters,
183+
);
180184

181185
// We need to know the active provider to determine which features are active.
182186
// This was originally introduced because the `fullTextSearch` preview feature will hit GA stage
@@ -192,7 +196,7 @@ fn validate_configuration(
192196
Configuration::new(generators, datasources, diagnostics.warnings().to_owned())
193197
}
194198

195-
fn has_preview_feature_driver_adapters(schema_ast: &ast::SchemaAst) -> bool {
199+
fn has_preview_feature_schema_engine_driver_adapters(schema_ast: &ast::SchemaAst) -> bool {
196200
// Out of band check for `previewFeatures` because we need to know about the driver adapter feature before we parse the datasource block.
197201
// But we also need to parse the datasource block before the full generator block parsing.
198202
// So we ignore the diagnostics from the `previewFeatures` parsing as that will be properly validated down the line.
@@ -207,7 +211,7 @@ fn has_preview_feature_driver_adapters(schema_ast: &ast::SchemaAst) -> bool {
207211
.is_some_and(|value| {
208212
value
209213
.iter()
210-
.any(|item| *item == PreviewFeature::DriverAdapters.to_string())
214+
.any(|item| *item == PreviewFeature::SchemaEngineDriverAdapters.to_string())
211215
})
212216
})
213217
}

psl/psl-core/src/validate/datasource_loader.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@ pub(crate) fn load_datasources_from_ast(
2727
ast_schema: &ast::SchemaAst,
2828
diagnostics: &mut Diagnostics,
2929
connectors: crate::ConnectorRegistry<'_>,
30-
is_using_driver_adapters: bool,
30+
is_using_schema_engine_driver_adapters: bool,
3131
) -> Vec<Datasource> {
3232
let mut sources = Vec::new();
3333

3434
for src in ast_schema.sources() {
35-
if let Some(source) = lift_datasource(src, diagnostics, connectors, is_using_driver_adapters) {
35+
if let Some(source) = lift_datasource(src, diagnostics, connectors, is_using_schema_engine_driver_adapters) {
3636
sources.push(source);
3737
}
3838
}
@@ -54,7 +54,7 @@ fn lift_datasource(
5454
ast_source: &ast::SourceConfig,
5555
diagnostics: &mut Diagnostics,
5656
connectors: crate::ConnectorRegistry<'_>,
57-
is_using_driver_adapters: bool,
57+
is_using_schema_engine_driver_adapters: bool,
5858
) -> Option<Datasource> {
5959
let source_name = ast_source.name();
6060
let mut args: HashMap<_, (_, &Expression)> = ast_source
@@ -134,7 +134,8 @@ fn lift_datasource(
134134
// We however cannot forbid it as we don't know if the user is actually using Driver Adapters at runtime and in the CLI yet!
135135
// In the future, we'll roll out support for PostgreSQL and other database providers as well.
136136
// Once that's the case, we should update the logic here.
137-
let is_using_driver_adapters = is_using_driver_adapters && ["sqlite"].contains(&active_connector.name());
137+
let is_using_driver_adapters =
138+
is_using_schema_engine_driver_adapters && ["sqlite"].contains(&active_connector.name());
138139

139140
let relation_mode = get_relation_mode(&mut args, ast_source, diagnostics, active_connector);
140141

psl/psl/tests/config/generators.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ fn nice_error_for_unknown_generator_preview_feature() {
256256
.unwrap_err();
257257

258258
let expectation = expect![[r#"
259-
[1;91merror[0m: [1mThe preview feature "foo" is not known. Expected one of: driverAdapters, metrics, nativeDistinct, postgresqlExtensions, queryCompiler, relationJoins, shardKeys, strictUndefinedChecks, views[0m
259+
[1;91merror[0m: [1mThe preview feature "foo" is not known. Expected one of: metrics, nativeDistinct, postgresqlExtensions, relationJoins, schemaEngineDriverAdapters, shardKeys, strictUndefinedChecks, views[0m
260260
--> schema.prisma:3
261261
 | 
262262
 2 |  provider = "prisma-client-js"

psl/psl/tests/validation/generator/multiple_prisma_clients.prisma

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
generator client {
22
provider = "prisma-client"
33
output = "../lib/.generated/prisma"
4-
previewFeatures = ["driverAdapters", "queryCompiler"]
54
}
65

76
generator edge {
87
provider = "prisma-client"
98
output = "../lib/.generated/prisma-edge"
109
runtime = "edge-light"
11-
previewFeatures = ["driverAdapters", "queryCompiler"]
1210
}
1311

1412
datasource db {

psl/psl/tests/validation/generator/multiple_prisma_clients_same_name.prisma

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
generator client {
22
provider = "prisma-client"
33
output = "../lib/.generated/prisma"
4-
previewFeatures = ["driverAdapters", "queryCompiler"]
54
}
65

76
generator client {
@@ -16,8 +15,8 @@ datasource db {
1615
directUrl = env("DIRECT_URL")
1716
}
1817
// error: The generator "client" cannot be defined because a generator with that name already exists.
19-
// [1;94m-->[0m [4mschema.prisma:7[0m
18+
// [1;94m-->[0m [4mschema.prisma:6[0m
2019
//  | 
21-
// [1;94m 6 | [0m
22-
// [1;94m 7 | [0mgenerator [1;91mclient[0m {
20+
// [1;94m 5 | [0m
21+
// [1;94m 6 | [0mgenerator [1;91mclient[0m {
2322
//  | 

psl/psl/tests/validation/preview_features/native_full_text_search_postgres/mysql.prisma

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ model Blog {
1414
title String
1515
@@fulltext([content, title])
1616
}
17-
// [1;91merror[0m: [1mThe preview feature "fullTextSearchPostgres" is not known. Expected one of: driverAdapters, metrics, nativeDistinct, postgresqlExtensions, queryCompiler, relationJoins, shardKeys, strictUndefinedChecks, views[0m
17+
// [1;91merror[0m: [1mThe preview feature "fullTextSearchPostgres" is not known. Expected one of: metrics, nativeDistinct, postgresqlExtensions, relationJoins, schemaEngineDriverAdapters, shardKeys, strictUndefinedChecks, views[0m
1818
// --> schema.prisma:3
1919
//  | 
2020
//  2 |  provider = "prisma-client-js"

psl/psl/tests/validation/preview_features/driver_adapters/postgres/url_is_still_required.prisma renamed to psl/psl/tests/validation/preview_features/schema_engine_driver_adapters/postgres/url_is_still_required.prisma

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
generator client {
22
provider = "prisma-client-js"
3-
previewFeatures = ["driverAdapters"]
3+
previewFeatures = ["schemaEngineDriverAdapters"]
44
}
55

66
datasource db {

psl/psl/tests/validation/preview_features/driver_adapters/sqlite/url_is_not_required.prisma renamed to psl/psl/tests/validation/preview_features/schema_engine_driver_adapters/sqlite/url_is_not_required.prisma

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
generator client {
22
provider = "prisma-client-js"
3-
previewFeatures = ["driverAdapters"]
3+
previewFeatures = ["schemaEngineDriverAdapters"]
44
}
55

66
datasource db {

query-engine/query-engine-node-api/src/engine.rs

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -98,27 +98,19 @@ impl QueryEngine {
9898

9999
let mut schema = psl::validate(datamodel.into());
100100
let config = &mut schema.configuration;
101-
let preview_features = config.preview_features();
102101

103102
let mut connector_mode = ConnectorMode::Rust;
104103

105-
if !preview_features.contains(PreviewFeature::DriverAdapters) {
106-
tracing::info!(
107-
"Please enable the {} preview feature to use driver adapters.",
108-
PreviewFeature::DriverAdapters
109-
);
110-
} else {
111-
#[cfg(feature = "driver-adapters")]
112-
if let Some(adapter) = maybe_adapter {
113-
let js_queryable = driver_adapters::queryable_from_js(adapter);
104+
#[cfg(feature = "driver-adapters")]
105+
if let Some(adapter) = maybe_adapter {
106+
let js_queryable = driver_adapters::queryable_from_js(adapter);
114107

115-
connector_mode = ConnectorMode::Js {
116-
adapter: Arc::new(js_queryable),
117-
};
108+
connector_mode = ConnectorMode::Js {
109+
adapter: Arc::new(js_queryable),
110+
};
118111

119-
let provider_name = schema.connector.provider_name();
120-
tracing::info!("Registered driver adapter for {provider_name}.");
121-
}
112+
let provider_name = schema.connector.provider_name();
113+
tracing::info!("Registered driver adapter for {provider_name}.");
122114
}
123115

124116
let connector_mode = connector_mode;

0 commit comments

Comments
 (0)