risingwave_frontend/handler/
alter_database_param.rs1use pgwire::pg_response::{PgResponse, StatementType};
16use risingwave_common::catalog::AlterDatabaseParam;
17use risingwave_sqlparser::ast::ObjectName;
18
19use super::{HandlerArgs, RwPgResponse};
20use crate::Binder;
21use crate::error::Result;
22
23pub async fn handle_alter_database_param(
24 handler_args: HandlerArgs,
25 database_name: ObjectName,
26 param: AlterDatabaseParam,
27) -> Result<RwPgResponse> {
28 let session = handler_args.session;
29
30 let database_name = Binder::resolve_database_name(database_name)?;
31 let database_id = {
32 let catalog_reader = session.env().catalog_reader().read_guard();
33 let database = catalog_reader.get_database_by_name(&database_name)?;
34
35 session.check_privilege_for_drop_alter_db_schema(database)?;
37
38 database.id()
39 };
40
41 let catalog_writer = session.catalog_writer()?;
42 catalog_writer
43 .alter_database_param(database_id, param)
44 .await?;
45
46 Ok(PgResponse::empty_result(StatementType::ALTER_DATABASE))
47}
48
49#[cfg(test)]
50mod tests {
51 use crate::test_utils::LocalFrontend;
52
53 #[tokio::test]
54 async fn test_alter_barrier() {
55 let frontend = LocalFrontend::new(Default::default()).await;
56 let session = frontend.session_ref();
57 let catalog_reader = session.env().catalog_reader();
58
59 frontend.run_sql("CREATE DATABASE test_db").await.unwrap();
60 {
61 let reader = catalog_reader.read_guard();
62 let db = reader.get_database_by_name("test_db").unwrap();
63 assert!(db.barrier_interval_ms.is_none());
64 assert!(db.checkpoint_frequency.is_none());
65 }
66
67 frontend
68 .run_sql("ALTER DATABASE test_db SET BARRIER_INTERVAL_MS = 1000")
69 .await
70 .unwrap();
71 {
72 let reader = catalog_reader.read_guard();
73 let db = reader.get_database_by_name("test_db").unwrap();
74 assert_eq!(db.barrier_interval_ms, Some(1000));
75 assert!(db.checkpoint_frequency.is_none());
76 }
77
78 frontend
79 .run_sql("ALTER DATABASE test_db SET CHECKPOINT_FREQUENCY = 10")
80 .await
81 .unwrap();
82 {
83 let reader = catalog_reader.read_guard();
84 let db = reader.get_database_by_name("test_db").unwrap();
85 assert_eq!(db.barrier_interval_ms, Some(1000));
86 assert_eq!(db.checkpoint_frequency, Some(10));
87 }
88
89 frontend
90 .run_sql("ALTER DATABASE test_db SET BARRIER_INTERVAL_MS = DEFAULT")
91 .await
92 .unwrap();
93 {
94 let reader = catalog_reader.read_guard();
95 let db = reader.get_database_by_name("test_db").unwrap();
96 assert!(db.barrier_interval_ms.is_none());
97 assert_eq!(db.checkpoint_frequency, Some(10));
98 }
99
100 frontend
101 .run_sql("ALTER DATABASE test_db SET CHECKPOINT_FREQUENCY = DEFAULT")
102 .await
103 .unwrap();
104 {
105 let reader = catalog_reader.read_guard();
106 let db = reader.get_database_by_name("test_db").unwrap();
107 assert!(db.barrier_interval_ms.is_none());
108 assert!(db.checkpoint_frequency.is_none());
109 }
110 }
111}