davidm-db commented on code in PR #47442:
URL: https://github.com/apache/spark/pull/47442#discussion_r1689573051
##########
sql/core/src/main/scala/org/apache/spark/sql/scripting/SqlScriptingExecutionNode.scala:
##########
@@ -155,3 +157,98 @@ abstract class
CompoundNestedStatementIteratorExec(collection: Seq[CompoundState
*/
class CompoundBodyExec(statements: Seq[CompoundStatementExec])
extends CompoundNestedStatementIteratorExec(statements)
+
+/**
+ * Executable node for IfElseStatement.
+ * @param conditions Collection of executable conditions. First condition
corresponds to IF clause,
+ * while others (if any) correspond to following ELSE IF
clauses.
+ * @param bodies Collection of executable bodies.
+ * @param booleanEvaluator Evaluator for Boolean conditions.
+ */
+class IfElseStatementExec(
+ conditions: Seq[SingleStatementExec],
+ bodies: Seq[CompoundBodyExec],
+ booleanEvaluator: StatementBooleanEvaluator) extends NonLeafStatementExec {
+ private object IfElseState extends Enumeration {
+ val Condition, Body = Value
+ }
+
+ private var state = IfElseState.Condition
+ private var curr: Option[CompoundStatementExec] = Some(conditions.head)
+
+ private var clauseIdx: Int = 0
+ private val conditionsCount: Int = conditions.length
+ private val bodiesCount: Int = bodies.length
+ assert(conditionsCount == bodiesCount || conditionsCount + 1 == bodiesCount)
+
+ private lazy val treeIterator: Iterator[CompoundStatementExec] =
Review Comment:
I've read through JDBC/ODBC API specifications and it seems like my previous
understanding was correct - they propose to return result sets using cursors,
where you actually specify in the Script/Stored Procedure what are you actually
returning, thus it's impossible to return IF conditions in the result sets.
On another hand, MySql has "Unbound SELECT statements", which is really
similar to what we want to achieve here - any standalone SQL statement is
returned as a part of the result set, but that also means that IF conditions
are never returned.
This is the understanding from discussions with Serge as well, we want to
return results only for standalone statements.
--
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]