diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLQueryResultColumn.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLQueryResultColumn.java index 1f03d70e0b..bdd64b4d08 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLQueryResultColumn.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLQueryResultColumn.java @@ -49,7 +49,7 @@ public class WebSQLQueryResultColumn { @Property public String getName() { - return attrMeta.getFullyQualifiedName(DBPEvaluationContext.UI); + return WebSQLUtils.getColumnName(attrMeta); } @Property diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLUtils.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLUtils.java index 45e7f42b43..ea5f224afa 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLUtils.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLUtils.java @@ -23,6 +23,7 @@ import io.cloudbeaver.utils.CBModelConstants; import io.cloudbeaver.utils.ServletAppUtils; import org.jkiss.code.NotNull; import org.jkiss.dbeaver.Log; +import org.jkiss.dbeaver.model.DBPEvaluationContext; import org.jkiss.dbeaver.model.data.*; import org.jkiss.dbeaver.model.exec.DBCException; import org.jkiss.dbeaver.model.exec.DBCSession; @@ -255,4 +256,12 @@ public class WebSQLUtils { } return value; } + + /** + * Returns fully qualified name for a column. + */ + @NotNull + public static String getColumnName(@NotNull DBDAttributeBinding binding) { + return binding.getFullyQualifiedName(DBPEvaluationContext.UI); + } } 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 353040434f..ed88102bd0 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 @@ -20,6 +20,7 @@ package io.cloudbeaver.service.sql.impl; import io.cloudbeaver.DBWebException; import io.cloudbeaver.model.WebAsyncTaskInfo; import io.cloudbeaver.model.WebConnectionInfo; +import io.cloudbeaver.model.WebTransactionLogInfo; import io.cloudbeaver.model.session.WebAsyncTaskProcessor; import io.cloudbeaver.model.session.WebSession; import io.cloudbeaver.service.WebServiceBindingBase; @@ -42,7 +43,6 @@ import org.jkiss.dbeaver.model.exec.trace.DBCTraceProperty; import org.jkiss.dbeaver.model.impl.sql.BasicSQLDialect; import org.jkiss.dbeaver.model.navigator.DBNModel; import org.jkiss.dbeaver.model.navigator.DBNNode; -import io.cloudbeaver.model.WebTransactionLogInfo; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.sql.*; import org.jkiss.dbeaver.model.sql.completion.SQLCompletionAnalyzer; @@ -555,13 +555,18 @@ public class WebServiceSQL implements DBWServiceSQL { try { WebSQLResultsInfo resultsInfo = contextInfo.getResults(resultsId); + List groupingAttributes = Arrays.stream(resultsInfo.getAttributes()) + .filter(attr -> columnsList.contains(WebSQLUtils.getColumnName(attr))) + .map(SQLGroupingAttribute::makeBound) + .toList(); + var dataSource = contextInfo.getProcessor().getConnection().getDataSource(); var groupingQueryGenerator = new SQLGroupingQueryGenerator( dataSource, resultsInfo.getDataContainer(), getSqlDialectFromConnection(dataSource.getContainer()), contextInfo.getProcessor().getSyntaxManager(), - columnsList.stream().map(s -> SQLGroupingAttribute.makeCustom(dataSource, s)).toList(), + groupingAttributes, functions == null ? List.of(SQLGroupingQueryGenerator.DEFAULT_FUNCTION) : functions, // backward compatibility CommonUtils.getBoolean(showDuplicatesOnly, false)); return groupingQueryGenerator.generateGroupingQuery(resultsInfo.getQueryText());