You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kyuubi.apache.org by ya...@apache.org on 2022/06/21 02:02:18 UTC
[incubator-kyuubi] branch master updated: [KYUUBI #2890] Get the db From Sparksession When TableIdentifier's Database Field Is Empty
This is an automated email from the ASF dual-hosted git repository.
yao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-kyuubi.git
The following commit(s) were added to refs/heads/master by this push:
new 062d8746a [KYUUBI #2890] Get the db From Sparksession When TableIdentifier's Database Field Is Empty
062d8746a is described below
commit 062d8746aec6aa1ffdfd6d909ea59ac84a126605
Author: packyan <pa...@gmail.com>
AuthorDate: Tue Jun 21 10:02:08 2022 +0800
[KYUUBI #2890] Get the db From Sparksession When TableIdentifier's Database Field Is Empty
### _Why are the changes needed?_
to close #2890, and this issue is related to #2438
Get the db From Sparksession When TableIdentifier's Database Field Is Empty, but view's TableIdentifier would not.
### _How was this patch tested?_
- [x] Add some test cases that check the changes thoroughly including negative and positive cases if possible
- [ ] Add screenshots for manual tests if appropriate
- [x] [Run test](https://kyuubi.apache.org/docs/latest/develop_tools/testing.html#running-tests) locally before make a pull request
Closes #2900 from packyan/branch-fix-tableindent-without-db.
Closes #2890
93bf96ad [packyan] reformat code.
b672641c [Deng An] Update PrivilegesBuilder.scala
ac41ed54 [Deng An] Update extensions/spark/kyuubi-spark-authz/src/main/scala/org/apache/kyuubi/plugin/spark/authz/PrivilegesBuilder.scala
1db6ef22 [Deng An] Update PrivilegesBuilder.scala
7e27549c [packyan] format code.
b46f4be6 [packyan] format code style
6dcadcf9 [packyan] format import.
c8992238 [packyan] view TableIdnet will not get db from sparksession.
241eebae [packyan] when TableIdentifier's database field is empty, try get the db from spark session.
Lead-authored-by: packyan <pa...@gmail.com>
Co-authored-by: Deng An <36...@users.noreply.github.com>
Signed-off-by: Kent Yao <ya...@apache.org>
---
.../plugin/spark/authz/PrivilegesBuilder.scala | 27 +++-
.../spark/authz/ranger/RuleAuthorization.scala | 2 +-
.../spark/authz/PrivilegesBuilderSuite.scala | 153 +++++++++++++--------
3 files changed, 114 insertions(+), 68 deletions(-)
diff --git a/extensions/spark/kyuubi-spark-authz/src/main/scala/org/apache/kyuubi/plugin/spark/authz/PrivilegesBuilder.scala b/extensions/spark/kyuubi-spark-authz/src/main/scala/org/apache/kyuubi/plugin/spark/authz/PrivilegesBuilder.scala
index 03dcc40d8..da7e7cfdb 100644
--- a/extensions/spark/kyuubi-spark-authz/src/main/scala/org/apache/kyuubi/plugin/spark/authz/PrivilegesBuilder.scala
+++ b/extensions/spark/kyuubi-spark-authz/src/main/scala/org/apache/kyuubi/plugin/spark/authz/PrivilegesBuilder.scala
@@ -19,6 +19,7 @@ package org.apache.kyuubi.plugin.spark.authz
import scala.collection.mutable.ArrayBuffer
+import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.catalyst.{FunctionIdentifier, TableIdentifier}
import org.apache.spark.sql.catalyst.catalog.CatalogTable
import org.apache.spark.sql.catalyst.catalog.CatalogTypes.TablePartitionSpec
@@ -66,6 +67,17 @@ object PrivilegesBuilder {
expr.collect { case p: NamedExpression if p.children.isEmpty => p }
}
+ private def setCurrentDBIfNecessary(
+ tableIdent: TableIdentifier,
+ spark: SparkSession): TableIdentifier = {
+
+ if (tableIdent.database.isEmpty) {
+ tableIdent.copy(database = Some(spark.catalog.currentDatabase))
+ } else {
+ tableIdent
+ }
+ }
+
/**
* Build PrivilegeObjects from Spark LogicalPlan
*
@@ -145,7 +157,8 @@ object PrivilegesBuilder {
private def buildCommand(
plan: LogicalPlan,
inputObjs: ArrayBuffer[PrivilegeObject],
- outputObjs: ArrayBuffer[PrivilegeObject]): Unit = {
+ outputObjs: ArrayBuffer[PrivilegeObject],
+ spark: SparkSession): Unit = {
def getPlanField[T](field: String): T = {
getFieldVal[T](plan, field)
@@ -348,8 +361,8 @@ object PrivilegesBuilder {
buildQuery(getQuery, inputObjs)
case "CreateTableLikeCommand" =>
- val target = getPlanField[TableIdentifier]("targetTable")
- val source = getPlanField[TableIdentifier]("sourceTable")
+ val target = setCurrentDBIfNecessary(getPlanField[TableIdentifier]("targetTable"), spark)
+ val source = setCurrentDBIfNecessary(getPlanField[TableIdentifier]("sourceTable"), spark)
inputObjs += tablePrivileges(source)
outputObjs += tablePrivileges(target)
@@ -362,7 +375,7 @@ object PrivilegesBuilder {
inputObjs += tablePrivileges(table, cols)
case "DescribeTableCommand" =>
- val table = getPlanField[TableIdentifier]("table")
+ val table = setCurrentDBIfNecessary(getPlanField[TableIdentifier]("table"), spark)
inputObjs += tablePrivileges(table)
case "DescribeDatabaseCommand" | "SetDatabaseCommand" =>
@@ -538,12 +551,14 @@ object PrivilegesBuilder {
*
* @param plan A Spark LogicalPlan
*/
- def build(plan: LogicalPlan): (Seq[PrivilegeObject], Seq[PrivilegeObject]) = {
+ def build(
+ plan: LogicalPlan,
+ spark: SparkSession): (Seq[PrivilegeObject], Seq[PrivilegeObject]) = {
val inputObjs = new ArrayBuffer[PrivilegeObject]
val outputObjs = new ArrayBuffer[PrivilegeObject]
plan match {
// RunnableCommand
- case cmd: Command => buildCommand(cmd, inputObjs, outputObjs)
+ case cmd: Command => buildCommand(cmd, inputObjs, outputObjs, spark)
// Queries
case _ => buildQuery(plan, inputObjs)
}
diff --git a/extensions/spark/kyuubi-spark-authz/src/main/scala/org/apache/kyuubi/plugin/spark/authz/ranger/RuleAuthorization.scala b/extensions/spark/kyuubi-spark-authz/src/main/scala/org/apache/kyuubi/plugin/spark/authz/ranger/RuleAuthorization.scala
index 0449a5034..c22fca632 100644
--- a/extensions/spark/kyuubi-spark-authz/src/main/scala/org/apache/kyuubi/plugin/spark/authz/ranger/RuleAuthorization.scala
+++ b/extensions/spark/kyuubi-spark-authz/src/main/scala/org/apache/kyuubi/plugin/spark/authz/ranger/RuleAuthorization.scala
@@ -40,7 +40,7 @@ object RuleAuthorization {
val auditHandler = new SparkRangerAuditHandler
val ugi = getAuthzUgi(spark.sparkContext)
val opType = OperationType(plan.nodeName)
- val (inputs, outputs) = PrivilegesBuilder.build(plan)
+ val (inputs, outputs) = PrivilegesBuilder.build(plan, spark)
val requests = new ArrayBuffer[AccessRequest]()
if (inputs.isEmpty && opType == OperationType.SHOWDATABASES) {
val resource = AccessResource(DATABASE, null)
diff --git a/extensions/spark/kyuubi-spark-authz/src/test/scala/org/apache/kyuubi/plugin/spark/authz/PrivilegesBuilderSuite.scala b/extensions/spark/kyuubi-spark-authz/src/test/scala/org/apache/kyuubi/plugin/spark/authz/PrivilegesBuilderSuite.scala
index 16d2d663a..afd49a657 100644
--- a/extensions/spark/kyuubi-spark-authz/src/test/scala/org/apache/kyuubi/plugin/spark/authz/PrivilegesBuilderSuite.scala
+++ b/extensions/spark/kyuubi-spark-authz/src/test/scala/org/apache/kyuubi/plugin/spark/authz/PrivilegesBuilderSuite.scala
@@ -55,7 +55,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
}
protected def checkColumns(plan: LogicalPlan, cols: Seq[String]): Unit = {
- val (in, out) = PrivilegesBuilder.build(plan)
+ val (in, out) = PrivilegesBuilder.build(plan, spark)
assert(out.isEmpty, "Queries shall not check output privileges")
val po = in.head
assert(po.actionType === PrivilegeObjectActionType.OTHER)
@@ -101,7 +101,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
val plan = sql("ALTER DATABASE default SET DBPROPERTIES (abc = '123')").queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === ALTERDATABASE)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.isEmpty)
assert(tuple._2.size === 1)
val po = tuple._2.head
@@ -124,7 +124,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
s" RENAME TO $t").queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === ALTERTABLE_RENAME)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.isEmpty)
assert(tuple._2.size === 2)
tuple._2.foreach { po =>
@@ -143,7 +143,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
val plan = sql(s"CREATE DATABASE $db").queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === CREATEDATABASE)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.isEmpty)
assert(tuple._2.size === 1)
val po = tuple._2.head
@@ -163,7 +163,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
val plan = sql(s"DROP DATABASE DropDatabaseCommand").queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === DROPDATABASE)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.isEmpty)
assert(tuple._2.size === 1)
val po = tuple._2.head
@@ -182,7 +182,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
.queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === ALTERTABLE_ADDPARTS)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.isEmpty)
assert(tuple._2.size === 1)
val po = tuple._2.head
@@ -200,7 +200,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
.queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === ALTERTABLE_DROPPARTS)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.isEmpty)
assert(tuple._2.size === 1)
val po = tuple._2.head
@@ -231,7 +231,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
val plan = sql(sqlStr).queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === MSCK)
- val (inputs, outputs) = PrivilegesBuilder.build(plan)
+ val (inputs, outputs) = PrivilegesBuilder.build(plan, spark)
assert(inputs.isEmpty)
@@ -256,7 +256,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
.queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === ALTERTABLE_RENAMEPART)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.isEmpty)
assert(tuple._2.size === 1)
val po = tuple._2.head
@@ -277,7 +277,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
.queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === ALTERTABLE_LOCATION)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.isEmpty)
assert(tuple._2.size === 1)
val po = tuple._2.head
@@ -298,7 +298,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
.queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === ALTERTABLE_PROPERTIES)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.isEmpty)
assert(tuple._2.size === 1)
val po = tuple._2.head
@@ -318,7 +318,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
.queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === ALTERVIEW_AS)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
val po0 = tuple._1.head
assert(po0.actionType === PrivilegeObjectActionType.OTHER)
@@ -346,7 +346,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
s" COMPUTE STATISTICS FOR COLUMNS key").queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === ANALYZE_TABLE)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
val po0 = tuple._1.head
assert(po0.actionType === PrivilegeObjectActionType.OTHER)
@@ -366,7 +366,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
s" PARTITION (pid = 1) COMPUTE STATISTICS").queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === ANALYZE_TABLE)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
val po0 = tuple._1.head
assert(po0.actionType === PrivilegeObjectActionType.OTHER)
@@ -386,7 +386,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
.queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === ANALYZE_TABLE)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
val po0 = tuple._1.head
assert(po0.actionType === PrivilegeObjectActionType.OTHER)
@@ -407,7 +407,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
.queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === ANALYZE_TABLE)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
val po0 = tuple._1.head
assert(po0.actionType === PrivilegeObjectActionType.OTHER)
@@ -426,7 +426,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
val plan = sql(s"REFRESH TABLE $reusedTable").queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === QUERY)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
val po0 = tuple._1.head
assert(po0.actionType === PrivilegeObjectActionType.OTHER)
@@ -444,7 +444,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
val plan = sql(s"CACHE LAZY TABLE $reusedTable").queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === CREATEVIEW)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
if (isSparkV32OrGreater) {
assert(tuple._1.size === 1)
val po0 = tuple._1.head
@@ -475,7 +475,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
.queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === CREATEVIEW)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
val po0 = tuple._1.head
assert(po0.actionType === PrivilegeObjectActionType.OTHER)
@@ -506,7 +506,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
.queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === CREATEVIEW)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
val po0 = tuple._1.head
assert(po0.actionType === PrivilegeObjectActionType.OTHER)
@@ -539,7 +539,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
.queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === CREATETABLE)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 0)
assert(tuple._2.size === 1)
val po = tuple._2.head
@@ -558,7 +558,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
.queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === CREATEFUNCTION)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 0)
assert(tuple._2.size === 1)
val po = tuple._2.head
@@ -578,7 +578,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
.queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === DROPFUNCTION)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 0)
assert(tuple._2.size === 1)
val po = tuple._2.head
@@ -599,7 +599,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
.queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === RELOADFUNCTION)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 0)
assert(tuple._2.size === 1)
val po = tuple._2.head
@@ -619,7 +619,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
val operationType = OperationType(plan.nodeName)
assert(operationType === CREATETABLE)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
val po0 = tuple._1.head
assert(po0.actionType === PrivilegeObjectActionType.OTHER)
@@ -642,13 +642,44 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
}
}
+ // [Kyuubi #2890]
+ test("CreateTableLikeCommand Without Database") {
+ withTable("CreateTableLikeCommandWithoutDatabase") { t =>
+ sql(s"USE ${reusedDb}")
+ val plan = sql(s"CREATE TABLE $t LIKE ${reusedTableShort}").queryExecution.analyzed
+ val operationType = OperationType(plan.nodeName)
+
+ assert(operationType === CREATETABLE)
+ val tuple = PrivilegesBuilder.build(plan, spark)
+ assert(tuple._1.size === 1)
+ val po0 = tuple._1.head
+ assert(po0.actionType === PrivilegeObjectActionType.OTHER)
+ assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
+ assert(po0.dbname equalsIgnoreCase reusedDb)
+ assert(po0.objectName equalsIgnoreCase reusedTable.split("\\.").last)
+ assert(po0.columns.isEmpty)
+ val accessType0 = ranger.AccessType(po0, operationType, isInput = true)
+ assert(accessType0 === AccessType.SELECT)
+
+ assert(tuple._2.size === 1)
+ val po = tuple._2.head
+ assert(po.actionType === PrivilegeObjectActionType.OTHER)
+ assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
+ assert(po.dbname equalsIgnoreCase reusedDb)
+ assert(po.objectName === "CreateTableLikeCommandWithoutDatabase")
+ assert(po.columns.isEmpty)
+ val accessType = ranger.AccessType(po, operationType, isInput = false)
+ assert(accessType === AccessType.CREATE)
+ }
+ }
+
test("CreateTempViewUsing") {
val plan = sql("CREATE TEMPORARY VIEW CreateTempViewUsing (a int, b string) USING parquet")
.queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === CREATEVIEW)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 0)
assert(tuple._2.size === 1)
@@ -666,7 +697,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
val plan = sql(s"DESC TABLE $reusedTable key").queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === DESCTABLE)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
val po = tuple._1.head
assert(po.actionType === PrivilegeObjectActionType.OTHER)
@@ -684,7 +715,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
val plan = sql(s"DESC TABLE $reusedTable").queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === DESCTABLE)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
val po = tuple._1.head
assert(po.actionType === PrivilegeObjectActionType.OTHER)
@@ -702,7 +733,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
val plan = sql(s"DESC DATABASE $reusedDb").queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === DESCDATABASE)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
val po = tuple._1.head
assert(po.actionType === PrivilegeObjectActionType.OTHER)
@@ -721,7 +752,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
val plan = sql(s"USE $reusedDb").queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === SWITCHDATABASE)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
val po0 = tuple._1.head
@@ -744,7 +775,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
.queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === TRUNCATETABLE)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.isEmpty)
assert(tuple._2.size === 1)
val po = tuple._2.head
@@ -761,7 +792,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
val plan = sql(s"SHOW COLUMNS IN $reusedTable").queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === SHOWCOLUMNS)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
val po0 = tuple._1.head
assert(po0.actionType === PrivilegeObjectActionType.OTHER)
@@ -779,7 +810,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
val plan = sql(s"SHOW CREATE TABLE $reusedTable").queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === SHOW_CREATETABLE)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
val po0 = tuple._1.head
assert(po0.actionType === PrivilegeObjectActionType.OTHER)
@@ -797,7 +828,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
val plan = sql(s"SHOW TBLPROPERTIES $reusedTable ").queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === SHOW_TBLPROPERTIES)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
val po0 = tuple._1.head
assert(po0.actionType === PrivilegeObjectActionType.OTHER)
@@ -815,7 +846,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
val plan = sql("SHOW FUNCTIONS").queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === SHOWFUNCTIONS)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 0)
assert(tuple._2.size === 0)
}
@@ -825,7 +856,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
.queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === SHOWPARTITIONS)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
val po0 = tuple._1.head
assert(po0.actionType === PrivilegeObjectActionType.OTHER)
@@ -857,7 +888,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
val plan = sql(sqlStr).queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === MSCK)
- val (inputs, outputs) = PrivilegesBuilder.build(plan)
+ val (inputs, outputs) = PrivilegesBuilder.build(plan, spark)
assert(inputs.isEmpty)
@@ -876,7 +907,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
test("Query: Star") {
val plan = sql(s"SELECT * FROM $reusedTable").queryExecution.optimizedPlan
- val po = PrivilegesBuilder.build(plan)._1.head
+ val po = PrivilegesBuilder.build(plan, spark)._1.head
assert(po.actionType === PrivilegeObjectActionType.OTHER)
assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
assert(po.dbname equalsIgnoreCase reusedDb)
@@ -930,7 +961,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
| FROM $reusedPartTable WHERE pid > 1)
|""".stripMargin).queryExecution.optimizedPlan
- val (in, _) = PrivilegesBuilder.build(plan)
+ val (in, _) = PrivilegesBuilder.build(plan, spark)
assert(in.size === 2)
assert(in.find(_.objectName equalsIgnoreCase reusedTableShort).head.columns ===
@@ -949,7 +980,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
|""".stripMargin).queryExecution.optimizedPlan
val operationType = OperationType(plan.nodeName)
assert(operationType === QUERY)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
tuple._1.foreach { po =>
assert(po.actionType === PrivilegeObjectActionType.OTHER)
@@ -975,7 +1006,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
|""".stripMargin).queryExecution.optimizedPlan
val operationType = OperationType(plan.nodeName)
assert(operationType === QUERY)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
tuple._1.foreach { po =>
assert(po.actionType === PrivilegeObjectActionType.OTHER)
@@ -1003,7 +1034,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
val plan = sql(sqlStr).queryExecution.optimizedPlan
val operationType = OperationType(plan.nodeName)
assert(operationType === QUERY)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 2)
tuple._1.foreach { po =>
@@ -1031,7 +1062,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
val plan = sql(sqlStr).queryExecution.optimizedPlan
val operationType = OperationType(plan.nodeName)
assert(operationType === QUERY)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
tuple._1.foreach { po =>
@@ -1060,7 +1091,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
val plan = sql(sqlStr).queryExecution.optimizedPlan
val operationType = OperationType(plan.nodeName)
assert(operationType === QUERY)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 2)
tuple._1.foreach { po =>
@@ -1086,7 +1117,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
|""".stripMargin).queryExecution.optimizedPlan
val operationType = OperationType(plan.nodeName)
assert(operationType === QUERY)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
tuple._1.foreach { po =>
assert(po.actionType === PrivilegeObjectActionType.OTHER)
@@ -1111,7 +1142,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
|""".stripMargin).queryExecution.optimizedPlan
val operationType = OperationType(plan.nodeName)
assert(operationType === QUERY)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
tuple._1.foreach { po =>
assert(po.actionType === PrivilegeObjectActionType.OTHER)
@@ -1136,7 +1167,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
|SELECT pid, value
|FROM $reusedPartTable
|""".stripMargin).queryExecution.optimizedPlan
- val (in, _) = PrivilegesBuilder.build(plan)
+ val (in, _) = PrivilegesBuilder.build(plan, spark)
assert(in.size === 2)
}
@@ -1153,7 +1184,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
s" ADD COLUMNS (a int)").queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === ALTERTABLE_ADDCOLS)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.isEmpty)
assert(tuple._2.size === 1)
val po = tuple._2.head
@@ -1172,7 +1203,7 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
s" ALTER COLUMN value COMMENT 'alter column'").queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === ALTERTABLE_REPLACECOLS)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.isEmpty)
assert(tuple._2.size === 1)
val po = tuple._2.head
@@ -1197,7 +1228,7 @@ class InMemoryPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
.queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === ALTERDATABASE_LOCATION)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.isEmpty)
assert(tuple._2.size === 1)
val po = tuple._2.head
@@ -1217,7 +1248,7 @@ class InMemoryPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
val operationType = OperationType(plan.nodeName)
assert(operationType === CREATETABLE_AS_SELECT)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
val po0 = tuple._1.head
assert(po0.actionType === PrivilegeObjectActionType.OTHER)
@@ -1258,7 +1289,7 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
.queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === ALTERTABLE_SERDEPROPERTIES)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.isEmpty)
assert(tuple._2.size === 1)
val po = tuple._2.head
@@ -1279,7 +1310,7 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
.queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === CREATETABLE)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 0)
assert(tuple._2.size === 1)
val po = tuple._2.head
@@ -1301,7 +1332,7 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
val operationType = OperationType(plan.nodeName)
assert(operationType === CREATETABLE_AS_SELECT)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
val po0 = tuple._1.head
assert(po0.actionType === PrivilegeObjectActionType.OTHER)
@@ -1338,7 +1369,7 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
.queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === LOAD)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.isEmpty)
assert(tuple._2.size === 1)
@@ -1365,7 +1396,7 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
.queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === QUERY)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
val po0 = tuple._1.head
assert(po0.actionType === PrivilegeObjectActionType.OTHER)
@@ -1409,7 +1440,7 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
val plan = sql(sqlStr).queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === QUERY)
- val (inputs, outputs) = PrivilegesBuilder.build(plan)
+ val (inputs, outputs) = PrivilegesBuilder.build(plan, spark)
assert(inputs.size == 1)
inputs.foreach { po =>
@@ -1449,7 +1480,7 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
val plan = sql(sqlStr).queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === QUERY)
- val (inputs, outputs) = PrivilegesBuilder.build(plan)
+ val (inputs, outputs) = PrivilegesBuilder.build(plan, spark)
assert(inputs.size == 1)
inputs.foreach { po =>
@@ -1478,7 +1509,7 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
.queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === QUERY)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
val po0 = tuple._1.head
assert(po0.actionType === PrivilegeObjectActionType.OTHER)
@@ -1504,7 +1535,7 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
val plan = sql(sqlStr).queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === QUERY)
- val (inputs, outputs) = PrivilegesBuilder.build(plan)
+ val (inputs, outputs) = PrivilegesBuilder.build(plan, spark)
assert(inputs.isEmpty)
@@ -1528,7 +1559,7 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
val plan = sql(s"SHOW CREATE TABLE $t AS SERDE").queryExecution.analyzed
val operationType = OperationType(plan.nodeName)
assert(operationType === SHOW_CREATETABLE)
- val tuple = PrivilegesBuilder.build(plan)
+ val tuple = PrivilegesBuilder.build(plan, spark)
assert(tuple._1.size === 1)
val po0 = tuple._1.head
assert(po0.actionType === PrivilegeObjectActionType.OTHER)