Feature - RESP3 protocol support. protocol setting added. #5413
parent
be92e5a2c5
commit
68dd447835
@ -0,0 +1,60 @@
|
||||
/**
|
||||
* Copyright (c) 2013-2022 Nikita Koksharov
|
||||
*
|
||||
* Licensed 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.redisson.client.protocol.convertor;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Nikita Koksharov
|
||||
*
|
||||
*/
|
||||
public class LongNumberConvertor implements Convertor<Object> {
|
||||
|
||||
private Class<?> resultClass;
|
||||
|
||||
public LongNumberConvertor(Class<?> resultClass) {
|
||||
super();
|
||||
this.resultClass = resultClass;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object convert(Object result) {
|
||||
if (result instanceof Long) {
|
||||
Long res = (Long) result;
|
||||
if (resultClass.isAssignableFrom(Long.class)) {
|
||||
return res;
|
||||
}
|
||||
if (resultClass.isAssignableFrom(Integer.class)) {
|
||||
return res.intValue();
|
||||
}
|
||||
if (resultClass.isAssignableFrom(BigDecimal.class)) {
|
||||
return new BigDecimal(res);
|
||||
}
|
||||
}
|
||||
if (result instanceof Double) {
|
||||
Double res = (Double) result;
|
||||
if (resultClass.isAssignableFrom(Float.class)) {
|
||||
return ((Double) result).floatValue();
|
||||
}
|
||||
if (resultClass.isAssignableFrom(Double.class)) {
|
||||
return res;
|
||||
}
|
||||
}
|
||||
throw new IllegalStateException("Wrong value type!");
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
/**
|
||||
* Copyright (c) 2013-2022 Nikita Koksharov
|
||||
*
|
||||
* Licensed 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.redisson.client.protocol.decoder;
|
||||
|
||||
import org.redisson.api.search.aggregate.AggregationResult;
|
||||
import org.redisson.client.handler.State;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Nikita Koksharov
|
||||
*
|
||||
*/
|
||||
public class AggregationCursorResultDecoderV2 implements MultiDecoder<Object> {
|
||||
|
||||
@Override
|
||||
public Object decode(List<Object> parts, State state) {
|
||||
if (parts.isEmpty()) {
|
||||
return new AggregationResult(0, Collections.emptyList(), -1);
|
||||
}
|
||||
|
||||
List<Object> attrs = (List<Object>) parts.get(0);
|
||||
Map<String, Object> m = new HashMap<>();
|
||||
for (int i = 0; i < attrs.size(); i++) {
|
||||
if (i % 2 != 0) {
|
||||
m.put(attrs.get(i-1).toString(), attrs.get(i));
|
||||
}
|
||||
}
|
||||
|
||||
List<Map<String, Object>> docs = new ArrayList<>();
|
||||
List<Map<String, Object>> results = (List<Map<String, Object>>) m.get("results");
|
||||
for (Map<String, Object> result : results) {
|
||||
Map<String, Object> map = (Map<String, Object>) result.get("extra_attributes");
|
||||
docs.add(map);
|
||||
}
|
||||
Long total = (Long) m.get("total_results");
|
||||
long cursorId = (long) parts.get(1);
|
||||
return new AggregationResult(total, docs, cursorId);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
/**
|
||||
* Copyright (c) 2013-2022 Nikita Koksharov
|
||||
*
|
||||
* Licensed 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.redisson.client.protocol.decoder;
|
||||
|
||||
import org.redisson.api.search.aggregate.AggregationResult;
|
||||
import org.redisson.client.handler.State;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Nikita Koksharov
|
||||
*
|
||||
*/
|
||||
public class AggregationResultDecoderV2 implements MultiDecoder<Object> {
|
||||
|
||||
@Override
|
||||
public Object decode(List<Object> parts, State state) {
|
||||
if (parts.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Map<String, Object> m = new HashMap<>();
|
||||
for (int i = 0; i < parts.size(); i++) {
|
||||
if (i % 2 != 0) {
|
||||
m.put(parts.get(i-1).toString(), parts.get(i));
|
||||
}
|
||||
}
|
||||
|
||||
List<Map<String, Object>> docs = new ArrayList<>();
|
||||
List<Map<String, Object>> results = (List<Map<String, Object>>) m.get("results");
|
||||
for (Map<String, Object> result : results) {
|
||||
Map<String, Object> attrs = (Map<String, Object>) result.get("extra_attributes");
|
||||
docs.add(attrs);
|
||||
}
|
||||
Long total = (Long) m.get("total_results");
|
||||
return new AggregationResult(total, docs);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
/**
|
||||
* Copyright (c) 2013-2022 Nikita Koksharov
|
||||
*
|
||||
* Licensed 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.redisson.client.protocol.decoder;
|
||||
|
||||
import org.redisson.api.search.query.Document;
|
||||
import org.redisson.api.search.query.SearchResult;
|
||||
import org.redisson.client.handler.State;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Nikita Koksharov
|
||||
*
|
||||
*/
|
||||
public class SearchResultDecoderV2 implements MultiDecoder<Object> {
|
||||
|
||||
@Override
|
||||
public Object decode(List<Object> parts, State state) {
|
||||
if (parts.isEmpty()) {
|
||||
return new SearchResult(0, Collections.emptyList());
|
||||
}
|
||||
|
||||
Map<String, Object> m = new HashMap<>();
|
||||
for (int i = 0; i < parts.size(); i++) {
|
||||
if (i % 2 != 0) {
|
||||
m.put(parts.get(i-1).toString(), parts.get(i));
|
||||
}
|
||||
}
|
||||
|
||||
List<Document> docs = new ArrayList<>();
|
||||
List<Map<String, Object>> results = (List<Map<String, Object>>) m.get("results");
|
||||
for (Map<String, Object> result : results) {
|
||||
String id = (String) result.get("id");
|
||||
Map<String, Object> attrs = (Map<String, Object>) result.get("extra_attributes");
|
||||
docs.add(new Document(id, attrs));
|
||||
}
|
||||
Long total = (Long) m.get("total_results");
|
||||
return new SearchResult(total, docs);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
/**
|
||||
* Copyright (c) 2013-2022 Nikita Koksharov
|
||||
*
|
||||
* Licensed 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.redisson.config;
|
||||
|
||||
/**
|
||||
* Redis protocol version
|
||||
*
|
||||
* @author Nikita Koksharov
|
||||
*
|
||||
*/
|
||||
public enum Protocol {
|
||||
|
||||
RESP2,
|
||||
|
||||
RESP3
|
||||
|
||||
}
|
Loading…
Reference in New Issue