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 e91b1440..95b8cdbe 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
@@ -168,7 +168,12 @@ public class InsertAction extends AbstractQActionFunction.
+ */
+
+package com.kingsrook.qqq.backend.core.model.actions.tables;
+
+
+/*******************************************************************************
+ ** interface to define input sources - idea being, so QQQ can have its standard
+ ** ones (see QInputSource), but applications can define their own as well.
+ **
+ ** We might imagine things like a user's session dictating what InputSource
+ ** gets passed into all DML actions. Or perhaps API meta-data, or just a method
+ ** on QInstance in the future?
+ **
+ ** We might imagine, maybe, more methods growing in the future...
+ *******************************************************************************/
+public interface InputSource
+{
+
+ /*******************************************************************************
+ **
+ *******************************************************************************/
+ boolean shouldValidateRequiredFields();
+
+}
diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/QInputSource.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/QInputSource.java
new file mode 100644
index 00000000..854c18cc
--- /dev/null
+++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/QInputSource.java
@@ -0,0 +1,56 @@
+/*
+ * QQQ - Low-code Application Framework for Engineers.
+ * Copyright (C) 2021-2023. Kingsrook, LLC
+ * 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
+ * contact@kingsrook.com
+ * https://github.com/Kingsrook/
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package com.kingsrook.qqq.backend.core.model.actions.tables;
+
+
+/*******************************************************************************
+ ** QQQ standard input sources -- the system, or users.
+ *******************************************************************************/
+public enum QInputSource implements InputSource
+{
+ SYSTEM(true),
+ USER(true);
+
+
+ private final boolean shouldValidateRequiredFields;
+
+
+
+ /*******************************************************************************
+ **
+ *******************************************************************************/
+ QInputSource(boolean shouldValidateRequiredFields)
+ {
+ this.shouldValidateRequiredFields = shouldValidateRequiredFields;
+ }
+
+
+
+ /*******************************************************************************
+ **
+ *******************************************************************************/
+ @Override
+ public boolean shouldValidateRequiredFields()
+ {
+ return (this.shouldValidateRequiredFields);
+ }
+}
diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/delete/DeleteInput.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/delete/DeleteInput.java
index 7ffcb203..53e3af78 100644
--- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/delete/DeleteInput.java
+++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/delete/DeleteInput.java
@@ -26,6 +26,8 @@ import java.io.Serializable;
import java.util.List;
import com.kingsrook.qqq.backend.core.actions.QBackendTransaction;
import com.kingsrook.qqq.backend.core.model.actions.AbstractTableActionInput;
+import com.kingsrook.qqq.backend.core.model.actions.tables.InputSource;
+import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource;
import com.kingsrook.qqq.backend.core.model.actions.tables.query.QQueryFilter;
import com.kingsrook.qqq.backend.core.utils.collections.MutableList;
@@ -39,6 +41,7 @@ public class DeleteInput extends AbstractTableActionInput
private QBackendTransaction transaction;
private List primaryKeys;
private QQueryFilter queryFilter;
+ private InputSource inputSource = QInputSource.SYSTEM;
@@ -154,4 +157,35 @@ public class DeleteInput extends AbstractTableActionInput
return this;
}
+
+
+ /*******************************************************************************
+ ** Getter for inputSource
+ *******************************************************************************/
+ public InputSource getInputSource()
+ {
+ return (this.inputSource);
+ }
+
+
+
+ /*******************************************************************************
+ ** Setter for inputSource
+ *******************************************************************************/
+ public void setInputSource(InputSource inputSource)
+ {
+ this.inputSource = inputSource;
+ }
+
+
+
+ /*******************************************************************************
+ ** Fluent setter for inputSource
+ *******************************************************************************/
+ public DeleteInput withInputSource(InputSource inputSource)
+ {
+ this.inputSource = inputSource;
+ return (this);
+ }
+
}
diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/insert/InsertInput.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/insert/InsertInput.java
index fa716a79..9a0492a6 100644
--- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/insert/InsertInput.java
+++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/insert/InsertInput.java
@@ -25,6 +25,8 @@ package com.kingsrook.qqq.backend.core.model.actions.tables.insert;
import java.util.List;
import com.kingsrook.qqq.backend.core.actions.QBackendTransaction;
import com.kingsrook.qqq.backend.core.model.actions.AbstractTableActionInput;
+import com.kingsrook.qqq.backend.core.model.actions.tables.InputSource;
+import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource;
import com.kingsrook.qqq.backend.core.model.data.QRecord;
@@ -36,6 +38,7 @@ public class InsertInput extends AbstractTableActionInput
{
private QBackendTransaction transaction;
private List records;
+ private InputSource inputSource = QInputSource.SYSTEM;
private boolean skipUniqueKeyCheck = false;
@@ -182,4 +185,35 @@ public class InsertInput extends AbstractTableActionInput
return (this);
}
+
+
+ /*******************************************************************************
+ ** Getter for inputSource
+ *******************************************************************************/
+ public InputSource getInputSource()
+ {
+ return (this.inputSource);
+ }
+
+
+
+ /*******************************************************************************
+ ** Setter for inputSource
+ *******************************************************************************/
+ public void setInputSource(InputSource inputSource)
+ {
+ this.inputSource = inputSource;
+ }
+
+
+
+ /*******************************************************************************
+ ** Fluent setter for inputSource
+ *******************************************************************************/
+ public InsertInput withInputSource(InputSource inputSource)
+ {
+ this.inputSource = inputSource;
+ return (this);
+ }
+
}
diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/update/UpdateInput.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/update/UpdateInput.java
index 0554874b..2ae55f37 100644
--- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/update/UpdateInput.java
+++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/update/UpdateInput.java
@@ -25,6 +25,8 @@ package com.kingsrook.qqq.backend.core.model.actions.tables.update;
import java.util.List;
import com.kingsrook.qqq.backend.core.actions.QBackendTransaction;
import com.kingsrook.qqq.backend.core.model.actions.AbstractTableActionInput;
+import com.kingsrook.qqq.backend.core.model.actions.tables.InputSource;
+import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource;
import com.kingsrook.qqq.backend.core.model.data.QRecord;
@@ -36,6 +38,7 @@ public class UpdateInput extends AbstractTableActionInput
{
private QBackendTransaction transaction;
private List records;
+ private InputSource inputSource = QInputSource.SYSTEM;
////////////////////////////////////////////////////////////////////////////////////////////
// allow a caller to specify that they KNOW this optimization (e.g., in SQL) can be made. //
@@ -219,4 +222,35 @@ public class UpdateInput extends AbstractTableActionInput
return (this);
}
+
+
+ /*******************************************************************************
+ ** Getter for inputSource
+ *******************************************************************************/
+ public InputSource getInputSource()
+ {
+ return (this.inputSource);
+ }
+
+
+
+ /*******************************************************************************
+ ** Setter for inputSource
+ *******************************************************************************/
+ public void setInputSource(InputSource inputSource)
+ {
+ this.inputSource = inputSource;
+ }
+
+
+
+ /*******************************************************************************
+ ** Fluent setter for inputSource
+ *******************************************************************************/
+ public UpdateInput withInputSource(InputSource inputSource)
+ {
+ this.inputSource = inputSource;
+ return (this);
+ }
+
}
diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/delete/BulkDeleteLoadStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/delete/BulkDeleteLoadStep.java
index 18f7c5a4..0b50d953 100644
--- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/delete/BulkDeleteLoadStep.java
+++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/delete/BulkDeleteLoadStep.java
@@ -36,6 +36,8 @@ import com.kingsrook.qqq.backend.core.model.actions.processes.ProcessSummaryLine
import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepInput;
import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepOutput;
import com.kingsrook.qqq.backend.core.model.actions.processes.Status;
+import com.kingsrook.qqq.backend.core.model.actions.tables.InputSource;
+import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource;
import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput;
import com.kingsrook.qqq.backend.core.model.data.QRecord;
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
@@ -60,6 +62,17 @@ public class BulkDeleteLoadStep extends LoadViaDeleteStep implements ProcessSumm
+ /*******************************************************************************
+ **
+ *******************************************************************************/
+ @Override
+ protected InputSource getInputSource()
+ {
+ return (QInputSource.USER);
+ }
+
+
+
/*******************************************************************************
**
*******************************************************************************/
diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/delete/BulkDeleteTransformStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/delete/BulkDeleteTransformStep.java
index 6480774c..95df5260 100644
--- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/delete/BulkDeleteTransformStep.java
+++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/delete/BulkDeleteTransformStep.java
@@ -33,6 +33,7 @@ import com.kingsrook.qqq.backend.core.model.actions.processes.ProcessSummaryLine
import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepInput;
import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepOutput;
import com.kingsrook.qqq.backend.core.model.actions.processes.Status;
+import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource;
import com.kingsrook.qqq.backend.core.model.actions.tables.delete.DeleteInput;
import com.kingsrook.qqq.backend.core.model.data.QRecord;
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
@@ -103,6 +104,7 @@ public class BulkDeleteTransformStep extends AbstractTransformStep
///////////////////////////////////////////////////////////////////////
DeleteAction deleteAction = new DeleteAction();
DeleteInput deleteInput = new DeleteInput();
+ deleteInput.setInputSource(QInputSource.USER);
deleteInput.setTableName(runBackendStepInput.getTableName());
deleteInput.setPrimaryKeys(runBackendStepInput.getRecords().stream().map(r -> r.getValue(primaryKeyField)).toList());
List validationResultRecords = deleteAction.performValidations(deleteInput, Optional.of(runBackendStepInput.getRecords()), true);
diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/edit/BulkEditLoadStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/edit/BulkEditLoadStep.java
index 561dee43..c05c2b64 100644
--- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/edit/BulkEditLoadStep.java
+++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/edit/BulkEditLoadStep.java
@@ -31,6 +31,8 @@ import com.kingsrook.qqq.backend.core.model.actions.processes.ProcessSummaryLine
import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepInput;
import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepOutput;
import com.kingsrook.qqq.backend.core.model.actions.processes.Status;
+import com.kingsrook.qqq.backend.core.model.actions.tables.InputSource;
+import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource;
import com.kingsrook.qqq.backend.core.model.data.QRecord;
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
import com.kingsrook.qqq.backend.core.processes.implementations.etl.streamedwithfrontend.LoadViaUpdateStep;
@@ -56,6 +58,17 @@ public class BulkEditLoadStep extends LoadViaUpdateStep implements ProcessSummar
+ /*******************************************************************************
+ **
+ *******************************************************************************/
+ @Override
+ protected InputSource getInputSource()
+ {
+ return (QInputSource.USER);
+ }
+
+
+
/*******************************************************************************
**
*******************************************************************************/
diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/edit/BulkEditTransformStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/edit/BulkEditTransformStep.java
index 8fb095e3..077a9f29 100644
--- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/edit/BulkEditTransformStep.java
+++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/edit/BulkEditTransformStep.java
@@ -37,6 +37,7 @@ import com.kingsrook.qqq.backend.core.model.actions.processes.ProcessSummaryLine
import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepInput;
import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepOutput;
import com.kingsrook.qqq.backend.core.model.actions.processes.Status;
+import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource;
import com.kingsrook.qqq.backend.core.model.actions.tables.update.UpdateInput;
import com.kingsrook.qqq.backend.core.model.data.QRecord;
import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData;
@@ -167,6 +168,7 @@ public class BulkEditTransformStep extends AbstractTransformStep
// run the validation - critically - in preview mode (boolean param) //
///////////////////////////////////////////////////////////////////////
UpdateInput updateInput = new UpdateInput();
+ updateInput.setInputSource(QInputSource.USER);
updateInput.setTableName(table.getName());
updateInput.setRecords(recordsForValidation);
new UpdateAction().performValidations(updateInput, Optional.of(runBackendStepInput.getRecords()), true);
diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/insert/BulkInsertLoadStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/insert/BulkInsertLoadStep.java
new file mode 100644
index 00000000..c8b73ec2
--- /dev/null
+++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/insert/BulkInsertLoadStep.java
@@ -0,0 +1,45 @@
+/*
+ * QQQ - Low-code Application Framework for Engineers.
+ * Copyright (C) 2021-2023. Kingsrook, LLC
+ * 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
+ * contact@kingsrook.com
+ * https://github.com/Kingsrook/
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package com.kingsrook.qqq.backend.core.processes.implementations.bulk.insert;
+
+
+import com.kingsrook.qqq.backend.core.model.actions.tables.InputSource;
+import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource;
+import com.kingsrook.qqq.backend.core.processes.implementations.etl.streamedwithfrontend.LoadViaInsertStep;
+
+
+/*******************************************************************************
+ **
+ *******************************************************************************/
+public class BulkInsertLoadStep extends LoadViaInsertStep
+{
+
+ /*******************************************************************************
+ **
+ *******************************************************************************/
+ @Override
+ protected InputSource getInputSource()
+ {
+ return (QInputSource.USER);
+ }
+
+}
diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/insert/BulkInsertTransformStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/insert/BulkInsertTransformStep.java
index b775098d..36b29c04 100644
--- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/insert/BulkInsertTransformStep.java
+++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/insert/BulkInsertTransformStep.java
@@ -38,6 +38,7 @@ import com.kingsrook.qqq.backend.core.model.actions.processes.ProcessSummaryLine
import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepInput;
import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepOutput;
import com.kingsrook.qqq.backend.core.model.actions.processes.Status;
+import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource;
import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput;
import com.kingsrook.qqq.backend.core.model.data.QRecord;
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
@@ -182,6 +183,7 @@ public class BulkInsertTransformStep extends AbstractTransformStep
/////////////////////////////////////////////////////////////////////////////////
InsertAction insertAction = new InsertAction();
InsertInput insertInput = new InsertInput();
+ insertInput.setInputSource(QInputSource.USER);
insertInput.setTableName(runBackendStepInput.getTableName());
insertInput.setRecords(recordsWithoutUkErrors);
insertInput.setSkipUniqueKeyCheck(true);
diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaDeleteStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaDeleteStep.java
index fa0ebb9a..66589432 100644
--- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaDeleteStep.java
+++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaDeleteStep.java
@@ -30,6 +30,8 @@ import com.kingsrook.qqq.backend.core.actions.tables.InsertAction;
import com.kingsrook.qqq.backend.core.exceptions.QException;
import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepInput;
import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepOutput;
+import com.kingsrook.qqq.backend.core.model.actions.tables.InputSource;
+import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource;
import com.kingsrook.qqq.backend.core.model.actions.tables.delete.DeleteInput;
import com.kingsrook.qqq.backend.core.model.actions.tables.delete.DeleteOutput;
import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput;
@@ -46,6 +48,16 @@ public class LoadViaDeleteStep extends AbstractLoadStep
+ /*******************************************************************************
+ **
+ *******************************************************************************/
+ protected InputSource getInputSource()
+ {
+ return (QInputSource.SYSTEM);
+ }
+
+
+
/*******************************************************************************
** Execute the backend step - using the request as input, and the result as output.
**
@@ -56,6 +68,7 @@ public class LoadViaDeleteStep extends AbstractLoadStep
QTableMetaData table = runBackendStepInput.getTable();
DeleteInput deleteInput = new DeleteInput();
+ deleteInput.setInputSource(getInputSource());
deleteInput.setTableName(runBackendStepInput.getValueString(FIELD_DESTINATION_TABLE));
deleteInput.setPrimaryKeys(runBackendStepInput.getRecords().stream().map(r -> r.getValue(table.getPrimaryKeyField())).collect(Collectors.toList()));
deleteInput.setAsyncJobCallback(runBackendStepInput.getAsyncJobCallback());
diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaInsertOrUpdateStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaInsertOrUpdateStep.java
index 45d09c96..0263fe5a 100644
--- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaInsertOrUpdateStep.java
+++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaInsertOrUpdateStep.java
@@ -31,6 +31,8 @@ import com.kingsrook.qqq.backend.core.actions.tables.UpdateAction;
import com.kingsrook.qqq.backend.core.exceptions.QException;
import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepInput;
import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepOutput;
+import com.kingsrook.qqq.backend.core.model.actions.tables.InputSource;
+import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource;
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.update.UpdateInput;
@@ -56,6 +58,16 @@ public class LoadViaInsertOrUpdateStep extends AbstractLoadStep
+ /*******************************************************************************
+ **
+ *******************************************************************************/
+ protected InputSource getInputSource()
+ {
+ return (QInputSource.SYSTEM);
+ }
+
+
+
/*******************************************************************************
** Execute the backend step - using the request as input, and the result as output.
**
@@ -79,6 +91,7 @@ public class LoadViaInsertOrUpdateStep extends AbstractLoadStep
if(CollectionUtils.nullSafeHasContents(recordsToInsert))
{
InsertInput insertInput = new InsertInput();
+ insertInput.setInputSource(getInputSource());
insertInput.setTableName(tableMetaData.getName());
insertInput.setRecords(recordsToInsert);
getTransaction().ifPresent(insertInput::setTransaction);
@@ -96,6 +109,7 @@ public class LoadViaInsertOrUpdateStep extends AbstractLoadStep
if(CollectionUtils.nullSafeHasContents(recordsToUpdate))
{
UpdateInput updateInput = new UpdateInput();
+ updateInput.setInputSource(getInputSource());
updateInput.setTableName(tableMetaData.getName());
updateInput.setRecords(recordsToUpdate);
getTransaction().ifPresent(updateInput::setTransaction);
diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaInsertStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaInsertStep.java
index 6024b21a..a5f9718b 100644
--- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaInsertStep.java
+++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaInsertStep.java
@@ -28,6 +28,8 @@ import com.kingsrook.qqq.backend.core.actions.tables.InsertAction;
import com.kingsrook.qqq.backend.core.exceptions.QException;
import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepInput;
import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepOutput;
+import com.kingsrook.qqq.backend.core.model.actions.tables.InputSource;
+import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource;
import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput;
import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertOutput;
@@ -43,6 +45,16 @@ public class LoadViaInsertStep extends AbstractLoadStep
+ /*******************************************************************************
+ **
+ *******************************************************************************/
+ protected InputSource getInputSource()
+ {
+ return (QInputSource.SYSTEM);
+ }
+
+
+
/*******************************************************************************
** Execute the backend step - using the request as input, and the result as output.
**
@@ -51,6 +63,7 @@ public class LoadViaInsertStep extends AbstractLoadStep
public void run(RunBackendStepInput runBackendStepInput, RunBackendStepOutput runBackendStepOutput) throws QException
{
InsertInput insertInput = new InsertInput();
+ insertInput.setInputSource(getInputSource());
insertInput.setTableName(runBackendStepInput.getValueString(FIELD_DESTINATION_TABLE));
insertInput.setRecords(runBackendStepInput.getRecords());
getTransaction().ifPresent(insertInput::setTransaction);
diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaUpdateStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaUpdateStep.java
index 058c5ec2..2f1755ec 100644
--- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaUpdateStep.java
+++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaUpdateStep.java
@@ -29,6 +29,8 @@ import com.kingsrook.qqq.backend.core.actions.tables.UpdateAction;
import com.kingsrook.qqq.backend.core.exceptions.QException;
import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepInput;
import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepOutput;
+import com.kingsrook.qqq.backend.core.model.actions.tables.InputSource;
+import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource;
import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput;
import com.kingsrook.qqq.backend.core.model.actions.tables.update.UpdateInput;
import com.kingsrook.qqq.backend.core.model.actions.tables.update.UpdateOutput;
@@ -44,6 +46,16 @@ public class LoadViaUpdateStep extends AbstractLoadStep
+ /*******************************************************************************
+ **
+ *******************************************************************************/
+ protected InputSource getInputSource()
+ {
+ return (QInputSource.SYSTEM);
+ }
+
+
+
/*******************************************************************************
** Execute the backend step - using the request as input, and the result as output.
**
@@ -52,6 +64,7 @@ public class LoadViaUpdateStep extends AbstractLoadStep
public void run(RunBackendStepInput runBackendStepInput, RunBackendStepOutput runBackendStepOutput) throws QException
{
UpdateInput updateInput = new UpdateInput();
+ updateInput.setInputSource(getInputSource());
updateInput.setTableName(runBackendStepInput.getValueString(FIELD_DESTINATION_TABLE));
updateInput.setRecords(runBackendStepInput.getRecords());
getTransaction().ifPresent(updateInput::setTransaction);
diff --git a/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/actions/ApiImplementation.java b/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/actions/ApiImplementation.java
index a9224655..058036d6 100644
--- a/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/actions/ApiImplementation.java
+++ b/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/actions/ApiImplementation.java
@@ -49,6 +49,7 @@ import com.kingsrook.qqq.backend.core.exceptions.QException;
import com.kingsrook.qqq.backend.core.exceptions.QNotFoundException;
import com.kingsrook.qqq.backend.core.logging.LogPair;
import com.kingsrook.qqq.backend.core.logging.QLogger;
+import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource;
import com.kingsrook.qqq.backend.core.model.actions.tables.count.CountInput;
import com.kingsrook.qqq.backend.core.model.actions.tables.count.CountOutput;
import com.kingsrook.qqq.backend.core.model.actions.tables.delete.DeleteInput;
@@ -336,6 +337,7 @@ public class ApiImplementation
String tableName = table.getName();
InsertInput insertInput = new InsertInput();
+ insertInput.setInputSource(QInputSource.USER);
insertInput.setTableName(tableName);
@@ -409,6 +411,7 @@ public class ApiImplementation
String tableName = table.getName();
InsertInput insertInput = new InsertInput();
+ insertInput.setInputSource(QInputSource.USER);
insertInput.setTableName(tableName);
PermissionsHelper.checkTablePermissionThrowing(insertInput, TablePermissionSubType.INSERT);
@@ -549,6 +552,7 @@ public class ApiImplementation
String tableName = table.getName();
UpdateInput updateInput = new UpdateInput();
+ updateInput.setInputSource(QInputSource.USER);
updateInput.setTableName(tableName);
PermissionsHelper.checkTablePermissionThrowing(updateInput, TablePermissionSubType.EDIT);
@@ -620,6 +624,7 @@ public class ApiImplementation
String tableName = table.getName();
UpdateInput updateInput = new UpdateInput();
+ updateInput.setInputSource(QInputSource.USER);
updateInput.setTableName(tableName);
PermissionsHelper.checkTablePermissionThrowing(updateInput, TablePermissionSubType.EDIT);
@@ -744,6 +749,7 @@ public class ApiImplementation
String tableName = table.getName();
DeleteInput deleteInput = new DeleteInput();
+ deleteInput.setInputSource(QInputSource.USER);
deleteInput.setTableName(tableName);
deleteInput.setPrimaryKeys(List.of(primaryKey));
@@ -784,6 +790,7 @@ public class ApiImplementation
String tableName = table.getName();
DeleteInput deleteInput = new DeleteInput();
+ deleteInput.setInputSource(QInputSource.USER);
deleteInput.setTableName(tableName);
PermissionsHelper.checkTablePermissionThrowing(deleteInput, TablePermissionSubType.DELETE);
diff --git a/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementation.java b/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementation.java
index 302aa3ca..d0a5aab9 100644
--- a/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementation.java
+++ b/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementation.java
@@ -75,6 +75,7 @@ import com.kingsrook.qqq.backend.core.model.actions.metadata.TableMetaDataOutput
import com.kingsrook.qqq.backend.core.model.actions.reporting.ExportInput;
import com.kingsrook.qqq.backend.core.model.actions.reporting.ExportOutput;
import com.kingsrook.qqq.backend.core.model.actions.reporting.ReportFormat;
+import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource;
import com.kingsrook.qqq.backend.core.model.actions.tables.count.CountInput;
import com.kingsrook.qqq.backend.core.model.actions.tables.count.CountOutput;
import com.kingsrook.qqq.backend.core.model.actions.tables.delete.DeleteInput;
@@ -573,6 +574,7 @@ public class QJavalinImplementation
primaryKeys.add(primaryKey);
DeleteInput deleteInput = new DeleteInput();
+ deleteInput.setInputSource(QInputSource.USER);
setupSession(context, deleteInput);
QJavalinAccessLogger.logStart("delete", logPair("table", table), logPair("primaryKey", primaryKey));
@@ -608,6 +610,7 @@ public class QJavalinImplementation
try
{
UpdateInput updateInput = new UpdateInput();
+ updateInput.setInputSource(QInputSource.USER);
setupSession(context, updateInput);
updateInput.setTableName(tableName);
@@ -680,6 +683,7 @@ public class QJavalinImplementation
try
{
InsertInput insertInput = new InsertInput();
+ insertInput.setInputSource(QInputSource.USER);
setupSession(context, insertInput);
insertInput.setTableName(tableName);
QJavalinAccessLogger.logStart("insert", logPair("table", tableName));