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]