Skip to content

Commit 9c97688

Browse files
committed
Revert "adapter+server: Autoparameterize range queries"
This reverts commit 3b0412a0e9d2fffbc15d7e8ea9f81a5983a86372. Change-Id: I02e4a5af23a2f18dd2ff0c4eb1e2c7dabb1843be Reviewed-on: https://gerrit.readyset.name/c/readyset/+/6997 Tested-by: Buildkite CI Reviewed-by: Luke Osborne <[email protected]>
1 parent 301f78f commit 9c97688

File tree

19 files changed

+143
-800
lines changed

19 files changed

+143
-800
lines changed

benchmarks/src/bin/write_propagation.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ impl Writer {
106106
let auto_increments: Arc<RwLock<HashMap<Relation, AtomicUsize>>> = Arc::default();
107107
let view_name_cache = SharedCache::new();
108108
let view_cache = SharedCache::new();
109-
let adapter_rewrite_params = ch.adapter_rewrite_params().await?;
109+
let server_supports_pagination = ch.supports_pagination().await?;
110110
let (dialect, nom_sql_dialect) = match DatabaseURL::from_str(&self.database_url)? {
111111
DatabaseURL::MySQL(_) => (Dialect::DEFAULT_MYSQL, nom_sql::Dialect::MySQL),
112112
DatabaseURL::PostgreSQL(_) => {
@@ -123,7 +123,7 @@ impl Writer {
123123
dialect,
124124
nom_sql_dialect,
125125
vec![],
126-
adapter_rewrite_params,
126+
server_supports_pagination,
127127
)
128128
.await;
129129

logictests/ranges.test

Lines changed: 25 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -9,64 +9,33 @@ insert into t1 (x, y) values
99
(3, 3),
1010
(4, 5);
1111

12-
# query I valuesort
13-
# select x from t1 where y < ?;
14-
# ? = 5
15-
# ----
16-
# 1
17-
# 2
18-
# 3
19-
#
20-
# query I valuesort
21-
# select x from t1 where x >= ? and y >= ?;
22-
# ? = 1
23-
# ? = 2
24-
# ----
25-
# 1
26-
# 1
27-
# 3
28-
# 4
29-
#
30-
# query I valuesort
31-
# select x from t1 where x > ? and y > ?
32-
# ? = 2
33-
# ? = 4
34-
# ----
35-
# 4
36-
#
37-
# query I valuesort
38-
# select x from t1 where x > ? and y > ?
39-
# ? = 4
40-
# ? = 4
41-
# ----
42-
#
43-
# query I valuesort
44-
# select x from t1 where x >= 2 and x <= 4
45-
# ----
46-
# 2
47-
# 3
48-
# 4
49-
#
50-
# query I valuesort
51-
# select x from t1 where x >= 2 and x < 4
52-
# ----
53-
# 2
54-
# 3
55-
#
56-
# query I valuesort
57-
# select x from t1 where x > 2 and x <= 4
58-
# ----
59-
# 3
60-
# 4
61-
#
62-
# query I valuesort
63-
# select x from t1 where x > 2 and x < 4
64-
# ----
65-
# 3
12+
query I valuesort
13+
select x from t1 where y < ?;
14+
? = 5
15+
----
16+
1
17+
2
18+
3
6619

6720
query I valuesort
68-
select x from t1 where x > ? and y < ?
21+
select x from t1 where x >= ? and y >= ?;
22+
? = 1
6923
? = 2
70-
? = 4
7124
----
25+
1
26+
1
7227
3
28+
4
29+
30+
query I valuesort
31+
select x from t1 where x > ? and y > ?
32+
? = 2
33+
? = 4
34+
----
35+
4
36+
37+
query I valuesort
38+
select x from t1 where x > ? and y > ?
39+
? = 4
40+
? = 4
41+
----

readyset-adapter/src/backend.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1094,7 +1094,7 @@ where
10941094
stmt: &nom_sql::SelectStatement,
10951095
) -> ReadySetResult<(nom_sql::SelectStatement, bool)> {
10961096
let mut rewritten = stmt.clone();
1097-
adapter_rewrites::process_query(&mut rewritten, self.noria.rewrite_params())?;
1097+
adapter_rewrites::process_query(&mut rewritten, self.noria.server_supports_pagination())?;
10981098
// Attempt ReadySet unless the query is unsupported or dropped
10991099
let should_do_readyset = !matches!(
11001100
self.state
@@ -1814,7 +1814,7 @@ where
18141814
}
18151815
}
18161816
// Now migrate the new query
1817-
adapter_rewrites::process_query(&mut stmt, self.noria.rewrite_params())?;
1817+
adapter_rewrites::process_query(&mut stmt, self.noria.server_supports_pagination())?;
18181818
let migration_state = match self
18191819
.noria
18201820
.handle_create_cached_query(
@@ -2200,7 +2200,7 @@ where
22002200
let mut stmt = *stmt.clone();
22012201
adapter_rewrites::process_query(
22022202
&mut stmt,
2203-
self.noria.rewrite_params(),
2203+
self.noria.server_supports_pagination(),
22042204
)?;
22052205

22062206
ViewCreateRequest::new(
@@ -2579,7 +2579,10 @@ where
25792579
Option<QueryStatus>,
25802580
ReadySetResult<ProcessedQueryParams>,
25812581
) {
2582-
match adapter_rewrites::process_query(&mut q.statement, self.noria.rewrite_params()) {
2582+
match adapter_rewrites::process_query(
2583+
&mut q.statement,
2584+
self.noria.server_supports_pagination(),
2585+
) {
25832586
Ok(processed_query_params) => {
25842587
let s = self.state.query_status_cache.query_status(q);
25852588
let should_try = if self.state.proxy_state.should_proxy() {

readyset-adapter/src/backend/noria_connector.rs

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use readyset_errors::{
2626
ReadySetResult,
2727
};
2828
use readyset_server::worker::readers::{CallResult, ReadRequestHandler};
29-
use readyset_sql_passes::adapter_rewrites::{self, AdapterRewriteParams, ProcessedQueryParams};
29+
use readyset_sql_passes::adapter_rewrites::{self, ProcessedQueryParams};
3030
use readyset_util::redacted::Sensitive;
3131
use readyset_util::shared_cache::{self, LocalCache};
3232
use tokio::sync::RwLock;
@@ -62,7 +62,9 @@ pub struct NoriaBackendInner {
6262
noria: ReadySetHandle,
6363
tables: BTreeMap<Relation, Table>,
6464
views: LocalCache<Relation, View>,
65-
rewrite_params: AdapterRewriteParams,
65+
/// The server can handle (non-parameterized) LIMITs and (parameterized) OFFSETs in the
66+
/// dataflow graph
67+
server_supports_pagination: bool,
6668
}
6769

6870
macro_rules! noria_await {
@@ -78,13 +80,13 @@ impl NoriaBackendInner {
7880
async fn new(
7981
ch: ReadySetHandle,
8082
views: LocalCache<Relation, View>,
81-
rewrite_params: AdapterRewriteParams,
83+
server_supports_pagination: bool,
8284
) -> Self {
8385
NoriaBackendInner {
8486
tables: BTreeMap::new(),
8587
views,
8688
noria: ch,
87-
rewrite_params,
89+
server_supports_pagination,
8890
}
8991
}
9092

@@ -363,7 +365,7 @@ impl NoriaConnector {
363365
dialect: Dialect,
364366
parse_dialect: nom_sql::Dialect,
365367
schema_search_path: Vec<SqlIdentifier>,
366-
rewrite_params: AdapterRewriteParams,
368+
server_supports_pagination: bool,
367369
) -> Self {
368370
NoriaConnector::new_with_local_reads(
369371
ch,
@@ -375,7 +377,7 @@ impl NoriaConnector {
375377
dialect,
376378
parse_dialect,
377379
schema_search_path,
378-
rewrite_params,
380+
server_supports_pagination,
379381
)
380382
.await
381383
}
@@ -391,9 +393,9 @@ impl NoriaConnector {
391393
dialect: Dialect,
392394
parse_dialect: nom_sql::Dialect,
393395
schema_search_path: Vec<SqlIdentifier>,
394-
rewrite_params: AdapterRewriteParams,
396+
server_supports_pagination: bool,
395397
) -> Self {
396-
let backend = NoriaBackendInner::new(ch, view_cache, rewrite_params).await;
398+
let backend = NoriaBackendInner::new(ch, view_cache, server_supports_pagination).await;
397399

398400
NoriaConnector {
399401
inner: NoriaBackend {
@@ -552,15 +554,12 @@ impl NoriaConnector {
552554
.collect())
553555
}
554556

555-
pub(crate) fn rewrite_params(&self) -> AdapterRewriteParams {
557+
pub(crate) fn server_supports_pagination(&self) -> bool {
556558
self.inner
557559
.inner
558560
.as_ref()
559-
.map(|v| v.rewrite_params)
560-
.unwrap_or_else(|| AdapterRewriteParams {
561-
server_supports_pagination: false,
562-
server_supports_mixed_comparisons: false,
563-
})
561+
.map(|v| v.server_supports_pagination)
562+
.unwrap_or(false)
564563
}
565564

566565
// TODO(andrew): Allow client to map table names to NodeIndexes without having to query ReadySet
@@ -1416,7 +1415,7 @@ impl NoriaConnector {
14161415

14171416
trace!("select::collapse where-in clauses");
14181417
let processed_query_params =
1419-
adapter_rewrites::process_query(&mut statement, self.rewrite_params())?;
1418+
adapter_rewrites::process_query(&mut statement, self.server_supports_pagination())?;
14201419

14211420
// check if we already have this query prepared
14221421
trace!("select::access view");

readyset-client-test-helpers/src/lib.rs

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ pub struct TestBuilder {
8989
storage_dir_path: Option<PathBuf>,
9090
authority: Option<Arc<Authority>>,
9191
replication_server_id: Option<ReplicationServerId>,
92-
allow_mixed_comparisons: bool,
9392
}
9493

9594
impl Default for TestBuilder {
@@ -114,7 +113,6 @@ impl TestBuilder {
114113
storage_dir_path: None,
115114
authority: None,
116115
replication_server_id: None,
117-
allow_mixed_comparisons: true,
118116
}
119117
}
120118

@@ -187,11 +185,6 @@ impl TestBuilder {
187185
self
188186
}
189187

190-
pub fn allow_mixed_comparisons(mut self, allow_mixed_comparisons: bool) -> Self {
191-
self.allow_mixed_comparisons = allow_mixed_comparisons;
192-
self
193-
}
194-
195188
pub async fn build<A>(self) -> (A::ConnectionOpts, Handle, ShutdownSender)
196189
where
197190
A: Adapter + 'static,
@@ -239,8 +232,7 @@ impl TestBuilder {
239232
builder.set_persistence(persistence);
240233
builder.set_allow_topk(true);
241234
builder.set_allow_paginate(true);
242-
builder.set_allow_mixed_comparisons(self.allow_mixed_comparisons);
243-
235+
builder.set_allow_mixed_comparisons(true);
244236
if !self.partial {
245237
builder.disable_partial();
246238
}
@@ -315,7 +307,7 @@ impl TestBuilder {
315307
};
316308

317309
let mut rh = ReadySetHandle::new(authority.clone()).await;
318-
let adapter_rewrite_params = rh.adapter_rewrite_params().await.unwrap();
310+
let server_supports_pagination = rh.supports_pagination().await.unwrap();
319311
let noria = NoriaConnector::new(
320312
rh.clone(),
321313
auto_increments,
@@ -325,7 +317,7 @@ impl TestBuilder {
325317
A::EXPR_DIALECT,
326318
A::DIALECT,
327319
schema_search_path,
328-
adapter_rewrite_params,
320+
server_supports_pagination,
329321
)
330322
.await;
331323

readyset-client/src/controller.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ use petgraph::graph::NodeIndex;
1414
use readyset_errors::{
1515
internal, internal_err, rpc_err, rpc_err_no_downcast, ReadySetError, ReadySetResult,
1616
};
17-
use readyset_sql_passes::adapter_rewrites::AdapterRewriteParams;
1817
use replication_offset::ReplicationOffsets;
1918
use serde::de::DeserializeOwned;
2019
use serde::{Deserialize, Serialize};
@@ -926,8 +925,8 @@ impl ReadySetHandle {
926925
);
927926

928927
simple_request!(
929-
/// Returns the params to use when performing adapter rewrites.
930-
adapter_rewrite_params() -> AdapterRewriteParams
928+
/// Returns true if topk and pagination support are enabled on the server
929+
supports_pagination() -> bool
931930
);
932931

933932
simple_request!(

readyset-client/src/recipe/changelist.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ use nom_sql::{
4343
};
4444
use readyset_data::DfType;
4545
use readyset_errors::{internal, unsupported, ReadySetError, ReadySetResult};
46-
use readyset_sql_passes::adapter_rewrites::{self, AdapterRewriteParams};
46+
use readyset_sql_passes::adapter_rewrites;
4747
use serde::{Deserialize, Serialize};
4848
use test_strategy::Arbitrary;
4949
use tracing::error;
@@ -483,7 +483,7 @@ impl Change {
483483
/// rewrites on the parsed query string before passing it to the server via `/extend_recipe`.
484484
pub fn from_cache_ddl_request(
485485
ddl_req: &CacheDDLRequest,
486-
adapter_rewrite_params: AdapterRewriteParams,
486+
server_supports_pagination: bool,
487487
) -> ReadySetResult<Self> {
488488
macro_rules! mk_error {
489489
($str:expr) => {
@@ -531,7 +531,7 @@ impl Change {
531531

532532
adapter_rewrites::process_query(
533533
&mut statement,
534-
adapter_rewrite_params
534+
server_supports_pagination,
535535
)?;
536536

537537
Change::CreateCache(CreateCache {

readyset-logictest/src/runner.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -551,7 +551,7 @@ impl TestScript {
551551

552552
let mut rh = ReadySetHandle::new(authority.clone()).await;
553553

554-
let adapter_rewrite_params = rh.adapter_rewrite_params().await.unwrap();
554+
let server_supports_pagination = rh.supports_pagination().await.unwrap();
555555
let adapter_start_time = SystemTime::now();
556556

557557
let task = tokio::spawn(async move {
@@ -572,7 +572,7 @@ impl TestScript {
572572
DatabaseType::PostgreSQL => nom_sql::Dialect::PostgreSQL,
573573
},
574574
Default::default(),
575-
adapter_rewrite_params,
575+
server_supports_pagination,
576576
)
577577
.await;
578578
let query_status_cache: &'static _ = Box::leak(Box::new(QueryStatusCache::new()));

readyset-psql/tests/fallback.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2598,12 +2598,7 @@ async fn drop_and_recreate_demo_cache() {
25982598
// There was an error returned at one point in doing this, so this test is an attempt to block
25992599
// a breaking change to the demo script at CI time.
26002600
readyset_tracing::init_test_logging();
2601-
let (opts, _handle, shutdown_tx) = TestBuilder::default()
2602-
.fallback(true)
2603-
.allow_mixed_comparisons(false)
2604-
.build::<PostgreSQLAdapter>()
2605-
.await;
2606-
2601+
let (opts, _handle, shutdown_tx) = setup().await;
26072602
let conn = connect(opts).await;
26082603

26092604
let queries = [

0 commit comments

Comments
 (0)