You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ja...@apache.org on 2017/11/15 18:47:57 UTC

[02/37] phoenix git commit: PHOENIX-4294 Allow scalar function to declare that it's not thread safe

PHOENIX-4294 Allow scalar function to declare that it's not thread safe


Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/e2351ef4
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/e2351ef4
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/e2351ef4

Branch: refs/heads/4.x-HBase-1.1
Commit: e2351ef4a23ef63747fede4b80859d7b2f7f34f4
Parents: 7d2c1ed
Author: James Taylor <jt...@salesforce.com>
Authored: Wed Oct 18 09:28:31 2017 -0700
Committer: James Taylor <jt...@salesforce.com>
Committed: Wed Nov 15 10:39:19 2017 -0800

----------------------------------------------------------------------
 .../apache/phoenix/expression/function/ScalarFunction.java  | 9 +++++++++
 .../phoenix/expression/visitor/CloneExpressionVisitor.java  | 2 +-
 2 files changed, 10 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/e2351ef4/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ScalarFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ScalarFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ScalarFunction.java
index 4f44cde..2a5fe44 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ScalarFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ScalarFunction.java
@@ -87,4 +87,13 @@ public abstract class ScalarFunction extends FunctionExpression {
     public KeyPart newKeyPart(KeyPart childPart) {
         return null;
     }
+    
+    /**
+     * Used to determine if the same ScalarFunction instance may be
+     * used by multiple threads. 
+     * @return true if function is thread safe and false otherwise.
+     */
+    public boolean isThreadSafe() {
+        return true;
+    }
 }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/e2351ef4/phoenix-core/src/main/java/org/apache/phoenix/expression/visitor/CloneExpressionVisitor.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/visitor/CloneExpressionVisitor.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/visitor/CloneExpressionVisitor.java
index e47fb64..c6d7c9e 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/visitor/CloneExpressionVisitor.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/visitor/CloneExpressionVisitor.java
@@ -110,7 +110,7 @@ public abstract class CloneExpressionVisitor extends TraverseAllExpressionVisito
 
     @Override
     public Expression visitLeave(ScalarFunction node, List<Expression> l) {
-        return isCloneNode(node, l) ? node.clone(l) : node;
+        return isCloneNode(node, l) || !node.isThreadSafe() ? node.clone(l) : node;
     }
 
     public Expression visitLeave(UDFExpression node, List<Expression> l) {