beliefer commented on code in PR #49453: URL: https://github.com/apache/spark/pull/49453#discussion_r1932480756
########## connector/docker-integration-tests/src/test/scala/org/apache/spark/sql/jdbc/v2/MySQLIntegrationSuite.scala: ########## @@ -241,6 +241,61 @@ class MySQLIntegrationSuite extends DockerJDBCIntegrationV2Suite with V2JDBCTest assert(rows10(0).getString(0) === "amy") assert(rows10(1).getString(0) === "alex") } + + test("SPARK-50793: MySQL JDBC Connector failed to cast some types") { + val tableName = catalogName + ".test_cast_function" + withTable(tableName) { + val stringValue = "0" + val stringLiteral = "'0'" + val longValue = 0L + val binaryValue = Array[Byte](0x30) + val binaryLiteral = "x'30'" + val doubleValue = 0.0 + val doubleLiteral = "0.0" + // CREATE table to use types defined in Spark SQL + sql( + s"CREATE TABLE $tableName (string_col STRING, long_col LONG, " + + "binary_col BINARY, double_col DOUBLE)") + sql( + s"INSERT INTO $tableName VALUES($stringLiteral, $longValue, $binaryLiteral, $doubleValue)") + + def testCast( + castType: String, + sourceCol: String, + targetCol: String, + targetDataType: DataType, + targetValue: Any): Unit = { + val sql = s"SELECT CAST($sourceCol AS $castType) AS target " + + s"FROM $tableName WHERE CAST($sourceCol AS $castType) = $targetCol" + val df = spark.sql(sql) + castType match { + case "SHORT" | "INTEGER" => + checkError( + exception = intercept[SparkException] { + df.collect() + }, + condition = null) + case _ => + checkFilterPushed(df) + checkAnswer(df, Seq(Row(targetValue))) + val expectedTypes = Array(targetDataType) + val resultTypes = df.schema.fields.map(_.dataType) + assert(resultTypes === expectedTypes, s"Failed to cast $sourceCol to $castType") + } + } + + testCast("BINARY", "string_col", "binary_col", BinaryType, binaryValue); + testCast("SHORT", "string_col", "long_col", LongType, longValue) + testCast("INTEGER", "string_col", "long_col", LongType, longValue) + testCast("LONG", "string_col", "long_col", LongType, longValue) + // We use stringLiteral to make sure both values are using the same collation + testCast("STRING", "long_col", stringLiteral, StringType, stringValue) Review Comment: You can adjust the test case at `MySQLOverMariaConnectorIntegrationSuite` and `MySQLIntegrationSuite` individually -- 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: reviews-unsubscr...@spark.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For additional commands, e-mail: reviews-h...@spark.apache.org