http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZRemRangeByLexExecutor.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZRemRangeByLexExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZRemRangeByLexExecutor.java deleted file mode 100755 index 4bc3554..0000000 --- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZRemRangeByLexExecutor.java +++ /dev/null @@ -1,161 +0,0 @@ -/* - * 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.executor.sortedset; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import org.apache.geode.cache.Region; -import org.apache.geode.cache.query.Query; -import org.apache.geode.cache.query.SelectResults; -import org.apache.geode.redis.internal.ByteArrayWrapper; -import org.apache.geode.redis.internal.Coder; -import org.apache.geode.redis.internal.Command; -import org.apache.geode.redis.internal.DoubleWrapper; -import org.apache.geode.redis.internal.ExecutionHandlerContext; -import org.apache.geode.redis.internal.RedisConstants.ArityDef; -import org.apache.geode.redis.internal.RedisDataType; -import org.apache.geode.redis.internal.executor.SortedSetQuery; - -public class ZRemRangeByLexExecutor extends SortedSetExecutor { - - private final int ERROR_NOT_EXISTS = 0; - - private final String ERROR_ILLEGAL_SYNTAX = - "The min and max strings must either start with a (, [ or be - or +"; - - @Override - public void executeCommand(Command command, ExecutionHandlerContext context) { - List<byte[]> commandElems = command.getProcessedCommand(); - - if (commandElems.size() < 4) { - command.setResponse( - Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.ZREMRANGEBYLEX)); - return; - } - - ByteArrayWrapper key = command.getKey(); - - checkDataType(key, RedisDataType.REDIS_SORTEDSET, context); - Region<ByteArrayWrapper, DoubleWrapper> keyRegion = getRegion(context, key); - - if (keyRegion == null) { - command - .setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), ERROR_NOT_EXISTS)); - return; - } - - boolean minInclusive = false; - boolean maxInclusive = false; - - byte[] minArray = commandElems.get(2); - byte[] maxArray = commandElems.get(3); - String startString = Coder.bytesToString(minArray); - String stopString = Coder.bytesToString(maxArray); - - if (minArray[0] == Coder.OPEN_BRACE_ID) { - startString = startString.substring(1); - minInclusive = false; - } else if (minArray[0] == Coder.OPEN_BRACKET_ID) { - startString = startString.substring(1); - minInclusive = true; - } else if (minArray[0] != Coder.HYPHEN_ID) { - command - .setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_ILLEGAL_SYNTAX)); - return; - } - - if (maxArray[0] == Coder.OPEN_BRACE_ID) { - stopString = stopString.substring(1); - maxInclusive = false; - } else if (maxArray[0] == Coder.OPEN_BRACKET_ID) { - stopString = stopString.substring(1); - maxInclusive = true; - } else if (maxArray[0] != Coder.PLUS_ID) { - command - .setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_ILLEGAL_SYNTAX)); - return; - } - - Collection<ByteArrayWrapper> removeList; - try { - removeList = getRange(key, keyRegion, context, Coder.stringToByteArrayWrapper(startString), - Coder.stringToByteArrayWrapper(stopString), minInclusive, maxInclusive); - } catch (Exception e) { - throw new RuntimeException(e); - } - - int numRemoved = 0; - - for (ByteArrayWrapper entry : removeList) { - Object oldVal = keyRegion.remove(entry); - if (oldVal != null) - numRemoved++; - } - - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), numRemoved)); - } - - private Collection<ByteArrayWrapper> getRange(ByteArrayWrapper key, - Region<ByteArrayWrapper, DoubleWrapper> keyRegion, ExecutionHandlerContext context, - ByteArrayWrapper start, ByteArrayWrapper stop, boolean startInclusive, boolean stopInclusive) - throws Exception { - if (start.equals("-") && stop.equals("+")) - return new ArrayList<ByteArrayWrapper>(keyRegion.keySet()); - else if (start.equals("+") || stop.equals("-")) - return null; - - Query query; - Object[] params; - if (start.equals("-")) { - if (stopInclusive) { - query = getQuery(key, SortedSetQuery.ZRANGEBYLEXNINFI, context); - } else { - query = getQuery(key, SortedSetQuery.ZRANGEBYLEXNINF, context); - } - params = new Object[] {stop, INFINITY_LIMIT}; - } else if (stop.equals("+")) { - if (startInclusive) { - query = getQuery(key, SortedSetQuery.ZRANGEBYLEXPINFI, context); - } else { - query = getQuery(key, SortedSetQuery.ZRANGEBYLEXPINF, context); - } - params = new Object[] {start, INFINITY_LIMIT}; - } else { - if (startInclusive) { - if (stopInclusive) { - query = getQuery(key, SortedSetQuery.ZRANGEBYLEXSTISI, context); - } else { - query = getQuery(key, SortedSetQuery.ZRANGEBYLEXSTI, context); - } - } else { - if (stopInclusive) { - query = getQuery(key, SortedSetQuery.ZRANGEBYLEXSI, context); - } else { - query = getQuery(key, SortedSetQuery.ZRANGEBYLEX, context); - } - } - params = new Object[] {start, stop, INFINITY_LIMIT}; - } - - @SuppressWarnings("unchecked") - SelectResults<ByteArrayWrapper> results = - (SelectResults<ByteArrayWrapper>) query.execute(params); - - return results.asList(); - } - -}
http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZRemRangeByRankExecutor.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZRemRangeByRankExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZRemRangeByRankExecutor.java deleted file mode 100755 index 668a0e4..0000000 --- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZRemRangeByRankExecutor.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * 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.executor.sortedset; - -import java.util.List; - -import org.apache.geode.cache.Region; -import org.apache.geode.cache.Region.Entry; -import org.apache.geode.cache.query.Query; -import org.apache.geode.cache.query.SelectResults; -import org.apache.geode.cache.query.Struct; -import org.apache.geode.redis.internal.ByteArrayWrapper; -import org.apache.geode.redis.internal.Coder; -import org.apache.geode.redis.internal.Command; -import org.apache.geode.redis.internal.DoubleWrapper; -import org.apache.geode.redis.internal.ExecutionHandlerContext; -import org.apache.geode.redis.internal.RedisConstants.ArityDef; -import org.apache.geode.redis.internal.RedisDataType; -import org.apache.geode.redis.internal.executor.SortedSetQuery; - -public class ZRemRangeByRankExecutor extends SortedSetExecutor { - - private final int NONE_REMOVED = 0; - - private final String ERROR_NOT_NUMERIC = "The index provided is not numeric"; - - @Override - public void executeCommand(Command command, ExecutionHandlerContext context) { - List<byte[]> commandElems = command.getProcessedCommand(); - - if (commandElems.size() < 4) { - command.setResponse( - Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.ZREMRANGEBYRANK)); - return; - } - - ByteArrayWrapper key = command.getKey(); - - checkDataType(key, RedisDataType.REDIS_SORTEDSET, context); - Region<ByteArrayWrapper, DoubleWrapper> keyRegion = getRegion(context, key); - - if (keyRegion == null) { - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), NONE_REMOVED)); - return; - } - - int startRank; - int stopRank; - - try { - startRank = Coder.bytesToInt(commandElems.get(2)); - stopRank = Coder.bytesToInt(commandElems.get(3)); - } catch (NumberFormatException e) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_NOT_NUMERIC)); - return; - } - - int sSetSize = keyRegion.size(); - - startRank = getBoundedStartIndex(startRank, sSetSize); - stopRank = getBoundedEndIndex(stopRank, sSetSize); - if (stopRank > sSetSize - 1) - stopRank = sSetSize - 1; - - if (startRank > stopRank) { - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), 0)); - return; - } - - int numRemoved = 0; - List<?> removeList = null; - try { - if (startRank == 0 && stopRank == sSetSize - 1) { - numRemoved = keyRegion.size(); - context.getRegionProvider().removeKey(key); - } else { - removeList = getRemoveKeys(context, key, startRank, stopRank); - } - } catch (Exception e) { - throw new RuntimeException(e); - } - - if (removeList != null) { - for (Object entry : removeList) { - ByteArrayWrapper removeKey; - if (entry instanceof Entry) - removeKey = (ByteArrayWrapper) ((Entry<?, ?>) entry).getKey(); - else - removeKey = (ByteArrayWrapper) ((Struct) entry).getFieldValues()[0]; - Object oldVal = keyRegion.remove(removeKey); - if (oldVal != null) - numRemoved++; - } - if (keyRegion.isEmpty()) - context.getRegionProvider().removeKey(key); - } - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), numRemoved)); - } - - private List<?> getRemoveKeys(ExecutionHandlerContext context, ByteArrayWrapper key, - int startRank, int stopRank) throws Exception { - Query query = getQuery(key, SortedSetQuery.ZREMRANGEBYRANK, context); - Object[] params = {stopRank + 1}; - - SelectResults<?> results = (SelectResults<?>) query.execute(params); - - return results.asList().subList(startRank, stopRank + 1); - } -} http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZRemRangeByScoreExecutor.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZRemRangeByScoreExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZRemRangeByScoreExecutor.java deleted file mode 100755 index 2afd64d..0000000 --- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZRemRangeByScoreExecutor.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * 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.executor.sortedset; - -import java.util.Collection; -import java.util.List; -import java.util.Map.Entry; - -import org.apache.geode.cache.Region; -import org.apache.geode.cache.query.Query; -import org.apache.geode.cache.query.SelectResults; -import org.apache.geode.cache.query.Struct; -import org.apache.geode.redis.internal.ByteArrayWrapper; -import org.apache.geode.redis.internal.Coder; -import org.apache.geode.redis.internal.Command; -import org.apache.geode.redis.internal.DoubleWrapper; -import org.apache.geode.redis.internal.ExecutionHandlerContext; -import org.apache.geode.redis.internal.RedisConstants.ArityDef; -import org.apache.geode.redis.internal.RedisDataType; -import org.apache.geode.redis.internal.executor.SortedSetQuery; - -public class ZRemRangeByScoreExecutor extends SortedSetExecutor { - - private final String ERROR_NOT_NUMERIC = "The number provided is not numeric"; - - private final int NOT_EXISTS = 0; - - @Override - public void executeCommand(Command command, ExecutionHandlerContext context) { - List<byte[]> commandElems = command.getProcessedCommand(); - - if (commandElems.size() < 4) { - command.setResponse( - Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.ZREMRANGEBYSCORE)); - return; - } - - ByteArrayWrapper key = command.getKey(); - - checkDataType(key, RedisDataType.REDIS_SORTEDSET, context); - Region<ByteArrayWrapper, DoubleWrapper> keyRegion = getRegion(context, key); - - if (keyRegion == null) { - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), NOT_EXISTS)); - return; - } - - boolean startInclusive = true; - boolean stopInclusive = true; - double start; - double stop; - - byte[] startArray = commandElems.get(2); - byte[] stopArray = commandElems.get(3); - String startString = Coder.bytesToString(startArray); - String stopString = Coder.bytesToString(stopArray); - if (startArray[0] == Coder.OPEN_BRACE_ID) { - startString = startString.substring(1); - startInclusive = false; - } - if (stopArray[0] == Coder.OPEN_BRACE_ID) { - stopString = stopString.substring(1); - stopInclusive = false; - } - - try { - start = Coder.stringToDouble(startString); - stop = Coder.stringToDouble(stopString); - } catch (NumberFormatException e) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_NOT_NUMERIC)); - return; - } - - int numRemoved = 0; - - Collection<?> removeList = null; - try { - if (start == Double.NEGATIVE_INFINITY && stop == Double.POSITIVE_INFINITY && startInclusive - && stopInclusive) { - numRemoved = keyRegion.size(); - context.getRegionProvider().removeKey(key); - } else { - removeList = getKeys(context, key, keyRegion, start, stop, startInclusive, stopInclusive); - } - } catch (Exception e) { - throw new RuntimeException(e); - } - - if (removeList != null) { - for (Object entry : removeList) { - ByteArrayWrapper remove = null; - if (entry instanceof Entry) - remove = (ByteArrayWrapper) ((Entry<?, ?>) entry).getKey(); - else if (entry instanceof Struct) - remove = (ByteArrayWrapper) ((Struct) entry).getFieldValues()[0]; - Object oldVal = keyRegion.remove(remove); - if (oldVal != null) - numRemoved++; - if (keyRegion.isEmpty()) - context.getRegionProvider().removeKey(key); - } - } - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), numRemoved)); - } - - private Collection<?> getKeys(ExecutionHandlerContext context, ByteArrayWrapper key, - Region<ByteArrayWrapper, DoubleWrapper> keyRegion, double start, double stop, - boolean startInclusive, boolean stopInclusive) throws Exception { - if (start == Double.POSITIVE_INFINITY || stop == Double.NEGATIVE_INFINITY || (start > stop)) - return null; - - Query query; - Object[] params; - if (startInclusive) { - if (stopInclusive) { - query = getQuery(key, SortedSetQuery.ZRBSSTISI, context); - } else { - query = getQuery(key, SortedSetQuery.ZRBSSTI, context); - } - } else { - if (stopInclusive) { - query = getQuery(key, SortedSetQuery.ZRBSSI, context); - } else { - query = getQuery(key, SortedSetQuery.ZRBS, context); - } - } - params = new Object[] {start, stop, INFINITY_LIMIT}; - - SelectResults<?> results = (SelectResults<?>) query.execute(params); - - return (Collection<?>) results.asList(); - } -} http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZRevRangeByScoreExecutor.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZRevRangeByScoreExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZRevRangeByScoreExecutor.java deleted file mode 100755 index 652e784..0000000 --- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZRevRangeByScoreExecutor.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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.executor.sortedset; - -import org.apache.geode.redis.internal.RedisConstants.ArityDef; - - -public class ZRevRangeByScoreExecutor extends ZRangeByScoreExecutor { - - @Override - protected boolean isReverse() { - return true; - } - - @Override - public String getArgsError() { - return ArityDef.ZREVRANGEBYSCORE; - } -} http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZRevRangeExecutor.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZRevRangeExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZRevRangeExecutor.java deleted file mode 100755 index 8154570..0000000 --- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZRevRangeExecutor.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 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.executor.sortedset; - -import org.apache.geode.redis.internal.RedisConstants.ArityDef; - - -public class ZRevRangeExecutor extends ZRangeExecutor { - - @Override - protected boolean isReverse() { - return true; - } - - @Override - public String getArgsError() { - return ArityDef.ZREVRANGE; - } - -} http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZRevRankExecutor.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZRevRankExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZRevRankExecutor.java deleted file mode 100755 index 80ebfa4..0000000 --- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZRevRankExecutor.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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.executor.sortedset; - -import org.apache.geode.redis.internal.RedisConstants.ArityDef; - -public class ZRevRankExecutor extends ZRankExecutor { - - @Override - protected boolean isReverse() { - return true; - } - - @Override - public String getArgsError() { - return ArityDef.ZREVRANK; - } -} http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZScanExecutor.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZScanExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZScanExecutor.java deleted file mode 100755 index df0ea44..0000000 --- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZScanExecutor.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - * 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.executor.sortedset; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Map.Entry; -import java.util.regex.Pattern; -import java.util.regex.PatternSyntaxException; - -import org.apache.geode.cache.Region; -import org.apache.geode.redis.internal.ByteArrayWrapper; -import org.apache.geode.redis.internal.Coder; -import org.apache.geode.redis.internal.Command; -import org.apache.geode.redis.internal.DoubleWrapper; -import org.apache.geode.redis.internal.ExecutionHandlerContext; -import org.apache.geode.redis.internal.RedisConstants; -import org.apache.geode.redis.internal.RedisConstants.ArityDef; -import org.apache.geode.redis.internal.RedisDataType; -import org.apache.geode.redis.internal.executor.AbstractScanExecutor; - -public class ZScanExecutor extends AbstractScanExecutor { - - @SuppressWarnings("unchecked") - @Override - public void executeCommand(Command command, ExecutionHandlerContext context) { - List<byte[]> commandElems = command.getProcessedCommand(); - - if (commandElems.size() < 3) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.ZSCAN)); - return; - } - - ByteArrayWrapper key = command.getKey(); - Region<ByteArrayWrapper, DoubleWrapper> keyRegion = - (Region<ByteArrayWrapper, DoubleWrapper>) context.getRegionProvider().getRegion(key); - checkDataType(key, RedisDataType.REDIS_SORTEDSET, context); - if (keyRegion == null) { - command.setResponse( - Coder.getScanResponse(context.getByteBufAllocator(), new ArrayList<String>())); - return; - } - byte[] cAr = commandElems.get(2); - // String cursorString = ResponseToByteEncoder.bytesToString(cAr); - - int cursor = 0; - Pattern matchPattern = null; - String globMatchPattern = null; - int count = DEFUALT_COUNT; - try { - cursor = Coder.bytesToInt(cAr); - } catch (NumberFormatException e) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_CURSOR)); - return; - } - if (cursor < 0) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_CURSOR)); - return; - } - - if (commandElems.size() > 4) { - try { - byte[] bytes = commandElems.get(3); - if (Coder.bytesToString(bytes).equalsIgnoreCase("MATCH")) { - bytes = commandElems.get(4); - globMatchPattern = Coder.bytesToString(bytes); - } else if (Coder.bytesToString(bytes).equalsIgnoreCase("COUNT")) { - bytes = commandElems.get(4); - count = Coder.bytesToInt(bytes); - } - } catch (NumberFormatException e) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_COUNT)); - return; - } - } - - if (commandElems.size() > 6) { - try { - byte[] bytes = commandElems.get(5); - if (Coder.bytesToString(bytes).equalsIgnoreCase("COUNT")) { - bytes = commandElems.get(6); - count = Coder.bytesToInt(bytes); - } - } catch (NumberFormatException e) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_COUNT)); - return; - } - } - - if (count < 0) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_COUNT)); - return; - } - - try { - matchPattern = convertGlobToRegex(globMatchPattern); - } catch (PatternSyntaxException e) { - command.setResponse( - Coder.getErrorResponse(context.getByteBufAllocator(), RedisConstants.ERROR_ILLEGAL_GLOB)); - return; - } - - List<ByteArrayWrapper> returnList = - (List<ByteArrayWrapper>) getIteration(new HashSet(keyRegion.entrySet()), matchPattern, - count, cursor); - - command.setResponse(Coder.getScanResponse(context.getByteBufAllocator(), returnList)); - } - - @SuppressWarnings("unchecked") - @Override - protected List<?> getIteration(Collection<?> list, Pattern matchPattern, int count, int cursor) { - List<Object> returnList = new ArrayList<Object>(); - int size = list.size(); - int beforeCursor = 0; - int numElements = 0; - int i = -1; - for (Entry<ByteArrayWrapper, DoubleWrapper> entry : (Collection<Entry<ByteArrayWrapper, DoubleWrapper>>) list) { - ByteArrayWrapper keyWrapper = entry.getKey(); - String key = keyWrapper.toString(); - - DoubleWrapper value = entry.getValue(); - i++; - if (beforeCursor < cursor) { - beforeCursor++; - continue; - } else if (numElements < count) { - if (matchPattern != null) { - if (matchPattern.matcher(key).matches()) { - returnList.add(keyWrapper); - returnList.add(value.toString()); - numElements++; - } - } else { - returnList.add(keyWrapper); - returnList.add(value.toString()); - numElements++; - } - } else - break; - } - - if (i == size - 1) - returnList.add(0, String.valueOf(0)); - else - returnList.add(0, String.valueOf(i)); - return returnList; - } - -} http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZScoreExecutor.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZScoreExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZScoreExecutor.java deleted file mode 100755 index 158adb3..0000000 --- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/sortedset/ZScoreExecutor.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * 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.executor.sortedset; - -import java.util.List; - -import org.apache.geode.cache.Region; -import org.apache.geode.redis.internal.ByteArrayWrapper; -import org.apache.geode.redis.internal.Coder; -import org.apache.geode.redis.internal.Command; -import org.apache.geode.redis.internal.DoubleWrapper; -import org.apache.geode.redis.internal.ExecutionHandlerContext; -import org.apache.geode.redis.internal.RedisConstants.ArityDef; -import org.apache.geode.redis.internal.RedisDataType; - -public class ZScoreExecutor extends SortedSetExecutor { - - @Override - public void executeCommand(Command command, ExecutionHandlerContext context) { - List<byte[]> commandElems = command.getProcessedCommand(); - - if (commandElems.size() < 3) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.ZSCORE)); - return; - } - - ByteArrayWrapper key = command.getKey(); - ByteArrayWrapper member = new ByteArrayWrapper(commandElems.get(2)); - - checkDataType(key, RedisDataType.REDIS_SORTEDSET, context); - Region<ByteArrayWrapper, DoubleWrapper> keyRegion = getRegion(context, key); - - if (keyRegion == null) { - command.setResponse(Coder.getNilResponse(context.getByteBufAllocator())); - return; - } - DoubleWrapper score = keyRegion.get(member); - if (score == null) { - command.setResponse(Coder.getNilResponse(context.getByteBufAllocator())); - return; - } - command - .setResponse(Coder.getBulkStringResponse(context.getByteBufAllocator(), score.toString())); - } - -} http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/AppendExecutor.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/AppendExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/AppendExecutor.java deleted file mode 100755 index 7c8c375..0000000 --- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/AppendExecutor.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * 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.executor.string; - -import java.util.List; - -import org.apache.geode.cache.Region; -import org.apache.geode.redis.internal.ByteArrayWrapper; -import org.apache.geode.redis.internal.Command; -import org.apache.geode.redis.internal.Coder; -import org.apache.geode.redis.internal.ExecutionHandlerContext; -import org.apache.geode.redis.internal.RedisConstants.ArityDef; - -public class AppendExecutor extends StringExecutor { - - private final int VALUE_INDEX = 2; - - @Override - public void executeCommand(Command command, ExecutionHandlerContext context) { - List<byte[]> commandElems = command.getProcessedCommand(); - - Region<ByteArrayWrapper, ByteArrayWrapper> r = context.getRegionProvider().getStringsRegion();; - - if (commandElems.size() < 3) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.APPEND)); - return; - } - - ByteArrayWrapper key = command.getKey(); - checkAndSetDataType(key, context); - ByteArrayWrapper string = r.get(key); - - byte[] stringByteArray = commandElems.get(VALUE_INDEX); - if (string == null) { - r.put(key, new ByteArrayWrapper(stringByteArray)); - command.setResponse( - Coder.getIntegerResponse(context.getByteBufAllocator(), stringByteArray.length)); - } else { - byte[] newValue = concatArrays(string.toBytes(), stringByteArray); - string.setBytes(newValue); - r.put(key, string); - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), newValue.length)); - } - - } - - private byte[] concatArrays(byte[] o, byte[] n) { - int oLen = o.length; - int nLen = n.length; - byte[] combined = new byte[oLen + nLen]; - System.arraycopy(o, 0, combined, 0, oLen); - System.arraycopy(n, 0, combined, oLen, nLen); - return combined; - } - -} http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/BitCountExecutor.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/BitCountExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/BitCountExecutor.java deleted file mode 100755 index 68fc357..0000000 --- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/BitCountExecutor.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * 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.executor.string; - -import java.util.List; - -import org.apache.geode.cache.Region; -import org.apache.geode.redis.internal.ByteArrayWrapper; -import org.apache.geode.redis.internal.Command; -import org.apache.geode.redis.internal.Coder; -import org.apache.geode.redis.internal.ExecutionHandlerContext; -import org.apache.geode.redis.internal.RedisConstants; -import org.apache.geode.redis.internal.RedisConstants.ArityDef; - -public class BitCountExecutor extends StringExecutor { - - private final String ERROR_NOT_INT = "The indexes provided must be numeric values"; - - @Override - public void executeCommand(Command command, ExecutionHandlerContext context) { - List<byte[]> commandElems = command.getProcessedCommand(); - - Region<ByteArrayWrapper, ByteArrayWrapper> r = context.getRegionProvider().getStringsRegion(); - - if (commandElems.size() != 2 && commandElems.size() != 4) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.BITCOUNT)); - return; - } - - ByteArrayWrapper key = command.getKey(); - checkAndSetDataType(key, context); - ByteArrayWrapper wrapper = r.get(key); - if (wrapper == null) { - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), 0)); - return; - } - byte[] value = wrapper.toBytes(); - - long startL = 0; - long endL = value.length - 1; - - if (commandElems.size() == 4) { - try { - startL = Coder.bytesToLong(commandElems.get(2)); - endL = Coder.bytesToLong(commandElems.get(3)); - } catch (NumberFormatException e) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_NOT_INT)); - return; - } - } - if (startL > Integer.MAX_VALUE || endL > Integer.MAX_VALUE) { - command.setResponse( - Coder.getErrorResponse(context.getByteBufAllocator(), RedisConstants.ERROR_OUT_OF_RANGE)); - return; - } - - int start = (int) startL; - int end = (int) endL; - if (start < 0) - start += value.length; - if (end < 0) - end += value.length; - - if (start < 0) - start = 0; - if (end < 0) - end = 0; - - if (end > value.length - 1) - end = value.length - 1; - - if (end < start || start >= value.length) { - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), 0)); - return; - } - - long setBits = 0; - for (int j = start; j <= end; j++) - setBits += Integer.bitCount(0xFF & value[j]); // 0xFF keeps same bit sequence as the byte as - // opposed to keeping the same value - - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), setBits)); - } - -} http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/BitOpExecutor.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/BitOpExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/BitOpExecutor.java deleted file mode 100755 index 49f0f5c..0000000 --- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/BitOpExecutor.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * 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.executor.string; - -import java.util.List; - -import org.apache.geode.cache.Region; -import org.apache.geode.redis.internal.ByteArrayWrapper; -import org.apache.geode.redis.internal.Coder; -import org.apache.geode.redis.internal.Command; -import org.apache.geode.redis.internal.ExecutionHandlerContext; -import org.apache.geode.redis.internal.RedisConstants.ArityDef; - -public class BitOpExecutor extends StringExecutor { - - private static final String ERROR_NO_SUCH_OP = "Please specify a legal operation"; - - @Override - public void executeCommand(Command command, ExecutionHandlerContext context) { - List<byte[]> commandElems = command.getProcessedCommand(); - - Region<ByteArrayWrapper, ByteArrayWrapper> r = context.getRegionProvider().getStringsRegion(); - - if (commandElems.size() < 4) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.BITOP)); - return; - } - - String operation = command.getStringKey().toUpperCase(); - ByteArrayWrapper destKey = new ByteArrayWrapper(commandElems.get(2)); - checkDataType(destKey, context); - - byte[][] values = new byte[commandElems.size() - 3][]; - int maxLength = 0; - for (int i = 3; i < commandElems.size(); i++) { - ByteArrayWrapper key = new ByteArrayWrapper(commandElems.get(i)); - checkDataType(key, context); - ByteArrayWrapper value = r.get(key); - if (value == null) { - values[i - 3] = null; - continue; - } - - byte[] val = value.toBytes(); - values[i - 3] = val; - if (val.length > maxLength) { - maxLength = val.length; - byte[] tmp = values[0]; - values[0] = val; - values[i - 3] = tmp; - } - if (i == 3 && operation.equalsIgnoreCase("NOT")) - break; - } - - - if (operation.equals("AND")) - and(context, r, destKey, values, maxLength); - else if (operation.equals("OR")) - or(context, r, destKey, values, maxLength); - else if (operation.equals("XOR")) - xor(context, r, destKey, values, maxLength); - else if (operation.equals("NOT")) - not(context, r, destKey, values, maxLength); - else { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_NO_SUCH_OP)); - return; - } - - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), maxLength)); - } - - private void and(ExecutionHandlerContext context, Region<ByteArrayWrapper, ByteArrayWrapper> r, - ByteArrayWrapper destKey, byte[][] values, int max) { - byte[] dest = new byte[max]; - outer: for (int i = 0; i < max; i++) { - byte b = values[0][i]; - for (int j = 1; j < values.length; j++) { - if (values[j] == null) { - break outer; - } else if (i < values[j].length) - b &= values[j][i]; - else - b &= 0; - } - dest[i] = b; - } - checkAndSetDataType(destKey, context); - r.put(destKey, new ByteArrayWrapper(dest)); - } - - private void or(ExecutionHandlerContext context, Region<ByteArrayWrapper, ByteArrayWrapper> r, - ByteArrayWrapper destKey, byte[][] values, int max) { - byte[] dest = new byte[max]; - for (int i = 0; i < max; i++) { - byte b = values[0][i]; - for (int j = 1; j < values.length; j++) { - byte[] cA = values[j]; - if (cA != null && i < cA.length) - b |= cA[i]; - else - b |= 0; - } - dest[i] = b; - } - checkAndSetDataType(destKey, context); - r.put(destKey, new ByteArrayWrapper(dest)); - } - - private void xor(ExecutionHandlerContext context, Region<ByteArrayWrapper, ByteArrayWrapper> r, - ByteArrayWrapper destKey, byte[][] values, int max) { - byte[] dest = new byte[max]; - for (int i = 0; i < max; i++) { - byte b = values[0][i]; - for (int j = 1; j < values.length; j++) { - byte[] cA = values[j]; - if (cA != null && i < cA.length) - b ^= cA[i]; - else - b ^= 0; - } - dest[i] = b; - } - checkAndSetDataType(destKey, context); - r.put(destKey, new ByteArrayWrapper(dest)); - } - - private void not(ExecutionHandlerContext context, Region<ByteArrayWrapper, ByteArrayWrapper> r, - ByteArrayWrapper destKey, byte[][] values, int max) { - byte[] dest = new byte[max]; - byte[] cA = values[0]; - for (int i = 0; i < max; i++) { - if (cA == null) - dest[i] = ~0; - else - dest[i] = (byte) (~cA[i] & 0xFF); - } - checkAndSetDataType(destKey, context); - r.put(destKey, new ByteArrayWrapper(dest)); - } - -} http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/BitPosExecutor.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/BitPosExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/BitPosExecutor.java deleted file mode 100755 index ca70ae3..0000000 --- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/BitPosExecutor.java +++ /dev/null @@ -1,140 +0,0 @@ -/* - * 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.executor.string; - -import java.util.List; - -import org.apache.geode.cache.Region; -import org.apache.geode.redis.internal.ByteArrayWrapper; -import org.apache.geode.redis.internal.Command; -import org.apache.geode.redis.internal.Coder; -import org.apache.geode.redis.internal.ExecutionHandlerContext; -import org.apache.geode.redis.internal.RedisConstants.ArityDef; - -public class BitPosExecutor extends StringExecutor { - - private final String ERROR_NOT_INT = "The numbers provided must be numeric values"; - - private final String ERROR_BIT = "The bit must either be a 0 or 1"; - - @Override - public void executeCommand(Command command, ExecutionHandlerContext context) { - List<byte[]> commandElems = command.getProcessedCommand(); - - Region<ByteArrayWrapper, ByteArrayWrapper> r = context.getRegionProvider().getStringsRegion(); - - if (commandElems.size() < 3) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.BITPOS)); - return; - } - - ByteArrayWrapper key = command.getKey(); - checkAndSetDataType(key, context); - ByteArrayWrapper string = r.get(key); - - int bit; - int bitPosition = -1; - boolean endSet = false; - - try { - byte[] bitAr = commandElems.get(2); - bit = Coder.bytesToInt(bitAr); - } catch (NumberFormatException e) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_NOT_INT)); - return; - } - - if (bit != 0 && bit != 1) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_BIT)); - return; - } - - if (string == null || string.length() == 0) { - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), -bit)); // Redis - // returns - // 0 when - // key - // does - // not - // exists - // for - // this - // command - return; - } - byte[] bytes = string.toBytes(); - int start = 0; - int end = bytes.length - 1; - if (commandElems.size() > 3) { - try { - byte[] startAr = commandElems.get(3); - start = Coder.bytesToInt(startAr); - } catch (NumberFormatException e) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_NOT_INT)); - return; - } - } - - - if (commandElems.size() > 4) { - try { - byte[] endAr = commandElems.get(4); - end = Coder.bytesToInt(endAr); - endSet = true; - } catch (NumberFormatException e) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_NOT_INT)); - return; - } - } - - if (start < 0) - start += bytes.length; - if (end < 0) - end += bytes.length; - - if (start < 0) - start = 0; - if (end < 0) - end = 0; - - if (start > bytes.length) - start = bytes.length - 1; - if (end > bytes.length) - end = bytes.length - 1; - - if (end < start) { - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), -1)); - return; - } - - outerLoop: for (int i = start; i <= end; i++) { - int cBit; - byte cByte = bytes[i]; - for (int j = 0; j < 8; j++) { - cBit = (cByte & (0x80 >> j)) >> (7 - j); - if (cBit == bit) { - bitPosition = 8 * i + j; - break outerLoop; - } - } - } - - if (bit == 0 && bitPosition == -1 && !endSet) - bitPosition = bytes.length * 8; - - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), bitPosition)); - } - -} http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/DecrByExecutor.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/DecrByExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/DecrByExecutor.java deleted file mode 100755 index 6cea057..0000000 --- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/DecrByExecutor.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * 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.executor.string; - -import java.util.List; - -import org.apache.geode.cache.Region; -import org.apache.geode.redis.internal.ByteArrayWrapper; -import org.apache.geode.redis.internal.Command; -import org.apache.geode.redis.internal.Coder; -import org.apache.geode.redis.internal.ExecutionHandlerContext; -import org.apache.geode.redis.internal.RedisConstants.ArityDef; - -public class DecrByExecutor extends StringExecutor { - - private final String ERROR_VALUE_NOT_USABLE = - "The value at this key cannot be decremented numerically"; - - private final String ERROR_DECREMENT_NOT_USABLE = - "The decrementation on this key must be numeric"; - - private final String ERROR_OVERFLOW = "This decrementation cannot be performed due to overflow"; - - private final int DECREMENT_INDEX = 2; - - @Override - public void executeCommand(Command command, ExecutionHandlerContext context) { - List<byte[]> commandElems = command.getProcessedCommand(); - - Region<ByteArrayWrapper, ByteArrayWrapper> r = context.getRegionProvider().getStringsRegion(); - - if (commandElems.size() < 3) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.DECRBY)); - return; - } - ByteArrayWrapper key = command.getKey(); - checkAndSetDataType(key, context); - ByteArrayWrapper valueWrapper = r.get(key); - - /* - * Try increment - */ - - byte[] decrArray = commandElems.get(DECREMENT_INDEX); - String decrString = Coder.bytesToString(decrArray); - Long decrement; - - try { - decrement = Long.parseLong(decrString); - } catch (NumberFormatException e) { - command.setResponse( - Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_DECREMENT_NOT_USABLE)); - return; - } - - /* - * Value does not exist - */ - - if (valueWrapper == null) { - String negativeDecrString = - decrString.charAt(0) == Coder.HYPHEN_ID ? decrString.substring(1) : "-" + decrString; - r.put(key, new ByteArrayWrapper(Coder.stringToBytes(negativeDecrString))); - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), -decrement)); - return; - } - - /* - * Value exists - */ - - String stringValue = Coder.bytesToString(valueWrapper.toBytes()); - - Long value; - try { - value = Long.parseLong(stringValue); - } catch (NumberFormatException e) { - command.setResponse( - Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_VALUE_NOT_USABLE)); - return; - } - - /* - * Check for overflow Negative decrement is used because the decrement is stored as a positive - * long - */ - if (value <= 0 && -decrement < (Long.MIN_VALUE - value)) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_OVERFLOW)); - return; - } - - value -= decrement; - - stringValue = "" + value; - r.put(key, new ByteArrayWrapper(Coder.stringToBytes(stringValue))); - - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), value)); - - } - -} http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/DecrExecutor.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/DecrExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/DecrExecutor.java deleted file mode 100755 index fce698b..0000000 --- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/DecrExecutor.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * 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.executor.string; - -import java.util.List; - -import org.apache.geode.cache.Region; -import org.apache.geode.redis.internal.ByteArrayWrapper; -import org.apache.geode.redis.internal.Coder; -import org.apache.geode.redis.internal.Command; -import org.apache.geode.redis.internal.ExecutionHandlerContext; -import org.apache.geode.redis.internal.RedisConstants.ArityDef; -import org.apache.geode.redis.internal.RedisDataType; -import org.apache.geode.redis.internal.RegionProvider; - -public class DecrExecutor extends StringExecutor { - - private final String ERROR_VALUE_NOT_USABLE = - "The value at this key cannot be decremented numerically"; - - private final String ERROR_OVERFLOW = "This decrementation cannot be performed due to overflow"; - - private final byte[] INIT_VALUE_BYTES = Coder.stringToBytes("-1"); - - private final int INIT_VALUE_INT = -1; - - @Override - public void executeCommand(Command command, ExecutionHandlerContext context) { - List<byte[]> commandElems = command.getProcessedCommand(); - - RegionProvider rC = context.getRegionProvider(); - Region<ByteArrayWrapper, ByteArrayWrapper> r = rC.getStringsRegion();; - - if (commandElems.size() < 2) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.DECR)); - return; - } - - ByteArrayWrapper key = command.getKey(); - checkAndSetDataType(key, context); - ByteArrayWrapper valueWrapper = r.get(key); - - /* - * Value does not exist - */ - - if (valueWrapper == null) { - byte[] newValue = INIT_VALUE_BYTES; - r.put(key, new ByteArrayWrapper(newValue)); - rC.metaPut(key, RedisDataType.REDIS_STRING); - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), INIT_VALUE_INT)); - return; - } - - /* - * Value exists - */ - - String stringValue = valueWrapper.toString(); - Long value; - try { - value = Long.parseLong(stringValue); - } catch (NumberFormatException e) { - command.setResponse( - Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_VALUE_NOT_USABLE)); - return; - } - - if (value == Long.MIN_VALUE) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_OVERFLOW)); - return; - } - - value--; - - stringValue = "" + value; - - r.put(key, new ByteArrayWrapper(Coder.stringToBytes(stringValue))); - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), value)); - - } - -} http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/GetBitExecutor.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/GetBitExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/GetBitExecutor.java deleted file mode 100755 index 09147b2..0000000 --- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/GetBitExecutor.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * 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.executor.string; - -import java.util.List; - -import org.apache.geode.cache.Region; -import org.apache.geode.redis.internal.ByteArrayWrapper; -import org.apache.geode.redis.internal.Coder; -import org.apache.geode.redis.internal.Command; -import org.apache.geode.redis.internal.ExecutionHandlerContext; -import org.apache.geode.redis.internal.RedisConstants.ArityDef; - -public class GetBitExecutor extends StringExecutor { - - private final String ERROR_NOT_INT = "The offset provided must be numeric"; - - @Override - public void executeCommand(Command command, ExecutionHandlerContext context) { - List<byte[]> commandElems = command.getProcessedCommand(); - - Region<ByteArrayWrapper, ByteArrayWrapper> r = context.getRegionProvider().getStringsRegion(); - - if (commandElems.size() < 3) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.GETBIT)); - return; - } - - ByteArrayWrapper key = command.getKey(); - checkAndSetDataType(key, context); - ByteArrayWrapper wrapper = r.get(key); - if (wrapper == null) { - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), 0)); - return; - } - - int bit = 0; - byte[] bytes = wrapper.toBytes(); - int offset; - try { - byte[] offAr = commandElems.get(2); - offset = Coder.bytesToInt(offAr); - } catch (NumberFormatException e) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_NOT_INT)); - return; - } - if (offset < 0) - offset += bytes.length * 8; - - if (offset < 0 || offset > bytes.length * 8) { - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), 0)); - return; - } - - int byteIndex = offset / 8; - offset %= 8; - - if (byteIndex >= bytes.length) { - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), 0)); - return; - } - - bit = (bytes[byteIndex] & (0x80 >> offset)) >> (7 - offset); - - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), bit)); - } - -} http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/GetExecutor.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/GetExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/GetExecutor.java deleted file mode 100755 index 3a52928..0000000 --- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/GetExecutor.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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.executor.string; - -import org.apache.geode.cache.Region; -import org.apache.geode.redis.internal.ByteArrayWrapper; -import org.apache.geode.redis.internal.Command; -import org.apache.geode.redis.internal.ExecutionHandlerContext; -import org.apache.geode.redis.internal.RedisDataType; -import org.apache.geode.redis.internal.Coder; -import org.apache.geode.redis.internal.RedisConstants.ArityDef; - -public class GetExecutor extends StringExecutor { - - @Override - public void executeCommand(Command command, ExecutionHandlerContext context) { - Region<ByteArrayWrapper, ByteArrayWrapper> r = context.getRegionProvider().getStringsRegion(); - - if (command.getProcessedCommand().size() < 2) { - command - .setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.GETEXECUTOR)); - return; - } - - ByteArrayWrapper key = command.getKey(); - checkDataType(key, RedisDataType.REDIS_STRING, context); - ByteArrayWrapper wrapper = r.get(key); - - if (wrapper == null) { - command.setResponse(Coder.getNilResponse(context.getByteBufAllocator())); - return; - } else { - command.setResponse( - Coder.getBulkStringResponse(context.getByteBufAllocator(), wrapper.toBytes())); - } - - } - -} http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/GetRangeExecutor.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/GetRangeExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/GetRangeExecutor.java deleted file mode 100755 index f80099c..0000000 --- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/GetRangeExecutor.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * 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.executor.string; - -import java.util.Arrays; -import java.util.List; - -import org.apache.geode.cache.Region; -import org.apache.geode.redis.internal.ByteArrayWrapper; -import org.apache.geode.redis.internal.Command; -import org.apache.geode.redis.internal.ExecutionHandlerContext; -import org.apache.geode.redis.internal.RedisDataType; -import org.apache.geode.redis.internal.Coder; -import org.apache.geode.redis.internal.RedisConstants.ArityDef; - -public class GetRangeExecutor extends StringExecutor { - - private final String ERROR_NOT_INT = "The indexes provided must be numeric values"; - - private final int startIndex = 2; - - private final int stopIndex = 3; - - @Override - public void executeCommand(Command command, ExecutionHandlerContext context) { - List<byte[]> commandElems = command.getProcessedCommand(); - - Region<ByteArrayWrapper, ByteArrayWrapper> r = context.getRegionProvider().getStringsRegion(); - - if (commandElems.size() < 4) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.GETRANGE)); - return; - } - - ByteArrayWrapper key = command.getKey(); - checkDataType(key, RedisDataType.REDIS_STRING, context); - ByteArrayWrapper valueWrapper = r.get(key); - - if (valueWrapper == null) { - command.setResponse(Coder.getNilResponse(context.getByteBufAllocator())); - return; - } - - byte[] value = valueWrapper.toBytes(); - int length = value.length; - - long start; - long end; - - - try { - byte[] startI = commandElems.get(startIndex); - byte[] stopI = commandElems.get(stopIndex); - start = Coder.bytesToLong(startI); - end = Coder.bytesToLong(stopI); - } catch (NumberFormatException e) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_NOT_INT)); - return; - } - start = getBoundedStartIndex(start, length); - end = getBoundedEndIndex(end, length); - - /* - * If the properly formatted indexes are illegal, send nil - */ - if (start > end || start == length) { - command.setResponse(Coder.getNilResponse(context.getByteBufAllocator())); - return; - } - /* - * 1 is added to end because the end in copyOfRange is exclusive but in Redis it is inclusive - */ - if (end != length) - end++; - byte[] returnRange = Arrays.copyOfRange(value, (int) start, (int) end); - if (returnRange == null || returnRange.length == 0) { - command.setResponse(Coder.getNilResponse(context.getByteBufAllocator())); - return; - } - - command.setResponse(Coder.getBulkStringResponse(context.getByteBufAllocator(), returnRange)); - - } -} http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/GetSetExecutor.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/GetSetExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/GetSetExecutor.java deleted file mode 100755 index 146fff8..0000000 --- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/GetSetExecutor.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * 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.executor.string; - -import java.util.List; - -import org.apache.geode.cache.Region; -import org.apache.geode.redis.internal.ByteArrayWrapper; -import org.apache.geode.redis.internal.Command; -import org.apache.geode.redis.internal.Coder; -import org.apache.geode.redis.internal.ExecutionHandlerContext; -import org.apache.geode.redis.internal.RedisConstants.ArityDef; - -public class GetSetExecutor extends StringExecutor { - - private final int VALUE_INDEX = 2; - - @Override - public void executeCommand(Command command, ExecutionHandlerContext context) { - List<byte[]> commandElems = command.getProcessedCommand(); - - Region<ByteArrayWrapper, ByteArrayWrapper> r = context.getRegionProvider().getStringsRegion(); - - if (commandElems.size() < 3) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.GETSET)); - return; - } - - ByteArrayWrapper key = command.getKey(); - checkAndSetDataType(key, context); - - byte[] newCharValue = commandElems.get(VALUE_INDEX); - ByteArrayWrapper newValueWrapper = new ByteArrayWrapper(newCharValue); - - ByteArrayWrapper oldValueWrapper = r.get(key); - r.put(key, newValueWrapper); - - if (oldValueWrapper == null) { - command.setResponse(Coder.getNilResponse(context.getByteBufAllocator())); - } else { - command.setResponse( - Coder.getBulkStringResponse(context.getByteBufAllocator(), oldValueWrapper.toBytes())); - } - - } -} http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/IncrByExecutor.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/IncrByExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/IncrByExecutor.java deleted file mode 100755 index 00e2e3b..0000000 --- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/IncrByExecutor.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * 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.executor.string; - -import java.util.List; - -import org.apache.geode.cache.Region; -import org.apache.geode.redis.internal.ByteArrayWrapper; -import org.apache.geode.redis.internal.Command; -import org.apache.geode.redis.internal.Coder; -import org.apache.geode.redis.internal.ExecutionHandlerContext; -import org.apache.geode.redis.internal.RedisConstants.ArityDef; - -public class IncrByExecutor extends StringExecutor { - - private final String ERROR_VALUE_NOT_USABLE = - "The value at this key cannot be incremented numerically"; - - private final String ERROR_INCREMENT_NOT_USABLE = "The increment on this key must be numeric"; - - private final String ERROR_OVERFLOW = "This incrementation cannot be performed due to overflow"; - - private final int INCREMENT_INDEX = 2; - - @Override - public void executeCommand(Command command, ExecutionHandlerContext context) { - List<byte[]> commandElems = command.getProcessedCommand(); - - Region<ByteArrayWrapper, ByteArrayWrapper> r = context.getRegionProvider().getStringsRegion(); - - if (commandElems.size() < 3) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.INCRBY)); - return; - } - - ByteArrayWrapper key = command.getKey(); - checkAndSetDataType(key, context); - ByteArrayWrapper valueWrapper = r.get(key); - - /* - * Try increment - */ - - byte[] incrArray = commandElems.get(INCREMENT_INDEX); - Long increment; - - try { - increment = Coder.bytesToLong(incrArray); - } catch (NumberFormatException e) { - command.setResponse( - Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_INCREMENT_NOT_USABLE)); - return; - } - - /* - * Value does not exist - */ - - if (valueWrapper == null) { - r.put(key, new ByteArrayWrapper(incrArray)); - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), increment)); - return; - } - - /* - * Value exists - */ - - String stringValue = Coder.bytesToString(valueWrapper.toBytes()); - Long value; - try { - value = Long.parseLong(stringValue); - } catch (NumberFormatException e) { - command.setResponse( - Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_VALUE_NOT_USABLE)); - return; - } - - /* - * Check for overflow - */ - if (value >= 0 && increment > (Long.MAX_VALUE - value)) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_OVERFLOW)); - return; - } - - value += increment; - - stringValue = "" + value; - r.put(key, new ByteArrayWrapper(Coder.stringToBytes(stringValue))); - - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), value)); - - } - -} http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/IncrByFloatExecutor.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/IncrByFloatExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/IncrByFloatExecutor.java deleted file mode 100755 index 0c20f66..0000000 --- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/IncrByFloatExecutor.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * 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.executor.string; - -import java.util.List; - -import org.apache.geode.cache.Region; -import org.apache.geode.redis.internal.ByteArrayWrapper; -import org.apache.geode.redis.internal.Coder; -import org.apache.geode.redis.internal.Command; -import org.apache.geode.redis.internal.ExecutionHandlerContext; -import org.apache.geode.redis.internal.RedisConstants; -import org.apache.geode.redis.internal.RedisConstants.ArityDef; - -public class IncrByFloatExecutor extends StringExecutor { - - private final String ERROR_VALUE_NOT_USABLE = - "Invalid value at this key and cannot be incremented numerically"; - - private final String ERROR_INCREMENT_NOT_USABLE = - "The increment on this key must be a valid floating point numeric"; - - private final String ERROR_OVERFLOW = "This incrementation cannot be performed due to overflow"; - - private final int INCREMENT_INDEX = 2; - - @Override - public void executeCommand(Command command, ExecutionHandlerContext context) { - List<byte[]> commandElems = command.getProcessedCommand(); - - Region<ByteArrayWrapper, ByteArrayWrapper> r = context.getRegionProvider().getStringsRegion(); - if (commandElems.size() < 3) { - command - .setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.INCRBYFLOAT)); - return; - } - - ByteArrayWrapper key = command.getKey(); - checkAndSetDataType(key, context); - ByteArrayWrapper valueWrapper = r.get(key); - - /* - * Try increment - */ - - byte[] incrArray = commandElems.get(INCREMENT_INDEX); - String doub = Coder.bytesToString(incrArray).toLowerCase(); - if (doub.contains("inf") || doub.contains("nan")) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), - "Increment would produce NaN or infinity")); - return; - } else if (valueWrapper != null && valueWrapper.toString().contains(" ")) { - command.setResponse( - Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_VALUE_NOT_USABLE)); - return; - } - - - Double increment; - - try { - increment = Coder.stringToDouble(doub); - } catch (NumberFormatException e) { - command.setResponse( - Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_INCREMENT_NOT_USABLE)); - return; - } - - /* - * Value does not exist - */ - - if (valueWrapper == null) { - r.put(key, new ByteArrayWrapper(incrArray)); - command.setResponse(Coder.getBulkStringResponse(context.getByteBufAllocator(), increment)); - return; - } - - /* - * Value exists - */ - - String stringValue = Coder.bytesToString(valueWrapper.toBytes()); - - Double value; - try { - value = Coder.stringToDouble(stringValue); - } catch (NumberFormatException e) { - command.setResponse( - Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_VALUE_NOT_USABLE)); - return; - } - - /* - * Check for overflow - */ - if (value >= 0 && increment > (Double.MAX_VALUE - value)) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_OVERFLOW)); - return; - } - - double result = value + increment; - if (Double.isNaN(result) || Double.isInfinite(result)) { - command.setResponse( - Coder.getErrorResponse(context.getByteBufAllocator(), RedisConstants.ERROR_NAN_INF_INCR)); - return; - } - value += increment; - - stringValue = "" + value; - r.put(key, new ByteArrayWrapper(Coder.stringToBytes(stringValue))); - - command.setResponse(Coder.getBulkStringResponse(context.getByteBufAllocator(), value)); - } - -} http://git-wip-us.apache.org/repos/asf/geode/blob/c6dbc6d4/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/IncrExecutor.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/IncrExecutor.java b/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/IncrExecutor.java deleted file mode 100755 index f506fe6..0000000 --- a/geode-core/src/main/java/org/apache/geode/redis/internal/executor/string/IncrExecutor.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * 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.executor.string; - -import java.util.List; - -import org.apache.geode.cache.Region; -import org.apache.geode.redis.internal.ByteArrayWrapper; -import org.apache.geode.redis.internal.Command; -import org.apache.geode.redis.internal.Coder; -import org.apache.geode.redis.internal.ExecutionHandlerContext; -import org.apache.geode.redis.internal.RedisConstants.ArityDef; - -public class IncrExecutor extends StringExecutor { - - private final String ERROR_VALUE_NOT_USABLE = - "The value at this key cannot be incremented numerically"; - - private final String ERROR_OVERFLOW = "This incrementation cannot be performed due to overflow"; - - private final int INIT_VALUE_INT = 1; - - @Override - public void executeCommand(Command command, ExecutionHandlerContext context) { - List<byte[]> commandElems = command.getProcessedCommand(); - - Region<ByteArrayWrapper, ByteArrayWrapper> r = context.getRegionProvider().getStringsRegion(); - - if (commandElems.size() < 2) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.INCR)); - return; - } - - ByteArrayWrapper key = command.getKey(); - checkAndSetDataType(key, context); - ByteArrayWrapper valueWrapper = r.get(key); - - /* - * Value does not exist - */ - - if (valueWrapper == null) { - byte[] newValue = {Coder.NUMBER_1_BYTE}; - r.put(key, new ByteArrayWrapper(newValue)); - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), INIT_VALUE_INT)); - return; - } - - /* - * Value exists - */ - - String stringValue = valueWrapper.toString(); - - Long value; - try { - value = Long.parseLong(stringValue); - } catch (NumberFormatException e) { - command.setResponse( - Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_VALUE_NOT_USABLE)); - return; - } - - if (value == Long.MAX_VALUE) { - command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_OVERFLOW)); - return; - } - - value++; - - stringValue = "" + value; - r.put(key, new ByteArrayWrapper(Coder.stringToBytes(stringValue))); - - - command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), value)); - - } - -}
