Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dbeaver/pro#3198 Refactor DBUtils#getAttributeValue #35413

Merged
merged 35 commits into from
Sep 23, 2024
Merged
Changes from 1 commit
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
667618c
dbeaver/pro#3198 Refactor `DBUtils#getAttributeValue`
ShadelessFox Aug 30, 2024
07be08f
dbeaver/pro#3198 Remove unused code
ShadelessFox Aug 30, 2024
9bd9d6b
dbeaver/pro#3198 Properly show first deepest collection element
ShadelessFox Sep 2, 2024
ee5db19
dbeaver/pro#3198 Slightly clean up the code
ShadelessFox Sep 2, 2024
b33fd7f
Merge branch 'devel' of https://github.com/dbeaver/dbeaver into dbeav…
ShadelessFox Sep 3, 2024
5323fd6
dbeaver/pro#3300 Use indices instead of deque
ShadelessFox Sep 3, 2024
2b1a3d9
dbeaver/pro#3198 Improve logging
ShadelessFox Sep 4, 2024
eab7b47
dbeaver/pro#3198 Improve formatting for collections
ShadelessFox Sep 4, 2024
ad2c1b6
Merge branch 'devel' into dbeaver/pro#3198-grid-nested-indices
serge-rider Sep 10, 2024
4d96d57
dbeaver/pro#3198 Expanders labels
serge-rider Sep 10, 2024
066f777
dbeaver/pro#3198 Value update redesign
serge-rider Sep 11, 2024
1161177
dbeaver/pro#3198 Grid complex value edit fixes. UI and performance im…
serge-rider Sep 11, 2024
ce1aca4
dbeaver/pro#3198 Changes reset fix
serge-rider Sep 11, 2024
1550c0b
dbeaver/pro#3198 Grid complex value edit fixes
serge-rider Sep 12, 2024
5a3f4c7
dbeaver/pro#3198 Grid complex value edit fixes
serge-rider Sep 12, 2024
d15c9a1
dbeaver/pro#3198 Grid complex value edit fixes
serge-rider Sep 12, 2024
a1b5f82
dbeaver/pro#3198 Expand/collapse icons
serge-rider Sep 12, 2024
4fe032e
dbeaver/pro#3198 Code cleanup
serge-rider Sep 12, 2024
8602e40
Merge branch 'devel' into dbeaver/pro#3198-grid-nested-indices
serge-rider Sep 12, 2024
2fcee4b
dbeaver/pro#3198 Fix connection invalidate during data save
serge-rider Sep 12, 2024
f72f4fe
Merge branch 'devel' of https://github.com/dbeaver/dbeaver into dbeav…
serge-rider Sep 16, 2024
d2055db
dbeaver/pro#3237 Boolean values toggle and render fix
serge-rider Sep 16, 2024
8f7a9d9
dbeaver/pro#3237 Record mode fixes. Keep elements in nested rows.
serge-rider Sep 16, 2024
c929235
dbeaver/pro#3237 Record mode fixes. Keep elements in nested rows.
serge-rider Sep 16, 2024
47dfd6b
Merge branch 'devel' of https://github.com/dbeaver/dbeaver into dbeav…
serge-rider Sep 16, 2024
6baf727
dbeaver/pro#3237 Record mode fixes
serge-rider Sep 17, 2024
9a002f6
dbeaver/pro#3237 Record mode fixes + edit fixes
serge-rider Sep 17, 2024
d00cdd5
dbeaver/pro#3237 Record mode resize fix
serge-rider Sep 17, 2024
540e8bc
dbeaver/pro#3237 Record mode editor fix
serge-rider Sep 18, 2024
296ea2a
dbeaver/pro#3237 Nested records edit fix (FQN generation)
serge-rider Sep 18, 2024
9e74a9f
dbeaver/pro#3237 UI enhancement + default value handler error improve…
serge-rider Sep 18, 2024
d7946e9
Merge branch 'devel' of https://github.com/dbeaver/dbeaver into dbeav…
serge-rider Sep 18, 2024
dca6ecd
dbeaver/pro#3237 Clickhouse arrays handle fix
serge-rider Sep 18, 2024
b77b110
Merge branch 'devel' into dbeaver/pro#3198-grid-nested-indices
uslss Sep 19, 2024
e604a89
Merge branch 'devel' into dbeaver/pro#3198-grid-nested-indices
serge-rider Sep 23, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
dbeaver/pro#3198 Properly show first deepest collection element
ShadelessFox committed Sep 2, 2024
commit 9bd9d6bff7a7e6e7781fb3ebf75007ff9f3ed54a
Original file line number Diff line number Diff line change
@@ -688,17 +688,19 @@ public static DBDAttributeBinding[] injectAndFilterAttributeBindings(@NotNull DB
@Nullable
public static Object getAttributeValue(
@NotNull DBDAttributeBinding attribute,
DBDAttributeBinding[] allAttributes,
Object[] row) {
return getAttributeValue(attribute, allAttributes, row, null);
@NotNull DBDAttributeBinding[] allAttributes,
@NotNull Object[] row
) {
return getAttributeValue(attribute, allAttributes, row, null, false);
}

@Nullable
public static Object getAttributeValue(
@NotNull DBDAttributeBinding attribute,
@NotNull DBDAttributeBinding[] allAttributes,
@NotNull Object[] row,
@Nullable int[] nestedIndexes
@Nullable int[] nestedIndexes,
boolean retrieveDeepestCollectionElement
) {
if (attribute.isCustom()) {
try {
@@ -734,7 +736,7 @@ public static Object getAttributeValue(
pendingIndices.offer(nestedIndexes[i]);
}

while (!pendingAttributes.isEmpty() || !pendingIndices.isEmpty()) {
while (!pendingAttributes.isEmpty() || !pendingIndices.isEmpty() || retrieveDeepestCollectionElement) {
if (curValue == null) {
break;
}
@@ -752,15 +754,23 @@ public static Object getAttributeValue(
}

while (curValue instanceof DBDCollection collection) {
if (pendingIndices.isEmpty()) {
int itemIndex;
if (!pendingIndices.isEmpty()) {
itemIndex = pendingIndices.pop();
} else if (retrieveDeepestCollectionElement) {
itemIndex = 0;
} else {
return curValue;
}
int itemIndex = pendingIndices.pop();
if (itemIndex >= collection.getItemCount()) {
return DBDVoid.INSTANCE;
}
curValue = collection.get(itemIndex);
}

if (retrieveDeepestCollectionElement && pendingAttributes.isEmpty()) {
return curValue;
}
}

return curValue;
Original file line number Diff line number Diff line change
@@ -380,29 +380,28 @@ void setTotalRowCount(Long totalRowCount) {

@Nullable
public Object getCellValue(@NotNull ResultSetCellLocation cellLocation) {
return DBUtils.getAttributeValue(
cellLocation.getAttribute(),
attributes,
cellLocation.getRow().values,
cellLocation.getRowIndexes());
return getCellValue(cellLocation.getAttribute(), cellLocation.getRow(), cellLocation.getRowIndexes(), false);
}

@Nullable
public Object getCellValue(@NotNull DBDAttributeBinding attribute, @NotNull ResultSetRow row) {
return DBUtils.getAttributeValue(
attribute,
attributes,
row.values,
null);
return getCellValue(attribute, row, null, false);
}

@Nullable
public Object getCellValue(@NotNull DBDAttributeBinding attribute, @NotNull ResultSetRow row, @Nullable int[] rowIndexes) {
public Object getCellValue(
@NotNull DBDAttributeBinding attribute,
@NotNull ResultSetRow row,
@Nullable int[] rowIndexes,
boolean retrieveDeepestCollectionElement
) {
return DBUtils.getAttributeValue(
attribute,
attributes,
row.values,
rowIndexes);
rowIndexes,
retrieveDeepestCollectionElement
);
}

/**
Original file line number Diff line number Diff line change
@@ -2312,7 +2312,7 @@ public CellInformation getCellInfo(@NotNull IGridColumn colElement, @NotNull IGr
if (cellValue instanceof Number) {
cellValue = ((Number) cellValue).byteValue() != 0;
}
if (DBUtils.isNullValue(cellValue) || cellValue instanceof Boolean) {
if (cellValue instanceof Boolean || cellValue == null) {
info.image = booleanStyles.getStyle((Boolean) cellValue).getIcon();
}
}
@@ -2358,7 +2358,7 @@ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
@Nullable
@Override
public Object getCellValue(IGridColumn gridColumn, IGridRow gridRow, boolean formatString) {
final Object value = getCellValue(gridColumn, gridRow, getRowNestedIndexes(gridRow));
final Object value = getCellValue(gridColumn, gridRow, getRowNestedIndexes(gridRow), false);
if (formatString) {
return formatValue(gridColumn, gridRow, value);
} else {
@@ -2367,7 +2367,12 @@ public Object getCellValue(IGridColumn gridColumn, IGridRow gridRow, boolean for
}

@Nullable
public Object getCellValue(@NotNull IGridColumn gridColumn, @NotNull IGridRow gridRow, @Nullable int[] rowIndexes) {
public Object getCellValue(
@NotNull IGridColumn gridColumn,
@NotNull IGridRow gridRow,
@Nullable int[] rowIndexes,
boolean retrieveDeepestCollectionElement
) {
if (gridRow.getParent() != null && !spreadsheet.isCellExpanded(gridRow.getParent(), gridColumn)) {
return DBDVoid.INSTANCE;
}
@@ -2376,7 +2381,7 @@ public Object getCellValue(@NotNull IGridColumn gridColumn, @NotNull IGridRow gr
if (attr == null || row == null) {
return null;
}
return controller.getModel().getCellValue(attr, row, rowIndexes);
return controller.getModel().getCellValue(attr, row, rowIndexes, retrieveDeepestCollectionElement);
}

@Nullable
@@ -2386,6 +2391,7 @@ private Object formatValue(@NotNull IGridColumn gridColumn, @NotNull IGridRow gr
if (attr == null || row == null) {
return null;
}

if (DBUtils.isNullValue(value) && row.getState() == ResultSetRow.STATE_ADDED) {
// New row and no value. Let's try to show default value
DBSEntityAttribute entityAttribute = attr.getEntityAttribute();
@@ -2413,27 +2419,17 @@ private Object formatValue(@NotNull IGridColumn gridColumn, @NotNull IGridRow gr
}
return value;
}
if (value instanceof DBDCollection)
return "<collection>";
if (value instanceof DBDComposite)
return "<composite>";
/*if (isShowAsExpander(null, attr, value)) {
if (isShowAsExpander(null, attr, value)) {
if (spreadsheet.isCellExpanded(gridRow, gridColumn) && value instanceof DBDCollection collection) {
return COLLECTION_SIZE_FORMAT.format(new Object[]{collection.size()});
}
int count = 0;
for (DBDAttributeBinding cur = attr; cur != null; cur = cur.getParentObject()) {
if (cur.getDataKind() == DBPDataKind.ARRAY) {
count++;
}
}
Object child = getCellValue(gridColumn, gridRow, new int[count]);
Object child = getCellValue(gridColumn, gridRow, getRowNestedIndexes(gridRow), true);
if (child == value) {
return value;
}
return formatValue(gridColumn, gridRow, child);
} else */if (attr.getDataKind() == DBPDataKind.STRUCT && value instanceof DBDComposite && !DBUtils.isNullValue(value)) {
return "[" + ((DBDComposite) value).getDataType().getName() + "]";
} else if (value instanceof DBDComposite composite && !DBUtils.isNullValue(value)) {
return "[" + composite.getDataType().getName() + "]";
}
try {
return attr.getValueRenderer().getValueDisplayString(
@@ -2756,9 +2752,7 @@ private boolean isShowAsCheckbox(DBDAttributeBinding attr) {
}

private boolean isShowAsExpander(@Nullable IGridRow rowElement, @NotNull DBDAttributeBinding attr, @Nullable Object value) {
return spreadsheet.getColumnCount() > 1
&& isAttributeExpandable(rowElement, attr)
&& value instanceof DBDCollection collection && !collection.isNull();
return value instanceof DBDCollection collection && !collection.isNull() && isAttributeExpandable(rowElement, attr);
}

private class GridLabelProvider implements IGridLabelProvider {
Loading
Oops, something went wrong.