From c043013d64723b66c51f42cf6ac272a511ca3637 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Tue, 23 Mar 2021 10:46:42 +0100 Subject: [PATCH] Implementing queries --- .../persistence/postgresql/Query.java | 57 +++++++++++++++++-- 1 file changed, 53 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/gcube/accounting/analytics/persistence/postgresql/Query.java b/src/main/java/org/gcube/accounting/analytics/persistence/postgresql/Query.java index 4213750..3899524 100644 --- a/src/main/java/org/gcube/accounting/analytics/persistence/postgresql/Query.java +++ b/src/main/java/org/gcube/accounting/analytics/persistence/postgresql/Query.java @@ -13,6 +13,7 @@ import org.gcube.accounting.analytics.TemporalConstraint.AggregationMode; import org.gcube.accounting.analytics.TemporalConstraint.CalendarEnum; import org.gcube.accounting.datamodel.UsageRecord; import org.gcube.accounting.datamodel.aggregation.AggregatedServiceUsageRecord; +import org.gcube.accounting.datamodel.aggregation.AggregatedStorageStatusRecord; import org.gcube.accounting.utility.postgresql.PostgreSQLQuery; import org.gcube.accounting.utility.postgresql.RecordToDBFields; import org.gcube.accounting.utility.postgresql.RecordToDBMapping; @@ -37,6 +38,8 @@ public class Query extends PostgreSQLQuery { private String recordId; + protected Set providersId; + public Query(Class> clz) throws Exception { this.clz = clz; this.recordToDBFields = RecordToDBMapping.getRecordToDBFields(clz); @@ -71,16 +74,26 @@ public class Query extends PostgreSQLQuery { } public void addContext(String context) { - if(contexts == null) { - contexts = new HashSet<>(); + if(this.contexts == null) { + this.contexts = new HashSet<>(); } - contexts.add(context); + this.contexts.add(context); } public void setRecordId(String recordId) { this.recordId = recordId; } + public void addProvidersId(String providerId) { + if(providersId == null) { + providersId = new HashSet<>(); + } + providersId.add(providerId); + } + + public void setProvidersId(List providersId) { + this.providersId = new HashSet<>(providersId); + } public RecordToDBFields getRecordToDBMapper() { return recordToDBFields; @@ -137,6 +150,25 @@ public class Query extends PostgreSQLQuery { } } + protected void addProvidersIdFilter() { + if(providersId!=null && providersId.size()>0) { + // The first filter if the time_bucket + stringBuffer.append(" AND ("); + boolean first = true; + for(String providerId : providersId) { + if(first) { + first = false; + }else { + stringBuffer.append(" OR "); + } + appendTableField(AggregatedStorageStatusRecord.PROVIDER_ID); + stringBuffer.append("="); + appendValue(providerId); + } + stringBuffer.append(")"); + } + } + protected void addEmittedFields() throws Exception { Set aggregatedField = clz.newInstance().getAggregatedFields(); for(String fieldName : aggregatedField) { @@ -284,7 +316,24 @@ public class Query extends PostgreSQLQuery { return stringBuffer.toString(); } - + public String getSpaceTimeSeries() { + newQuery(); + + addRequestedDate(); + + stringBuffer.append(" FROM "); + stringBuffer.append(recordToDBFields.getTableName()); + + addTemporalConstraintToQuery(); + + addFilters(); + addProvidersIdFilter(); + + addDateGropuBy(); + addDateOrderBy(); + + return stringBuffer.toString(); + } public String getNextPossibleValueQuery() throws Exception { newQuery();