=== modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/JdbcEventStore.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/JdbcEventStore.java 2015-04-21 19:00:43 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/JdbcEventStore.java 2015-04-21 19:26:43 +0000 @@ -185,22 +185,42 @@ return events; } + /** + * Query is based on three sub queries on event, data value and comment, which + * are joined using program stage instance id. The purpose of the separate + * queries is to be able to page properly on events. + */ private String buildSql( EventSearchParams params, List organisationUnits ) { + String sql = "select * from ("; + + sql += getEventQuery( params, organisationUnits ); + + sql += ") as event left join ("; + + sql += getDataValueQuery(); + + sql += ") as dv on event.psi_id=dv.pdv_id left join ("; + + sql += getCommentQuery(); + + sql += ") as cm on event.psi_id=cm.psic_id"; + + return sql; + } + + private String getEventQuery( EventSearchParams params, List organisationUnits ) + { List orgUnitIds = getIdList( organisationUnits ); SqlHelper hlp = new SqlHelper(); String sql = - "select psi.uid as psi_uid, psi.status as psi_status, psi.executiondate as psi_executiondate, psi.duedate as psi_duedate, psi.completeduser as psi_completeduser, " + + "select psi.programstageinstanceid as psi_id, psi.uid as psi_uid, psi.status as psi_status, psi.executiondate as psi_executiondate, psi.duedate as psi_duedate, psi.completeduser as psi_completeduser, " + "psi.longitude as psi_longitude, psi.latitude as psi_latitude, psi.created as psi_created, psi.lastupdated as psi_lastupdated, " + "pi.uid as pi_uid, pi.status as pi_status, pi.followup as pi_followup, p.uid as p_uid, p.code as p_code, " + "p.type as p_type, ps.uid as ps_uid, ps.code as ps_code, ps.capturecoordinates as ps_capturecoordinates, " + - "ou.uid as ou_uid, ou.code as ou_code, ou.name as ou_name, tei.uid as tei_uid, " + - "psinote.trackedentitycommentid as psinote_id, psinote.commenttext as psinote_value, " + - "psinote.createddate as psinote_storeddate, psinote.creator as psinote_storedby, " + - "pdv.value as pdv_value, pdv.storedby as pdv_storedby, pdv.providedelsewhere as pdv_providedelsewhere, " + - "de.uid as de_uid, de.code as de_code " + + "ou.uid as ou_uid, ou.code as ou_code, ou.name as ou_name, tei.uid as tei_uid " + "from programstageinstance psi " + "inner join programinstance pi on pi.programinstanceid=psi.programinstanceid " + "inner join program p on p.programid=pi.programid " + @@ -215,13 +235,7 @@ { sql += "left join organisationunit ou on (tei.organisationunitid=ou.organisationunitid) "; } - - sql += - "left join programstageinstancecomments psic on psi.programstageinstanceid=psic.programstageinstanceid " + - "left join trackedentitycomment psinote on psic.trackedentitycommentid=psinote.trackedentitycommentid " + - "left join trackedentitydatavalue pdv on psi.programstageinstanceid=pdv.programstageinstanceid " + - "left join dataelement de on pdv.dataelementid=de.dataelementid "; - + if ( params.getTrackedEntityInstance() != null ) { sql += hlp.whereAnd() + " tei.trackedentityinstanceid=" + params.getTrackedEntityInstance().getId() + " "; @@ -323,4 +337,26 @@ return sql; } + + private String getDataValueQuery() + { + String sql = + "select pdv.programstageinstanceid as pdv_id, pdv.value as pdv_value, pdv.storedby as pdv_storedby, pdv.providedelsewhere as pdv_providedelsewhere, " + + "de.uid as de_uid, de.code as de_code " + + "from trackedentitydatavalue pdv " + + "inner join dataelement de on pdv.dataelementid=de.dataelementid "; + + return sql; + } + + private String getCommentQuery() + { + String sql = + "select psic.programstageinstanceid as psic_id, psinote.trackedentitycommentid as psinote_id, psinote.commenttext as psinote_value, " + + "psinote.createddate as psinote_storeddate, psinote.creator as psinote_storedby " + + "from programstageinstancecomments psic " + + "inner join trackedentitycomment psinote on psic.trackedentitycommentid=psinote.trackedentitycommentid "; + + return sql; + } }