sunxiaoguang commented on code in PR #49452:
URL: https://github.com/apache/spark/pull/49452#discussion_r1912447449


##########
connector/docker-integration-tests/src/test/scala/org/apache/spark/sql/jdbc/v2/V2JDBCTest.scala:
##########
@@ -986,4 +986,18 @@ private[v2] trait V2JDBCTest extends SharedSparkSession 
with DockerIntegrationFu
   test("scan with filter push-down with date time functions") {
     testDatetime(s"$catalogAndNamespace.${caseConvert("datetime")}")
   }
+
+  test("SPARK-50792 Format binary data as a binary literal in JDBC.") {
+    withTable(s"$catalogName.test_binary_literal") {
+      // Create a table with binary column
+      val binary = "X'123456'"
+      val tableName = "test_binary_literal"
+
+      sql(s"CREATE TABLE $catalogName.$tableName (binary_col BINARY)")
+      sql(s"INSERT INTO $catalogName.$tableName VALUES ($binary)")
+
+      val select = s"SELECT * FROM $catalogName.$tableName WHERE binary_col = 
$binary"
+      assert(spark.sql(select).collect().length === 1, s"Binary literal test 
failed: $select")
+    }
+  }

Review Comment:
   Spark SQL like this: SELECT * FROM test_binary_literal WHERE binary_col 
=x'010203'
   Would have to be translated to Oracle in this way: SELECT * FROM 
test_binary_literal WHERE DBMS_LOB.COMPARE(binary_col, HEXTORAW('010203')) = 0
   
   This is impossible with existing V2ExpressionSQLBuilder
   ```scala
         return switch (name) {
           ......
           case "=", "<>", "<=>", "<", "<=", ">", ">=" ->
             visitBinaryComparison(name, inputToSQL(e.children()[0]), 
inputToSQL(e.children()[1]));
           ......
   
     protected String visitBinaryComparison(String name, String l, String r) {
       if (name.equals("<=>")) {
         return "((" + l + " IS NOT NULL AND " + r + " IS NOT NULL AND " + l + 
" = " + r + ") " +
                 "OR (" + l + " IS NULL AND " + r + " IS NULL))";
       }
       return l + " " + name + " " + r;
     }
   
     protected String inputToSQL(Expression input) {
       if (input.children().length > 1) {
         return "(" + build(input) + ")";
       } else {
         return build(input);
       }
     }
   
   ```



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

Reply via email to