From 307cda1c73cb32ebb7f8a4f12c31a952f4956477 Mon Sep 17 00:00:00 2001 From: WeiXinChan Date: Tue, 22 Apr 2025 15:21:58 +0800 Subject: [PATCH] support hot only --- .../impl/execute/query/ObTableQuery.java | 25 ++++++++++ .../impl/execute/query/ObTableQueryFlag.java | 46 +++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 src/main/java/com/alipay/oceanbase/rpc/protocol/payload/impl/execute/query/ObTableQueryFlag.java diff --git a/src/main/java/com/alipay/oceanbase/rpc/protocol/payload/impl/execute/query/ObTableQuery.java b/src/main/java/com/alipay/oceanbase/rpc/protocol/payload/impl/execute/query/ObTableQuery.java index 190fa736..f0906521 100644 --- a/src/main/java/com/alipay/oceanbase/rpc/protocol/payload/impl/execute/query/ObTableQuery.java +++ b/src/main/java/com/alipay/oceanbase/rpc/protocol/payload/impl/execute/query/ObTableQuery.java @@ -79,6 +79,8 @@ public class ObTableQuery extends AbstractPayload { protected ObKVParams obKVParams = null; + protected ObTableQueryFlag flag = new ObTableQueryFlag(0); + public void adjustStartKey(List key) throws IllegalArgumentException { List keyRanges = getKeyRanges(); for (ObNewRange range : keyRanges) { @@ -239,6 +241,10 @@ public byte[] encode() { idx += len; } + len = Serialization.getNeedBytes(flag.getValue()); + System.arraycopy(Serialization.encodeVi64(flag.getValue()), 0, bytes, idx, len); + idx += len; + return bytes; } @@ -304,6 +310,10 @@ public Object decode(ByteBuf buf) { obKVParams = new ObKVParams(); this.obKVParams.decode(buf); } + + long tmpFlag = Serialization.decodeVi64(buf); + this.flag.setValue(tmpFlag); + return this; } @@ -349,6 +359,9 @@ public long getPayloadContentSize() { for (ObTableAggregationSingle obTableAggregationSingle : aggregations) { contentSize += obTableAggregationSingle.getPayloadSize(); } + + contentSize += Serialization.getNeedBytes(flag.getValue()); + return contentSize; } @@ -579,4 +592,16 @@ public ObKVParams getObKVParams() { } public boolean isFTSQuery() { return isFTSQuery; } + + public ObTableQueryFlag getFlag() { + return flag; + } + + public void setFlag(ObTableQueryFlag flag) { + this.flag = flag; + } + + public void setHotOnly(boolean hotOnly) { + this.flag.setHotOnly(hotOnly); + } } diff --git a/src/main/java/com/alipay/oceanbase/rpc/protocol/payload/impl/execute/query/ObTableQueryFlag.java b/src/main/java/com/alipay/oceanbase/rpc/protocol/payload/impl/execute/query/ObTableQueryFlag.java new file mode 100644 index 00000000..4209ab44 --- /dev/null +++ b/src/main/java/com/alipay/oceanbase/rpc/protocol/payload/impl/execute/query/ObTableQueryFlag.java @@ -0,0 +1,46 @@ +/*- + * #%L + * com.oceanbase:obkv-table-client + * %% + * Copyright (C) 2021 - 2025 OceanBase + * %% + * OBKV Table Client Framework is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + * #L% + */ + +package com.alipay.oceanbase.rpc.protocol.payload.impl.execute.query; + +public class ObTableQueryFlag { + private static final int HOT_ONLY = 1 << 0; + + private long value = 0; + + public ObTableQueryFlag(long value) { + this.value = value; + } + + public long getValue() { + return value; + } + + public void setValue(long value) { + this.value = value; + } + + public boolean isHotOnly() { + return (value & HOT_ONLY) != 0; + } + + public void setHotOnly(boolean hotOnly) { + if (hotOnly) { + value = value | HOT_ONLY; + } + } +};