Skip to content

Commit 3c48979

Browse files
committed
Support disabling managed columns from a trigger
1 parent 334118a commit 3c48979

3 files changed

Lines changed: 32 additions & 14 deletions

File tree

api/src/org/labkey/api/data/AbstractTableInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2019,7 +2019,7 @@ public void fireRowTrigger(
20192019
break;
20202020

20212021
// trackedRow should only be null when not manageColumns
2022-
if (trackedRow != null)
2022+
if (trackedRow != null && script.isManagedColumnsEnabled())
20232023
{
20242024
var managed = script.getManagedColumns();
20252025
var managedCols = managed != null ? managed.getColumns(type) : null;

api/src/org/labkey/api/data/triggers/ScriptTrigger.java

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ public class ScriptTrigger implements Trigger
6666
@NotNull protected final TableInfo _table;
6767
@NotNull protected final ScriptReference _script;
6868
@Nullable protected volatile ManagedColumns _managedColumns = null;
69+
protected volatile Boolean _isManagedColumnsEnabled = null;
6970

7071
protected ScriptTrigger(@NotNull Container c, @NotNull TableInfo table, @NotNull ScriptReference script)
7172
{
@@ -119,25 +120,34 @@ public boolean canStream()
119120
public @Nullable ManagedColumns getManagedColumns()
120121
{
121122
if (_managedColumns == null)
122-
_managedColumns = resolveManagedColumns();
123+
{
124+
var user = _table.getUserSchema() != null ? _table.getUserSchema().getUser() : null;
125+
var result = _invokeTableScript(_container, user, Object.class, "managedColumns", null, () -> null);
126+
_isManagedColumnsEnabled = !(result instanceof Boolean enabled) || enabled;
127+
128+
if (result instanceof Map<?, ?> map)
129+
{
130+
var insert = managedColumnsFromScriptMap(map, "insert");
131+
var update = managedColumnsFromScriptMap(map, "update");
132+
var ignored = managedColumnsFromScriptMap(map, "ignored");
133+
134+
_managedColumns = new ManagedColumns(insert, update, ignored);
135+
}
136+
else
137+
_managedColumns = ManagedColumns.empty();
138+
}
123139

124140
return _managedColumns;
125141
}
126142

127-
private @NotNull ManagedColumns resolveManagedColumns()
143+
@Override
144+
public boolean isManagedColumnsEnabled()
128145
{
129-
var user = _table.getUserSchema() != null ? _table.getUserSchema().getUser() : null;
130-
var result = _invokeTableScript(_container, user, Object.class, "managedColumns", null, () -> null);
131-
if (result instanceof Map<?, ?> map)
132-
{
133-
var insert = managedColumnsFromScriptMap(map, "insert");
134-
var update = managedColumnsFromScriptMap(map, "update");
135-
var ignored = managedColumnsFromScriptMap(map, "ignored");
136-
137-
return new ManagedColumns(insert, update, ignored);
138-
}
146+
// Ensure the flag is initialized
147+
if (_isManagedColumnsEnabled == null)
148+
getManagedColumns();
139149

140-
return ManagedColumns.empty();
150+
return _isManagedColumnsEnabled;
141151
}
142152

143153
private @NotNull Set<String> managedColumnsFromScriptMap(@NotNull Map<?, ?> map, String key)

api/src/org/labkey/api/data/triggers/Trigger.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,14 @@ public static ManagedColumns empty()
137137
return null;
138138
}
139139

140+
/**
141+
* Returns true if managed columns are enabled for this trigger.
142+
*/
143+
default boolean isManagedColumnsEnabled()
144+
{
145+
return true;
146+
}
147+
140148
/**
141149
* Ensures all columns declared by {@link #getManagedColumns()} are present in {@code newRow}
142150
* before INSERT trigger fires.

0 commit comments

Comments
 (0)