rahil-c commented on code in PR #8885:
URL: https://github.com/apache/hudi/pull/8885#discussion_r1224597191


##########
hudi-client/hudi-spark-client/src/main/scala/org/apache/hudi/SparkJdbcUtils.scala:
##########
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.hudi
+
+import org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils
+import org.apache.spark.sql.jdbc.JdbcDialect
+import org.apache.spark.sql.types.StructType
+
+import java.sql.ResultSet
+
+/**
+ * Util functions for JDBC source and tables in Spark.
+ */
+object SparkJdbcUtils {
+  /**
+   * Takes a [[ResultSet]] and returns its Catalyst schema.
+   *
+   * @param resultSet      [[ResultSet]] instance.
+   * @param dialect        [[JdbcDialect]] instance.
+   * @param alwaysNullable If true, all the columns are nullable.
+   * @return A [[StructType]] giving the Catalyst schema.
+   */
+  def getSchema(resultSet: ResultSet,
+                dialect: JdbcDialect,
+                alwaysNullable: Boolean): StructType = {
+    // NOTE: Since Spark 3.4.0, the function signature of 
[[JdbcUtils.getSchema]] is changed
+    // to have four arguments. Although calling this function in Scala with 
the first three
+    // arguments works, with the fourth argument using the default value, this 
breaks the
+    // Java code as Java cannot use the default argument value and has to use 
four arguments.
+    // Instead of calling this function from Java code directly, we create 
this util function
+    // in Scala for compatibility in Hudi code.
+    //
+    // Before Spark 3.4.0 (three arguments):
+    // def getSchema(
+    //      resultSet: ResultSet,
+    //      dialect: JdbcDialect,
+    //      alwaysNullable: Boolean = false): StructType
+    //
+    // Since Spark 3.4.0 (four arguments):
+    // def getSchema(
+    //      resultSet: ResultSet,
+    //      dialect: JdbcDialect,
+    //      alwaysNullable: Boolean = false,
+    //      isTimestampNTZ: Boolean = false): StructType
+    JdbcUtils.getSchema(resultSet, dialect, alwaysNullable)

Review Comment:
   For my own understanding, where does this get used? 



##########
hudi-client/hudi-spark-client/src/main/scala/org/apache/spark/sql/HoodieCatalystPlansUtils.scala:
##########
@@ -52,6 +52,31 @@ trait HoodieCatalystPlansUtils {
    */
   def createJoin(left: LogicalPlan, right: LogicalPlan, joinType: JoinType): 
Join
 
+  /**
+   * Decomposes [[MatchMergeIntoTable]] into its arguments with accommodation 
for
+   * case class changes of [[MergeIntoTable]] in Spark 3.4.
+   *
+   * Before Spark 3.4.0 (five arguments):
+   *
+   * case class MergeIntoTable(
+   * targetTable: LogicalPlan,
+   * sourceTable: LogicalPlan,
+   * mergeCondition: Expression,
+   * matchedActions: Seq[MergeAction],
+   * notMatchedActions: Seq[MergeAction]) extends BinaryCommand with 
SupportsSubquery
+   *
+   * Since Spark 3.4.0 (six arguments):
+   *
+   * case class MergeIntoTable(
+   * targetTable: LogicalPlan,
+   * sourceTable: LogicalPlan,
+   * mergeCondition: Expression,
+   * matchedActions: Seq[MergeAction],
+   * notMatchedActions: Seq[MergeAction],
+   * notMatchedBySourceActions: Seq[MergeAction]) extends BinaryCommand with 
SupportsSubquery
+   */
+  def unapplyMergeIntoTable(plan: LogicalPlan): Option[(LogicalPlan, 
LogicalPlan, Expression)]

Review Comment:
   For my own understanding, where does this get used? 



-- 
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

Reply via email to