@@ -9,7 +9,7 @@ use tracing::debug;
99
1010use crate :: {
1111 config:: { config, PreparedStatements as PreparedStatementsLevel } ,
12- frontend:: router:: parser:: RewritePlan ,
12+ frontend:: router:: parser:: { cache :: CachedAst , RewritePlan } ,
1313 net:: { Parse , ProtocolMessage } ,
1414 stats:: memory:: MemoryUsage ,
1515} ;
@@ -31,6 +31,7 @@ pub struct PreparedStatements {
3131 pub ( super ) local : HashMap < String , String > ,
3232 pub ( super ) level : PreparedStatementsLevel ,
3333 pub ( super ) memory_used : usize ,
34+ pub ( super ) rewrite : HashMap < String , CachedAst > ,
3435}
3536
3637impl MemoryUsage for PreparedStatements {
@@ -49,6 +50,7 @@ impl Default for PreparedStatements {
4950 local : HashMap :: default ( ) ,
5051 level : PreparedStatementsLevel :: Extended ,
5152 memory_used : 0 ,
53+ rewrite : HashMap :: new ( ) ,
5254 }
5355 }
5456}
@@ -97,15 +99,15 @@ impl PreparedStatements {
9799 parse. rename_fast ( & name)
98100 }
99101
100- /// Store a rewritten statement in the global cache forever.
101- pub fn cache_rewritten ( parse : & Parse ) -> String {
102- let exists = Self :: global ( ) . read ( ) . name ( parse ) ;
103- if let Some ( exists ) = exists {
104- exists
105- } else {
106- let ( _ , name ) = Self :: global ( ) . write ( ) . insert ( parse ) ;
107- name
108- }
102+ /// Get original AST for a prepared statement
103+ /// we have rewritten.
104+ pub fn get_original_ast ( & self , name : & str ) -> Option < & CachedAst > {
105+ self . rewrite . get ( name )
106+ }
107+
108+ /// Save original AST for re-use by subsequent Bind messages.
109+ pub fn save_original_ast ( & mut self , name : & str , ast : & CachedAst ) {
110+ self . rewrite . insert ( name . to_string ( ) , ast . clone ( ) ) ;
109111 }
110112
111113 /// Retrieve stored rewrite plan for a prepared statement, if any.
0 commit comments