[
https://issues.apache.org/jira/browse/IGNITE-7908?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ilya Kasnacheev updated IGNITE-7908:
------------------------------------
Priority: Major (was: Critical)
> NULLS LAST works incorrectly for PARTITIONED caches
> ---------------------------------------------------
>
> Key: IGNITE-7908
> URL: https://issues.apache.org/jira/browse/IGNITE-7908
> Project: Ignite
> Issue Type: Bug
> Components: sql
> Reporter: Stanislav Lukyanov
> Priority: Major
>
> When a `SELECT .... ORDER BY ... NULLS LAST` query is executed on a
> partitioned cache, the null values at the end of the result are interleaved
> with non-null values.
> It seems that for each node participating in the query all null values that
> are stored on that node are returned immediately after the last non-null
> value. As a result, non-null values are correctly ordered and null values
> appear in a few "portions" (the number of "portions" is equal to the number
> of nodes) among the last values.
> Example:
> ====================
> {code:java}
> public class NullsLastBug {
> public static void main(String[] args) throws Exception {
> try (
> Ignite srv1 =
> IgnitionEx.start("examples/config/example-ignite.xml", "server-1");
> Ignite srv2 =
> IgnitionEx.start("examples/config/example-ignite.xml", "server-2");
> Ignite srv3 =
> IgnitionEx.start("examples/config/example-ignite.xml", "server-3")
> ) {
> Ignition.setClientMode(true);
> try (Ignite client =
> IgnitionEx.start("examples/config/example-ignite.xml", "client")) {
> IgniteCache<Long, Box> cache = client.getOrCreateCache(
> new CacheConfiguration<Long, Box>("cache")
> .setCacheMode(CacheMode.PARTITIONED)
> .setIndexedTypes(Long.class, Box.class)
> );
> for (long i = 0; i < 30; i++) {
> Long num = (i % 2 != 0) ? i : null;
> cache.put(i, new Box(num));
> }
> SqlFieldsQuery selectAll = new SqlFieldsQuery("SELECT num
> FROM Box ORDER BY num NULLS LAST");
> for (List<?> list : cache.query(selectAll))
> System.out.println(list);
> }
> }
> }
> }
> class Box implements Serializable {
> @QuerySqlField(index = true) private Long num;
> Box(Long num) {
> this.num = num;
> }
> }
> {code}
> ====================
> Output:
> ====================
> {code}
> [1]
> [3]
> [5]
> [7]
> [9]
> [11]
> [13]
> [15]
> [17]
> [19]
> [21]
> [23]
> [null]
> [null]
> [25]
> [27]
> [null]
> [null]
> [null]
> [null]
> [null]
> [null]
> [null]
> [null]
> [29]
> [null]
> [null]
> [null]
> [null]
> [null]
> {code}
> ====================
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)