EnterpriseDB / mysql_fdw

PostgreSQL foreign data wrapper for MySQL
Other
533 stars 163 forks source link

Empty Results when using limit and joins #166

Closed Ladeburger closed 5 years ago

Ladeburger commented 6 years ago

Hello

I have 3 Tables:

Postgres: findings findingstates

mysql: tbl_node

the Connections are: 1 tbl_node to N findings (findings.system_id = tbl_node.node_id) 1 findingstate to N findings (findings.findingstate_id = findingstate.id)

the query is:

SELECT  
  "findings"."id" AS finding_id, 
  "findings"."system_id" AS system_id, 
  "findingstates"."id" AS findingstate_id, 
  "findingstates"."state" AS state, 
  "tbl_node"."node_id" AS node_id, 
  "tbl_node"."Node" AS nodename, 
  "tbl_node"."Beschreibung" AS description 
FROM "findings" 
  LEFT OUTER JOIN "findingstates" ON "findingstates"."id" = "findings"."findingstate_id" 
  LEFT OUTER JOIN "tbl_node" ON "tbl_node"."node_id" = "findings"."system_id" 
WHERE 
  "findings"."vulnerability_id" = 983 
  AND ("findings"."findingstate_id" != 4) 
  AND ("findingstates"."id" in (0,1,2)) 
ORDER BY "tbl_node"."Node" ASC, "findings"."id";

The Result is:

 finding_id | system_id | findingstate_id | state | node_id |   nodename    |                        description                         
------------+-----------+-----------------+-------+---------+---------------+------------------------------------------------------------
      65143 |      2149 |               2 | open  |    2149 | ANP1620       | Vault-Library
      65970 |      4632 |               2 | open  |    4632 | qdc1l7001     | IHG Prod Oracle Database Machine
      65977 |      4633 |               2 | open  |    4633 | qdc1l7002     | IHG Test Oracle Database Machine

BUT: if i add "limit X" (even with X much larger than the expected Result set) i got:

finding_id | system_id | findingstate_id | state | node_id | nodename |   description    
------------+-----------+-----------------+-------+---------+----------+------------------
      79450 |     10154 |               1 | new   |   10154 | VLTN191  | CR379154/T596049
      56858 |      2891 |               2 | open  |         |          | 
      56877 |      6117 |               2 | open  |         |          | 
      57066 |      2202 |               2 | open  |         |          | 

And, to make things more difficult, if i remove the (obsolete) "AND ("findings"."findingstate_id" != 4)" part from the query, the resultset is OK again, with or without the limit does'nt matter.

Ladeburger commented 5 years ago

Solved in Postgres11 with a newer Version of mysql_fdw (Tested is a4b88210a8ebc08d979a21261bc4a0b9761d0714)