You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2018/02/26 16:36:18 UTC
[1/2] qpid-broker-j git commit: QPID-8104: [Broker-J] [Query] Support
the use of aliases in order by clauses
Repository: qpid-broker-j
Updated Branches:
refs/heads/7.0.x 8c23f302d -> 7c69d1704
QPID-8104: [Broker-J] [Query] Support the use of aliases in order by clauses
(cherry picked from commit 9704e609db36102d40d074a866799d0fe3930ffa)
Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/40f1b09a
Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/40f1b09a
Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/40f1b09a
Branch: refs/heads/7.0.x
Commit: 40f1b09a81e6b5f8deaf58e36773ec4c4c5d2d56
Parents: 8c23f30
Author: Keith Wall <kw...@apache.org>
Authored: Wed Feb 21 22:19:56 2018 +0000
Committer: Alex Rudyy <or...@apache.org>
Committed: Mon Feb 26 16:27:59 2018 +0000
----------------------------------------------------------------------
.../qpid/server/filter/NamedExpression.java | 26 ++++++
.../qpid/server/filter/OrderByExpression.java | 10 +++
.../grammar/ConfiguredObjectFilterParser.jj | 1 +
.../ConfiguredObjectExpressionFactory.java | 1 +
.../query/ConfiguredObjectFilterParser.java | 1 +
.../servlet/query/ConfiguredObjectQuery.java | 41 ++++++++--
.../plugin/servlet/query/NamedExpression.java | 28 -------
.../query/ConfiguredObjectQueryTest.java | 85 +++++++++++++++-----
8 files changed, 136 insertions(+), 57 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/40f1b09a/broker-core/src/main/java/org/apache/qpid/server/filter/NamedExpression.java
----------------------------------------------------------------------
diff --git a/broker-core/src/main/java/org/apache/qpid/server/filter/NamedExpression.java b/broker-core/src/main/java/org/apache/qpid/server/filter/NamedExpression.java
new file mode 100644
index 0000000..9970f89
--- /dev/null
+++ b/broker-core/src/main/java/org/apache/qpid/server/filter/NamedExpression.java
@@ -0,0 +1,26 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.filter;
+
+public interface NamedExpression<E> extends Expression<E>
+{
+ String getName();
+}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/40f1b09a/broker-core/src/main/java/org/apache/qpid/server/filter/OrderByExpression.java
----------------------------------------------------------------------
diff --git a/broker-core/src/main/java/org/apache/qpid/server/filter/OrderByExpression.java b/broker-core/src/main/java/org/apache/qpid/server/filter/OrderByExpression.java
index 87d45d1..20120dc 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/filter/OrderByExpression.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/filter/OrderByExpression.java
@@ -58,4 +58,14 @@ public class OrderByExpression implements Expression
{
return ((Number)((ConstantExpression)_expression).getValue()).intValue();
}
+
+ public boolean isNamed()
+ {
+ return (_expression instanceof NamedExpression);
+ }
+
+ public String getName()
+ {
+ return ((NamedExpression) _expression).getName();
+ }
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/40f1b09a/broker-plugins/management-http/src/main/grammar/ConfiguredObjectFilterParser.jj
----------------------------------------------------------------------
diff --git a/broker-plugins/management-http/src/main/grammar/ConfiguredObjectFilterParser.jj b/broker-plugins/management-http/src/main/grammar/ConfiguredObjectFilterParser.jj
index be1aafb..d8e7536 100644
--- a/broker-plugins/management-http/src/main/grammar/ConfiguredObjectFilterParser.jj
+++ b/broker-plugins/management-http/src/main/grammar/ConfiguredObjectFilterParser.jj
@@ -77,6 +77,7 @@ import org.apache.qpid.filter.Expression;
import org.apache.qpid.filter.OrderByExpression;
import org.apache.qpid.filter.LogicExpression;
import org.apache.qpid.filter.UnaryExpression;
+import org.apache.qpid.filter.NamedExpression;
import org.apache.qpid.server.model.ConfiguredObject;
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/40f1b09a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectExpressionFactory.java
----------------------------------------------------------------------
diff --git a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectExpressionFactory.java b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectExpressionFactory.java
index 0c31a11..85e3a34 100644
--- a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectExpressionFactory.java
+++ b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectExpressionFactory.java
@@ -37,6 +37,7 @@ import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.Duration;
import org.apache.qpid.server.filter.Expression;
+import org.apache.qpid.server.filter.NamedExpression;
import org.apache.qpid.server.model.ConfiguredObject;
public class ConfiguredObjectExpressionFactory
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/40f1b09a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectFilterParser.java
----------------------------------------------------------------------
diff --git a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectFilterParser.java b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectFilterParser.java
index 1de4930..3e4e57e 100644
--- a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectFilterParser.java
+++ b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectFilterParser.java
@@ -33,6 +33,7 @@ import org.apache.qpid.server.filter.BooleanExpression;
import org.apache.qpid.server.filter.ComparisonExpression;
import org.apache.qpid.server.filter.ConstantExpression;
import org.apache.qpid.server.filter.Expression;
+import org.apache.qpid.server.filter.NamedExpression;
import org.apache.qpid.server.filter.OrderByExpression;
import org.apache.qpid.server.filter.LogicExpression;
import org.apache.qpid.server.filter.UnaryExpression;
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/40f1b09a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQuery.java
----------------------------------------------------------------------
diff --git a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQuery.java b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQuery.java
index 7fb7fac..1b22da0 100644
--- a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQuery.java
+++ b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQuery.java
@@ -54,6 +54,8 @@ public final class ConfiguredObjectQuery
{
List<String> getHeaders();
List<Expression> getValueExpressions();
+ boolean hasHeader(String name);
+ Expression getValueExpressionForHeader(String name);
}
public ConfiguredObjectQuery(List<ConfiguredObject<?>> objects, String selectClause, String whereClause)
@@ -84,7 +86,7 @@ public final class ConfiguredObjectQuery
List<ConfiguredObject<?>> filteredObjects = whereClause == null ? objects : filterObjects(objects, whereClause);
List<ConfiguredObject<?>> orderedObjects = orderByClause == null ? filteredObjects : orderObjects(filteredObjects,
orderByClause,
- headersAndValueExpressions.getValueExpressions());
+ headersAndValueExpressions);
List<ConfiguredObject<?>> limitedOrderedObjects = applyLimitAndOffset(orderedObjects, limit, offset);
_headers = headersAndValueExpressions.getHeaders();
@@ -161,13 +163,31 @@ public final class ConfiguredObjectQuery
@Override
public List<String> getHeaders()
{
- return headers;
+ return Collections.unmodifiableList(headers);
}
@Override
public List<Expression> getValueExpressions()
{
- return valueExpressions;
+ return Collections.unmodifiableList(valueExpressions);
+ }
+
+ @Override
+ public boolean hasHeader(final String headerName)
+ {
+ return headers.contains(headerName);
+ }
+
+ @Override
+ public Expression getValueExpressionForHeader(final String headerName)
+ {
+ final int i = headers.indexOf(headerName);
+ if (i < 0)
+ {
+ throw new IllegalStateException(String.format("No expression found for header '%s'", headerName));
+ }
+
+ return valueExpressions.get(i);
}
};
}
@@ -246,8 +266,9 @@ public final class ConfiguredObjectQuery
private final List<OrderByExpression> _orderByExpressions;
public OrderByComparator(final List<OrderByExpression> orderByExpressions,
- final List<Expression> valueExpressions)
+ final HeadersAndValueExpressions headersAndValue)
{
+ final List<Expression> valueExpressions = headersAndValue.getValueExpressions();
_orderByExpressions = new ArrayList<>(orderByExpressions);
for (ListIterator<OrderByExpression> iterator = _orderByExpressions.listIterator(); iterator.hasNext(); )
{
@@ -266,6 +287,12 @@ public final class ConfiguredObjectQuery
iterator.set(orderByExpression);
}
}
+ else if (orderByExpression.isNamed() && headersAndValue.hasHeader(orderByExpression.getName()))
+ {
+ Expression expression = headersAndValue.getValueExpressionForHeader(orderByExpression.getName());
+ orderByExpression = new OrderByExpression(expression, orderByExpression.getOrder());
+ iterator.set(orderByExpression);
+ }
}
}
@@ -313,13 +340,13 @@ public final class ConfiguredObjectQuery
}
private List<ConfiguredObject<?>> orderObjects(final List<ConfiguredObject<?>> unorderedResults,
- String orderByClause,
- final List<Expression> valueExpressions)
+ final String orderByClause,
+ final HeadersAndValueExpressions headersAndValue)
{
List<OrderByExpression> orderByExpressions = parseOrderByClause(orderByClause);
List<ConfiguredObject<?>> orderedObjects = new ArrayList<>(unorderedResults.size());
orderedObjects.addAll(unorderedResults);
- Comparator<Object> comparator = new OrderByComparator(orderByExpressions, valueExpressions);
+ Comparator<Object> comparator = new OrderByComparator(orderByExpressions, headersAndValue);
Collections.sort(orderedObjects, comparator);
return orderedObjects;
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/40f1b09a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/NamedExpression.java
----------------------------------------------------------------------
diff --git a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/NamedExpression.java b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/NamedExpression.java
deleted file mode 100644
index 00b42d5..0000000
--- a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/NamedExpression.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.server.management.plugin.servlet.query;
-
-import org.apache.qpid.server.filter.Expression;
-
-public interface NamedExpression<E> extends Expression<E>
-{
- String getName();
-}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/40f1b09a/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQueryTest.java
----------------------------------------------------------------------
diff --git a/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQueryTest.java b/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQueryTest.java
index 61053bc..b903a41 100644
--- a/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQueryTest.java
+++ b/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQueryTest.java
@@ -61,7 +61,7 @@ public class ConfiguredObjectQueryTest extends QpidTestCase
private final List<ConfiguredObject<?>> _objects = new ArrayList<>();
private ConfiguredObjectQuery _query;
- public void testNoClauses_SingleResult() throws Exception
+ public void testNoClauses_SingleResult()
{
final UUID objectUuid = UUID.randomUUID();
final String objectName = "obj1";
@@ -86,7 +86,7 @@ public class ConfiguredObjectQueryTest extends QpidTestCase
assertEquals("Unexpected row", Lists.newArrayList(objectUuid, objectName), row);
}
- public void testArithmeticStatementInOrderBy() throws Exception
+ public void testArithmeticStatementInOrderBy()
{
final List<OrderByExpression> orderByExpressions;
String orderByClause = "a + b";
@@ -104,15 +104,14 @@ public class ConfiguredObjectQueryTest extends QpidTestCase
}
- public void testInvalidStatementInOrderBy() throws Exception
+ public void testInvalidStatementInOrderBy()
{
- final List<OrderByExpression> orderByExpressions;
String orderByClause = "a + b foo";
ConfiguredObjectFilterParser parser = new ConfiguredObjectFilterParser();
parser.setConfiguredObjectExpressionFactory(new ConfiguredObjectExpressionFactory());
try
{
- orderByExpressions = parser.parseOrderBy(orderByClause);
+ parser.parseOrderBy(orderByClause);
fail("Invalid expression was parsed without exception");
}
catch (ParseException | TokenMgrError e)
@@ -121,7 +120,7 @@ public class ConfiguredObjectQueryTest extends QpidTestCase
}
}
- public void testNoClauses_TwoResult() throws Exception
+ public void testNoClauses_TwoResult()
{
final UUID object1Uuid = UUID.randomUUID();
final String object1Name = "obj1";
@@ -158,7 +157,7 @@ public class ConfiguredObjectQueryTest extends QpidTestCase
assertEquals("Unexpected row", Lists.newArrayList(object2Uuid, object2Name), row2);
}
- public void testSelectClause() throws Exception
+ public void testSelectClause()
{
final UUID objectUuid = UUID.randomUUID();
@@ -185,7 +184,7 @@ public class ConfiguredObjectQueryTest extends QpidTestCase
assertEquals("Unexpected row", Lists.newArrayList(objectUuid, 1234), row);
}
- public void testSelectClause_NonExistingColumn() throws Exception
+ public void testSelectClause_NonExistingColumn()
{
ConfiguredObject obj = createCO(new HashMap<String, Object>()
{{
@@ -193,14 +192,14 @@ public class ConfiguredObjectQueryTest extends QpidTestCase
}});
_objects.add(obj);
- _query = new ConfiguredObjectQuery(_objects, String.format("foo"), null);
+ _query = new ConfiguredObjectQuery(_objects, "foo", null);
List<List<Object>> results = _query.getResults();
assertEquals("Unexpected number of results", 1, results.size());
assertEquals("Unexpected headers", Collections.singletonList("foo"), _query.getHeaders());
assertEquals("Unexpected row", Collections.singletonList(null), results.get(0));
}
- public void testSelectClause_ColumnAliases() throws Exception
+ public void testSelectClause_ColumnAliases()
{
final UUID objectUuid = UUID.randomUUID();
@@ -228,7 +227,7 @@ public class ConfiguredObjectQueryTest extends QpidTestCase
assertEquals("Unexpected row", Lists.newArrayList(objectUuid, "myObj1234"), row);
}
- public void testQuery_StringEquality() throws Exception
+ public void testQuery_StringEquality()
{
final UUID objectUuid = UUID.randomUUID();
final String objectName = "obj2";
@@ -261,7 +260,7 @@ public class ConfiguredObjectQueryTest extends QpidTestCase
assertEquals("Unexpected row", objectUuid, row.get(0));
}
- public void testQuery_DateInequality() throws Exception
+ public void testQuery_DateInequality()
{
final long now = System.currentTimeMillis();
final UUID objectUuid = UUID.randomUUID();
@@ -296,7 +295,7 @@ public class ConfiguredObjectQueryTest extends QpidTestCase
assertEquals("Unexpected row", objectUuid, row.get(0));
}
- public void testQuery_DateEquality() throws Exception
+ public void testQuery_DateEquality()
{
final long now = System.currentTimeMillis();
final Calendar calendar = Calendar.getInstance();
@@ -333,7 +332,7 @@ public class ConfiguredObjectQueryTest extends QpidTestCase
assertEquals("Unexpected row", objectUuid, row.get(0));
}
- public void testQuery_DateExpressions() throws Exception
+ public void testQuery_DateExpressions()
{
final UUID objectUuid = UUID.randomUUID();
@@ -360,7 +359,7 @@ public class ConfiguredObjectQueryTest extends QpidTestCase
assertEquals("Unexpected row", objectUuid, row.get(0));
}
- public void testDateToString() throws Exception
+ public void testDateToString()
{
final UUID objectUuid = UUID.randomUUID();
@@ -384,7 +383,7 @@ public class ConfiguredObjectQueryTest extends QpidTestCase
assertEquals("Unexpected row", Lists.newArrayList(objectUuid, "1970-01-01T00:00:00Z"), row);
}
- public void testDateToFormattedString() throws Exception
+ public void testDateToFormattedString()
{
final UUID objectUuid = UUID.randomUUID();
@@ -411,7 +410,7 @@ public class ConfiguredObjectQueryTest extends QpidTestCase
assertEquals("Unexpected row", Lists.newArrayList(objectUuid, "1970-01-01 UTC"), row);
}
- public void testQuery_EnumEquality() throws Exception
+ public void testQuery_EnumEquality()
{
final UUID objectUuid = UUID.randomUUID();
@@ -460,7 +459,7 @@ public class ConfiguredObjectQueryTest extends QpidTestCase
}
- public void testQuery_EnumEquality_InExpresssions() throws Exception
+ public void testQuery_EnumEquality_InExpresssions()
{
final UUID objectUuid = UUID.randomUUID();
@@ -497,7 +496,7 @@ public class ConfiguredObjectQueryTest extends QpidTestCase
assertEquals("Unexpected number of results - attribute within the set", 1, results.size());
}
- public void testFunctionActualParameterMismatch() throws Exception
+ public void testFunctionActualParameterMismatch()
{
try
{
@@ -512,7 +511,7 @@ public class ConfiguredObjectQueryTest extends QpidTestCase
}
}
- public void testSingleOrderByClause() throws Exception
+ public void testSingleOrderByClause()
{
final int NUMBER_OF_OBJECTS = 3;
@@ -548,7 +547,49 @@ public class ConfiguredObjectQueryTest extends QpidTestCase
assertQueryResults(new Object[][]{{null}, {0}, {1}, {2}}, results);
}
- public void testTwoOrderByClauses() throws Exception
+ public void testAliasInOrderByClause()
+ {
+ _objects.add(createCO(new HashMap<String, Object>()
+ {{
+ put("foo", 2);
+ }}));
+
+ _objects.add(createCO(new HashMap<String, Object>()
+ {{
+ put("foo", 1);
+ }}));
+
+ _objects.add(createCO(new HashMap<String, Object>()
+ {{
+ put("foo", 4);
+ }}));
+
+ _query = new ConfiguredObjectQuery(_objects, "foo AS bar", null, "bar ASC");
+ assertQueryResults(new Object[][]{{1}, {2}, {4}}, _query.getResults());
+ }
+
+ public void testDelimitedAliasInOrderByClause()
+ {
+ _objects.add(createCO(new HashMap<String, Object>()
+ {{
+ put("foo", 2);
+ }}));
+
+ _objects.add(createCO(new HashMap<String, Object>()
+ {{
+ put("foo", 1);
+ }}));
+
+ _objects.add(createCO(new HashMap<String, Object>()
+ {{
+ put("foo", 4);
+ }}));
+
+ _query = new ConfiguredObjectQuery(_objects, "foo AS \"yogi bear\"", null, "\"yogi bear\" DESC");
+ assertQueryResults(new Object[][]{{4}, {2}, {1}}, _query.getResults());
+ }
+
+ public void testTwoOrderByClauses()
{
ConfiguredObject object;
@@ -634,7 +675,7 @@ public class ConfiguredObjectQueryTest extends QpidTestCase
}
- public void testLimitWithoutOffset() throws Exception
+ public void testLimitWithoutOffset()
{
int numberOfTestObjects = 3;
for(int i=0;i<numberOfTestObjects;i++)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[2/2] qpid-broker-j git commit: QPID-8104: [Broker-J] [Query]
Generalise the implementation so that aliases may appear within expressions
within the order-by clause
Posted by or...@apache.org.
QPID-8104: [Broker-J] [Query] Generalise the implementation so that aliases may appear within expressions within the order-by clause
(cherry picked from commit 38819bcac6dc5481357d2c05aaf281e7c83532fe)
Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/7c69d170
Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/7c69d170
Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/7c69d170
Branch: refs/heads/7.0.x
Commit: 7c69d1704b26064da9831a1c076fa0d3d43e6db8
Parents: 40f1b09
Author: Keith Wall <kw...@apache.org>
Authored: Fri Feb 23 09:21:04 2018 +0000
Committer: Alex Rudyy <or...@apache.org>
Committed: Mon Feb 26 16:28:13 2018 +0000
----------------------------------------------------------------------
.../qpid/server/filter/OrderByExpression.java | 10 ------
.../servlet/query/ConfiguredObjectQuery.java | 33 +++++++++++++-------
.../query/ConfiguredObjectQueryTest.java | 18 +++++++++++
3 files changed, 39 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/7c69d170/broker-core/src/main/java/org/apache/qpid/server/filter/OrderByExpression.java
----------------------------------------------------------------------
diff --git a/broker-core/src/main/java/org/apache/qpid/server/filter/OrderByExpression.java b/broker-core/src/main/java/org/apache/qpid/server/filter/OrderByExpression.java
index 20120dc..87d45d1 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/filter/OrderByExpression.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/filter/OrderByExpression.java
@@ -58,14 +58,4 @@ public class OrderByExpression implements Expression
{
return ((Number)((ConstantExpression)_expression).getValue()).intValue();
}
-
- public boolean isNamed()
- {
- return (_expression instanceof NamedExpression);
- }
-
- public String getName()
- {
- return ((NamedExpression) _expression).getName();
- }
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/7c69d170/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQuery.java
----------------------------------------------------------------------
diff --git a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQuery.java b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQuery.java
index 1b22da0..f06051d 100644
--- a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQuery.java
+++ b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQuery.java
@@ -266,9 +266,8 @@ public final class ConfiguredObjectQuery
private final List<OrderByExpression> _orderByExpressions;
public OrderByComparator(final List<OrderByExpression> orderByExpressions,
- final HeadersAndValueExpressions headersAndValue)
+ final List<Expression> valueExpressions)
{
- final List<Expression> valueExpressions = headersAndValue.getValueExpressions();
_orderByExpressions = new ArrayList<>(orderByExpressions);
for (ListIterator<OrderByExpression> iterator = _orderByExpressions.listIterator(); iterator.hasNext(); )
{
@@ -287,12 +286,6 @@ public final class ConfiguredObjectQuery
iterator.set(orderByExpression);
}
}
- else if (orderByExpression.isNamed() && headersAndValue.hasHeader(orderByExpression.getName()))
- {
- Expression expression = headersAndValue.getValueExpressionForHeader(orderByExpression.getName());
- orderByExpression = new OrderByExpression(expression, orderByExpression.getOrder());
- iterator.set(orderByExpression);
- }
}
}
@@ -343,19 +336,35 @@ public final class ConfiguredObjectQuery
final String orderByClause,
final HeadersAndValueExpressions headersAndValue)
{
- List<OrderByExpression> orderByExpressions = parseOrderByClause(orderByClause);
+ List<OrderByExpression> orderByExpressions = parseOrderByClause(orderByClause, headersAndValue);
List<ConfiguredObject<?>> orderedObjects = new ArrayList<>(unorderedResults.size());
orderedObjects.addAll(unorderedResults);
- Comparator<Object> comparator = new OrderByComparator(orderByExpressions, headersAndValue);
+ Comparator<Object> comparator = new OrderByComparator(orderByExpressions, headersAndValue.getValueExpressions());
Collections.sort(orderedObjects, comparator);
return orderedObjects;
}
- private List<OrderByExpression> parseOrderByClause(final String orderByClause)
+ private List<OrderByExpression> parseOrderByClause(final String orderByClause,
+ final HeadersAndValueExpressions headersAndValue)
{
final List<OrderByExpression> orderByExpressions;
ConfiguredObjectFilterParser parser = new ConfiguredObjectFilterParser();
- parser.setConfiguredObjectExpressionFactory(_expressionFactory);
+ parser.setConfiguredObjectExpressionFactory(new ConfiguredObjectExpressionFactory()
+ {
+ @Override
+ public ConfiguredObjectExpression createConfiguredObjectExpression(final String propertyName)
+ {
+ if (headersAndValue.hasHeader(propertyName))
+ {
+ Expression expression = headersAndValue.getValueExpressionForHeader(propertyName);
+ return object -> expression.evaluate(object);
+ }
+ else
+ {
+ return super.createConfiguredObjectExpression(propertyName);
+ }
+ }
+ });
try
{
orderByExpressions = parser.parseOrderBy(orderByClause);
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/7c69d170/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQueryTest.java
----------------------------------------------------------------------
diff --git a/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQueryTest.java b/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQueryTest.java
index b903a41..a660ec7 100644
--- a/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQueryTest.java
+++ b/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQueryTest.java
@@ -568,6 +568,24 @@ public class ConfiguredObjectQueryTest extends QpidTestCase
assertQueryResults(new Object[][]{{1}, {2}, {4}}, _query.getResults());
}
+ public void testExpressionToTermsOfAliasInOrderByClause()
+ {
+ _objects.add(createCO(new HashMap<String, Object>()
+ {{
+ put("foo1", "A");
+ put("foo2", "B");
+ }}));
+
+ _objects.add(createCO(new HashMap<String, Object>()
+ {{
+ put("foo1", "A");
+ put("foo2", "A");
+ }}));
+
+ _query = new ConfiguredObjectQuery(_objects, "foo1 AS bar1, foo2", null, "CONCAT(bar, foo2) ASC");
+ assertQueryResults(new Object[][]{{"A", "A"}, {"A", "B"}}, _query.getResults());
+ }
+
public void testDelimitedAliasInOrderByClause()
{
_objects.add(createCO(new HashMap<String, Object>()
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org