You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Georgi Naplatanov (JIRA)" <ji...@apache.org> on 2010/10/20 12:59:22 UTC
[jira] Updated: (OPENJPA-1846) Generates wrong SQL when subqueries
are used
[ https://issues.apache.org/jira/browse/OPENJPA-1846?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Georgi Naplatanov updated OPENJPA-1846:
---------------------------------------
Attachment: CmsDAOOfflineStructure.java
CmsDAOOfflineResources.java
CmsDAOLog.java
> Generates wrong SQL when subqueries are used
> --------------------------------------------
>
> Key: OPENJPA-1846
> URL: https://issues.apache.org/jira/browse/OPENJPA-1846
> Project: OpenJPA
> Issue Type: Bug
> Affects Versions: 2.0.1, 2.1.0
> Environment: PostgreSQL 8.3, Java 1.6
> Reporter: Georgi Naplatanov
> Priority: Blocker
> Attachments: CmsDAOLog.java, CmsDAOOfflineResources.java, CmsDAOOfflineStructure.java
>
>
> The generated SQL declaring twice some tables in the "FROM" statement.
> ============================
> JPQL
> ============================
> SELECT
> T_CmsDAOOfflineResources,
> T_CmsDAOOfflineStructure,
> T_CmsDAOOfflineResources.m_projectLastModified,
> MAX(T_CmsDAOLog.m_logDate)
> FROM
> CmsDAOOfflineResources
> T_CmsDAOOfflineResources,
> CmsDAOOfflineStructure T_CmsDAOOfflineStructure,
> CmsDAOLog T_CmsDAOLog
> WHERE
> 20 < (
> SELECT
> T1_CmsDAOLog.m_logType
> FROM
> CmsDAOLog T1_CmsDAOLog
> WHERE
> T1_CmsDAOLog.m_userId = ?1
> AND T1_CmsDAOLog.m_structureId = T_CmsDAOLog.m_structureId
> AND T1_CmsDAOLog.m_logDate = (
> " SELECT MAX(T2_CmsDAOLog.m_logDate)
> " FROM CmsDAOLog T2_CmsDAOLog
> " WHERE T2_CmsDAOLog.m_structureId = T1_CmsDAOLog.m_structureId
> " )
> )
> AND T_CmsDAOLog.m_structureId=T_CmsDAOOfflineStructure.m_structureId
> AND T_CmsDAOOfflineStructure.m_resourceId=T_CmsDAOOfflineResources.m_resourceId
> AND T_CmsDAOLog.m_userId = ?2
> AND T_CmsDAOLog.m_structureId IS NOT NULL
> GROUP BY
> T_CmsDAOOfflineResources,
> T_CmsDAOOfflineStructure,
> T_CmsDAOOfflineResources.m_projectLastModified
> ============================
> Generated wrong SQL
> ============================
> SELECT
> t6.resource_id,
> t5.structure_id,
> t6.project_lastmodified,
> MAX(t4.log_date)
> FROM
> public.cms_log t1, --twice
> public.cms_log t4,
> public.cms_offline_structure t5,
> public.cms_offline_resources t6
> WHERE
> (? < (
> SELECT t0.log_type
> FROM
> public.cms_log t0,--twice
> public.cms_log t3
> WHERE (
> t0.user_id = ?
> AND t0.structure_id = t1.structure_id
> AND t0.log_date = (
> SELECT MAX(t2.log_date)
> FROM public.cms_log t2
> WHERE (
> t2.structure_id = t3.structure_id)
> )
> )
> )
> AND t4.structure_id = t5.structure_id
> AND t5.resource_id = t6.resource_id
> AND t4.user_id = ?
> AND t4.structure_id IS NOT NULL
> )
> GROUP BY
> t6.resource_id,
> t5.structure_id,
> t6.project_lastmodified
> ===============================
> Corrected SQL
> ===============================
> SELECT
> t6.resource_id,
> t5.structure_id,
> t6.project_lastmodified,
> MAX(t4.log_date)
> FROM
> public.cms_log t4,
> public.cms_offline_structure t5,
> public.cms_offline_resources t6
> WHERE
> (20 < (
> SELECT t0.log_type
> FROM
> public.cms_log t0
> WHERE (
> t0.user_id = ?
> AND t0.structure_id = t4.structure_id
> AND t0.log_date = (
> SELECT MAX(t2.log_date)
> FROM public.cms_log t2
> WHERE (
> t2.structure_id = t0.structure_id)
> )
> )
> )
> AND t4.structure_id = t5.structure_id
> AND t5.resource_id = t6.resource_id
> AND t4.user_id = ?
> AND t4.structure_id IS NOT NULL
> )
> GROUP BY
> t6.resource_id,
> t5.structure_id,
> t6.project_lastmodified
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.