DRILL-978: Consider output type when we cost matching FunctionCall to FunctionHolder
Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/9e7b14a5 Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/9e7b14a5 Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/9e7b14a5 Branch: refs/heads/master Commit: 9e7b14a559e9361e7b6a43cd625571c0c3a72b2e Parents: c8db346 Author: Mehant Baid <[email protected]> Authored: Thu Jun 12 18:09:57 2014 -0700 Committer: Jacques Nadeau <[email protected]> Committed: Mon Jun 16 12:44:28 2014 -0700 ---------------------------------------------------------------------- .../org/apache/drill/exec/expr/fn/DrillFuncHolder.java | 8 ++++++++ .../org/apache/drill/exec/resolver/TypeCastRules.java | 10 ++++++++++ 2 files changed, 18 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/9e7b14a5/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/DrillFuncHolder.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/DrillFuncHolder.java b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/DrillFuncHolder.java index bbe76de..fd687af 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/DrillFuncHolder.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/DrillFuncHolder.java @@ -293,4 +293,12 @@ public abstract class DrillFuncHolder { } } + + public boolean matchInputOutputType() { + return false; + } + + public MajorType getReturnType() { + return returnValue.type; + } } http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/9e7b14a5/exec/java-exec/src/main/java/org/apache/drill/exec/resolver/TypeCastRules.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/resolver/TypeCastRules.java b/exec/java-exec/src/main/java/org/apache/drill/exec/resolver/TypeCastRules.java index 5c5ff80..854342c 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/resolver/TypeCastRules.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/resolver/TypeCastRules.java @@ -794,6 +794,16 @@ public class TypeCastRules { // number of arguments that could implicitly casts using precedence map or didn't require casting at all int nCasts = 0; + // Check if the function holder requires the input type and output type to match + if (holder.matchInputOutputType() == true) { + MinorType outputType = holder.getReturnType(call.args).getMinorType(); + for (int i = 0; i < holder.getParamCount(); i++) { + if (call.args.get(i).getMajorType().getMinorType() != outputType) { + return -1; + } + } + } + for (int i = 0; i < holder.getParamCount(); i++) { MajorType argType = call.args.get(i).getMajorType(); MajorType parmType = holder.getParmMajorType(i);
