This is an automated email from the ASF dual-hosted git repository.
lzljs3620320 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/paimon.git
The following commit(s) were added to refs/heads/master by this push:
new ad757d28c8 [spark] support 'SHOW VIEWS FROM' syntax (#6873)
ad757d28c8 is described below
commit ad757d28c86849f4d555319fd02e7def0ecd7045
Author: Yann Byron <[email protected]>
AuthorDate: Wed Dec 24 21:54:57 2025 +0800
[spark] support 'SHOW VIEWS FROM' syntax (#6873)
---
.../parser/extensions/RewritePaimonViewCommands.scala | 13 ++++++++-----
.../parser/extensions/RewritePaimonViewCommands.scala | 13 ++++++++-----
.../parser/extensions/RewritePaimonViewCommands.scala | 14 ++++++++------
.../org/apache/paimon/spark/sql/PaimonViewTestBase.scala | 11 +++++++++++
4 files changed, 35 insertions(+), 16 deletions(-)
diff --git
a/paimon-spark/paimon-spark-3.2/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/RewritePaimonViewCommands.scala
b/paimon-spark/paimon-spark-3.2/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/RewritePaimonViewCommands.scala
index c8080ba7ad..5a458978ea 100644
---
a/paimon-spark/paimon-spark-3.2/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/RewritePaimonViewCommands.scala
+++
b/paimon-spark/paimon-spark-3.2/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/RewritePaimonViewCommands.scala
@@ -23,6 +23,7 @@ import
org.apache.paimon.spark.catalyst.plans.logical.{CreatePaimonView, DropPai
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.catalyst.analysis.{CTESubstitution,
ResolvedNamespace, UnresolvedView}
+import org.apache.spark.sql.catalyst.analysis.SimpleAnalyzer.ResolveNamespace
import org.apache.spark.sql.catalyst.plans.logical._
import org.apache.spark.sql.catalyst.rules.Rule
import org.apache.spark.sql.connector.catalog.{CatalogManager, LookupCatalog}
@@ -60,11 +61,13 @@ case class RewritePaimonViewCommands(spark: SparkSession)
case DropView(ResolvedIdent(resolved), ifExists: Boolean) =>
DropPaimonView(resolved, ifExists)
- case ShowViews(_, pattern, output) if
catalogManager.currentCatalog.isInstanceOf[SupportView] =>
- ShowPaimonViews(
- ResolvedNamespace(catalogManager.currentCatalog,
catalogManager.currentNamespace),
- pattern,
- output)
+ case ShowViews(namespace, pattern, output)
+ if catalogManager.currentCatalog.isInstanceOf[SupportView] =>
+ val resolvedNamespace =
ResolveNamespace(catalogManager)(namespace).transform {
+ case r: ResolvedNamespace if r.namespace.isEmpty =>
+ r.copy(namespace = catalogManager.currentNamespace)
+ }
+ ShowPaimonViews(resolvedNamespace, pattern, output)
}
private def isTempView(nameParts: Seq[String]): Boolean = {
diff --git
a/paimon-spark/paimon-spark-3.3/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/RewritePaimonViewCommands.scala
b/paimon-spark/paimon-spark-3.3/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/RewritePaimonViewCommands.scala
index e914ef1d76..953414fb23 100644
---
a/paimon-spark/paimon-spark-3.3/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/RewritePaimonViewCommands.scala
+++
b/paimon-spark/paimon-spark-3.3/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/RewritePaimonViewCommands.scala
@@ -23,6 +23,7 @@ import
org.apache.paimon.spark.catalyst.plans.logical.{CreatePaimonView, DropPai
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.catalyst.analysis.{CTESubstitution,
ResolvedNamespace, UnresolvedDBObjectName, UnresolvedView}
+import org.apache.spark.sql.catalyst.analysis.SimpleAnalyzer.ResolveNamespace
import org.apache.spark.sql.catalyst.plans.logical._
import org.apache.spark.sql.catalyst.rules.Rule
import org.apache.spark.sql.connector.catalog.{CatalogManager, LookupCatalog}
@@ -59,11 +60,13 @@ case class RewritePaimonViewCommands(spark: SparkSession)
case DropView(ResolvedIdent(resolved), ifExists: Boolean) =>
DropPaimonView(resolved, ifExists)
- case ShowViews(_, pattern, output) if
catalogManager.currentCatalog.isInstanceOf[SupportView] =>
- ShowPaimonViews(
- ResolvedNamespace(catalogManager.currentCatalog,
catalogManager.currentNamespace),
- pattern,
- output)
+ case ShowViews(namespace, pattern, output)
+ if catalogManager.currentCatalog.isInstanceOf[SupportView] =>
+ val resolvedNamespace =
ResolveNamespace(catalogManager)(namespace).transform {
+ case r: ResolvedNamespace if r.namespace.isEmpty =>
+ r.copy(namespace = catalogManager.currentNamespace)
+ }
+ ShowPaimonViews(resolvedNamespace, pattern, output)
}
private def isTempView(nameParts: Seq[String]): Boolean = {
diff --git
a/paimon-spark/paimon-spark-common/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/RewritePaimonViewCommands.scala
b/paimon-spark/paimon-spark-common/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/RewritePaimonViewCommands.scala
index 30b09a48e4..4b4187b2d8 100644
---
a/paimon-spark/paimon-spark-common/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/RewritePaimonViewCommands.scala
+++
b/paimon-spark/paimon-spark-common/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/RewritePaimonViewCommands.scala
@@ -22,7 +22,7 @@ import org.apache.paimon.spark.catalog.SupportView
import org.apache.paimon.spark.catalyst.plans.logical.{CreatePaimonView,
DropPaimonView, ResolvedIdentifier, ShowPaimonViews}
import org.apache.spark.sql.SparkSession
-import org.apache.spark.sql.catalyst.analysis.{CTESubstitution,
ResolvedNamespace, UnresolvedIdentifier}
+import org.apache.spark.sql.catalyst.analysis.{CTESubstitution,
ResolveCatalogs, ResolvedNamespace, UnresolvedIdentifier}
import org.apache.spark.sql.catalyst.plans.logical._
import org.apache.spark.sql.catalyst.rules.Rule
import org.apache.spark.sql.connector.catalog.{CatalogManager, LookupCatalog}
@@ -59,11 +59,13 @@ case class RewritePaimonViewCommands(spark: SparkSession)
case DropView(ResolvedIdent(resolved), ifExists: Boolean) =>
DropPaimonView(resolved, ifExists)
- case ShowViews(_, pattern, output) if
catalogManager.currentCatalog.isInstanceOf[SupportView] =>
- ShowPaimonViews(
- ResolvedNamespace(catalogManager.currentCatalog,
catalogManager.currentNamespace),
- pattern,
- output)
+ case ShowViews(namespace, pattern, output)
+ if catalogManager.currentCatalog.isInstanceOf[SupportView] =>
+ val resolvedNamespace = new
ResolveCatalogs(catalogManager)(namespace).transform {
+ case r: ResolvedNamespace if r.namespace.isEmpty =>
+ r.copy(namespace = catalogManager.currentNamespace)
+ }
+ ShowPaimonViews(resolvedNamespace, pattern, output)
}
private def isTempView(nameParts: Seq[String]): Boolean = {
diff --git
a/paimon-spark/paimon-spark-ut/src/test/scala/org/apache/paimon/spark/sql/PaimonViewTestBase.scala
b/paimon-spark/paimon-spark-ut/src/test/scala/org/apache/paimon/spark/sql/PaimonViewTestBase.scala
index fa58b99aee..b276af89b5 100644
---
a/paimon-spark/paimon-spark-ut/src/test/scala/org/apache/paimon/spark/sql/PaimonViewTestBase.scala
+++
b/paimon-spark/paimon-spark-ut/src/test/scala/org/apache/paimon/spark/sql/PaimonViewTestBase.scala
@@ -84,6 +84,17 @@ abstract class PaimonViewTestBase extends PaimonHiveTestBase
{
Row("test_db", "va", false),
Row("test_db", "vab", false),
Row("test_db", "vc", false)))
+
+ // show views from database
+ sql(s"USE $hiveDbName")
+ checkAnswer(
+ sql("SHOW VIEWS FROM test_db"),
+ Seq(
+ Row("test_db", "va", false),
+ Row("test_db", "vab", false),
+ Row("test_db", "vc", false)))
+ sql("USE test_db")
+
checkAnswer(
sql("SHOW VIEWS LIKE 'va*'"),
Seq(Row("test_db", "va", false), Row("test_db", "vab",
false)))