[
https://issues.apache.org/jira/browse/IGNITE-13019?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17326558#comment-17326558
]
Stanislav Lukyanov commented on IGNITE-13019:
---------------------------------------------
Some comments in the PR.
Also, I would like to raise a couple of additional suggestions.
First, I think it would be very helpful if we print an INFO-level message when
a partitioned cache is created that contains the primary and affinity key
columns and explains that the JOINs with other partitioned caches must use
either the affinity key or the primary key.
Second, I think it would be good to have a mode when an incorrect JOIN
condition throws an error instead of printing a warning. Furthermore, I think
the next minor Ignite version can have the error as default. The error can be
suppressed by changing a metastore property.
> Unexpected JOIN result when querying a single-node cluster
> ----------------------------------------------------------
>
> Key: IGNITE-13019
> URL: https://issues.apache.org/jira/browse/IGNITE-13019
> Project: Ignite
> Issue Type: Bug
> Components: sql
> Affects Versions: 2.8
> Reporter: Stanilovsky Evgeny
> Assignee: Maksim Timonin
> Priority: Major
> Time Spent: 0.5h
> Remaining Estimate: 0h
>
> Check reproducer near,
> seems something wrong with pkey logic , if we change it - results will be ok.
> {code:java}
> @Test
> public void test() throws Exception {
> inlineSize = 10;
> startGrid(0);
> String t1 = "CREATE TABLE dept\n" +
> " (\n" +
> "deptno LONG,\n" +
> "dname VARCHAR,\n" +
> "loc VARCHAR,\n" +
> "CONSTRAINT pk_dept PRIMARY KEY (deptno)\n" +
> " );";
> execSql(t1);
> String t2 = "CREATE TABLE emp\n" +
> " (\n" +
> "empno LONG,\n" +
> "ename VARCHAR,\n" +
> "job VARCHAR,\n" +
> "mgr INTEGER,\n" +
> "hiredate DATE,\n" +
> "sal LONG,\n" +
> "comm LONG,\n" +
> "deptno LONG,\n" +
> "CONSTRAINT pk_emp PRIMARY KEY (empno)\n" +
> " );";
> execSql(t2);
> execSql("insert into dept (deptno, dname, loc) values (10,
> 'ACCOUNTING', 'NEW YORK');");
> execSql("insert into dept (deptno, dname, loc) values(20, 'RESEARCH',
> 'DALLAS');");
> execSql("insert into dept (deptno, dname, loc) values(30, 'SALES',
> 'CHICAGO');");
> execSql("insert into emp (empno, ename, job, mgr, hiredate, sal,
> comm, deptno) values(7839, 'KING', 'PRESIDENT', null,
> to_date('17-11-1981','dd-mm-yyyy'), 5000, null, 10);");
> execSql("insert into emp (empno, ename, job, mgr, hiredate, sal,
> comm, deptno) values( 7698, 'BLAKE', 'MANAGER', 7839,
> to_date('1-5-1981','dd-mm-yyyy'), 2850, null, 30);");
> execSql("insert into emp (empno, ename, job, mgr, hiredate, sal,
> comm, deptno) values(7782, 'CLARK', 'MANAGER', 7839,
> to_date('9-6-1981','dd-mm-yyyy'), 2450, null, 10);");
> List<List<?>> vals1 = execSql("SELECT d.deptno,\n" +
> "e.ename\n" +
> "FROM EMP e\n" +
> "INNER JOIN dept d\n" +
> "ON e.deptno = d.deptno AND e.deptno = 10;");
> assertEquals(vals1.size(), 2);
> List<List<?>> vals2 = execSql("SELECT d.deptno,\n" +
> "e.ename\n" +
> "FROM EMP e\n" +
> "INNER JOIN dept d\n" +
> "ON e.deptno = d.deptno AND d.DEPTNO = 10;");
> //assertEquals(vals2.size(), 2); <--* uncomment for fail*
> execSql("drop table dept");
> String t3 = "CREATE TABLE dept\n" +
> " (\n" +
> "deptno LONG,\n" +
> "dname VARCHAR,\n" +
> "loc VARCHAR,\n" +
> "CONSTRAINT pk_dept PRIMARY KEY (deptno, dname)\n" +
> " );";
> execSql(t3);
> execSql("insert into dept (deptno, dname, loc) values (10,
> 'ACCOUNTING', 'NEW YORK');");
> execSql("insert into dept (deptno, dname, loc) values(20, 'RESEARCH',
> 'DALLAS');");
> execSql("insert into dept (deptno, dname, loc) values(30, 'SALES',
> 'CHICAGO');");
> List<List<?>> vals11 = execSql("SELECT d.deptno,\n" +
> "e.ename\n" +
> "FROM EMP e\n" +
> "INNER JOIN dept d\n" +
> "ON e.deptno = d.deptno AND e.deptno = 10;");
> assertEquals(vals11.size(), 2);
> List<List<?>> vals22 = execSql("SELECT d.deptno,\n" +
> "e.ename\n" +
> "FROM EMP e\n" +
> "INNER JOIN dept d\n" +
> "ON e.deptno = d.deptno AND d.DEPTNO = 10;");
> assertEquals(vals22.size(), 2);
> }
> /** */
> private List<List<?>> execSql(String qry) {
> return grid(0).context().query()
> .querySqlFields(new SqlFieldsQuery(qry).setLazy(true), false)
> .getAll();
> }
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)