@@ -3,16 +3,16 @@ use std::sync::Arc;
33
44use crate :: auth:: { AuthManager , Permission , ResourceType } ;
55use crate :: sql:: {
6- parse, rewrite, AliasDuplicatedProjectionRewrite , FixArrayLiteral , PrependUnqualifiedTableName ,
7- RemoveTableFunctionQualifier , RemoveUnsupportedTypes , ResolveUnqualifiedIdentifer ,
8- RewriteArrayAnyAllOperation , SqlStatementRewriteRule ,
6+ parse, rewrite, AliasDuplicatedProjectionRewrite , BlacklistSqlRewriter , FixArrayLiteral ,
7+ PrependUnqualifiedPgTableName , RemoveTableFunctionQualifier , RemoveUnsupportedTypes ,
8+ ResolveUnqualifiedIdentifer , RewriteArrayAnyAllOperation , SqlStatementRewriteRule ,
99} ;
1010use async_trait:: async_trait;
1111use datafusion:: arrow:: datatypes:: DataType ;
1212use datafusion:: logical_expr:: LogicalPlan ;
1313use datafusion:: prelude:: * ;
1414use datafusion:: sql:: parser:: Statement ;
15- use log:: warn;
15+ use log:: { info , warn} ;
1616use pgwire:: api:: auth:: noop:: NoopStartupHandler ;
1717use pgwire:: api:: auth:: StartupHandler ;
1818use pgwire:: api:: portal:: { Format , Portal } ;
@@ -23,7 +23,7 @@ use pgwire::api::results::{
2323} ;
2424use pgwire:: api:: stmt:: QueryParser ;
2525use pgwire:: api:: stmt:: StoredStatement ;
26- use pgwire:: api:: { ClientInfo , PgWireServerHandlers , Type } ;
26+ use pgwire:: api:: { ClientInfo , ErrorHandler , PgWireServerHandlers , Type } ;
2727use pgwire:: error:: { PgWireError , PgWireResult } ;
2828use pgwire:: messages:: response:: TransactionStatus ;
2929use tokio:: sync:: Mutex ;
@@ -65,6 +65,21 @@ impl PgWireServerHandlers for HandlerFactory {
6565 fn startup_handler ( & self ) -> Arc < impl StartupHandler > {
6666 Arc :: new ( SimpleStartupHandler )
6767 }
68+
69+ fn error_handler ( & self ) -> Arc < impl ErrorHandler > {
70+ Arc :: new ( LoggingErrorHandler )
71+ }
72+ }
73+
74+ struct LoggingErrorHandler ;
75+
76+ impl ErrorHandler for LoggingErrorHandler {
77+ fn on_error < C > ( & self , _client : & C , error : & mut PgWireError )
78+ where
79+ C : ClientInfo ,
80+ {
81+ info ! ( "Sending error: {error}" )
82+ }
6883}
6984
7085/// The pgwire handler backed by a datafusion `SessionContext`
@@ -82,11 +97,14 @@ impl DfSessionService {
8297 auth_manager : Arc < AuthManager > ,
8398 ) -> DfSessionService {
8499 let sql_rewrite_rules: Vec < Arc < dyn SqlStatementRewriteRule > > = vec ! [
100+ // make sure blacklist based rewriter it on the top to prevent sql
101+ // being rewritten from other rewriters
102+ Arc :: new( BlacklistSqlRewriter :: new( ) ) ,
85103 Arc :: new( AliasDuplicatedProjectionRewrite ) ,
86104 Arc :: new( ResolveUnqualifiedIdentifer ) ,
87105 Arc :: new( RemoveUnsupportedTypes :: new( ) ) ,
88106 Arc :: new( RewriteArrayAnyAllOperation ) ,
89- Arc :: new( PrependUnqualifiedTableName :: new ( ) ) ,
107+ Arc :: new( PrependUnqualifiedPgTableName ) ,
90108 Arc :: new( FixArrayLiteral ) ,
91109 Arc :: new( RemoveTableFunctionQualifier ) ,
92110 ] ;
@@ -649,7 +667,9 @@ impl ExtendedQueryHandler for DfSessionService {
649667 let param_types = plan
650668 . get_parameter_types ( )
651669 . map_err ( |e| PgWireError :: ApiError ( Box :: new ( e) ) ) ?;
670+
652671 let param_values = df:: deserialize_parameters ( portal, & ordered_param_types ( & param_types) ) ?; // Fixed: Use ¶m_types
672+
653673 let plan = plan
654674 . clone ( )
655675 . replace_params_with_values ( & param_values)
@@ -678,12 +698,10 @@ impl ExtendedQueryHandler for DfSessionService {
678698 } ) ?
679699 . map_err ( |e| PgWireError :: ApiError ( Box :: new ( e) ) ) ?
680700 } else {
681- match self . session_context . execute_logical_plan ( optimised) . await {
682- Ok ( df) => df,
683- Err ( e) => {
684- return Err ( PgWireError :: ApiError ( Box :: new ( e) ) ) ;
685- }
686- }
701+ self . session_context
702+ . execute_logical_plan ( optimised)
703+ . await
704+ . map_err ( |e| PgWireError :: ApiError ( Box :: new ( e) ) ) ?
687705 }
688706 } ;
689707 let resp = df:: encode_dataframe ( dataframe, & portal. result_column_format ) . await ?;
0 commit comments