@@ -90,29 +90,32 @@ impl QueryParser {
90
90
query. set_shard_mut ( round_robin:: next ( ) % context. shards ) ;
91
91
}
92
92
93
- if let Some ( buffered_query) = context. router_context . query . as_ref ( ) {
94
- let rewrite =
95
- RewriteEngine :: new ( ) . rewrite_select ( buffered_query. query ( ) , query. aggregate ( ) ) ;
96
- if !rewrite. plan . is_noop ( ) {
97
- if let BufferedQuery :: Prepared ( parse) = buffered_query {
93
+ // Only rewrite if query is cross-shard.
94
+ if query. is_cross_shard ( ) && context. shards > 1 {
95
+ if let Some ( buffered_query) = context. router_context . query . as_ref ( ) {
96
+ let rewrite =
97
+ RewriteEngine :: new ( ) . rewrite_select ( buffered_query. query ( ) , query. aggregate ( ) ) ;
98
+ if !rewrite. plan . is_noop ( ) {
99
+ if let BufferedQuery :: Prepared ( parse) = buffered_query {
100
+ let name = parse. name ( ) . to_owned ( ) ;
101
+ {
102
+ let prepared = context. prepared_statements ( ) ;
103
+ prepared. set_rewrite_plan ( & name, rewrite. plan . clone ( ) ) ;
104
+ prepared. update_query ( & name, & rewrite. sql ) ;
105
+ }
106
+ }
107
+ query. set_rewrite ( rewrite. plan , rewrite. sql ) ;
108
+ } else if let BufferedQuery :: Prepared ( parse) = buffered_query {
98
109
let name = parse. name ( ) . to_owned ( ) ;
99
- {
110
+ let stored_plan = {
100
111
let prepared = context. prepared_statements ( ) ;
101
- prepared. set_rewrite_plan ( & name, rewrite. plan . clone ( ) ) ;
102
- prepared. update_query ( & name, & rewrite. sql ) ;
103
- }
104
- }
105
- query. set_rewrite ( rewrite. plan , rewrite. sql ) ;
106
- } else if let BufferedQuery :: Prepared ( parse) = buffered_query {
107
- let name = parse. name ( ) . to_owned ( ) ;
108
- let stored_plan = {
109
- let prepared = context. prepared_statements ( ) ;
110
- prepared. rewrite_plan ( & name)
111
- } ;
112
- if let Some ( plan) = stored_plan {
113
- if !plan. is_noop ( ) {
114
- query. clear_rewrite ( ) ;
115
- * query. rewrite_plan_mut ( ) = plan;
112
+ prepared. rewrite_plan ( & name)
113
+ } ;
114
+ if let Some ( plan) = stored_plan {
115
+ if !plan. is_noop ( ) {
116
+ query. clear_rewrite ( ) ;
117
+ * query. rewrite_plan_mut ( ) = plan;
118
+ }
116
119
}
117
120
}
118
121
}
0 commit comments