From d28426562a10bb672cf262f7120eb18d6d932f94 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Mon, 16 Oct 2023 08:41:57 -0500 Subject: [PATCH] Update to actually use defaultValues when inserting records - nulls become the default. --- .../core/actions/tables/InsertAction.java | 28 +++++++++++++++++++ .../core/actions/tables/InsertActionTest.java | 26 +++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/tables/InsertAction.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/tables/InsertAction.java index 28b886a2..a537c883 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/tables/InsertAction.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/tables/InsertAction.java @@ -205,6 +205,8 @@ public class InsertAction extends AbstractQActionFunction records) + { + //////////////////////////////////////////////////////////////////////////////////////////////// + // for all fields in the table - if any have a default value, then look at all input records, // + // and if they have null value, then apply the default // + //////////////////////////////////////////////////////////////////////////////////////////////// + for(QFieldMetaData field : table.getFields().values()) + { + if(field.getDefaultValue() != null) + { + for(QRecord record : records) + { + if(record.getValue(field.getName()) == null) + { + record.setValue(field.getName(), field.getDefaultValue()); + } + } + } + } + } + + + /******************************************************************************* ** *******************************************************************************/ diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/actions/tables/InsertActionTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/actions/tables/InsertActionTest.java index 2fa44957..8ac80a30 100644 --- a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/actions/tables/InsertActionTest.java +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/actions/tables/InsertActionTest.java @@ -31,6 +31,8 @@ import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.model.actions.tables.InputSource; import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput; import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertOutput; +import com.kingsrook.qqq.backend.core.model.actions.tables.query.QQueryFilter; +import com.kingsrook.qqq.backend.core.model.actions.tables.query.QueryInput; import com.kingsrook.qqq.backend.core.model.data.QRecord; import com.kingsrook.qqq.backend.core.model.metadata.QInstance; import com.kingsrook.qqq.backend.core.model.metadata.security.RecordSecurityLock; @@ -751,4 +753,28 @@ class InsertActionTest extends BaseTest } + + + /******************************************************************************* + ** + *******************************************************************************/ + @Test + void testDefaultValues() throws QException + { + QContext.getQInstance().getTable(TestUtils.TABLE_NAME_PERSON_MEMORY) + .getField("noOfShoes").withDefaultValue(2); + + InsertInput insertInput = new InsertInput(); + insertInput.setTableName(TestUtils.TABLE_NAME_PERSON_MEMORY); + insertInput.setRecords(List.of( + new QRecord().withValue("firstName", "Darin").withValue("lastName", "Kelkhoff").withValue("noOfShoes", 4), + new QRecord().withValue("firstName", "Tim").withValue("lastName", "Chamberlain") + )); + new InsertAction().execute(insertInput); + + List records = new QueryAction().execute(new QueryInput(TestUtils.TABLE_NAME_PERSON_MEMORY).withFilter(new QQueryFilter())).getRecords(); + assertEquals(4, records.get(0).getValueInteger("noOfShoes")); + assertEquals(2, records.get(1).getValueInteger("noOfShoes")); + } + }