Skip to content

Commit

Permalink
Only convert to totalAvgSeconds once
Browse files Browse the repository at this point in the history
When serializing Duration we write totalAvgSeconds. But when we read
we converted to totalAvgSeconds again as if we had read seconds.
This would make read Durations look bigger than they actually where and
screw up comparisons.
  • Loading branch information
burqen committed Jul 27, 2018
1 parent 46b0cea commit f3dcbc5
Showing 1 changed file with 9 additions and 3 deletions.
Expand Up @@ -963,7 +963,7 @@ private void readDuration( PageCursor cursor )
int nanosOfSecond = cursor.getInt();
long months = cursor.getLong();
long days = cursor.getLong();
writeDuration( months, days, totalAvgSeconds, nanosOfSecond );
writeDurationWithTotalAvgSeconds( months, days, totalAvgSeconds, nanosOfSecond );
}

private void readLocalTime( PageCursor cursor )
Expand Down Expand Up @@ -1251,18 +1251,24 @@ public void writeString( char value ) throws RuntimeException

@Override
public void writeDuration( long months, long days, long seconds, int nanos )
{
long totalAvgSeconds = months * AVG_MONTH_SECONDS + days * AVG_DAY_SECONDS + seconds;
writeDurationWithTotalAvgSeconds( months, days, totalAvgSeconds, nanos );
}

private void writeDurationWithTotalAvgSeconds( long months, long days, long totalAvgSeconds, int nanos )
{
if ( !isArray )
{
type = Type.DURATION;
long0 = months * AVG_MONTH_SECONDS + days * AVG_DAY_SECONDS + seconds;
long0 = totalAvgSeconds;
long1 = nanos;
long2 = months;
long3 = days;
}
else
{
long0Array[currentArrayOffset] = months * AVG_MONTH_SECONDS + days * AVG_DAY_SECONDS + seconds;
long0Array[currentArrayOffset] = totalAvgSeconds;
long1Array[currentArrayOffset] = nanos;
long2Array[currentArrayOffset] = months;
long3Array[currentArrayOffset] = days;
Expand Down

0 comments on commit f3dcbc5

Please sign in to comment.