anvar.ramazanov/DBE-18952

Make PostgreSQL array size configurable, disallow arrays when trimmed, and fix issues with trimmed fields in WHERE clause.


Merge-request: IJ-MR-153889
Merged-by: Anvar Ramazanov <anvar.ramazanov@jetbrains.com>

GitOrigin-RevId: 85e79a43e8ee4b2ef9c123aaeb404d4b0c142e0e
This commit is contained in:
Anvar Ramazanov
2025-02-03 17:45:24 +00:00
committed by intellij-monorepo-bot
parent d9d1affc9c
commit e08ebd59a6
4 changed files with 15 additions and 4 deletions
@@ -2,10 +2,10 @@ package com.intellij.database.extractors;
import com.intellij.database.datagrid.GridColumn;
import com.intellij.database.datagrid.JdbcColumnDescriptor;
import com.intellij.database.remote.jdbc.LobInfo;
import com.intellij.database.run.ReservedCellValue;
import com.intellij.database.run.ui.grid.editors.FormatsCache;
import com.intellij.database.run.ui.grid.editors.Formatter;
import com.intellij.database.util.LobInfoHelper;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.containers.ClassMap;
@@ -202,7 +202,7 @@ public class BaseObjectFormatter implements ObjectFormatter {
}
StringBuilder sb = new StringBuilder();
sb.append("{");
int len = Math.min(o.length, config.getMode() == ObjectFormatterMode.DISPLAY ? LobInfo.MAX_ARRAY_SIZE : o.length);
int len = Math.min(o.length, config.getMode() == ObjectFormatterMode.DISPLAY ? LobInfoHelper.MAX_ARRAY_SIZE : o.length);
DatabaseObjectFormatterConfig.DatabaseDisplayObjectFormatterConfig itemConfig =
new DatabaseObjectFormatterConfig.DatabaseDisplayObjectFormatterConfig(
null, false, null, config.getSettings()
+10
View File
@@ -0,0 +1,10 @@
package com.intellij.database.util
import com.intellij.openapi.util.registry.Registry.Companion.intValue
class LobInfoHelper {
companion object {
@JvmField
val MAX_ARRAY_SIZE: Int = intValue("database.arrays.maxSize", 1000)
}
}
@@ -8,6 +8,7 @@ import com.intellij.database.run.ReservedCellValue;
import com.intellij.database.run.actions.LoadFileAction;
import com.intellij.database.run.ui.DataAccessType;
import com.intellij.database.settings.DataGridSettings;
import com.intellij.database.util.LobInfoHelper;
import com.intellij.notification.Notification;
import com.intellij.notification.NotificationType;
import com.intellij.notification.Notifications;
@@ -68,7 +69,8 @@ public class DefaultTextEditorFactory implements GridCellEditorFactory {
protected static boolean isEditable(Object value) {
if (value == null || value instanceof String || value instanceof ReservedCellValue ||
value instanceof LobInfo && !((LobInfo<?>)value).isTruncated() &&
(value instanceof LobInfo.ClobInfo || ((LobInfo<?>)value).length == 0)) {
(value instanceof LobInfo.ClobInfo || ((LobInfo<?>)value).length == 0) ||
(value instanceof Object[] objArr && objArr.length < LobInfoHelper.MAX_ARRAY_SIZE)) {
return true;
}
return false;
-1
View File
@@ -18,7 +18,6 @@ import java.util.Objects;
* @author gregsh
*/
public abstract class LobInfo<T extends LobInfo<?>> implements Comparable<T>, Serializable {
public static final int MAX_ARRAY_SIZE = 100;
public final long length;
private static final ThreadLocal<byte[]> BUFFER = new ThreadLocal<byte[]>() {