[ https://issues.apache.org/jira/browse/CALCITE-5735?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Tanner Clary resolved CALCITE-5735. ----------------------------------- Fix Version/s: 1.36.0 Resolution: Fixed Merged via [1b8dc60|https://github.com/apache/calcite/commit/1b8dc60b7673d83445f06ecaebd5f89dfd5781f6]. Thanks for all the reviews [~julianhyde][~zoudan] > Add SAFE_MULTIPLY function (enabled for BigQuery) > ------------------------------------------------- > > Key: CALCITE-5735 > URL: https://issues.apache.org/jira/browse/CALCITE-5735 > Project: Calcite > Issue Type: Sub-task > Reporter: Tanner Clary > Assignee: Tanner Clary > Priority: Major > Labels: pull-request-available > Fix For: 1.36.0 > > > BigQuery offers the {{SAFE_MULTIPLY(value1, value2)}} function which returns > the result of {{value1}} * {{value2}}. If overflow occurs, null is returned. > The correct return type may be inferred according to the [BigQuery > docs|https://cloud.google.com/bigquery/docs/reference/standard-sql/mathematical_functions#safe_multiply]. > > BigQuery treats all integer types as aliases for {{BIGINT}} (which BigQuery > calls {{INT64}}. Therefore, all integer types (and the result of their > multiplication) should be treated as {{BIGINT}}. This means, for example, > multiplying two {{TINYINT}} that would cause {{TINYINT}} overflow, would be > okay as long as the result does not also cause {{BIGINT}} overflow. > {{BIGINT}} translates to Java's {{LONG}} whose bounds are used to determine > whether overflow has occurred. > BigQuery also supports {{Decimal}} and {{BigDecimal}} types, which maps to > Calcite's {{DECIMAL}} type. Their overflow is determined using their > precision and scale, and if they exceed BigQuery's limits, then overflow has > occurred. Because Calcite does not differentiate between {{DECIMAL}} and > {{BIGDECIMAL}}, there are only 9 possible combinations of operand types, > although the chart linked above has 16. > BigQuery's {{FLOAT64}} maps to Java's {{DOUBLE}} and it's {{MAX_VALUE}} and > {{MIN_VALUE}} are used to determine whether overflow has occurred. > Any questions about this implementation are welcomed and appreciated. -- This message was sent by Atlassian Jira (v8.20.10#820010)