diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/data/QRecordEntityField.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/data/QRecordEntityField.java index f977f244..510308c0 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/data/QRecordEntityField.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/data/QRecordEntityField.java @@ -27,6 +27,7 @@ import java.lang.reflect.Method; import java.math.BigDecimal; import java.time.Instant; import java.time.LocalDate; +import java.time.LocalTime; import com.kingsrook.qqq.backend.core.exceptions.QValueException; import com.kingsrook.qqq.backend.core.utils.ValueUtils; @@ -159,6 +160,11 @@ public class QRecordEntityField { return (ValueUtils.getValueAsInstant(value)); } + + if(type.equals(LocalTime.class)) + { + return (ValueUtils.getValueAsLocalTime(value)); + } } catch(Exception e) { diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/basic/BasicETLLoadFunction.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/basic/BasicETLLoadFunction.java index 997e377b..47f71df6 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/basic/BasicETLLoadFunction.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/basic/BasicETLLoadFunction.java @@ -44,6 +44,8 @@ public class BasicETLLoadFunction implements BackendStep { private static final Logger LOG = LogManager.getLogger(BasicETLLoadFunction.class); + private boolean returnStoredRecords = false; + /******************************************************************************* @@ -89,7 +91,11 @@ public class BasicETLLoadFunction implements BackendStep InsertAction insertAction = new InsertAction(); InsertOutput insertOutput = insertAction.execute(insertInput); - outputRecords.addAll(insertOutput.getRecords()); + + if(returnStoredRecords) + { + outputRecords.addAll(insertOutput.getRecords()); + } recordsInserted += insertOutput.getRecords().size(); } @@ -97,4 +103,15 @@ public class BasicETLLoadFunction implements BackendStep runBackendStepOutput.addValue(BasicETLProcess.FIELD_RECORD_COUNT, recordsInserted); } + + + /******************************************************************************* + ** Setter for returnStoredRecords + ** + *******************************************************************************/ + public void setReturnStoredRecords(boolean returnStoredRecords) + { + this.returnStoredRecords = returnStoredRecords; + } + } diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/ValueUtils.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/ValueUtils.java index d839a36b..a33abaa1 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/ValueUtils.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/ValueUtils.java @@ -22,10 +22,12 @@ package com.kingsrook.qqq.backend.core.utils; +import java.io.Serializable; import java.math.BigDecimal; import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.LocalTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; @@ -415,4 +417,45 @@ public class ValueUtils throw (new QValueException("Value [" + value + "] could not be converted to a Instant.", e)); } } + + + + /******************************************************************************* + ** + *******************************************************************************/ + public static Object getValueAsLocalTime(Serializable value) + { + try + { + if(value == null) + { + return (null); + } + else if(value instanceof LocalTime lt) + { + return (lt); + } + else if(value instanceof String s) + { + if(!StringUtils.hasContent(s)) + { + return (null); + } + + return LocalTime.parse(s); + } + else + { + throw (new QValueException("Unsupported class " + value.getClass().getName() + " for converting to LocalTime.")); + } + } + catch(QValueException qve) + { + throw (qve); + } + catch(Exception e) + { + throw (new QValueException("Value [" + value + "] could not be converted to a LocalTime.", e)); + } + } } diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/utils/ValueUtilsTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/utils/ValueUtilsTest.java index abb4afbc..0ef501a7 100644 --- a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/utils/ValueUtilsTest.java +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/utils/ValueUtilsTest.java @@ -27,14 +27,18 @@ import java.math.MathContext; import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.LocalTime; import java.time.Month; -import java.time.ZoneOffset; import java.util.Calendar; import java.util.GregorianCalendar; import com.kingsrook.qqq.backend.core.exceptions.QValueException; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; /******************************************************************************* @@ -226,4 +230,24 @@ class ValueUtilsTest } + /******************************************************************************* + ** + *******************************************************************************/ + @Test + void testGetValueAsLocalTime() throws QValueException + { + assertNull(ValueUtils.getValueAsInstant(null)); + assertNull(ValueUtils.getValueAsInstant("")); + assertNull(ValueUtils.getValueAsInstant(" ")); + assertEquals(LocalTime.of(10, 42), ValueUtils.getValueAsLocalTime(LocalTime.of(10, 42))); + assertEquals(LocalTime.of(10, 42, 59), ValueUtils.getValueAsLocalTime(LocalTime.of(10, 42, 59))); + assertEquals(LocalTime.of(10, 42), ValueUtils.getValueAsLocalTime("10:42")); + assertEquals(LocalTime.of(10, 42, 59), ValueUtils.getValueAsLocalTime("10:42:59")); + + assertThrows(QValueException.class, () -> ValueUtils.getValueAsInstant("a")); + assertThrows(QValueException.class, () -> ValueUtils.getValueAsInstant("a,b")); + assertThrows(QValueException.class, () -> ValueUtils.getValueAsInstant("1980/05/31")); + assertThat(assertThrows(QValueException.class, () -> ValueUtils.getValueAsInstant(new Object())).getMessage()).contains("Unsupported class"); + } + } \ No newline at end of file