You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Nikolay Izhikov (Jira)" <ji...@apache.org> on 2024/08/15 08:02:00 UTC

[jira] [Created] (IGNITE-22993) Count from REPLICATED caches with partition filter

Nikolay Izhikov created IGNITE-22993:
----------------------------------------

             Summary: Count from REPLICATED caches with partition filter
                 Key: IGNITE-22993
                 URL: https://issues.apache.org/jira/browse/IGNITE-22993
             Project: Ignite
          Issue Type: Bug
            Reporter: Nikolay Izhikov


Case when SQL query `SELECT COUNT(*) FROM T` with partitions invoked for REPLICATED cache data don't work properly.

{code:java}
/** */
public class QueryWithPartitionsIntegration2Test extends GridCommonAbstractTest {
    /** {@inheritDoc} */
    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);

        cfg.getSqlConfiguration().setQueryEnginesConfiguration(new CalciteQueryEngineConfiguration());

        return cfg;
    }

    /** */
    @Test
    public void testSelectCount() throws Exception {
        startGrid(0).createCache(DEFAULT_CACHE_NAME);

        sql("CREATE TABLE T(ID INT PRIMARY KEY, IDX_VAL VARCHAR, VAL VARCHAR) WITH template=replicated");

        StringBuilder sb = new StringBuilder("INSERT INTO T(ID, IDX_VAL, VAL) VALUES ");

        int cnt = 10_000;
        for (int i = 0; i < cnt; ++i) {
            if (i != 0)
                sb.append(",");

            sb.append("(").append(i).append(", ")
                .append("'name_").append(i).append("', ")
                .append("'name_").append(i).append("')");
        }

        sql(sb.toString());

        assertEquals((long)cnt, sql("SELECT COUNT(*) FROM T").get(0).get(0));
        assertNotEquals((long)cnt, sql("SELECT COUNT(*) FROM T", 42).get(0).get(0));
    }

    /** */
    public List<List<?>> sql(String sqlText, int... parts) {
        SqlFieldsQuery qry = new SqlFieldsQuery(sqlText).setTimeout(5, TimeUnit.SECONDS);

        if (!F.isEmpty(parts))
            qry.setPartitions(parts);

        return grid(0).cache(F.first(grid(0).cacheNames())).query(qry).getAll();
    }
}
{code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)