diff --git a/core/src/main/java/io/kestra/core/serializers/JacksonMapper.java b/core/src/main/java/io/kestra/core/serializers/JacksonMapper.java index abcb9528f7..cc9db385b7 100644 --- a/core/src/main/java/io/kestra/core/serializers/JacksonMapper.java +++ b/core/src/main/java/io/kestra/core/serializers/JacksonMapper.java @@ -121,6 +121,7 @@ public static ObjectMapper ofIon() { private static ObjectMapper configure(ObjectMapper mapper) { return mapper .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false) + .configure(SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS, false) .setSerializationInclusion(JsonInclude.Include.NON_NULL) .registerModule(new JavaTimeModule()) .registerModule(new Jdk8Module()) diff --git a/core/src/test/java/io/kestra/plugin/core/kv/SetTest.java b/core/src/test/java/io/kestra/plugin/core/kv/SetTest.java index 36e7984661..58abf00303 100644 --- a/core/src/test/java/io/kestra/plugin/core/kv/SetTest.java +++ b/core/src/test/java/io/kestra/plugin/core/kv/SetTest.java @@ -209,8 +209,7 @@ void typeSpecified() throws Exception { assertThat(kv.getValue(TEST_KEY).get().value(), is(Instant.parse("2023-05-02T01:02:03Z"))); set.toBuilder().value("P1DT5S").kvType(KVType.DURATION).build().run(runContext); - // TODO Hack meanwhile we handle duration serialization as currently they are stored as bigint... - assertThat((long) Double.parseDouble(kv.getValue(TEST_KEY).get().value().toString()), is(Duration.ofDays(1).plus(Duration.ofSeconds(5)).toSeconds())); + assertThat(kv.getValue(TEST_KEY).get().value(), is(Duration.ofDays(1).plus(Duration.ofSeconds(5)))); set.toBuilder().value("[{\"some\":\"value\"},{\"another\":\"value\"}]").kvType(KVType.JSON).build().run(runContext); assertThat(kv.getValue(TEST_KEY).get().value(), is(List.of(Map.of("some", "value"), Map.of("another", "value")))); diff --git a/jdbc-h2/src/main/resources/migrations/h2/V_1_23__execution_duration.sql b/jdbc-h2/src/main/resources/migrations/h2/V_1_23__execution_duration.sql new file mode 100644 index 0000000000..0311bb9ecd --- /dev/null +++ b/jdbc-h2/src/main/resources/migrations/h2/V_1_23__execution_duration.sql @@ -0,0 +1,2 @@ +alter table executions drop column "state_duration"; +alter table executions add column "state_duration" VARCHAR(150) NOT NULL GENERATED ALWAYS AS (JQ_STRING("value", '.state.duration')); diff --git a/jdbc-mysql/src/main/resources/migrations/mysql/V_1_23__execution_duration.sql b/jdbc-mysql/src/main/resources/migrations/mysql/V_1_23__execution_duration.sql new file mode 100644 index 0000000000..4ac43083a6 --- /dev/null +++ b/jdbc-mysql/src/main/resources/migrations/mysql/V_1_23__execution_duration.sql @@ -0,0 +1,2 @@ +alter table `executions` drop column `state_duration`; +alter table `executions` add column `state_duration` VARCHAR(150) NOT NULL GENERATED ALWAYS AS (value ->> '$.state.duration'): diff --git a/jdbc-postgres/src/main/resources/migrations/postgres/V_1_23__execution_duration.sql b/jdbc-postgres/src/main/resources/migrations/postgres/V_1_23__execution_duration.sql new file mode 100644 index 0000000000..e7a8b573f4 --- /dev/null +++ b/jdbc-postgres/src/main/resources/migrations/postgres/V_1_23__execution_duration.sql @@ -0,0 +1,2 @@ +alter table executions drop column state_duration; +alter table executions add column state_duration VARCHAR(150) NOT NULL GENERATED ALWAYS AS (value #>> '{state, duration}');