diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/data/PostgreRefCursorValueHandler.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/data/PostgreRefCursorValueHandler.java index fb2330d31a1ec38876bb02904d68f5a565cf5aa8..65cbe909b77fd1c4a3ec81c1ec3debfde0c8de7e 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/data/PostgreRefCursorValueHandler.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/data/PostgreRefCursorValueHandler.java @@ -16,30 +16,18 @@ */ package org.jkiss.dbeaver.ext.postgresql.model.data; -import org.jkiss.code.NotNull; -import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.Log; -import org.jkiss.dbeaver.ext.postgresql.PostgreUtils; -import org.jkiss.dbeaver.ext.postgresql.model.PostgreDataSource; -import org.jkiss.dbeaver.ext.postgresql.model.PostgreDataType; -import org.jkiss.dbeaver.ext.postgresql.model.PostgreDataTypeAttribute; -import org.jkiss.dbeaver.model.data.DBDComposite; import org.jkiss.dbeaver.model.exec.DBCException; import org.jkiss.dbeaver.model.exec.DBCSession; import org.jkiss.dbeaver.model.exec.jdbc.JDBCPreparedStatement; import org.jkiss.dbeaver.model.exec.jdbc.JDBCResultSet; import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession; -import org.jkiss.dbeaver.model.impl.jdbc.JDBCStructImpl; -import org.jkiss.dbeaver.model.impl.jdbc.data.JDBCComposite; -import org.jkiss.dbeaver.model.impl.jdbc.data.JDBCCompositeStatic; +import org.jkiss.dbeaver.model.impl.jdbc.data.JDBCCursor; import org.jkiss.dbeaver.model.impl.jdbc.data.handlers.JDBCStructValueHandler; import org.jkiss.dbeaver.model.struct.DBSTypedObject; +import java.sql.ResultSet; import java.sql.SQLException; -import java.sql.Struct; -import java.sql.Types; -import java.util.Collection; -import java.util.Iterator; /** * PostgreArrayValueHandler @@ -52,7 +40,14 @@ public class PostgreRefCursorValueHandler extends JDBCStructValueHandler { protected Object fetchColumnValue(DBCSession session, JDBCResultSet resultSet, DBSTypedObject type, int index) throws DBCException, SQLException { // Fetch as string (#1735) // Fetching cursor as object will close it so it won;'t be possible to use cursor in consequent queries - return resultSet.getString(index); + Object object = resultSet.getObject(index); + if (object instanceof ResultSet) { + return new JDBCCursor( + (JDBCSession) session, + (ResultSet) object, + type.getTypeName()); + } + return object; } @Override diff --git a/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/data/dialogs/CursorViewDialog.java b/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/data/dialogs/CursorViewDialog.java index c959b623310270954a6ab5ffbf68c8028a466f98..f5eb4b94b37e6a334c060e53a8698415946636e4 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/data/dialogs/CursorViewDialog.java +++ b/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/data/dialogs/CursorViewDialog.java @@ -179,7 +179,12 @@ public class CursorViewDialog extends ValueViewDialog implements IResultSetConta @Override public IResultSetDecorator createResultSetDecorator() { - return new QueryResultsDecorator(); + return new QueryResultsDecorator() { + @Override + public long getDecoratorFeatures() { + return FEATURE_PANELS | FEATURE_STATUS_BAR; + } + }; } private class CursorDataContainer implements DBSDataContainer { @@ -197,6 +202,11 @@ public class CursorViewDialog extends ValueViewDialog implements IResultSetConta { DBCStatistics statistics = new DBCStatistics(); DBRProgressMonitor monitor = session.getProgressMonitor(); + try { + value.moveTo((int) firstRow); + } catch (DBCException e) { + log.debug(e); + } DBCResultSet dbResult = value; try { long startTime = System.currentTimeMillis();