mirror of
https://github.com/Kingsrook/qqq.git
synced 2025-07-18 05:01:07 +00:00
Update API query & get with MAY_USE_READ_ONLY query hint (adding that option to Get's)
This commit is contained in:
@ -25,10 +25,12 @@ package com.kingsrook.qqq.backend.core.model.actions.tables.get;
|
|||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.EnumSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import com.kingsrook.qqq.backend.core.actions.QBackendTransaction;
|
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.AbstractTableActionInput;
|
||||||
|
import com.kingsrook.qqq.backend.core.model.actions.tables.QueryHint;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.tables.QueryOrGetInputInterface;
|
import com.kingsrook.qqq.backend.core.model.actions.tables.QueryOrGetInputInterface;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.tables.query.QueryJoin;
|
import com.kingsrook.qqq.backend.core.model.actions.tables.query.QueryJoin;
|
||||||
|
|
||||||
@ -60,6 +62,8 @@ public class GetInput extends AbstractTableActionInput implements QueryOrGetInpu
|
|||||||
private boolean includeAssociations = false;
|
private boolean includeAssociations = false;
|
||||||
private Collection<String> associationNamesToInclude = null;
|
private Collection<String> associationNamesToInclude = null;
|
||||||
|
|
||||||
|
private EnumSet<QueryHint> queryHints = EnumSet.noneOf(QueryHint.class);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
@ -462,4 +466,79 @@ public class GetInput extends AbstractTableActionInput implements QueryOrGetInpu
|
|||||||
return (this);
|
return (this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Getter for queryHints
|
||||||
|
*******************************************************************************/
|
||||||
|
public EnumSet<QueryHint> getQueryHints()
|
||||||
|
{
|
||||||
|
return (this.queryHints);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Setter for queryHints
|
||||||
|
*******************************************************************************/
|
||||||
|
public void setQueryHints(EnumSet<QueryHint> queryHints)
|
||||||
|
{
|
||||||
|
this.queryHints = queryHints;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Fluent setter for queryHints
|
||||||
|
*******************************************************************************/
|
||||||
|
public GetInput withQueryHints(EnumSet<QueryHint> queryHints)
|
||||||
|
{
|
||||||
|
this.queryHints = queryHints;
|
||||||
|
return (this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Fluent setter for queryHints
|
||||||
|
*******************************************************************************/
|
||||||
|
public GetInput withQueryHint(QueryHint queryHint)
|
||||||
|
{
|
||||||
|
if(this.queryHints == null)
|
||||||
|
{
|
||||||
|
this.queryHints = EnumSet.noneOf(QueryHint.class);
|
||||||
|
}
|
||||||
|
this.queryHints.add(queryHint);
|
||||||
|
return (this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Fluent setter for queryHints
|
||||||
|
*******************************************************************************/
|
||||||
|
public GetInput withoutQueryHint(QueryHint queryHint)
|
||||||
|
{
|
||||||
|
if(this.queryHints != null)
|
||||||
|
{
|
||||||
|
this.queryHints.remove(queryHint);
|
||||||
|
}
|
||||||
|
return (this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** null-safely check if query hints map contains the specified hint
|
||||||
|
*******************************************************************************/
|
||||||
|
public boolean hasQueryHint(QueryHint queryHint)
|
||||||
|
{
|
||||||
|
if(this.queryHints == null)
|
||||||
|
{
|
||||||
|
return (false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (queryHints.contains(queryHint));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -54,6 +54,7 @@ import com.kingsrook.qqq.backend.core.model.actions.tables.aggregate.GroupBy;
|
|||||||
import com.kingsrook.qqq.backend.core.model.actions.tables.aggregate.QFilterOrderByAggregate;
|
import com.kingsrook.qqq.backend.core.model.actions.tables.aggregate.QFilterOrderByAggregate;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.tables.aggregate.QFilterOrderByGroupBy;
|
import com.kingsrook.qqq.backend.core.model.actions.tables.aggregate.QFilterOrderByGroupBy;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.tables.count.CountInput;
|
import com.kingsrook.qqq.backend.core.model.actions.tables.count.CountInput;
|
||||||
|
import com.kingsrook.qqq.backend.core.model.actions.tables.get.GetInput;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.tables.query.JoinsContext;
|
import com.kingsrook.qqq.backend.core.model.actions.tables.query.JoinsContext;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.tables.query.QFilterCriteria;
|
import com.kingsrook.qqq.backend.core.model.actions.tables.query.QFilterCriteria;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.tables.query.QFilterOrderBy;
|
import com.kingsrook.qqq.backend.core.model.actions.tables.query.QFilterOrderBy;
|
||||||
@ -156,6 +157,10 @@ public abstract class AbstractRDBMSAction
|
|||||||
{
|
{
|
||||||
useReadOnly = countInput.hasQueryHint(QueryHint.MAY_USE_READ_ONLY_BACKEND);
|
useReadOnly = countInput.hasQueryHint(QueryHint.MAY_USE_READ_ONLY_BACKEND);
|
||||||
}
|
}
|
||||||
|
else if(tableActionInput instanceof GetInput getInput)
|
||||||
|
{
|
||||||
|
useReadOnly = getInput.hasQueryHint(QueryHint.MAY_USE_READ_ONLY_BACKEND);
|
||||||
|
}
|
||||||
else if(tableActionInput instanceof AggregateInput aggregateInput)
|
else if(tableActionInput instanceof AggregateInput aggregateInput)
|
||||||
{
|
{
|
||||||
useReadOnly = aggregateInput.hasQueryHint(QueryHint.MAY_USE_READ_ONLY_BACKEND);
|
useReadOnly = aggregateInput.hasQueryHint(QueryHint.MAY_USE_READ_ONLY_BACKEND);
|
||||||
|
@ -76,6 +76,7 @@ import com.kingsrook.qqq.backend.core.model.actions.processes.ProcessState;
|
|||||||
import com.kingsrook.qqq.backend.core.model.actions.processes.RunProcessInput;
|
import com.kingsrook.qqq.backend.core.model.actions.processes.RunProcessInput;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.processes.RunProcessOutput;
|
import com.kingsrook.qqq.backend.core.model.actions.processes.RunProcessOutput;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource;
|
import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource;
|
||||||
|
import com.kingsrook.qqq.backend.core.model.actions.tables.QueryHint;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.tables.count.CountInput;
|
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.count.CountOutput;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.tables.delete.DeleteInput;
|
import com.kingsrook.qqq.backend.core.model.actions.tables.delete.DeleteInput;
|
||||||
@ -160,6 +161,7 @@ public class ApiImplementation
|
|||||||
queryInput.setTableName(tableName);
|
queryInput.setTableName(tableName);
|
||||||
queryInput.setIncludeAssociations(true);
|
queryInput.setIncludeAssociations(true);
|
||||||
queryInput.setShouldFetchHeavyFields(true);
|
queryInput.setShouldFetchHeavyFields(true);
|
||||||
|
queryInput.withQueryHint(QueryHint.MAY_USE_READ_ONLY_BACKEND);
|
||||||
|
|
||||||
PermissionsHelper.checkTablePermissionThrowing(queryInput, TablePermissionSubType.READ);
|
PermissionsHelper.checkTablePermissionThrowing(queryInput, TablePermissionSubType.READ);
|
||||||
|
|
||||||
@ -394,6 +396,7 @@ public class ApiImplementation
|
|||||||
CountInput countInput = new CountInput();
|
CountInput countInput = new CountInput();
|
||||||
countInput.setTableName(tableName);
|
countInput.setTableName(tableName);
|
||||||
countInput.setFilter(filter);
|
countInput.setFilter(filter);
|
||||||
|
countInput.withQueryHint(QueryHint.MAY_USE_READ_ONLY_BACKEND);
|
||||||
CountOutput countOutput = new CountAction().execute(countInput);
|
CountOutput countOutput = new CountAction().execute(countInput);
|
||||||
output.put("count", countOutput.getCount());
|
output.put("count", countOutput.getCount());
|
||||||
}
|
}
|
||||||
@ -595,6 +598,7 @@ public class ApiImplementation
|
|||||||
|
|
||||||
GetInput getInput = new GetInput();
|
GetInput getInput = new GetInput();
|
||||||
getInput.setTableName(tableName);
|
getInput.setTableName(tableName);
|
||||||
|
getInput.withQueryHint(QueryHint.MAY_USE_READ_ONLY_BACKEND);
|
||||||
|
|
||||||
PermissionsHelper.checkTablePermissionThrowing(getInput, TablePermissionSubType.READ);
|
PermissionsHelper.checkTablePermissionThrowing(getInput, TablePermissionSubType.READ);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user