DBZ-1501 Support partial timstamps in default values

This commit is contained in:
Jiri Pechanec 2019-09-25 17:45:57 +02:00 committed by Gunnar Morling
parent 97cc493ef5
commit 0f61a0c8de
2 changed files with 14 additions and 2 deletions

View File

@ -246,7 +246,14 @@ private Object convertToBoolean(String value) {
private DateTimeFormatter timestampFormat(int length) {
final DateTimeFormatterBuilder dtf = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd HH:mm:ss");
.appendPattern("yyyy-MM-dd")
.optionalStart()
.appendLiteral(" ")
.append(DateTimeFormatter.ISO_LOCAL_TIME)
.optionalEnd()
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0);
if (length > 0) {
dtf.appendFraction(ChronoField.MICRO_OF_SECOND, 0, length, true);
}

View File

@ -13,6 +13,8 @@
import java.io.IOException;
import java.io.InputStream;
import java.sql.Types;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
@ -2225,7 +2227,8 @@ public void parseDefaultValue() {
"columnC VARCHAR(10) NULL DEFAULT 'C'," +
"columnD VARCHAR(10) NULL DEFAULT NULL," +
"columnE VARCHAR(10) NOT NULL," +
"my_date datetime NOT NULL DEFAULT '2018-04-27 13:28:43');";
"my_dateA datetime NOT NULL DEFAULT '2018-04-27 13:28:43'," +
"my_dateB datetime NOT NULL DEFAULT '9999-12-31');";
parser.parse(ddl, tables);
Table table = tables.forTable(new TableId(null, null, "tmp"));
assertThat(table.columnWithName("id").isOptional()).isEqualTo(false);
@ -2234,6 +2237,8 @@ public void parseDefaultValue() {
assertThat(table.columnWithName("columnC").defaultValue()).isEqualTo("C");
assertThat(table.columnWithName("columnD").defaultValue()).isEqualTo(null);
assertThat(table.columnWithName("columnE").defaultValue()).isEqualTo(null);
assertThat(table.columnWithName("my_dateA").defaultValue()).isEqualTo(LocalDateTime.of(2018, 4, 27, 13, 28, 43).toEpochSecond(ZoneOffset.UTC) * 1_000);
assertThat(table.columnWithName("my_dateB").defaultValue()).isEqualTo(LocalDateTime.of(9999, 12, 31, 0, 0, 0).toEpochSecond(ZoneOffset.UTC) * 1_000);
}
@Test