{"record":{"id":"73b73052776ce918","repo":"prestodb/presto","slug":"division-by-zero-73b730","errorCode":"DIVISION_BY_ZERO","errorMessage":"Division by zero","messagePattern":"Division by zero","errorType":"error_code","errorClass":"PrestoException","httpStatus":null,"severity":"error","filePath":"presto-main-base/src/main/java/com/facebook/presto/type/DecimalOperators.java","lineNumber":345,"sourceCode":"                            .withExtraParameters(DecimalOperators::divideRescaleFactor)))\n                .build();\n    }\n\n    private static List<Object> divideRescaleFactor(PolymorphicScalarFunctionBuilder.SpecializeContext context)\n    {\n        DecimalType returnType = (DecimalType) context.getReturnType();\n        int dividendScale = toIntExact(requireNonNull(context.getLiteral(\"a_scale\"), \"a_scale is null\"));\n        int divisorScale = toIntExact(requireNonNull(context.getLiteral(\"b_scale\"), \"b_scale is null\"));\n        int resultScale = returnType.getScale();\n        int rescaleFactor = resultScale - dividendScale + divisorScale;\n        return ImmutableList.of(rescaleFactor);\n    }\n\n    @UsedByGeneratedCode\n    public static long divideShortShortShort(long dividend, long divisor, int rescaleFactor)\n    {\n        if (divisor == 0) {\n            throw new PrestoException(DIVISION_BY_ZERO, \"Division by zero\");\n        }\n\n        if (dividend == 0) {\n            return 0;\n        }\n\n        int resultSignum = signum(dividend) * signum(divisor);\n\n        long unsignedDividend = abs(dividend);\n        long unsignedDivisor = abs(divisor);\n\n        long rescaledUnsignedDividend = unsignedDividend * longTenToNth(rescaleFactor);\n        long quotient = rescaledUnsignedDividend / unsignedDivisor;\n        long remainder = rescaledUnsignedDividend - (quotient * unsignedDivisor);\n\n        if (Long.compareUnsigned(remainder * 2, unsignedDivisor) >= 0) {\n            quotient++;\n        }","sourceCodeStart":327,"sourceCodeEnd":363,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-main-base/src/main/java/com/facebook/presto/type/DecimalOperators.java#L327-L363","documentation":"Arithmetic error from decimal division (divideShortShortShort): the divisor is zero, so the division cannot proceed. Unlike integer division, decimal division checks the zero divisor explicitly and reports Division by zero with NUMERIC_VALUE_OUT_OF_RANGE.","triggerScenarios":"Thrown at presto-main-base/src/main/java/com/facebook/presto/type/DecimalOperators.java:345 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Filter or guard zero divisors: CASE WHEN b = 0 THEN NULL ELSE a/b END","Clean the data so decimal divisor columns contain no zeros","Use try(a / b) to return NULL on division by zero"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"55bb57d202de3b926896fa966c2c4a44c779634e","analyzedAt":"2026-09-04T12:50:26.162Z","contentChangedAt":"2026-09-04T12:50:26.162Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}