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

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

Thanks for the revisions, [~Dumindux]. The reason to do error checking in the 
constructor that may also be done in evaluate it to catch errors at compile 
time instead of runtime. Compile-time occurs once per statement, while evaluate 
is executed once per row. We have more information at runtime, so we can detect 
if a VARCHAR is too big to fit into a CHAR(10) field then for example. At 
compile time, though, we can detect that a CHAR(15) is too big to fit into a 
CHAR(10) without even executing the query, so this is always much better.

For your latest patch, you'll want to replace this check in the constructor:
{code}
+        if (getBaseType().equals(PChar.INSTANCE) && 
getArrayExpr().getMaxLength() != null && getElementExpr().getMaxLength() != 
null &&
+                (getElementExpr().getMaxLength() > 
getArrayExpr().getMaxLength())) {
+            throw new DataExceedsCapacityException("Input element max length 
greater than max length of an array element");
+        }
{code}
with a call to PDataType.isSizeCompatible(). It does a similar check, but will 
also check that the precision and scale of the element being appended fit into 
the array given it's constraints (so, no, you shouldn't check only for the CHAR 
type - always better to go through the general abstraction as new types may be 
added later that have different constraint checks).

> 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, 
> PHOENIX-1705_implement_ARRAY_APPEND_built_in_function9.patch
>
>




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

Reply via email to