@@ -10,10 +10,10 @@ use bytes::{Buf, BufMut, BytesMut};
1010
1111use crate :: {
1212 backend:: databases:: databases,
13- config:: { config, load_test, load_test_replicas, set, Role } ,
13+ config:: { config, load_test, load_test_replicas, set, PreparedStatements , Role } ,
1414 frontend:: {
1515 client:: { BufferEvent , QueryEngine } ,
16- Client ,
16+ prepared_statements , Client ,
1717 } ,
1818 net:: {
1919 bind:: Parameter , Bind , Close , CommandComplete , DataRow , Describe , ErrorResponse , Execute ,
@@ -307,8 +307,8 @@ async fn test_client_with_replicas() {
307307 client. run ( ) . await . unwrap ( ) ;
308308 } ) ;
309309 let buf = buffer ! (
310- { Parse :: new_anonymous ( "SELECT * FROM test_client_with_replicas" ) } ,
311- { Bind :: new_statement( "" ) } ,
310+ { Parse :: named ( "test" , "SELECT * FROM test_client_with_replicas" ) } ,
311+ { Bind :: new_statement( "test " ) } ,
312312 { Execute :: new( ) } ,
313313 { Sync }
314314 ) ;
@@ -769,3 +769,75 @@ async fn test_client_login_timeout_does_not_affect_queries() {
769769 conn. write_all ( & buffer ! ( { Terminate } ) ) . await . unwrap ( ) ;
770770 handle. await . unwrap ( ) ;
771771}
772+
773+ #[ tokio:: test]
774+ async fn test_anon_prepared_statements ( ) {
775+ crate :: logger ( ) ;
776+ load_test ( ) ;
777+
778+ let ( mut conn, mut client, _) = new_client ! ( false ) ;
779+
780+ let mut c = ( * config ( ) ) . clone ( ) ;
781+ c. config . general . prepared_statements = PreparedStatements :: ExtendedAnonymous ;
782+ set ( c) . unwrap ( ) ;
783+
784+ let handle = tokio:: spawn ( async move {
785+ client. run ( ) . await . unwrap ( ) ;
786+ } ) ;
787+
788+ conn. write_all ( & buffer ! (
789+ { Parse :: new_anonymous( "SELECT 1" ) } ,
790+ { Bind :: new_params( "" , & [ ] ) } ,
791+ { Execute :: new( ) } ,
792+ { Sync }
793+ ) )
794+ . await
795+ . unwrap ( ) ;
796+
797+ let _ = read ! ( conn, [ '1' , '2' , 'D' , 'C' , 'Z' ] ) ;
798+
799+ {
800+ let cache = prepared_statements:: PreparedStatements :: global ( ) ;
801+ let read = cache. read ( ) ;
802+ assert ! ( !read. is_empty( ) ) ;
803+ }
804+
805+ conn. write_all ( & buffer ! ( { Terminate } ) ) . await . unwrap ( ) ;
806+ handle. await . unwrap ( ) ;
807+ }
808+
809+ #[ tokio:: test]
810+ async fn test_anon_prepared_statements_extended ( ) {
811+ crate :: logger ( ) ;
812+ load_test ( ) ;
813+
814+ let ( mut conn, mut client, _) = new_client ! ( false ) ;
815+
816+ let mut c = ( * config ( ) ) . clone ( ) ;
817+ c. config . general . prepared_statements = PreparedStatements :: Extended ;
818+ set ( c) . unwrap ( ) ;
819+
820+ let handle = tokio:: spawn ( async move {
821+ client. run ( ) . await . unwrap ( ) ;
822+ } ) ;
823+
824+ conn. write_all ( & buffer ! (
825+ { Parse :: new_anonymous( "SELECT 1" ) } ,
826+ { Bind :: new_params( "" , & [ ] ) } ,
827+ { Execute :: new( ) } ,
828+ { Sync }
829+ ) )
830+ . await
831+ . unwrap ( ) ;
832+
833+ let _ = read ! ( conn, [ '1' , '2' , 'D' , 'C' , 'Z' ] ) ;
834+
835+ {
836+ let cache = prepared_statements:: PreparedStatements :: global ( ) ;
837+ let read = cache. read ( ) ;
838+ assert ! ( read. is_empty( ) ) ;
839+ }
840+
841+ conn. write_all ( & buffer ! ( { Terminate } ) ) . await . unwrap ( ) ;
842+ handle. await . unwrap ( ) ;
843+ }
0 commit comments