diff --git a/velox/functions/sparksql/SplitFunctions.cpp b/velox/functions/sparksql/SplitFunctions.cpp index dfc22bcb14690..f5303aaccc2fe 100644 --- a/velox/functions/sparksql/SplitFunctions.cpp +++ b/velox/functions/sparksql/SplitFunctions.cpp @@ -42,17 +42,17 @@ class Split final : public exec::VectorFunction { exec::VectorWriter> resultWriter; resultWriter.init(*result->as()); int64_t limit = std::numeric_limits::max(); - if (!noLimit) { - limit = limits->valueAt(0); - if (limit <= 0) { - limit = std::numeric_limits::max(); - } - } // Optimization for the (flat, const, const) case. if (strings->isIdentityMapping() and delims->isConstantMapping() and (noLimit or limits->isConstantMapping())) { const auto* rawStrings = strings->data(); const auto delim = delims->valueAt(0); + if (!noLimit) { + limit = limits->valueAt(0); + if (limit <= 0) { + limit = std::numeric_limits::max(); + } + } rows.applyToSelected([&](vector_size_t row) { if (delim.size() == 0) { splitEmptyDelimer(rawStrings[row], limit, row, resultWriter); @@ -65,6 +65,12 @@ class Split final : public exec::VectorFunction { // direct access. rows.applyToSelected([&](vector_size_t row) { const auto delim = delims->valueAt(row); + if (!noLimit) { + limit = limits->valueAt(row); + if (limit <= 0) { + limit = std::numeric_limits::max(); + } + } if (delim.size() == 0) { splitEmptyDelimer( strings->valueAt(row), limit, row, resultWriter);