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 <y...@apache.org> 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 <y...@apache.org> Signed-off-by: Dongjoon Hyun <dongj...@apache.org> --- .../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: commits-unsubscr...@spark.apache.org For additional commands, e-mail: commits-h...@spark.apache.org