From 9a46bb2a885bd6f7494836aaec4cd32b56c0dd3f Mon Sep 17 00:00:00 2001 From: Alexander Skoblikov Date: Mon, 15 Apr 2024 19:29:57 +0400 Subject: [PATCH] CB-4502 dpi sql execute support (#2542) * CB-4502 wip * CB-4502 DPI: read data from container and script execution support --------- Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com> --- .../service/sql/WebSQLCellValueReceiver.java | 2 +- .../io/cloudbeaver/service/sql/WebSQLContextInfo.java | 2 +- .../io/cloudbeaver/service/sql/WebSQLProcessor.java | 2 +- .../service/sql/WebSQLQueryDataContainer.java | 11 ++++++++++- .../service/sql/WebSQLQueryDataReceiver.java | 2 +- .../cloudbeaver/service/sql/WebSQLQueryResultSet.java | 6 ++---- .../cloudbeaver/service/sql/impl/WebServiceSQL.java | 4 +++- 7 files changed, 19 insertions(+), 10 deletions(-) diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLCellValueReceiver.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLCellValueReceiver.java index 60f151df2a..65fa368a5d 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLCellValueReceiver.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLCellValueReceiver.java @@ -43,7 +43,7 @@ public class WebSQLCellValueReceiver implements DBDDataReceiver { @Override public void fetchStart(@NotNull DBCSession session, @NotNull DBCResultSet resultSet, long offset, long maxRows) throws DBCException { DBCResultSetMetaData meta = resultSet.getMeta(); - List attributes = meta.getAttributes(); + List attributes = meta.getAttributes(); DBCAttributeMetaData attrMeta = attributes.get(rowIndex); binding = new DBDAttributeBindingMeta(dataContainer, resultSet.getSession(), attrMeta); } diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLContextInfo.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLContextInfo.java index 4856ed809b..13862f2125 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLContextInfo.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLContextInfo.java @@ -51,7 +51,7 @@ public class WebSQLContextInfo implements WebSessionProvider { private static final Log log = Log.getLog(WebSQLContextInfo.class); - private final WebSQLProcessor processor; + private final transient WebSQLProcessor processor; private final String id; private final String projectId; private final Map resultInfoMap = new HashMap<>(); diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLProcessor.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLProcessor.java index a6b01c916d..0e66210d10 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLProcessor.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLProcessor.java @@ -1062,7 +1062,7 @@ public class WebSQLProcessor implements WebSessionProvider { DBDAttributeBinding[] resultsAttributes = results.getAttributes(); DBCResultSetMetaData rsMeta = resultSet.getMeta(); - List keyAttributes = rsMeta.getAttributes(); + List keyAttributes = rsMeta.getAttributes(); for (int i = 0; i < keyAttributes.size(); i++) { DBCAttributeMetaData keyAttribute = keyAttributes.get(i); DBDValueHandler valueHandler = DBUtils.findValueHandler(session, keyAttribute); diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLQueryDataContainer.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLQueryDataContainer.java index 0c5d2c0d2f..b8ab7b7af7 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLQueryDataContainer.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLQueryDataContainer.java @@ -94,7 +94,16 @@ public class WebSQLQueryDataContainer implements DBSDataContainer, DBPContextPro @NotNull @Override - public DBCStatistics readData(@NotNull DBCExecutionSource source, @NotNull DBCSession session, @NotNull DBDDataReceiver dataReceiver, @Nullable DBDDataFilter dataFilter, long firstRow, long maxRows, long flags, int fetchSize) throws DBCException { + public DBCStatistics readData( + @Nullable DBCExecutionSource source, + @NotNull DBCSession session, + @NotNull DBDDataReceiver dataReceiver, + @Nullable DBDDataFilter dataFilter, + long firstRow, + long maxRows, + long flags, + int fetchSize + ) throws DBCException { return queryDataContainer.readData(source, session, dataReceiver, dataFilter, firstRow, maxRows, flags, fetchSize); } diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLQueryDataReceiver.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLQueryDataReceiver.java index de21430566..957b322f7f 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLQueryDataReceiver.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLQueryDataReceiver.java @@ -65,7 +65,7 @@ class WebSQLQueryDataReceiver implements DBDDataReceiver { @Override public void fetchStart(@NotNull DBCSession session, @NotNull DBCResultSet dbResult, long offset, long maxRows) throws DBCException { DBCResultSetMetaData meta = dbResult.getMeta(); - List attributes = meta.getAttributes(); + List attributes = meta.getAttributes(); bindings = new DBDAttributeBindingMeta[attributes.size()]; for (int i = 0; i < attributes.size(); i++) { DBCAttributeMetaData attrMeta = attributes.get(i); diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLQueryResultSet.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLQueryResultSet.java index 73adabbb4a..d7dba7e9cd 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLQueryResultSet.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLQueryResultSet.java @@ -19,11 +19,9 @@ package io.cloudbeaver.service.sql; import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.model.data.DBDAttributeBinding; import org.jkiss.dbeaver.model.meta.Property; -import org.jkiss.utils.Pair; -import java.util.Arrays; +import java.util.Collections; import java.util.List; -import java.util.Map; /** * Web SQL query resultset. @@ -33,7 +31,7 @@ public class WebSQLQueryResultSet { private static final Log log = Log.getLog(WebSQLQueryResultSet.class); private WebSQLQueryResultColumn[] columns; - private List rows; + private List rows = Collections.emptyList(); private boolean hasMoreData; private WebSQLResultsInfo resultsInfo; private boolean singleEntity = true; diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/impl/WebServiceSQL.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/impl/WebServiceSQL.java index e07d0e24cd..d6760fb16c 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/impl/WebServiceSQL.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/impl/WebServiceSQL.java @@ -33,7 +33,9 @@ import org.jkiss.dbeaver.model.DBPDataSource; import org.jkiss.dbeaver.model.DBPDataSourceContainer; import org.jkiss.dbeaver.model.DBUtils; import org.jkiss.dbeaver.model.data.DBDAttributeBinding; -import org.jkiss.dbeaver.model.exec.*; +import org.jkiss.dbeaver.model.exec.DBCException; +import org.jkiss.dbeaver.model.exec.DBCLogicalOperator; +import org.jkiss.dbeaver.model.exec.DBExecUtils; import org.jkiss.dbeaver.model.impl.sql.BasicSQLDialect; import org.jkiss.dbeaver.model.navigator.DBNNode; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;