Class Reference
IRIS for UNIX 2024.1.2
InterSystems: The power behind what matters   
Documentation  Search
  [USER] >  [%Library] >  [ScrollableResultSet]
Private  Storage   

class %Library.ScrollableResultSet extends %Library.ResultSet

This provides a scrollable resultset object that can also be saved and loaded It works by running the entire query when the first item of data is requested and storing the results in a global. Then you can move around the results by setting the CurrRow and you may also call Previous as well as the standard Next. In addition you may save this resultset and then load it potentially in a different process at a later date and continue reading from it, for example:

	 Set results=##class(%ScrollableResultSet).%New("Classname:QueryName")
	Do results.Execute()
	Do results.Next()
	Write results.Data("fieldname")
	Do results.%Save()
	Set id=results.%Id()
	Kill results
	Set results=##class(%ScrollableResultSet).%OpenId(id)
	Do results.Next()
	Write results.Data("fieldname")
Note that if you open a %ScrollableResultSet and do not call %Save on it then when you close this object the data stored in the global will be removed and so you will not be able to open this resultset again. So if you open a scrollable resultset and you wish to use this again call %Save on it, but you must always make sure that when you are finished with it you do not call %Save so the temporary global used is cleaned up when you are done. Alterntively you can call %DeleteId passing the id to remove the saved data.

There is also a Count to find the total number of entries in this resultset. This will not work if running with a query against a remote linked table which returns stream data for a column because the remote linked table returns the stream as an oref and this class does not support persisting this oref.

Inventory

Parameters Properties Methods Queries Indices ForeignKeys Triggers
4 12


Summary

Properties
%Message %Metadata %PrivateTables %ROWCOUNT
%ROWID %ResultColumnCount %SQLCODE ClassName
CurrRow Data MaxRows QueryName
RuntimeMode

Methods
%AddToSaveSet %ClassIsLatestVersion %ClassName %CloseCursor
%ConstructClone %CreateSnapshot %DeleteId %DispatchClassMethod
%DispatchGetModified %DispatchGetProperty %DispatchMethod %DispatchSetModified
%DispatchSetMultidimProperty %Display %DisplayFormatted %Execute
%Extends %Get %GetData %GetMetadata
%GetParameter %Id %IsA %IsModified
%MetadataGet %New %Next %NormalizeObject
%ObjectModified %OpenId %OriginalNamespace %PackageName
%Prepare %PrepareMetaData %Print %RemoveFromSaveSet
%ResultColumnCountGet %Save %SendDelimitedRows %SendODBC
%SerializeObject %SetModified %ValidateObject ClassNameSet
Close ContainsId Count CurrRowSet
Execute Get GetColumnCount GetColumnExtInfo
GetColumnHeader GetColumnName GetColumnType GetData
GetDataByName GetExtent GetODBCInfo GetObject
GetParamCount GetParamName GetStatementType Load
Next Prepare Previous QueryIsValid
RunQuery RuntimeModeGet RuntimeModeSet SetIdInfo
Test


Properties

• property CurrRow as %Integer;
Number of current row in the temp table, you can set this property to move to a new location and also use this to check the current position. If you specify a value that is out of bounds then the row will not be moved. The first row is at CurrRow=1, so it is 1 based and not 0 based.
• property MaxRows as %Integer [ InitialExpression = 0 ];
This determines how many rows this query will load, the default '0' will load all the results, if you set it to 10,000 then it will only load the first 10,000 rows, which will mean you can not access any data beyond the 10,000th element. Also the actual stopping point may be slightly larger than MaxRows because of the way the data is imported, but it will be around this figure.

Methods

• classmethod %DeleteId(id As %String, concurrency As %Integer = -1) as %Status
• final method %Id() as %String
• classmethod %OpenId(id As %String, concurrency As %Integer = -1, ByRef sc As %Status = $$$OK) as %ObjectHandle
• method %Save() as %Status
• method Count() as %Integer
Returns the number of rows contained in this ResultSet.
• method CurrRowSet(val As %String) as %Status
This is a Set accessor method for the CurrRow property.
• method GetObject() as %RegisteredObject
If this query contains an object Id then this method opens an object with this Id and returns the object reference. Otherwise it returns a null object reference.
• method Load(id As %String) as %Status
• method Next(ByRef sc As %Status) as %Integer
Advance the result set cursor to the next row. Returns 0 if the cursor is at the end of the result set.
• method Previous(ByRef sc As %Status) as %Integer
Advance the result set cursor to the previous row. Returns 0 if the cursor is at the end of the result set.


Copyright (c) 2025 by InterSystems Corporation. Cambridge, Massachusetts, U.S.A. All rights reserved. Confidential property of InterSystems Corporation.