In writing some code on:
Cache for Windows (x86-64) 2015.1 (Build 429U) Fri Feb 13 2015 14:37:23 EST
I noticed an unexpected "ROLLFAIL" error when a Unique Index fail was generated in a %Save() call.
The object SHOULD fail to save, since the Unique criteria is not met, but I didn't expect to see a ROLLFAIL error as the "Last Error".
When running the following class code:
Class BUG.Test Extends %Persistent
{
Property Field1 As %String;
Property Field2 As %String;
Index idx1 On Field1 [ Unique ];
ClassMethod Test()
{
kill ^BUG.TestD
kill ^BUG.TestI
; Should work fine
set record1 = ##class(BUG.Test).%New()
set record1.Field1 = "Bosco"
set record1.Field2 = "Jones"
set sc = record1.%Save()
if $$$ISERR(sc) {
do $System.OBJ.DisplayError(sc)
} else {
write !,"Save OK ID: "_record1.%Id()
}
; Should work fine
set record2 = ##class(BUG.Test).%New()
set record2.Field1 = "Waffles"
set record2.Field2 = "Syrup"
set sc = record2.%Save()
if $$$ISERR(sc) {
do $System.OBJ.DisplayError(sc)
} else {
write !,"Save OK ID: "_record2.%Id()
}
; Should fail on duplicate "unique" value for Field1
set record3 = ##class(BUG.Test).%New()
set record3.Field1 = "Bosco"
set record3.Field2 = "Jones"
set sc = record3.%Save()
if $$$ISERR(sc) {
do $System.OBJ.DisplayError(sc)
} else {
write !,"Save OK ID: "_record3.%Id()
}
}