stream class %Stream.DynamicCharacter extends %Stream.Object
%Stream.DynamicCharacter character stream containing
the textual value of
an element of a %DynamicAbstractObject. It is
particularly useful for
holding the value of a %DynamicAbstractObject element
with a textual
value that would exceed the capacity of an ObjectScript string variable.
A %Stream.DynamicCharacter object is readonly and it
cannot be modified or saved.
But it can be copied to any other %Stream class object that does support
modification and saving.
The only way to create a %Stream.DynamicCharacter
is by making a method call that
looks like dao.%Get(key,default,"stream") where dao is
n object reference
to a subclass of %DynamicAbstractObject; and
where key is the key name
value of an element of a %DynamicObject or the index value of an
element of a %DynamicArray.
Position is a read-only property containing the
current character
position of the %Stream.DynamicCharacter. The next
Read()() method call will
start reading at this character position. Character position 1 is the
position of the first character in the stream. When Position
contains the value 1 then the first Read()() (after
creation of the stream or
after execution of the Rewind()() method) has not yet
been executed. After
the last character has been read then Position will again contain
the value 1.
private classmethod %DeleteData(streamvalue As %String, concurrency As %Integer) as %Status [ Language = objectscript ]
private classmethod %GetLockReference(pLocation As %String(MAXLEN="")="", pId As %String(MAXLEN="")="") as %String [ Language = objectscript ]
Returns the global reference used to lock the current stream object.
method %IsModified() as %Integer [ Language = objectscript ]
Inherited description: Returns true (1) if a property of this instance has been modified, otherwise false (0).
A TRUE result does not necessarily mean that any property has actually been changed. If
%IsModified() returns false then the object has not been modified. There are some
situations where we simply cannot efficiently detect a change in value. In these cases we
will set the modified status of the property.
method %IsNull() as %Boolean [ Language = objectscript ]
Returns true if this is a "NULL" stream; that is, a stream which has never
been written to and saved. This is used by the InterSystems IRIS ODBC
server. But a %Stream.DynamicCharacter is never NULL,
even if it only contains the
empty string.
private method %LoadData(id As %String) as %Status [ Language = objectscript ]
method %LocationSet(val As %String) as %Status [ Language = objectscript ]
private classmethod %LogicalToStorage(val As %String) as %String [ Language = objectscript ]
method %NormalizeObject() as %Status [ Language = objectscript ]
Inherited description: Normalizes all of an object's property values by invoking the data type Normalize methods.
Many data types may allow many different representations of the same value.
Normalization converts a value to its cannonical, or normalized, form.
method %ObjectModified() as %Integer [ Language = objectscript ]
Inherited description: This method is somewhat similar to %IsModified but it also checks to see if swizzled
references would cause the object to become modified should they be serialized. This works
on the assumption that a reference to a persistent object will never be modified if the ID has
already been assigned. For references to serial objects, a call to %ObjectModified indicates
whether or not the serialized value is different. If the reference to a swizzled object is
different from the initial object state then the $$$objModAll macro will already return true.
Reference the Set code.
Returns true (1) if this instance has been modified, otherwise false (0).
private method %OnClose() as %Status [ Language = objectscript ]
Inherited description: This callback method is invoked by the %Close() method to
provide notification that the current object is being closed.
Inherited description: This callback method is invoked by the %ConstructClone() method to
provide notification that a clone of an object is being created. It passes in the
oref of the object that was cloned in object.
If this method returns an error then the object will not be created.
private method %OnNew(initval) as %Status [ Language = objectscript ]
Inherited description: This callback method is invoked by the %New() method to
provide notification that a new instance of an object is being created.
If this method returns an error then the object will not be created.
It is passed the arguments provided in the %New call.
When customizing this method, override the arguments with whatever variables and types you expect to receive from %New().
For example, if you're going to call %New, passing 2 arguments, %OnNew's signature could be:
Method %OnNew(dob as %Date = "", name as %Name = "") as %Status
If instead of returning a %Status code this returns an oref and this oref is a subclass of the current
class then this oref will be the one returned to the caller of %New method.
private method %OnRollBack() as %Status [ Language = objectscript ]
Inherited description: This callback method is invoked by the %Save() method to
provide notification that a save transaction is being rolled back.
If this method returns an error then the rollback operation will be aborted.
private method %SaveData(ByRef sid As %String) as %Status [ Language = objectscript ]
private classmethod %StorageToLogical(val As %String) as %String [ Language = objectscript ]
Inherited description: This method validates an object. The %Save method of a persistent class calls it before filing any objects in the database.
The %ValidateObject method of a referencing object can call it. You can also call it explicitly at any time.
It tests if any required property values are missing.
If the PROPERTYVALIDATION class parameter is set to ValidateOnSave,
it validates each non-null property value by calling the property method IsValid on each literal property and the object's %ValidateObject method for object-valued properties.
If any of these tests fail, %ValidateObject() immediately returns an error value. It is up to the caller
of %ValidateObject to process the error value.
unused is not used. checkserial will force the checking of any serial properties by calling their %ValidateObject methods after swizzling
this property.
Returns a %Status value indicating success or failure.
private method BuildValueArray(ByRef subvalue As %String) as %Status [ Language = objectscript ]
Callback for searchable stream
method Clear(permanent As %Boolean = 1) as %Status [ Language = objectscript ]
method Flush() as %Status [ Language = objectscript ]
Inherited description: Flush any output in the stream not already saved.
method IsNull() as %Boolean [ Language = objectscript ]
Returns true if this is a "NULL" stream; that is, a stream which has never
been written to and saved. This is used by the InterSystems IRIS ODBC
server. But a %Stream.DynamicCharacter is never NULL, even if it only contains the
empty string.
method MoveTo(position As %Integer) as %Boolean [ Language = objectscript ]
Move to this position in the stream. If this succeeds then return
true, else return false.
MoveTo()(1) is equivalent to a Rewind()().
MoveTo()(1) will always succeed
and it will position the %Stream.DynamicCharacter at
character position 1 even if the
%Stream.DynamicCharacter contains no characters.
Moving to position 1 (or earlier)
will be at the first character of the stream; position 2 will be at the
second character of the stream, etc.
method MoveToEnd() as %Status [ Language = objectscript ]
method OutputToDevice(ByRef len As %Integer = -1) as %Status [ Language = objectscript ]
Write out len characters of the stream to the current device
starting from the current position. If len is omitted
or set to -1 then the OutputToDevice() method
will write out the entire stream starting at the beginning and then
rewind back to the beginning. If len>0 and we are unable to
write len
characters because we reach the end of the stream then we will stop writing
and set the AtEnd property to 1. Otherwise, we will leave
the stream positioned after the last character written to the device.
If parameter len
is passed by reference and if no error occurs then the number of
characters actually written to the output device will be assigned
to len.
If zero characters are written because we are already positioned at the end
of the stream then len will be assigned to -1.
If an error occurs while writing the device then len will be assigned
to -2, an error %Status value will be returned and the stream
will rollback to its original position.
method PositionGet() as %Integer [ Language = objectscript ]
Implements Property Position
which contains
the current position within the data stream.
method Read(ByRef len As %Integer = ..#READLEN, ByRef sc As %Status) as %String [ Language = objectscript ]
Inherited description: Reads up to len characters from the current position
in the stream. The current position is advanced by the number of
characters read. Upon exit, len is set to the actual
number of characters read. If a read occurs when the stream position
is at the end of the stream, len will be set to -1 and
Read() will return a null string (""). If no len
is passed in, ie. 'Read()()' then it is up to the Read implementation as to
how much data to return. Some stream classes use this to optimize the amount of
data returned to align this with the underlying storage of the stream.
You must call Rewind() if you want to read a stream from the beginning
again. Calling Read() after Write() implicitly ends the Write()
operation and rewinds to the start of the stream.
Returns a string up to len characters long. The byref argument sc will
return a %Status if any error occurred during the read.
method ReadLine(ByRef len As %Integer = ..#READLEN, ByRef sc As %Status, ByRef eol As %Boolean) as %String [ Language = objectscript ]
Inherited description: Read a line from the stream. This will look for the line terminator in the stream and
once it finds the terminator it will return the string minus the terminator character/s. If it reaches the
end of the stream before it finds a terminator it will return the data it has so far, and if you specify a
maximum size in len it will only read up to this number of characters. On exit len
will contain the actual number of characters read. The byref argument sc will
return a %Status() if any error occured during the read and the byref argument eol
is true if it found the line terminator and false otherwise. So for example you can read in a stream
a line at a time and output the results to the current device with:
While 'stream.AtEnd { Write stream.ReadLine(,.sc,.eol) If $$$ISERR(sc) { Write "ERROR" Quit } If eol { Write ! } }
method ReadLineIntoStream(ByRef sc As %Status) as %Stream.Object [ Language = objectscript ]
This reads from the stream until it finds the
LineTerminator and returns a new
%Stream.TmpCharacter
stream containing the characters in the line. If the stream does not contain
the line terminator then this can potentially be the
entire stream.
method Rewind() as %Status [ Language = objectscript ]
Inherited description: Go back to the start of the stream.
method SizeGet() as %Integer [ Language = objectscript ]
Implements Property Size
which contains
the current size of the data stream.