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 <skalashni...@gridgain.com> Authored: Wed May 31 21:39:21 2017 +0300 Committer: devozerov <ppoze...@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; + } + } }