You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2017/05/31 18:39:38 UTC
ignite git commit: IGNITE-4724: SQL: fixed return type of AVG
operation. This closes #1989.
Repository: ignite
Updated Branches:
refs/heads/master 54f499cec -> c4883113d
IGNITE-4724: SQL: fixed return type of AVG operation. This closes #1989.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/c4883113
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/c4883113
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/c4883113
Branch: refs/heads/master
Commit: c4883113dd54a13ea68ed07548f838fde513f9f1
Parents: 54f499c
Author: Sergey Kalashnikov <sk...@gridgain.com>
Authored: Wed May 31 21:39:21 2017 +0300
Committer: devozerov <pp...@gmail.com>
Committed: Wed May 31 21:39:21 2017 +0300
----------------------------------------------------------------------
.../query/h2/sql/GridSqlQuerySplitter.java | 22 +-
...ClientReconnectCacheQueriesFailoverTest.java | 2 +-
.../query/IgniteSqlSplitterSelfTest.java | 256 +++++++++++++++----
3 files changed, 223 insertions(+), 57 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/c4883113/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuerySplitter.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuerySplitter.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuerySplitter.java
index 8fcd7dc..e2b82ab 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuerySplitter.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuerySplitter.java
@@ -46,6 +46,7 @@ import org.h2.command.Prepared;
import org.h2.command.dml.Query;
import org.h2.command.dml.SelectUnion;
import org.h2.jdbc.JdbcPreparedStatement;
+import org.h2.value.Value;
import org.jetbrains.annotations.Nullable;
import static org.apache.ignite.internal.processors.query.h2.opt.GridH2CollocationModel.isCollocated;
@@ -1836,12 +1837,12 @@ public class GridSqlQuerySplitter {
/* Note Distinct aggregate can be performed only on reduce phase, so
if query contains distinct aggregate then other aggregates must be processed the same way. */
switch (agg.type()) {
- case AVG: // SUM( AVG(CAST(x AS DOUBLE))*COUNT(x) )/SUM( COUNT(x) ) or AVG(CAST( x AS DOUBLE))
+ case AVG: // SUM( AVG(CAST(x AS DOUBLE))*COUNT(x) )/SUM( COUNT(x) ) or AVG(x)
if (hasDistinctAggregate) /* and has no collocated group by */ {
mapAgg = agg.child();
- rdcAgg = aggregate(agg.distinct(), agg.type()).resultType(GridSqlType.DOUBLE)
- .addChild(function(CAST).resultType(GridSqlType.DOUBLE).addChild(column(mapAggAlias.alias())));
+ rdcAgg = aggregate(agg.distinct(), agg.type()).resultType(agg.resultType())
+ .addChild(column(mapAggAlias.alias()));
}
else {
//-- COUNT(x) map
@@ -1868,7 +1869,13 @@ public class GridSqlQuerySplitter {
GridSqlElement sumDownRdc = aggregate(false, SUM).addChild(column(cntMapAggAlias));
- rdcAgg = op(GridSqlOperationType.DIVIDE, sumUpRdc, sumDownRdc);
+ if (!isFractionalType(agg.resultType().type())) {
+ sumUpRdc = function(CAST).resultType(GridSqlType.BIGINT).addChild(sumUpRdc);
+ sumDownRdc = function(CAST).resultType(GridSqlType.BIGINT).addChild(sumDownRdc);
+ }
+
+ rdcAgg = function(CAST).resultType(agg.resultType())
+ .addChild(op(GridSqlOperationType.DIVIDE, sumUpRdc, sumDownRdc));
}
break;
@@ -1974,6 +1981,13 @@ public class GridSqlQuerySplitter {
}
/**
+ * @param type data type id
+ * @return true if given type is fractional
+ */
+ private static boolean isFractionalType(int type) {
+ return type == Value.DECIMAL || type == Value.FLOAT || type == Value.DOUBLE;
+ }
+ /**
* Simplified tree-like model for a query.
* - SELECT : All the children are list of joined query models in the FROM clause.
* - UNION : All the children are united left and right query models.
http://git-wip-us.apache.org/repos/asf/ignite/blob/c4883113/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientReconnectCacheQueriesFailoverTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientReconnectCacheQueriesFailoverTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientReconnectCacheQueriesFailoverTest.java
index 51620b1..39634cb 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientReconnectCacheQueriesFailoverTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientReconnectCacheQueriesFailoverTest.java
@@ -101,7 +101,7 @@ public class IgniteClientReconnectCacheQueriesFailoverTest extends IgniteClientR
assertEquals(1, res.size());
- Double avg = (Double)res.get(0).get(0);
+ Integer avg = (Integer)res.get(0).get(0);
assertEquals(5_000, avg.intValue());
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/c4883113/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlSplitterSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlSplitterSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlSplitterSelfTest.java
index 9b5c17a..d8f71a3 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlSplitterSelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlSplitterSelfTest.java
@@ -18,6 +18,7 @@
package org.apache.ignite.internal.processors.query;
import java.io.Serializable;
+import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -1778,6 +1779,98 @@ public class IgniteSqlSplitterSelfTest extends GridCommonAbstractTest {
}
}
+ /**
+ * Check results of aggregate functions if no rows are selected.
+ *
+ * @throws Exception If failed,
+ */
+ public void testEmptyCacheAggregates() throws Exception {
+ final String cacheName = "ints";
+
+ IgniteCache<Integer, Value> cache = ignite(0).getOrCreateCache(cacheConfig(cacheName, true,
+ Integer.class, Value.class));
+
+ try (QueryCursor<List<?>> qry = cache.query(new SqlFieldsQuery(
+ "SELECT count(fst), sum(snd), avg(snd), min(snd), max(snd) FROM Value"))) {
+ List<List<?>> result = qry.getAll();
+
+ assertEquals(1, result.size());
+
+ List<?> row = result.get(0);
+
+ assertEquals("count", 0L, ((Number)row.get(0)).longValue());
+ assertEquals("sum", null, row.get(1));
+ assertEquals("avg", null, row.get(2));
+ assertEquals("min", null, row.get(3));
+ assertEquals("max", null, row.get(4));
+ }
+ finally {
+ cache.destroy();
+ }
+ }
+
+ /**
+ * Check avg() with various data types.
+ *
+ * @throws Exception If failed.
+ */
+ public void testAvgVariousDataTypes() throws Exception {
+ final String cacheName = "avgtypes";
+
+ IgniteCache<Integer, AvgDataTypes> cache =
+ ignite(0).getOrCreateCache(cacheConfig(cacheName, true, Integer.class, AvgDataTypes.class));
+
+ // avg 13.125; int avg 13
+ double value[] = new double[] {1, 5, 7, 8, 10.5, 13.5, 20, 40};
+
+ for (int i = 0; i < value.length; i++) {
+ Number v = value[i];
+
+ cache.put(i, new AvgDataTypes(
+ v.byteValue(),
+ v.shortValue(),
+ v.intValue(),
+ v.longValue(),
+ new BigDecimal(v.toString()),
+ v.floatValue(),
+ v.doubleValue()));
+ }
+
+ try {
+ checkAvgWithVariousTypes(cache, false);
+ checkAvgWithVariousTypes(cache, true);
+ }
+ finally {
+ cache.destroy();
+ }
+ }
+
+ /**
+ * Check avg() with various data types.
+ *
+ * @param cache Cache.
+ * @param distinct Distinct flag.
+ */
+ private void checkAvgWithVariousTypes(IgniteCache<Integer, AvgDataTypes> cache, boolean distinct) {
+ String qryText = String.format("select avg(%1$s byteField), avg(%1$s shortField), " +
+ "avg(%1$s intField), avg(%1$s longField), avg(%1$s decimalField), " +
+ "avg(%1$s floatField), avg(%1$s doubleField) from AvgDataTypes", distinct ? "distinct" : "");
+
+ SqlFieldsQuery qry = new SqlFieldsQuery(qryText);
+
+ List<List<?>> result = cache.query(qry).getAll();
+
+ List<?> row = result.get(0);
+
+ assertEquals((byte)13, row.get(0));
+ assertEquals((short)13, row.get(1));
+ assertEquals(13, row.get(2));
+ assertEquals(13L, row.get(3));
+ assertEquals(new BigDecimal("13.125"), row.get(4));
+ assertEquals(13.125f, row.get(5));
+ assertEquals(13.125d, row.get(6));
+ }
+
/** Simple query with aggregates */
private void checkSimpleQueryWithAggr(IgniteCache<Integer, Value> cache) {
try (QueryCursor<List<?>> qry = cache.query(new SqlFieldsQuery(
@@ -1790,7 +1883,7 @@ public class IgniteSqlSplitterSelfTest extends GridCommonAbstractTest {
assertEquals("count", 15L, ((Number)row.get(0)).longValue());
assertEquals("sum", 30L, ((Number)row.get(1)).longValue());
- assertEquals("avg", 2.0d, ((Number)row.get(2)).doubleValue(), 0.001);
+ assertEquals("avg", 2, ((Integer)row.get(2)).intValue());
assertEquals("min", 1, ((Integer)row.get(3)).intValue());
assertEquals("max", 3, ((Integer)row.get(4)).intValue());
}
@@ -1809,7 +1902,7 @@ public class IgniteSqlSplitterSelfTest extends GridCommonAbstractTest {
assertEquals("count distinct", 6L, ((Number)row.get(0)).longValue());
assertEquals("sum distinct", 6L, ((Number)row.get(1)).longValue());
- assertEquals("avg distinct", 2.0d, ((Number)row.get(2)).doubleValue(), 0.001);
+ assertEquals("avg distinct", 2, ((Integer)row.get(2)).intValue());
assertEquals("min distinct", 1, ((Integer)row.get(3)).intValue());
assertEquals("max distinct", 3, ((Integer)row.get(4)).intValue());
}
@@ -1829,12 +1922,12 @@ public class IgniteSqlSplitterSelfTest extends GridCommonAbstractTest {
assertEquals("count", 15L, ((Number)row.get(0)).longValue());
assertEquals("sum", 30L, ((Number)row.get(1)).longValue());
- assertEquals("avg", 2.0d, ((Number)row.get(2)).doubleValue(), 0.001);
+ assertEquals("avg", 2, ((Integer)row.get(2)).intValue());
assertEquals("min", 1, ((Integer)row.get(3)).intValue());
assertEquals("max", 3, ((Integer)row.get(4)).intValue());
assertEquals("count distinct", 6L, ((Number)row.get(5)).longValue());
assertEquals("sum distinct", 6L, ((Number)row.get(6)).longValue());
- assertEquals("avg distinct", 2.0d, ((Number)row.get(7)).doubleValue(), 0.001);
+ assertEquals("avg distinct", 2, ((Integer)row.get(7)).intValue());
assertEquals("min distinct", 1, ((Integer)row.get(8)).intValue());
assertEquals("max distinct", 3, ((Integer)row.get(9)).intValue());
}
@@ -1843,7 +1936,8 @@ public class IgniteSqlSplitterSelfTest extends GridCommonAbstractTest {
/** Query with aggregates and groups */
private void checkQueryWithGroupsAndAggrs(IgniteCache<Integer, Value> cache) {
try (QueryCursor<List<?>> qry = cache.query(new SqlFieldsQuery(
- "SELECT fst, count(snd), sum(snd), avg(snd), min(snd), max(snd) FROM Value GROUP BY fst ORDER BY fst"))) {
+ "SELECT fst, count(snd), sum(snd), avg(snd), avg(CAST(snd AS DOUBLE)), " +
+ "min(snd), max(snd) FROM Value GROUP BY fst ORDER BY fst"))) {
List<List<?>> result = qry.getAll();
assertEquals(6, result.size());
@@ -1852,33 +1946,39 @@ public class IgniteSqlSplitterSelfTest extends GridCommonAbstractTest {
assertEquals("fst", 1, ((Number)row.get(0)).intValue());
assertEquals("count", 3L, ((Number)row.get(1)).longValue());
assertEquals("sum", 9L, ((Number)row.get(2)).longValue());
- assertEquals("avg", 3.0d, ((Number)row.get(3)).doubleValue(), 0.001);
- assertEquals("min", 3, ((Integer)row.get(4)).intValue());
- assertEquals("max", 3, ((Integer)row.get(5)).intValue());
+ assertEquals("avg", 3, ((Number)row.get(3)).doubleValue(), 0.001);
+ assertEquals("avg dbl", 3d, ((Number)row.get(4)).doubleValue(), 0.001);
+ assertEquals("min", 3, ((Integer)row.get(5)).intValue());
+ assertEquals("max", 3, ((Integer)row.get(6)).intValue());
+
row = result.get(1);
assertEquals("fst", 2, ((Number)row.get(0)).intValue());
assertEquals("count", 3L, ((Number)row.get(1)).longValue());
assertEquals("sum", 6L, ((Number)row.get(2)).longValue());
- assertEquals("avg", 2.0d, ((Number)row.get(3)).doubleValue(), 0.001);
- assertEquals("min", 1, ((Integer)row.get(4)).intValue());
- assertEquals("max", 3, ((Integer)row.get(5)).intValue());
+ assertEquals("avg", 2, ((Number)row.get(3)).doubleValue(), 0.001);
+ assertEquals("avg dbl", 2d, ((Number)row.get(4)).doubleValue(), 0.001);
+ assertEquals("min", 1, ((Integer)row.get(5)).intValue());
+ assertEquals("max", 3, ((Integer)row.get(6)).intValue());
+
row = result.get(2);
assertEquals("fst", 3, ((Number)row.get(0)).intValue());
assertEquals("count", 6L, ((Number)row.get(1)).longValue());
assertEquals("sum", 9L, ((Number)row.get(2)).longValue());
- assertEquals("avg", 1.5d, ((Number)row.get(3)).doubleValue(), 0.001);
- assertEquals("min", 1, ((Integer)row.get(4)).intValue());
- assertEquals("max", 2, ((Integer)row.get(5)).intValue());
+ assertEquals("avg", 1, ((Integer)row.get(3)).intValue());
+ assertEquals("avg dbl", 1.5d, ((Number)row.get(4)).doubleValue(), 0.001);
+ assertEquals("min", 1, ((Integer)row.get(5)).intValue());
+ assertEquals("max", 2, ((Integer)row.get(6)).intValue());
}
}
/** Query with distinct aggregates and groups */
private void checkQueryWithGroupsAndDistinctAggr(IgniteCache<Integer, Value> cache) {
try (QueryCursor<List<?>> qry = cache.query(new SqlFieldsQuery(
- "SELECT count(distinct snd), sum(distinct snd), avg(distinct snd), min(distinct snd), max(distinct snd) " +
- "FROM Value GROUP BY fst"))) {
+ "SELECT count(distinct snd), sum(distinct snd), avg(distinct snd), " +
+ "avg(distinct cast(snd as double)), min(distinct snd), max(distinct snd) " +
+ "FROM Value GROUP BY fst"))) {
List<List<?>> result = qry.getAll();
assertEquals(6, result.size());
@@ -1886,32 +1986,35 @@ public class IgniteSqlSplitterSelfTest extends GridCommonAbstractTest {
List<?> row = result.get(0);
assertEquals("count distinct", 1L, ((Number)row.get(0)).longValue());
assertEquals("sum distinct", 3L, ((Number)row.get(1)).longValue());
- assertEquals("avg distinct", 3.0d, ((Number)row.get(2)).doubleValue(), 0.001);
- assertEquals("min distinct", 3, ((Integer)row.get(3)).intValue());
- assertEquals("max distinct", 3, ((Integer)row.get(4)).intValue());
+ assertEquals("avg distinct", 3, ((Integer)row.get(2)).intValue());
+ assertEquals("avg distinct dbl", 3.0d, ((Number)row.get(3)).doubleValue(), 0.001);
+ assertEquals("min distinct", 3, ((Integer)row.get(4)).intValue());
+ assertEquals("max distinct", 3, ((Integer)row.get(5)).intValue());
row = result.get(1);
assertEquals("count distinct", 3L, ((Number)row.get(0)).longValue());
assertEquals("sum distinct", 6L, ((Number)row.get(1)).longValue());
- assertEquals("avg distinct", 2.0d, ((Number)row.get(2)).doubleValue(), 0.001);
- assertEquals("min distinct", 1, ((Integer)row.get(3)).intValue());
- assertEquals("max distinct", 3, ((Integer)row.get(4)).intValue());
+ assertEquals("avg distinct", 2, ((Integer)row.get(2)).intValue());
+ assertEquals("avg distinct dbl", 2.0d, ((Number)row.get(3)).doubleValue(), 0.001);
+ assertEquals("min distinct", 1, ((Integer)row.get(4)).intValue());
+ assertEquals("max distinct", 3, ((Integer)row.get(5)).intValue());
row = result.get(2);
assertEquals("count distinct", 2L, ((Number)row.get(0)).longValue());
assertEquals("sum distinct", 3L, ((Number)row.get(1)).longValue());
- assertEquals("avg distinct", 1.5d, ((Number)row.get(2)).doubleValue(), 0.001);
- assertEquals("min distinct", 1, ((Integer)row.get(3)).intValue());
- assertEquals("max distinct", 2, ((Integer)row.get(4)).intValue());
+ assertEquals("avg distinct", 1, ((Integer)row.get(2)).intValue());
+ assertEquals("avg distinct dbl", 1.5d, ((Number)row.get(3)).doubleValue(), 0.001);
+ assertEquals("min distinct", 1, ((Integer)row.get(4)).intValue());
+ assertEquals("max distinct", 2, ((Integer)row.get(5)).intValue());
}
}
/** Query with distinct aggregates and groups */
private void checkQueryWithGroupsAndAggrMixed(IgniteCache<Integer, Value> cache) {
try (QueryCursor<List<?>> qry = cache.query(new SqlFieldsQuery(
- "SELECT fst, count(snd), sum(snd), avg(snd), min(snd), max(snd)," +
- "count(distinct snd), sum(distinct snd), avg(distinct snd), min(distinct snd), max(distinct snd) " +
- "FROM Value GROUP BY fst"))) {
+ "SELECT fst, count(snd), sum(snd), avg(snd), avg(cast(snd as double)), min(snd), max(snd)," +
+ "count(distinct snd), sum(distinct snd), avg(distinct snd), avg(distinct cast(snd as double)), " +
+ "min(distinct snd), max(distinct snd) FROM Value GROUP BY fst"))) {
List<List<?>> result = qry.getAll();
assertEquals(6, result.size());
@@ -1920,40 +2023,46 @@ public class IgniteSqlSplitterSelfTest extends GridCommonAbstractTest {
assertEquals("fst", 1, ((Number)row.get(0)).intValue());
assertEquals("count", 3L, ((Number)row.get(1)).longValue());
assertEquals("sum", 9L, ((Number)row.get(2)).longValue());
- assertEquals("avg", 3.0d, ((Number)row.get(3)).doubleValue(), 0.001);
- assertEquals("min", 3, ((Integer)row.get(4)).intValue());
- assertEquals("max", 3, ((Integer)row.get(5)).intValue());
- assertEquals("count distinct", 1L, ((Number)row.get(6)).longValue());
- assertEquals("sum distinct", 3L, ((Number)row.get(7)).longValue());
- assertEquals("avg distinct", 3.0d, ((Number)row.get(8)).doubleValue(), 0.001);
- assertEquals("min distinct", 3, ((Integer)row.get(9)).intValue());
- assertEquals("max distinct", 3, ((Integer)row.get(10)).intValue());
+ assertEquals("avg", 3, ((Integer)row.get(3)).intValue());
+ assertEquals("avg dbl", 3.0d, ((Number)row.get(4)).doubleValue(), 0.001);
+ assertEquals("min", 3, ((Integer)row.get(5)).intValue());
+ assertEquals("max", 3, ((Integer)row.get(6)).intValue());
+ assertEquals("count distinct", 1L, ((Number)row.get(7)).longValue());
+ assertEquals("sum distinct", 3L, ((Number)row.get(8)).longValue());
+ assertEquals("avg distinct", 3, ((Integer)row.get(9)).intValue());
+ assertEquals("avg distinct dbl", 3.0d, ((Number)row.get(10)).doubleValue(), 0.001);
+ assertEquals("min distinct", 3, ((Integer)row.get(11)).intValue());
+ assertEquals("max distinct", 3, ((Integer)row.get(12)).intValue());
row = result.get(1);
assertEquals("fst", 2, ((Number)row.get(0)).intValue());
assertEquals("count", 3L, ((Number)row.get(1)).longValue());
assertEquals("sum", 6L, ((Number)row.get(2)).longValue());
- assertEquals("avg", 2.0d, ((Number)row.get(3)).doubleValue(), 0.001);
- assertEquals("min", 1, ((Integer)row.get(4)).intValue());
- assertEquals("max", 3, ((Integer)row.get(5)).intValue());
- assertEquals("count distinct", 3L, ((Number)row.get(6)).longValue());
- assertEquals("sum distinct", 6L, ((Number)row.get(7)).longValue());
- assertEquals("avg distinct", 2.0d, ((Number)row.get(8)).doubleValue(), 0.001);
- assertEquals("min distinct", 1, ((Integer)row.get(9)).intValue());
- assertEquals("max distinct", 3, ((Integer)row.get(10)).intValue());
+ assertEquals("avg", 2, ((Integer)row.get(3)).intValue());
+ assertEquals("avg dbl", 2.0d, ((Number)row.get(4)).doubleValue(), 0.001);
+ assertEquals("min", 1, ((Integer)row.get(5)).intValue());
+ assertEquals("max", 3, ((Integer)row.get(6)).intValue());
+ assertEquals("count distinct", 3L, ((Number)row.get(7)).longValue());
+ assertEquals("sum distinct", 6L, ((Number)row.get(8)).longValue());
+ assertEquals("avg distinct", 2, ((Integer)row.get(9)).intValue());
+ assertEquals("avg distinct dbl", 2.0d, ((Number)row.get(10)).doubleValue(), 0.001);
+ assertEquals("min distinct", 1, ((Integer)row.get(11)).intValue());
+ assertEquals("max distinct", 3, ((Integer)row.get(12)).intValue());
row = result.get(2);
assertEquals("fst", 3, ((Number)row.get(0)).intValue());
assertEquals("count", 6L, ((Number)row.get(1)).longValue());
assertEquals("sum", 9L, ((Number)row.get(2)).longValue());
- assertEquals("avg", 1.5d, ((Number)row.get(3)).doubleValue(), 0.001);
- assertEquals("min", 1, ((Integer)row.get(4)).intValue());
- assertEquals("max", 2, ((Integer)row.get(5)).intValue());
- assertEquals("count distinct", 2L, ((Number)row.get(6)).longValue());
- assertEquals("sum distinct", 3L, ((Number)row.get(7)).longValue());
- assertEquals("avg distinct", 1.5d, ((Number)row.get(8)).doubleValue(), 0.001);
- assertEquals("min distinct", 1, ((Integer)row.get(9)).intValue());
- assertEquals("max distinct", 2, ((Integer)row.get(10)).intValue());
+ assertEquals("avg", 1, ((Integer)row.get(3)).intValue());
+ assertEquals("avg dbl", 1.5d, ((Number)row.get(4)).doubleValue(), 0.001);
+ assertEquals("min", 1, ((Integer)row.get(5)).intValue());
+ assertEquals("max", 2, ((Integer)row.get(6)).intValue());
+ assertEquals("count distinct", 2L, ((Number)row.get(7)).longValue());
+ assertEquals("sum distinct", 3L, ((Number)row.get(8)).longValue());
+ assertEquals("avg distinct", 1, ((Integer)row.get(9)).intValue());
+ assertEquals("avg distinct dbl", 1.5d, ((Number)row.get(10)).doubleValue(), 0.001);
+ assertEquals("min distinct", 1, ((Integer)row.get(11)).intValue());
+ assertEquals("max distinct", 2, ((Integer)row.get(12)).intValue());
}
}
@@ -2245,4 +2354,47 @@ public class IgniteSqlSplitterSelfTest extends GridCommonAbstractTest {
this.OFFER_ID = offer_Id;
}
}
+
+ /** */
+ public class AvgDataTypes {
+ /** */
+ @QuerySqlField
+ private Byte byteField;
+
+ /** */
+ @QuerySqlField
+ private Short shortField;
+
+ /** */
+ @QuerySqlField
+ private Integer intField;
+
+ /** */
+ @QuerySqlField
+ private Long longField;
+
+ /** */
+ @QuerySqlField
+ private BigDecimal decimalField;
+
+ /** */
+ @QuerySqlField
+ private Float floatField;
+
+ /** */
+ @QuerySqlField
+ private Double doubleField;
+
+ /** */
+ public AvgDataTypes(Byte byteField, Short shortField, Integer intField, Long longField,
+ BigDecimal decimalField, Float floatField, Double doubleField) {
+ this.byteField = byteField;
+ this.shortField = shortField;
+ this.intField = intField;
+ this.longField = longField;
+ this.decimalField = decimalField;
+ this.floatField = floatField;
+ this.doubleField = doubleField;
+ }
+ }
}