Uploaded image for project: 'Calcite'
  1. Calcite
  2. CALCITE-6221

JDBC adapter generates invalid query when the same table is joined multiple times

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.36.0
    • 1.39.0
    • core
    • Local development

    Description

      Adding the following unit test to JdbcAdapterTest

        @Test void testUnknownColumn() {
          CalciteAssert.model(JdbcTest.SCOTT_MODEL)
              .query("SELECT\n" +
                  "    \"content-format-owner\",\n" +
                  "    \"content-owner\"\n" +
                  "FROM\n" +
                  "    (\n" +
                  "        SELECT\n" +
                  "            d1.dname AS \"content-format-owner\",\n" +
                  "            d2.dname || ' ' AS \"content-owner\"\n" +
                  "        FROM\n" +
                  "            scott.emp e1\n" +
                  "            left outer join scott.dept d1 on e1.deptno = d1.deptno\n" +
                  "            left outer join scott.dept d2 on e1.deptno = d2.deptno\n" +
                  "            left outer join scott.emp e2 on e1.deptno = e2.deptno\n" +
                  "        GROUP BY\n" +
                  "            d1.dname,\n" +
                  "            d2.dname\n" +
                  "    )\n" +
                  "WHERE\n" +
                  "    \"content-owner\" IN (?)")
              .runs();
        }
      

      Fails because the following SQL is sent to the underlying database

      SELECT
          "t2"."DNAME" AS "content-format-owner",
          "t2"."DNAME0" || ' ' AS "content-owner"
      FROM
          (
              SELECT
                  *
              FROM
                  (
                      SELECT
                          "DEPTNO"
                      FROM
                          "SCOTT"."EMP"
                  ) AS "t"
                  LEFT JOIN (
                      SELECT
                          "DEPTNO",
                          "DNAME"
                      FROM
                          "SCOTT"."DEPT"
                  ) AS "t0" ON "t"."DEPTNO" = "t0"."DEPTNO"
                  LEFT JOIN (
                      SELECT
                          "DEPTNO",
                          "DNAME"
                      FROM
                          "SCOTT"."DEPT"
                  ) AS "t1" ON "t"."DEPTNO" = "t1"."DEPTNO"
              WHERE
                  "t1"."DNAME" || ' ' = ?
          ) AS "t2"
          LEFT JOIN (
              SELECT
                  "DEPTNO"
              FROM
                  "SCOTT"."EMP"
          ) AS "t3" ON "t2"."DEPTNO" = "t3"."DEPTNO"
      GROUP BY
          "t2"."DNAME",
          "t2"."DNAME0"
      

      The column "t2"."DNAME0" does not exist.

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              kramerul Ulrich Kramer
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: