@@ -12,11 +12,10 @@ use pgwire::api::auth::{
1212 finish_authentication, save_startup_parameters_to_metadata, DefaultServerParameterProvider , LoginInfo ,
1313 StartupHandler ,
1414} ;
15- use pgwire:: api:: copy:: NoopCopyHandler ;
1615use pgwire:: api:: portal:: Format ;
17- use pgwire:: api:: query:: { PlaceholderExtendedQueryHandler , SimpleQueryHandler } ;
16+ use pgwire:: api:: query:: SimpleQueryHandler ;
1817use pgwire:: api:: results:: { DataRowEncoder , FieldInfo , QueryResponse , Response , Tag } ;
19- use pgwire:: api:: { ClientInfo , NoopErrorHandler , METADATA_DATABASE } ;
18+ use pgwire:: api:: { ClientInfo , METADATA_DATABASE } ;
2019use pgwire:: api:: { PgWireConnectionState , PgWireServerHandlers } ;
2120use pgwire:: error:: { ErrorInfo , PgWireError , PgWireResult } ;
2221use pgwire:: messages:: data:: DataRow ;
@@ -145,12 +144,12 @@ async fn response<T>(res: axum::response::Result<T>, database: &str) -> Result<T
145144}
146145
147146struct PgSpacetimeDB < T > {
148- ctx : Arc < T > ,
147+ ctx : T ,
149148 cached : Mutex < Option < Metadata > > ,
150149 parameter_provider : DefaultServerParameterProvider ,
151150}
152151
153- impl < T : ControlStateReadAccess + ControlStateWriteAccess + NodeDelegate > PgSpacetimeDB < T > {
152+ impl < T : ControlStateReadAccess + ControlStateWriteAccess + NodeDelegate + Clone > PgSpacetimeDB < T > {
154153 async fn exe_sql < ' a > ( & self , query : String ) -> PgWireResult < Vec < Response < ' a > > > {
155154 let params = self . cached . lock ( ) . await . clone ( ) . unwrap ( ) ;
156155 let db = SqlParams {
@@ -283,13 +282,11 @@ impl<T: Sync + Send + ControlStateReadAccess + ControlStateWriteAccess + NodeDel
283282 self . cached . lock ( ) . await . clone_from ( & Some ( metadata) ) ;
284283 finish_authentication ( client, & self . parameter_provider ) . await ?;
285284 }
286- PgWireFrontendMessage :: SslRequest ( ssl) => {
287- if ssl. is_some ( ) {
288- let err = PgError :: SSLNotSupported ;
289- log:: error!( "{err}" ) ;
290- let err = ErrorInfo :: new ( "FATAL" . to_owned ( ) , "28P01" . to_owned ( ) , err. to_string ( ) ) ;
291- return close_client ( client, err) . await ;
292- }
285+ PgWireFrontendMessage :: SslRequest ( _) => {
286+ let err = PgError :: SSLNotSupported ;
287+ log:: error!( "{err}" ) ;
288+ let err = ErrorInfo :: new ( "FATAL" . to_owned ( ) , "28P01" . to_owned ( ) , err. to_string ( ) ) ;
289+ return close_client ( client, err) . await ;
293290 }
294291 // The other messages are for features not supported by SpacetimeDB, that are rejected by the parser.
295292 _ => {
@@ -301,10 +298,10 @@ impl<T: Sync + Send + ControlStateReadAccess + ControlStateWriteAccess + NodeDel
301298}
302299
303300#[ async_trait]
304- impl < T : Sync + Send + ControlStateReadAccess + ControlStateWriteAccess + NodeDelegate > SimpleQueryHandler
301+ impl < T : Sync + Send + ControlStateReadAccess + ControlStateWriteAccess + NodeDelegate + Clone > SimpleQueryHandler
305302 for PgSpacetimeDB < T >
306303{
307- async fn do_query < ' a , C > ( & self , _client : & mut C , query : & ' a str ) -> PgWireResult < Vec < Response < ' a > > >
304+ async fn do_query < ' a , C > ( & self , _client : & mut C , query : & str ) -> PgWireResult < Vec < Response < ' a > > >
308305 where
309306 C : ClientInfo + Unpin + Send + Sync ,
310307 {
@@ -313,12 +310,12 @@ impl<T: Sync + Send + ControlStateReadAccess + ControlStateWriteAccess + NodeDel
313310}
314311
315312#[ derive( Clone ) ]
316- struct PgSpacetimeDBFactory < T > {
313+ pub struct PgSpacetimeDBFactory < T > {
317314 handler : Arc < PgSpacetimeDB < T > > ,
318315}
319316
320317impl < T > PgSpacetimeDBFactory < T > {
321- pub fn new ( ctx : Arc < T > ) -> Self {
318+ pub fn new ( ctx : T ) -> Self {
322319 let mut parameter_provider = DefaultServerParameterProvider :: default ( ) ;
323320 parameter_provider. server_version = format ! ( "spacetime {}" , spacetimedb_lib_version( ) ) ;
324321
@@ -333,39 +330,23 @@ impl<T> PgSpacetimeDBFactory<T> {
333330 }
334331}
335332
336- impl < T : Sync + Send + ControlStateReadAccess + ControlStateWriteAccess + NodeDelegate > PgWireServerHandlers
333+ impl < T : Sync + Send + ControlStateReadAccess + ControlStateWriteAccess + NodeDelegate + Clone > PgWireServerHandlers
337334 for PgSpacetimeDBFactory < T >
338335{
339- type StartupHandler = PgSpacetimeDB < T > ;
340- type SimpleQueryHandler = PgSpacetimeDB < T > ;
341- type ExtendedQueryHandler = PlaceholderExtendedQueryHandler ;
342- type CopyHandler = NoopCopyHandler ;
343- type ErrorHandler = NoopErrorHandler ;
344-
345- fn simple_query_handler ( & self ) -> Arc < Self :: SimpleQueryHandler > {
336+ fn simple_query_handler ( & self ) -> Arc < impl SimpleQueryHandler > {
346337 self . handler . clone ( )
347338 }
348339
349- fn extended_query_handler ( & self ) -> Arc < Self :: ExtendedQueryHandler > {
350- Arc :: new ( PlaceholderExtendedQueryHandler )
351- }
340+ // TODO: fn extended_query_handler(&self) -> Arc<impl ExtendedQueryHandler> {}
352341
353- fn startup_handler ( & self ) -> Arc < Self :: StartupHandler > {
342+ fn startup_handler ( & self ) -> Arc < impl StartupHandler > {
354343 self . handler . clone ( )
355344 }
356-
357- fn copy_handler ( & self ) -> Arc < Self :: CopyHandler > {
358- Arc :: new ( NoopCopyHandler )
359- }
360-
361- fn error_handler ( & self ) -> Arc < Self :: ErrorHandler > {
362- Arc :: new ( NoopErrorHandler )
363- }
364345}
365346
366- pub async fn start_pg < T : ControlStateReadAccess + ControlStateWriteAccess + NodeDelegate + ' static > (
347+ pub async fn start_pg < T : ControlStateReadAccess + ControlStateWriteAccess + NodeDelegate + Clone + ' static > (
367348 shutdown : Arc < Notify > ,
368- ctx : Arc < T > ,
349+ ctx : T ,
369350 tcp : TcpListener ,
370351) {
371352 let factory = Arc :: new ( PgSpacetimeDBFactory :: new ( ctx) ) ;
0 commit comments