This is an automated email from the ASF dual-hosted git repository.

xiazcy pushed a commit to branch 3.8-dev
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 5e652982c64ebaae4c7fc210718eda99321b7ada
Merge: 482475e814 d5f4a29535
Author: xiazcy <[email protected]>
AuthorDate: Fri Aug 22 15:42:10 2025 -0700

    Merge branch '3.7-dev' into 3.8-dev

 docs/src/dev/provider/gremlin-semantics.asciidoc              | 11 +++++++++++
 .../gremlin/process/traversal/step/map/DateDiffStep.java      |  2 +-
 .../gremlin/process/traversal/step/map/DateDiffStepTest.java  |  5 +++++
 3 files changed, 17 insertions(+), 1 deletion(-)

diff --cc 
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DateDiffStep.java
index 1aa7d3f073,52d0bd2cbe..9f1f37fdbc
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DateDiffStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DateDiffStep.java
@@@ -60,41 -52,18 +60,41 @@@ public final class DateDiffStep<S> exte
      @Override
      protected Long map(final Traverser.Admin<S> traverser) {
          final Object object = traverser.get();
 -
 -        if (!(object instanceof Date))
 -            throw new IllegalArgumentException(
 -                    String.format("DateDiff can only take Date as argument, 
encountered %s", object == null ? null : object.getClass()));
 -
 -        final Date otherDate = value != null ? value :
 -                dateTraversal != null ? TraversalUtil.apply(traverser, 
dateTraversal) : null;
 +        OffsetDateTime date;
 +        OffsetDateTime otherDate;
 +
 +        if (!(object instanceof OffsetDateTime)) {
 +            // allow incoming traverser to resolve into Date object for 
compatibility
 +            if (object instanceof Date) {
 +                date = ((Date) object).toInstant().atOffset(ZoneOffset.UTC);
 +            } else {
 +                // note: null handling consistency to be resolved 
https://issues.apache.org/jira/browse/TINKERPOP-3152
 +                throw new IllegalArgumentException(
-                         String.format("DateDiff can only take OffsetDateTime 
or Date (deprecated) as argument, encountered %s", object.getClass()));
++                        String.format("DateDiff can only take OffsetDateTime 
or Date (deprecated) as argument, encountered %s", object == null ? null : 
object.getClass()));
 +            }
 +        } else {
 +            date = (OffsetDateTime) object;
 +        }
 +
 +
 +        if (null == value && null != dateTraversal) {
 +            Object traversalDate = TraversalUtil.apply(traverser, 
dateTraversal);
 +            if (traversalDate == null) {
 +                otherDate = null;
 +            } else if (traversalDate instanceof Date) {
 +                // for cases when traversal resolves to a java.util.Date 
object (e.g. inject(new Date()))
 +                otherDate = ((Date) 
traversalDate).toInstant().atOffset(ZoneOffset.UTC);
 +            } else if (traversalDate instanceof OffsetDateTime) {
 +                otherDate = (OffsetDateTime) traversalDate;
 +            } else {
 +                throw new IllegalArgumentException(String.format("DateDiff 
can only take OffsetDateTime or Date (deprecated) as argument, encountered %s", 
object.getClass()));
 +            }
 +        } else {
 +            otherDate = value;
 +        }
  
          // let's not throw exception and assume null date == 0
 -        final long otherDateMs = otherDate == null ? 0 : otherDate.getTime();
 -
 -        return (((Date) object).getTime() - otherDateMs) / 1000;
 +        return otherDate == null ? date.toEpochSecond() : 
Duration.between(otherDate, date).getSeconds();
      }
  
      @Override
diff --cc 
gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DateDiffStepTest.java
index 43537aa2fd,e8de2d8681..5fb8e0120f
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DateDiffStepTest.java
+++ 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DateDiffStepTest.java
@@@ -136,4 -91,14 +136,9 @@@ public class DateDiffStepTest extends S
  
          assertEquals(now.getTime() / 1000, (long) __.__(now).dateDiff((Date) 
null).next());
      }
+ 
 -    @Test(expected = IllegalArgumentException.class)
 -    public void shouldThrowWhenInputIsNotDate() {
 -        __.__("2023-08-23T00:00:00Z").dateDiff(new Date()).next();
 -    }
 -
+     @Test(expected = IllegalArgumentException.class)
+     public void shouldThrowWhenInputIsNull() {
+         __.__((Object) null).dateDiff(new Date()).next();
+     }
  }

Reply via email to