package rocks.inspectit.shared.cs.indexing.query.factory.impl;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import org.springframework.stereotype.Component;
import rocks.inspectit.shared.all.communication.data.AggregatedSqlStatementData;
import rocks.inspectit.shared.all.communication.data.SqlStatementData;
import rocks.inspectit.shared.all.indexing.IIndexQuery;
import rocks.inspectit.shared.cs.indexing.query.factory.AbstractQueryFactory;
import rocks.inspectit.shared.cs.indexing.restriction.impl.IndexQueryRestrictionFactory;
/**
* Factory for all queries for the {@link SqlStatementData}.
*
* @author Ivan Senic
*
* @param <E>
*/
@Component
public class SqlStatementDataQueryFactory<E extends IIndexQuery> extends AbstractQueryFactory<E> {
/**
* Returns the query for aggregating the {@link SqlStatementData}. If the template holds the SQL
* query string, only objects with this query string will be returned.
*
* @param sqlStatementData
* The template containing the platform id.
* @param fromDate
* Date to include data from.
* @param toDate
* Date to include data to.
* @return Query object.
*/
public E getAggregatedSqlStatementsQuery(SqlStatementData sqlStatementData, Date fromDate, Date toDate) {
E query = getIndexQueryProvider().getIndexQuery();
query.setPlatformIdent(sqlStatementData.getPlatformIdent());
ArrayList<Class<?>> searchedClasses = new ArrayList<>();
searchedClasses.add(SqlStatementData.class);
searchedClasses.add(AggregatedSqlStatementData.class);
query.setObjectClasses(searchedClasses);
if (null != sqlStatementData.getSql()) {
query.addIndexingRestriction(IndexQueryRestrictionFactory.equal("sql", sqlStatementData.getSql()));
}
if (null != sqlStatementData.getDatabaseProductName()) {
query.addIndexingRestriction(IndexQueryRestrictionFactory.equal("databaseProductName", sqlStatementData.getDatabaseProductName()));
}
if (null != sqlStatementData.getDatabaseProductVersion()) {
query.addIndexingRestriction(IndexQueryRestrictionFactory.equal("databaseProductVersion", sqlStatementData.getDatabaseProductVersion()));
}
if (null != sqlStatementData.getDatabaseUrl()) {
query.addIndexingRestriction(IndexQueryRestrictionFactory.equal("databaseUrl", sqlStatementData.getDatabaseUrl()));
}
if (null != fromDate) {
query.setFromDate(new Timestamp(fromDate.getTime()));
}
if (null != toDate) {
query.setToDate(new Timestamp(toDate.getTime()));
}
return query;
}
}