This is an automated email from the ASF dual-hosted git repository.
dongjoon pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/spark.git
The following commit(s) were added to refs/heads/master by this push:
new 5b622c53dcfa [SPARK-52917][SQL] Read support to enable round-trip for
binary in xml format
5b622c53dcfa is described below
commit 5b622c53dcfa4b90830126959d242ca954bd2c98
Author: Kent Yao <[email protected]>
AuthorDate: Tue Jul 22 12:42:22 2025 -0700
[SPARK-52917][SQL] Read support to enable round-trip for binary in xml
format
### What changes were proposed in this pull request?
After SPARK-52788 fixed binary write for XML format, we need to add the
functionality to support reading it back instead of producing null constantly.
### Why are the changes needed?
XML improvement
### Does this PR introduce _any_ user-facing change?
no
### How was this patch tested?
new tests
### Was this patch authored or co-authored using generative AI tooling?
no
Closes #51614 from yaooqinn/SPARK-52917.
Authored-by: Kent Yao <[email protected]>
Signed-off-by: Dongjoon Hyun <[email protected]>
---
.../org/apache/spark/util/SparkStringUtils.scala | 4 ++++
.../sql/catalyst/expressions/ToStringBase.scala | 19 ++++++++++++++++++-
.../spark/sql/catalyst/xml/StaxXmlParser.scala | 6 +++++-
.../sql-tests/analyzer-results/binary.sql.out | 18 ++++++++++++++++++
.../sql-tests/analyzer-results/binary_base64.sql.out | 18 ++++++++++++++++++
.../sql-tests/analyzer-results/binary_basic.sql.out | 18 ++++++++++++++++++
.../sql-tests/analyzer-results/binary_hex.sql.out | 18 ++++++++++++++++++
.../analyzer-results/binary_hex_discrete.sql.out | 18 ++++++++++++++++++
.../src/test/resources/sql-tests/inputs/binary.sql | 6 ++++++
.../test/resources/sql-tests/results/binary.sql.out | 20 ++++++++++++++++++++
.../sql-tests/results/binary_base64.sql.out | 20 ++++++++++++++++++++
.../resources/sql-tests/results/binary_basic.sql.out | 20 ++++++++++++++++++++
.../resources/sql-tests/results/binary_hex.sql.out | 20 ++++++++++++++++++++
.../sql-tests/results/binary_hex_discrete.sql.out | 20 ++++++++++++++++++++
14 files changed, 223 insertions(+), 2 deletions(-)
diff --git
a/common/utils/src/main/scala/org/apache/spark/util/SparkStringUtils.scala
b/common/utils/src/main/scala/org/apache/spark/util/SparkStringUtils.scala
index c984c450c07b..3583cd82ee80 100644
--- a/common/utils/src/main/scala/org/apache/spark/util/SparkStringUtils.scala
+++ b/common/utils/src/main/scala/org/apache/spark/util/SparkStringUtils.scala
@@ -34,6 +34,10 @@ private[spark] trait SparkStringUtils {
s"[${SPACE_DELIMITED_UPPERCASE_HEX.formatHex(bytes)}]"
}
+ def fromHexString(hex: String): Array[Byte] = {
+
SPACE_DELIMITED_UPPERCASE_HEX.parseHex(hex.stripPrefix("[").stripSuffix("]"))
+ }
+
def sideBySide(left: String, right: String): Seq[String] = {
sideBySide(left.split("\n").toImmutableArraySeq,
right.split("\n").toImmutableArraySeq)
}
diff --git
a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/ToStringBase.scala
b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/ToStringBase.scala
index 672dc84bfaf4..bc294fd722b3 100644
---
a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/ToStringBase.scala
+++
b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/ToStringBase.scala
@@ -472,7 +472,24 @@ object ToStringBase {
(array: Array[Byte]) =>
UTF8String.fromString(SparkStringUtils.getHexString(array))
}
}
+
+ def getBinaryParser: BinaryParser = {
+ val style = SQLConf.get.getConf(SQLConf.BINARY_OUTPUT_STYLE)
+ style match {
+ case Some(BinaryOutputStyle.UTF8) =>
+ (utf8: UTF8String) => utf8.getBytes
+ case Some(BinaryOutputStyle.BASIC) =>
+ (utf8: UTF8String) =>
+
utf8.toString.stripPrefix("[").stripSuffix("]").split(",").map(_.trim.toByte)
+ case Some(BinaryOutputStyle.BASE64) =>
+ (utf8: UTF8String) => java.util.Base64.getDecoder.decode(utf8.getBytes)
+ case Some(BinaryOutputStyle.HEX) =>
+ (utf8: UTF8String) => Hex.unhex(utf8.getBytes)
+ case _ =>
+ (utf8: UTF8String) => SparkStringUtils.fromHexString(utf8.toString)
+ }
+ }
}
trait BinaryFormatter extends (Array[Byte] => UTF8String) with Serializable
-
+trait BinaryParser extends (UTF8String => Array[Byte]) with Serializable
diff --git
a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/xml/StaxXmlParser.scala
b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/xml/StaxXmlParser.scala
index 00497c1c31f3..e3efc362cd92 100644
---
a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/xml/StaxXmlParser.scala
+++
b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/xml/StaxXmlParser.scala
@@ -40,7 +40,7 @@ import org.apache.hadoop.security.AccessControlException
import org.apache.spark.{SparkIllegalArgumentException, SparkUpgradeException}
import org.apache.spark.internal.Logging
import org.apache.spark.sql.catalyst.InternalRow
-import org.apache.spark.sql.catalyst.expressions.{ExprUtils,
GenericInternalRow}
+import org.apache.spark.sql.catalyst.expressions.{ExprUtils,
GenericInternalRow, ToStringBase}
import org.apache.spark.sql.catalyst.util.{ArrayBasedMapData,
BadRecordException, DateFormatter, DropMalformedMode, FailureSafeParser,
GenericArrayData, MapData, ParseMode, PartialResultArrayException,
PartialResultException, PermissiveMode, TimestampFormatter}
import org.apache.spark.sql.catalyst.util.LegacyDateFormats.FAST_DATE_FORMAT
import org.apache.spark.sql.catalyst.xml.StaxXmlParser.convertStream
@@ -76,6 +76,8 @@ class StaxXmlParser(
legacyFormat = FAST_DATE_FORMAT,
isParsing = true)
+ private lazy val binaryParser = ToStringBase.getBinaryParser
+
private val decimalParser = ExprUtils.getDecimalParser(options.locale)
private val caseSensitive = SQLConf.get.caseSensitiveAnalysis
@@ -493,6 +495,7 @@ class StaxXmlParser(
case _: TimestampNTZType =>
timestampNTZFormatter.parseWithoutTimeZone(datum, false)
case _: DateType => parseXmlDate(datum, options)
case _: StringType => UTF8String.fromString(datum)
+ case _: BinaryType => binaryParser(UTF8String.fromString(datum))
case _ => throw new SparkIllegalArgumentException(
errorClass = "_LEGACY_ERROR_TEMP_3244",
messageParameters = Map("castType" -> "castType.typeName"))
@@ -536,6 +539,7 @@ class StaxXmlParser(
case DoubleType => signSafeToDouble(value)
case BooleanType => castTo(value, BooleanType)
case StringType => castTo(value, StringType)
+ case BinaryType => castTo(value, BinaryType)
case DateType => castTo(value, DateType)
case TimestampType => castTo(value, TimestampType)
case TimestampNTZType => castTo(value, TimestampNTZType)
diff --git
a/sql/core/src/test/resources/sql-tests/analyzer-results/binary.sql.out
b/sql/core/src/test/resources/sql-tests/analyzer-results/binary.sql.out
index d21abdc824e0..b2781c56ca7d 100644
--- a/sql/core/src/test/resources/sql-tests/analyzer-results/binary.sql.out
+++ b/sql/core/src/test/resources/sql-tests/analyzer-results/binary.sql.out
@@ -39,3 +39,21 @@ select to_xml(named_struct('name', binary('Eason'), 'birth',
2018, 'org', binary
-- !query analysis
Project [to_xml(named_struct(name, cast(Eason as binary), birth, 2018, org,
cast(Kindergarten Cop as binary)), Some(America/Los_Angeles)) AS
to_xml(named_struct(name, Eason, birth, 2018, org, Kindergarten Cop))#x]
+- OneRowRelation
+
+
+-- !query
+SELECT from_xml(
+ to_xml(named_struct('name', binary('Eason'), 'birth', 2018, 'org',
binary('Kindergarten Cop'))),
+ 'name STRING, birth INT, org STRING')
+-- !query analysis
+Project [from_xml(StructField(name,StringType,true),
StructField(birth,IntegerType,true), StructField(org,StringType,true),
to_xml(named_struct(name, cast(Eason as binary), birth, 2018, org,
cast(Kindergarten Cop as binary)), Some(America/Los_Angeles)),
Some(America/Los_Angeles)) AS from_xml(to_xml(named_struct(name, Eason, birth,
2018, org, Kindergarten Cop)))#x]
++- OneRowRelation
+
+
+-- !query
+SELECT from_xml(
+ to_xml(named_struct('name', binary('Eason'), 'birth', 2018, 'org',
binary('Kindergarten Cop'))),
+ 'name binary, birth INT, org binary')
+-- !query analysis
+Project [from_xml(StructField(name,BinaryType,true),
StructField(birth,IntegerType,true), StructField(org,BinaryType,true),
to_xml(named_struct(name, cast(Eason as binary), birth, 2018, org,
cast(Kindergarten Cop as binary)), Some(America/Los_Angeles)),
Some(America/Los_Angeles)) AS from_xml(to_xml(named_struct(name, Eason, birth,
2018, org, Kindergarten Cop)))#x]
++- OneRowRelation
diff --git
a/sql/core/src/test/resources/sql-tests/analyzer-results/binary_base64.sql.out
b/sql/core/src/test/resources/sql-tests/analyzer-results/binary_base64.sql.out
index d21abdc824e0..b2781c56ca7d 100644
---
a/sql/core/src/test/resources/sql-tests/analyzer-results/binary_base64.sql.out
+++
b/sql/core/src/test/resources/sql-tests/analyzer-results/binary_base64.sql.out
@@ -39,3 +39,21 @@ select to_xml(named_struct('name', binary('Eason'), 'birth',
2018, 'org', binary
-- !query analysis
Project [to_xml(named_struct(name, cast(Eason as binary), birth, 2018, org,
cast(Kindergarten Cop as binary)), Some(America/Los_Angeles)) AS
to_xml(named_struct(name, Eason, birth, 2018, org, Kindergarten Cop))#x]
+- OneRowRelation
+
+
+-- !query
+SELECT from_xml(
+ to_xml(named_struct('name', binary('Eason'), 'birth', 2018, 'org',
binary('Kindergarten Cop'))),
+ 'name STRING, birth INT, org STRING')
+-- !query analysis
+Project [from_xml(StructField(name,StringType,true),
StructField(birth,IntegerType,true), StructField(org,StringType,true),
to_xml(named_struct(name, cast(Eason as binary), birth, 2018, org,
cast(Kindergarten Cop as binary)), Some(America/Los_Angeles)),
Some(America/Los_Angeles)) AS from_xml(to_xml(named_struct(name, Eason, birth,
2018, org, Kindergarten Cop)))#x]
++- OneRowRelation
+
+
+-- !query
+SELECT from_xml(
+ to_xml(named_struct('name', binary('Eason'), 'birth', 2018, 'org',
binary('Kindergarten Cop'))),
+ 'name binary, birth INT, org binary')
+-- !query analysis
+Project [from_xml(StructField(name,BinaryType,true),
StructField(birth,IntegerType,true), StructField(org,BinaryType,true),
to_xml(named_struct(name, cast(Eason as binary), birth, 2018, org,
cast(Kindergarten Cop as binary)), Some(America/Los_Angeles)),
Some(America/Los_Angeles)) AS from_xml(to_xml(named_struct(name, Eason, birth,
2018, org, Kindergarten Cop)))#x]
++- OneRowRelation
diff --git
a/sql/core/src/test/resources/sql-tests/analyzer-results/binary_basic.sql.out
b/sql/core/src/test/resources/sql-tests/analyzer-results/binary_basic.sql.out
index d21abdc824e0..b2781c56ca7d 100644
---
a/sql/core/src/test/resources/sql-tests/analyzer-results/binary_basic.sql.out
+++
b/sql/core/src/test/resources/sql-tests/analyzer-results/binary_basic.sql.out
@@ -39,3 +39,21 @@ select to_xml(named_struct('name', binary('Eason'), 'birth',
2018, 'org', binary
-- !query analysis
Project [to_xml(named_struct(name, cast(Eason as binary), birth, 2018, org,
cast(Kindergarten Cop as binary)), Some(America/Los_Angeles)) AS
to_xml(named_struct(name, Eason, birth, 2018, org, Kindergarten Cop))#x]
+- OneRowRelation
+
+
+-- !query
+SELECT from_xml(
+ to_xml(named_struct('name', binary('Eason'), 'birth', 2018, 'org',
binary('Kindergarten Cop'))),
+ 'name STRING, birth INT, org STRING')
+-- !query analysis
+Project [from_xml(StructField(name,StringType,true),
StructField(birth,IntegerType,true), StructField(org,StringType,true),
to_xml(named_struct(name, cast(Eason as binary), birth, 2018, org,
cast(Kindergarten Cop as binary)), Some(America/Los_Angeles)),
Some(America/Los_Angeles)) AS from_xml(to_xml(named_struct(name, Eason, birth,
2018, org, Kindergarten Cop)))#x]
++- OneRowRelation
+
+
+-- !query
+SELECT from_xml(
+ to_xml(named_struct('name', binary('Eason'), 'birth', 2018, 'org',
binary('Kindergarten Cop'))),
+ 'name binary, birth INT, org binary')
+-- !query analysis
+Project [from_xml(StructField(name,BinaryType,true),
StructField(birth,IntegerType,true), StructField(org,BinaryType,true),
to_xml(named_struct(name, cast(Eason as binary), birth, 2018, org,
cast(Kindergarten Cop as binary)), Some(America/Los_Angeles)),
Some(America/Los_Angeles)) AS from_xml(to_xml(named_struct(name, Eason, birth,
2018, org, Kindergarten Cop)))#x]
++- OneRowRelation
diff --git
a/sql/core/src/test/resources/sql-tests/analyzer-results/binary_hex.sql.out
b/sql/core/src/test/resources/sql-tests/analyzer-results/binary_hex.sql.out
index d21abdc824e0..b2781c56ca7d 100644
--- a/sql/core/src/test/resources/sql-tests/analyzer-results/binary_hex.sql.out
+++ b/sql/core/src/test/resources/sql-tests/analyzer-results/binary_hex.sql.out
@@ -39,3 +39,21 @@ select to_xml(named_struct('name', binary('Eason'), 'birth',
2018, 'org', binary
-- !query analysis
Project [to_xml(named_struct(name, cast(Eason as binary), birth, 2018, org,
cast(Kindergarten Cop as binary)), Some(America/Los_Angeles)) AS
to_xml(named_struct(name, Eason, birth, 2018, org, Kindergarten Cop))#x]
+- OneRowRelation
+
+
+-- !query
+SELECT from_xml(
+ to_xml(named_struct('name', binary('Eason'), 'birth', 2018, 'org',
binary('Kindergarten Cop'))),
+ 'name STRING, birth INT, org STRING')
+-- !query analysis
+Project [from_xml(StructField(name,StringType,true),
StructField(birth,IntegerType,true), StructField(org,StringType,true),
to_xml(named_struct(name, cast(Eason as binary), birth, 2018, org,
cast(Kindergarten Cop as binary)), Some(America/Los_Angeles)),
Some(America/Los_Angeles)) AS from_xml(to_xml(named_struct(name, Eason, birth,
2018, org, Kindergarten Cop)))#x]
++- OneRowRelation
+
+
+-- !query
+SELECT from_xml(
+ to_xml(named_struct('name', binary('Eason'), 'birth', 2018, 'org',
binary('Kindergarten Cop'))),
+ 'name binary, birth INT, org binary')
+-- !query analysis
+Project [from_xml(StructField(name,BinaryType,true),
StructField(birth,IntegerType,true), StructField(org,BinaryType,true),
to_xml(named_struct(name, cast(Eason as binary), birth, 2018, org,
cast(Kindergarten Cop as binary)), Some(America/Los_Angeles)),
Some(America/Los_Angeles)) AS from_xml(to_xml(named_struct(name, Eason, birth,
2018, org, Kindergarten Cop)))#x]
++- OneRowRelation
diff --git
a/sql/core/src/test/resources/sql-tests/analyzer-results/binary_hex_discrete.sql.out
b/sql/core/src/test/resources/sql-tests/analyzer-results/binary_hex_discrete.sql.out
index d21abdc824e0..b2781c56ca7d 100644
---
a/sql/core/src/test/resources/sql-tests/analyzer-results/binary_hex_discrete.sql.out
+++
b/sql/core/src/test/resources/sql-tests/analyzer-results/binary_hex_discrete.sql.out
@@ -39,3 +39,21 @@ select to_xml(named_struct('name', binary('Eason'), 'birth',
2018, 'org', binary
-- !query analysis
Project [to_xml(named_struct(name, cast(Eason as binary), birth, 2018, org,
cast(Kindergarten Cop as binary)), Some(America/Los_Angeles)) AS
to_xml(named_struct(name, Eason, birth, 2018, org, Kindergarten Cop))#x]
+- OneRowRelation
+
+
+-- !query
+SELECT from_xml(
+ to_xml(named_struct('name', binary('Eason'), 'birth', 2018, 'org',
binary('Kindergarten Cop'))),
+ 'name STRING, birth INT, org STRING')
+-- !query analysis
+Project [from_xml(StructField(name,StringType,true),
StructField(birth,IntegerType,true), StructField(org,StringType,true),
to_xml(named_struct(name, cast(Eason as binary), birth, 2018, org,
cast(Kindergarten Cop as binary)), Some(America/Los_Angeles)),
Some(America/Los_Angeles)) AS from_xml(to_xml(named_struct(name, Eason, birth,
2018, org, Kindergarten Cop)))#x]
++- OneRowRelation
+
+
+-- !query
+SELECT from_xml(
+ to_xml(named_struct('name', binary('Eason'), 'birth', 2018, 'org',
binary('Kindergarten Cop'))),
+ 'name binary, birth INT, org binary')
+-- !query analysis
+Project [from_xml(StructField(name,BinaryType,true),
StructField(birth,IntegerType,true), StructField(org,BinaryType,true),
to_xml(named_struct(name, cast(Eason as binary), birth, 2018, org,
cast(Kindergarten Cop as binary)), Some(America/Los_Angeles)),
Some(America/Los_Angeles)) AS from_xml(to_xml(named_struct(name, Eason, birth,
2018, org, Kindergarten Cop)))#x]
++- OneRowRelation
diff --git a/sql/core/src/test/resources/sql-tests/inputs/binary.sql
b/sql/core/src/test/resources/sql-tests/inputs/binary.sql
index 8da97e466341..b30c57a7e871 100644
--- a/sql/core/src/test/resources/sql-tests/inputs/binary.sql
+++ b/sql/core/src/test/resources/sql-tests/inputs/binary.sql
@@ -6,3 +6,9 @@ SELECT CAST('Spark' as BINARY);
SELECT array( X'',
X'4561736F6E2059616F20323031382D31312D31373A31333A33333A3333', CAST('Spark' as
BINARY));
SELECT to_csv(named_struct('n', 1, 'info',
X'4561736F6E2059616F20323031382D31312D31373A31333A33333A3333'));
select to_xml(named_struct('name', binary('Eason'), 'birth', 2018, 'org',
binary('Kindergarten Cop')));
+SELECT from_xml(
+ to_xml(named_struct('name', binary('Eason'), 'birth', 2018, 'org',
binary('Kindergarten Cop'))),
+ 'name STRING, birth INT, org STRING');
+SELECT from_xml(
+ to_xml(named_struct('name', binary('Eason'), 'birth', 2018, 'org',
binary('Kindergarten Cop'))),
+ 'name binary, birth INT, org binary');
diff --git a/sql/core/src/test/resources/sql-tests/results/binary.sql.out
b/sql/core/src/test/resources/sql-tests/results/binary.sql.out
index 9571d9130f73..bdbf4e538f6c 100644
--- a/sql/core/src/test/resources/sql-tests/results/binary.sql.out
+++ b/sql/core/src/test/resources/sql-tests/results/binary.sql.out
@@ -49,3 +49,23 @@ struct<to_xml(named_struct(name, Eason, birth, 2018, org,
Kindergarten Cop)):str
<birth>2018</birth>
<org>Kindergarten Cop</org>
</ROW>
+
+
+-- !query
+SELECT from_xml(
+ to_xml(named_struct('name', binary('Eason'), 'birth', 2018, 'org',
binary('Kindergarten Cop'))),
+ 'name STRING, birth INT, org STRING')
+-- !query schema
+struct<from_xml(to_xml(named_struct(name, Eason, birth, 2018, org,
Kindergarten Cop))):struct<name:string,birth:int,org:string>>
+-- !query output
+{"name":"Eason","birth":2018,"org":"Kindergarten Cop"}
+
+
+-- !query
+SELECT from_xml(
+ to_xml(named_struct('name', binary('Eason'), 'birth', 2018, 'org',
binary('Kindergarten Cop'))),
+ 'name binary, birth INT, org binary')
+-- !query schema
+struct<from_xml(to_xml(named_struct(name, Eason, birth, 2018, org,
Kindergarten Cop))):struct<name:binary,birth:int,org:binary>>
+-- !query output
+{"name":Eason,"birth":2018,"org":Kindergarten Cop}
diff --git
a/sql/core/src/test/resources/sql-tests/results/binary_base64.sql.out
b/sql/core/src/test/resources/sql-tests/results/binary_base64.sql.out
index ef45d059bc81..0806f175550d 100644
--- a/sql/core/src/test/resources/sql-tests/results/binary_base64.sql.out
+++ b/sql/core/src/test/resources/sql-tests/results/binary_base64.sql.out
@@ -49,3 +49,23 @@ struct<to_xml(named_struct(name, Eason, birth, 2018, org,
Kindergarten Cop)):str
<birth>2018</birth>
<org>S2luZGVyZ2FydGVuIENvcA</org>
</ROW>
+
+
+-- !query
+SELECT from_xml(
+ to_xml(named_struct('name', binary('Eason'), 'birth', 2018, 'org',
binary('Kindergarten Cop'))),
+ 'name STRING, birth INT, org STRING')
+-- !query schema
+struct<from_xml(to_xml(named_struct(name, Eason, birth, 2018, org,
Kindergarten Cop))):struct<name:string,birth:int,org:string>>
+-- !query output
+{"name":"RWFzb24","birth":2018,"org":"S2luZGVyZ2FydGVuIENvcA"}
+
+
+-- !query
+SELECT from_xml(
+ to_xml(named_struct('name', binary('Eason'), 'birth', 2018, 'org',
binary('Kindergarten Cop'))),
+ 'name binary, birth INT, org binary')
+-- !query schema
+struct<from_xml(to_xml(named_struct(name, Eason, birth, 2018, org,
Kindergarten Cop))):struct<name:binary,birth:int,org:binary>>
+-- !query output
+{"name":RWFzb24,"birth":2018,"org":S2luZGVyZ2FydGVuIENvcA}
diff --git a/sql/core/src/test/resources/sql-tests/results/binary_basic.sql.out
b/sql/core/src/test/resources/sql-tests/results/binary_basic.sql.out
index 0118df765df1..ce0d7d5d7f9b 100644
--- a/sql/core/src/test/resources/sql-tests/results/binary_basic.sql.out
+++ b/sql/core/src/test/resources/sql-tests/results/binary_basic.sql.out
@@ -49,3 +49,23 @@ struct<to_xml(named_struct(name, Eason, birth, 2018, org,
Kindergarten Cop)):str
<birth>2018</birth>
<org>[75, 105, 110, 100, 101, 114, 103, 97, 114, 116, 101, 110, 32, 67,
111, 112]</org>
</ROW>
+
+
+-- !query
+SELECT from_xml(
+ to_xml(named_struct('name', binary('Eason'), 'birth', 2018, 'org',
binary('Kindergarten Cop'))),
+ 'name STRING, birth INT, org STRING')
+-- !query schema
+struct<from_xml(to_xml(named_struct(name, Eason, birth, 2018, org,
Kindergarten Cop))):struct<name:string,birth:int,org:string>>
+-- !query output
+{"name":"[69, 97, 115, 111, 110]","birth":2018,"org":"[75, 105, 110, 100, 101,
114, 103, 97, 114, 116, 101, 110, 32, 67, 111, 112]"}
+
+
+-- !query
+SELECT from_xml(
+ to_xml(named_struct('name', binary('Eason'), 'birth', 2018, 'org',
binary('Kindergarten Cop'))),
+ 'name binary, birth INT, org binary')
+-- !query schema
+struct<from_xml(to_xml(named_struct(name, Eason, birth, 2018, org,
Kindergarten Cop))):struct<name:binary,birth:int,org:binary>>
+-- !query output
+{"name":[69, 97, 115, 111, 110],"birth":2018,"org":[75, 105, 110, 100, 101,
114, 103, 97, 114, 116, 101, 110, 32, 67, 111, 112]}
diff --git a/sql/core/src/test/resources/sql-tests/results/binary_hex.sql.out
b/sql/core/src/test/resources/sql-tests/results/binary_hex.sql.out
index d97f6efae292..b1b23e02ea4e 100644
--- a/sql/core/src/test/resources/sql-tests/results/binary_hex.sql.out
+++ b/sql/core/src/test/resources/sql-tests/results/binary_hex.sql.out
@@ -49,3 +49,23 @@ struct<to_xml(named_struct(name, Eason, birth, 2018, org,
Kindergarten Cop)):str
<birth>2018</birth>
<org>4B696E64657267617274656E20436F70</org>
</ROW>
+
+
+-- !query
+SELECT from_xml(
+ to_xml(named_struct('name', binary('Eason'), 'birth', 2018, 'org',
binary('Kindergarten Cop'))),
+ 'name STRING, birth INT, org STRING')
+-- !query schema
+struct<from_xml(to_xml(named_struct(name, Eason, birth, 2018, org,
Kindergarten Cop))):struct<name:string,birth:int,org:string>>
+-- !query output
+{"name":"4561736F6E","birth":2018,"org":"4B696E64657267617274656E20436F70"}
+
+
+-- !query
+SELECT from_xml(
+ to_xml(named_struct('name', binary('Eason'), 'birth', 2018, 'org',
binary('Kindergarten Cop'))),
+ 'name binary, birth INT, org binary')
+-- !query schema
+struct<from_xml(to_xml(named_struct(name, Eason, birth, 2018, org,
Kindergarten Cop))):struct<name:binary,birth:int,org:binary>>
+-- !query output
+{"name":4561736F6E,"birth":2018,"org":4B696E64657267617274656E20436F70}
diff --git
a/sql/core/src/test/resources/sql-tests/results/binary_hex_discrete.sql.out
b/sql/core/src/test/resources/sql-tests/results/binary_hex_discrete.sql.out
index e0dc049db833..a07cfd8cacff 100644
--- a/sql/core/src/test/resources/sql-tests/results/binary_hex_discrete.sql.out
+++ b/sql/core/src/test/resources/sql-tests/results/binary_hex_discrete.sql.out
@@ -49,3 +49,23 @@ struct<to_xml(named_struct(name, Eason, birth, 2018, org,
Kindergarten Cop)):str
<birth>2018</birth>
<org>[4B 69 6E 64 65 72 67 61 72 74 65 6E 20 43 6F 70]</org>
</ROW>
+
+
+-- !query
+SELECT from_xml(
+ to_xml(named_struct('name', binary('Eason'), 'birth', 2018, 'org',
binary('Kindergarten Cop'))),
+ 'name STRING, birth INT, org STRING')
+-- !query schema
+struct<from_xml(to_xml(named_struct(name, Eason, birth, 2018, org,
Kindergarten Cop))):struct<name:string,birth:int,org:string>>
+-- !query output
+{"name":"[45 61 73 6F 6E]","birth":2018,"org":"[4B 69 6E 64 65 72 67 61 72 74
65 6E 20 43 6F 70]"}
+
+
+-- !query
+SELECT from_xml(
+ to_xml(named_struct('name', binary('Eason'), 'birth', 2018, 'org',
binary('Kindergarten Cop'))),
+ 'name binary, birth INT, org binary')
+-- !query schema
+struct<from_xml(to_xml(named_struct(name, Eason, birth, 2018, org,
Kindergarten Cop))):struct<name:binary,birth:int,org:binary>>
+-- !query output
+{"name":[45 61 73 6F 6E],"birth":2018,"org":[4B 69 6E 64 65 72 67 61 72 74 65
6E 20 43 6F 70]}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]