[ https://issues.apache.org/jira/browse/PHOENIX-1705?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14364506#comment-14364506 ]
James Taylor commented on PHOENIX-1705: --------------------------------------- Looking good, [~Dumindux]. Would you mind reviewing, [~samarthjain]? Here's some minor feedback: - Add local variables for getting the PDataType rather than repeating these long expressions here: {code} + public ArrayAppendFunction(List<Expression> children) throws TypeMismatchException { + + super(children); + if(!children.get(1).getDataType().equals(PDataType.fromTypeId(children.get(0).getDataType().getSqlType() + - PDataType.ARRAY_TYPE_BASE))){ {code} - Remove any System.out.println from code. - Move this code from evaluate to the top of the method implementation - no need to do a bunch of work beforehand if you're just going to return anyway: {code} + if (!arrayExpr.evaluate(tuple, ptr)) { + return false; + } else if (ptr.getLength() == 0) { + return true; + } {code} - Not sure I understand this code from evaluate. What's that for? {code} + if (baseType.isFixedWidth()) + { + int arrayElementLength=getMaxLength()==null?baseType.getByteSize():getMaxLength(); + + if(ptr.getLength()>arrayElementLength) + { + return false; + } + + } {code} - Take a look at the SignFunctionTest added by [~shuxi0ng] for a good way to get test coverage by directly instantiating your built-in function. These tests will run much faster than end2end tests, as we don't need a mini cluster to be spun up. - Make sure to rebase your patch on the latest, as ExpressionType has changed with some new built-in function implementations. - The test I referred to before would test when the offsets we store for a variable length array can no longer fit in a short. You'd want to build up a big array and then call append on it at the point where this would occur. Doing this in a lower level unit test (i.e. not end2end) would make the most sense, to test your PArrayDataType.appendItemToArray() function directly. It's the logic that determines the useInt local variable in that method. > 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 > > -- This message was sent by Atlassian JIRA (v6.3.4#6332)