You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Stanislav Lukyanov (JIRA)" <ji...@apache.org> on 2018/03/09 14:04:00 UTC
[jira] [Updated] (IGNITE-7908) NULLS LAST works incorrectly for
PARTITIONED caches
[ https://issues.apache.org/jira/browse/IGNITE-7908?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Stanislav Lukyanov updated IGNITE-7908:
---------------------------------------
Priority: Critical (was: Major)
> 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: Critical
>
> 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)