Validated query builder

This commit is contained in:
Luca Frosini 2021-11-02 11:29:29 +01:00
parent 3657057e48
commit a113390933
2 changed files with 19 additions and 10 deletions

View File

@ -117,10 +117,11 @@ public class Query extends PostgreSQLQuery {
return date;
}
//TODO need to check duplicated keys and put all values in OR
protected void addFilters() throws SQLException {
if(filters!=null && filters.size()>0) {
stringBuffer.append("(");
if(filters.size()>1) {
stringBuffer.append("(");
}
boolean first = true;
for(String key : filters.keySet()) {
if(first) {
@ -130,13 +131,17 @@ public class Query extends PostgreSQLQuery {
}
addOrConditions(key, filters.get(key));
}
stringBuffer.append(")");
if(filters.size()>1) {
stringBuffer.append(")");
}
}
}
protected void addOrConditions(String key, Collection<String> values) throws SQLException {
if(values!=null && values.size()>0) {
stringBuffer.append("(");
if(values.size()>1) {
stringBuffer.append("(");
}
boolean first = true;
for(String value : values) {
if(first) {
@ -148,7 +153,9 @@ public class Query extends PostgreSQLQuery {
stringBuffer.append("=");
appendValue(value);
}
stringBuffer.append(")");
if(values.size()>1) {
stringBuffer.append(")");
}
}
}
@ -251,7 +258,7 @@ public class Query extends PostgreSQLQuery {
}
protected void addTemporalConstraintToQuery() throws SQLException {
stringBuffer.append(" WHERE ");
stringBuffer.append(" WHERE (");
String tableField = getTableField(AggregatedRecord.START_TIME);
stringBuffer.append(tableField);
stringBuffer.append(" > ");
@ -262,6 +269,7 @@ public class Query extends PostgreSQLQuery {
stringBuffer.append(tableField);
stringBuffer.append(" < ");
appendValue(temporalConstraint.getAlignedEndTime());
stringBuffer.append(")");
}
protected void addDateGroupBy(boolean addNested) {

View File

@ -11,7 +11,6 @@ import java.util.Set;
import org.gcube.accounting.analytics.Filter;
import org.gcube.accounting.analytics.TemporalConstraint;
import org.gcube.accounting.analytics.TemporalConstraint.AggregationMode;
import org.gcube.accounting.analytics.persistence.AccountingPersistenceBackendQuery;
import org.gcube.accounting.analytics.persistence.AccountingPersistenceQuery;
import org.gcube.accounting.datamodel.UsageRecord;
import org.gcube.accounting.datamodel.aggregation.AggregatedServiceUsageRecord;
@ -58,6 +57,8 @@ public class QueryTest extends ContextTest {
Set<Filter> filters = new HashSet<>();
Filter filter = new Filter(UsageRecord.CONSUMER_ID, getRandomUser());
filters.add(filter);
filter = new Filter(UsageRecord.CONSUMER_ID, getRandomUser());
filters.add(filter);
TemporalConstraint temporalConstraint = new TemporalConstraint(startTimeCalendar.getTimeInMillis(), entTimeCalendar.getTimeInMillis(), AggregationMode.MONTHLY);
Query query = new Query(AggregatedServiceUsageRecord.class);
@ -67,9 +68,9 @@ public class QueryTest extends ContextTest {
logger.debug(ret);
String currentScope = AccountingPersistenceBackendQuery.getScopeToQuery();
Set<String> contexts = new HashSet<>();
contexts.add(currentScope);
contexts.add(DEFAULT_TEST_SCOPE);
contexts.add(ALTERNATIVE_TEST_SCOPE);
query.setContexts(contexts);
ret = query.getTimeSeriesQuery();
logger.debug(ret);
@ -89,7 +90,7 @@ public class QueryTest extends ContextTest {
@Test
public void testGetRecordQuery() throws Exception {
Query query = new Query(AggregatedServiceUsageRecord.class);
query.setRecordId("fa573711-ceb6-44ba-9c83-bd47e0915b80");
query.setRecordId("7c3fcb31-6909-451d-bae0-633b3bec0c21");
String ret = query.getRecordQuery();
logger.debug(ret);
}