Skip to content

Commit b6545a7

Browse files
Merge 26.7 to 26.9
2 parents 69dd324 + 38481c0 commit b6545a7

1 file changed

Lines changed: 8 additions & 105 deletions

File tree

api/src/org/labkey/api/dataiterator/SimpleTranslator.java

Lines changed: 8 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -220,24 +220,14 @@ public RemapConverter(@NotNull TableInfo targetTable, boolean includeTitleColumn
220220
public void setIncludePkLookup(boolean includePkLookup)
221221
{
222222
_includePkLookup = includePkLookup;
223+
_maps = null;
223224
}
224225

225226
public ColumnInfo getPkColumn()
226227
{
227228
return _targetTable.getPkColumns().getFirst();
228229
}
229230

230-
private Pair<ColumnInfo, Map<?, ?>> pkLookupMap()
231-
{
232-
if (!_includePkLookup)
233-
return null;
234-
235-
if (_pkColumnLookupMap == null)
236-
_pkColumnLookupMap = Pair.of(getPkColumn(), new HashMap<>());
237-
238-
return _pkColumnLookupMap;
239-
}
240-
241231
private List<Triple<ColumnInfo, ColumnInfo, MultiValuedMap<?, ?>>> getMaps()
242232
{
243233
if (_maps == null)
@@ -281,6 +271,11 @@ public ColumnInfo getPkColumn()
281271
_titleColumnLookupMap = Triple.of(pkCol, titleColumn, new ArrayListValuedHashMap());
282272
}
283273
}
274+
275+
if (_includePkLookup)
276+
{
277+
_pkColumnLookupMap = Pair.of(pkCol, new HashMap<>());
278+
}
284279
}
285280
return _maps;
286281
}
@@ -296,10 +291,9 @@ public Object mappedValue(Object k)
296291

297292
List<Triple<ColumnInfo, ColumnInfo, MultiValuedMap<?,?>>> maps = getMaps();
298293

299-
Pair<ColumnInfo, Map<?, ?>> pkLookupMap = pkLookupMap();
300-
if (pkLookupMap != null)
294+
if (_pkColumnLookupMap != null)
301295
{
302-
Object v = fetch(pkLookupMap, k);
296+
Object v = fetch(_pkColumnLookupMap, k);
303297
if (v != null)
304298
return v;
305299
}
@@ -2239,97 +2233,6 @@ public void convertRemapTest() throws Exception
22392233

22402234
}
22412235

2242-
/** Lookup fixture with one text alternate key (Value) over an integer pk (RowId); Ordinal is unique but not text, so it yields no map. */
2243-
private EnumTableInfo<LookupValues> remapLookupTable()
2244-
{
2245-
var core = QueryService.get().getUserSchema(TestContext.get().getUser(), JunitUtil.getTestContainer(), "core");
2246-
return new EnumTableInfo<>(LookupValues.class, core, "fake enum", true);
2247-
}
2248-
2249-
@Test
2250-
public void remapCacheSurvivesPkLookupToggle()
2251-
{
2252-
RemapConverter converter = new RemapConverter(remapLookupTable(), true, false, true);
2253-
2254-
// RemappingConvertColumn flips this before every row, so it must not discard what earlier rows resolved
2255-
converter.setIncludePkLookup(false);
2256-
2257-
List<Triple<ColumnInfo, ColumnInfo, MultiValuedMap<?, ?>>> maps = converter.getMaps();
2258-
assertEquals("expected one alternate-key map, on the Value column", 1, maps.size());
2259-
2260-
// Seed keys no enum value can supply, so anything but a cache hit resolves to null
2261-
MultiValuedMap cache = maps.getFirst().getRight();
2262-
Integer seeded = 42;
2263-
cache.put("seeded-hit", seeded);
2264-
cache.put("seeded-miss", converter.MISS);
2265-
2266-
assertEquals(seeded, converter.mappedValue("seeded-hit"));
2267-
assertNull(converter.mappedValue("seeded-miss"));
2268-
2269-
for (int i = 0; i < 3; i++)
2270-
{
2271-
converter.setIncludePkLookup(true);
2272-
converter.setIncludePkLookup(false);
2273-
}
2274-
2275-
assertSame("toggling includePkLookup discarded the cached lookups", maps, converter.getMaps());
2276-
assertEquals("resolved value was discarded, so every row re-queries it", seeded, converter.mappedValue("seeded-hit"));
2277-
assertNull("MISS marker was discarded, so every row re-queries the absent value", converter.mappedValue("seeded-miss"));
2278-
}
2279-
2280-
@Test
2281-
public void remapResolutionIsStableAcrossPkLookupToggle()
2282-
{
2283-
RemapConverter converter = new RemapConverter(remapLookupTable(), true, false, true);
2284-
converter.setIncludePkLookup(false);
2285-
2286-
Object resolved = converter.mappedValue(LookupValues.Two.name());
2287-
assertNotNull("expected " + LookupValues.Two + " to resolve by alternate key", resolved);
2288-
2289-
converter.setIncludePkLookup(true);
2290-
converter.setIncludePkLookup(false);
2291-
2292-
assertEquals(resolved, converter.mappedValue(LookupValues.Two.name()));
2293-
}
2294-
2295-
@Test
2296-
public void remapAlternateKeyWinsWhenPkLookupIsOff()
2297-
{
2298-
RemapConverter converter = new RemapConverter(remapLookupTable(), true, false, true);
2299-
2300-
// Seed the two maps to disagree on one key, so the resolved value says which map was consulted
2301-
Integer key = 7;
2302-
Integer pkResolution = 7;
2303-
Integer akResolution = 99;
2304-
Map pkCache = converter.pkLookupMap().getValue();
2305-
MultiValuedMap akCache = converter.getMaps().getFirst().getRight();
2306-
pkCache.put(key, pkResolution);
2307-
akCache.put(key, akResolution);
2308-
2309-
assertEquals("pk lookup should take precedence while includePkLookup is on", pkResolution, converter.mappedValue(key));
2310-
2311-
// The pk map survives the toggle, so this also pins that it is not consulted while the flag is off
2312-
converter.setIncludePkLookup(false);
2313-
assertEquals("alternate key should resolve while includePkLookup is off", akResolution, converter.mappedValue(key));
2314-
}
2315-
2316-
@Test
2317-
public void remapPkLookupMapIsRetained()
2318-
{
2319-
RemapConverter converter = new RemapConverter(remapLookupTable(), true, false, false);
2320-
assertNull("pk lookup map should not exist while includePkLookup is off", converter.pkLookupMap());
2321-
2322-
converter.setIncludePkLookup(true);
2323-
Pair<ColumnInfo, Map<?, ?>> pkMap = converter.pkLookupMap();
2324-
assertNotNull(pkMap);
2325-
2326-
converter.setIncludePkLookup(false);
2327-
assertNull(converter.pkLookupMap());
2328-
2329-
converter.setIncludePkLookup(true);
2330-
assertSame("pk lookup map was rebuilt rather than retained", pkMap, converter.pkLookupMap());
2331-
}
2332-
23332236
@Test
23342237
public void getFileRootSubstitutedFilePathTest()
23352238
{

0 commit comments

Comments
 (0)