Skip to content

Commit c174747

Browse files
committed
accept a vector of hooks instead of options of hooks
1 parent a373572 commit c174747

File tree

3 files changed

+17
-13
lines changed

3 files changed

+17
-13
lines changed

datafusion-postgres/src/handlers.rs

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,15 @@ pub struct HandlerFactory {
5555
}
5656

5757
impl HandlerFactory {
58-
pub fn new(session_context: Arc<SessionContext>, auth_manager: Arc<AuthManager>) -> Self {
58+
pub fn new(
59+
session_context: Arc<SessionContext>,
60+
auth_manager: Arc<AuthManager>,
61+
query_hooks: Vec<Arc<dyn QueryHook>>,
62+
) -> Self {
5963
let session_service = Arc::new(DfSessionService::new(
6064
session_context,
6165
auth_manager.clone(),
62-
None,
66+
query_hooks,
6367
));
6468
HandlerFactory { session_service }
6569
}
@@ -100,14 +104,14 @@ pub struct DfSessionService {
100104
parser: Arc<Parser>,
101105
timezone: Arc<Mutex<String>>,
102106
auth_manager: Arc<AuthManager>,
103-
query_hook: Option<Arc<dyn QueryHook>>,
107+
query_hooks: Vec<Arc<dyn QueryHook>>,
104108
}
105109

106110
impl DfSessionService {
107111
pub fn new(
108112
session_context: Arc<SessionContext>,
109113
auth_manager: Arc<AuthManager>,
110-
query_hook: Option<Arc<dyn QueryHook>>,
114+
query_hooks: Vec<Arc<dyn QueryHook>>,
111115
) -> DfSessionService {
112116
let parser = Arc::new(Parser {
113117
session_context: session_context.clone(),
@@ -118,7 +122,7 @@ impl DfSessionService {
118122
parser,
119123
timezone: Arc::new(Mutex::new("UTC".to_string())),
120124
auth_manager,
121-
query_hook,
125+
query_hooks,
122126
}
123127
}
124128

@@ -484,8 +488,8 @@ impl SimpleQueryHandler for DfSessionService {
484488
self.check_query_permission(client, &query).await?;
485489
}
486490

487-
// Call query hook with the parsed statement
488-
if let Some(hook) = &self.query_hook {
491+
// Call query hooks with the parsed statement
492+
for hook in &self.query_hooks {
489493
let wrapped_statement = Statement::Statement(Box::new(statement.clone()));
490494
if let Some(result) = hook
491495
.handle_query(&wrapped_statement, &self.session_context, client)
@@ -637,8 +641,8 @@ impl ExtendedQueryHandler for DfSessionService {
637641
.to_string();
638642
log::debug!("Received execute extended query: {query}"); // Log for debugging
639643

640-
// Check query hook first
641-
if let Some(hook) = &self.query_hook {
644+
// Check query hooks first
645+
for hook in &self.query_hooks {
642646
// Parse the SQL to get the Statement for the hook
643647
let sql = &portal.statement.statement.0;
644648
let statements = self
@@ -961,7 +965,7 @@ mod tests {
961965
async fn test_statement_timeout_set_and_show() {
962966
let session_context = Arc::new(SessionContext::new());
963967
let auth_manager = Arc::new(AuthManager::new());
964-
let service = DfSessionService::new(session_context, auth_manager);
968+
let service = DfSessionService::new(session_context, auth_manager, vec![]);
965969
let mut client = MockClient::new();
966970

967971
// Test setting timeout to 5000ms
@@ -987,7 +991,7 @@ mod tests {
987991
async fn test_statement_timeout_disable() {
988992
let session_context = Arc::new(SessionContext::new());
989993
let auth_manager = Arc::new(AuthManager::new());
990-
let service = DfSessionService::new(session_context, auth_manager);
994+
let service = DfSessionService::new(session_context, auth_manager, vec![]);
991995
let mut client = MockClient::new();
992996

993997
// Set timeout first

datafusion-postgres/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ pub async fn serve(
8585
auth_manager: Arc<AuthManager>,
8686
) -> Result<(), std::io::Error> {
8787
// Create the handler factory with authentication
88-
let factory = Arc::new(HandlerFactory::new(session_context, auth_manager));
88+
let factory = Arc::new(HandlerFactory::new(session_context, auth_manager, vec![]));
8989

9090
serve_with_handlers(factory, opts).await
9191
}

datafusion-postgres/tests/common/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ pub fn setup_handlers() -> DfSessionService {
2020
)
2121
.expect("Failed to setup sesession context");
2222

23-
DfSessionService::new(Arc::new(session_context), Arc::new(AuthManager::new()))
23+
DfSessionService::new(Arc::new(session_context), Arc::new(AuthManager::new()), vec![])
2424
}
2525

2626
#[derive(Debug, Default)]

0 commit comments

Comments
 (0)