From 1b01f9a9f1bf5946ec336fe96588d68040ada5cd Mon Sep 17 00:00:00 2001 From: Simon Eismann <eismannsimon@googlemail.com> Date: Wed, 7 Sep 2016 01:18:13 +0200 Subject: [PATCH] added defaults to ListMetricsQuery --- .../engine/interpreter/DefaultProvider.java | 39 ++++++++++--------- .../ModelStructureQueryInterpreter.java | 7 +++- .../PerformanceMetricsQueryInterpreter.java | 2 +- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/core/tools.descartes.dql.core.engine/src/tools/descartes/dql/core/engine/interpreter/DefaultProvider.java b/core/tools.descartes.dql.core.engine/src/tools/descartes/dql/core/engine/interpreter/DefaultProvider.java index 5371e7a4..dc440462 100644 --- a/core/tools.descartes.dql.core.engine/src/tools/descartes/dql/core/engine/interpreter/DefaultProvider.java +++ b/core/tools.descartes.dql.core.engine/src/tools/descartes/dql/core/engine/interpreter/DefaultProvider.java @@ -1,7 +1,5 @@ package tools.descartes.dql.core.engine.interpreter; -import org.eclipse.emf.ecore.util.EcoreUtil; - import tools.descartes.dql.core.engine.query.QueryExecutionEngine; import tools.descartes.dql.core.engine.query.QueryExecutionEngineImpl; import tools.descartes.dql.lang.descartesQL.DescartesQL; @@ -19,13 +17,23 @@ import tools.descartes.dql.models.mapping.mapping.EntityMapping; public class DefaultProvider { - private SelectQuery query; private DescartesQLFactory dqlFactory = DescartesQLFactory.eINSTANCE; private EntityMapping statTypes; private EntityMapping entityTypes; - - public DefaultProvider(SelectQuery query) { - this.query = query; + private UsingClause usingClause; + private ForClause forClause; + + /* + * Since SelectQuery and ListQuery don't have a common ancestor, we need to + * use a little workaround + */ + public DefaultProvider(SelectQuery selectQuery, ListQuery listQuery) { + if (selectQuery != null) { + this.usingClause = selectQuery.getUsingClause(); + this.forClause = selectQuery.getForClause(); + } else { + this.usingClause = listQuery.getUsingClause(); + } } public String getDefaultStatType(String entityRef, String metricRef2) { @@ -42,17 +50,15 @@ public class DefaultProvider { private EntityMapping getEntityTypes() { if (entityTypes == null) - initializeEntityTypes(query); + initializeEntityTypes(); return entityTypes; } - private void initializeEntityTypes(SelectQuery selectQuery) { - UsingClause uc = EcoreUtil.copy(selectQuery.getUsingClause()); - + private void initializeEntityTypes() { DescartesQL entityQuery = dqlFactory.createDescartesQL(); ListQuery listQuery = dqlFactory.createListQuery(); entityQuery.setQuery(listQuery); - listQuery.setUsingClause(uc); + listQuery.setUsingClause(usingClause); ListEntitiesQuery listMetricsQuery = dqlFactory.createListEntitiesQuery(); listQuery.setQueryType(listMetricsQuery); listMetricsQuery.setMode("LIST ENTITIES"); @@ -63,22 +69,19 @@ public class DefaultProvider { private EntityMapping getStatTypes() { if (statTypes == null) - initializeStatTypes(query); + initializeStatTypes(); return statTypes; } - private void initializeStatTypes(SelectQuery selectQuery) { - UsingClause uc = EcoreUtil.copy(selectQuery.getUsingClause()); - ForClause fc = selectQuery.getForClause(); - + private void initializeStatTypes() { DescartesQL metricsQuery = dqlFactory.createDescartesQL(); ListQuery listQuery = dqlFactory.createListQuery(); metricsQuery.setQuery(listQuery); - listQuery.setUsingClause(uc); + listQuery.setUsingClause(usingClause); ListMetricsQuery listMetricsQuery = dqlFactory.createListMetricsQuery(); listQuery.setQueryType(listMetricsQuery); listMetricsQuery.setMode("LIST METRICS"); - listMetricsQuery.setEntityReferenceClause(fc.getEntityReferenceClause()); + listMetricsQuery.setEntityReferenceClause(forClause.getEntityReferenceClause()); QueryExecutionEngine qee = new QueryExecutionEngineImpl(); this.statTypes = qee.execute(metricsQuery).get(0); diff --git a/core/tools.descartes.dql.core.engine/src/tools/descartes/dql/core/engine/interpreter/ModelStructureQueryInterpreter.java b/core/tools.descartes.dql.core.engine/src/tools/descartes/dql/core/engine/interpreter/ModelStructureQueryInterpreter.java index 23a81dfc..17854024 100644 --- a/core/tools.descartes.dql.core.engine/src/tools/descartes/dql/core/engine/interpreter/ModelStructureQueryInterpreter.java +++ b/core/tools.descartes.dql.core.engine/src/tools/descartes/dql/core/engine/interpreter/ModelStructureQueryInterpreter.java @@ -147,6 +147,7 @@ public class ModelStructureQueryInterpreter private boolean interpretListMetricsQuery(final ListQuery query) { // TODO: Implement // FilterClause filterClause = ((ListQuery) query).getFilterClause(); + DefaultProvider defaultProvider = new DefaultProvider(null, query); final ListQuery listQuery = query; final ListMetricsQuery listMetricsQuery = (ListMetricsQuery) query.getQueryType(); @@ -173,9 +174,11 @@ public class ModelStructureQueryInterpreter final EList<EntityReference> refClause = entityReferenceClause.getEntityReferences(); for (final EntityReference ref : refClause) { Entity entity = domainFactory.createEntity(); - entity.setEntityType(ref.getType()); + if (ref.getType() != null) + entity.setEntityType(ref.getType()); + else + entity.setEntityType(defaultProvider.lookUpEntityType(ref)); entity.setIdentifier(ref.getIdentifier()); - if (ref.getAlias() != null) { entity.setAlias(ref.getAlias().getAlias()); } diff --git a/core/tools.descartes.dql.core.engine/src/tools/descartes/dql/core/engine/interpreter/PerformanceMetricsQueryInterpreter.java b/core/tools.descartes.dql.core.engine/src/tools/descartes/dql/core/engine/interpreter/PerformanceMetricsQueryInterpreter.java index c7039d34..db9a413b 100644 --- a/core/tools.descartes.dql.core.engine/src/tools/descartes/dql/core/engine/interpreter/PerformanceMetricsQueryInterpreter.java +++ b/core/tools.descartes.dql.core.engine/src/tools/descartes/dql/core/engine/interpreter/PerformanceMetricsQueryInterpreter.java @@ -106,7 +106,7 @@ public class PerformanceMetricsQueryInterpreter extends if (getQuery() instanceof SelectQuery) { selectQuery = (SelectQuery) getQuery(); - this.defaultProvider = new DefaultProvider(selectQuery); + this.defaultProvider = new DefaultProvider(selectQuery, null); final UsingClause usingClause = selectQuery.getUsingClause(); final ModelReferenceClause modelReference = usingClause.getModelReference(); final ModelFamily family = modelReference.getFamily(); -- GitLab