[ https://issues.apache.org/jira/browse/HIVE-5520?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13792957#comment-13792957 ]
Hive QA commented on HIVE-5520: ------------------------------- {color:green}Overall{color}: +1 all checks pass Here are the results of testing the latest attachment: https://issues.apache.org/jira/secure/attachment/12608033/HIVE-5520.1.patch {color:green}SUCCESS:{color} +1 4392 tests passed Test results: https://builds.apache.org/job/PreCommit-HIVE-Build/1107/testReport Console output: https://builds.apache.org/job/PreCommit-HIVE-Build/1107/console Messages: {noformat} Executing org.apache.hive.ptest.execution.PrepPhase Executing org.apache.hive.ptest.execution.ExecutionPhase Executing org.apache.hive.ptest.execution.ReportingPhase {noformat} This message is automatically generated. > Use factory methods to instantiate HiveDecimal instead of constructors > ---------------------------------------------------------------------- > > Key: HIVE-5520 > URL: https://issues.apache.org/jira/browse/HIVE-5520 > Project: Hive > Issue Type: Improvement > Components: Types > Affects Versions: 0.11.0 > Reporter: Xuefu Zhang > Assignee: Xuefu Zhang > Fix For: 0.13.0 > > Attachments: HIVE-5520.1.patch, HIVE-5520.patch > > > Currently HiveDecimal class provided a bunch of constructors that > unfortunately also throws a runtime exception. For example, > {code} > public HiveDecimal(BigInteger unscaled, int scale) { > bd = this.normalize(new BigDecimal(unscaled, scale), MAX_PRECISION, > false); > if (bd == null) { > throw new NumberFormatException("Assignment would result in truncation"); > } > {code} > As a result, it's hard for the caller to detect error occurrences and the > error handling is also complicated. In many cases, the error handling is > omitted or missed. For instance, > {code} > HiveDecimalWritable result = new > HiveDecimalWritable(HiveDecimal.ZERO); > try { > result.set(aggregation.sum.divide(new > HiveDecimal(aggregation.count))); > } catch (NumberFormatException e) { > result = null; > } > {code} > Throwing runtime exception while expecting caller to catch seems > anti-pattern. In the case of constructor, factory class or methods seem more > appropriate. With such a change, the apis are cleaner, and the error handling > is simplified. -- This message was sent by Atlassian JIRA (v6.1#6144)