Skip to content

Commit 7a87461

Browse files
authored
docs: document negative zero cast-to-string incompatibility (#3811)
1 parent 77bd8e0 commit 7a87461

3 files changed

Lines changed: 19 additions & 2 deletions

File tree

docs/source/user-guide/latest/compatibility.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,13 @@ Cast operations in Comet fall into three levels of support:
153153
Spark.
154154
- **N/A**: Spark does not support this cast.
155155

156+
### Negative Zero
157+
158+
When casting floating-point values to strings, Spark normalizes negative zero (`-0.0`) to `"0.0"`, but Comet
159+
may produce `"-0.0"`. Since negative zero and positive zero are semantically equivalent (`-0.0 == 0.0` is true
160+
in IEEE 754), this difference is unlikely to affect real-world results. See
161+
[#1036](https://github.com/apache/datafusion-comet/issues/1036) for more details.
162+
156163
### Legacy Mode
157164

158165
<!--BEGIN:CAST_LEGACY_TABLE-->

spark/src/main/scala/org/apache/comet/expressions/CometCast.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ object CometCast extends CometExpressionSerde[Cast] with CometExprShim {
149149
isSupported(dt.elementType, dt1.elementType, timeZoneId, evalMode)
150150
case (dt: DataType, _) if dt.typeName == "timestamp_ntz" =>
151151
// https://github.com/apache/datafusion-comet/issues/378
152+
// https://github.com/apache/datafusion-comet/issues/3179
152153
toType match {
153154
case DataTypes.TimestampType | DataTypes.DateType | DataTypes.StringType =>
154155
Incompatible()

spark/src/main/scala/org/apache/comet/serde/arrays.scala

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,12 @@ object CometArrayMin extends CometExpressionSerde[ArrayMin] {
247247

248248
object CometArraysOverlap extends CometExpressionSerde[ArraysOverlap] {
249249

250-
override def getSupportLevel(expr: ArraysOverlap): SupportLevel = Incompatible(None)
250+
override def getSupportLevel(expr: ArraysOverlap): SupportLevel =
251+
Incompatible(
252+
Some(
253+
"Inconsistent behavior with NULL values" +
254+
" (https://github.com/apache/datafusion-comet/issues/3645)" +
255+
" (https://github.com/apache/datafusion-comet/issues/2036)"))
251256

252257
override def convert(
253258
expr: ArraysOverlap,
@@ -446,7 +451,11 @@ object CometArrayInsert extends CometExpressionSerde[ArrayInsert] {
446451

447452
object CometArrayUnion extends CometExpressionSerde[ArrayUnion] {
448453

449-
override def getSupportLevel(expr: ArrayUnion): SupportLevel = Incompatible(None)
454+
override def getSupportLevel(expr: ArrayUnion): SupportLevel =
455+
Incompatible(
456+
Some(
457+
"Correctness issue" +
458+
" (https://github.com/apache/datafusion-comet/issues/3644)"))
450459

451460
override def convert(
452461
expr: ArrayUnion,

0 commit comments

Comments
 (0)