diff --git a/src/servers/src/mysql/federated.rs b/src/servers/src/mysql/federated.rs index 0b8ec838f65..48837e07904 100644 --- a/src/servers/src/mysql/federated.rs +++ b/src/servers/src/mysql/federated.rs @@ -281,10 +281,10 @@ fn check_show_variables(query: &str) -> Option { } else if SHOW_LOWER_CASE_PATTERN.is_match(query) { Some(show_variables("lower_case_table_names", "0")) } else if let Some(matched) = SHOW_VARIABLES_LIKE_PATTERN.find(query) { - let remainder = &query[matched.end()..]; - let remainder = strip_leading_comments(remainder).trim_start(); - let remainder = remainder.strip_prefix(';').unwrap_or(remainder); - let remainder = strip_leading_comments(remainder); + let mut remainder = strip_leading_comments(&query[matched.end()..]); + while let Some(rest) = remainder.strip_prefix(';') { + remainder = strip_leading_comments(rest); + } if remainder.is_empty() { Some(show_variables("", "")) } else { @@ -668,6 +668,7 @@ mod test { "SHOW VARIABLES query.parallelism;", "SHOW VARIABLES /* comment */ query.parallelism", "SHOW VARIABLES; SELECT 1", + "SHOW VARIABLES; /* comment */; SELECT 1", ] { assert!( check(query, QueryContext::arc(), session.clone()).is_none(), @@ -678,6 +679,8 @@ mod test { for query in [ "SHOW VARIABLES", "SHOW VARIABLES;", + "SHOW VARIABLES;;", + "SHOW VARIABLES; /* comment */;", "SHOW VARIABLES /* comment */", "SHOW VARIABLES /* comment */;", "SHOW VARIABLES # comment", diff --git a/src/servers/src/postgres/handler.rs b/src/servers/src/postgres/handler.rs index 06f254da055..e55068de104 100644 --- a/src/servers/src/postgres/handler.rs +++ b/src/servers/src/postgres/handler.rs @@ -355,7 +355,7 @@ impl QueryParser for DefaultQueryParser { let (sql, copy_to_stdout_format) = if let Ok(mut statements) = parsed_statements { let first_stmt = statements.remove(0); let format = check_copy_to_stdout(&first_stmt); - (first_stmt.to_string(), format) + (statement_to_query(&first_stmt), format) } else { // bypass the error: it can run into error because of different // versions of sqlparser diff --git a/src/servers/tests/postgres/mod.rs b/src/servers/tests/postgres/mod.rs index 2e031c0d0db..03140a49876 100644 --- a/src/servers/tests/postgres/mod.rs +++ b/src/servers/tests/postgres/mod.rs @@ -551,6 +551,24 @@ async fn test_extended_query_regproc_response() -> Result<()> { Ok(()) } +#[tokio::test] +async fn test_extended_query_show_query_option() -> Result<()> { + let server_port = start_test_server(TlsOption::default()).await?; + let client = create_connection_with_given_db(server_port, DEFAULT_SCHEMA_NAME) + .await + .unwrap(); + client + .batch_execute("SET query.parallelism = 2") + .await + .unwrap(); + let statement = client.prepare("SHOW query.parallelism").await.unwrap(); + let rows = client.query(&statement, &[]).await.unwrap(); + assert_eq!(rows.len(), 1); + assert_eq!(rows[0].get::(0), "2"); + + Ok(()) +} + #[tokio::test] async fn test_extended_query() -> Result<()> { let server_port = start_test_server(TlsOption::default()).await?;