From 8804d3df89de2f42fa0f9269ef26402828c5d0b1 Mon Sep 17 00:00:00 2001 From: Jacob Khaliqi Date: Wed, 3 Dec 2025 11:04:45 -0800 Subject: [PATCH] fix(native): Fix inserting decimal type values precision and scale --- .../main/types/PrestoToVeloxQueryPlan.cpp | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/presto-native-execution/presto_cpp/main/types/PrestoToVeloxQueryPlan.cpp b/presto-native-execution/presto_cpp/main/types/PrestoToVeloxQueryPlan.cpp index a2c445d19d5f0..014d860241e6a 100644 --- a/presto-native-execution/presto_cpp/main/types/PrestoToVeloxQueryPlan.cpp +++ b/presto-native-execution/presto_cpp/main/types/PrestoToVeloxQueryPlan.cpp @@ -35,6 +35,7 @@ #include "presto_cpp/main/operators/ShuffleRead.h" #include "presto_cpp/main/operators/ShuffleWrite.h" #include "presto_cpp/main/types/TypeParser.h" +#include "velox/connectors/hive/HiveDataSink.h" #include "velox/exec/TraceUtil.h" using namespace facebook::velox; @@ -75,6 +76,19 @@ RowTypePtr toRowType( return ROW(std::move(names), std::move(types)); } +RowTypePtr toRowType( + const std::vector& variables, + const std::vector& types) { + VELOX_CHECK_EQ(types.size(), variables.size()); + std::vector names; + names.reserve(variables.size()); + for (const auto& variable : variables) { + names.emplace_back(variable.name); + } + + return ROW(std::move(names), std::move(types)); +} + std::shared_ptr toColumnHandle( const protocol::ColumnHandle* column, const TypeParser& typeParser) { @@ -1526,9 +1540,18 @@ VeloxQueryPlanConverterBase::toVeloxQueryPlan( sourceVeloxPlan, tableWriteInfo, taskId); + + std::vector tableTypes; + auto inputColumns = + std::dynamic_pointer_cast( + insertTableHandle->connectorInsertTableHandle()) + ->inputColumns(); + for (const auto& inputColumn : inputColumns) { + tableTypes.emplace_back(inputColumn->dataType()); + } return std::make_shared( node->id, - toRowType(node->columns, typeParser_), + toRowType(node->columns, tableTypes), node->columnNames, columnStatsSpec, std::move(insertTableHandle),