Compare commits

..

1 Commits

Author SHA1 Message Date
Javier Goday
f782206578 #829: read/write splitting on CTE mutable statements 2024-10-16 20:12:25 +02:00

View File

@@ -386,14 +386,14 @@ impl QueryRouter {
} }
} }
/// Determines if a query is a mutation or not. /// Determines if a query is mutable or not.
fn is_mutation_query(q: &sqlparser::ast::Query) -> bool { fn query_is_mutable_statement(q: &sqlparser::ast::Query) -> bool {
use sqlparser::ast::*; use sqlparser::ast::*;
match q.body.as_ref() { match q.body.as_ref() {
SetExpr::Insert(_) => true, SetExpr::Insert(_) => true,
SetExpr::Update(_) => true, SetExpr::Update(_) => true,
SetExpr::Query(q) => Self::is_mutation_query(q), SetExpr::Query(q) => Self::query_is_mutable_statement(q),
_ => false, _ => false,
} }
} }
@@ -440,9 +440,9 @@ impl QueryRouter {
}; };
let has_locks = !query.locks.is_empty(); let has_locks = !query.locks.is_empty();
let has_mutation = Self::is_mutation_query(query); let is_mutable_statement = Self::query_is_mutable_statement(query);
if has_locks || has_mutation { if has_locks || is_mutable_statement {
self.active_role = Some(Role::Primary); self.active_role = Some(Role::Primary);
} else if !visited_write_statement { } else if !visited_write_statement {
// If we already visited a write statement, we should be going to the primary. // If we already visited a write statement, we should be going to the primary.