5050import org .jkiss .dbeaver .utils .RuntimeUtils ;
5151import org .jkiss .utils .CommonUtils ;
5252
53+ import java .lang .ref .SoftReference ;
5354import java .lang .reflect .InvocationTargetException ;
5455import java .time .Instant ;
5556import java .time .ZoneId ;
@@ -72,7 +73,7 @@ public class WebSQLContextInfo implements WebSessionProvider {
7273 private final String id ;
7374 private final String projectId ;
7475 private final Map <String , WebSQLResultsInfo > resultInfoMap = new HashMap <>();
75- private final Map <String , WebSQLQueryResults > queryResultsMap = new HashMap <>();
76+ private final Map <String , SoftReference < WebSQLQueryResults > > queryResultsMap = new HashMap <>();
7677
7778 private final AtomicInteger resultId = new AtomicInteger ();
7879
@@ -195,15 +196,16 @@ public WebSQLResultsInfo getResults(@NotNull String resultId) throws DBWebExcept
195196
196197 @ Nullable
197198 public WebSQLQueryResults getQueryResults (@ NotNull String resultId ) throws DBWebException {
198- return queryResultsMap .get (resultId );
199+ SoftReference <WebSQLQueryResults > reference = queryResultsMap .get (resultId );
200+ return reference == null ? null : reference .get ();
199201 }
200202
201203 public void trySaveQueryResults (@ NotNull WebSQLQueryResults [] resultsArray , int requestedLimit ) {
202204
203205 boolean isSingleResult = resultsArray .length == 1 ;
204206 int actualRowCount = isSingleResult ? resultsArray [0 ].getResultSet ().getRows ().length : 0 ;
205207 if (isSingleResult && actualRowCount < Math .min (requestedLimit , MAX_RESULT_SET_SIZE )) {
206- queryResultsMap .put (resultsArray [0 ].getResultSet ().getId (), resultsArray [0 ]);
208+ queryResultsMap .put (resultsArray [0 ].getResultSet ().getId (), new SoftReference <>( resultsArray [0 ]) );
207209 }
208210 }
209211
0 commit comments