[ 
https://issues.apache.org/jira/browse/PHOENIX-1705?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14379336#comment-14379336
 ] 

James Taylor commented on PHOENIX-1705:
---------------------------------------

bq. If this is moved up ptr will be pointed to array rather than the element. 
But there are some operations which are done using ptr to the element(such as 
padding, size checking, coercing). So how do we go about that?
The ptr is set when evaluate is called. You never need to call evaluate on the 
element if you're returning, so do the array evaluation first. After evaluating 
the arrayElementExpr, set local variables for the byte[], offset, and length. 
Then evaluate the elementExpr and ptr will be set to that for the reset of the 
method.

bq. if (!elementDataType.isCastableTo(baseType)) is changed to 
(!baseType.isCoercibleTo(elementDataType)) cases like following fails where an 
integer added to a double array.
Do the other way around (sorry - had the wrong in my previous message): 
elementDataType.isCoercibleTo(baseType). You want to make sure that the element 
being added can be coerced to the type of the elements in the array.

bq. here dataType.getMaxLength() needs an object passed in as an argument
Don't use the PDataType.getMaxLength(Object), use the arrayExpr.getMaxLength(), 
and elementExpr.getMaxLength(). Only do the max length check if 
baseType.isFixedWidth() is true.

- Don't use member variables for these, as you'd need to re-establish them when 
the function is serialized and executed on the server. In that case, the 
default constructor is used and readFields() sets the children member 
variables. In this case, just create a getElementExpr() and getArrayExpr() 
methods and call them once in evaluate. Same with baseType.
{code}
+        elementExpr = children.get(1);
+        arrayExpr = children.get(0);
+        baseType = PDataType.arrayBaseType(arrayExpr.getDataType());
+        elementDataType = elementExpr.getDataType();
{code}

> implement ARRAY_APPEND built in function
> ----------------------------------------
>
>                 Key: PHOENIX-1705
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-1705
>             Project: Phoenix
>          Issue Type: Sub-task
>            Reporter: Dumindu Buddhika
>            Assignee: Dumindu Buddhika
>         Attachments: 
> PHOENIX-1705_implement_ARRAY_APPEND_built_in_function.patch, 
> PHOENIX-1705_implement_ARRAY_APPEND_built_in_function.patch, 
> PHOENIX-1705_implement_ARRAY_APPEND_built_in_function1.patch, 
> PHOENIX-1705_implement_ARRAY_APPEND_built_in_function2.patch, 
> PHOENIX-1705_implement_ARRAY_APPEND_built_in_function3.patch, 
> PHOENIX-1705_implement_ARRAY_APPEND_built_in_function4.patch, 
> PHOENIX-1705_implement_ARRAY_APPEND_built_in_function5.patch, 
> PHOENIX-1705_implement_ARRAY_APPEND_built_in_function6.patch, 
> PHOENIX-1705_implement_ARRAY_APPEND_built_in_function7.patch, 
> PHOENIX-1705_implement_ARRAY_APPEND_built_in_function8.patch
>
>




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to