mirror of
https://github.com/Kingsrook/qqq.git
synced 2025-07-18 05:01:07 +00:00
add query stats to count, aggregate actions; add system/env prop checks; ready for initial dev deployment
This commit is contained in:
@ -68,6 +68,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.joins.QJoinMetaData;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.security.QSecurityKeyType;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.security.RecordSecurityLock;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
|
||||
import com.kingsrook.qqq.backend.core.model.querystats.QueryStat;
|
||||
import com.kingsrook.qqq.backend.core.model.session.QSession;
|
||||
import com.kingsrook.qqq.backend.core.utils.CollectionUtils;
|
||||
import com.kingsrook.qqq.backend.core.utils.StringUtils;
|
||||
@ -86,6 +87,8 @@ public abstract class AbstractRDBMSAction implements QActionInterface
|
||||
{
|
||||
private static final QLogger LOG = QLogger.getLogger(AbstractRDBMSAction.class);
|
||||
|
||||
protected QueryStat queryStat;
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
@ -1037,4 +1040,47 @@ public abstract class AbstractRDBMSAction implements QActionInterface
|
||||
return (false);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
*******************************************************************************/
|
||||
protected void setSqlAndJoinsInQueryStat(CharSequence sql, JoinsContext joinsContext)
|
||||
{
|
||||
if(queryStat != null)
|
||||
{
|
||||
queryStat.setQueryText(sql.toString());
|
||||
|
||||
if(CollectionUtils.nullSafeHasContents(joinsContext.getQueryJoins()))
|
||||
{
|
||||
Set<String> joinTableNames = new HashSet<>();
|
||||
for(QueryJoin queryJoin : joinsContext.getQueryJoins())
|
||||
{
|
||||
joinTableNames.add(queryJoin.getJoinTable());
|
||||
}
|
||||
queryStat.setJoinTableNames(joinTableNames);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
** Getter for queryStat
|
||||
*******************************************************************************/
|
||||
public QueryStat getQueryStat()
|
||||
{
|
||||
return (this.queryStat);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
** Setter for queryStat
|
||||
*******************************************************************************/
|
||||
public void setQueryStat(QueryStat queryStat)
|
||||
{
|
||||
this.queryStat = queryStat;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -92,6 +92,8 @@ public class RDBMSAggregateAction extends AbstractRDBMSAction implements Aggrega
|
||||
|
||||
// todo sql customization - can edit sql and/or param list
|
||||
|
||||
setSqlAndJoinsInQueryStat(sql, joinsContext);
|
||||
|
||||
AggregateOutput rs = new AggregateOutput();
|
||||
List<AggregateResult> results = new ArrayList<>();
|
||||
rs.setResults(results);
|
||||
@ -104,6 +106,8 @@ public class RDBMSAggregateAction extends AbstractRDBMSAction implements Aggrega
|
||||
{
|
||||
while(resultSet.next())
|
||||
{
|
||||
setQueryStatFirstResultTime();
|
||||
|
||||
AggregateResult result = new AggregateResult();
|
||||
results.add(result);
|
||||
|
||||
|
@ -77,6 +77,8 @@ public class RDBMSCountAction extends AbstractRDBMSAction implements CountInterf
|
||||
sql += " WHERE " + makeWhereClause(countInput.getInstance(), countInput.getSession(), table, joinsContext, filter, params);
|
||||
// todo sql customization - can edit sql and/or param list
|
||||
|
||||
setSqlAndJoinsInQueryStat(sql, joinsContext);
|
||||
|
||||
CountOutput rs = new CountOutput();
|
||||
try(Connection connection = getConnection(countInput))
|
||||
{
|
||||
@ -86,6 +88,8 @@ public class RDBMSCountAction extends AbstractRDBMSAction implements CountInterf
|
||||
{
|
||||
if(resultSet.next())
|
||||
{
|
||||
setQueryStatFirstResultTime();
|
||||
|
||||
rs.setCount(resultSet.getInt("record_count"));
|
||||
|
||||
if(BooleanUtils.isTrue(countInput.getIncludeDistinctCount()))
|
||||
|
@ -30,11 +30,9 @@ import java.sql.ResultSetMetaData;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import com.kingsrook.qqq.backend.core.actions.interfaces.QueryInterface;
|
||||
import com.kingsrook.qqq.backend.core.exceptions.QException;
|
||||
@ -49,7 +47,6 @@ import com.kingsrook.qqq.backend.core.model.metadata.QInstance;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldType;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
|
||||
import com.kingsrook.qqq.backend.core.model.querystats.QueryStat;
|
||||
import com.kingsrook.qqq.backend.core.utils.CollectionUtils;
|
||||
import com.kingsrook.qqq.backend.core.utils.Pair;
|
||||
import com.kingsrook.qqq.backend.module.rdbms.jdbc.QueryManager;
|
||||
@ -63,8 +60,6 @@ public class RDBMSQueryAction extends AbstractRDBMSAction implements QueryInterf
|
||||
{
|
||||
private static final QLogger LOG = QLogger.getLogger(RDBMSQueryAction.class);
|
||||
|
||||
private QueryStat queryStat;
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
@ -105,6 +100,8 @@ public class RDBMSQueryAction extends AbstractRDBMSAction implements QueryInterf
|
||||
|
||||
// todo sql customization - can edit sql and/or param list
|
||||
|
||||
setSqlAndJoinsInQueryStat(sql, joinsContext);
|
||||
|
||||
Connection connection;
|
||||
boolean needToCloseConnection = false;
|
||||
if(queryInput.getTransaction() != null && queryInput.getTransaction() instanceof RDBMSTransaction rdbmsTransaction)
|
||||
@ -144,21 +141,6 @@ public class RDBMSQueryAction extends AbstractRDBMSAction implements QueryInterf
|
||||
//////////////////////////////////////////////
|
||||
QueryOutput queryOutput = new QueryOutput(queryInput);
|
||||
|
||||
if(queryStat != null)
|
||||
{
|
||||
queryStat.setQueryText(sql.toString());
|
||||
|
||||
if(CollectionUtils.nullSafeHasContents(joinsContext.getQueryJoins()))
|
||||
{
|
||||
Set<String> joinTableNames = new HashSet<>();
|
||||
for(QueryJoin queryJoin : joinsContext.getQueryJoins())
|
||||
{
|
||||
joinTableNames.add(queryJoin.getJoinTable());
|
||||
}
|
||||
setQueryStatJoinTables(joinTableNames);
|
||||
}
|
||||
}
|
||||
|
||||
PreparedStatement statement = createStatement(connection, sql.toString(), queryInput);
|
||||
QueryManager.executeStatement(statement, ((ResultSet resultSet) ->
|
||||
{
|
||||
@ -352,26 +334,4 @@ public class RDBMSQueryAction extends AbstractRDBMSAction implements QueryInterf
|
||||
return (statement);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
** Getter for queryStat
|
||||
*******************************************************************************/
|
||||
@Override
|
||||
public QueryStat getQueryStat()
|
||||
{
|
||||
return (this.queryStat);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
** Setter for queryStat
|
||||
*******************************************************************************/
|
||||
@Override
|
||||
public void setQueryStat(QueryStat queryStat)
|
||||
{
|
||||
this.queryStat = queryStat;
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user