DATACASS-694 - Fix Cassandra time to LocalTime conversion.
LocalTime now correctly uses nanoseconds. Original pull request: #166.
This commit is contained in:
committed by
Mark Paluch
parent
86c8d40c54
commit
56dd5a2aea
@@ -106,7 +106,7 @@ public abstract class CassandraJsr310Converters {
|
||||
|
||||
@Override
|
||||
public LocalTime convert(Long source) {
|
||||
return LocalTime.ofNanoOfDay(TimeUnit.MILLISECONDS.toNanos(source));
|
||||
return LocalTime.ofNanoOfDay(source);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -124,7 +124,7 @@ public abstract class CassandraJsr310Converters {
|
||||
|
||||
@Override
|
||||
public Long convert(LocalTime source) {
|
||||
return source.getLong(ChronoField.MILLI_OF_DAY);
|
||||
return source.getLong(ChronoField.NANO_OF_DAY);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ public class CassandraJsr310ConvertersUnitTests {
|
||||
@Test // DATACASS-302
|
||||
public void shouldConvertLongToLocalTime() {
|
||||
|
||||
assertThat(MillisOfDayToLocalTimeConverter.INSTANCE.convert(3723000L))
|
||||
assertThat(MillisOfDayToLocalTimeConverter.INSTANCE.convert(3_723_000_000_000L))
|
||||
.isEqualTo(LocalTime.of(1, 2, 3));
|
||||
}
|
||||
|
||||
@@ -43,6 +43,6 @@ public class CassandraJsr310ConvertersUnitTests {
|
||||
|
||||
assertThat(LocalTimeToMillisOfDayConverter.INSTANCE.convert(LocalTime.MIDNIGHT)).isZero();
|
||||
assertThat(LocalTimeToMillisOfDayConverter.INSTANCE.convert(LocalTime.of(1, 2, 3)))
|
||||
.isEqualTo(3723000L);
|
||||
.isEqualTo(3_723_000_000_000L);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,15 +22,10 @@ import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.net.InetAddress;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.time.LocalTime;
|
||||
import java.util.*;
|
||||
|
||||
import com.datastax.driver.core.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
@@ -48,13 +43,6 @@ import org.springframework.data.cassandra.support.CassandraVersion;
|
||||
import org.springframework.data.cassandra.test.util.AbstractKeyspaceCreatingIntegrationTest;
|
||||
import org.springframework.data.util.Version;
|
||||
|
||||
import com.datastax.driver.core.DataType;
|
||||
import com.datastax.driver.core.Duration;
|
||||
import com.datastax.driver.core.LocalDate;
|
||||
import com.datastax.driver.core.SimpleStatement;
|
||||
import com.datastax.driver.core.TupleType;
|
||||
import com.datastax.driver.core.TupleValue;
|
||||
|
||||
/**
|
||||
* Integration tests for type mapping using {@link CassandraOperations}.
|
||||
*
|
||||
@@ -551,6 +539,35 @@ public class CassandraTypeMappingIntegrationTests extends AbstractKeyspaceCreati
|
||||
assertThat(loaded.getLocalTime()).isEqualTo(entity.getLocalTime());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReadLocalTimeFromDriver(){
|
||||
assumeTrue(cassandraVersion.isGreaterThanOrEqualTo(VERSION_3_10));
|
||||
AllPossibleTypes entity = new AllPossibleTypes("1");
|
||||
|
||||
entity.setLocalTime(java.time.LocalTime.of(1, 2, 3));
|
||||
|
||||
operations.insert(entity);
|
||||
|
||||
ResultSet resultSet = session.execute("SELECT localTime FROM AllPossibleTypes WHERE id = '1'");
|
||||
Iterator<Row> rowIt = resultSet.iterator();
|
||||
while (rowIt.hasNext()){
|
||||
Row row = rowIt.next();
|
||||
long timeNanos = row.getTime(0);
|
||||
assertThat(timeNanos).isEqualTo(3_723_000_000_000L);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldWriteLocalTimeThroughDriver(){
|
||||
assumeTrue(cassandraVersion.isGreaterThanOrEqualTo(VERSION_3_10));
|
||||
|
||||
session.execute("INSERT INTO AllPossibleTypes(id,localTime) VALUES('1','01:02:03.000')");
|
||||
|
||||
AllPossibleTypes entity = operations.selectOne("SELECT localTime FROM AllPossibleTypes WHERE id = '1'", AllPossibleTypes.class);
|
||||
|
||||
assertThat(entity).hasFieldOrProperty("localTime").isEqualTo(LocalTime.of(1, 2, 3));
|
||||
}
|
||||
|
||||
@Test // DATACASS-296, DATACASS-563
|
||||
public void shouldReadAndWriteJodaLocalTime() {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user