| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more contributor license |
| * agreements. See the NOTICE file distributed with this work for additional information regarding |
| * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance with the License. You may obtain a |
| * copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software distributed under the License |
| * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express |
| * or implied. See the License for the specific language governing permissions and limitations under |
| * the License. |
| */ |
| |
| package org.apache.geode.redis.internal; |
| |
| import static org.apache.geode.redis.internal.RedisCommandSupportLevel.SUPPORTED; |
| import static org.apache.geode.redis.internal.RedisCommandSupportLevel.UNIMPLEMENTED; |
| import static org.apache.geode.redis.internal.RedisCommandSupportLevel.UNSUPPORTED; |
| import static org.apache.geode.redis.internal.RedisConstants.ERROR_SYNTAX; |
| |
| import org.apache.geode.redis.internal.ParameterRequirements.EvenParameterRequirements; |
| import org.apache.geode.redis.internal.ParameterRequirements.ExactParameterRequirements; |
| import org.apache.geode.redis.internal.ParameterRequirements.MaximumParameterRequirements; |
| import org.apache.geode.redis.internal.ParameterRequirements.MinimumParameterRequirements; |
| import org.apache.geode.redis.internal.ParameterRequirements.OddParameterRequirements; |
| import org.apache.geode.redis.internal.ParameterRequirements.ParameterRequirements; |
| import org.apache.geode.redis.internal.ParameterRequirements.SlowlogParameterRequirements; |
| import org.apache.geode.redis.internal.ParameterRequirements.SpopParameterRequirements; |
| import org.apache.geode.redis.internal.ParameterRequirements.UnspecifiedParameterRequirements; |
| import org.apache.geode.redis.internal.executor.Executor; |
| import org.apache.geode.redis.internal.executor.RedisResponse; |
| import org.apache.geode.redis.internal.executor.UnknownExecutor; |
| import org.apache.geode.redis.internal.executor.connection.AuthExecutor; |
| import org.apache.geode.redis.internal.executor.connection.EchoExecutor; |
| import org.apache.geode.redis.internal.executor.connection.PingExecutor; |
| import org.apache.geode.redis.internal.executor.connection.QuitExecutor; |
| import org.apache.geode.redis.internal.executor.connection.SelectExecutor; |
| import org.apache.geode.redis.internal.executor.hash.HDelExecutor; |
| import org.apache.geode.redis.internal.executor.hash.HExistsExecutor; |
| import org.apache.geode.redis.internal.executor.hash.HGetAllExecutor; |
| import org.apache.geode.redis.internal.executor.hash.HGetExecutor; |
| import org.apache.geode.redis.internal.executor.hash.HIncrByExecutor; |
| import org.apache.geode.redis.internal.executor.hash.HIncrByFloatExecutor; |
| import org.apache.geode.redis.internal.executor.hash.HKeysExecutor; |
| import org.apache.geode.redis.internal.executor.hash.HLenExecutor; |
| import org.apache.geode.redis.internal.executor.hash.HMGetExecutor; |
| import org.apache.geode.redis.internal.executor.hash.HMSetExecutor; |
| import org.apache.geode.redis.internal.executor.hash.HScanExecutor; |
| import org.apache.geode.redis.internal.executor.hash.HSetExecutor; |
| import org.apache.geode.redis.internal.executor.hash.HSetNXExecutor; |
| import org.apache.geode.redis.internal.executor.hash.HStrLenExecutor; |
| import org.apache.geode.redis.internal.executor.hash.HValsExecutor; |
| import org.apache.geode.redis.internal.executor.key.DelExecutor; |
| import org.apache.geode.redis.internal.executor.key.ExistsExecutor; |
| import org.apache.geode.redis.internal.executor.key.ExpireAtExecutor; |
| import org.apache.geode.redis.internal.executor.key.ExpireExecutor; |
| import org.apache.geode.redis.internal.executor.key.KeysExecutor; |
| import org.apache.geode.redis.internal.executor.key.PExpireAtExecutor; |
| import org.apache.geode.redis.internal.executor.key.PExpireExecutor; |
| import org.apache.geode.redis.internal.executor.key.PTTLExecutor; |
| import org.apache.geode.redis.internal.executor.key.PersistExecutor; |
| import org.apache.geode.redis.internal.executor.key.RenameExecutor; |
| import org.apache.geode.redis.internal.executor.key.ScanExecutor; |
| import org.apache.geode.redis.internal.executor.key.TTLExecutor; |
| import org.apache.geode.redis.internal.executor.key.TypeExecutor; |
| import org.apache.geode.redis.internal.executor.pubsub.PsubscribeExecutor; |
| import org.apache.geode.redis.internal.executor.pubsub.PublishExecutor; |
| import org.apache.geode.redis.internal.executor.pubsub.PunsubscribeExecutor; |
| import org.apache.geode.redis.internal.executor.pubsub.SubscribeExecutor; |
| import org.apache.geode.redis.internal.executor.pubsub.UnsubscribeExecutor; |
| import org.apache.geode.redis.internal.executor.server.DBSizeExecutor; |
| import org.apache.geode.redis.internal.executor.server.FlushAllExecutor; |
| import org.apache.geode.redis.internal.executor.server.InfoExecutor; |
| import org.apache.geode.redis.internal.executor.server.ShutDownExecutor; |
| import org.apache.geode.redis.internal.executor.server.SlowlogExecutor; |
| import org.apache.geode.redis.internal.executor.server.TimeExecutor; |
| import org.apache.geode.redis.internal.executor.set.SAddExecutor; |
| import org.apache.geode.redis.internal.executor.set.SCardExecutor; |
| import org.apache.geode.redis.internal.executor.set.SDiffExecutor; |
| import org.apache.geode.redis.internal.executor.set.SDiffStoreExecutor; |
| import org.apache.geode.redis.internal.executor.set.SInterExecutor; |
| import org.apache.geode.redis.internal.executor.set.SInterStoreExecutor; |
| import org.apache.geode.redis.internal.executor.set.SIsMemberExecutor; |
| import org.apache.geode.redis.internal.executor.set.SMembersExecutor; |
| import org.apache.geode.redis.internal.executor.set.SMoveExecutor; |
| import org.apache.geode.redis.internal.executor.set.SPopExecutor; |
| import org.apache.geode.redis.internal.executor.set.SRandMemberExecutor; |
| import org.apache.geode.redis.internal.executor.set.SRemExecutor; |
| import org.apache.geode.redis.internal.executor.set.SScanExecutor; |
| import org.apache.geode.redis.internal.executor.set.SUnionExecutor; |
| import org.apache.geode.redis.internal.executor.set.SUnionStoreExecutor; |
| import org.apache.geode.redis.internal.executor.string.AppendExecutor; |
| import org.apache.geode.redis.internal.executor.string.BitCountExecutor; |
| import org.apache.geode.redis.internal.executor.string.BitOpExecutor; |
| import org.apache.geode.redis.internal.executor.string.BitPosExecutor; |
| import org.apache.geode.redis.internal.executor.string.DecrByExecutor; |
| import org.apache.geode.redis.internal.executor.string.DecrExecutor; |
| import org.apache.geode.redis.internal.executor.string.GetBitExecutor; |
| import org.apache.geode.redis.internal.executor.string.GetExecutor; |
| import org.apache.geode.redis.internal.executor.string.GetRangeExecutor; |
| import org.apache.geode.redis.internal.executor.string.GetSetExecutor; |
| import org.apache.geode.redis.internal.executor.string.IncrByExecutor; |
| import org.apache.geode.redis.internal.executor.string.IncrByFloatExecutor; |
| import org.apache.geode.redis.internal.executor.string.IncrExecutor; |
| import org.apache.geode.redis.internal.executor.string.MGetExecutor; |
| import org.apache.geode.redis.internal.executor.string.MSetExecutor; |
| import org.apache.geode.redis.internal.executor.string.MSetNXExecutor; |
| import org.apache.geode.redis.internal.executor.string.PSetEXExecutor; |
| import org.apache.geode.redis.internal.executor.string.SetBitExecutor; |
| import org.apache.geode.redis.internal.executor.string.SetEXExecutor; |
| import org.apache.geode.redis.internal.executor.string.SetExecutor; |
| import org.apache.geode.redis.internal.executor.string.SetNXExecutor; |
| import org.apache.geode.redis.internal.executor.string.SetRangeExecutor; |
| import org.apache.geode.redis.internal.executor.string.StrlenExecutor; |
| import org.apache.geode.redis.internal.netty.Command; |
| import org.apache.geode.redis.internal.netty.ExecutionHandlerContext; |
| |
| /** |
| * The redis command type used by the server. Each command is directly from the redis protocol. |
| */ |
| public enum RedisCommandType { |
| |
| /*************************************** |
| *** Supported Commands *** |
| ***************************************/ |
| |
| /*************** Connection ****************/ |
| AUTH(new AuthExecutor(), SUPPORTED, new ExactParameterRequirements(2)), |
| PING(new PingExecutor(), SUPPORTED, new MaximumParameterRequirements(2)), |
| QUIT(new QuitExecutor(), SUPPORTED), |
| |
| /*************** Keys ******************/ |
| |
| DEL(new DelExecutor(), SUPPORTED, new MinimumParameterRequirements(2)), |
| EXISTS(new ExistsExecutor(), SUPPORTED, new MinimumParameterRequirements(2)), |
| EXPIRE(new ExpireExecutor(), SUPPORTED, new ExactParameterRequirements(3)), |
| EXPIREAT(new ExpireAtExecutor(), SUPPORTED, new ExactParameterRequirements(3)), |
| KEYS(new KeysExecutor(), SUPPORTED, new ExactParameterRequirements(2)), |
| PERSIST(new PersistExecutor(), SUPPORTED, new ExactParameterRequirements(2)), |
| PEXPIRE(new PExpireExecutor(), SUPPORTED, new ExactParameterRequirements(3)), |
| PEXPIREAT(new PExpireAtExecutor(), SUPPORTED, new ExactParameterRequirements(3)), |
| PTTL(new PTTLExecutor(), SUPPORTED, new ExactParameterRequirements(2)), |
| RENAME(new RenameExecutor(), SUPPORTED, new ExactParameterRequirements(3)), |
| TTL(new TTLExecutor(), SUPPORTED, new ExactParameterRequirements(2)), |
| TYPE(new TypeExecutor(), SUPPORTED, new ExactParameterRequirements(2)), |
| |
| /************* Strings *****************/ |
| |
| APPEND(new AppendExecutor(), SUPPORTED, new ExactParameterRequirements(3)), |
| GET(new GetExecutor(), SUPPORTED, new ExactParameterRequirements(2)), |
| SET(new SetExecutor(), SUPPORTED, new MinimumParameterRequirements(3)), |
| |
| /************* Hashes *****************/ |
| |
| HGETALL(new HGetAllExecutor(), SUPPORTED, new ExactParameterRequirements(2)), |
| HMSET(new HMSetExecutor(), SUPPORTED, |
| new MinimumParameterRequirements(4).and(new EvenParameterRequirements())), |
| HSET(new HSetExecutor(), SUPPORTED, |
| new MinimumParameterRequirements(4).and(new EvenParameterRequirements())), |
| |
| /************* Sets *****************/ |
| |
| SADD(new SAddExecutor(), SUPPORTED, new MinimumParameterRequirements(3)), |
| SMEMBERS(new SMembersExecutor(), SUPPORTED, new ExactParameterRequirements(2)), |
| SREM(new SRemExecutor(), SUPPORTED, new MinimumParameterRequirements(3)), |
| |
| /********** Publish Subscribe **********/ |
| |
| SUBSCRIBE(new SubscribeExecutor(), SUPPORTED, new MinimumParameterRequirements(2)), |
| PUBLISH(new PublishExecutor(), SUPPORTED, new ExactParameterRequirements(3)), |
| PSUBSCRIBE(new PsubscribeExecutor(), SUPPORTED, new MinimumParameterRequirements(2)), |
| PUNSUBSCRIBE(new PunsubscribeExecutor(), SUPPORTED, new MinimumParameterRequirements(1)), |
| UNSUBSCRIBE(new UnsubscribeExecutor(), SUPPORTED, new MinimumParameterRequirements(1)), |
| |
| UNKNOWN(new UnknownExecutor(), SUPPORTED), |
| |
| /*************************************** |
| *** Unsupported Commands *** |
| ***************************************/ |
| |
| /*************************************** |
| *************** Connection ************* |
| ***************************************/ |
| |
| ECHO(new EchoExecutor(), UNSUPPORTED, new ExactParameterRequirements(2)), |
| SELECT(new SelectExecutor(), UNSUPPORTED, new ExactParameterRequirements(2)), |
| |
| /*************************************** |
| *************** Keys ****************** |
| ***************************************/ |
| |
| SCAN(new ScanExecutor(), UNSUPPORTED, new EvenParameterRequirements(ERROR_SYNTAX).and(new MinimumParameterRequirements(2))), |
| UNLINK(new DelExecutor(), UNSUPPORTED, new MinimumParameterRequirements(2)), |
| |
| /*************************************** |
| ************** Strings **************** |
| ***************************************/ |
| |
| BITCOUNT(new BitCountExecutor(), UNSUPPORTED, new MinimumParameterRequirements(2)), |
| BITOP(new BitOpExecutor(), UNSUPPORTED, new MinimumParameterRequirements(4)), |
| BITPOS(new BitPosExecutor(), UNSUPPORTED, new MinimumParameterRequirements(3)), |
| DECR(new DecrExecutor(), UNSUPPORTED, new ExactParameterRequirements(2)), |
| DECRBY(new DecrByExecutor(), UNSUPPORTED, new ExactParameterRequirements(3)), |
| GETBIT(new GetBitExecutor(), UNSUPPORTED, new ExactParameterRequirements(3)), |
| GETRANGE(new GetRangeExecutor(), UNSUPPORTED, new ExactParameterRequirements(4)), |
| GETSET(new GetSetExecutor(), UNSUPPORTED, new ExactParameterRequirements(3)), |
| INCR(new IncrExecutor(), UNSUPPORTED, new ExactParameterRequirements(2)), |
| INCRBY(new IncrByExecutor(), UNSUPPORTED, new ExactParameterRequirements(3)), |
| INCRBYFLOAT(new IncrByFloatExecutor(), UNSUPPORTED, new ExactParameterRequirements(3)), |
| MGET(new MGetExecutor(), UNSUPPORTED, new MinimumParameterRequirements(2)), |
| MSET(new MSetExecutor(), UNSUPPORTED, |
| new MinimumParameterRequirements(3).and(new OddParameterRequirements())), |
| MSETNX(new MSetNXExecutor(), UNSUPPORTED, |
| new MinimumParameterRequirements(3).and(new OddParameterRequirements())), |
| PSETEX(new PSetEXExecutor(), UNSUPPORTED, new ExactParameterRequirements(4)), |
| SETBIT(new SetBitExecutor(), UNSUPPORTED, new ExactParameterRequirements(4)), |
| SETEX(new SetEXExecutor(), UNSUPPORTED, new ExactParameterRequirements(4)), |
| SETNX(new SetNXExecutor(), UNSUPPORTED, new ExactParameterRequirements(3)), |
| SETRANGE(new SetRangeExecutor(), UNSUPPORTED, new ExactParameterRequirements(4)), |
| STRLEN(new StrlenExecutor(), UNSUPPORTED, new ExactParameterRequirements(2)), |
| |
| /*************************************** |
| **************** Hashes *************** |
| ***************************************/ |
| |
| HDEL(new HDelExecutor(), UNSUPPORTED, new MinimumParameterRequirements(3)), |
| HEXISTS(new HExistsExecutor(), UNSUPPORTED, new ExactParameterRequirements(3)), |
| HGET(new HGetExecutor(), UNSUPPORTED, new ExactParameterRequirements(3)), |
| HINCRBY(new HIncrByExecutor(), UNSUPPORTED, new ExactParameterRequirements(4)), |
| HINCRBYFLOAT(new HIncrByFloatExecutor(), UNSUPPORTED, new ExactParameterRequirements(4)), |
| HKEYS(new HKeysExecutor(), UNSUPPORTED, new ExactParameterRequirements(2)), |
| HLEN(new HLenExecutor(), UNSUPPORTED, new ExactParameterRequirements(2)), |
| HMGET(new HMGetExecutor(), UNSUPPORTED, new MinimumParameterRequirements(3)), |
| HSCAN(new HScanExecutor(), UNSUPPORTED, new MinimumParameterRequirements(3), |
| new OddParameterRequirements(ERROR_SYNTAX)), |
| HSETNX(new HSetNXExecutor(), UNSUPPORTED, new ExactParameterRequirements(4)), |
| HSTRLEN(new HStrLenExecutor(), UNSUPPORTED, new ExactParameterRequirements(3)), |
| HVALS(new HValsExecutor(), UNSUPPORTED, new ExactParameterRequirements(2)), |
| |
| /*************************************** |
| **************** Sets ***************** |
| ***************************************/ |
| |
| SCARD(new SCardExecutor(), UNSUPPORTED, new ExactParameterRequirements(2)), |
| SDIFF(new SDiffExecutor(), UNSUPPORTED, new MinimumParameterRequirements(2)), |
| SDIFFSTORE(new SDiffStoreExecutor(), UNSUPPORTED, new MinimumParameterRequirements(3)), |
| SINTER(new SInterExecutor(), UNSUPPORTED, new MinimumParameterRequirements(2)), |
| SINTERSTORE(new SInterStoreExecutor(), UNSUPPORTED, new MinimumParameterRequirements(3)), |
| SISMEMBER(new SIsMemberExecutor(), UNSUPPORTED, new ExactParameterRequirements(3)), |
| SMOVE(new SMoveExecutor(), UNSUPPORTED, new ExactParameterRequirements(4)), |
| SPOP(new SPopExecutor(), UNSUPPORTED, new MinimumParameterRequirements(2) |
| .and(new MaximumParameterRequirements(3, ERROR_SYNTAX)).and(new SpopParameterRequirements())), |
| SRANDMEMBER(new SRandMemberExecutor(), UNSUPPORTED, new MinimumParameterRequirements(2)), |
| SSCAN(new SScanExecutor(), UNSUPPORTED, new MinimumParameterRequirements(3), |
| new OddParameterRequirements(ERROR_SYNTAX)), |
| SUNION(new SUnionExecutor(), UNSUPPORTED, new MinimumParameterRequirements(2)), |
| SUNIONSTORE(new SUnionStoreExecutor(), UNSUPPORTED, new MinimumParameterRequirements(3)), |
| |
| /*************************************** |
| *************** Server **************** |
| ***************************************/ |
| |
| DBSIZE(new DBSizeExecutor(), UNSUPPORTED, new ExactParameterRequirements(1)), |
| FLUSHALL(new FlushAllExecutor(), UNSUPPORTED, new MaximumParameterRequirements(2, ERROR_SYNTAX)), |
| FLUSHDB(new FlushAllExecutor(), UNSUPPORTED, new MaximumParameterRequirements(2, ERROR_SYNTAX)), |
| INFO(new InfoExecutor(), UNSUPPORTED, new MaximumParameterRequirements(2, ERROR_SYNTAX)), |
| SHUTDOWN(new ShutDownExecutor(), UNSUPPORTED, new MaximumParameterRequirements(2, ERROR_SYNTAX)), |
| SLOWLOG(new SlowlogExecutor(), UNSUPPORTED, new SlowlogParameterRequirements()), |
| TIME(new TimeExecutor(), UNSUPPORTED, new ExactParameterRequirements(1)), |
| |
| /////////// UNIMPLEMENTED ///////////////////// |
| |
| ACL(null, UNIMPLEMENTED), |
| BGREWRITEAOF(null, UNIMPLEMENTED), |
| BGSAVE(null, UNIMPLEMENTED), |
| BITFIELD(null, UNIMPLEMENTED), |
| BLPOP(null, UNIMPLEMENTED), |
| BRPOP(null, UNIMPLEMENTED), |
| BRPOPLPUSH(null, UNIMPLEMENTED), |
| BZPOPMIN(null, UNIMPLEMENTED), |
| BZPOPMAX(null, UNIMPLEMENTED), |
| CLIENT(null, UNIMPLEMENTED), |
| CLUSTER(null, UNIMPLEMENTED), |
| COMMAND(null, UNIMPLEMENTED), |
| CONFIG(null, UNIMPLEMENTED), |
| DEBUG(null, UNIMPLEMENTED), |
| DISCARD(null, UNIMPLEMENTED), |
| DUMP(null, UNIMPLEMENTED), |
| EVAL(null, UNIMPLEMENTED), |
| EVALSHA(null, UNIMPLEMENTED), |
| EXEC(null, UNIMPLEMENTED), |
| GEOADD(null, UNIMPLEMENTED), |
| GEOHASH(null, UNIMPLEMENTED), |
| GEOPOS(null, UNIMPLEMENTED), |
| GEODIST(null, UNIMPLEMENTED), |
| GEORADIUS(null, UNIMPLEMENTED), |
| GEORADIUSBYMEMBER(null, UNIMPLEMENTED), |
| LATENCY(null, UNIMPLEMENTED), |
| LASTSAVE(null, UNIMPLEMENTED), |
| LINDEX(null, UNIMPLEMENTED), |
| LINSERT(null, UNIMPLEMENTED), |
| LLEN(null, UNIMPLEMENTED), |
| LOLWUT(null, UNIMPLEMENTED), |
| LPOP(null, UNIMPLEMENTED), |
| LPUSH(null, UNIMPLEMENTED), |
| LPUSHX(null, UNIMPLEMENTED), |
| LRANGE(null, UNIMPLEMENTED), |
| LREM(null, UNIMPLEMENTED), |
| LSET(null, UNIMPLEMENTED), |
| LTRIM(null, UNIMPLEMENTED), |
| MEMORY(null, UNIMPLEMENTED), |
| MIGRATE(null, UNIMPLEMENTED), |
| MODULE(null, UNIMPLEMENTED), |
| MONITOR(null, UNIMPLEMENTED), |
| MOVE(null, UNIMPLEMENTED), |
| MULTI(null, UNIMPLEMENTED), |
| OBJECT(null, UNIMPLEMENTED), |
| PFADD(null, UNIMPLEMENTED), |
| PFCOUNT(null, UNIMPLEMENTED), |
| PFMERGE(null, UNIMPLEMENTED), |
| PSYNC(null, UNIMPLEMENTED), |
| PUBSUB(null, UNIMPLEMENTED), |
| RANDOMKEY(null, UNIMPLEMENTED), |
| READONLY(null, UNIMPLEMENTED), |
| READWRITE(null, UNIMPLEMENTED), |
| RENAMENX(null, UNIMPLEMENTED), |
| RESTORE(null, UNIMPLEMENTED), |
| ROLE(null, UNIMPLEMENTED), |
| RPOP(null, UNIMPLEMENTED), |
| RPOPLPUSH(null, UNIMPLEMENTED), |
| RPUSH(null, UNIMPLEMENTED), |
| RPUSHX(null, UNIMPLEMENTED), |
| SAVE(null, UNIMPLEMENTED), |
| SCRIPT(null, UNIMPLEMENTED), |
| SLAVEOF(null, UNIMPLEMENTED), |
| REPLICAOF(null, UNIMPLEMENTED), |
| SORT(null, UNIMPLEMENTED), |
| STRALGO(null, UNIMPLEMENTED), |
| SWAPDB(null, UNIMPLEMENTED), |
| SYNC(null, UNIMPLEMENTED), |
| TOUCH(null, UNIMPLEMENTED), |
| UNWATCH(null, UNIMPLEMENTED), |
| WAIT(null, UNIMPLEMENTED), |
| WATCH(null, UNIMPLEMENTED), |
| XINFO(null, UNIMPLEMENTED), |
| XADD(null, UNIMPLEMENTED), |
| XTRIM(null, UNIMPLEMENTED), |
| XDEL(null, UNIMPLEMENTED), |
| XRANGE(null, UNIMPLEMENTED), |
| XREVRANGE(null, UNIMPLEMENTED), |
| XLEN(null, UNIMPLEMENTED), |
| XREAD(null, UNIMPLEMENTED), |
| XGROUP(null, UNIMPLEMENTED), |
| XREADGROUP(null, UNIMPLEMENTED), |
| XACK(null, UNIMPLEMENTED), |
| XCLAIM(null, UNIMPLEMENTED), |
| XPENDING(null, UNIMPLEMENTED), |
| ZADD(null, UNIMPLEMENTED), |
| ZCARD(null, UNIMPLEMENTED), |
| ZCOUNT(null, UNIMPLEMENTED), |
| ZINCRBY(null, UNIMPLEMENTED), |
| ZINTERSTORE(null, UNIMPLEMENTED), |
| ZLEXCOUNT(null, UNIMPLEMENTED), |
| ZPOPMAX(null, UNIMPLEMENTED), |
| ZPOPMIN(null, UNIMPLEMENTED), |
| ZRANGE(null, UNIMPLEMENTED), |
| ZRANGEBYLEX(null, UNIMPLEMENTED), |
| ZREVRANGEBYLEX(null, UNIMPLEMENTED), |
| ZRANGEBYSCORE(null, UNIMPLEMENTED), |
| ZRANK(null, UNIMPLEMENTED), |
| ZREM(null, UNIMPLEMENTED), |
| ZREMRANGEBYLEX(null, UNIMPLEMENTED), |
| ZREMRANGEBYRANK(null, UNIMPLEMENTED), |
| ZREMRANGEBYSCORE(null, UNIMPLEMENTED), |
| ZREVRANGE(null, UNIMPLEMENTED), |
| ZREVRANGEBYSCORE(null, UNIMPLEMENTED), |
| ZREVRANK(null, UNIMPLEMENTED), |
| ZSCORE(null, UNIMPLEMENTED), |
| ZUNIONSCORE(null, UNIMPLEMENTED), |
| ZSCAN(null, UNIMPLEMENTED); |
| |
| private final Executor executor; |
| private final ParameterRequirements parameterRequirements; |
| private final ParameterRequirements deferredParameterRequirements; |
| private final RedisCommandSupportLevel supportLevel; |
| |
| RedisCommandType(Executor executor, RedisCommandSupportLevel supportLevel) { |
| this(executor, supportLevel, new UnspecifiedParameterRequirements()); |
| } |
| |
| RedisCommandType(Executor executor, RedisCommandSupportLevel supportLevel, |
| ParameterRequirements parameterRequirements) { |
| this(executor, supportLevel, parameterRequirements, new UnspecifiedParameterRequirements()); |
| } |
| |
| RedisCommandType(Executor executor, RedisCommandSupportLevel supportLevel, |
| ParameterRequirements parameterRequirements, |
| ParameterRequirements deferredParameterRequirements) { |
| this.executor = executor; |
| this.supportLevel = supportLevel; |
| this.parameterRequirements = parameterRequirements; |
| this.deferredParameterRequirements = deferredParameterRequirements; |
| } |
| |
| public boolean isSupported() { |
| return supportLevel == SUPPORTED; |
| } |
| |
| public boolean isUnsupported() { |
| return supportLevel == UNSUPPORTED; |
| } |
| |
| public boolean isUnimplemented() { |
| return supportLevel == UNIMPLEMENTED; |
| } |
| |
| public boolean isAllowedWhileSubscribed() { |
| switch (this) { |
| case SUBSCRIBE: |
| case PSUBSCRIBE: |
| case UNSUBSCRIBE: |
| case PUNSUBSCRIBE: |
| case PING: |
| case QUIT: |
| return true; |
| default: |
| return false; |
| } |
| } |
| |
| public void checkDeferredParameters(Command command, |
| ExecutionHandlerContext executionHandlerContext) { |
| deferredParameterRequirements.checkParameters(command, executionHandlerContext); |
| } |
| |
| public RedisResponse executeCommand(Command command, |
| ExecutionHandlerContext executionHandlerContext) { |
| |
| parameterRequirements.checkParameters(command, executionHandlerContext); |
| |
| return executor.executeCommand(command, executionHandlerContext); |
| } |
| } |