Does not work with dynamic object class properties unfortunately:
Class User.DO Extends %Persistent
{
Property MyProp As %DynamicObject;
/// do ##class(User.DO).Test()
ClassMethod Test()
{
do ..%KillExtent()
// 11 = $length({"prop":""}.%ToJSON())
for len = 100, $$$MaxStringLength - 11, $$$MaxStringLength - 11 + 1 {
set sc = ..Create(len)
write "len: ", len, " result: ", $case($$$ISOK(sc), $$$YES: "OK", : "ERROR: " _ $system.Status.GetErrorText(sc)), !
quit:$$$ISERR(sc)
}
}
ClassMethod Create(len) As %Status
{
set obj = ..%New()
do obj.MyProp.%Set("prop", ..GetStream(len), "stream")
set sc = obj.%Save()
quit sc
}
ClassMethod GetStream(len) As %Stream.TmpCharacter
{
set chunk = 1000000
set stream = ##class(%Stream.TmpCharacter).%New()
for i=1:chunk:len-chunk {
do stream.Write($tr($j("", chunk)," ", 0))
}
do stream.Write($tr($j("", len#chunk)," ", 0))
quit stream
}
}Results in:
len: 100 result: OK
len: 3641133 result: OK
len: 3641134 result: ERROR: ERROR #5002: ObjectScript error: <MAXSTRING>%GetSerial+1^%Library.DynamicAbstractObject.1 [%GetSerial+1^%Library.DynamicAbstractObject.1:XF]Same issue if there are several short properties in dynamic object with total length > 3641144 characters.
We need something like:
Property MyProp As %DynamicObject(STORAGE="stream");- Log in to post comments