This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.1 by this push:
new d7f60c5ef1d [Cherry-pick](branch 2.1)[Enhancement] support
last_query_id function (#41025)
d7f60c5ef1d is described below
commit d7f60c5ef1df5d916e350938e243e2c6382a3821
Author: Vallish Pai <[email protected]>
AuthorDate: Fri Sep 20 11:37:39 2024 +0530
[Cherry-pick](branch 2.1)[Enhancement] support last_query_id function
(#41025)
## Proposed changes
Issue Number: close #xxx
backport #40739
---
.../doris/catalog/BuiltinScalarFunctions.java | 4 +-
.../expression/rules/FoldConstantRuleOnFE.java | 16 +++++-
.../expressions/functions/scalar/LastQueryId.java | 59 ++++++++++++++++++++++
.../expressions/visitor/ScalarFunctionVisitor.java | 5 ++
.../java/org/apache/doris/qe/ConnectContext.java | 8 +++
.../suites/query_p0/system/test_query_sys.groovy | 2 +
6 files changed, 92 insertions(+), 2 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java
b/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java
index 306870fa666..ded6f764e0f 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java
@@ -253,6 +253,7 @@ import
org.apache.doris.nereids.trees.expressions.functions.scalar.JsonbValid;
import org.apache.doris.nereids.trees.expressions.functions.scalar.L1Distance;
import org.apache.doris.nereids.trees.expressions.functions.scalar.L2Distance;
import org.apache.doris.nereids.trees.expressions.functions.scalar.LastDay;
+import org.apache.doris.nereids.trees.expressions.functions.scalar.LastQueryId;
import org.apache.doris.nereids.trees.expressions.functions.scalar.Least;
import org.apache.doris.nereids.trees.expressions.functions.scalar.Left;
import org.apache.doris.nereids.trees.expressions.functions.scalar.Length;
@@ -906,7 +907,8 @@ public class BuiltinScalarFunctions implements
FunctionHelper {
scalar(YearsAdd.class, "years_add"),
scalar(YearsDiff.class, "years_diff"),
scalar(YearsSub.class, "years_sub"),
- scalar(MultiMatch.class, "multi_match"));
+ scalar(MultiMatch.class, "multi_match"),
+ scalar(LastQueryId.class, "last_query_id"));
public static final BuiltinScalarFunctions INSTANCE = new
BuiltinScalarFunctions();
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnFE.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnFE.java
index 8c1b5538205..54ea6969988 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnFE.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnFE.java
@@ -20,6 +20,7 @@ package org.apache.doris.nereids.rules.expression.rules;
import org.apache.doris.catalog.EncryptKey;
import org.apache.doris.catalog.Env;
import org.apache.doris.cluster.ClusterNamespace;
+import org.apache.doris.common.util.DebugUtil;
import org.apache.doris.nereids.exceptions.AnalysisException;
import org.apache.doris.nereids.rules.expression.AbstractExpressionRewriteRule;
import org.apache.doris.nereids.rules.expression.ExpressionListenerMatcher;
@@ -62,6 +63,7 @@ import
org.apache.doris.nereids.trees.expressions.functions.scalar.Database;
import org.apache.doris.nereids.trees.expressions.functions.scalar.Date;
import
org.apache.doris.nereids.trees.expressions.functions.scalar.EncryptKeyRef;
import org.apache.doris.nereids.trees.expressions.functions.scalar.If;
+import org.apache.doris.nereids.trees.expressions.functions.scalar.LastQueryId;
import org.apache.doris.nereids.trees.expressions.functions.scalar.Password;
import org.apache.doris.nereids.trees.expressions.functions.scalar.User;
import org.apache.doris.nereids.trees.expressions.functions.scalar.Version;
@@ -83,6 +85,7 @@ import org.apache.doris.nereids.types.coercion.DateLikeType;
import org.apache.doris.nereids.util.ExpressionUtils;
import org.apache.doris.qe.ConnectContext;
import org.apache.doris.qe.GlobalVariable;
+import org.apache.doris.thrift.TUniqueId;
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
@@ -164,7 +167,8 @@ public class FoldConstantRuleOnFE extends
AbstractExpressionRewriteRule
matches(Password.class, this::visitPassword),
matches(Array.class, this::visitArray),
matches(Date.class, this::visitDate),
- matches(Version.class, this::visitVersion)
+ matches(Version.class, this::visitVersion),
+ matches(LastQueryId.class, this::visitLastQueryId)
);
}
@@ -326,6 +330,16 @@ public class FoldConstantRuleOnFE extends
AbstractExpressionRewriteRule
return new VarcharLiteral(res);
}
+ @Override
+ public Expression visitLastQueryId(LastQueryId queryId,
ExpressionRewriteContext context) {
+ String res = "Not Available";
+ TUniqueId id =
context.cascadesContext.getConnectContext().getLastQueryId();
+ if (id != null) {
+ res = DebugUtil.printId(id);
+ }
+ return new VarcharLiteral(res);
+ }
+
@Override
public Expression visitConnectionId(ConnectionId connectionId,
ExpressionRewriteContext context) {
return new
BigIntLiteral(context.cascadesContext.getConnectContext().getConnectionId());
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/LastQueryId.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/LastQueryId.java
new file mode 100644
index 00000000000..61ef773e2ca
--- /dev/null
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/LastQueryId.java
@@ -0,0 +1,59 @@
+// 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.doris.nereids.trees.expressions.functions.scalar;
+
+import org.apache.doris.catalog.FunctionSignature;
+import org.apache.doris.nereids.trees.expressions.functions.AlwaysNotNullable;
+import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
+import org.apache.doris.nereids.trees.expressions.shape.LeafExpression;
+import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
+import org.apache.doris.nereids.types.VarcharType;
+
+import com.google.common.collect.ImmutableList;
+
+import java.util.List;
+
+/**
+ * ScalarFunction 'last_query_id'.
+ */
+public class LastQueryId extends ScalarFunction
+ implements LeafExpression, ExplicitlyCastableSignature,
AlwaysNotNullable {
+
+ public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
+ FunctionSignature.ret(VarcharType.SYSTEM_DEFAULT).args()
+ );
+
+ public LastQueryId() {
+ super("last_query_id", ImmutableList.of());
+ }
+
+ @Override
+ public List<FunctionSignature> getSignatures() {
+ return SIGNATURES;
+ }
+
+ @Override
+ public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
+ return visitor.visitLastQueryId(this, context);
+ }
+
+ @Override
+ public boolean isDeterministic() {
+ return false;
+ }
+}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java
index d7eeb2e0006..bfca1a11585 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java
@@ -256,6 +256,7 @@ import
org.apache.doris.nereids.trees.expressions.functions.scalar.JsonbValid;
import org.apache.doris.nereids.trees.expressions.functions.scalar.L1Distance;
import org.apache.doris.nereids.trees.expressions.functions.scalar.L2Distance;
import org.apache.doris.nereids.trees.expressions.functions.scalar.LastDay;
+import org.apache.doris.nereids.trees.expressions.functions.scalar.LastQueryId;
import org.apache.doris.nereids.trees.expressions.functions.scalar.Least;
import org.apache.doris.nereids.trees.expressions.functions.scalar.Left;
import org.apache.doris.nereids.trees.expressions.functions.scalar.Length;
@@ -2157,4 +2158,8 @@ public interface ScalarFunctionVisitor<R, C> {
default R visitMultiMatch(MultiMatch multiMatch, C context) {
return visitScalarFunction(multiMatch, context);
}
+
+ default R visitLastQueryId(LastQueryId queryId, C context) {
+ return visitScalarFunction(queryId, context);
+ }
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java
b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java
index 12036991e0c..2eca9fdedbc 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java
@@ -112,6 +112,7 @@ public class ConnectContext {
protected volatile TUniqueId queryId = null;
protected volatile String traceId;
+ protected volatile TUniqueId lastQueryId = null;
// id for this connection
protected volatile int connectionId;
// Timestamp when the connection is make
@@ -864,6 +865,9 @@ public class ConnectContext {
}
public void setQueryId(TUniqueId queryId) {
+ if (this.queryId != null) {
+ this.lastQueryId = this.queryId.deepCopy();
+ }
this.queryId = queryId;
if (connectScheduler != null && !Strings.isNullOrEmpty(traceId)) {
connectScheduler.putTraceId2QueryId(traceId, queryId);
@@ -882,6 +886,10 @@ public class ConnectContext {
return queryId;
}
+ public TUniqueId getLastQueryId() {
+ return lastQueryId;
+ }
+
public String getSqlHash() {
return sqlHash;
}
diff --git a/regression-test/suites/query_p0/system/test_query_sys.groovy
b/regression-test/suites/query_p0/system/test_query_sys.groovy
index b17500a0ccb..9fbe5e8435a 100644
--- a/regression-test/suites/query_p0/system/test_query_sys.groovy
+++ b/regression-test/suites/query_p0/system/test_query_sys.groovy
@@ -42,6 +42,8 @@ suite("test_query_sys", "query,p0") {
sql "select pi();"
sql "select e();"
sql "select sleep(2);"
+ sql "select last_query_id();"
+ sql "select LAST_QUERY_ID();"
// INFORMATION_SCHEMA
sql "SELECT table_name FROM INFORMATION_SCHEMA.TABLES where
table_schema=\"test_query_db\" and TABLE_TYPE = \"BASE TABLE\" order by
table_name"
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]