This is an automated email from the ASF dual-hosted git repository.
alamb 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 69d096a5de Port remaining information_schema rust tests to
sqllogictests (#7050)
69d096a5de is described below
commit 69d096a5de48f9073c508b085d37a23137c88e05
Author: Palash Nigam (He/Him) <[email protected]>
AuthorDate: Thu Jul 27 16:18:28 2023 +0530
Port remaining information_schema rust tests to sqllogictests (#7050)
* Port remaining information_schema rust tests to sqllogictests
Closes: #6301
Signed-off-by: Palash Nigam <[email protected]>
* fix clippy
* remove comments
---------
Signed-off-by: Palash Nigam <[email protected]>
Co-authored-by: Andrew Lamb <[email protected]>
---
datafusion/core/tests/sql/information_schema.rs | 220 ---------------------
datafusion/core/tests/sql/mod.rs | 1 -
datafusion/core/tests/sqllogictests/src/main.rs | 8 +
datafusion/core/tests/sqllogictests/src/setup.rs | 96 ++++++++-
.../test_files/information_schema_columns.slt | 53 +++++
.../information_schema_multiple_catalogs.slt | 111 +++++++++++
.../test_files/information_schema_table_types.slt | 51 +++++
7 files changed, 317 insertions(+), 223 deletions(-)
diff --git a/datafusion/core/tests/sql/information_schema.rs
b/datafusion/core/tests/sql/information_schema.rs
deleted file mode 100644
index 1cb5180991..0000000000
--- a/datafusion/core/tests/sql/information_schema.rs
+++ /dev/null
@@ -1,220 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-use async_trait::async_trait;
-use datafusion::execution::context::SessionState;
-use datafusion::{
- catalog::{
- schema::{MemorySchemaProvider, SchemaProvider},
- CatalogProvider, MemoryCatalogProvider,
- },
- datasource::{TableProvider, TableType},
-};
-use datafusion_expr::Expr;
-
-use super::*;
-
-#[tokio::test]
-async fn information_schema_tables_tables_with_multiple_catalogs() {
- let ctx =
-
SessionContext::with_config(SessionConfig::new().with_information_schema(true));
- let catalog = MemoryCatalogProvider::new();
- let schema = MemorySchemaProvider::new();
- schema
- .register_table("t1".to_owned(), table_with_sequence(1, 1).unwrap())
- .unwrap();
- schema
- .register_table("t2".to_owned(), table_with_sequence(1, 1).unwrap())
- .unwrap();
- catalog
- .register_schema("my_schema", Arc::new(schema))
- .unwrap();
- ctx.register_catalog("my_catalog", Arc::new(catalog));
-
- let catalog = MemoryCatalogProvider::new();
- let schema = MemorySchemaProvider::new();
- schema
- .register_table("t3".to_owned(), table_with_sequence(1, 1).unwrap())
- .unwrap();
- catalog
- .register_schema("my_other_schema", Arc::new(schema))
- .unwrap();
- ctx.register_catalog("my_other_catalog", Arc::new(catalog));
-
- let result = plan_and_collect(&ctx, "SELECT * from
information_schema.tables")
- .await
- .unwrap();
-
- let expected = vec![
- "+------------------+--------------------+-------------+------------+",
- "| table_catalog | table_schema | table_name | table_type |",
- "+------------------+--------------------+-------------+------------+",
- "| datafusion | information_schema | columns | VIEW |",
- "| datafusion | information_schema | df_settings | VIEW |",
- "| datafusion | information_schema | tables | VIEW |",
- "| datafusion | information_schema | views | VIEW |",
- "| my_catalog | information_schema | columns | VIEW |",
- "| my_catalog | information_schema | df_settings | VIEW |",
- "| my_catalog | information_schema | tables | VIEW |",
- "| my_catalog | information_schema | views | VIEW |",
- "| my_catalog | my_schema | t1 | BASE TABLE |",
- "| my_catalog | my_schema | t2 | BASE TABLE |",
- "| my_other_catalog | information_schema | columns | VIEW |",
- "| my_other_catalog | information_schema | df_settings | VIEW |",
- "| my_other_catalog | information_schema | tables | VIEW |",
- "| my_other_catalog | information_schema | views | VIEW |",
- "| my_other_catalog | my_other_schema | t3 | BASE TABLE |",
- "+------------------+--------------------+-------------+------------+",
- ];
- assert_batches_sorted_eq!(expected, &result);
-}
-
-#[tokio::test]
-async fn information_schema_tables_table_types() {
- struct TestTable(TableType);
-
- #[async_trait]
- impl TableProvider for TestTable {
- fn as_any(&self) -> &dyn std::any::Any {
- self
- }
-
- fn table_type(&self) -> TableType {
- self.0
- }
-
- fn schema(&self) -> SchemaRef {
- unimplemented!()
- }
-
- async fn scan(
- &self,
- _state: &SessionState,
- _: Option<&Vec<usize>>,
- _: &[Expr],
- _: Option<usize>,
- ) -> Result<Arc<dyn ExecutionPlan>> {
- unimplemented!()
- }
- }
-
- let ctx =
-
SessionContext::with_config(SessionConfig::new().with_information_schema(true));
-
- ctx.register_table("physical", Arc::new(TestTable(TableType::Base)))
- .unwrap();
- ctx.register_table("query", Arc::new(TestTable(TableType::View)))
- .unwrap();
- ctx.register_table("temp", Arc::new(TestTable(TableType::Temporary)))
- .unwrap();
-
- let result = plan_and_collect(&ctx, "SELECT * from
information_schema.tables")
- .await
- .unwrap();
-
- let expected = vec![
-
"+---------------+--------------------+-------------+-----------------+",
- "| table_catalog | table_schema | table_name | table_type
|",
-
"+---------------+--------------------+-------------+-----------------+",
- "| datafusion | information_schema | columns | VIEW
|",
- "| datafusion | information_schema | df_settings | VIEW
|",
- "| datafusion | information_schema | tables | VIEW
|",
- "| datafusion | information_schema | views | VIEW
|",
- "| datafusion | public | physical | BASE TABLE
|",
- "| datafusion | public | query | VIEW
|",
- "| datafusion | public | temp | LOCAL TEMPORARY
|",
-
"+---------------+--------------------+-------------+-----------------+",
- ];
- assert_batches_sorted_eq!(expected, &result);
-}
-
-fn table_with_many_types() -> Arc<dyn TableProvider> {
- let schema = Schema::new(vec![
- Field::new("int32_col", DataType::Int32, false),
- Field::new("float64_col", DataType::Float64, true),
- Field::new("utf8_col", DataType::Utf8, true),
- Field::new("large_utf8_col", DataType::LargeUtf8, false),
- Field::new("binary_col", DataType::Binary, false),
- Field::new("large_binary_col", DataType::LargeBinary, false),
- Field::new(
- "timestamp_nanos",
- DataType::Timestamp(TimeUnit::Nanosecond, None),
- false,
- ),
- ]);
-
- let batch = RecordBatch::try_new(
- Arc::new(schema.clone()),
- vec![
- Arc::new(Int32Array::from(vec![1])),
- Arc::new(Float64Array::from(vec![1.0])),
- Arc::new(StringArray::from(vec![Some("foo")])),
- Arc::new(LargeStringArray::from(vec![Some("bar")])),
- Arc::new(BinaryArray::from(vec![b"foo" as &[u8]])),
- Arc::new(LargeBinaryArray::from(vec![b"foo" as &[u8]])),
- Arc::new(TimestampNanosecondArray::from(vec![Some(123)])),
- ],
- )
- .unwrap();
- let provider = MemTable::try_new(Arc::new(schema),
vec![vec![batch]]).unwrap();
- Arc::new(provider)
-}
-
-#[tokio::test]
-async fn information_schema_columns() {
- let ctx =
-
SessionContext::with_config(SessionConfig::new().with_information_schema(true));
- let catalog = MemoryCatalogProvider::new();
- let schema = MemorySchemaProvider::new();
-
- schema
- .register_table("t1".to_owned(), table_with_sequence(1, 1).unwrap())
- .unwrap();
-
- schema
- .register_table("t2".to_owned(), table_with_many_types())
- .unwrap();
- catalog
- .register_schema("my_schema", Arc::new(schema))
- .unwrap();
- ctx.register_catalog("my_catalog", Arc::new(catalog));
-
- let result = plan_and_collect(&ctx, "SELECT * from
information_schema.columns")
- .await
- .unwrap();
-
- let expected = vec![
-
"+---------------+--------------+------------+------------------+------------------+----------------+-------------+-----------------------------+--------------------------+------------------------+-------------------+-------------------------+---------------+--------------------+---------------+",
- "| table_catalog | table_schema | table_name | column_name |
ordinal_position | column_default | is_nullable | data_type |
character_maximum_length | character_octet_length | numeric_precision |
numeric_precision_radix | numeric_scale | datetime_precision | interval_type |",
-
"+---------------+--------------+------------+------------------+------------------+----------------+-------------+-----------------------------+--------------------------+------------------------+-------------------+-------------------------+---------------+--------------------+---------------+",
- "| my_catalog | my_schema | t1 | i | 0
| | YES | Int32 |
| | 32 | 2
| | | |",
- "| my_catalog | my_schema | t2 | binary_col | 4
| | NO | Binary |
| 2147483647 | |
| | | |",
- "| my_catalog | my_schema | t2 | float64_col | 1
| | YES | Float64 |
| | 24 | 2
| | | |",
- "| my_catalog | my_schema | t2 | int32_col | 0
| | NO | Int32 |
| | 32 | 2
| | | |",
- "| my_catalog | my_schema | t2 | large_binary_col | 5
| | NO | LargeBinary |
| 9223372036854775807 | |
| | | |",
- "| my_catalog | my_schema | t2 | large_utf8_col | 3
| | NO | LargeUtf8 |
| 9223372036854775807 | |
| | | |",
- "| my_catalog | my_schema | t2 | timestamp_nanos | 6
| | NO | Timestamp(Nanosecond, None) |
| | |
| | | |",
- "| my_catalog | my_schema | t2 | utf8_col | 2
| | YES | Utf8 |
| 2147483647 | |
| | | |",
-
"+---------------+--------------+------------+------------------+------------------+----------------+-------------+-----------------------------+--------------------------+------------------------+-------------------+-------------------------+---------------+--------------------+---------------+",
- ];
- assert_batches_sorted_eq!(expected, &result);
-}
-
-/// Execute SQL and return results
-async fn plan_and_collect(ctx: &SessionContext, sql: &str) ->
Result<Vec<RecordBatch>> {
- ctx.sql(sql).await?.collect().await
-}
diff --git a/datafusion/core/tests/sql/mod.rs b/datafusion/core/tests/sql/mod.rs
index f1ab0ccea9..85a8064285 100644
--- a/datafusion/core/tests/sql/mod.rs
+++ b/datafusion/core/tests/sql/mod.rs
@@ -84,7 +84,6 @@ pub mod csv_files;
pub mod explain_analyze;
pub mod expr;
pub mod group_by;
-pub mod information_schema;
pub mod joins;
pub mod limit;
pub mod order;
diff --git a/datafusion/core/tests/sqllogictests/src/main.rs
b/datafusion/core/tests/sqllogictests/src/main.rs
index 58089be245..c74d1cb11a 100644
--- a/datafusion/core/tests/sqllogictests/src/main.rs
+++ b/datafusion/core/tests/sqllogictests/src/main.rs
@@ -271,6 +271,14 @@ async fn context_for_test_file(relative_path: &Path) ->
Option<TestContext> {
info!("Registering scalar tables");
setup::register_scalar_tables(test_ctx.session_ctx()).await;
}
+ "information_schema_table_types.slt" => {
+ info!("Registering local temporary table");
+ setup::register_temp_table(test_ctx.session_ctx()).await;
+ }
+ "information_schema_columns.slt" => {
+ info!("Registering table with many types");
+
setup::register_table_with_many_types(test_ctx.session_ctx()).await;
+ }
"avro.slt" => {
#[cfg(feature = "avro")]
{
diff --git a/datafusion/core/tests/sqllogictests/src/setup.rs
b/datafusion/core/tests/sqllogictests/src/setup.rs
index 34365f509a..32569c7575 100644
--- a/datafusion/core/tests/sqllogictests/src/setup.rs
+++ b/datafusion/core/tests/sqllogictests/src/setup.rs
@@ -15,14 +15,25 @@
// specific language governing permissions and limitations
// under the License.
+use arrow_schema::TimeUnit;
+use async_trait::async_trait;
+use datafusion::execution::context::SessionState;
+use datafusion::physical_plan::ExecutionPlan;
use datafusion::{
arrow::{
- array::Float64Array,
- datatypes::{DataType, Field, Schema},
+ array::{
+ BinaryArray, Float64Array, Int32Array, LargeBinaryArray,
LargeStringArray,
+ StringArray, TimestampNanosecondArray,
+ },
+ datatypes::{DataType, Field, Schema, SchemaRef},
record_batch::RecordBatch,
},
+ catalog::{schema::MemorySchemaProvider, CatalogProvider,
MemoryCatalogProvider},
+ datasource::{MemTable, TableProvider, TableType},
prelude::{CsvReadOptions, SessionContext},
};
+use datafusion_common::DataFusionError;
+use datafusion_expr::Expr;
use std::fs::File;
use std::io::Write;
use std::sync::Arc;
@@ -116,3 +127,84 @@ pub async fn register_partition_table(test_ctx: &mut
TestContext) {
.await
.unwrap();
}
+
+// registers a LOCAL TEMPORARY table.
+pub async fn register_temp_table(ctx: &SessionContext) {
+ struct TestTable(TableType);
+
+ #[async_trait]
+ impl TableProvider for TestTable {
+ fn as_any(&self) -> &dyn std::any::Any {
+ self
+ }
+
+ fn table_type(&self) -> TableType {
+ self.0
+ }
+
+ fn schema(&self) -> SchemaRef {
+ unimplemented!()
+ }
+
+ async fn scan(
+ &self,
+ _state: &SessionState,
+ _: Option<&Vec<usize>>,
+ _: &[Expr],
+ _: Option<usize>,
+ ) -> Result<Arc<dyn ExecutionPlan>, DataFusionError> {
+ unimplemented!()
+ }
+ }
+
+ ctx.register_table(
+ "datafusion.public.temp",
+ Arc::new(TestTable(TableType::Temporary)),
+ )
+ .unwrap();
+}
+
+pub async fn register_table_with_many_types(ctx: &SessionContext) {
+ let catalog = MemoryCatalogProvider::new();
+ let schema = MemorySchemaProvider::new();
+
+ catalog
+ .register_schema("my_schema", Arc::new(schema))
+ .unwrap();
+ ctx.register_catalog("my_catalog", Arc::new(catalog));
+
+ ctx.register_table("my_catalog.my_schema.t2", table_with_many_types())
+ .unwrap();
+}
+
+fn table_with_many_types() -> Arc<dyn TableProvider> {
+ let schema = Schema::new(vec![
+ Field::new("int32_col", DataType::Int32, false),
+ Field::new("float64_col", DataType::Float64, true),
+ Field::new("utf8_col", DataType::Utf8, true),
+ Field::new("large_utf8_col", DataType::LargeUtf8, false),
+ Field::new("binary_col", DataType::Binary, false),
+ Field::new("large_binary_col", DataType::LargeBinary, false),
+ Field::new(
+ "timestamp_nanos",
+ DataType::Timestamp(TimeUnit::Nanosecond, None),
+ false,
+ ),
+ ]);
+
+ let batch = RecordBatch::try_new(
+ Arc::new(schema.clone()),
+ vec![
+ Arc::new(Int32Array::from(vec![1])),
+ Arc::new(Float64Array::from(vec![1.0])),
+ Arc::new(StringArray::from(vec![Some("foo")])),
+ Arc::new(LargeStringArray::from(vec![Some("bar")])),
+ Arc::new(BinaryArray::from(vec![b"foo" as &[u8]])),
+ Arc::new(LargeBinaryArray::from(vec![b"foo" as &[u8]])),
+ Arc::new(TimestampNanosecondArray::from(vec![Some(123)])),
+ ],
+ )
+ .unwrap();
+ let provider = MemTable::try_new(Arc::new(schema),
vec![vec![batch]]).unwrap();
+ Arc::new(provider)
+}
diff --git
a/datafusion/core/tests/sqllogictests/test_files/information_schema_columns.slt
b/datafusion/core/tests/sqllogictests/test_files/information_schema_columns.slt
new file mode 100644
index 0000000000..fcb653cedd
--- /dev/null
+++
b/datafusion/core/tests/sqllogictests/test_files/information_schema_columns.slt
@@ -0,0 +1,53 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+statement ok
+set datafusion.catalog.information_schema = true;
+
+statement ok
+set datafusion.catalog.default_catalog = my_catalog;
+
+statement ok
+set datafusion.catalog.default_schema = my_schema;
+
+###########
+# Information schema columns
+###########
+
+statement ok
+CREATE TABLE t1 (i int) as values(1);
+
+# table t2 is created using rust code because it is not possible to set
nullable columns with `arrow_cast` syntax
+
+query TTTTITTTIIIIIIT rowsort
+SELECT * from information_schema.columns;
+----
+my_catalog my_schema t1 i 0 NULL YES Int32 NULL NULL 32 2 NULL NULL NULL
+my_catalog my_schema t2 binary_col 4 NULL NO Binary NULL 2147483647 NULL NULL
NULL NULL NULL
+my_catalog my_schema t2 float64_col 1 NULL YES Float64 NULL NULL 24 2 NULL
NULL NULL
+my_catalog my_schema t2 int32_col 0 NULL NO Int32 NULL NULL 32 2 NULL NULL NULL
+my_catalog my_schema t2 large_binary_col 5 NULL NO LargeBinary NULL
9223372036854775807 NULL NULL NULL NULL NULL
+my_catalog my_schema t2 large_utf8_col 3 NULL NO LargeUtf8 NULL
9223372036854775807 NULL NULL NULL NULL NULL
+my_catalog my_schema t2 timestamp_nanos 6 NULL NO Timestamp(Nanosecond, None)
NULL NULL NULL NULL NULL NULL NULL
+my_catalog my_schema t2 utf8_col 2 NULL YES Utf8 NULL 2147483647 NULL NULL
NULL NULL NULL
+
+# Cleanup
+statement ok
+drop table t1
+
+statement ok
+drop table t2
\ No newline at end of file
diff --git
a/datafusion/core/tests/sqllogictests/test_files/information_schema_multiple_catalogs.slt
b/datafusion/core/tests/sqllogictests/test_files/information_schema_multiple_catalogs.slt
new file mode 100644
index 0000000000..c7f4dcfd54
--- /dev/null
+++
b/datafusion/core/tests/sqllogictests/test_files/information_schema_multiple_catalogs.slt
@@ -0,0 +1,111 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+
+# Verify the information schema does not exit by default
+statement error DataFusion error: Error during planning: table
'datafusion.information_schema.tables' not found
+SELECT * from information_schema.tables
+
+statement error DataFusion error: Error during planning: SHOW \[VARIABLE\] is
not supported unless information_schema is enabled
+show all
+
+# Turn it on
+
+# expect that the queries now work
+statement ok
+set datafusion.catalog.information_schema = true;
+
+# Verify the information schema now does exist and is empty
+query TTTT rowsort
+SELECT * from information_schema.tables;
+----
+datafusion information_schema columns VIEW
+datafusion information_schema df_settings VIEW
+datafusion information_schema tables VIEW
+datafusion information_schema views VIEW
+
+############
+# Create multiple catalogs
+###########
+statement ok
+create database my_catalog;
+
+statement ok
+create schema my_catalog.my_schema;
+
+statement ok
+set datafusion.catalog.default_catalog = my_catalog;
+
+statement ok
+set datafusion.catalog.default_schema = my_schema;
+
+statement ok
+create table t1 as values(1);
+
+statement ok
+create table t2 as values(1);
+
+statement ok
+create database my_other_catalog;
+
+statement ok
+create schema my_other_catalog.my_other_schema;
+
+statement ok
+set datafusion.catalog.default_catalog = my_other_catalog;
+
+statement ok
+set datafusion.catalog.default_schema = my_other_schema;
+
+statement ok
+create table t3 as values(1);
+
+query TTTT rowsort
+SELECT * from information_schema.tables;
+----
+datafusion information_schema columns VIEW
+datafusion information_schema df_settings VIEW
+datafusion information_schema tables VIEW
+datafusion information_schema views VIEW
+my_catalog information_schema columns VIEW
+my_catalog information_schema df_settings VIEW
+my_catalog information_schema tables VIEW
+my_catalog information_schema views VIEW
+my_catalog my_schema t1 BASE TABLE
+my_catalog my_schema t2 BASE TABLE
+my_other_catalog information_schema columns VIEW
+my_other_catalog information_schema df_settings VIEW
+my_other_catalog information_schema tables VIEW
+my_other_catalog information_schema views VIEW
+my_other_catalog my_other_schema t3 BASE TABLE
+
+# Cleanup
+
+statement ok
+drop table t3
+
+statement ok
+set datafusion.catalog.default_catalog = my_catalog;
+
+statement ok
+set datafusion.catalog.default_schema = my_schema;
+
+statement ok
+drop table t1
+
+statement ok
+drop table t2
diff --git
a/datafusion/core/tests/sqllogictests/test_files/information_schema_table_types.slt
b/datafusion/core/tests/sqllogictests/test_files/information_schema_table_types.slt
new file mode 100644
index 0000000000..eb72f3399f
--- /dev/null
+++
b/datafusion/core/tests/sqllogictests/test_files/information_schema_table_types.slt
@@ -0,0 +1,51 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Turn it on
+statement ok
+set datafusion.catalog.information_schema = true;
+
+############
+# Table with many types
+############
+
+statement ok
+create table physical as values(1);
+
+statement ok
+create view query as values(1);
+
+# Temporary tables cannot be created using SQL syntax so it is done using Rust
code.
+
+query TTTT rowsort
+SELECT * from information_schema.tables;
+----
+datafusion information_schema columns VIEW
+datafusion information_schema df_settings VIEW
+datafusion information_schema tables VIEW
+datafusion information_schema views VIEW
+datafusion public physical BASE TABLE
+datafusion public query VIEW
+datafusion public temp LOCAL TEMPORARY
+
+# Cleanup
+
+statement ok
+drop table physical
+
+statement ok
+drop view query