mirror of
https://github.com/Kingsrook/qqq.git
synced 2025-07-18 13:10:44 +00:00
Updated to propagate transactions
This commit is contained in:
@ -151,12 +151,14 @@ public class DeleteAction
|
|||||||
QTableMetaData associatedTable = QContext.getQInstance().getTable(association.getAssociatedTableName());
|
QTableMetaData associatedTable = QContext.getQInstance().getTable(association.getAssociatedTableName());
|
||||||
|
|
||||||
QueryInput queryInput = new QueryInput();
|
QueryInput queryInput = new QueryInput();
|
||||||
|
queryInput.setTransaction(deleteInput.getTransaction());
|
||||||
queryInput.setTableName(association.getAssociatedTableName());
|
queryInput.setTableName(association.getAssociatedTableName());
|
||||||
queryInput.setFilter(filter);
|
queryInput.setFilter(filter);
|
||||||
QueryOutput queryOutput = new QueryAction().execute(queryInput);
|
QueryOutput queryOutput = new QueryAction().execute(queryInput);
|
||||||
List<Serializable> associatedKeys = queryOutput.getRecords().stream().map(r -> r.getValue(associatedTable.getPrimaryKeyField())).toList();
|
List<Serializable> associatedKeys = queryOutput.getRecords().stream().map(r -> r.getValue(associatedTable.getPrimaryKeyField())).toList();
|
||||||
|
|
||||||
DeleteInput nextLevelDeleteInput = new DeleteInput();
|
DeleteInput nextLevelDeleteInput = new DeleteInput();
|
||||||
|
nextLevelDeleteInput.setTransaction(deleteInput.getTransaction());
|
||||||
nextLevelDeleteInput.setTableName(association.getAssociatedTableName());
|
nextLevelDeleteInput.setTableName(association.getAssociatedTableName());
|
||||||
nextLevelDeleteInput.setPrimaryKeys(associatedKeys);
|
nextLevelDeleteInput.setPrimaryKeys(associatedKeys);
|
||||||
DeleteOutput nextLevelDeleteOutput = new DeleteAction().execute(nextLevelDeleteInput);
|
DeleteOutput nextLevelDeleteOutput = new DeleteAction().execute(nextLevelDeleteInput);
|
||||||
@ -187,6 +189,7 @@ public class DeleteAction
|
|||||||
// always fetch the records - we'll use them anyway for checking not-exist below //
|
// always fetch the records - we'll use them anyway for checking not-exist below //
|
||||||
////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////
|
||||||
QueryInput queryInput = new QueryInput();
|
QueryInput queryInput = new QueryInput();
|
||||||
|
queryInput.setTransaction(deleteInput.getTransaction());
|
||||||
queryInput.setTableName(deleteInput.getTableName());
|
queryInput.setTableName(deleteInput.getTableName());
|
||||||
queryInput.setFilter(new QQueryFilter(new QFilterCriteria(deleteInput.getTable().getPrimaryKeyField(), QCriteriaOperator.IN, primaryKeyList)));
|
queryInput.setFilter(new QQueryFilter(new QFilterCriteria(deleteInput.getTable().getPrimaryKeyField(), QCriteriaOperator.IN, primaryKeyList)));
|
||||||
QueryOutput queryOutput = new QueryAction().execute(queryInput);
|
QueryOutput queryOutput = new QueryAction().execute(queryInput);
|
||||||
@ -242,6 +245,7 @@ public class DeleteAction
|
|||||||
else if(!primaryKeysToLookup.isEmpty())
|
else if(!primaryKeysToLookup.isEmpty())
|
||||||
{
|
{
|
||||||
QueryInput queryInput = new QueryInput();
|
QueryInput queryInput = new QueryInput();
|
||||||
|
queryInput.setTransaction(deleteInput.getTransaction());
|
||||||
queryInput.setTableName(table.getName());
|
queryInput.setTableName(table.getName());
|
||||||
queryInput.setFilter(new QQueryFilter(new QFilterCriteria(table.getPrimaryKeyField(), QCriteriaOperator.IN, primaryKeysToLookup)));
|
queryInput.setFilter(new QQueryFilter(new QFilterCriteria(table.getPrimaryKeyField(), QCriteriaOperator.IN, primaryKeysToLookup)));
|
||||||
QueryOutput queryOutput = new QueryAction().execute(queryInput);
|
QueryOutput queryOutput = new QueryAction().execute(queryInput);
|
||||||
@ -292,6 +296,7 @@ public class DeleteAction
|
|||||||
QBackendModuleInterface qModule = qBackendModuleDispatcher.getQBackendModule(deleteInput.getBackend());
|
QBackendModuleInterface qModule = qBackendModuleDispatcher.getQBackendModule(deleteInput.getBackend());
|
||||||
|
|
||||||
QueryInput queryInput = new QueryInput();
|
QueryInput queryInput = new QueryInput();
|
||||||
|
queryInput.setTransaction(deleteInput.getTransaction());
|
||||||
queryInput.setTableName(deleteInput.getTableName());
|
queryInput.setTableName(deleteInput.getTableName());
|
||||||
queryInput.setFilter(deleteInput.getQueryFilter());
|
queryInput.setFilter(deleteInput.getQueryFilter());
|
||||||
QueryOutput queryOutput = qModule.getQueryInterface().execute(queryInput);
|
QueryOutput queryOutput = qModule.getQueryInterface().execute(queryInput);
|
||||||
|
@ -104,7 +104,7 @@ public class InsertAction extends AbstractQActionFunction<InsertInput, InsertOut
|
|||||||
LOG.warn("Errors in insertAction", logPair("tableName", table.getName()), logPair("errorCount", errors.size()), errors.size() < 10 ? logPair("errors", errors) : logPair("first10Errors", errors.subList(0, 10)));
|
LOG.warn("Errors in insertAction", logPair("tableName", table.getName()), logPair("errorCount", errors.size()), errors.size() < 10 ? logPair("errors", errors) : logPair("first10Errors", errors.subList(0, 10)));
|
||||||
}
|
}
|
||||||
|
|
||||||
manageAssociations(table, insertOutput.getRecords());
|
manageAssociations(table, insertOutput.getRecords(), insertInput.getTransaction());
|
||||||
|
|
||||||
// todo post-customization - can do whatever w/ the result if you want
|
// todo post-customization - can do whatever w/ the result if you want
|
||||||
|
|
||||||
@ -151,7 +151,7 @@ public class InsertAction extends AbstractQActionFunction<InsertInput, InsertOut
|
|||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
**
|
**
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
private void manageAssociations(QTableMetaData table, List<QRecord> insertedRecords) throws QException
|
private void manageAssociations(QTableMetaData table, List<QRecord> insertedRecords, QBackendTransaction transaction) throws QException
|
||||||
{
|
{
|
||||||
for(Association association : CollectionUtils.nonNullList(table.getAssociations()))
|
for(Association association : CollectionUtils.nonNullList(table.getAssociations()))
|
||||||
{
|
{
|
||||||
@ -176,6 +176,7 @@ public class InsertAction extends AbstractQActionFunction<InsertInput, InsertOut
|
|||||||
}
|
}
|
||||||
|
|
||||||
InsertInput nextLevelInsertInput = new InsertInput();
|
InsertInput nextLevelInsertInput = new InsertInput();
|
||||||
|
nextLevelInsertInput.setTransaction(transaction);
|
||||||
nextLevelInsertInput.setTableName(association.getAssociatedTableName());
|
nextLevelInsertInput.setTableName(association.getAssociatedTableName());
|
||||||
nextLevelInsertInput.setRecords(nextLevelInserts);
|
nextLevelInsertInput.setRecords(nextLevelInserts);
|
||||||
InsertOutput nextLevelInsertOutput = new InsertAction().execute(nextLevelInsertInput);
|
InsertOutput nextLevelInsertOutput = new InsertAction().execute(nextLevelInsertInput);
|
||||||
|
@ -176,6 +176,7 @@ public class UpdateAction
|
|||||||
else if(!primaryKeysToLookup.isEmpty())
|
else if(!primaryKeysToLookup.isEmpty())
|
||||||
{
|
{
|
||||||
QueryInput queryInput = new QueryInput();
|
QueryInput queryInput = new QueryInput();
|
||||||
|
queryInput.setTransaction(updateInput.getTransaction());
|
||||||
queryInput.setTableName(table.getName());
|
queryInput.setTableName(table.getName());
|
||||||
queryInput.setFilter(new QQueryFilter(new QFilterCriteria(table.getPrimaryKeyField(), QCriteriaOperator.IN, primaryKeysToLookup)));
|
queryInput.setFilter(new QQueryFilter(new QFilterCriteria(table.getPrimaryKeyField(), QCriteriaOperator.IN, primaryKeysToLookup)));
|
||||||
QueryOutput queryOutput = new QueryAction().execute(queryInput);
|
QueryOutput queryOutput = new QueryAction().execute(queryInput);
|
||||||
@ -315,6 +316,7 @@ public class UpdateAction
|
|||||||
if(lookForDeletes)
|
if(lookForDeletes)
|
||||||
{
|
{
|
||||||
QueryInput queryInput = new QueryInput();
|
QueryInput queryInput = new QueryInput();
|
||||||
|
queryInput.setTransaction(updateInput.getTransaction());
|
||||||
queryInput.setTableName(associatedTable.getName());
|
queryInput.setTableName(associatedTable.getName());
|
||||||
queryInput.setFilter(findDeletesFilter);
|
queryInput.setFilter(findDeletesFilter);
|
||||||
QueryOutput queryOutput = new QueryAction().execute(queryInput);
|
QueryOutput queryOutput = new QueryAction().execute(queryInput);
|
||||||
@ -322,6 +324,7 @@ public class UpdateAction
|
|||||||
{
|
{
|
||||||
LOG.debug("Deleting associatedRecords", logPair("associatedTable", associatedTable.getName()), logPair("noOfRecords", queryOutput.getRecords().size()));
|
LOG.debug("Deleting associatedRecords", logPair("associatedTable", associatedTable.getName()), logPair("noOfRecords", queryOutput.getRecords().size()));
|
||||||
DeleteInput deleteInput = new DeleteInput();
|
DeleteInput deleteInput = new DeleteInput();
|
||||||
|
deleteInput.setTransaction(updateInput.getTransaction());
|
||||||
deleteInput.setTableName(association.getAssociatedTableName());
|
deleteInput.setTableName(association.getAssociatedTableName());
|
||||||
deleteInput.setPrimaryKeys(queryOutput.getRecords().stream().map(r -> r.getValue(associatedTable.getPrimaryKeyField())).collect(Collectors.toList()));
|
deleteInput.setPrimaryKeys(queryOutput.getRecords().stream().map(r -> r.getValue(associatedTable.getPrimaryKeyField())).collect(Collectors.toList()));
|
||||||
DeleteOutput deleteOutput = new DeleteAction().execute(deleteInput);
|
DeleteOutput deleteOutput = new DeleteAction().execute(deleteInput);
|
||||||
@ -332,6 +335,7 @@ public class UpdateAction
|
|||||||
{
|
{
|
||||||
LOG.debug("Updating associatedRecords", logPair("associatedTable", associatedTable.getName()), logPair("noOfRecords", nextLevelUpdates.size()));
|
LOG.debug("Updating associatedRecords", logPair("associatedTable", associatedTable.getName()), logPair("noOfRecords", nextLevelUpdates.size()));
|
||||||
UpdateInput nextLevelUpdateInput = new UpdateInput();
|
UpdateInput nextLevelUpdateInput = new UpdateInput();
|
||||||
|
nextLevelUpdateInput.setTransaction(updateInput.getTransaction());
|
||||||
nextLevelUpdateInput.setTableName(association.getAssociatedTableName());
|
nextLevelUpdateInput.setTableName(association.getAssociatedTableName());
|
||||||
nextLevelUpdateInput.setRecords(nextLevelUpdates);
|
nextLevelUpdateInput.setRecords(nextLevelUpdates);
|
||||||
UpdateOutput nextLevelUpdateOutput = new UpdateAction().execute(nextLevelUpdateInput);
|
UpdateOutput nextLevelUpdateOutput = new UpdateAction().execute(nextLevelUpdateInput);
|
||||||
@ -341,6 +345,7 @@ public class UpdateAction
|
|||||||
{
|
{
|
||||||
LOG.debug("Inserting associatedRecords", logPair("associatedTable", associatedTable.getName()), logPair("noOfRecords", nextLevelUpdates.size()));
|
LOG.debug("Inserting associatedRecords", logPair("associatedTable", associatedTable.getName()), logPair("noOfRecords", nextLevelUpdates.size()));
|
||||||
InsertInput nextLevelInsertInput = new InsertInput();
|
InsertInput nextLevelInsertInput = new InsertInput();
|
||||||
|
nextLevelInsertInput.setTransaction(updateInput.getTransaction());
|
||||||
nextLevelInsertInput.setTableName(association.getAssociatedTableName());
|
nextLevelInsertInput.setTableName(association.getAssociatedTableName());
|
||||||
nextLevelInsertInput.setRecords(nextLevelInserts);
|
nextLevelInsertInput.setRecords(nextLevelInserts);
|
||||||
InsertOutput nextLevelInsertOutput = new InsertAction().execute(nextLevelInsertInput);
|
InsertOutput nextLevelInsertOutput = new InsertAction().execute(nextLevelInsertInput);
|
||||||
@ -371,6 +376,7 @@ public class UpdateAction
|
|||||||
List<Serializable> pkeysBeingUpdated = CollectionUtils.nonNullList(updateInput.getRecords()).stream().map(r -> r.getValue(primaryKeyField)).toList();
|
List<Serializable> pkeysBeingUpdated = CollectionUtils.nonNullList(updateInput.getRecords()).stream().map(r -> r.getValue(primaryKeyField)).toList();
|
||||||
|
|
||||||
QueryInput queryInput = new QueryInput();
|
QueryInput queryInput = new QueryInput();
|
||||||
|
queryInput.setTransaction(updateInput.getTransaction());
|
||||||
queryInput.setTableName(updateInput.getTableName());
|
queryInput.setTableName(updateInput.getTableName());
|
||||||
queryInput.setFilter(new QQueryFilter(new QFilterCriteria(primaryKeyField, QCriteriaOperator.IN, pkeysBeingUpdated)));
|
queryInput.setFilter(new QQueryFilter(new QFilterCriteria(primaryKeyField, QCriteriaOperator.IN, pkeysBeingUpdated)));
|
||||||
// todo - need a limit? what if too many??
|
// todo - need a limit? what if too many??
|
||||||
|
Reference in New Issue
Block a user