From e04c5db67641a65d66940513853cb19d540d60db Mon Sep 17 00:00:00 2001 From: Satia Herfert Date: Fri, 23 Mar 2018 16:55:50 +0100 Subject: [PATCH] Compare LocalDateTimes faster by pre-computing epochSecond. --- .../neo4j/values/storable/LocalDateTimeValue.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/community/values/src/main/java/org/neo4j/values/storable/LocalDateTimeValue.java b/community/values/src/main/java/org/neo4j/values/storable/LocalDateTimeValue.java index a56da8c2d9aa5..34b7fffe3d986 100644 --- a/community/values/src/main/java/org/neo4j/values/storable/LocalDateTimeValue.java +++ b/community/values/src/main/java/org/neo4j/values/storable/LocalDateTimeValue.java @@ -263,17 +263,24 @@ protected LocalDateTimeValue selectDateTime( AnyValue datetime ) } private final LocalDateTime value; + private final long epochSecondsInUTC; private LocalDateTimeValue( LocalDateTime value ) { this.value = value; + this.epochSecondsInUTC = this.value.toEpochSecond(UTC); } @Override - int unsafeCompareTo( Value otherValue ) + int unsafeCompareTo( Value other ) { - LocalDateTimeValue other = (LocalDateTimeValue) otherValue; - return value.compareTo( other.value ); + LocalDateTimeValue that = (LocalDateTimeValue) other; + int cmp = Long.compare( epochSecondsInUTC, that.epochSecondsInUTC ); + if ( cmp == 0 ) + { + cmp = value.getNano() - that.value.getNano(); + } + return cmp; } @Override