All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.infinispan.server.resp.commands.set.SSCAN Maven / Gradle / Ivy

There is a newer version: 15.1.4.Final
Show newest version
package org.infinispan.server.resp.commands.set;

import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletionStage;
import java.util.stream.Collectors;

import org.infinispan.container.entries.CacheEntry;
import org.infinispan.multimap.impl.EmbeddedSetCache;
import org.infinispan.multimap.impl.SetBucket;
import org.infinispan.server.iteration.IterationInitializationContext;
import org.infinispan.server.iteration.IterationManager;
import org.infinispan.server.iteration.map.MapIterationInitializationContext;
import org.infinispan.server.resp.Resp3Handler;
import org.infinispan.server.resp.commands.iteration.BaseIterationCommand;
import org.infinispan.commons.util.Util;

/**
 * `SSCAN key cursor [MATCH pattern] [COUNT count]` command.
 * 

* Scan the key-value properties of the set stored under key. * * @since 15.0 * @see Redis Documentation * @author Vittorio Rigamonti */ public class SSCAN extends BaseIterationCommand { public SSCAN() { super(-3, 1, 1, 1); } @Override protected IterationManager retrieveIterationManager(Resp3Handler handler) { return handler.respServer().getDataStructureIterationManager(); } @Override protected CompletionStage initializeIteration(Resp3Handler handler, List arguments) { EmbeddedSetCache multimap = handler.getEmbeddedSetCache(); return multimap.get(arguments.get(0)).thenApply(entry -> { if (entry == null) { return null; } return MapIterationInitializationContext.withSource(setToMap(entry)); }); } private Map setToMap(SetBucket entry) { return entry.toList().stream().collect(Collectors.toMap(v -> v, v -> Util.EMPTY_BYTE_ARRAY)); } @Override protected String cursor(List raw) { return new String(raw.get(1), StandardCharsets.US_ASCII); } @Override protected List writeResponse(List response) { List output = new ArrayList<>(response.size()); for (CacheEntry e : response) { output.add((byte[]) e.getKey()); } return output; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy