Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dbupdates/patch20171011.sql =================================================================== diff -u --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dbupdates/patch20171011.sql (revision 0) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dbupdates/patch20171011.sql (revision ba995699c252120c1dfcbf13e0043993a804abe6) @@ -0,0 +1,31 @@ +-- Turn off autocommit, so nothing is committed if there is an error +SET AUTOCOMMIT = 0; +SET FOREIGN_KEY_CHECKS=0; +----------------------Put all sql statements below here------------------------- + +-- LDEV-4438 Add unique constraint to prevent duplicate results with 'latest' flag being ON + +--remove all duplicates that have identical pairs (assessment_uid, user_uid, latest) where latest=1 +DELETE a +FROM tl_laasse10_assessment_result as a, tl_laasse10_assessment_result as b +WHERE + (a.assessment_uid = b.assessment_uid OR a.assessment_uid IS NULL AND b.assessment_uid IS NULL) + AND (a.user_uid = b.user_uid OR a.user_uid IS NULL AND b.user_uid IS NULL) + AND (a.latest = b.latest AND latest = 1) + AND a.uid < b.uid; + +--set up tl_laasse10_assessment_result table to properly handle constraint +UPDATE tl_laasse10_assessment_result SET latest=NULL WHERE latest='0'; +ALTER TABLE tl_laasse10_assessment_result CHANGE COLUMN latest latest TINYINT(1) NULL DEFAULT NULL; + +--add unique constraint +ALTER TABLE tl_laasse10_assessment_result ADD UNIQUE KEY UQ_tl_laasse10_assessment_result_5 (assessment_uid, user_uid, latest); + +UPDATE lams_tool SET tool_version='20171011' WHERE tool_signature='laasse10'; + +----------------------Put all sql statements above here------------------------- + +-- If there were no errors, commit and restore autocommit to on +COMMIT; +SET AUTOCOMMIT = 1; +SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentResult.java =================================================================== diff -u -re10da332d88104fe61b1f646b8bcac22bbfd15f0 -rba995699c252120c1dfcbf13e0043993a804abe6 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentResult.java (.../AssessmentResult.java) (revision e10da332d88104fe61b1f646b8bcac22bbfd15f0) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentResult.java (.../AssessmentResult.java) (revision ba995699c252120c1dfcbf13e0043993a804abe6) @@ -42,7 +42,7 @@ //date when user has started activity (pressed start button) that has time limitation private Date timeLimitLaunchedDate; //indicates the latest retry - private boolean isLatest; + private Boolean isLatest; private Date finishDate; private AssessmentUser user; private Long sessionId; @@ -122,11 +122,11 @@ * * @return */ - public boolean isLatest() { + public Boolean isLatest() { return isLatest; } - public void setLatest(boolean isLatest) { + public void setLatest(Boolean isLatest) { this.isLatest = isLatest; } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -r60d9a173d5590295376322fc3e857ae2dca37717 -rba995699c252120c1dfcbf13e0043993a804abe6 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 60d9a173d5590295376322fc3e857ae2dca37717) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision ba995699c252120c1dfcbf13e0043993a804abe6) @@ -469,8 +469,9 @@ // mark previous attempt as being not the latest any longer } else { - lastResult.setLatest(false); + lastResult.setLatest(null); assessmentResultDao.saveObject(lastResult); + assessmentResultDao.flush(); } }