CB-1157 Use result info to detect proper attribute data type

This commit is contained in:
Serge Rider
2021-09-30 15:30:15 +03:00
parent be9b374d24
commit f7968ac57a
2 changed files with 30 additions and 2 deletions
@@ -23,9 +23,9 @@ import org.jkiss.dbeaver.model.data.DBDAttributeConstraint;
import org.jkiss.dbeaver.model.data.DBDDataFilter;
import org.jkiss.dbeaver.model.exec.DBCLogicalOperator;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSAttributeBase;
import org.jkiss.dbeaver.model.struct.DBSDataContainer;
import org.jkiss.dbeaver.model.struct.DBSEntity;
import org.jkiss.dbeaver.model.struct.DBSEntityAttribute;
import org.jkiss.utils.CommonUtils;
import java.util.ArrayList;
@@ -108,7 +108,10 @@ public class WebSQLDataFilter {
for (WebSQLDataFilterConstraint webConstr : constraints) {
DBDAttributeConstraint dbConstraint;
if (dataContainer instanceof DBSEntity) {
DBSEntityAttribute attribute = ((DBSEntity) dataContainer).getAttribute(monitor, webConstr.getAttribute());
DBSAttributeBase attribute = ((DBSEntity) dataContainer).getAttribute(monitor, webConstr.getAttribute());
if (attribute == null && resultInfo != null) {
attribute = resultInfo.getAttribute(webConstr.getAttribute());
}
if (attribute == null) {
dbConstraint = new DBDAttributeConstraint(webConstr.getAttribute(), -1);
} else {
@@ -18,10 +18,15 @@ package io.cloudbeaver.service.sql;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.data.DBDAttributeBinding;
import org.jkiss.dbeaver.model.data.DBDRowIdentifier;
import org.jkiss.dbeaver.model.struct.DBSAttributeBase;
import org.jkiss.dbeaver.model.struct.DBSDataContainer;
import java.util.List;
/**
* Web query results info.
*/
@@ -67,4 +72,24 @@ public class WebSQLResultsInfo {
return null;
}
public DBSAttributeBase getAttribute(String attributeName) {
DBPDataSource dataSource = dataContainer.getDataSource();
DBDAttributeBinding[] attrList = attributes;
DBDAttributeBinding binding = null;
for (String san : attributeName.split("\\.")) {
if (dataSource != null) {
san = DBUtils.getUnQuotedIdentifier(dataSource, san);
}
binding = DBUtils.findObject(attrList, san);
if (binding == null) {
return null;
}
List<DBDAttributeBinding> nestedBindings = binding.getNestedBindings();
if (nestedBindings != null && !nestedBindings.isEmpty()) {
attrList = nestedBindings.toArray(new DBDAttributeBinding[0]);
}
}
return binding == null ? null : binding.getAttribute();
}
}