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

JingsongLi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/paimon-rust.git


The following commit(s) were added to refs/heads/main by this push:
     new 6121dec  [fix] register catalog first check default db is exist and 
support information schema (#315)
6121dec is described below

commit 6121deccfd15bce42100340fd2f6b3d4f3a32254
Author: jerry <[email protected]>
AuthorDate: Tue May 12 19:03:07 2026 +0800

    [fix] register catalog first check default db is exist and support 
information schema (#315)
---
 crates/integrations/datafusion/src/sql_context.rs  | 24 ++++++++++++++--------
 .../datafusion/tests/sql_context_tests.rs          | 14 +++++++++++++
 2 files changed, 29 insertions(+), 9 deletions(-)

diff --git a/crates/integrations/datafusion/src/sql_context.rs 
b/crates/integrations/datafusion/src/sql_context.rs
index 87f5ccb..b54f443 100644
--- a/crates/integrations/datafusion/src/sql_context.rs
+++ b/crates/integrations/datafusion/src/sql_context.rs
@@ -46,7 +46,7 @@ use datafusion::arrow::record_batch::RecordBatch;
 use datafusion::common::TableReference;
 use datafusion::datasource::{MemTable, TableProvider};
 use datafusion::error::{DataFusionError, Result as DFResult};
-use datafusion::prelude::{DataFrame, SessionContext};
+use datafusion::prelude::{DataFrame, SessionConfig, SessionContext};
 use datafusion::sql::sqlparser::ast::{
     AlterTableOperation, ColumnDef, CreateTable, CreateTableOptions, 
CreateView, Delete,
     Expr as SqlExpr, FromTable, Insert, Merge, ObjectName, ObjectType, 
RenameTableNameKind, Reset,
@@ -92,7 +92,8 @@ impl Default for SQLContext {
 impl SQLContext {
     /// Creates a new empty SQL context.
     pub fn new() -> Self {
-        let ctx = SessionContext::new();
+        let ctx =
+            
SessionContext::new_with_config(SessionConfig::new().with_information_schema(true));
         ctx.register_relation_planner(Arc::new(
             crate::relation_planner::PaimonRelationPlanner::new(),
         ))
@@ -117,12 +118,17 @@ impl SQLContext {
     ) -> DFResult<()> {
         let catalog_name = catalog_name.into();
         let is_first = self.catalogs.is_empty();
-
-        catalog
-            .create_database("default", true, Default::default())
-            .await
-            .map_err(|e| DataFusionError::External(Box::new(e)))?;
-
+        let default_db = "default";
+        match catalog.get_database(default_db).await {
+            Ok(_) => {}
+            Err(paimon::Error::DatabaseNotExist { .. }) => {
+                catalog
+                    .create_database(default_db, true, Default::default())
+                    .await
+                    .map_err(|e| DataFusionError::External(Box::new(e)))?;
+            }
+            Err(e) => return Err(DataFusionError::External(Box::new(e))),
+        }
         self.ctx.register_catalog(
             &catalog_name,
             
Arc::new(crate::catalog::PaimonCatalogProvider::with_dynamic_options(
@@ -133,7 +139,7 @@ impl SQLContext {
         self.catalogs.insert(catalog_name.clone(), catalog);
         if is_first {
             self.set_current_catalog(catalog_name).await?;
-            self.set_current_database("default").await?;
+            self.set_current_database(default_db).await?;
         }
         Ok(())
     }
diff --git a/crates/integrations/datafusion/tests/sql_context_tests.rs 
b/crates/integrations/datafusion/tests/sql_context_tests.rs
index 5a86673..7deed17 100644
--- a/crates/integrations/datafusion/tests/sql_context_tests.rs
+++ b/crates/integrations/datafusion/tests/sql_context_tests.rs
@@ -42,6 +42,20 @@ async fn create_sql_context(catalog: Arc<FileSystemCatalog>) 
-> SQLContext {
     ctx
 }
 
+#[tokio::test]
+async fn test_show_tables_is_enabled() {
+    let (_tmp, catalog) = create_test_env();
+    let sql_context = create_sql_context(catalog).await;
+
+    sql_context
+        .sql("SHOW TABLES")
+        .await
+        .expect("SHOW TABLES should be planned when information_schema is 
enabled")
+        .collect()
+        .await
+        .expect("SHOW TABLES should execute");
+}
+
 // ======================= CREATE / DROP SCHEMA =======================
 
 #[tokio::test]

Reply via email to