You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by xu...@apache.org on 2023/05/23 12:22:14 UTC

[arrow-datafusion] branch main updated: Do not run avro sqllogictests tests unless the avro feature is enabled (#6429)

This is an automated email from the ASF dual-hosted git repository.

xudong963 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-datafusion.git


The following commit(s) were added to refs/heads/main by this push:
     new 5a696ddc4d Do not run avro sqllogictests tests unless the avro feature is enabled (#6429)
5a696ddc4d is described below

commit 5a696ddc4d80818d1d2834787cf5440eac572cb7
Author: Andrew Lamb <an...@nerdnetworks.org>
AuthorDate: Tue May 23 08:22:06 2023 -0400

    Do not run avro sqllogictests tests unless the avro feature is enabled (#6429)
---
 datafusion/core/tests/sqllogictests/src/main.rs  | 45 +++++++++++++++++-------
 datafusion/core/tests/sqllogictests/src/setup.rs | 10 +++---
 2 files changed, 37 insertions(+), 18 deletions(-)

diff --git a/datafusion/core/tests/sqllogictests/src/main.rs b/datafusion/core/tests/sqllogictests/src/main.rs
index df43544867..e3e1fd384d 100644
--- a/datafusion/core/tests/sqllogictests/src/main.rs
+++ b/datafusion/core/tests/sqllogictests/src/main.rs
@@ -84,7 +84,10 @@ async fn run_test_file(
     relative_path: PathBuf,
 ) -> Result<(), Box<dyn Error>> {
     info!("Running with DataFusion runner: {}", path.display());
-    let test_ctx = context_for_test_file(&relative_path).await;
+    let Some(test_ctx) = context_for_test_file(&relative_path).await else {
+        info!("Skipping: {}", path.display());
+        return Ok(())
+    };
     let ctx = test_ctx.session_ctx().clone();
     let mut runner = sqllogictest::Runner::new(DataFusion::new(ctx, relative_path));
     runner.with_column_validator(strict_column_validator);
@@ -112,7 +115,10 @@ async fn run_complete_file(
 
     info!("Using complete mode to complete: {}", path.display());
 
-    let test_ctx = context_for_test_file(&relative_path).await;
+    let Some(test_ctx) = context_for_test_file(&relative_path).await else {
+        info!("Skipping: {}", path.display());
+        return Ok(())
+    };
     let ctx = test_ctx.session_ctx().clone();
     let mut runner = sqllogictest::Runner::new(DataFusion::new(ctx, relative_path));
     let col_separator = " ";
@@ -162,15 +168,20 @@ fn read_dir_recursive<P: AsRef<Path>>(path: P) -> Box<dyn Iterator<Item = PathBu
     )
 }
 
-/// Create a SessionContext, configured for the specific test
-async fn context_for_test_file(relative_path: &Path) -> TestContext {
+/// Create a SessionContext, configured for the specific test, if
+/// possible.
+///
+/// If `None` is returned (e.g. because some needed feature is not
+/// enabled), the file should be skipped
+async fn context_for_test_file(relative_path: &Path) -> Option<TestContext> {
     let config = SessionConfig::new()
         // hardcode target partitions so plans are deterministic
         .with_target_partitions(4);
 
-    let mut test_ctx = TestContext::new(SessionContext::with_config(config));
+    let test_ctx = TestContext::new(SessionContext::with_config(config));
 
-    match relative_path.file_name().unwrap().to_str().unwrap() {
+    let file_name = relative_path.file_name().unwrap().to_str().unwrap();
+    match file_name {
         "aggregate.slt" => {
             info!("Registering aggregate tables");
             setup::register_aggregate_tables(test_ctx.session_ctx()).await;
@@ -180,14 +191,24 @@ async fn context_for_test_file(relative_path: &Path) -> TestContext {
             setup::register_scalar_tables(test_ctx.session_ctx()).await;
         }
         "avro.slt" => {
-            info!("Registering avro tables");
-            setup::register_avro_tables(&mut test_ctx).await;
+            #[cfg(feature = "avro")]
+            {
+                let mut test_ctx = test_ctx;
+                info!("Registering avro tables");
+                setup::register_avro_tables(&mut test_ctx).await;
+                return Some(test_ctx);
+            }
+            #[cfg(not(feature = "avro"))]
+            {
+                info!("Skipping {file_name} because avro feature is not enabled");
+                return None;
+            }
         }
         _ => {
             info!("Using default SessionContext");
         }
     };
-    test_ctx
+    Some(test_ctx)
 }
 
 /// Context for running tests
@@ -199,7 +220,7 @@ pub struct TestContext {
 }
 
 impl TestContext {
-    fn new(ctx: SessionContext) -> Self {
+    pub fn new(ctx: SessionContext) -> Self {
         Self {
             ctx,
             test_dir: None,
@@ -208,7 +229,7 @@ impl TestContext {
 
     /// Enables the test directory feature. If not enabled,
     /// calling `testdir_path` will result in a panic.
-    fn enable_testdir(&mut self) {
+    pub fn enable_testdir(&mut self) {
         if self.test_dir.is_none() {
             self.test_dir = Some(TempDir::new().expect("failed to create testdir"));
         }
@@ -216,7 +237,7 @@ impl TestContext {
 
     /// Returns the path to the test directory. Panics if the test
     /// directory feature is not enabled via `enable_testdir`.
-    fn testdir_path(&self) -> &Path {
+    pub fn testdir_path(&self) -> &Path {
         self.test_dir.as_ref().expect("testdir not enabled").path()
     }
 
diff --git a/datafusion/core/tests/sqllogictests/src/setup.rs b/datafusion/core/tests/sqllogictests/src/setup.rs
index 91ce03c5a0..8072a0f74f 100644
--- a/datafusion/core/tests/sqllogictests/src/setup.rs
+++ b/datafusion/core/tests/sqllogictests/src/setup.rs
@@ -15,7 +15,6 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use datafusion::prelude::AvroReadOptions;
 use datafusion::{
     arrow::{
         array::{
@@ -31,13 +30,12 @@ use datafusion::{
 };
 use std::sync::Arc;
 
-use crate::{utils, TestContext};
+use crate::utils;
 
-pub async fn register_avro_tables(ctx: &mut TestContext) {
-    register_avro_test_data(ctx).await;
-}
+#[cfg(feature = "avro")]
+pub async fn register_avro_tables(ctx: &mut crate::TestContext) {
+    use datafusion::prelude::AvroReadOptions;
 
-async fn register_avro_test_data(ctx: &mut TestContext) {
     ctx.enable_testdir();
 
     let table_path = ctx.testdir_path().join("avro");