brijrajk commented on code in PR #57161:
URL: https://github.com/apache/spark/pull/57161#discussion_r3564633045
##########
sql/core/src/test/scala/org/apache/spark/sql/connector/DeleteFromTableSuiteBase.scala:
##########
@@ -1037,6 +1037,59 @@ abstract class DeleteFromTableSuiteBase extends
RowLevelOperationSuiteBase {
}
}
+ protected def checkRowLevelOperationOptions(
+ func: => Unit,
+ expectedOptions: (String, String)*): Unit = {
+ val Seq(qe) = withQueryExecutionsCaptured(spark)(func)
+ val writeRelation = qe.optimizedPlan.collectFirst {
+ case rd: ReplaceData => rd.table
+ case wd: WriteDelta => wd.table
+ }.getOrElse(fail("couldn't find row-level operation in optimized plan"))
+ .asInstanceOf[DataSourceV2Relation]
+ val operation =
writeRelation.table.asInstanceOf[RowLevelOperationTable].operation
+ .asInstanceOf[RowLevelOperationWithOptions]
+ expectedOptions.foreach { case (key, value) =>
+ assert(writeRelation.options.get(key) === value, s"relation option
'$key'")
+ assert(operation.options.get(key) === value, s"row-level operation
option '$key'")
+ assert(table.lastWriteInfo.options().get(key) === value, s"write option
'$key'")
+ }
+ }
+
+ test("SPARK-58008: delete with dynamic options") {
+ createAndInitTable("pk INT NOT NULL, salary INT, dep STRING",
+ """{ "pk": 1, "salary": 100, "dep": "hr" }
+ |{ "pk": 2, "salary": 200, "dep": "software" }
+ |""".stripMargin)
+
+ // Use salary < 200 (LessThan) rather than pk = 1 (EqualTo) so the
optimizer does not
+ // replace the row-level plan with a filter-only deleteWhere call via
+ // OptimizeMetadataOnlyDeleteFromTable (canDeleteWhere returns false for
LessThan).
+ checkRowLevelOperationOptions(
+ sql(s"DELETE FROM $tableNameAsString WITH (`write.split-size` = 10)
WHERE salary < 200"),
+ "write.split-size" -> "10")
+
+ checkAnswer(
+ sql(s"SELECT * FROM $tableNameAsString"),
+ Row(2, 200, "software") :: Nil)
+ }
+
+ test("SPARK-58008: delete with dynamic options and a subquery on the same
table") {
Review Comment:
Thanks @anuragmantri! I've addressed both points from your review:
**Options-aware APIs** (review body): Added `deleteWhere(Predicate[],
CaseInsensitiveStringMap)` to `SupportsDeleteV2` and
`truncateTable(CaseInsensitiveStringMap)` to both `SupportsDeleteV2` and
`TruncatableTable` with back-compatible defaults. Wired `options` through
`DeleteFromTableWithFilters`, `DeleteFromTableExec`, `TruncateTableExec`, and
all three planning paths in `DataSourceV2Strategy`.
**CTE test** (this comment): Will add a test mirroring the UPDATE suite's
CTE coverage.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]