[GitHub] [hudi] weimingdiit commented on a diff in pull request #9252: [HUDI-6500] Fix bug when Using the RuntimeReplaceable function in the…

2023-07-25 Thread via GitHub


weimingdiit commented on code in PR #9252:
URL: https://github.com/apache/hudi/pull/9252#discussion_r1273127379


##
hudi-spark-datasource/hudi-spark/src/main/scala/org/apache/spark/sql/hudi/analysis/HoodieAnalysis.scala:
##
@@ -391,63 +392,65 @@ case class ResolveImplementationsEarly() extends 
Rule[LogicalPlan] {
 case class ResolveImplementations() extends Rule[LogicalPlan] {
 
   override def apply(plan: LogicalPlan): LogicalPlan = {
-plan match {
-  // Convert to MergeIntoHoodieTableCommand
-  case mit@MatchMergeIntoTable(target@ResolvesToHudiTable(_), _, _) if 
mit.resolved =>
-MergeIntoHoodieTableCommand(mit.asInstanceOf[MergeIntoTable])
-
-  // Convert to UpdateHoodieTableCommand
-  case ut@UpdateTable(plan@ResolvesToHudiTable(_), _, _) if ut.resolved =>
-UpdateHoodieTableCommand(ut)
-
-  // Convert to DeleteHoodieTableCommand
-  case dft@DeleteFromTable(plan@ResolvesToHudiTable(_), _) if dft.resolved 
=>
-DeleteHoodieTableCommand(dft)
-
-  // Convert to CompactionHoodieTableCommand
-  case ct @ CompactionTable(plan @ ResolvesToHudiTable(table), operation, 
options) if ct.resolved =>
-CompactionHoodieTableCommand(table, operation, options)
-
-  // Convert to CompactionHoodiePathCommand
-  case cp @ CompactionPath(path, operation, options) if cp.resolved =>
-CompactionHoodiePathCommand(path, operation, options)
-
-  // Convert to CompactionShowOnTable
-  case csot @ CompactionShowOnTable(plan @ ResolvesToHudiTable(table), 
limit) if csot.resolved =>
-CompactionShowHoodieTableCommand(table, limit)
-
-  // Convert to CompactionShowHoodiePathCommand
-  case csop @ CompactionShowOnPath(path, limit) if csop.resolved =>
-CompactionShowHoodiePathCommand(path, limit)
-
-  // Convert to HoodieCallProcedureCommand
-  case c @ CallCommand(_, _) =>
-val procedure: Option[Procedure] = loadProcedure(c.name)
-val input = buildProcedureArgs(c.args)
-if (procedure.nonEmpty) {
-  CallProcedureHoodieCommand(procedure.get, input)
-} else {
-  c
-}
-
-  // Convert to CreateIndexCommand
-  case ci @ CreateIndex(plan @ ResolvesToHudiTable(table), indexName, 
indexType, ignoreIfExists, columns, options, output) =>
-// TODO need to resolve columns
-CreateIndexCommand(table, indexName, indexType, ignoreIfExists, 
columns, options, output)
-
-  // Convert to DropIndexCommand
-  case di @ DropIndex(plan @ ResolvesToHudiTable(table), indexName, 
ignoreIfNotExists, output) if di.resolved =>
-DropIndexCommand(table, indexName, ignoreIfNotExists, output)
-
-  // Convert to ShowIndexesCommand
-  case si @ ShowIndexes(plan @ ResolvesToHudiTable(table), output) if 
si.resolved =>
-ShowIndexesCommand(table, output)
-
-  // Covert to RefreshCommand
-  case ri @ RefreshIndex(plan @ ResolvesToHudiTable(table), indexName, 
output) if ri.resolved =>
-RefreshIndexCommand(table, indexName, output)
-
-  case _ => plan
+AnalysisHelper.allowInvokingTransformsInAnalyzer {
+  plan match {
+// Convert to MergeIntoHoodieTableCommand

Review Comment:
   > And can you also check the test failures
   
   Ok, In my local env, ut can pass, I will take a closer look at the problem 
of ut failure



-- 
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: commits-unsubscr...@hudi.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



[GitHub] [hudi] weimingdiit commented on a diff in pull request #9252: [HUDI-6500] Fix bug when Using the RuntimeReplaceable function in the…

2023-07-24 Thread via GitHub


weimingdiit commented on code in PR #9252:
URL: https://github.com/apache/hudi/pull/9252#discussion_r1272924805


##
hudi-spark-datasource/hudi-spark/src/main/scala/org/apache/spark/sql/hudi/analysis/HoodieAnalysis.scala:
##
@@ -391,63 +392,65 @@ case class ResolveImplementationsEarly() extends 
Rule[LogicalPlan] {
 case class ResolveImplementations() extends Rule[LogicalPlan] {
 
   override def apply(plan: LogicalPlan): LogicalPlan = {
-plan match {
-  // Convert to MergeIntoHoodieTableCommand
-  case mit@MatchMergeIntoTable(target@ResolvesToHudiTable(_), _, _) if 
mit.resolved =>
-MergeIntoHoodieTableCommand(mit.asInstanceOf[MergeIntoTable])
-
-  // Convert to UpdateHoodieTableCommand
-  case ut@UpdateTable(plan@ResolvesToHudiTable(_), _, _) if ut.resolved =>
-UpdateHoodieTableCommand(ut)
-
-  // Convert to DeleteHoodieTableCommand
-  case dft@DeleteFromTable(plan@ResolvesToHudiTable(_), _) if dft.resolved 
=>
-DeleteHoodieTableCommand(dft)
-
-  // Convert to CompactionHoodieTableCommand
-  case ct @ CompactionTable(plan @ ResolvesToHudiTable(table), operation, 
options) if ct.resolved =>
-CompactionHoodieTableCommand(table, operation, options)
-
-  // Convert to CompactionHoodiePathCommand
-  case cp @ CompactionPath(path, operation, options) if cp.resolved =>
-CompactionHoodiePathCommand(path, operation, options)
-
-  // Convert to CompactionShowOnTable
-  case csot @ CompactionShowOnTable(plan @ ResolvesToHudiTable(table), 
limit) if csot.resolved =>
-CompactionShowHoodieTableCommand(table, limit)
-
-  // Convert to CompactionShowHoodiePathCommand
-  case csop @ CompactionShowOnPath(path, limit) if csop.resolved =>
-CompactionShowHoodiePathCommand(path, limit)
-
-  // Convert to HoodieCallProcedureCommand
-  case c @ CallCommand(_, _) =>
-val procedure: Option[Procedure] = loadProcedure(c.name)
-val input = buildProcedureArgs(c.args)
-if (procedure.nonEmpty) {
-  CallProcedureHoodieCommand(procedure.get, input)
-} else {
-  c
-}
-
-  // Convert to CreateIndexCommand
-  case ci @ CreateIndex(plan @ ResolvesToHudiTable(table), indexName, 
indexType, ignoreIfExists, columns, options, output) =>
-// TODO need to resolve columns
-CreateIndexCommand(table, indexName, indexType, ignoreIfExists, 
columns, options, output)
-
-  // Convert to DropIndexCommand
-  case di @ DropIndex(plan @ ResolvesToHudiTable(table), indexName, 
ignoreIfNotExists, output) if di.resolved =>
-DropIndexCommand(table, indexName, ignoreIfNotExists, output)
-
-  // Convert to ShowIndexesCommand
-  case si @ ShowIndexes(plan @ ResolvesToHudiTable(table), output) if 
si.resolved =>
-ShowIndexesCommand(table, output)
-
-  // Covert to RefreshCommand
-  case ri @ RefreshIndex(plan @ ResolvesToHudiTable(table), indexName, 
output) if ri.resolved =>
-RefreshIndexCommand(table, indexName, output)
-
-  case _ => plan
+AnalysisHelper.allowInvokingTransformsInAnalyzer {
+  plan match {
+// Convert to MergeIntoHoodieTableCommand

Review Comment:
   Calling sequence diagram:
   ReplaceExpressions() ->
   transformAllExpressionsWithPruning() ->
   assertNotAnalysisRule()
   
   In the assertNotAnalysisRule  method,  If do not call 
AnalysisHelper.allowInvokingTransformsInAnalyzer(), Threadlocal 
resolveOperatorDepth  will be equal to 0, assertNotAnalysisRule  will be throw 
an exception in UT. So first call 
AnalysisHelper.allowInvokingTransformsInAnalyzer(), and initialize 
resolveOperatorDepth.



-- 
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: commits-unsubscr...@hudi.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org