[
https://issues.apache.org/jira/browse/PHOENIX-538?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14512230#comment-14512230
]
Hadoop QA commented on PHOENIX-538:
-----------------------------------
{color:red}-1 overall{color}. Here are the results of testing the latest
attachment
http://issues.apache.org/jira/secure/attachment/12728124/PHOENIX-538_v6.patch
against master branch at commit 235735872bd171c10b3676ad0be6fe958a12e7a3.
ATTACHMENT ID: 12728124
{color:green}+1 @author{color}. The patch does not contain any @author
tags.
{color:green}+1 tests included{color}. The patch appears to include 6 new
or modified tests.
{color:green}+1 javac{color}. The applied patch does not increase the
total number of javac compiler warnings.
{color:red}-1 javadoc{color}. The javadoc tool appears to have generated 3
warning messages.
{color:green}+1 release audit{color}. The applied patch does not increase
the total number of release audit warnings.
{color:red}-1 lineLengths{color}. The patch introduces the following lines
longer than 100:
+java_cmd = 'java -cp "' + phoenix_utils.hbase_conf_dir + os.pathsep +
phoenix_utils.phoenix_client_jar + os.pathsep + phoenix_utils.hadoop_common_jar
+ os.pathsep + phoenix_utils.hadoop_hdfs_jar + \
+ .append(" public boolean evaluate(Tuple tuple,
ImmutableBytesWritable ptr) {\n")
+ .append(" int nBytes =
StringUtil.getBytesInChar(source[sourceOffset], sortOrder);\n")
+ .append(" System.arraycopy(source,
sourceOffset, target, targetOffset, nBytes);\n")
+ .append(" public boolean evaluate(Tuple tuple,
ImmutableBytesWritable ptr) {\n")
+ private static String MY_REVERSE_PROGRAM =
getProgram(MY_REVERSE_CLASS_NAME, STRING_REVERSE_EVALUATE_METHOD, "PVarchar");
+ private static String MY_SUM_PROGRAM = getProgram(MY_SUM_CLASS_NAME,
SUM_COLUMN_VALUES_EVALUATE_METHOD, "PInteger");
+ .append(" public "+className+"(List<Expression> children)
throws SQLException {\n")
+ conn.createStatement().execute("create table t(k integer primary key,
firstname varchar, lastname varchar)");
+ stmt.execute("create function myreverse(VARCHAR) returns VARCHAR as
'org.apache.phoenix.end2end."+MY_REVERSE_CLASS_NAME+"' using jar "
{color:green}+1 core tests{color}. The patch passed unit tests in .
{color:red}-1 core zombie tests{color}. There are 1 zombie test(s):
at org.apache.hadoop.hdfs.TestCrcCorruption.thistest(TestCrcCorruption.java:271)
at
org.apache.hadoop.hdfs.TestCrcCorruption.testCrcCorruption(TestCrcCorruption.java:295)
Test results:
https://builds.apache.org/job/PreCommit-PHOENIX-Build/23//testReport/
Javadoc warnings:
https://builds.apache.org/job/PreCommit-PHOENIX-Build/23//artifact/patchprocess/patchJavadocWarnings.txt
Console output:
https://builds.apache.org/job/PreCommit-PHOENIX-Build/23//console
This message is automatically generated.
> Support UDFs
> ------------
>
> Key: PHOENIX-538
> URL: https://issues.apache.org/jira/browse/PHOENIX-538
> Project: Phoenix
> Issue Type: Task
> Reporter: James Taylor
> Assignee: Rajeshbabu Chintaguntla
> Fix For: 5.0.0, 4.4.0
>
> Attachments: PHOENIX-538-wip.patch, PHOENIX-538_v1.patch,
> PHOENIX-538_v2.patch, PHOENIX-538_v3.patch, PHOENIX-538_v4.patch,
> PHOENIX-538_v5.patch, PHOENIX-538_v6.patch, PHOENIX-538_v6.patch
>
>
> Phoenix allows built-in functions to be added (as described
> [here](http://phoenix-hbase.blogspot.com/2013/04/how-to-add-your-own-built-in-function.html))
> with the restriction that they must be in the phoenix jar. We should improve
> on this and allow folks to declare new functions through a CREATE FUNCTION
> command like this:
> CREATE FUNCTION mdHash(anytype)
> RETURNS binary(16)
> LOCATION 'hdfs://path-to-my-jar' 'com.me.MDHashFunction'
> Since HBase supports loading jars dynamically, this would not be too
> difficult. The function implementation class would be required to extend our
> ScalarFunction base class. Here's how I could see it being implemented:
> * modify the phoenix grammar to support the new CREATE FUNCTION syntax
> * create a new UTFParseNode class to capture the parse state
> * add a new method to the MetaDataProtocol interface
> * add a new method in ConnectionQueryServices to invoke the MetaDataProtocol
> method
> * add a new method in MetaDataClient to invoke the ConnectionQueryServices
> method
> * persist functions in a new "SYSTEM.FUNCTION" table
> * add a new client-side representation to cache functions called PFunction
> * modify ColumnResolver to dynamically resolve a function in the same way we
> dynamically resolve and load a table
> * create and register a new ExpressionType called UDFExpression
> * at parse time, check for the function name in the built in list first (as
> is currently done), and if not found in the PFunction cache. If not found
> there, then use the new UDFExpression as a placeholder and have the
> ColumnResolver attempt to resolve it at compile time and throw an error if
> unsuccessful.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)